_ZN4i18n12phonenumbers21alternate_format_sizeEv:
 1602|      1|int alternate_format_size() {
 1603|      1|  return sizeof(data) / sizeof(data[0]);
 1604|      1|}
_ZN4i18n12phonenumbers20alternate_format_getEv:
 1606|      1|const void* alternate_format_get() {
 1607|      1|  return data;
 1608|      1|}

_ZN4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  225|      4|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|      4|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|      4|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIKNS0_21AbstractRegExpFactoryEEC2Ev:
   35|      4|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEE3getEv:
  276|      1|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEE3getEv:
  159|  1.30M|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers10scoped_ptrINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|      2|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|      2|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|      2|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_11RegExpCacheEEC2Ev:
   35|      2|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  225|     23|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|     23|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|     23|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIKNS0_6RegExpEEC2Ev:
   35|     23|  DefaultDeleter() {}
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEED2Ev:
  125|   601k|  ~scoped_ptr_impl() {
  126|   601k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 601k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|   601k|      static_cast<D&>(data_)(data_.ptr);
  130|   601k|    }
  131|   601k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterINS0_11RegExpInputEEclEPS2_:
   54|   601k|  inline void operator()(T* ptr) const {
   55|   601k|    enum { type_must_be_complete = sizeof(T) };
   56|   601k|    delete ptr;
   57|   601k|  }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_6LoggerENS0_14DefaultDeleterIS2_EEE3getEv:
  276|      1|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_6LoggerENS0_14DefaultDeleterIS2_EEE3getEv:
  159|      1|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEptEv:
  272|   650k|  element_type* operator->() const  {
  273|   650k|    assert(impl_.get() != NULL);
  274|   650k|    return impl_.get();
  275|   650k|  }
_ZN4i18n12phonenumbers10scoped_ptrINS0_6LoggerENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_6LoggerENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_6LoggerENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_6LoggerEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_10MatcherApiEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_29PhoneNumberRegExpsAndMappingsEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEE4DataC2EPSH_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEC2EPSG_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEC2EPSG_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEE4DataC2EPSG_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEC2EPSK_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEC2EPSK_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEE4DataC2EPSK_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEE4DataC2EPSH_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEEptEv:
  272|  2.12k|  element_type* operator->() const  {
  273|  2.12k|    assert(impl_.get() != NULL);
  274|  2.12k|    return impl_.get();
  275|  2.12k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEE3getEv:
  159|  4.24k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEptEv:
  272|   424k|  element_type* operator->() const  {
  273|   424k|    assert(impl_.get() != NULL);
  274|   424k|    return impl_.get();
  275|   424k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEE3getEv:
  159|   849k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEptEv:
  272|     25|  element_type* operator->() const  {
  273|     25|    assert(impl_.get() != NULL);
  274|     25|    return impl_.get();
  275|     25|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEE3getEv:
  159|     50|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEEptEv:
  272|   179k|  element_type* operator->() const  {
  273|   179k|    assert(impl_.get() != NULL);
  274|   179k|    return impl_.get();
  275|   179k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEE3getEv:
  159|   359k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEEptEv:
  272|  1.19M|  element_type* operator->() const  {
  273|  1.19M|    assert(impl_.get() != NULL);
  274|  1.19M|    return impl_.get();
  275|  1.19M|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEE3getEv:
  159|  2.39M|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers10scoped_ptrINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|   601k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|   601k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|   601k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_11RegExpInputEEC2Ev:
   35|   601k|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEEptEv:
  272|   864k|  element_type* operator->() const  {
  273|   864k|    assert(impl_.get() != NULL);
  274|   864k|    return impl_.get();
  275|   864k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEE3getEv:
  159|  1.72M|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEE3getEv:
  276|   684k|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEE3getEv:
  159|   820k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEEptEv:
  272|   402k|  element_type* operator->() const  {
  273|   402k|    assert(impl_.get() != NULL);
  274|   402k|    return impl_.get();
  275|   402k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEE3getEv:
  159|   805k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEEptEv:
  272|  68.2k|  element_type* operator->() const  {
  273|  68.2k|    assert(impl_.get() != NULL);
  274|  68.2k|    return impl_.get();
  275|  68.2k|  }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEEdeEv:
  268|   108k|  element_type& operator*() const {
  269|   108k|    assert(impl_.get() != NULL);
  270|   108k|    return *impl_.get();
  271|   108k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEE3getEv:
  159|   216k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEdeEv:
  268|      2|  element_type& operator*() const {
  269|      2|    assert(impl_.get() != NULL);
  270|      2|    return *impl_.get();
  271|      2|  }
_ZN4i18n12phonenumbers10scoped_ptrINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEEC2EPSJ_:
  225|      3|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEEC2EPSJ_:
  101|      3|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEE4DataC2EPSJ_:
  188|      3|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEEEC2Ev:
   35|      3|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEEptEv:
  272|   904k|  element_type* operator->() const  {
  273|   904k|    assert(impl_.get() != NULL);
  274|   904k|    return impl_.get();
  275|   904k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEE3getEv:
  159|  1.80M|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEEC2Ev:
  222|  9.37k|  scoped_ptr() : impl_(NULL) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|  9.37k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|  9.37k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexPatternEEC2Ev:
   35|  9.37k|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE5resetEPS3_:
  264|  11.7k|  void reset(element_type* p = NULL) { impl_.reset(p); }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE5resetEPS3_:
  133|  11.7k|  void reset(T* p) {
  134|       |    // This is a self-reset, which is no longer allowed: http://crbug.com/162971
  135|  11.7k|    if (p != NULL && p == data_.ptr)
  ------------------
  |  Branch (135:9): [True: 7.04k, False: 4.67k]
  |  Branch (135:22): [True: 0, False: 7.04k]
  ------------------
  136|      0|      abort();
  137|       |
  138|       |    // Note that running data_.ptr = p can lead to undefined behavior if
  139|       |    // get_deleter()(get()) deletes this. In order to pevent this, reset()
  140|       |    // should update the stored pointer before deleting its old value.
  141|       |    //
  142|       |    // However, changing reset() to use that behavior may cause current code to
  143|       |    // break in unexpected ways. If the destruction of the owned object
  144|       |    // dereferences the scoped_ptr when it is destroyed by a call to reset(),
  145|       |    // then it will incorrectly dispatch calls to |p| rather than the original
  146|       |    // value of |data_.ptr|.
  147|       |    //
  148|       |    // During the transition period, set the stored pointer to NULL while
  149|       |    // deleting the object. Eventually, this safety check will be removed to
  150|       |    // prevent the scenario initially described from occuring and
  151|       |    // http://crbug.com/176091 can be closed.
  152|  11.7k|    T* old = data_.ptr;
  153|  11.7k|    data_.ptr = NULL;
  154|  11.7k|    if (old != NULL)
  ------------------
  |  Branch (154:9): [True: 0, False: 11.7k]
  ------------------
  155|      0|      static_cast<D&>(data_)(old);
  156|  11.7k|    data_.ptr = p;
  157|  11.7k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexPatternEEclEPS3_:
   54|  5.94k|  inline void operator()(T* ptr) const {
   55|  5.94k|    enum { type_must_be_complete = sizeof(T) };
   56|  5.94k|    delete ptr;
   57|  5.94k|  }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEED2Ev:
  125|  8.27k|  ~scoped_ptr_impl() {
  126|  8.27k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 5.94k, False: 2.33k]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  5.94k|      static_cast<D&>(data_)(data_.ptr);
  130|  5.94k|    }
  131|  8.27k|  }
_ZNK4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE3getEv:
  276|  1.58M|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE3getEv:
  159|  4.74M|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEEptEv:
  272|  1.58M|  element_type* operator->() const  {
  273|  1.58M|    assert(impl_.get() != NULL);
  274|  1.58M|    return impl_.get();
  275|  1.58M|  }
_ZN4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  225|  1.58M|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|  1.58M|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|  1.58M|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexMatcherEEC2Ev:
   35|  1.58M|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEEptEv:
  272|  2.71M|  element_type* operator->() const  {
  273|  2.71M|    assert(impl_.get() != NULL);
  274|  2.71M|    return impl_.get();
  275|  2.71M|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEE3getEv:
  159|  5.43M|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEED2Ev:
  125|  1.58M|  ~scoped_ptr_impl() {
  126|  1.58M|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 1.58M, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  1.58M|      static_cast<D&>(data_)(data_.ptr);
  130|  1.58M|    }
  131|  1.58M|  }
_ZNK4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexMatcherEEclEPS3_:
   54|  1.58M|  inline void operator()(T* ptr) const {
   55|  1.58M|    enum { type_must_be_complete = sizeof(T) };
   56|  1.58M|    delete ptr;
   57|  1.58M|  }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEED2Ev:
  125|  8.27k|  ~scoped_ptr_impl() {
  126|  8.27k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 0, False: 8.27k]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|      0|      static_cast<D&>(data_)(data_.ptr);
  130|      0|    }
  131|  8.27k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterINS0_16PhoneNumberMatchEEclEPS2_:
   54|  4.99k|  inline void operator()(T* ptr) const {
   55|  4.99k|    enum { type_must_be_complete = sizeof(T) };
   56|  4.99k|    delete ptr;
   57|  4.99k|  }
_ZNK4i18n12phonenumbers10scoped_ptrINSt3__16vectorIPKNS0_6RegExpENS2_9allocatorIS6_EEEENS0_14DefaultDeleterIS9_EEEptEv:
  272|   148k|  element_type* operator->() const  {
  273|   148k|    assert(impl_.get() != NULL);
  274|   148k|    return impl_.get();
  275|   148k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorIPKNS0_6RegExpENS2_9allocatorIS6_EEEENS0_14DefaultDeleterIS9_EEE3getEv:
  159|   297k|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers10scoped_ptrINSt3__16vectorIPKNS0_6RegExpENS2_9allocatorIS6_EEEENS0_14DefaultDeleterIS9_EEEC2EPS9_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorIPKNS0_6RegExpENS2_9allocatorIS6_EEEENS0_14DefaultDeleterIS9_EEEC2EPS9_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorIPKNS0_6RegExpENS2_9allocatorIS6_EEEENS0_14DefaultDeleterIS9_EEE4DataC2EPS9_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINSt3__16vectorIPKNS0_6RegExpENS2_9allocatorIS6_EEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|  8.27k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|  8.27k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|  8.27k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_16PhoneNumberMatchEEC2Ev:
   35|  8.27k|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEE5resetEPS2_:
  264|  9.99k|  void reset(element_type* p = NULL) { impl_.reset(p); }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEE5resetEPS2_:
  133|  9.99k|  void reset(T* p) {
  134|       |    // This is a self-reset, which is no longer allowed: http://crbug.com/162971
  135|  9.99k|    if (p != NULL && p == data_.ptr)
  ------------------
  |  Branch (135:9): [True: 4.99k, False: 4.99k]
  |  Branch (135:22): [True: 0, False: 4.99k]
  ------------------
  136|      0|      abort();
  137|       |
  138|       |    // Note that running data_.ptr = p can lead to undefined behavior if
  139|       |    // get_deleter()(get()) deletes this. In order to pevent this, reset()
  140|       |    // should update the stored pointer before deleting its old value.
  141|       |    //
  142|       |    // However, changing reset() to use that behavior may cause current code to
  143|       |    // break in unexpected ways. If the destruction of the owned object
  144|       |    // dereferences the scoped_ptr when it is destroyed by a call to reset(),
  145|       |    // then it will incorrectly dispatch calls to |p| rather than the original
  146|       |    // value of |data_.ptr|.
  147|       |    //
  148|       |    // During the transition period, set the stored pointer to NULL while
  149|       |    // deleting the object. Eventually, this safety check will be removed to
  150|       |    // prevent the scenario initially described from occuring and
  151|       |    // http://crbug.com/176091 can be closed.
  152|  9.99k|    T* old = data_.ptr;
  153|  9.99k|    data_.ptr = NULL;
  154|  9.99k|    if (old != NULL)
  ------------------
  |  Branch (154:9): [True: 4.99k, False: 4.99k]
  ------------------
  155|  4.99k|      static_cast<D&>(data_)(old);
  156|  9.99k|    data_.ptr = p;
  157|  9.99k|  }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEEptEv:
  272|  4.99k|  element_type* operator->() const  {
  273|  4.99k|    assert(impl_.get() != NULL);
  274|  4.99k|    return impl_.get();
  275|  4.99k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEE3getEv:
  159|  19.9k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_16PhoneNumberMatchENS0_14DefaultDeleterIS2_EEEdeEv:
  268|  4.99k|  element_type& operator*() const {
  269|  4.99k|    assert(impl_.get() != NULL);
  270|  4.99k|    return *impl_.get();
  271|  4.99k|  }

_ZN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE11GetInstanceEv:
   30|  8.27k|  static T* GetInstance() {
   31|  8.27k|    const int ret = pthread_once(&once_control_, &Init);
   32|  8.27k|    (void) ret;
   33|  8.27k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  8.27k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  8.27k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   34|  8.27k|    return instance_;
   35|  8.27k|  }
_ZN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE4InitEv:
   38|      1|  static void Init() {
   39|      1|    instance_ = new T();
   40|      1|  }
_ZN4i18n12phonenumbers9SingletonINS0_25PhoneNumberMatcherRegExpsEE11GetInstanceEv:
   30|  8.27k|  static T* GetInstance() {
   31|  8.27k|    const int ret = pthread_once(&once_control_, &Init);
   32|  8.27k|    (void) ret;
   33|  8.27k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  8.27k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  8.27k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   34|  8.27k|    return instance_;
   35|  8.27k|  }
_ZN4i18n12phonenumbers9SingletonINS0_25PhoneNumberMatcherRegExpsEE4InitEv:
   38|      1|  static void Init() {
   39|      1|    instance_ = new T();
   40|      1|  }
_ZN4i18n12phonenumbers9SingletonINS0_16AlternateFormatsEE11GetInstanceEv:
   30|  8.27k|  static T* GetInstance() {
   31|  8.27k|    const int ret = pthread_once(&once_control_, &Init);
   32|  8.27k|    (void) ret;
   33|  8.27k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  8.27k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  8.27k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   34|  8.27k|    return instance_;
   35|  8.27k|  }
_ZN4i18n12phonenumbers9SingletonINS0_16AlternateFormatsEE4InitEv:
   38|      1|  static void Init() {
   39|      1|    instance_ = new T();
   40|      1|  }

_ZN4i18n12phonenumbers8AutoLockC2ERNS0_4LockE:
   40|   451k|  AutoLock(Lock& lock) : lock_(lock) {
   41|   451k|    lock_.Acquire();
   42|   451k|  }
_ZN4i18n12phonenumbers8AutoLockD2Ev:
   44|   451k|  ~AutoLock() {
   45|   451k|    lock_.Release();
   46|   451k|  }

_ZN4i18n12phonenumbers4LockC2Ev:
   30|      3|  Lock() {
   31|      3|    const int ret = pthread_mutex_init(&mutex_, NULL);
   32|      3|    (void) ret;
   33|      3|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|      3|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|      3|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   34|      3|  }
_ZNK4i18n12phonenumbers4Lock7AcquireEv:
   46|   451k|  void Acquire() const {
   47|   451k|    int ret = pthread_mutex_lock(&mutex_);
   48|   451k|    (void) ret;
   49|   451k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|   451k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|   451k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   50|   451k|  }
_ZNK4i18n12phonenumbers4Lock7ReleaseEv:
   52|   451k|  void Release() const {
   53|   451k|    int ret = pthread_mutex_unlock(&mutex_);
   54|   451k|    (void) ret;
   55|   451k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|   451k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|   451k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   56|   451k|  }

_ZN4i18n12phonenumbers20NewPermanentCallbackIbRKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKNS8_6vectorISE_NSC_ISE_EEEEEEPNS0_15ResultCallback4IT_T0_T1_T2_T3_EEPFSN_SO_SP_SQ_SR_E:
   73|  4.30k|    R (*function)(A1, A2, A3, A4)) {
   74|  4.30k|  return new FunctionCallback4<R, A1, A2, A3, A4>(function);
   75|  4.30k|}
_ZN4i18n12phonenumbers17FunctionCallback4IbRKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKNS8_6vectorISE_NSC_ISE_EEEEEC2EPFbS4_S7_SG_SL_E:
   40|  4.30k|  explicit FunctionCallback4(FunctionType* function) : function_(function) {}
_ZN4i18n12phonenumbers15ResultCallback4IbRKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKNS8_6vectorISE_NSC_ISE_EEEEED2Ev:
   31|  7.95k|  virtual ~ResultCallback4() {}
_ZN4i18n12phonenumbers17FunctionCallback4IbRKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKNS8_6vectorISE_NSC_ISE_EEEEE3RunES4_S7_SG_SL_:
   43|  11.6k|  virtual R Run(A1 a1, A2 a2, A3 a3, A4 a4) {
   44|  11.6k|    return function_(a1, a2, a3, a4);
   45|  11.6k|  }
_ZN4i18n12phonenumbers20NewPermanentCallbackINS0_18PhoneNumberMatcherEbRKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKNS9_6vectorISF_NSD_ISF_EEEEEEPNS0_15ResultCallback4IT0_T1_T2_T3_T4_EEPKT_MSV_KFSO_SP_SQ_SR_SS_E:
   81|  3.64k|    R (T::*method)(A1, A2, A3, A4) const) {
   82|  3.64k|  return new ConstMethodCallback4<T, R, A1, A2, A3, A4>(instance, method);
   83|  3.64k|}
_ZN4i18n12phonenumbers20ConstMethodCallback4INS0_18PhoneNumberMatcherEbRKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKNS9_6vectorISF_NSD_ISF_EEEEEC2EPKS2_MS2_KFbS5_S8_SH_SM_E:
   58|  3.64k|    : instance_(instance),
   59|  3.64k|      method_(method) {}
_ZN4i18n12phonenumbers20ConstMethodCallback4INS0_18PhoneNumberMatcherEbRKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKNS9_6vectorISF_NSD_ISF_EEEEE3RunES5_S8_SH_SM_:
   62|  8.59k|  virtual R Run(A1 a1, A2 a2, A3 a3, A4 a4) {
   63|  8.59k|    return (instance_->*method_)(a1, a2, a3, a4);
   64|  8.59k|  }

_ZN4i18n12phonenumbers13LoggerHandlerC2EPNS0_6LoggerE:
   56|   106k|  LoggerHandler(Logger* impl) : impl_(impl) {}
_ZN4i18n12phonenumbers13LoggerHandlerD2Ev:
   58|   106k|  ~LoggerHandler() {
   59|   106k|    if (impl_) {
  ------------------
  |  Branch (59:9): [True: 2.33k, False: 104k]
  ------------------
   60|  2.33k|      impl_->WriteMessage("\n");
   61|  2.33k|    }
   62|   106k|  }
_ZN4i18n12phonenumbers3LOGEi:
   76|   106k|inline LoggerHandler LOG(int n) {
   77|   106k|  Logger* const logger_impl = Logger::mutable_logger_impl();
   78|   106k|  if (logger_impl->level() < n) {
  ------------------
  |  Branch (78:7): [True: 104k, False: 2.33k]
  ------------------
   79|   104k|    return LoggerHandler(NULL);
   80|   104k|  }
   81|  2.33k|  logger_impl->WriteLevel();
   82|  2.33k|  return LoggerHandler(logger_impl);
   83|   106k|}
_ZN4i18n12phonenumbers4VLOGEi:
   85|  98.0k|inline LoggerHandler VLOG(int n) {
   86|       |  // VLOG(1) is the next logging level after LOG(DEBUG).
   87|  98.0k|  n += LOG_DEBUG;
   88|  98.0k|  return LOG(n);
   89|  98.0k|}
_ZN4i18n12phonenumbers13LoggerHandlerlsIA29_cEERS1_RKT_:
   65|     81|  LoggerHandler& operator<<(const T& value) {
   66|     81|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 81]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     81|    return *this;
   70|     81|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEERS1_RKT_:
   65|  36.6k|  LoggerHandler& operator<<(const T& value) {
   66|  36.6k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 2.33k, False: 34.2k]
  ------------------
   67|  2.33k|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|  2.33k|    }
   69|  36.6k|    return *this;
   70|  36.6k|  }
_ZN4i18n12phonenumbers15ConvertToStringINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE6DoWorkERKS8_:
   38|  2.33k|  static inline string DoWork(const T& s) {
   39|  2.33k|    return string(s);
   40|  2.33k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA33_cEERS1_RKT_:
   65|     49|  LoggerHandler& operator<<(const T& value) {
   66|     49|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 49]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     49|    return *this;
   70|     49|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA12_cEERS1_RKT_:
   65|     49|  LoggerHandler& operator<<(const T& value) {
   66|     49|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 49]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     49|    return *this;
   70|     49|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA36_cEERS1_RKT_:
   65|  8.47k|  LoggerHandler& operator<<(const T& value) {
   66|  8.47k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 8.47k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  8.47k|    return *this;
   70|  8.47k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA46_cEERS1_RKT_:
   65|  3.60k|  LoggerHandler& operator<<(const T& value) {
   66|  3.60k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 3.60k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  3.60k|    return *this;
   70|  3.60k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA39_cEERS1_RKT_:
   65|  6.43k|  LoggerHandler& operator<<(const T& value) {
   66|  6.43k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 6.43k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  6.43k|    return *this;
   70|  6.43k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA31_cEERS1_RKT_:
   65|  11.6k|  LoggerHandler& operator<<(const T& value) {
   66|  11.6k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 11.6k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  11.6k|    return *this;
   70|  11.6k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA55_cEERS1_RKT_:
   65|  11.7k|  LoggerHandler& operator<<(const T& value) {
   66|  11.7k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 11.7k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  11.7k|    return *this;
   70|  11.7k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA54_cEERS1_RKT_:
   65|  6.02k|  LoggerHandler& operator<<(const T& value) {
   66|  6.02k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 6.02k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  6.02k|    return *this;
   70|  6.02k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA60_cEERS1_RKT_:
   65|  15.9k|  LoggerHandler& operator<<(const T& value) {
   66|  15.9k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 15.9k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  15.9k|    return *this;
   70|  15.9k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA10_cEERS1_RKT_:
   65|  17.4k|  LoggerHandler& operator<<(const T& value) {
   66|  17.4k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 17.4k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  17.4k|    return *this;
   70|  17.4k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA28_cEERS1_RKT_:
   65|    147|  LoggerHandler& operator<<(const T& value) {
   66|    147|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 147]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    147|    return *this;
   70|    147|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA30_cEERS1_RKT_:
   65|    291|  LoggerHandler& operator<<(const T& value) {
   66|    291|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 291]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    291|    return *this;
   70|    291|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA32_cEERS1_RKT_:
   65|  34.2k|  LoggerHandler& operator<<(const T& value) {
   66|  34.2k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 34.2k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  34.2k|    return *this;
   70|  34.2k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA41_cEERS1_RKT_:
   65|  1.21k|  LoggerHandler& operator<<(const T& value) {
   66|  1.21k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 1.21k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  1.21k|    return *this;
   70|  1.21k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA26_cEERS1_RKT_:
   65|     53|  LoggerHandler& operator<<(const T& value) {
   66|     53|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 53]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     53|    return *this;
   70|     53|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA17_cEERS1_RKT_:
   65|    130|  LoggerHandler& operator<<(const T& value) {
   66|    130|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 130]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    130|    return *this;
   70|    130|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA59_cEERS1_RKT_:
   65|     89|  LoggerHandler& operator<<(const T& value) {
   66|     89|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 89]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     89|    return *this;
   70|     89|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA11_cEERS1_RKT_:
   65|     89|  LoggerHandler& operator<<(const T& value) {
   66|     89|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 89]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     89|    return *this;
   70|     89|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA27_cEERS1_RKT_:
   65|    320|  LoggerHandler& operator<<(const T& value) {
   66|    320|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 320]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    320|    return *this;
   70|    320|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA61_cEERS1_RKT_:
   65|  1.44k|  LoggerHandler& operator<<(const T& value) {
   66|  1.44k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 1.44k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  1.44k|    return *this;
   70|  1.44k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA49_cEERS1_RKT_:
   65|    754|  LoggerHandler& operator<<(const T& value) {
   66|    754|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 754]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    754|    return *this;
   70|    754|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA43_cEERS1_RKT_:
   65|  2.58k|  LoggerHandler& operator<<(const T& value) {
   66|  2.58k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 2.58k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  2.58k|    return *this;
   70|  2.58k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA37_cEERS1_RKT_:
   65|  2.33k|  LoggerHandler& operator<<(const T& value) {
   66|  2.33k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 2.33k, False: 0]
  ------------------
   67|  2.33k|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|  2.33k|    }
   69|  2.33k|    return *this;
   70|  2.33k|  }
_ZN4i18n12phonenumbers15ConvertToStringIA37_cE6DoWorkERA37_Kc:
   38|  2.33k|  static inline string DoWork(const T& s) {
   39|  2.33k|    return string(s);
   40|  2.33k|  }

_ZN4i18n12phonenumbers13EncodingUtils14DecodeUTF8CharEPKcPi:
   30|  92.5k|  static inline int DecodeUTF8Char(const char* in, char32* out) {
   31|  92.5k|    Rune r;
   32|  92.5k|    int len = chartorune(&r, in);
   33|  92.5k|    *out = r;
   34|  92.5k|    return len;
   35|  92.5k|  }
_ZN4i18n12phonenumbers13EncodingUtils23AdvanceOneUTF8CharacterEPKc:
   37|  49.3k|  static const char* AdvanceOneUTF8Character(const char* buf_utf8) {
   38|  49.3k|      return buf_utf8 + UniLib::OneCharLen(buf_utf8);
   39|  49.3k|  }
_ZN4i18n12phonenumbers13EncodingUtils22BackUpOneUTF8CharacterEPKcS3_:
   42|  43.1k|                                            const char* end) {
   43|  45.6k|    while (start < end && UniLib::IsTrailByte(*--end)) {}
  ------------------
  |  Branch (43:12): [True: 45.6k, False: 0]
  |  Branch (43:27): [True: 2.54k, False: 43.1k]
  ------------------
   44|  43.1k|    return end;
   45|  43.1k|  }

_ZN4i18n12phonenumbers6LoggerC2Ev:
   49|      1|  Logger() : level_(LOG_ERROR) {}
_ZN4i18n12phonenumbers6Logger10WriteLevelEv:
   53|  2.33k|  virtual void WriteLevel() {}
_ZNK4i18n12phonenumbers6Logger5levelEv:
   60|   106k|  inline int level() const {
   61|   106k|    return level_;
   62|   106k|  }
_ZN4i18n12phonenumbers6Logger15set_logger_implEPS1_:
   77|      2|  static inline Logger* set_logger_impl(Logger* logger) {
   78|      2|    impl_ = logger;
   79|      2|    return logger;
   80|      2|  }
_ZN4i18n12phonenumbers6Logger19mutable_logger_implEv:
   82|   106k|  static inline Logger* mutable_logger_impl() {
   83|   106k|    return impl_;
   84|   106k|  }
_ZN4i18n12phonenumbers10NullLogger12WriteMessageERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   97|  7.00k|  virtual void WriteMessage(const string& /* msg */) {}

_ZN4i18n12phonenumbers13metadata_sizeEv:
15549|      1|int metadata_size() {
15550|      1|  return sizeof(data) / sizeof(data[0]);
15551|      1|}
_ZN4i18n12phonenumbers12metadata_getEv:
15553|      1|const void* metadata_get() {
15554|      1|  return data;
15555|      1|}

_ZN4i18n12phonenumbers13NormalizeUTF822NormalizeDecimalDigitsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   26|  56.7k|  static string NormalizeDecimalDigits(const string& number) {
   27|  56.7k|    string normalized;
   28|  56.7k|    UnicodeText number_as_unicode;
   29|  56.7k|    number_as_unicode.PointToUTF8(number.data(), static_cast<int>(number.size()));
   30|  56.7k|    if (!number_as_unicode.UTF8WasValid())
  ------------------
  |  Branch (30:9): [True: 0, False: 56.7k]
  ------------------
   31|      0|      return normalized; // Return an empty result to indicate an error
   32|  56.7k|    for (UnicodeText::const_iterator it = number_as_unicode.begin();
   33|   655k|         it != number_as_unicode.end();
  ------------------
  |  Branch (33:10): [True: 598k, False: 56.7k]
  ------------------
   34|   598k|         ++it) {
   35|   598k|      int32_t digitValue = u_charDigitValue(*it);
   36|   598k|      if (digitValue == -1) {
  ------------------
  |  Branch (36:11): [True: 23.8k, False: 575k]
  ------------------
   37|       |        // Not a decimal digit.
   38|  23.8k|        char utf8[4];
   39|  23.8k|        int len = it.get_utf8(utf8);
   40|  23.8k|        normalized.append(utf8, len);
   41|   575k|      } else {
   42|   575k|        normalized.push_back('0' + digitValue);
   43|   575k|      }
   44|   598k|    }
   45|  56.7k|    return normalized;
   46|  56.7k|  }

_ZN4i18n12phonenumbers12NumberFormatC2EPN6google8protobuf5ArenaE:
  121|  78.5k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
  122|  78.5k|  leading_digits_pattern_(arena) {
  123|  78.5k|  SharedCtor();
  124|  78.5k|  RegisterArenaDtor(arena);
  125|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.NumberFormat)
  126|  78.5k|}
_ZN4i18n12phonenumbers12NumberFormatD2Ev:
  165|  77.4k|NumberFormat::~NumberFormat() {
  166|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.NumberFormat)
  167|  77.4k|  SharedDtor();
  168|  77.4k|  _internal_metadata_.Delete<std::string>();
  169|  77.4k|}
_ZN4i18n12phonenumbers12NumberFormat14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
  221|  1.09k|const char* NumberFormat::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  222|  1.09k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  223|  1.09k|  _Internal::HasBits has_bits{};
  224|  5.00k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (224:10): [True: 3.91k, False: 1.09k]
  ------------------
  225|  3.91k|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
  226|  3.91k|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
  227|  3.91k|    CHK_(ptr);
  ------------------
  |  |  222|  3.91k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  228|  3.91k|    switch (tag >> 3) {
  229|       |      // required string pattern = 1;
  230|  1.09k|      case 1:
  ------------------
  |  Branch (230:7): [True: 1.09k, False: 2.82k]
  ------------------
  231|  1.09k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
  232|  1.09k|          auto str = _internal_mutable_pattern();
  233|  1.09k|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  234|  1.09k|          CHK_(ptr);
  ------------------
  |  |  222|  1.09k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  235|  1.09k|        } else goto handle_unusual;
  236|  1.09k|        continue;
  237|       |      // required string format = 2;
  238|  1.09k|      case 2:
  ------------------
  |  Branch (238:7): [True: 1.09k, False: 2.82k]
  ------------------
  239|  1.09k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
  240|  1.09k|          auto str = _internal_mutable_format();
  241|  1.09k|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  242|  1.09k|          CHK_(ptr);
  ------------------
  |  |  222|  1.09k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  243|  1.09k|        } else goto handle_unusual;
  244|  1.09k|        continue;
  245|       |      // repeated string leading_digits_pattern = 3;
  246|  1.09k|      case 3:
  ------------------
  |  Branch (246:7): [True: 1.08k, False: 2.83k]
  ------------------
  247|  1.08k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
  248|  1.08k|          ptr -= 1;
  249|  1.22k|          do {
  250|  1.22k|            ptr += 1;
  251|  1.22k|            auto str = _internal_add_leading_digits_pattern();
  252|  1.22k|            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  253|  1.22k|            CHK_(ptr);
  ------------------
  |  |  222|  1.22k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  254|  1.22k|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (254:17): [True: 519, False: 710]
  ------------------
  255|  1.22k|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
  ------------------
  |  Branch (255:20): [True: 149, False: 561]
  ------------------
  256|  1.08k|        } else goto handle_unusual;
  257|  1.08k|        continue;
  258|       |      // optional string national_prefix_formatting_rule = 4;
  259|  1.08k|      case 4:
  ------------------
  |  Branch (259:7): [True: 523, False: 3.39k]
  ------------------
  260|    523|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
  261|    523|          auto str = _internal_mutable_national_prefix_formatting_rule();
  262|    523|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  263|    523|          CHK_(ptr);
  ------------------
  |  |  222|    523|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  264|    523|        } else goto handle_unusual;
  265|    523|        continue;
  266|       |      // optional string domestic_carrier_code_formatting_rule = 5;
  267|    523|      case 5:
  ------------------
  |  Branch (267:7): [True: 55, False: 3.85k]
  ------------------
  268|     55|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
  269|     55|          auto str = _internal_mutable_domestic_carrier_code_formatting_rule();
  270|     55|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  271|     55|          CHK_(ptr);
  ------------------
  |  |  222|     55|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  272|     55|        } else goto handle_unusual;
  273|     55|        continue;
  274|       |      // optional bool national_prefix_optional_when_formatting = 6 [default = false];
  275|     74|      case 6:
  ------------------
  |  Branch (275:7): [True: 74, False: 3.84k]
  ------------------
  276|     74|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 48)) {
  277|     74|          _Internal::set_has_national_prefix_optional_when_formatting(&has_bits);
  278|     74|          national_prefix_optional_when_formatting_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
  279|     74|          CHK_(ptr);
  ------------------
  |  |  222|     74|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  280|     74|        } else goto handle_unusual;
  281|     74|        continue;
  282|     74|      default: {
  ------------------
  |  Branch (282:7): [True: 0, False: 3.91k]
  ------------------
  283|      0|      handle_unusual:
  284|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (284:13): [True: 0, False: 0]
  |  Branch (284:31): [True: 0, False: 0]
  ------------------
  285|      0|          ctx->SetLastTag(tag);
  286|      0|          goto success;
  287|      0|        }
  288|      0|        ptr = UnknownFieldParse(tag,
  289|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
  290|      0|            ptr, ctx);
  291|      0|        CHK_(ptr != nullptr);
  ------------------
  |  |  222|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  292|      0|        continue;
  293|      0|      }
  294|  3.91k|    }  // switch
  295|  3.91k|  }  // while
  296|  1.09k|success:
  297|  1.09k|  _has_bits_.Or(has_bits);
  298|  1.09k|  return ptr;
  299|      0|failure:
  300|      0|  ptr = nullptr;
  301|      0|  goto success;
  302|  1.09k|#undef CHK_
  303|  1.09k|}
_ZN4i18n12phonenumbers12NumberFormat9MergeFromERKS1_:
  442|  77.4k|void NumberFormat::MergeFrom(const NumberFormat& from) {
  443|       |// @@protoc_insertion_point(class_specific_merge_from_start:i18n.phonenumbers.NumberFormat)
  444|  77.4k|  GOOGLE_DCHECK_NE(&from, this);
  445|  77.4k|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
  446|  77.4k|  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  447|  77.4k|  (void) cached_has_bits;
  448|       |
  449|  77.4k|  leading_digits_pattern_.MergeFrom(from.leading_digits_pattern_);
  450|  77.4k|  cached_has_bits = from._has_bits_[0];
  451|  77.4k|  if (cached_has_bits & 0x0000001fu) {
  ------------------
  |  Branch (451:7): [True: 77.4k, False: 0]
  ------------------
  452|  77.4k|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (452:9): [True: 77.4k, False: 0]
  ------------------
  453|  77.4k|      _internal_set_pattern(from._internal_pattern());
  454|  77.4k|    }
  455|  77.4k|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (455:9): [True: 77.4k, False: 0]
  ------------------
  456|  77.4k|      _internal_set_format(from._internal_format());
  457|  77.4k|    }
  458|  77.4k|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (458:9): [True: 25.8k, False: 51.6k]
  ------------------
  459|  25.8k|      _internal_set_national_prefix_formatting_rule(from._internal_national_prefix_formatting_rule());
  460|  25.8k|    }
  461|  77.4k|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (461:9): [True: 49.1k, False: 28.2k]
  ------------------
  462|  49.1k|      _internal_set_domestic_carrier_code_formatting_rule(from._internal_domestic_carrier_code_formatting_rule());
  463|  49.1k|    }
  464|  77.4k|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (464:9): [True: 630, False: 76.8k]
  ------------------
  465|    630|      national_prefix_optional_when_formatting_ = from.national_prefix_optional_when_formatting_;
  466|    630|    }
  467|  77.4k|    _has_bits_[0] |= cached_has_bits;
  468|  77.4k|  }
  469|  77.4k|}
_ZNK4i18n12phonenumbers12NumberFormat13IsInitializedEv:
  478|  1.09k|bool NumberFormat::IsInitialized() const {
  479|  1.09k|  if (_Internal::MissingRequiredFields(_has_bits_)) return false;
  ------------------
  |  Branch (479:7): [True: 0, False: 1.09k]
  ------------------
  480|  1.09k|  return true;
  481|  1.09k|}
_ZN4i18n12phonenumbers15PhoneNumberDescC2EPN6google8protobuf5ArenaE:
  514|  3.04k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
  515|  3.04k|  possible_length_(arena),
  516|  3.04k|  possible_length_local_only_(arena) {
  517|  3.04k|  SharedCtor();
  518|  3.04k|  RegisterArenaDtor(arena);
  519|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneNumberDesc)
  520|  3.04k|}
_ZN4i18n12phonenumbers15PhoneNumberDescC2ERKS1_:
  522|  3.04k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(),
  523|  3.04k|      _has_bits_(from._has_bits_),
  524|  3.04k|      possible_length_(from.possible_length_),
  525|  3.04k|      possible_length_local_only_(from.possible_length_local_only_) {
  526|  3.04k|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
  527|  3.04k|  national_number_pattern_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  528|  3.04k|  if (from._internal_has_national_number_pattern()) {
  ------------------
  |  Branch (528:7): [True: 1.42k, False: 1.62k]
  ------------------
  529|  1.42k|    national_number_pattern_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_number_pattern(), 
  530|  1.42k|      GetArena());
  531|  1.42k|  }
  532|  3.04k|  example_number_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  533|  3.04k|  if (from._internal_has_example_number()) {
  ------------------
  |  Branch (533:7): [True: 1.14k, False: 1.90k]
  ------------------
  534|  1.14k|    example_number_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_example_number(), 
  535|  1.14k|      GetArena());
  536|  1.14k|  }
  537|       |  // @@protoc_insertion_point(copy_constructor:i18n.phonenumbers.PhoneNumberDesc)
  538|  3.04k|}
_ZN4i18n12phonenumbers15PhoneNumberDescD2Ev:
  546|  3.04k|PhoneNumberDesc::~PhoneNumberDesc() {
  547|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneNumberDesc)
  548|  3.04k|  SharedDtor();
  549|  3.04k|  _internal_metadata_.Delete<std::string>();
  550|  3.04k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
  594|  3.04k|const char* PhoneNumberDesc::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  595|  3.04k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  596|  3.04k|  _Internal::HasBits has_bits{};
  597|  8.37k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (597:10): [True: 5.32k, False: 3.04k]
  ------------------
  598|  5.32k|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
  599|  5.32k|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
  600|  5.32k|    CHK_(ptr);
  ------------------
  |  |  595|  5.32k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  601|  5.32k|    switch (tag >> 3) {
  602|       |      // optional string national_number_pattern = 2;
  603|  1.42k|      case 2:
  ------------------
  |  Branch (603:7): [True: 1.42k, False: 3.89k]
  ------------------
  604|  1.42k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
  605|  1.42k|          auto str = _internal_mutable_national_number_pattern();
  606|  1.42k|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  607|  1.42k|          CHK_(ptr);
  ------------------
  |  |  595|  1.42k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  608|  1.42k|        } else goto handle_unusual;
  609|  1.42k|        continue;
  610|       |      // optional string example_number = 6;
  611|  1.42k|      case 6:
  ------------------
  |  Branch (611:7): [True: 1.14k, False: 4.18k]
  ------------------
  612|  1.14k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
  613|  1.14k|          auto str = _internal_mutable_example_number();
  614|  1.14k|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  615|  1.14k|          CHK_(ptr);
  ------------------
  |  |  595|  1.14k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  616|  1.14k|        } else goto handle_unusual;
  617|  1.14k|        continue;
  618|       |      // repeated int32 possible_length = 9;
  619|  2.51k|      case 9:
  ------------------
  |  Branch (619:7): [True: 2.51k, False: 2.80k]
  ------------------
  620|  2.51k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 72)) {
  621|  2.51k|          ptr -= 1;
  622|  3.24k|          do {
  623|  3.24k|            ptr += 1;
  624|  3.24k|            _internal_add_possible_length(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
  625|  3.24k|            CHK_(ptr);
  ------------------
  |  |  595|  3.24k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  626|  3.24k|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (626:17): [True: 2.36k, False: 882]
  ------------------
  627|  3.24k|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<72>(ptr));
  ------------------
  |  Branch (627:20): [True: 732, False: 150]
  ------------------
  628|  2.51k|        } else if (static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 74) {
  ------------------
  |  Branch (628:20): [True: 0, False: 0]
  ------------------
  629|      0|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedInt32Parser(_internal_mutable_possible_length(), ptr, ctx);
  630|      0|          CHK_(ptr);
  ------------------
  |  |  595|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  631|      0|        } else goto handle_unusual;
  632|  2.51k|        continue;
  633|       |      // repeated int32 possible_length_local_only = 10;
  634|  2.51k|      case 10:
  ------------------
  |  Branch (634:7): [True: 242, False: 5.08k]
  ------------------
  635|    242|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 80)) {
  636|    242|          ptr -= 1;
  637|    354|          do {
  638|    354|            ptr += 1;
  639|    354|            _internal_add_possible_length_local_only(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
  640|    354|            CHK_(ptr);
  ------------------
  |  |  595|    354|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  641|    354|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (641:17): [True: 242, False: 112]
  ------------------
  642|    354|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<80>(ptr));
  ------------------
  |  Branch (642:20): [True: 112, False: 0]
  ------------------
  643|    242|        } else if (static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 82) {
  ------------------
  |  Branch (643:20): [True: 0, False: 0]
  ------------------
  644|      0|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedInt32Parser(_internal_mutable_possible_length_local_only(), ptr, ctx);
  645|      0|          CHK_(ptr);
  ------------------
  |  |  595|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  646|      0|        } else goto handle_unusual;
  647|    242|        continue;
  648|    242|      default: {
  ------------------
  |  Branch (648:7): [True: 0, False: 5.32k]
  ------------------
  649|      0|      handle_unusual:
  650|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (650:13): [True: 0, False: 0]
  |  Branch (650:31): [True: 0, False: 0]
  ------------------
  651|      0|          ctx->SetLastTag(tag);
  652|      0|          goto success;
  653|      0|        }
  654|      0|        ptr = UnknownFieldParse(tag,
  655|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
  656|      0|            ptr, ctx);
  657|      0|        CHK_(ptr != nullptr);
  ------------------
  |  |  595|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  658|      0|        continue;
  659|      0|      }
  660|  5.32k|    }  // switch
  661|  5.32k|  }  // while
  662|  3.04k|success:
  663|  3.04k|  _has_bits_.Or(has_bits);
  664|  3.04k|  return ptr;
  665|      0|failure:
  666|      0|  ptr = nullptr;
  667|      0|  goto success;
  668|  3.04k|#undef CHK_
  669|  3.04k|}
_ZN4i18n12phonenumbers13PhoneMetadataC2EPN6google8protobuf5ArenaE:
  996|    555|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
  997|    555|  number_format_(arena),
  998|    555|  intl_number_format_(arena) {
  999|    555|  SharedCtor();
 1000|    555|  RegisterArenaDtor(arena);
 1001|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneMetadata)
 1002|    555|}
_ZN4i18n12phonenumbers13PhoneMetadataC2ERKS1_:
 1004|    254|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(),
 1005|    254|      _has_bits_(from._has_bits_),
 1006|    254|      number_format_(from.number_format_),
 1007|    254|      intl_number_format_(from.intl_number_format_) {
 1008|    254|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
 1009|    254|  id_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1010|    254|  if (from._internal_has_id()) {
  ------------------
  |  Branch (1010:7): [True: 254, False: 0]
  ------------------
 1011|    254|    id_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_id(), 
 1012|    254|      GetArena());
 1013|    254|  }
 1014|    254|  international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1015|    254|  if (from._internal_has_international_prefix()) {
  ------------------
  |  Branch (1015:7): [True: 245, False: 9]
  ------------------
 1016|    245|    international_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_international_prefix(), 
 1017|    245|      GetArena());
 1018|    245|  }
 1019|    254|  national_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1020|    254|  if (from._internal_has_national_prefix()) {
  ------------------
  |  Branch (1020:7): [True: 144, False: 110]
  ------------------
 1021|    144|    national_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_prefix(), 
 1022|    144|      GetArena());
 1023|    144|  }
 1024|    254|  preferred_extn_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1025|    254|  if (from._internal_has_preferred_extn_prefix()) {
  ------------------
  |  Branch (1025:7): [True: 5, False: 249]
  ------------------
 1026|      5|    preferred_extn_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_preferred_extn_prefix(), 
 1027|      5|      GetArena());
 1028|      5|  }
 1029|    254|  national_prefix_for_parsing_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1030|    254|  if (from._internal_has_national_prefix_for_parsing()) {
  ------------------
  |  Branch (1030:7): [True: 150, False: 104]
  ------------------
 1031|    150|    national_prefix_for_parsing_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_prefix_for_parsing(), 
 1032|    150|      GetArena());
 1033|    150|  }
 1034|    254|  national_prefix_transform_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1035|    254|  if (from._internal_has_national_prefix_transform_rule()) {
  ------------------
  |  Branch (1035:7): [True: 32, False: 222]
  ------------------
 1036|     32|    national_prefix_transform_rule_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_prefix_transform_rule(), 
 1037|     32|      GetArena());
 1038|     32|  }
 1039|    254|  preferred_international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1040|    254|  if (from._internal_has_preferred_international_prefix()) {
  ------------------
  |  Branch (1040:7): [True: 25, False: 229]
  ------------------
 1041|     25|    preferred_international_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_preferred_international_prefix(), 
 1042|     25|      GetArena());
 1043|     25|  }
 1044|    254|  leading_digits_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1045|    254|  if (from._internal_has_leading_digits()) {
  ------------------
  |  Branch (1045:7): [True: 36, False: 218]
  ------------------
 1046|     36|    leading_digits_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_leading_digits(), 
 1047|     36|      GetArena());
 1048|     36|  }
 1049|    254|  if (from._internal_has_general_desc()) {
  ------------------
  |  Branch (1049:7): [True: 254, False: 0]
  ------------------
 1050|    254|    general_desc_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.general_desc_);
 1051|    254|  } else {
 1052|      0|    general_desc_ = nullptr;
 1053|      0|  }
 1054|    254|  if (from._internal_has_fixed_line()) {
  ------------------
  |  Branch (1054:7): [True: 254, False: 0]
  ------------------
 1055|    254|    fixed_line_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.fixed_line_);
 1056|    254|  } else {
 1057|      0|    fixed_line_ = nullptr;
 1058|      0|  }
 1059|    254|  if (from._internal_has_mobile()) {
  ------------------
  |  Branch (1059:7): [True: 254, False: 0]
  ------------------
 1060|    254|    mobile_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.mobile_);
 1061|    254|  } else {
 1062|      0|    mobile_ = nullptr;
 1063|      0|  }
 1064|    254|  if (from._internal_has_toll_free()) {
  ------------------
  |  Branch (1064:7): [True: 254, False: 0]
  ------------------
 1065|    254|    toll_free_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.toll_free_);
 1066|    254|  } else {
 1067|      0|    toll_free_ = nullptr;
 1068|      0|  }
 1069|    254|  if (from._internal_has_premium_rate()) {
  ------------------
  |  Branch (1069:7): [True: 254, False: 0]
  ------------------
 1070|    254|    premium_rate_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.premium_rate_);
 1071|    254|  } else {
 1072|      0|    premium_rate_ = nullptr;
 1073|      0|  }
 1074|    254|  if (from._internal_has_shared_cost()) {
  ------------------
  |  Branch (1074:7): [True: 254, False: 0]
  ------------------
 1075|    254|    shared_cost_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.shared_cost_);
 1076|    254|  } else {
 1077|      0|    shared_cost_ = nullptr;
 1078|      0|  }
 1079|    254|  if (from._internal_has_personal_number()) {
  ------------------
  |  Branch (1079:7): [True: 254, False: 0]
  ------------------
 1080|    254|    personal_number_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.personal_number_);
 1081|    254|  } else {
 1082|      0|    personal_number_ = nullptr;
 1083|      0|  }
 1084|    254|  if (from._internal_has_voip()) {
  ------------------
  |  Branch (1084:7): [True: 254, False: 0]
  ------------------
 1085|    254|    voip_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.voip_);
 1086|    254|  } else {
 1087|      0|    voip_ = nullptr;
 1088|      0|  }
 1089|    254|  if (from._internal_has_pager()) {
  ------------------
  |  Branch (1089:7): [True: 254, False: 0]
  ------------------
 1090|    254|    pager_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.pager_);
 1091|    254|  } else {
 1092|      0|    pager_ = nullptr;
 1093|      0|  }
 1094|    254|  if (from._internal_has_no_international_dialling()) {
  ------------------
  |  Branch (1094:7): [True: 254, False: 0]
  ------------------
 1095|    254|    no_international_dialling_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.no_international_dialling_);
 1096|    254|  } else {
 1097|      0|    no_international_dialling_ = nullptr;
 1098|      0|  }
 1099|    254|  if (from._internal_has_uan()) {
  ------------------
  |  Branch (1099:7): [True: 254, False: 0]
  ------------------
 1100|    254|    uan_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.uan_);
 1101|    254|  } else {
 1102|      0|    uan_ = nullptr;
 1103|      0|  }
 1104|    254|  if (from._internal_has_emergency()) {
  ------------------
  |  Branch (1104:7): [True: 0, False: 254]
  ------------------
 1105|      0|    emergency_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.emergency_);
 1106|    254|  } else {
 1107|    254|    emergency_ = nullptr;
 1108|    254|  }
 1109|    254|  if (from._internal_has_voicemail()) {
  ------------------
  |  Branch (1109:7): [True: 254, False: 0]
  ------------------
 1110|    254|    voicemail_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.voicemail_);
 1111|    254|  } else {
 1112|      0|    voicemail_ = nullptr;
 1113|      0|  }
 1114|    254|  if (from._internal_has_short_code()) {
  ------------------
  |  Branch (1114:7): [True: 0, False: 254]
  ------------------
 1115|      0|    short_code_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.short_code_);
 1116|    254|  } else {
 1117|    254|    short_code_ = nullptr;
 1118|    254|  }
 1119|    254|  if (from._internal_has_standard_rate()) {
  ------------------
  |  Branch (1119:7): [True: 0, False: 254]
  ------------------
 1120|      0|    standard_rate_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.standard_rate_);
 1121|    254|  } else {
 1122|    254|    standard_rate_ = nullptr;
 1123|    254|  }
 1124|    254|  if (from._internal_has_carrier_specific()) {
  ------------------
  |  Branch (1124:7): [True: 0, False: 254]
  ------------------
 1125|      0|    carrier_specific_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.carrier_specific_);
 1126|    254|  } else {
 1127|    254|    carrier_specific_ = nullptr;
 1128|    254|  }
 1129|    254|  if (from._internal_has_sms_services()) {
  ------------------
  |  Branch (1129:7): [True: 0, False: 254]
  ------------------
 1130|      0|    sms_services_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.sms_services_);
 1131|    254|  } else {
 1132|    254|    sms_services_ = nullptr;
 1133|    254|  }
 1134|    254|  ::memcpy(&country_code_, &from.country_code_,
 1135|    254|    static_cast<size_t>(reinterpret_cast<char*>(&mobile_number_portable_region_) -
 1136|    254|    reinterpret_cast<char*>(&country_code_)) + sizeof(mobile_number_portable_region_));
 1137|       |  // @@protoc_insertion_point(copy_constructor:i18n.phonenumbers.PhoneMetadata)
 1138|    254|}
_ZN4i18n12phonenumbers13PhoneMetadataD2Ev:
 1156|    508|PhoneMetadata::~PhoneMetadata() {
 1157|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneMetadata)
 1158|    508|  SharedDtor();
 1159|    508|  _internal_metadata_.Delete<std::string>();
 1160|    508|}
_ZN4i18n12phonenumbers13PhoneMetadata14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
 1322|    300|const char* PhoneMetadata::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
 1323|    300|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
 1324|    300|  _Internal::HasBits has_bits{};
 1325|  5.01k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (1325:10): [True: 4.71k, False: 300]
  ------------------
 1326|  4.71k|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
 1327|  4.71k|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
 1328|  4.71k|    CHK_(ptr);
  ------------------
  |  | 1323|  4.71k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1329|  4.71k|    switch (tag >> 3) {
 1330|       |      // optional .i18n.phonenumbers.PhoneNumberDesc general_desc = 1;
 1331|    254|      case 1:
  ------------------
  |  Branch (1331:7): [True: 254, False: 4.45k]
  ------------------
 1332|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
 1333|    254|          ptr = ctx->ParseMessage(_internal_mutable_general_desc(), ptr);
 1334|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1335|    254|        } else goto handle_unusual;
 1336|    254|        continue;
 1337|       |      // optional .i18n.phonenumbers.PhoneNumberDesc fixed_line = 2;
 1338|    254|      case 2:
  ------------------
  |  Branch (1338:7): [True: 254, False: 4.45k]
  ------------------
 1339|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
 1340|    254|          ptr = ctx->ParseMessage(_internal_mutable_fixed_line(), ptr);
 1341|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1342|    254|        } else goto handle_unusual;
 1343|    254|        continue;
 1344|       |      // optional .i18n.phonenumbers.PhoneNumberDesc mobile = 3;
 1345|    254|      case 3:
  ------------------
  |  Branch (1345:7): [True: 254, False: 4.45k]
  ------------------
 1346|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
 1347|    254|          ptr = ctx->ParseMessage(_internal_mutable_mobile(), ptr);
 1348|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1349|    254|        } else goto handle_unusual;
 1350|    254|        continue;
 1351|       |      // optional .i18n.phonenumbers.PhoneNumberDesc toll_free = 4;
 1352|    254|      case 4:
  ------------------
  |  Branch (1352:7): [True: 254, False: 4.45k]
  ------------------
 1353|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
 1354|    254|          ptr = ctx->ParseMessage(_internal_mutable_toll_free(), ptr);
 1355|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1356|    254|        } else goto handle_unusual;
 1357|    254|        continue;
 1358|       |      // optional .i18n.phonenumbers.PhoneNumberDesc premium_rate = 5;
 1359|    254|      case 5:
  ------------------
  |  Branch (1359:7): [True: 254, False: 4.45k]
  ------------------
 1360|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
 1361|    254|          ptr = ctx->ParseMessage(_internal_mutable_premium_rate(), ptr);
 1362|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1363|    254|        } else goto handle_unusual;
 1364|    254|        continue;
 1365|       |      // optional .i18n.phonenumbers.PhoneNumberDesc shared_cost = 6;
 1366|    254|      case 6:
  ------------------
  |  Branch (1366:7): [True: 254, False: 4.45k]
  ------------------
 1367|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
 1368|    254|          ptr = ctx->ParseMessage(_internal_mutable_shared_cost(), ptr);
 1369|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1370|    254|        } else goto handle_unusual;
 1371|    254|        continue;
 1372|       |      // optional .i18n.phonenumbers.PhoneNumberDesc personal_number = 7;
 1373|    254|      case 7:
  ------------------
  |  Branch (1373:7): [True: 254, False: 4.45k]
  ------------------
 1374|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 58)) {
 1375|    254|          ptr = ctx->ParseMessage(_internal_mutable_personal_number(), ptr);
 1376|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1377|    254|        } else goto handle_unusual;
 1378|    254|        continue;
 1379|       |      // optional .i18n.phonenumbers.PhoneNumberDesc voip = 8;
 1380|    254|      case 8:
  ------------------
  |  Branch (1380:7): [True: 254, False: 4.45k]
  ------------------
 1381|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 66)) {
 1382|    254|          ptr = ctx->ParseMessage(_internal_mutable_voip(), ptr);
 1383|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1384|    254|        } else goto handle_unusual;
 1385|    254|        continue;
 1386|       |      // required string id = 9;
 1387|    300|      case 9:
  ------------------
  |  Branch (1387:7): [True: 300, False: 4.41k]
  ------------------
 1388|    300|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 74)) {
 1389|    300|          auto str = _internal_mutable_id();
 1390|    300|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1391|    300|          CHK_(ptr);
  ------------------
  |  | 1323|    300|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1392|    300|        } else goto handle_unusual;
 1393|    300|        continue;
 1394|       |      // optional int32 country_code = 10;
 1395|    300|      case 10:
  ------------------
  |  Branch (1395:7): [True: 300, False: 4.41k]
  ------------------
 1396|    300|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 80)) {
 1397|    300|          _Internal::set_has_country_code(&has_bits);
 1398|    300|          country_code_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1399|    300|          CHK_(ptr);
  ------------------
  |  | 1323|    300|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1400|    300|        } else goto handle_unusual;
 1401|    300|        continue;
 1402|       |      // optional string international_prefix = 11;
 1403|    300|      case 11:
  ------------------
  |  Branch (1403:7): [True: 245, False: 4.46k]
  ------------------
 1404|    245|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 90)) {
 1405|    245|          auto str = _internal_mutable_international_prefix();
 1406|    245|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1407|    245|          CHK_(ptr);
  ------------------
  |  | 1323|    245|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1408|    245|        } else goto handle_unusual;
 1409|    245|        continue;
 1410|       |      // optional string national_prefix = 12;
 1411|    245|      case 12:
  ------------------
  |  Branch (1411:7): [True: 144, False: 4.56k]
  ------------------
 1412|    144|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 98)) {
 1413|    144|          auto str = _internal_mutable_national_prefix();
 1414|    144|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1415|    144|          CHK_(ptr);
  ------------------
  |  | 1323|    144|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1416|    144|        } else goto handle_unusual;
 1417|    144|        continue;
 1418|       |      // optional string preferred_extn_prefix = 13;
 1419|    144|      case 13:
  ------------------
  |  Branch (1419:7): [True: 5, False: 4.70k]
  ------------------
 1420|      5|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 106)) {
 1421|      5|          auto str = _internal_mutable_preferred_extn_prefix();
 1422|      5|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1423|      5|          CHK_(ptr);
  ------------------
  |  | 1323|      5|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1424|      5|        } else goto handle_unusual;
 1425|      5|        continue;
 1426|       |      // optional string national_prefix_for_parsing = 15;
 1427|    150|      case 15:
  ------------------
  |  Branch (1427:7): [True: 150, False: 4.56k]
  ------------------
 1428|    150|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 122)) {
 1429|    150|          auto str = _internal_mutable_national_prefix_for_parsing();
 1430|    150|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1431|    150|          CHK_(ptr);
  ------------------
  |  | 1323|    150|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1432|    150|        } else goto handle_unusual;
 1433|    150|        continue;
 1434|       |      // optional string national_prefix_transform_rule = 16;
 1435|    150|      case 16:
  ------------------
  |  Branch (1435:7): [True: 32, False: 4.67k]
  ------------------
 1436|     32|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 130)) {
 1437|     32|          auto str = _internal_mutable_national_prefix_transform_rule();
 1438|     32|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1439|     32|          CHK_(ptr);
  ------------------
  |  | 1323|     32|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1440|     32|        } else goto handle_unusual;
 1441|     32|        continue;
 1442|       |      // optional string preferred_international_prefix = 17;
 1443|     32|      case 17:
  ------------------
  |  Branch (1443:7): [True: 25, False: 4.68k]
  ------------------
 1444|     25|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 138)) {
 1445|     25|          auto str = _internal_mutable_preferred_international_prefix();
 1446|     25|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1447|     25|          CHK_(ptr);
  ------------------
  |  | 1323|     25|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1448|     25|        } else goto handle_unusual;
 1449|     25|        continue;
 1450|       |      // optional bool same_mobile_and_fixed_line_pattern = 18 [default = false];
 1451|     25|      case 18:
  ------------------
  |  Branch (1451:7): [True: 13, False: 4.69k]
  ------------------
 1452|     13|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 144)) {
 1453|     13|          _Internal::set_has_same_mobile_and_fixed_line_pattern(&has_bits);
 1454|     13|          same_mobile_and_fixed_line_pattern_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1455|     13|          CHK_(ptr);
  ------------------
  |  | 1323|     13|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1456|     13|        } else goto handle_unusual;
 1457|     13|        continue;
 1458|       |      // repeated .i18n.phonenumbers.NumberFormat number_format = 19;
 1459|    256|      case 19:
  ------------------
  |  Branch (1459:7): [True: 256, False: 4.45k]
  ------------------
 1460|    256|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 154)) {
 1461|    256|          ptr -= 2;
 1462|    912|          do {
 1463|    912|            ptr += 2;
 1464|    912|            ptr = ctx->ParseMessage(_internal_add_number_format(), ptr);
 1465|    912|            CHK_(ptr);
  ------------------
  |  | 1323|    912|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1466|    912|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (1466:17): [True: 46, False: 866]
  ------------------
 1467|    912|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<154>(ptr));
  ------------------
  |  Branch (1467:20): [True: 656, False: 210]
  ------------------
 1468|    256|        } else goto handle_unusual;
 1469|    256|        continue;
 1470|       |      // repeated .i18n.phonenumbers.NumberFormat intl_number_format = 20;
 1471|    256|      case 20:
  ------------------
  |  Branch (1471:7): [True: 38, False: 4.67k]
  ------------------
 1472|     38|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 162)) {
 1473|     38|          ptr -= 2;
 1474|    179|          do {
 1475|    179|            ptr += 2;
 1476|    179|            ptr = ctx->ParseMessage(_internal_add_intl_number_format(), ptr);
 1477|    179|            CHK_(ptr);
  ------------------
  |  | 1323|    179|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1478|    179|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (1478:17): [True: 0, False: 179]
  ------------------
 1479|    179|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<162>(ptr));
  ------------------
  |  Branch (1479:20): [True: 141, False: 38]
  ------------------
 1480|     38|        } else goto handle_unusual;
 1481|     38|        continue;
 1482|       |      // optional .i18n.phonenumbers.PhoneNumberDesc pager = 21;
 1483|    254|      case 21:
  ------------------
  |  Branch (1483:7): [True: 254, False: 4.45k]
  ------------------
 1484|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 170)) {
 1485|    254|          ptr = ctx->ParseMessage(_internal_mutable_pager(), ptr);
 1486|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1487|    254|        } else goto handle_unusual;
 1488|    254|        continue;
 1489|       |      // optional bool main_country_for_code = 22 [default = false];
 1490|    254|      case 22:
  ------------------
  |  Branch (1490:7): [True: 12, False: 4.69k]
  ------------------
 1491|     12|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 176)) {
 1492|     12|          _Internal::set_has_main_country_for_code(&has_bits);
 1493|     12|          main_country_for_code_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1494|     12|          CHK_(ptr);
  ------------------
  |  | 1323|     12|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1495|     12|        } else goto handle_unusual;
 1496|     12|        continue;
 1497|       |      // optional string leading_digits = 23;
 1498|     36|      case 23:
  ------------------
  |  Branch (1498:7): [True: 36, False: 4.67k]
  ------------------
 1499|     36|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 186)) {
 1500|     36|          auto str = _internal_mutable_leading_digits();
 1501|     36|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1502|     36|          CHK_(ptr);
  ------------------
  |  | 1323|     36|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1503|     36|        } else goto handle_unusual;
 1504|     36|        continue;
 1505|       |      // optional .i18n.phonenumbers.PhoneNumberDesc no_international_dialling = 24;
 1506|    254|      case 24:
  ------------------
  |  Branch (1506:7): [True: 254, False: 4.45k]
  ------------------
 1507|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 194)) {
 1508|    254|          ptr = ctx->ParseMessage(_internal_mutable_no_international_dialling(), ptr);
 1509|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1510|    254|        } else goto handle_unusual;
 1511|    254|        continue;
 1512|       |      // optional .i18n.phonenumbers.PhoneNumberDesc uan = 25;
 1513|    254|      case 25:
  ------------------
  |  Branch (1513:7): [True: 254, False: 4.45k]
  ------------------
 1514|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 202)) {
 1515|    254|          ptr = ctx->ParseMessage(_internal_mutable_uan(), ptr);
 1516|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1517|    254|        } else goto handle_unusual;
 1518|    254|        continue;
 1519|       |      // optional .i18n.phonenumbers.PhoneNumberDesc emergency = 27;
 1520|    254|      case 27:
  ------------------
  |  Branch (1520:7): [True: 0, False: 4.71k]
  ------------------
 1521|      0|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 218)) {
 1522|      0|          ptr = ctx->ParseMessage(_internal_mutable_emergency(), ptr);
 1523|      0|          CHK_(ptr);
  ------------------
  |  | 1323|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1524|      0|        } else goto handle_unusual;
 1525|      0|        continue;
 1526|       |      // optional .i18n.phonenumbers.PhoneNumberDesc voicemail = 28;
 1527|    254|      case 28:
  ------------------
  |  Branch (1527:7): [True: 254, False: 4.45k]
  ------------------
 1528|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 226)) {
 1529|    254|          ptr = ctx->ParseMessage(_internal_mutable_voicemail(), ptr);
 1530|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1531|    254|        } else goto handle_unusual;
 1532|    254|        continue;
 1533|       |      // optional .i18n.phonenumbers.PhoneNumberDesc short_code = 29;
 1534|    254|      case 29:
  ------------------
  |  Branch (1534:7): [True: 0, False: 4.71k]
  ------------------
 1535|      0|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 234)) {
 1536|      0|          ptr = ctx->ParseMessage(_internal_mutable_short_code(), ptr);
 1537|      0|          CHK_(ptr);
  ------------------
  |  | 1323|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1538|      0|        } else goto handle_unusual;
 1539|      0|        continue;
 1540|       |      // optional .i18n.phonenumbers.PhoneNumberDesc standard_rate = 30;
 1541|      0|      case 30:
  ------------------
  |  Branch (1541:7): [True: 0, False: 4.71k]
  ------------------
 1542|      0|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 242)) {
 1543|      0|          ptr = ctx->ParseMessage(_internal_mutable_standard_rate(), ptr);
 1544|      0|          CHK_(ptr);
  ------------------
  |  | 1323|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1545|      0|        } else goto handle_unusual;
 1546|      0|        continue;
 1547|       |      // optional .i18n.phonenumbers.PhoneNumberDesc carrier_specific = 31;
 1548|      0|      case 31:
  ------------------
  |  Branch (1548:7): [True: 0, False: 4.71k]
  ------------------
 1549|      0|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 250)) {
 1550|      0|          ptr = ctx->ParseMessage(_internal_mutable_carrier_specific(), ptr);
 1551|      0|          CHK_(ptr);
  ------------------
  |  | 1323|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1552|      0|        } else goto handle_unusual;
 1553|      0|        continue;
 1554|       |      // optional bool mobile_number_portable_region = 32 [default = false];
 1555|    107|      case 32:
  ------------------
  |  Branch (1555:7): [True: 107, False: 4.60k]
  ------------------
 1556|    107|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 0)) {
 1557|    107|          _Internal::set_has_mobile_number_portable_region(&has_bits);
 1558|    107|          mobile_number_portable_region_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1559|    107|          CHK_(ptr);
  ------------------
  |  | 1323|    107|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1560|    107|        } else goto handle_unusual;
 1561|    107|        continue;
 1562|       |      // optional .i18n.phonenumbers.PhoneNumberDesc sms_services = 33;
 1563|    107|      case 33:
  ------------------
  |  Branch (1563:7): [True: 0, False: 4.71k]
  ------------------
 1564|      0|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
 1565|      0|          ptr = ctx->ParseMessage(_internal_mutable_sms_services(), ptr);
 1566|      0|          CHK_(ptr);
  ------------------
  |  | 1323|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1567|      0|        } else goto handle_unusual;
 1568|      0|        continue;
 1569|      0|      default: {
  ------------------
  |  Branch (1569:7): [True: 0, False: 4.71k]
  ------------------
 1570|      0|      handle_unusual:
 1571|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (1571:13): [True: 0, False: 0]
  |  Branch (1571:31): [True: 0, False: 0]
  ------------------
 1572|      0|          ctx->SetLastTag(tag);
 1573|      0|          goto success;
 1574|      0|        }
 1575|      0|        ptr = UnknownFieldParse(tag,
 1576|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
 1577|      0|            ptr, ctx);
 1578|      0|        CHK_(ptr != nullptr);
  ------------------
  |  | 1323|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1579|      0|        continue;
 1580|      0|      }
 1581|  4.71k|    }  // switch
 1582|  4.71k|  }  // while
 1583|    300|success:
 1584|    300|  _has_bits_.Or(has_bits);
 1585|    300|  return ptr;
 1586|      0|failure:
 1587|      0|  ptr = nullptr;
 1588|      0|  goto success;
 1589|    300|#undef CHK_
 1590|    300|}
_ZNK4i18n12phonenumbers13PhoneMetadata13IsInitializedEv:
 2187|    300|bool PhoneMetadata::IsInitialized() const {
 2188|    300|  if (_Internal::MissingRequiredFields(_has_bits_)) return false;
  ------------------
  |  Branch (2188:7): [True: 0, False: 300]
  ------------------
 2189|    300|  if (!::PROTOBUF_NAMESPACE_ID::internal::AllAreInitialized(number_format_)) return false;
  ------------------
  |  Branch (2189:7): [True: 0, False: 300]
  ------------------
 2190|    300|  if (!::PROTOBUF_NAMESPACE_ID::internal::AllAreInitialized(intl_number_format_)) return false;
  ------------------
  |  Branch (2190:7): [True: 0, False: 300]
  ------------------
 2191|    300|  return true;
 2192|    300|}
_ZN4i18n12phonenumbers13PhoneMetadata12InternalSwapEPS1_:
 2194|    254|void PhoneMetadata::InternalSwap(PhoneMetadata* other) {
 2195|    254|  using std::swap;
 2196|    254|  _internal_metadata_.Swap<std::string>(&other->_internal_metadata_);
 2197|    254|  swap(_has_bits_[0], other->_has_bits_[0]);
 2198|    254|  number_format_.InternalSwap(&other->number_format_);
 2199|    254|  intl_number_format_.InternalSwap(&other->intl_number_format_);
 2200|    254|  id_.Swap(&other->id_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2201|    254|  international_prefix_.Swap(&other->international_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2202|    254|  national_prefix_.Swap(&other->national_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2203|    254|  preferred_extn_prefix_.Swap(&other->preferred_extn_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2204|    254|  national_prefix_for_parsing_.Swap(&other->national_prefix_for_parsing_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2205|    254|  national_prefix_transform_rule_.Swap(&other->national_prefix_transform_rule_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2206|    254|  preferred_international_prefix_.Swap(&other->preferred_international_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2207|    254|  leading_digits_.Swap(&other->leading_digits_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2208|    254|  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
 2209|    254|      PROTOBUF_FIELD_OFFSET(PhoneMetadata, mobile_number_portable_region_)
 2210|    254|      + sizeof(PhoneMetadata::mobile_number_portable_region_)
 2211|    254|      - PROTOBUF_FIELD_OFFSET(PhoneMetadata, general_desc_)>(
 2212|    254|          reinterpret_cast<char*>(&general_desc_),
 2213|    254|          reinterpret_cast<char*>(&other->general_desc_));
 2214|    254|}
_ZN4i18n12phonenumbers23PhoneMetadataCollectionC2EPN6google8protobuf5ArenaE:
 2228|      3|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
 2229|      3|  metadata_(arena) {
 2230|      3|  SharedCtor();
 2231|      3|  RegisterArenaDtor(arena);
 2232|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneMetadataCollection)
 2233|      3|}
_ZN4i18n12phonenumbers23PhoneMetadataCollectionD2Ev:
 2245|      1|PhoneMetadataCollection::~PhoneMetadataCollection() {
 2246|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneMetadataCollection)
 2247|      1|  SharedDtor();
 2248|      1|  _internal_metadata_.Delete<std::string>();
 2249|      1|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection5ClearEv:
 2270|      2|void PhoneMetadataCollection::Clear() {
 2271|       |// @@protoc_insertion_point(message_clear_start:i18n.phonenumbers.PhoneMetadataCollection)
 2272|      2|  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
 2273|       |  // Prevent compiler warnings about cached_has_bits being unused
 2274|      2|  (void) cached_has_bits;
 2275|       |
 2276|      2|  metadata_.Clear();
 2277|      2|  _internal_metadata_.Clear<std::string>();
 2278|      2|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
 2280|      2|const char* PhoneMetadataCollection::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
 2281|      2|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
 2282|      4|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (2282:10): [True: 2, False: 2]
  ------------------
 2283|      2|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
 2284|      2|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
 2285|      2|    CHK_(ptr);
  ------------------
  |  | 2281|      2|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 2286|      2|    switch (tag >> 3) {
 2287|       |      // repeated .i18n.phonenumbers.PhoneMetadata metadata = 1;
 2288|      2|      case 1:
  ------------------
  |  Branch (2288:7): [True: 2, False: 0]
  ------------------
 2289|      2|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
 2290|      2|          ptr -= 1;
 2291|    300|          do {
 2292|    300|            ptr += 1;
 2293|    300|            ptr = ctx->ParseMessage(_internal_add_metadata(), ptr);
 2294|    300|            CHK_(ptr);
  ------------------
  |  | 2281|    300|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 2295|    300|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (2295:17): [True: 2, False: 298]
  ------------------
 2296|    300|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
  ------------------
  |  Branch (2296:20): [True: 298, False: 0]
  ------------------
 2297|      2|        } else goto handle_unusual;
 2298|      2|        continue;
 2299|      2|      default: {
  ------------------
  |  Branch (2299:7): [True: 0, False: 2]
  ------------------
 2300|      0|      handle_unusual:
 2301|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (2301:13): [True: 0, False: 0]
  |  Branch (2301:31): [True: 0, False: 0]
  ------------------
 2302|      0|          ctx->SetLastTag(tag);
 2303|      0|          goto success;
 2304|      0|        }
 2305|      0|        ptr = UnknownFieldParse(tag,
 2306|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
 2307|      0|            ptr, ctx);
 2308|      0|        CHK_(ptr != nullptr);
  ------------------
  |  | 2281|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 2309|      0|        continue;
 2310|      0|      }
 2311|      2|    }  // switch
 2312|      2|  }  // while
 2313|      2|success:
 2314|      2|  return ptr;
 2315|      0|failure:
 2316|      0|  ptr = nullptr;
 2317|      0|  goto success;
 2318|      2|#undef CHK_
 2319|      2|}
_ZNK4i18n12phonenumbers23PhoneMetadataCollection13IsInitializedEv:
 2389|      2|bool PhoneMetadataCollection::IsInitialized() const {
 2390|      2|  if (!::PROTOBUF_NAMESPACE_ID::internal::AllAreInitialized(metadata_)) return false;
  ------------------
  |  Branch (2390:7): [True: 0, False: 2]
  ------------------
 2391|      2|  return true;
 2392|      2|}
_ZN6google8protobuf5Arena18CreateMaybeMessageIN4i18n12phonenumbers12NumberFormatEJEEEPT_PS1_DpOT0_:
 2409|  78.5k|template<> PROTOBUF_NOINLINE ::i18n::phonenumbers::NumberFormat* Arena::CreateMaybeMessage< ::i18n::phonenumbers::NumberFormat >(Arena* arena) {
 2410|  78.5k|  return Arena::CreateMessageInternal< ::i18n::phonenumbers::NumberFormat >(arena);
 2411|  78.5k|}
_ZN6google8protobuf5Arena18CreateMaybeMessageIN4i18n12phonenumbers15PhoneNumberDescEJEEEPT_PS1_DpOT0_:
 2412|  3.04k|template<> PROTOBUF_NOINLINE ::i18n::phonenumbers::PhoneNumberDesc* Arena::CreateMaybeMessage< ::i18n::phonenumbers::PhoneNumberDesc >(Arena* arena) {
 2413|  3.04k|  return Arena::CreateMessageInternal< ::i18n::phonenumbers::PhoneNumberDesc >(arena);
 2414|  3.04k|}
_ZN6google8protobuf5Arena18CreateMaybeMessageIN4i18n12phonenumbers13PhoneMetadataEJEEEPT_PS1_DpOT0_:
 2415|    300|template<> PROTOBUF_NOINLINE ::i18n::phonenumbers::PhoneMetadata* Arena::CreateMaybeMessage< ::i18n::phonenumbers::PhoneMetadata >(Arena* arena) {
 2416|    300|  return Arena::CreateMessageInternal< ::i18n::phonenumbers::PhoneMetadata >(arena);
 2417|    300|}
phonemetadata.pb.cc:_ZL55InitDefaultsscc_info_NumberFormat_phonemetadata_2eprotov:
   37|      1|static void InitDefaultsscc_info_NumberFormat_phonemetadata_2eproto() {
   38|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   39|       |
   40|      1|  {
   41|      1|    void* ptr = &::i18n::phonenumbers::_NumberFormat_default_instance_;
   42|      1|    new (ptr) ::i18n::phonenumbers::NumberFormat();
   43|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   44|      1|  }
   45|      1|}
phonemetadata.pb.cc:_ZL56InitDefaultsscc_info_PhoneMetadata_phonemetadata_2eprotov:
   50|      1|static void InitDefaultsscc_info_PhoneMetadata_phonemetadata_2eproto() {
   51|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   52|       |
   53|      1|  {
   54|      1|    void* ptr = &::i18n::phonenumbers::_PhoneMetadata_default_instance_;
   55|      1|    new (ptr) ::i18n::phonenumbers::PhoneMetadata();
   56|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   57|      1|  }
   58|      1|}
phonemetadata.pb.cc:_ZL66InitDefaultsscc_info_PhoneMetadataCollection_phonemetadata_2eprotov:
   65|      1|static void InitDefaultsscc_info_PhoneMetadataCollection_phonemetadata_2eproto() {
   66|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   67|       |
   68|      1|  {
   69|      1|    void* ptr = &::i18n::phonenumbers::_PhoneMetadataCollection_default_instance_;
   70|      1|    new (ptr) ::i18n::phonenumbers::PhoneMetadataCollection();
   71|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   72|      1|  }
   73|      1|}
phonemetadata.pb.cc:_ZL58InitDefaultsscc_info_PhoneNumberDesc_phonemetadata_2eprotov:
   79|      1|static void InitDefaultsscc_info_PhoneNumberDesc_phonemetadata_2eproto() {
   80|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   81|       |
   82|      1|  {
   83|      1|    void* ptr = &::i18n::phonenumbers::_PhoneNumberDesc_default_instance_;
   84|      1|    new (ptr) ::i18n::phonenumbers::PhoneNumberDesc();
   85|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   86|      1|  }
   87|      1|}
_ZN4i18n12phonenumbers12NumberFormat10SharedCtorEv:
  156|  78.5k|void NumberFormat::SharedCtor() {
  157|  78.5k|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_NumberFormat_phonemetadata_2eproto.base);
  158|  78.5k|  pattern_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  159|  78.5k|  format_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  160|  78.5k|  national_prefix_formatting_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  161|  78.5k|  domestic_carrier_code_formatting_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  162|  78.5k|  national_prefix_optional_when_formatting_ = false;
  163|  78.5k|}
_ZN4i18n12phonenumbers12NumberFormat10SharedDtorEv:
  171|  77.4k|void NumberFormat::SharedDtor() {
  172|  77.4k|  GOOGLE_DCHECK(GetArena() == nullptr);
  173|  77.4k|  pattern_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  174|  77.4k|  format_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  175|  77.4k|  national_prefix_formatting_rule_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  176|  77.4k|  domestic_carrier_code_formatting_rule_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  177|  77.4k|}
_ZN4i18n12phonenumbers12NumberFormat17RegisterArenaDtorEPN6google8protobuf5ArenaE:
  183|  78.5k|void NumberFormat::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  184|  78.5k|}
_ZN4i18n12phonenumbers12NumberFormat9_Internal48set_has_national_prefix_optional_when_formattingEPN6google8protobuf8internal7HasBitsILm1EEE:
  109|     74|  static void set_has_national_prefix_optional_when_formatting(HasBits* has_bits) {
  110|     74|    (*has_bits)[0] |= 16u;
  111|     74|  }
_ZN4i18n12phonenumbers12NumberFormat9_Internal21MissingRequiredFieldsERKN6google8protobuf8internal7HasBitsILm1EEE:
  115|  1.09k|  static bool MissingRequiredFields(const HasBits& has_bits) {
  116|  1.09k|    return ((has_bits[0] & 0x00000003) ^ 0x00000003) != 0;
  117|  1.09k|  }
_ZN4i18n12phonenumbers15PhoneNumberDesc10SharedCtorEv:
  540|  3.04k|void PhoneNumberDesc::SharedCtor() {
  541|  3.04k|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneNumberDesc_phonemetadata_2eproto.base);
  542|  3.04k|  national_number_pattern_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  543|  3.04k|  example_number_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  544|  3.04k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc10SharedDtorEv:
  552|  3.04k|void PhoneNumberDesc::SharedDtor() {
  553|  3.04k|  GOOGLE_DCHECK(GetArena() == nullptr);
  554|  3.04k|  national_number_pattern_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  555|  3.04k|  example_number_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  556|  3.04k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc17RegisterArenaDtorEPN6google8protobuf5ArenaE:
  562|  3.04k|void PhoneNumberDesc::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  563|  3.04k|}
_ZN4i18n12phonenumbers13PhoneMetadata10SharedCtorEv:
 1140|    555|void PhoneMetadata::SharedCtor() {
 1141|    555|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneMetadata_phonemetadata_2eproto.base);
 1142|    555|  id_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1143|    555|  international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1144|    555|  national_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1145|    555|  preferred_extn_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1146|    555|  national_prefix_for_parsing_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1147|    555|  national_prefix_transform_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1148|    555|  preferred_international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1149|    555|  leading_digits_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1150|    555|  ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
 1151|    555|      reinterpret_cast<char*>(&general_desc_) - reinterpret_cast<char*>(this)),
 1152|    555|      0, static_cast<size_t>(reinterpret_cast<char*>(&mobile_number_portable_region_) -
 1153|    555|      reinterpret_cast<char*>(&general_desc_)) + sizeof(mobile_number_portable_region_));
 1154|    555|}
_ZN4i18n12phonenumbers13PhoneMetadata10SharedDtorEv:
 1162|    508|void PhoneMetadata::SharedDtor() {
 1163|    508|  GOOGLE_DCHECK(GetArena() == nullptr);
 1164|    508|  id_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1165|    508|  international_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1166|    508|  national_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1167|    508|  preferred_extn_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1168|    508|  national_prefix_for_parsing_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1169|    508|  national_prefix_transform_rule_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1170|    508|  preferred_international_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1171|    508|  leading_digits_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1172|    508|  if (this != internal_default_instance()) delete general_desc_;
  ------------------
  |  Branch (1172:7): [True: 508, False: 0]
  ------------------
 1173|    508|  if (this != internal_default_instance()) delete fixed_line_;
  ------------------
  |  Branch (1173:7): [True: 508, False: 0]
  ------------------
 1174|    508|  if (this != internal_default_instance()) delete mobile_;
  ------------------
  |  Branch (1174:7): [True: 508, False: 0]
  ------------------
 1175|    508|  if (this != internal_default_instance()) delete toll_free_;
  ------------------
  |  Branch (1175:7): [True: 508, False: 0]
  ------------------
 1176|    508|  if (this != internal_default_instance()) delete premium_rate_;
  ------------------
  |  Branch (1176:7): [True: 508, False: 0]
  ------------------
 1177|    508|  if (this != internal_default_instance()) delete shared_cost_;
  ------------------
  |  Branch (1177:7): [True: 508, False: 0]
  ------------------
 1178|    508|  if (this != internal_default_instance()) delete personal_number_;
  ------------------
  |  Branch (1178:7): [True: 508, False: 0]
  ------------------
 1179|    508|  if (this != internal_default_instance()) delete voip_;
  ------------------
  |  Branch (1179:7): [True: 508, False: 0]
  ------------------
 1180|    508|  if (this != internal_default_instance()) delete pager_;
  ------------------
  |  Branch (1180:7): [True: 508, False: 0]
  ------------------
 1181|    508|  if (this != internal_default_instance()) delete no_international_dialling_;
  ------------------
  |  Branch (1181:7): [True: 508, False: 0]
  ------------------
 1182|    508|  if (this != internal_default_instance()) delete uan_;
  ------------------
  |  Branch (1182:7): [True: 508, False: 0]
  ------------------
 1183|    508|  if (this != internal_default_instance()) delete emergency_;
  ------------------
  |  Branch (1183:7): [True: 508, False: 0]
  ------------------
 1184|    508|  if (this != internal_default_instance()) delete voicemail_;
  ------------------
  |  Branch (1184:7): [True: 508, False: 0]
  ------------------
 1185|    508|  if (this != internal_default_instance()) delete short_code_;
  ------------------
  |  Branch (1185:7): [True: 508, False: 0]
  ------------------
 1186|    508|  if (this != internal_default_instance()) delete standard_rate_;
  ------------------
  |  Branch (1186:7): [True: 508, False: 0]
  ------------------
 1187|    508|  if (this != internal_default_instance()) delete carrier_specific_;
  ------------------
  |  Branch (1187:7): [True: 508, False: 0]
  ------------------
 1188|    508|  if (this != internal_default_instance()) delete sms_services_;
  ------------------
  |  Branch (1188:7): [True: 508, False: 0]
  ------------------
 1189|    508|}
_ZN4i18n12phonenumbers13PhoneMetadata17RegisterArenaDtorEPN6google8protobuf5ArenaE:
 1195|    555|void PhoneMetadata::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
 1196|    555|}
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal20set_has_country_codeEPN6google8protobuf8internal7HasBitsILm1EEE:
  889|    300|  static void set_has_country_code(HasBits* has_bits) {
  890|    300|    (*has_bits)[0] |= 33554432u;
  891|    300|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal42set_has_same_mobile_and_fixed_line_patternEPN6google8protobuf8internal7HasBitsILm1EEE:
  910|     13|  static void set_has_same_mobile_and_fixed_line_pattern(HasBits* has_bits) {
  911|     13|    (*has_bits)[0] |= 67108864u;
  912|     13|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal29set_has_main_country_for_codeEPN6google8protobuf8internal7HasBitsILm1EEE:
  913|     12|  static void set_has_main_country_for_code(HasBits* has_bits) {
  914|     12|    (*has_bits)[0] |= 134217728u;
  915|     12|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal37set_has_mobile_number_portable_regionEPN6google8protobuf8internal7HasBitsILm1EEE:
  919|    107|  static void set_has_mobile_number_portable_region(HasBits* has_bits) {
  920|    107|    (*has_bits)[0] |= 268435456u;
  921|    107|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal21MissingRequiredFieldsERKN6google8protobuf8internal7HasBitsILm1EEE:
  922|    300|  static bool MissingRequiredFields(const HasBits& has_bits) {
  923|    300|    return ((has_bits[0] & 0x00000001) ^ 0x00000001) != 0;
  924|    300|  }
_ZN4i18n12phonenumbers23PhoneMetadataCollection10SharedCtorEv:
 2241|      3|void PhoneMetadataCollection::SharedCtor() {
 2242|      3|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneMetadataCollection_phonemetadata_2eproto.base);
 2243|      3|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection10SharedDtorEv:
 2251|      1|void PhoneMetadataCollection::SharedDtor() {
 2252|      1|  GOOGLE_DCHECK(GetArena() == nullptr);
 2253|      1|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection17RegisterArenaDtorEPN6google8protobuf5ArenaE:
 2259|      3|void PhoneMetadataCollection::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
 2260|      3|}

_ZN4i18n12phonenumbers12NumberFormatC2Ev:
   83|  78.5k|  inline NumberFormat() : NumberFormat(nullptr) {}
_ZN4i18n12phonenumbers15PhoneNumberDescC2Ev:
  333|  3.04k|  inline PhoneNumberDesc() : PhoneNumberDesc(nullptr) {}
_ZN4i18n12phonenumbers13PhoneMetadataC2Ev:
  543|    555|  inline PhoneMetadata() : PhoneMetadata(nullptr) {}
_ZN4i18n12phonenumbers13PhoneMetadataC2EOS1_:
  548|    254|    : PhoneMetadata() {
  549|    254|    *this = ::std::move(from);
  550|    254|  }
_ZN4i18n12phonenumbers13PhoneMetadataaSEOS1_:
  556|    254|  inline PhoneMetadata& operator=(PhoneMetadata&& from) noexcept {
  557|    254|    if (GetArena() == from.GetArena()) {
  ------------------
  |  Branch (557:9): [True: 254, False: 0]
  ------------------
  558|    254|      if (this != &from) InternalSwap(&from);
  ------------------
  |  Branch (558:11): [True: 254, False: 0]
  ------------------
  559|    254|    } else {
  560|      0|      CopyFrom(from);
  561|      0|    }
  562|    254|    return *this;
  563|    254|  }
_ZN4i18n12phonenumbers13PhoneMetadata25internal_default_instanceEv:
  574|  8.63k|  static inline const PhoneMetadata* internal_default_instance() {
  575|  8.63k|    return reinterpret_cast<const PhoneMetadata*>(
  576|  8.63k|               &_PhoneMetadata_default_instance_);
  577|  8.63k|  }
_ZN4i18n12phonenumbers23PhoneMetadataCollectionC2Ev:
 1277|      3|  inline PhoneMetadataCollection() : PhoneMetadataCollection(nullptr) {}
_ZNK4i18n12phonenumbers12NumberFormat7patternEv:
 1432|  51.1k|inline const std::string& NumberFormat::pattern() const {
 1433|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.NumberFormat.pattern)
 1434|  51.1k|  return _internal_pattern();
 1435|  51.1k|}
_ZNK4i18n12phonenumbers12NumberFormat17_internal_patternEv:
 1444|   128k|inline const std::string& NumberFormat::_internal_pattern() const {
 1445|   128k|  return pattern_.Get();
 1446|   128k|}
_ZN4i18n12phonenumbers12NumberFormat21_internal_set_patternERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1447|  77.4k|inline void NumberFormat::_internal_set_pattern(const std::string& value) {
 1448|  77.4k|  _has_bits_[0] |= 0x00000001u;
 1449|  77.4k|  pattern_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1450|  77.4k|}
_ZN4i18n12phonenumbers12NumberFormat25_internal_mutable_patternEv:
 1470|  1.09k|inline std::string* NumberFormat::_internal_mutable_pattern() {
 1471|  1.09k|  _has_bits_[0] |= 0x00000001u;
 1472|  1.09k|  return pattern_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1473|  1.09k|}
_ZNK4i18n12phonenumbers12NumberFormat6formatEv:
 1505|  18.6k|inline const std::string& NumberFormat::format() const {
 1506|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.NumberFormat.format)
 1507|  18.6k|  return _internal_format();
 1508|  18.6k|}
_ZNK4i18n12phonenumbers12NumberFormat16_internal_formatEv:
 1517|  96.1k|inline const std::string& NumberFormat::_internal_format() const {
 1518|  96.1k|  return format_.Get();
 1519|  96.1k|}
_ZN4i18n12phonenumbers12NumberFormat20_internal_set_formatERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1520|  77.4k|inline void NumberFormat::_internal_set_format(const std::string& value) {
 1521|  77.4k|  _has_bits_[0] |= 0x00000002u;
 1522|  77.4k|  format_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1523|  77.4k|}
_ZN4i18n12phonenumbers12NumberFormat24_internal_mutable_formatEv:
 1543|  1.09k|inline std::string* NumberFormat::_internal_mutable_format() {
 1544|  1.09k|  _has_bits_[0] |= 0x00000002u;
 1545|  1.09k|  return format_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1546|  1.09k|}
_ZNK4i18n12phonenumbers12NumberFormat37_internal_leading_digits_pattern_sizeEv:
 1567|   132k|inline int NumberFormat::_internal_leading_digits_pattern_size() const {
 1568|   132k|  return leading_digits_pattern_.size();
 1569|   132k|}
_ZNK4i18n12phonenumbers12NumberFormat27leading_digits_pattern_sizeEv:
 1570|   132k|inline int NumberFormat::leading_digits_pattern_size() const {
 1571|   132k|  return _internal_leading_digits_pattern_size();
 1572|   132k|}
_ZNK4i18n12phonenumbers12NumberFormat32_internal_leading_digits_patternEi:
 1580|   132k|inline const std::string& NumberFormat::_internal_leading_digits_pattern(int index) const {
 1581|   132k|  return leading_digits_pattern_.Get(index);
 1582|   132k|}
_ZNK4i18n12phonenumbers12NumberFormat22leading_digits_patternEi:
 1583|   132k|inline const std::string& NumberFormat::leading_digits_pattern(int index) const {
 1584|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.NumberFormat.leading_digits_pattern)
 1585|   132k|  return _internal_leading_digits_pattern(index);
 1586|   132k|}
_ZN4i18n12phonenumbers12NumberFormat36_internal_add_leading_digits_patternEv:
 1609|  1.22k|inline std::string* NumberFormat::_internal_add_leading_digits_pattern() {
 1610|  1.22k|  return leading_digits_pattern_.Add();
 1611|  1.22k|}
_ZNK4i18n12phonenumbers12NumberFormat31national_prefix_formatting_ruleEv:
 1652|  25.4k|inline const std::string& NumberFormat::national_prefix_formatting_rule() const {
 1653|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.NumberFormat.national_prefix_formatting_rule)
 1654|  25.4k|  return _internal_national_prefix_formatting_rule();
 1655|  25.4k|}
_ZNK4i18n12phonenumbers12NumberFormat41_internal_national_prefix_formatting_ruleEv:
 1664|  51.3k|inline const std::string& NumberFormat::_internal_national_prefix_formatting_rule() const {
 1665|  51.3k|  return national_prefix_formatting_rule_.Get();
 1666|  51.3k|}
_ZN4i18n12phonenumbers12NumberFormat45_internal_set_national_prefix_formatting_ruleERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1667|  25.8k|inline void NumberFormat::_internal_set_national_prefix_formatting_rule(const std::string& value) {
 1668|  25.8k|  _has_bits_[0] |= 0x00000004u;
 1669|  25.8k|  national_prefix_formatting_rule_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1670|  25.8k|}
_ZN4i18n12phonenumbers12NumberFormat49_internal_mutable_national_prefix_formatting_ruleEv:
 1690|    523|inline std::string* NumberFormat::_internal_mutable_national_prefix_formatting_rule() {
 1691|    523|  _has_bits_[0] |= 0x00000004u;
 1692|    523|  return national_prefix_formatting_rule_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1693|    523|}
_ZNK4i18n12phonenumbers12NumberFormat50_internal_national_prefix_optional_when_formattingEv:
 1725|  1.20k|inline bool NumberFormat::_internal_national_prefix_optional_when_formatting() const {
 1726|  1.20k|  return national_prefix_optional_when_formatting_;
 1727|  1.20k|}
_ZNK4i18n12phonenumbers12NumberFormat40national_prefix_optional_when_formattingEv:
 1728|  1.20k|inline bool NumberFormat::national_prefix_optional_when_formatting() const {
 1729|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.NumberFormat.national_prefix_optional_when_formatting)
 1730|  1.20k|  return _internal_national_prefix_optional_when_formatting();
 1731|  1.20k|}
_ZNK4i18n12phonenumbers12NumberFormat47_internal_domestic_carrier_code_formatting_ruleEv:
 1765|  49.1k|inline const std::string& NumberFormat::_internal_domestic_carrier_code_formatting_rule() const {
 1766|  49.1k|  return domestic_carrier_code_formatting_rule_.Get();
 1767|  49.1k|}
_ZN4i18n12phonenumbers12NumberFormat51_internal_set_domestic_carrier_code_formatting_ruleERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1768|  49.1k|inline void NumberFormat::_internal_set_domestic_carrier_code_formatting_rule(const std::string& value) {
 1769|  49.1k|  _has_bits_[0] |= 0x00000008u;
 1770|  49.1k|  domestic_carrier_code_formatting_rule_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1771|  49.1k|}
_ZN4i18n12phonenumbers12NumberFormat55_internal_mutable_domestic_carrier_code_formatting_ruleEv:
 1791|     55|inline std::string* NumberFormat::_internal_mutable_domestic_carrier_code_formatting_rule() {
 1792|     55|  _has_bits_[0] |= 0x00000008u;
 1793|     55|  return domestic_carrier_code_formatting_rule_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1794|     55|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc37_internal_has_national_number_patternEv:
 1819|  3.04k|inline bool PhoneNumberDesc::_internal_has_national_number_pattern() const {
 1820|  3.04k|  bool value = (_has_bits_[0] & 0x00000001u) != 0;
 1821|  3.04k|  return value;
 1822|  3.04k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc23national_number_patternEv:
 1830|   108k|inline const std::string& PhoneNumberDesc::national_number_pattern() const {
 1831|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumberDesc.national_number_pattern)
 1832|   108k|  return _internal_national_number_pattern();
 1833|   108k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc33_internal_national_number_patternEv:
 1842|   109k|inline const std::string& PhoneNumberDesc::_internal_national_number_pattern() const {
 1843|   109k|  return national_number_pattern_.Get();
 1844|   109k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc41_internal_mutable_national_number_patternEv:
 1868|  1.42k|inline std::string* PhoneNumberDesc::_internal_mutable_national_number_pattern() {
 1869|  1.42k|  _has_bits_[0] |= 0x00000001u;
 1870|  1.42k|  return national_number_pattern_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1871|  1.42k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc30_internal_possible_length_sizeEv:
 1892|   215k|inline int PhoneNumberDesc::_internal_possible_length_size() const {
 1893|   215k|  return possible_length_.size();
 1894|   215k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc20possible_length_sizeEv:
 1895|   215k|inline int PhoneNumberDesc::possible_length_size() const {
 1896|   215k|  return _internal_possible_length_size();
 1897|   215k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc29_internal_add_possible_lengthEi:
 1912|  3.24k|inline void PhoneNumberDesc::_internal_add_possible_length(::PROTOBUF_NAMESPACE_ID::int32 value) {
 1913|  3.24k|  possible_length_.Add(value);
 1914|  3.24k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc25_internal_possible_lengthEv:
 1920|   517k|PhoneNumberDesc::_internal_possible_length() const {
 1921|   517k|  return possible_length_;
 1922|   517k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc15possible_lengthEv:
 1924|   517k|PhoneNumberDesc::possible_length() const {
 1925|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneNumberDesc.possible_length)
 1926|   517k|  return _internal_possible_length();
 1927|   517k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc40_internal_add_possible_length_local_onlyEi:
 1959|    354|inline void PhoneNumberDesc::_internal_add_possible_length_local_only(::PROTOBUF_NAMESPACE_ID::int32 value) {
 1960|    354|  possible_length_local_only_.Add(value);
 1961|    354|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc36_internal_possible_length_local_onlyEv:
 1967|  45.5k|PhoneNumberDesc::_internal_possible_length_local_only() const {
 1968|  45.5k|  return possible_length_local_only_;
 1969|  45.5k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc26possible_length_local_onlyEv:
 1971|  45.5k|PhoneNumberDesc::possible_length_local_only() const {
 1972|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneNumberDesc.possible_length_local_only)
 1973|  45.5k|  return _internal_possible_length_local_only();
 1974|  45.5k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc28_internal_has_example_numberEv:
 1986|  3.04k|inline bool PhoneNumberDesc::_internal_has_example_number() const {
 1987|  3.04k|  bool value = (_has_bits_[0] & 0x00000002u) != 0;
 1988|  3.04k|  return value;
 1989|  3.04k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc24_internal_example_numberEv:
 2009|  1.14k|inline const std::string& PhoneNumberDesc::_internal_example_number() const {
 2010|  1.14k|  return example_number_.Get();
 2011|  1.14k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc32_internal_mutable_example_numberEv:
 2035|  1.14k|inline std::string* PhoneNumberDesc::_internal_mutable_example_number() {
 2036|  1.14k|  _has_bits_[0] |= 0x00000002u;
 2037|  1.14k|  return example_number_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 2038|  1.14k|}
_ZNK4i18n12phonenumbers13PhoneMetadata26_internal_has_general_descEv:
 2063|    254|inline bool PhoneMetadata::_internal_has_general_desc() const {
 2064|    254|  bool value = (_has_bits_[0] & 0x00000100u) != 0;
 2065|    254|  PROTOBUF_ASSUME(!value || general_desc_ != nullptr);
 2066|    254|  return value;
 2067|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata22_internal_general_descEv:
 2075|   120k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_general_desc() const {
 2076|   120k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = general_desc_;
 2077|   120k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2077:10): [True: 120k, False: 0]
  ------------------
 2078|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2079|   120k|}
_ZNK4i18n12phonenumbers13PhoneMetadata12general_descEv:
 2080|   120k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::general_desc() const {
 2081|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.general_desc)
 2082|   120k|  return _internal_general_desc();
 2083|   120k|}
_ZN4i18n12phonenumbers13PhoneMetadata30_internal_mutable_general_descEv:
 2113|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_general_desc() {
 2114|    254|  _has_bits_[0] |= 0x00000100u;
 2115|    254|  if (general_desc_ == nullptr) {
  ------------------
  |  Branch (2115:7): [True: 254, False: 0]
  ------------------
 2116|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2117|    254|    general_desc_ = p;
 2118|    254|  }
 2119|    254|  return general_desc_;
 2120|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata24_internal_has_fixed_lineEv:
 2146|    254|inline bool PhoneMetadata::_internal_has_fixed_line() const {
 2147|    254|  bool value = (_has_bits_[0] & 0x00000200u) != 0;
 2148|    254|  PROTOBUF_ASSUME(!value || fixed_line_ != nullptr);
 2149|    254|  return value;
 2150|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata20_internal_fixed_lineEv:
 2158|  13.5k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_fixed_line() const {
 2159|  13.5k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = fixed_line_;
 2160|  13.5k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2160:10): [True: 13.5k, False: 0]
  ------------------
 2161|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2162|  13.5k|}
_ZNK4i18n12phonenumbers13PhoneMetadata10fixed_lineEv:
 2163|  13.5k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::fixed_line() const {
 2164|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.fixed_line)
 2165|  13.5k|  return _internal_fixed_line();
 2166|  13.5k|}
_ZN4i18n12phonenumbers13PhoneMetadata28_internal_mutable_fixed_lineEv:
 2196|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_fixed_line() {
 2197|    254|  _has_bits_[0] |= 0x00000200u;
 2198|    254|  if (fixed_line_ == nullptr) {
  ------------------
  |  Branch (2198:7): [True: 254, False: 0]
  ------------------
 2199|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2200|    254|    fixed_line_ = p;
 2201|    254|  }
 2202|    254|  return fixed_line_;
 2203|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata20_internal_has_mobileEv:
 2229|    254|inline bool PhoneMetadata::_internal_has_mobile() const {
 2230|    254|  bool value = (_has_bits_[0] & 0x00000400u) != 0;
 2231|    254|  PROTOBUF_ASSUME(!value || mobile_ != nullptr);
 2232|    254|  return value;
 2233|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata16_internal_mobileEv:
 2241|  13.0k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_mobile() const {
 2242|  13.0k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = mobile_;
 2243|  13.0k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2243:10): [True: 13.0k, False: 0]
  ------------------
 2244|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2245|  13.0k|}
_ZNK4i18n12phonenumbers13PhoneMetadata6mobileEv:
 2246|  13.0k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::mobile() const {
 2247|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.mobile)
 2248|  13.0k|  return _internal_mobile();
 2249|  13.0k|}
_ZN4i18n12phonenumbers13PhoneMetadata24_internal_mutable_mobileEv:
 2279|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_mobile() {
 2280|    254|  _has_bits_[0] |= 0x00000400u;
 2281|    254|  if (mobile_ == nullptr) {
  ------------------
  |  Branch (2281:7): [True: 254, False: 0]
  ------------------
 2282|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2283|    254|    mobile_ = p;
 2284|    254|  }
 2285|    254|  return mobile_;
 2286|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata23_internal_has_toll_freeEv:
 2312|    254|inline bool PhoneMetadata::_internal_has_toll_free() const {
 2313|    254|  bool value = (_has_bits_[0] & 0x00000800u) != 0;
 2314|    254|  PROTOBUF_ASSUME(!value || toll_free_ != nullptr);
 2315|    254|  return value;
 2316|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata19_internal_toll_freeEv:
 2324|  14.6k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_toll_free() const {
 2325|  14.6k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = toll_free_;
 2326|  14.6k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2326:10): [True: 14.6k, False: 0]
  ------------------
 2327|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2328|  14.6k|}
_ZNK4i18n12phonenumbers13PhoneMetadata9toll_freeEv:
 2329|  14.6k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::toll_free() const {
 2330|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.toll_free)
 2331|  14.6k|  return _internal_toll_free();
 2332|  14.6k|}
_ZN4i18n12phonenumbers13PhoneMetadata27_internal_mutable_toll_freeEv:
 2362|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_toll_free() {
 2363|    254|  _has_bits_[0] |= 0x00000800u;
 2364|    254|  if (toll_free_ == nullptr) {
  ------------------
  |  Branch (2364:7): [True: 254, False: 0]
  ------------------
 2365|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2366|    254|    toll_free_ = p;
 2367|    254|  }
 2368|    254|  return toll_free_;
 2369|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata26_internal_has_premium_rateEv:
 2395|    254|inline bool PhoneMetadata::_internal_has_premium_rate() const {
 2396|    254|  bool value = (_has_bits_[0] & 0x00001000u) != 0;
 2397|    254|  PROTOBUF_ASSUME(!value || premium_rate_ != nullptr);
 2398|    254|  return value;
 2399|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata22_internal_premium_rateEv:
 2407|  14.7k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_premium_rate() const {
 2408|  14.7k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = premium_rate_;
 2409|  14.7k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2409:10): [True: 14.7k, False: 0]
  ------------------
 2410|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2411|  14.7k|}
_ZNK4i18n12phonenumbers13PhoneMetadata12premium_rateEv:
 2412|  14.7k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::premium_rate() const {
 2413|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.premium_rate)
 2414|  14.7k|  return _internal_premium_rate();
 2415|  14.7k|}
_ZN4i18n12phonenumbers13PhoneMetadata30_internal_mutable_premium_rateEv:
 2445|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_premium_rate() {
 2446|    254|  _has_bits_[0] |= 0x00001000u;
 2447|    254|  if (premium_rate_ == nullptr) {
  ------------------
  |  Branch (2447:7): [True: 254, False: 0]
  ------------------
 2448|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2449|    254|    premium_rate_ = p;
 2450|    254|  }
 2451|    254|  return premium_rate_;
 2452|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata25_internal_has_shared_costEv:
 2478|    254|inline bool PhoneMetadata::_internal_has_shared_cost() const {
 2479|    254|  bool value = (_has_bits_[0] & 0x00002000u) != 0;
 2480|    254|  PROTOBUF_ASSUME(!value || shared_cost_ != nullptr);
 2481|    254|  return value;
 2482|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata21_internal_shared_costEv:
 2490|  14.3k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_shared_cost() const {
 2491|  14.3k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = shared_cost_;
 2492|  14.3k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2492:10): [True: 14.3k, False: 0]
  ------------------
 2493|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2494|  14.3k|}
_ZNK4i18n12phonenumbers13PhoneMetadata11shared_costEv:
 2495|  14.3k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::shared_cost() const {
 2496|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.shared_cost)
 2497|  14.3k|  return _internal_shared_cost();
 2498|  14.3k|}
_ZN4i18n12phonenumbers13PhoneMetadata29_internal_mutable_shared_costEv:
 2528|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_shared_cost() {
 2529|    254|  _has_bits_[0] |= 0x00002000u;
 2530|    254|  if (shared_cost_ == nullptr) {
  ------------------
  |  Branch (2530:7): [True: 254, False: 0]
  ------------------
 2531|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2532|    254|    shared_cost_ = p;
 2533|    254|  }
 2534|    254|  return shared_cost_;
 2535|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata29_internal_has_personal_numberEv:
 2561|    254|inline bool PhoneMetadata::_internal_has_personal_number() const {
 2562|    254|  bool value = (_has_bits_[0] & 0x00004000u) != 0;
 2563|    254|  PROTOBUF_ASSUME(!value || personal_number_ != nullptr);
 2564|    254|  return value;
 2565|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata25_internal_personal_numberEv:
 2573|  13.8k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_personal_number() const {
 2574|  13.8k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = personal_number_;
 2575|  13.8k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2575:10): [True: 13.8k, False: 0]
  ------------------
 2576|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2577|  13.8k|}
_ZNK4i18n12phonenumbers13PhoneMetadata15personal_numberEv:
 2578|  13.8k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::personal_number() const {
 2579|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.personal_number)
 2580|  13.8k|  return _internal_personal_number();
 2581|  13.8k|}
_ZN4i18n12phonenumbers13PhoneMetadata33_internal_mutable_personal_numberEv:
 2611|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_personal_number() {
 2612|    254|  _has_bits_[0] |= 0x00004000u;
 2613|    254|  if (personal_number_ == nullptr) {
  ------------------
  |  Branch (2613:7): [True: 254, False: 0]
  ------------------
 2614|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2615|    254|    personal_number_ = p;
 2616|    254|  }
 2617|    254|  return personal_number_;
 2618|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata18_internal_has_voipEv:
 2644|    254|inline bool PhoneMetadata::_internal_has_voip() const {
 2645|    254|  bool value = (_has_bits_[0] & 0x00008000u) != 0;
 2646|    254|  PROTOBUF_ASSUME(!value || voip_ != nullptr);
 2647|    254|  return value;
 2648|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata14_internal_voipEv:
 2656|  14.2k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_voip() const {
 2657|  14.2k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = voip_;
 2658|  14.2k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2658:10): [True: 14.2k, False: 0]
  ------------------
 2659|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2660|  14.2k|}
_ZNK4i18n12phonenumbers13PhoneMetadata4voipEv:
 2661|  14.2k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::voip() const {
 2662|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.voip)
 2663|  14.2k|  return _internal_voip();
 2664|  14.2k|}
_ZN4i18n12phonenumbers13PhoneMetadata22_internal_mutable_voipEv:
 2694|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_voip() {
 2695|    254|  _has_bits_[0] |= 0x00008000u;
 2696|    254|  if (voip_ == nullptr) {
  ------------------
  |  Branch (2696:7): [True: 254, False: 0]
  ------------------
 2697|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2698|    254|    voip_ = p;
 2699|    254|  }
 2700|    254|  return voip_;
 2701|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata19_internal_has_pagerEv:
 2727|    254|inline bool PhoneMetadata::_internal_has_pager() const {
 2728|    254|  bool value = (_has_bits_[0] & 0x00010000u) != 0;
 2729|    254|  PROTOBUF_ASSUME(!value || pager_ != nullptr);
 2730|    254|  return value;
 2731|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata15_internal_pagerEv:
 2739|  13.7k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_pager() const {
 2740|  13.7k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = pager_;
 2741|  13.7k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2741:10): [True: 13.7k, False: 0]
  ------------------
 2742|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2743|  13.7k|}
_ZNK4i18n12phonenumbers13PhoneMetadata5pagerEv:
 2744|  13.7k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::pager() const {
 2745|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.pager)
 2746|  13.7k|  return _internal_pager();
 2747|  13.7k|}
_ZN4i18n12phonenumbers13PhoneMetadata23_internal_mutable_pagerEv:
 2777|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_pager() {
 2778|    254|  _has_bits_[0] |= 0x00010000u;
 2779|    254|  if (pager_ == nullptr) {
  ------------------
  |  Branch (2779:7): [True: 254, False: 0]
  ------------------
 2780|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2781|    254|    pager_ = p;
 2782|    254|  }
 2783|    254|  return pager_;
 2784|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata17_internal_has_uanEv:
 2810|    254|inline bool PhoneMetadata::_internal_has_uan() const {
 2811|    254|  bool value = (_has_bits_[0] & 0x00040000u) != 0;
 2812|    254|  PROTOBUF_ASSUME(!value || uan_ != nullptr);
 2813|    254|  return value;
 2814|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata13_internal_uanEv:
 2822|  13.6k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_uan() const {
 2823|  13.6k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = uan_;
 2824|  13.6k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2824:10): [True: 13.6k, False: 0]
  ------------------
 2825|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2826|  13.6k|}
_ZNK4i18n12phonenumbers13PhoneMetadata3uanEv:
 2827|  13.6k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::uan() const {
 2828|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.uan)
 2829|  13.6k|  return _internal_uan();
 2830|  13.6k|}
_ZN4i18n12phonenumbers13PhoneMetadata21_internal_mutable_uanEv:
 2860|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_uan() {
 2861|    254|  _has_bits_[0] |= 0x00040000u;
 2862|    254|  if (uan_ == nullptr) {
  ------------------
  |  Branch (2862:7): [True: 254, False: 0]
  ------------------
 2863|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2864|    254|    uan_ = p;
 2865|    254|  }
 2866|    254|  return uan_;
 2867|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata23_internal_has_emergencyEv:
 2893|    254|inline bool PhoneMetadata::_internal_has_emergency() const {
 2894|    254|  bool value = (_has_bits_[0] & 0x00080000u) != 0;
 2895|    254|  PROTOBUF_ASSUME(!value || emergency_ != nullptr);
 2896|    254|  return value;
 2897|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata23_internal_has_voicemailEv:
 2976|    254|inline bool PhoneMetadata::_internal_has_voicemail() const {
 2977|    254|  bool value = (_has_bits_[0] & 0x00100000u) != 0;
 2978|    254|  PROTOBUF_ASSUME(!value || voicemail_ != nullptr);
 2979|    254|  return value;
 2980|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata19_internal_voicemailEv:
 2988|  13.5k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_voicemail() const {
 2989|  13.5k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = voicemail_;
 2990|  13.5k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2990:10): [True: 13.5k, False: 0]
  ------------------
 2991|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2992|  13.5k|}
_ZNK4i18n12phonenumbers13PhoneMetadata9voicemailEv:
 2993|  13.5k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::voicemail() const {
 2994|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.voicemail)
 2995|  13.5k|  return _internal_voicemail();
 2996|  13.5k|}
_ZN4i18n12phonenumbers13PhoneMetadata27_internal_mutable_voicemailEv:
 3026|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_voicemail() {
 3027|    254|  _has_bits_[0] |= 0x00100000u;
 3028|    254|  if (voicemail_ == nullptr) {
  ------------------
  |  Branch (3028:7): [True: 254, False: 0]
  ------------------
 3029|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3030|    254|    voicemail_ = p;
 3031|    254|  }
 3032|    254|  return voicemail_;
 3033|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata24_internal_has_short_codeEv:
 3059|    254|inline bool PhoneMetadata::_internal_has_short_code() const {
 3060|    254|  bool value = (_has_bits_[0] & 0x00200000u) != 0;
 3061|    254|  PROTOBUF_ASSUME(!value || short_code_ != nullptr);
 3062|    254|  return value;
 3063|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata27_internal_has_standard_rateEv:
 3142|    254|inline bool PhoneMetadata::_internal_has_standard_rate() const {
 3143|    254|  bool value = (_has_bits_[0] & 0x00400000u) != 0;
 3144|    254|  PROTOBUF_ASSUME(!value || standard_rate_ != nullptr);
 3145|    254|  return value;
 3146|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata30_internal_has_carrier_specificEv:
 3225|    254|inline bool PhoneMetadata::_internal_has_carrier_specific() const {
 3226|    254|  bool value = (_has_bits_[0] & 0x00800000u) != 0;
 3227|    254|  PROTOBUF_ASSUME(!value || carrier_specific_ != nullptr);
 3228|    254|  return value;
 3229|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata26_internal_has_sms_servicesEv:
 3308|    254|inline bool PhoneMetadata::_internal_has_sms_services() const {
 3309|    254|  bool value = (_has_bits_[0] & 0x01000000u) != 0;
 3310|    254|  PROTOBUF_ASSUME(!value || sms_services_ != nullptr);
 3311|    254|  return value;
 3312|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata39_internal_has_no_international_diallingEv:
 3391|    254|inline bool PhoneMetadata::_internal_has_no_international_dialling() const {
 3392|    254|  bool value = (_has_bits_[0] & 0x00020000u) != 0;
 3393|    254|  PROTOBUF_ASSUME(!value || no_international_dialling_ != nullptr);
 3394|    254|  return value;
 3395|    254|}
_ZN4i18n12phonenumbers13PhoneMetadata43_internal_mutable_no_international_diallingEv:
 3441|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_no_international_dialling() {
 3442|    254|  _has_bits_[0] |= 0x00020000u;
 3443|    254|  if (no_international_dialling_ == nullptr) {
  ------------------
  |  Branch (3443:7): [True: 254, False: 0]
  ------------------
 3444|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3445|    254|    no_international_dialling_ = p;
 3446|    254|  }
 3447|    254|  return no_international_dialling_;
 3448|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata16_internal_has_idEv:
 3474|    254|inline bool PhoneMetadata::_internal_has_id() const {
 3475|    254|  bool value = (_has_bits_[0] & 0x00000001u) != 0;
 3476|    254|  return value;
 3477|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata2idEv:
 3485|    254|inline const std::string& PhoneMetadata::id() const {
 3486|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.id)
 3487|    254|  return _internal_id();
 3488|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata12_internal_idEv:
 3497|    508|inline const std::string& PhoneMetadata::_internal_id() const {
 3498|    508|  return id_.Get();
 3499|    508|}
_ZN4i18n12phonenumbers13PhoneMetadata20_internal_mutable_idEv:
 3523|    300|inline std::string* PhoneMetadata::_internal_mutable_id() {
 3524|    300|  _has_bits_[0] |= 0x00000001u;
 3525|    300|  return id_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3526|    300|}
_ZNK4i18n12phonenumbers13PhoneMetadata22_internal_country_codeEv:
 3558|  91.9k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneMetadata::_internal_country_code() const {
 3559|  91.9k|  return country_code_;
 3560|  91.9k|}
_ZNK4i18n12phonenumbers13PhoneMetadata12country_codeEv:
 3561|  91.9k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneMetadata::country_code() const {
 3562|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.country_code)
 3563|  91.9k|  return _internal_country_code();
 3564|  91.9k|}
_ZNK4i18n12phonenumbers13PhoneMetadata34_internal_has_international_prefixEv:
 3575|    254|inline bool PhoneMetadata::_internal_has_international_prefix() const {
 3576|    254|  bool value = (_has_bits_[0] & 0x00000002u) != 0;
 3577|    254|  return value;
 3578|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata20international_prefixEv:
 3586|  38.1k|inline const std::string& PhoneMetadata::international_prefix() const {
 3587|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.international_prefix)
 3588|  38.1k|  return _internal_international_prefix();
 3589|  38.1k|}
_ZNK4i18n12phonenumbers13PhoneMetadata30_internal_international_prefixEv:
 3598|  38.4k|inline const std::string& PhoneMetadata::_internal_international_prefix() const {
 3599|  38.4k|  return international_prefix_.Get();
 3600|  38.4k|}
_ZN4i18n12phonenumbers13PhoneMetadata38_internal_mutable_international_prefixEv:
 3624|    245|inline std::string* PhoneMetadata::_internal_mutable_international_prefix() {
 3625|    245|  _has_bits_[0] |= 0x00000002u;
 3626|    245|  return international_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3627|    245|}
_ZNK4i18n12phonenumbers13PhoneMetadata44_internal_has_preferred_international_prefixEv:
 3648|    254|inline bool PhoneMetadata::_internal_has_preferred_international_prefix() const {
 3649|    254|  bool value = (_has_bits_[0] & 0x00000040u) != 0;
 3650|    254|  return value;
 3651|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata40_internal_preferred_international_prefixEv:
 3671|     25|inline const std::string& PhoneMetadata::_internal_preferred_international_prefix() const {
 3672|     25|  return preferred_international_prefix_.Get();
 3673|     25|}
_ZN4i18n12phonenumbers13PhoneMetadata48_internal_mutable_preferred_international_prefixEv:
 3697|     25|inline std::string* PhoneMetadata::_internal_mutable_preferred_international_prefix() {
 3698|     25|  _has_bits_[0] |= 0x00000040u;
 3699|     25|  return preferred_international_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3700|     25|}
_ZNK4i18n12phonenumbers13PhoneMetadata29_internal_has_national_prefixEv:
 3721|    254|inline bool PhoneMetadata::_internal_has_national_prefix() const {
 3722|    254|  bool value = (_has_bits_[0] & 0x00000004u) != 0;
 3723|    254|  return value;
 3724|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata15national_prefixEv:
 3732|  5.99k|inline const std::string& PhoneMetadata::national_prefix() const {
 3733|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.national_prefix)
 3734|  5.99k|  return _internal_national_prefix();
 3735|  5.99k|}
_ZNK4i18n12phonenumbers13PhoneMetadata25_internal_national_prefixEv:
 3744|  6.13k|inline const std::string& PhoneMetadata::_internal_national_prefix() const {
 3745|  6.13k|  return national_prefix_.Get();
 3746|  6.13k|}
_ZN4i18n12phonenumbers13PhoneMetadata33_internal_mutable_national_prefixEv:
 3770|    144|inline std::string* PhoneMetadata::_internal_mutable_national_prefix() {
 3771|    144|  _has_bits_[0] |= 0x00000004u;
 3772|    144|  return national_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3773|    144|}
_ZNK4i18n12phonenumbers13PhoneMetadata35_internal_has_preferred_extn_prefixEv:
 3794|    254|inline bool PhoneMetadata::_internal_has_preferred_extn_prefix() const {
 3795|    254|  bool value = (_has_bits_[0] & 0x00000008u) != 0;
 3796|    254|  return value;
 3797|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata31_internal_preferred_extn_prefixEv:
 3817|      5|inline const std::string& PhoneMetadata::_internal_preferred_extn_prefix() const {
 3818|      5|  return preferred_extn_prefix_.Get();
 3819|      5|}
_ZN4i18n12phonenumbers13PhoneMetadata39_internal_mutable_preferred_extn_prefixEv:
 3843|      5|inline std::string* PhoneMetadata::_internal_mutable_preferred_extn_prefix() {
 3844|      5|  _has_bits_[0] |= 0x00000008u;
 3845|      5|  return preferred_extn_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3846|      5|}
_ZNK4i18n12phonenumbers13PhoneMetadata41_internal_has_national_prefix_for_parsingEv:
 3867|    254|inline bool PhoneMetadata::_internal_has_national_prefix_for_parsing() const {
 3868|    254|  bool value = (_has_bits_[0] & 0x00000010u) != 0;
 3869|    254|  return value;
 3870|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata27national_prefix_for_parsingEv:
 3878|  43.3k|inline const std::string& PhoneMetadata::national_prefix_for_parsing() const {
 3879|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.national_prefix_for_parsing)
 3880|  43.3k|  return _internal_national_prefix_for_parsing();
 3881|  43.3k|}
_ZNK4i18n12phonenumbers13PhoneMetadata37_internal_national_prefix_for_parsingEv:
 3890|  43.5k|inline const std::string& PhoneMetadata::_internal_national_prefix_for_parsing() const {
 3891|  43.5k|  return national_prefix_for_parsing_.Get();
 3892|  43.5k|}
_ZN4i18n12phonenumbers13PhoneMetadata45_internal_mutable_national_prefix_for_parsingEv:
 3916|    150|inline std::string* PhoneMetadata::_internal_mutable_national_prefix_for_parsing() {
 3917|    150|  _has_bits_[0] |= 0x00000010u;
 3918|    150|  return national_prefix_for_parsing_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3919|    150|}
_ZNK4i18n12phonenumbers13PhoneMetadata44_internal_has_national_prefix_transform_ruleEv:
 3940|    254|inline bool PhoneMetadata::_internal_has_national_prefix_transform_rule() const {
 3941|    254|  bool value = (_has_bits_[0] & 0x00000020u) != 0;
 3942|    254|  return value;
 3943|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata30national_prefix_transform_ruleEv:
 3951|  41.2k|inline const std::string& PhoneMetadata::national_prefix_transform_rule() const {
 3952|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.national_prefix_transform_rule)
 3953|  41.2k|  return _internal_national_prefix_transform_rule();
 3954|  41.2k|}
_ZNK4i18n12phonenumbers13PhoneMetadata40_internal_national_prefix_transform_ruleEv:
 3963|  41.2k|inline const std::string& PhoneMetadata::_internal_national_prefix_transform_rule() const {
 3964|  41.2k|  return national_prefix_transform_rule_.Get();
 3965|  41.2k|}
_ZN4i18n12phonenumbers13PhoneMetadata48_internal_mutable_national_prefix_transform_ruleEv:
 3989|     32|inline std::string* PhoneMetadata::_internal_mutable_national_prefix_transform_rule() {
 3990|     32|  _has_bits_[0] |= 0x00000020u;
 3991|     32|  return national_prefix_transform_rule_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3992|     32|}
_ZNK4i18n12phonenumbers13PhoneMetadata44_internal_same_mobile_and_fixed_line_patternEv:
 4024|  13.5k|inline bool PhoneMetadata::_internal_same_mobile_and_fixed_line_pattern() const {
 4025|  13.5k|  return same_mobile_and_fixed_line_pattern_;
 4026|  13.5k|}
_ZNK4i18n12phonenumbers13PhoneMetadata34same_mobile_and_fixed_line_patternEv:
 4027|  13.5k|inline bool PhoneMetadata::same_mobile_and_fixed_line_pattern() const {
 4028|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.same_mobile_and_fixed_line_pattern)
 4029|  13.5k|  return _internal_same_mobile_and_fixed_line_pattern();
 4030|  13.5k|}
_ZN4i18n12phonenumbers13PhoneMetadata27_internal_add_number_formatEv:
 4066|    912|inline ::i18n::phonenumbers::NumberFormat* PhoneMetadata::_internal_add_number_format() {
 4067|    912|  return number_format_.Add();
 4068|    912|}
_ZNK4i18n12phonenumbers13PhoneMetadata13number_formatEv:
 4074|  72.1k|PhoneMetadata::number_format() const {
 4075|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneMetadata.number_format)
 4076|  72.1k|  return number_format_;
 4077|  72.1k|}
_ZNK4i18n12phonenumbers13PhoneMetadata33_internal_intl_number_format_sizeEv:
 4080|  7.83k|inline int PhoneMetadata::_internal_intl_number_format_size() const {
 4081|  7.83k|  return intl_number_format_.size();
 4082|  7.83k|}
_ZNK4i18n12phonenumbers13PhoneMetadata23intl_number_format_sizeEv:
 4083|  7.83k|inline int PhoneMetadata::intl_number_format_size() const {
 4084|  7.83k|  return _internal_intl_number_format_size();
 4085|  7.83k|}
_ZN4i18n12phonenumbers13PhoneMetadata32_internal_add_intl_number_formatEv:
 4105|    179|inline ::i18n::phonenumbers::NumberFormat* PhoneMetadata::_internal_add_intl_number_format() {
 4106|    179|  return intl_number_format_.Add();
 4107|    179|}
_ZNK4i18n12phonenumbers13PhoneMetadata18intl_number_formatEv:
 4113|    709|PhoneMetadata::intl_number_format() const {
 4114|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneMetadata.intl_number_format)
 4115|    709|  return intl_number_format_;
 4116|    709|}
_ZNK4i18n12phonenumbers13PhoneMetadata31_internal_main_country_for_codeEv:
 4130|     39|inline bool PhoneMetadata::_internal_main_country_for_code() const {
 4131|     39|  return main_country_for_code_;
 4132|     39|}
_ZNK4i18n12phonenumbers13PhoneMetadata21main_country_for_codeEv:
 4133|     39|inline bool PhoneMetadata::main_country_for_code() const {
 4134|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.main_country_for_code)
 4135|     39|  return _internal_main_country_for_code();
 4136|     39|}
_ZNK4i18n12phonenumbers13PhoneMetadata28_internal_has_leading_digitsEv:
 4147|  36.9k|inline bool PhoneMetadata::_internal_has_leading_digits() const {
 4148|  36.9k|  bool value = (_has_bits_[0] & 0x00000080u) != 0;
 4149|  36.9k|  return value;
 4150|  36.9k|}
_ZNK4i18n12phonenumbers13PhoneMetadata18has_leading_digitsEv:
 4151|  36.7k|inline bool PhoneMetadata::has_leading_digits() const {
 4152|  36.7k|  return _internal_has_leading_digits();
 4153|  36.7k|}
_ZNK4i18n12phonenumbers13PhoneMetadata14leading_digitsEv:
 4158|  31.2k|inline const std::string& PhoneMetadata::leading_digits() const {
 4159|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.leading_digits)
 4160|  31.2k|  return _internal_leading_digits();
 4161|  31.2k|}
_ZNK4i18n12phonenumbers13PhoneMetadata24_internal_leading_digitsEv:
 4170|  31.2k|inline const std::string& PhoneMetadata::_internal_leading_digits() const {
 4171|  31.2k|  return leading_digits_.Get();
 4172|  31.2k|}
_ZN4i18n12phonenumbers13PhoneMetadata32_internal_mutable_leading_digitsEv:
 4196|     36|inline std::string* PhoneMetadata::_internal_mutable_leading_digits() {
 4197|     36|  _has_bits_[0] |= 0x00000080u;
 4198|     36|  return leading_digits_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 4199|     36|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection22_internal_add_metadataEv:
 4277|    300|inline ::i18n::phonenumbers::PhoneMetadata* PhoneMetadataCollection::_internal_add_metadata() {
 4278|    300|  return metadata_.Add();
 4279|    300|}
_ZNK4i18n12phonenumbers23PhoneMetadataCollection8metadataEv:
 4285|    304|PhoneMetadataCollection::metadata() const {
 4286|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneMetadataCollection.metadata)
 4287|    304|  return metadata_;
 4288|    304|}

_ZN4i18n12phonenumbers13ExactlySameAsERKNS0_11PhoneNumberES3_:
   24|  2.64k|                   const PhoneNumber& second_number) {
   25|  2.64k|  if (first_number.has_country_code() != second_number.has_country_code() ||
  ------------------
  |  Branch (25:7): [True: 0, False: 2.64k]
  ------------------
   26|  2.64k|      first_number.country_code() != second_number.country_code()) {
  ------------------
  |  Branch (26:7): [True: 158, False: 2.48k]
  ------------------
   27|    158|    return false;
   28|    158|  }
   29|  2.48k|  if (first_number.has_national_number() !=
  ------------------
  |  Branch (29:7): [True: 0, False: 2.48k]
  ------------------
   30|  2.48k|      second_number.has_national_number() ||
   31|  2.48k|      first_number.national_number() != second_number.national_number()) {
  ------------------
  |  Branch (31:7): [True: 1.75k, False: 730]
  ------------------
   32|  1.75k|    return false;
   33|  1.75k|  }
   34|    730|  if (first_number.has_extension() != second_number.has_extension() ||
  ------------------
  |  Branch (34:7): [True: 11, False: 719]
  ------------------
   35|    730|      first_number.extension() != second_number.extension()) {
  ------------------
  |  Branch (35:7): [True: 0, False: 719]
  ------------------
   36|     11|    return false;
   37|     11|  }
   38|    719|  if (first_number.has_italian_leading_zero() !=
  ------------------
  |  Branch (38:7): [True: 34, False: 685]
  ------------------
   39|    719|      second_number.has_italian_leading_zero() ||
   40|    719|      first_number.italian_leading_zero() !=
  ------------------
  |  Branch (40:7): [True: 0, False: 685]
  ------------------
   41|    685|      second_number.italian_leading_zero()) {
   42|     34|    return false;
   43|     34|  }
   44|    685|  if (first_number.has_number_of_leading_zeros() !=
  ------------------
  |  Branch (44:7): [True: 0, False: 685]
  ------------------
   45|    685|      second_number.has_number_of_leading_zeros() ||
   46|    685|      first_number.number_of_leading_zeros() !=
  ------------------
  |  Branch (46:7): [True: 10, False: 675]
  ------------------
   47|    685|      second_number.number_of_leading_zeros()) {
   48|     10|    return false;
   49|     10|  }
   50|    675|  if (first_number.has_raw_input() != second_number.has_raw_input() ||
  ------------------
  |  Branch (50:7): [True: 0, False: 675]
  ------------------
   51|    675|      first_number.raw_input() != second_number.raw_input()) {
  ------------------
  |  Branch (51:7): [True: 0, False: 675]
  ------------------
   52|      0|    return false;
   53|      0|  }
   54|    675|  if (first_number.has_country_code_source() !=
  ------------------
  |  Branch (54:7): [True: 0, False: 675]
  ------------------
   55|    675|      second_number.has_country_code_source() ||
   56|    675|      first_number.country_code_source() !=
  ------------------
  |  Branch (56:7): [True: 0, False: 675]
  ------------------
   57|    675|      second_number.country_code_source()) {
   58|      0|    return false;
   59|      0|  }
   60|    675|  if (first_number.has_preferred_domestic_carrier_code() !=
  ------------------
  |  Branch (60:7): [True: 0, False: 675]
  ------------------
   61|    675|      second_number.has_preferred_domestic_carrier_code() ||
   62|    675|      first_number.preferred_domestic_carrier_code() !=
  ------------------
  |  Branch (62:7): [True: 0, False: 675]
  ------------------
   63|    675|      second_number.preferred_domestic_carrier_code()) {
   64|      0|    return false;
   65|      0|  }
   66|    675|  return true;
   67|    675|}

_ZN4i18n12phonenumbers37PhoneNumber_CountryCodeSource_IsValidEi:
   37|  41.0k|bool PhoneNumber_CountryCodeSource_IsValid(int value) {
   38|  41.0k|  switch (value) {
   39|      0|    case 0:
  ------------------
  |  Branch (39:5): [True: 0, False: 41.0k]
  ------------------
   40|  5.30k|    case 1:
  ------------------
  |  Branch (40:5): [True: 5.30k, False: 35.7k]
  ------------------
   41|  7.42k|    case 5:
  ------------------
  |  Branch (41:5): [True: 2.12k, False: 38.9k]
  ------------------
   42|  8.74k|    case 10:
  ------------------
  |  Branch (42:5): [True: 1.32k, False: 39.7k]
  ------------------
   43|  41.0k|    case 20:
  ------------------
  |  Branch (43:5): [True: 32.3k, False: 8.74k]
  ------------------
   44|  41.0k|      return true;
   45|      0|    default:
  ------------------
  |  Branch (45:5): [True: 0, False: 41.0k]
  ------------------
   46|      0|      return false;
   47|  41.0k|  }
   48|  41.0k|}
_ZN4i18n12phonenumbers11PhoneNumberC2EPN6google8protobuf5ArenaE:
  146|   108k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena) {
  147|   108k|  SharedCtor();
  148|   108k|  RegisterArenaDtor(arena);
  149|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneNumber)
  150|   108k|}
_ZN4i18n12phonenumbers11PhoneNumberC2ERKS1_:
  152|  16.8k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(),
  153|  16.8k|      _has_bits_(from._has_bits_) {
  154|  16.8k|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
  155|  16.8k|  extension_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  156|  16.8k|  if (from._internal_has_extension()) {
  ------------------
  |  Branch (156:7): [True: 434, False: 16.4k]
  ------------------
  157|    434|    extension_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_extension(), 
  158|    434|      GetArena());
  159|    434|  }
  160|  16.8k|  raw_input_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  161|  16.8k|  if (from._internal_has_raw_input()) {
  ------------------
  |  Branch (161:7): [True: 0, False: 16.8k]
  ------------------
  162|      0|    raw_input_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_raw_input(), 
  163|      0|      GetArena());
  164|      0|  }
  165|  16.8k|  preferred_domestic_carrier_code_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  166|  16.8k|  if (from._internal_has_preferred_domestic_carrier_code()) {
  ------------------
  |  Branch (166:7): [True: 0, False: 16.8k]
  ------------------
  167|      0|    preferred_domestic_carrier_code_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_preferred_domestic_carrier_code(), 
  168|      0|      GetArena());
  169|      0|  }
  170|  16.8k|  ::memcpy(&national_number_, &from.national_number_,
  171|  16.8k|    static_cast<size_t>(reinterpret_cast<char*>(&number_of_leading_zeros_) -
  172|  16.8k|    reinterpret_cast<char*>(&national_number_)) + sizeof(number_of_leading_zeros_));
  173|       |  // @@protoc_insertion_point(copy_constructor:i18n.phonenumbers.PhoneNumber)
  174|  16.8k|}
_ZN4i18n12phonenumbers11PhoneNumberD2Ev:
  188|   125k|PhoneNumber::~PhoneNumber() {
  189|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneNumber)
  190|   125k|  SharedDtor();
  191|   125k|  _internal_metadata_.Delete<std::string>();
  192|   125k|}
_ZN4i18n12phonenumbers11PhoneNumber16default_instanceEv:
  210|  11.8k|const PhoneNumber& PhoneNumber::default_instance() {
  211|  11.8k|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_PhoneNumber_phonenumber_2eproto.base);
  212|  11.8k|  return *internal_default_instance();
  213|  11.8k|}
_ZN4i18n12phonenumbers11PhoneNumber5ClearEv:
  216|  9.99k|void PhoneNumber::Clear() {
  217|       |// @@protoc_insertion_point(message_clear_start:i18n.phonenumbers.PhoneNumber)
  218|  9.99k|  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  219|       |  // Prevent compiler warnings about cached_has_bits being unused
  220|  9.99k|  (void) cached_has_bits;
  221|       |
  222|  9.99k|  cached_has_bits = _has_bits_[0];
  223|  9.99k|  if (cached_has_bits & 0x00000007u) {
  ------------------
  |  Branch (223:7): [True: 0, False: 9.99k]
  ------------------
  224|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (224:9): [True: 0, False: 0]
  ------------------
  225|      0|      extension_.ClearNonDefaultToEmpty();
  226|      0|    }
  227|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (227:9): [True: 0, False: 0]
  ------------------
  228|      0|      raw_input_.ClearNonDefaultToEmpty();
  229|      0|    }
  230|      0|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (230:9): [True: 0, False: 0]
  ------------------
  231|      0|      preferred_domestic_carrier_code_.ClearNonDefaultToEmpty();
  232|      0|    }
  233|      0|  }
  234|  9.99k|  if (cached_has_bits & 0x000000f8u) {
  ------------------
  |  Branch (234:7): [True: 0, False: 9.99k]
  ------------------
  235|      0|    ::memset(&national_number_, 0, static_cast<size_t>(
  236|      0|        reinterpret_cast<char*>(&country_code_source_) -
  237|      0|        reinterpret_cast<char*>(&national_number_)) + sizeof(country_code_source_));
  238|      0|    number_of_leading_zeros_ = 1;
  239|      0|  }
  240|  9.99k|  _has_bits_.Clear();
  241|  9.99k|  _internal_metadata_.Clear<std::string>();
  242|  9.99k|}
_ZN4i18n12phonenumbers11PhoneNumber9MergeFromERKS1_:
  507|  9.99k|void PhoneNumber::MergeFrom(const PhoneNumber& from) {
  508|       |// @@protoc_insertion_point(class_specific_merge_from_start:i18n.phonenumbers.PhoneNumber)
  509|  9.99k|  GOOGLE_DCHECK_NE(&from, this);
  510|  9.99k|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
  511|  9.99k|  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  512|  9.99k|  (void) cached_has_bits;
  513|       |
  514|  9.99k|  cached_has_bits = from._has_bits_[0];
  515|  9.99k|  if (cached_has_bits & 0x000000ffu) {
  ------------------
  |  Branch (515:7): [True: 9.99k, False: 0]
  ------------------
  516|  9.99k|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (516:9): [True: 868, False: 9.12k]
  ------------------
  517|    868|      _internal_set_extension(from._internal_extension());
  518|    868|    }
  519|  9.99k|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (519:9): [True: 0, False: 9.99k]
  ------------------
  520|      0|      _internal_set_raw_input(from._internal_raw_input());
  521|      0|    }
  522|  9.99k|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (522:9): [True: 0, False: 9.99k]
  ------------------
  523|      0|      _internal_set_preferred_domestic_carrier_code(from._internal_preferred_domestic_carrier_code());
  524|      0|    }
  525|  9.99k|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (525:9): [True: 9.99k, False: 0]
  ------------------
  526|  9.99k|      national_number_ = from.national_number_;
  527|  9.99k|    }
  528|  9.99k|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (528:9): [True: 9.99k, False: 0]
  ------------------
  529|  9.99k|      country_code_ = from.country_code_;
  530|  9.99k|    }
  531|  9.99k|    if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (531:9): [True: 602, False: 9.39k]
  ------------------
  532|    602|      italian_leading_zero_ = from.italian_leading_zero_;
  533|    602|    }
  534|  9.99k|    if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (534:9): [True: 0, False: 9.99k]
  ------------------
  535|      0|      country_code_source_ = from.country_code_source_;
  536|      0|    }
  537|  9.99k|    if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (537:9): [True: 150, False: 9.84k]
  ------------------
  538|    150|      number_of_leading_zeros_ = from.number_of_leading_zeros_;
  539|    150|    }
  540|  9.99k|    _has_bits_[0] |= cached_has_bits;
  541|  9.99k|  }
  542|  9.99k|}
_ZN4i18n12phonenumbers11PhoneNumber8CopyFromERKS1_:
  544|  9.99k|void PhoneNumber::CopyFrom(const PhoneNumber& from) {
  545|       |// @@protoc_insertion_point(class_specific_copy_from_start:i18n.phonenumbers.PhoneNumber)
  546|  9.99k|  if (&from == this) return;
  ------------------
  |  Branch (546:7): [True: 0, False: 9.99k]
  ------------------
  547|  9.99k|  Clear();
  548|  9.99k|  MergeFrom(from);
  549|  9.99k|}
_ZN4i18n12phonenumbers11PhoneNumber12InternalSwapEPS1_:
  556|  33.7k|void PhoneNumber::InternalSwap(PhoneNumber* other) {
  557|  33.7k|  using std::swap;
  558|  33.7k|  _internal_metadata_.Swap<std::string>(&other->_internal_metadata_);
  559|  33.7k|  swap(_has_bits_[0], other->_has_bits_[0]);
  560|  33.7k|  extension_.Swap(&other->extension_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
  561|  33.7k|  raw_input_.Swap(&other->raw_input_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
  562|  33.7k|  preferred_domestic_carrier_code_.Swap(&other->preferred_domestic_carrier_code_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
  563|  33.7k|  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
  564|  33.7k|      PROTOBUF_FIELD_OFFSET(PhoneNumber, country_code_source_)
  565|  33.7k|      + sizeof(PhoneNumber::country_code_source_)
  566|  33.7k|      - PROTOBUF_FIELD_OFFSET(PhoneNumber, national_number_)>(
  567|  33.7k|          reinterpret_cast<char*>(&national_number_),
  568|  33.7k|          reinterpret_cast<char*>(&other->national_number_));
  569|  33.7k|  swap(number_of_leading_zeros_, other->number_of_leading_zeros_);
  570|  33.7k|}
phonenumber.pb.cc:_ZL52InitDefaultsscc_info_PhoneNumber_phonenumber_2eprotov:
   22|      1|static void InitDefaultsscc_info_PhoneNumber_phonenumber_2eproto() {
   23|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   24|       |
   25|      1|  {
   26|      1|    void* ptr = &::i18n::phonenumbers::_PhoneNumber_default_instance_;
   27|      1|    new (ptr) ::i18n::phonenumbers::PhoneNumber();
   28|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   29|      1|  }
   30|      1|}
_ZN4i18n12phonenumbers11PhoneNumber10SharedCtorEv:
  176|   108k|void PhoneNumber::SharedCtor() {
  177|   108k|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneNumber_phonenumber_2eproto.base);
  178|   108k|  extension_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  179|   108k|  raw_input_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  180|   108k|  preferred_domestic_carrier_code_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  181|   108k|  ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
  182|   108k|      reinterpret_cast<char*>(&national_number_) - reinterpret_cast<char*>(this)),
  183|   108k|      0, static_cast<size_t>(reinterpret_cast<char*>(&country_code_source_) -
  184|   108k|      reinterpret_cast<char*>(&national_number_)) + sizeof(country_code_source_));
  185|   108k|  number_of_leading_zeros_ = 1;
  186|   108k|}
_ZN4i18n12phonenumbers11PhoneNumber10SharedDtorEv:
  194|   125k|void PhoneNumber::SharedDtor() {
  195|   125k|  GOOGLE_DCHECK(GetArena() == nullptr);
  196|   125k|  extension_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  197|   125k|  raw_input_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  198|   125k|  preferred_domestic_carrier_code_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  199|   125k|}
_ZN4i18n12phonenumbers11PhoneNumber17RegisterArenaDtorEPN6google8protobuf5ArenaE:
  205|   108k|void PhoneNumber::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  206|   108k|}

_ZN4i18n12phonenumbers11PhoneNumberC2Ev:
   94|   108k|  inline PhoneNumber() : PhoneNumber(nullptr) {}
_ZN4i18n12phonenumbers11PhoneNumberaSERKS1_:
  103|  4.99k|  inline PhoneNumber& operator=(const PhoneNumber& from) {
  104|  4.99k|    CopyFrom(from);
  105|  4.99k|    return *this;
  106|  4.99k|  }
_ZN4i18n12phonenumbers11PhoneNumber25internal_default_instanceEv:
  125|  11.8k|  static inline const PhoneNumber* internal_default_instance() {
  126|  11.8k|    return reinterpret_cast<const PhoneNumber*>(
  127|  11.8k|               &_PhoneNumber_default_instance_);
  128|  11.8k|  }
_ZN4i18n12phonenumbers11PhoneNumber4SwapEPS1_:
  135|  33.7k|  inline void Swap(PhoneNumber* other) {
  136|  33.7k|    if (other == this) return;
  ------------------
  |  Branch (136:9): [True: 0, False: 33.7k]
  ------------------
  137|  33.7k|    if (GetArena() == other->GetArena()) {
  ------------------
  |  Branch (137:9): [True: 33.7k, False: 0]
  ------------------
  138|  33.7k|      InternalSwap(other);
  139|  33.7k|    } else {
  140|      0|      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
  141|      0|    }
  142|  33.7k|  }
_ZNK4i18n12phonenumbers11PhoneNumber26_internal_has_country_codeEv:
  395|  5.29k|inline bool PhoneNumber::_internal_has_country_code() const {
  396|  5.29k|  bool value = (_has_bits_[0] & 0x00000010u) != 0;
  397|  5.29k|  return value;
  398|  5.29k|}
_ZNK4i18n12phonenumbers11PhoneNumber16has_country_codeEv:
  399|  5.29k|inline bool PhoneNumber::has_country_code() const {
  400|  5.29k|  return _internal_has_country_code();
  401|  5.29k|}
_ZNK4i18n12phonenumbers11PhoneNumber22_internal_country_codeEv:
  406|   151k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::_internal_country_code() const {
  407|   151k|  return country_code_;
  408|   151k|}
_ZNK4i18n12phonenumbers11PhoneNumber12country_codeEv:
  409|   151k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::country_code() const {
  410|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.country_code)
  411|   151k|  return _internal_country_code();
  412|   151k|}
_ZN4i18n12phonenumbers11PhoneNumber26_internal_set_country_codeEi:
  413|  80.3k|inline void PhoneNumber::_internal_set_country_code(::PROTOBUF_NAMESPACE_ID::int32 value) {
  414|  80.3k|  _has_bits_[0] |= 0x00000010u;
  415|  80.3k|  country_code_ = value;
  416|  80.3k|}
_ZN4i18n12phonenumbers11PhoneNumber16set_country_codeEi:
  417|  80.3k|inline void PhoneNumber::set_country_code(::PROTOBUF_NAMESPACE_ID::int32 value) {
  418|  80.3k|  _internal_set_country_code(value);
  419|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.country_code)
  420|  80.3k|}
_ZNK4i18n12phonenumbers11PhoneNumber29_internal_has_national_numberEv:
  423|  4.97k|inline bool PhoneNumber::_internal_has_national_number() const {
  424|  4.97k|  bool value = (_has_bits_[0] & 0x00000008u) != 0;
  425|  4.97k|  return value;
  426|  4.97k|}
_ZNK4i18n12phonenumbers11PhoneNumber19has_national_numberEv:
  427|  4.97k|inline bool PhoneNumber::has_national_number() const {
  428|  4.97k|  return _internal_has_national_number();
  429|  4.97k|}
_ZNK4i18n12phonenumbers11PhoneNumber25_internal_national_numberEv:
  434|  97.8k|inline ::PROTOBUF_NAMESPACE_ID::uint64 PhoneNumber::_internal_national_number() const {
  435|  97.8k|  return national_number_;
  436|  97.8k|}
_ZNK4i18n12phonenumbers11PhoneNumber15national_numberEv:
  437|  97.8k|inline ::PROTOBUF_NAMESPACE_ID::uint64 PhoneNumber::national_number() const {
  438|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.national_number)
  439|  97.8k|  return _internal_national_number();
  440|  97.8k|}
_ZN4i18n12phonenumbers11PhoneNumber29_internal_set_national_numberEm:
  441|  39.1k|inline void PhoneNumber::_internal_set_national_number(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  442|  39.1k|  _has_bits_[0] |= 0x00000008u;
  443|  39.1k|  national_number_ = value;
  444|  39.1k|}
_ZN4i18n12phonenumbers11PhoneNumber19set_national_numberEm:
  445|  39.1k|inline void PhoneNumber::set_national_number(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  446|  39.1k|  _internal_set_national_number(value);
  447|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.national_number)
  448|  39.1k|}
_ZNK4i18n12phonenumbers11PhoneNumber23_internal_has_extensionEv:
  451|  38.8k|inline bool PhoneNumber::_internal_has_extension() const {
  452|  38.8k|  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  453|  38.8k|  return value;
  454|  38.8k|}
_ZNK4i18n12phonenumbers11PhoneNumber13has_extensionEv:
  455|  21.9k|inline bool PhoneNumber::has_extension() const {
  456|  21.9k|  return _internal_has_extension();
  457|  21.9k|}
_ZNK4i18n12phonenumbers11PhoneNumber9extensionEv:
  462|  16.4k|inline const std::string& PhoneNumber::extension() const {
  463|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.extension)
  464|  16.4k|  return _internal_extension();
  465|  16.4k|}
_ZN4i18n12phonenumbers11PhoneNumber13set_extensionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  466|  9.67k|inline void PhoneNumber::set_extension(const std::string& value) {
  467|  9.67k|  _internal_set_extension(value);
  468|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.extension)
  469|  9.67k|}
_ZNK4i18n12phonenumbers11PhoneNumber19_internal_extensionEv:
  474|  17.7k|inline const std::string& PhoneNumber::_internal_extension() const {
  475|  17.7k|  return extension_.Get();
  476|  17.7k|}
_ZN4i18n12phonenumbers11PhoneNumber23_internal_set_extensionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  477|  10.5k|inline void PhoneNumber::_internal_set_extension(const std::string& value) {
  478|  10.5k|  _has_bits_[0] |= 0x00000001u;
  479|  10.5k|  extension_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
  480|  10.5k|}
_ZNK4i18n12phonenumbers11PhoneNumber34_internal_has_italian_leading_zeroEv:
  524|  1.43k|inline bool PhoneNumber::_internal_has_italian_leading_zero() const {
  525|  1.43k|  bool value = (_has_bits_[0] & 0x00000020u) != 0;
  526|  1.43k|  return value;
  527|  1.43k|}
_ZNK4i18n12phonenumbers11PhoneNumber24has_italian_leading_zeroEv:
  528|  1.43k|inline bool PhoneNumber::has_italian_leading_zero() const {
  529|  1.43k|  return _internal_has_italian_leading_zero();
  530|  1.43k|}
_ZNK4i18n12phonenumbers11PhoneNumber30_internal_italian_leading_zeroEv:
  535|  82.6k|inline bool PhoneNumber::_internal_italian_leading_zero() const {
  536|  82.6k|  return italian_leading_zero_;
  537|  82.6k|}
_ZNK4i18n12phonenumbers11PhoneNumber20italian_leading_zeroEv:
  538|  82.6k|inline bool PhoneNumber::italian_leading_zero() const {
  539|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.italian_leading_zero)
  540|  82.6k|  return _internal_italian_leading_zero();
  541|  82.6k|}
_ZN4i18n12phonenumbers11PhoneNumber34_internal_set_italian_leading_zeroEb:
  542|  3.96k|inline void PhoneNumber::_internal_set_italian_leading_zero(bool value) {
  543|  3.96k|  _has_bits_[0] |= 0x00000020u;
  544|  3.96k|  italian_leading_zero_ = value;
  545|  3.96k|}
_ZN4i18n12phonenumbers11PhoneNumber24set_italian_leading_zeroEb:
  546|  3.96k|inline void PhoneNumber::set_italian_leading_zero(bool value) {
  547|  3.96k|  _internal_set_italian_leading_zero(value);
  548|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.italian_leading_zero)
  549|  3.96k|}
_ZNK4i18n12phonenumbers11PhoneNumber37_internal_has_number_of_leading_zerosEv:
  552|  1.37k|inline bool PhoneNumber::_internal_has_number_of_leading_zeros() const {
  553|  1.37k|  bool value = (_has_bits_[0] & 0x00000080u) != 0;
  554|  1.37k|  return value;
  555|  1.37k|}
_ZNK4i18n12phonenumbers11PhoneNumber27has_number_of_leading_zerosEv:
  556|  1.37k|inline bool PhoneNumber::has_number_of_leading_zeros() const {
  557|  1.37k|  return _internal_has_number_of_leading_zeros();
  558|  1.37k|}
_ZNK4i18n12phonenumbers11PhoneNumber33_internal_number_of_leading_zerosEv:
  563|  5.63k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::_internal_number_of_leading_zeros() const {
  564|  5.63k|  return number_of_leading_zeros_;
  565|  5.63k|}
_ZNK4i18n12phonenumbers11PhoneNumber23number_of_leading_zerosEv:
  566|  5.63k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::number_of_leading_zeros() const {
  567|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.number_of_leading_zeros)
  568|  5.63k|  return _internal_number_of_leading_zeros();
  569|  5.63k|}
_ZN4i18n12phonenumbers11PhoneNumber37_internal_set_number_of_leading_zerosEi:
  570|  1.28k|inline void PhoneNumber::_internal_set_number_of_leading_zeros(::PROTOBUF_NAMESPACE_ID::int32 value) {
  571|  1.28k|  _has_bits_[0] |= 0x00000080u;
  572|  1.28k|  number_of_leading_zeros_ = value;
  573|  1.28k|}
_ZN4i18n12phonenumbers11PhoneNumber27set_number_of_leading_zerosEi:
  574|  1.28k|inline void PhoneNumber::set_number_of_leading_zeros(::PROTOBUF_NAMESPACE_ID::int32 value) {
  575|  1.28k|  _internal_set_number_of_leading_zeros(value);
  576|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.number_of_leading_zeros)
  577|  1.28k|}
_ZNK4i18n12phonenumbers11PhoneNumber23_internal_has_raw_inputEv:
  580|  18.1k|inline bool PhoneNumber::_internal_has_raw_input() const {
  581|  18.1k|  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  582|  18.1k|  return value;
  583|  18.1k|}
_ZNK4i18n12phonenumbers11PhoneNumber13has_raw_inputEv:
  584|  1.35k|inline bool PhoneNumber::has_raw_input() const {
  585|  1.35k|  return _internal_has_raw_input();
  586|  1.35k|}
_ZN4i18n12phonenumbers11PhoneNumber15clear_raw_inputEv:
  587|  4.99k|inline void PhoneNumber::clear_raw_input() {
  588|  4.99k|  raw_input_.ClearToEmpty();
  589|  4.99k|  _has_bits_[0] &= ~0x00000002u;
  590|  4.99k|}
_ZNK4i18n12phonenumbers11PhoneNumber9raw_inputEv:
  591|  2.58k|inline const std::string& PhoneNumber::raw_input() const {
  592|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.raw_input)
  593|  2.58k|  return _internal_raw_input();
  594|  2.58k|}
_ZN4i18n12phonenumbers11PhoneNumber13set_raw_inputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  595|  39.1k|inline void PhoneNumber::set_raw_input(const std::string& value) {
  596|  39.1k|  _internal_set_raw_input(value);
  597|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.raw_input)
  598|  39.1k|}
_ZNK4i18n12phonenumbers11PhoneNumber19_internal_raw_inputEv:
  603|  2.58k|inline const std::string& PhoneNumber::_internal_raw_input() const {
  604|  2.58k|  return raw_input_.Get();
  605|  2.58k|}
_ZN4i18n12phonenumbers11PhoneNumber23_internal_set_raw_inputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  606|  39.1k|inline void PhoneNumber::_internal_set_raw_input(const std::string& value) {
  607|  39.1k|  _has_bits_[0] |= 0x00000002u;
  608|  39.1k|  raw_input_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
  609|  39.1k|}
_ZNK4i18n12phonenumbers11PhoneNumber33_internal_has_country_code_sourceEv:
  653|  1.35k|inline bool PhoneNumber::_internal_has_country_code_source() const {
  654|  1.35k|  bool value = (_has_bits_[0] & 0x00000040u) != 0;
  655|  1.35k|  return value;
  656|  1.35k|}
_ZNK4i18n12phonenumbers11PhoneNumber23has_country_code_sourceEv:
  657|  1.35k|inline bool PhoneNumber::has_country_code_source() const {
  658|  1.35k|  return _internal_has_country_code_source();
  659|  1.35k|}
_ZN4i18n12phonenumbers11PhoneNumber25clear_country_code_sourceEv:
  660|  4.99k|inline void PhoneNumber::clear_country_code_source() {
  661|  4.99k|  country_code_source_ = 0;
  662|  4.99k|  _has_bits_[0] &= ~0x00000040u;
  663|  4.99k|}
_ZNK4i18n12phonenumbers11PhoneNumber29_internal_country_code_sourceEv:
  664|  23.1k|inline ::i18n::phonenumbers::PhoneNumber_CountryCodeSource PhoneNumber::_internal_country_code_source() const {
  665|  23.1k|  return static_cast< ::i18n::phonenumbers::PhoneNumber_CountryCodeSource >(country_code_source_);
  666|  23.1k|}
_ZNK4i18n12phonenumbers11PhoneNumber19country_code_sourceEv:
  667|  23.1k|inline ::i18n::phonenumbers::PhoneNumber_CountryCodeSource PhoneNumber::country_code_source() const {
  668|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.country_code_source)
  669|  23.1k|  return _internal_country_code_source();
  670|  23.1k|}
_ZN4i18n12phonenumbers11PhoneNumber33_internal_set_country_code_sourceENS0_29PhoneNumber_CountryCodeSourceE:
  671|  41.0k|inline void PhoneNumber::_internal_set_country_code_source(::i18n::phonenumbers::PhoneNumber_CountryCodeSource value) {
  672|  41.0k|  assert(::i18n::phonenumbers::PhoneNumber_CountryCodeSource_IsValid(value));
  673|  41.0k|  _has_bits_[0] |= 0x00000040u;
  674|  41.0k|  country_code_source_ = value;
  675|  41.0k|}
_ZN4i18n12phonenumbers11PhoneNumber23set_country_code_sourceENS0_29PhoneNumber_CountryCodeSourceE:
  676|  41.0k|inline void PhoneNumber::set_country_code_source(::i18n::phonenumbers::PhoneNumber_CountryCodeSource value) {
  677|  41.0k|  _internal_set_country_code_source(value);
  678|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.country_code_source)
  679|  41.0k|}
_ZNK4i18n12phonenumbers11PhoneNumber45_internal_has_preferred_domestic_carrier_codeEv:
  682|  18.1k|inline bool PhoneNumber::_internal_has_preferred_domestic_carrier_code() const {
  683|  18.1k|  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  684|  18.1k|  return value;
  685|  18.1k|}
_ZNK4i18n12phonenumbers11PhoneNumber35has_preferred_domestic_carrier_codeEv:
  686|  1.35k|inline bool PhoneNumber::has_preferred_domestic_carrier_code() const {
  687|  1.35k|  return _internal_has_preferred_domestic_carrier_code();
  688|  1.35k|}
_ZN4i18n12phonenumbers11PhoneNumber37clear_preferred_domestic_carrier_codeEv:
  689|  4.99k|inline void PhoneNumber::clear_preferred_domestic_carrier_code() {
  690|  4.99k|  preferred_domestic_carrier_code_.ClearToEmpty();
  691|  4.99k|  _has_bits_[0] &= ~0x00000004u;
  692|  4.99k|}
_ZNK4i18n12phonenumbers11PhoneNumber31preferred_domestic_carrier_codeEv:
  693|  1.35k|inline const std::string& PhoneNumber::preferred_domestic_carrier_code() const {
  694|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.preferred_domestic_carrier_code)
  695|  1.35k|  return _internal_preferred_domestic_carrier_code();
  696|  1.35k|}
_ZN4i18n12phonenumbers11PhoneNumber35set_preferred_domestic_carrier_codeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  697|    279|inline void PhoneNumber::set_preferred_domestic_carrier_code(const std::string& value) {
  698|    279|  _internal_set_preferred_domestic_carrier_code(value);
  699|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.preferred_domestic_carrier_code)
  700|    279|}
_ZNK4i18n12phonenumbers11PhoneNumber41_internal_preferred_domestic_carrier_codeEv:
  705|  1.35k|inline const std::string& PhoneNumber::_internal_preferred_domestic_carrier_code() const {
  706|  1.35k|  return preferred_domestic_carrier_code_.Get();
  707|  1.35k|}
_ZN4i18n12phonenumbers11PhoneNumber45_internal_set_preferred_domestic_carrier_codeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  708|    279|inline void PhoneNumber::_internal_set_preferred_domestic_carrier_code(const std::string& value) {
  709|    279|  _has_bits_[0] |= 0x00000004u;
  710|    279|  preferred_domestic_carrier_code_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
  711|    279|}

_ZN4i18n12phonenumbers16PhoneNumberMatchC2EiRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_11PhoneNumberE:
   34|  4.99k|    : start_(start), raw_string_(raw_string), number_(number) {
   35|  4.99k|}
_ZN4i18n12phonenumbers16PhoneNumberMatchC2Ev:
   38|  11.8k|    : start_(-1), raw_string_(""), number_(PhoneNumber::default_instance()) {
   39|  11.8k|}
_ZNK4i18n12phonenumbers16PhoneNumberMatch6numberEv:
   41|  9.99k|const PhoneNumber& PhoneNumberMatch::number() const {
   42|  9.99k|  return number_;
   43|  9.99k|}
_ZNK4i18n12phonenumbers16PhoneNumberMatch5startEv:
   45|  9.99k|int PhoneNumberMatch::start() const {
   46|  9.99k|  return start_;
   47|  9.99k|}
_ZNK4i18n12phonenumbers16PhoneNumberMatch3endEv:
   49|  4.99k|int PhoneNumberMatch::end() const {
   50|  4.99k|  return static_cast<int>(start_ + raw_string_.length());
   51|  4.99k|}
_ZNK4i18n12phonenumbers16PhoneNumberMatch10raw_stringEv:
   57|  9.99k|const string& PhoneNumberMatch::raw_string() const {
   58|  9.99k|  return raw_string_;
   59|  9.99k|}
_ZN4i18n12phonenumbers16PhoneNumberMatch9set_startEi:
   61|  4.99k|void PhoneNumberMatch::set_start(int start) {
   62|  4.99k|  start_ = start;
   63|  4.99k|}
_ZN4i18n12phonenumbers16PhoneNumberMatch14set_raw_stringERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   65|  4.99k|void PhoneNumberMatch::set_raw_string(const string& raw_string) {
   66|  4.99k|  raw_string_ = raw_string;
   67|  4.99k|}
_ZN4i18n12phonenumbers16PhoneNumberMatch10set_numberERKNS0_11PhoneNumberE:
   69|  4.99k|void PhoneNumberMatch::set_number(const PhoneNumber& number) {
   70|  4.99k|  number_.CopyFrom(number);
   71|  4.99k|}
_ZN4i18n12phonenumbers16PhoneNumberMatch8CopyFromERKS1_:
   84|  4.99k|void PhoneNumberMatch::CopyFrom(const PhoneNumberMatch& match) {
   85|  4.99k|  raw_string_ = match.raw_string();
   86|  4.99k|  start_ = match.start();
   87|  4.99k|  number_ = match.number();
   88|  4.99k|}

_ZN4i18n12phonenumbers16PhoneNumberMatchD2Ev:
   81|  16.8k|  ~PhoneNumberMatch() {}

_ZN4i18n12phonenumbers18PhoneNumberMatcherC2ERKNS0_15PhoneNumberUtilERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEESD_NS1_8LeniencyEi:
  401|  8.27k|    : reg_exps_(PhoneNumberMatcherRegExps::GetInstance()),
  402|  8.27k|      alternate_formats_(AlternateFormats::GetInstance()),
  403|  8.27k|      phone_util_(util),
  404|  8.27k|      text_(text),
  405|  8.27k|      preferred_region_(region_code),
  406|  8.27k|      leniency_(leniency),
  407|  8.27k|      max_tries_(max_tries),
  408|  8.27k|      state_(NOT_READY),
  409|  8.27k|      last_match_(NULL),
  410|  8.27k|      search_index_(0),
  411|  8.27k|      is_input_valid_utf8_(true) {
  412|  8.27k|  is_input_valid_utf8_ = IsInputUtf8(); 
  413|  8.27k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcherD2Ev:
  431|  8.27k|PhoneNumberMatcher::~PhoneNumberMatcher() {
  432|  8.27k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher11IsInputUtf8Ev:
  434|  8.27k|bool PhoneNumberMatcher::IsInputUtf8() {
  435|  8.27k|  UnicodeText number_as_unicode;
  436|  8.27k|  number_as_unicode.PointToUTF8(text_.c_str(), text_.size());
  437|  8.27k|  return number_as_unicode.UTF8WasValid();
  438|  8.27k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher13IsLatinLetterEi:
  441|  91.2k|bool PhoneNumberMatcher::IsLatinLetter(char32 letter) {
  442|       |  // Combining marks are a subset of non-spacing-mark.
  443|  91.2k|  if (!u_isalpha(letter) && (u_charType(letter) != U_NON_SPACING_MARK)) {
  ------------------
  |  Branch (443:7): [True: 83.3k, False: 7.89k]
  |  Branch (443:29): [True: 82.9k, False: 369]
  ------------------
  444|  82.9k|    return false;
  445|  82.9k|  }
  446|  8.26k|  UBlockCode block = ublock_getCode(letter);
  447|  8.26k|  return ((block == UBLOCK_BASIC_LATIN) ||
  ------------------
  |  Branch (447:11): [True: 6.39k, False: 1.87k]
  ------------------
  448|  8.26k|      (block == UBLOCK_LATIN_1_SUPPLEMENT) ||
  ------------------
  |  Branch (448:7): [True: 237, False: 1.63k]
  ------------------
  449|  8.26k|      (block == UBLOCK_LATIN_EXTENDED_A) ||
  ------------------
  |  Branch (449:7): [True: 152, False: 1.48k]
  ------------------
  450|  8.26k|      (block == UBLOCK_LATIN_EXTENDED_ADDITIONAL) ||
  ------------------
  |  Branch (450:7): [True: 58, False: 1.42k]
  ------------------
  451|  8.26k|      (block == UBLOCK_LATIN_EXTENDED_B) ||
  ------------------
  |  Branch (451:7): [True: 198, False: 1.23k]
  ------------------
  452|  8.26k|      (block == UBLOCK_COMBINING_DIACRITICAL_MARKS));
  ------------------
  |  Branch (452:7): [True: 78, False: 1.15k]
  ------------------
  453|  91.2k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher14ParseAndVerifyERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEiPNS0_16PhoneNumberMatchE:
  456|  74.3k|                                        PhoneNumberMatch* match) {
  457|  74.3k|  DCHECK(match);
  ------------------
  |  |   29|  74.3k|#define DCHECK(X) assert(X)
  ------------------
  458|       |  // Check the candidate doesn't contain any formatting which would indicate
  459|       |  // that it really isn't a phone number.
  460|  74.3k|  if (!reg_exps_->matching_brackets_->FullMatch(candidate) ||
  ------------------
  |  Branch (460:7): [True: 10.0k, False: 64.3k]
  ------------------
  461|  74.3k|      reg_exps_->pub_pages_->PartialMatch(candidate)) {
  ------------------
  |  Branch (461:7): [True: 84, False: 64.2k]
  ------------------
  462|  10.1k|    return false;
  463|  10.1k|  }
  464|       |
  465|       |  // If leniency is set to VALID or stricter, we also want to skip numbers that
  466|       |  // are surrounded by Latin alphabetic characters, to skip cases like
  467|       |  // abc8005001234 or 8005001234def.
  468|  64.2k|  if (leniency_ >= VALID) {
  ------------------
  |  Branch (468:7): [True: 56.0k, False: 8.23k]
  ------------------
  469|       |    // If the candidate is not at the start of the text, and does not start with
  470|       |    // phone-number punctuation, check the previous character.
  471|  56.0k|    scoped_ptr<RegExpInput> candidate_input(
  472|  56.0k|        reg_exps_->regexp_factory_->CreateInput(candidate));
  473|  56.0k|    if (offset > 0 &&
  ------------------
  |  Branch (473:9): [True: 54.8k, False: 1.12k]
  ------------------
  474|  56.0k|        !reg_exps_->lead_class_pattern_->Consume(candidate_input.get())) {
  ------------------
  |  Branch (474:9): [True: 43.1k, False: 11.7k]
  ------------------
  475|  43.1k|      char32 previous_char;
  476|  43.1k|      const char* previous_char_ptr =
  477|  43.1k|          EncodingUtils::BackUpOneUTF8Character(text_.c_str(),
  478|  43.1k|                                                text_.c_str() + offset);
  479|  43.1k|      EncodingUtils::DecodeUTF8Char(previous_char_ptr, &previous_char);
  480|       |      // We return false if it is a latin letter or an invalid punctuation
  481|       |      // symbol.
  482|  43.1k|      if (IsInvalidPunctuationSymbol(previous_char) ||
  ------------------
  |  Branch (482:11): [True: 695, False: 42.4k]
  ------------------
  483|  43.1k|          IsLatinLetter(previous_char)) {
  ------------------
  |  Branch (483:11): [True: 3.43k, False: 38.9k]
  ------------------
  484|  4.13k|        return false;
  485|  4.13k|      }
  486|  43.1k|    }
  487|  51.8k|    size_t lastCharIndex = offset + candidate.length();
  488|  51.8k|    if (lastCharIndex < text_.length()) {
  ------------------
  |  Branch (488:9): [True: 49.3k, False: 2.49k]
  ------------------
  489|  49.3k|      char32 next_char;
  490|  49.3k|      const char* next_char_ptr =
  491|  49.3k|          EncodingUtils::AdvanceOneUTF8Character(
  492|  49.3k|              text_.c_str() + lastCharIndex - 1);
  493|  49.3k|      EncodingUtils::DecodeUTF8Char(next_char_ptr, &next_char);
  494|  49.3k|      if (IsInvalidPunctuationSymbol(next_char) || IsLatinLetter(next_char)) {
  ------------------
  |  Branch (494:11): [True: 584, False: 48.8k]
  |  Branch (494:52): [True: 3.67k, False: 45.1k]
  ------------------
  495|  4.26k|        return false;
  496|  4.26k|      }
  497|  49.3k|    }
  498|  51.8k|  }
  499|       |
  500|  55.8k|  PhoneNumber number;
  501|  55.8k|  if (phone_util_.ParseAndKeepRawInput(candidate, preferred_region_, &number) !=
  ------------------
  |  Branch (501:7): [True: 24.4k, False: 31.3k]
  ------------------
  502|  55.8k|      PhoneNumberUtil::NO_PARSING_ERROR) {
  503|  24.4k|    return false;
  504|  24.4k|  }
  505|       |
  506|  31.3k|  if (VerifyAccordingToLeniency(leniency_, number, candidate)) {
  ------------------
  |  Branch (506:7): [True: 4.99k, False: 26.3k]
  ------------------
  507|  4.99k|    match->set_start(offset);
  508|  4.99k|    match->set_raw_string(candidate);
  509|       |    // We used ParseAndKeepRawInput to create this number, but for now we don't
  510|       |    // return the extra values parsed. TODO: stop clearing all values here and
  511|       |    // switch all users over to using raw_input() rather than the raw_string()
  512|       |    // of PhoneNumberMatch.
  513|  4.99k|    number.clear_country_code_source();
  514|  4.99k|    number.clear_preferred_domestic_carrier_code();
  515|  4.99k|    number.clear_raw_input();
  516|  4.99k|    match->set_number(number);
  517|  4.99k|    return true;
  518|  4.99k|  }
  519|  26.3k|  return false;
  520|  31.3k|}
_ZNK4i18n12phonenumbers18PhoneNumberMatcher25VerifyAccordingToLeniencyENS1_8LeniencyERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE:
  526|  31.3k|    const string& candidate) const {
  527|  31.3k|  switch (leniency) {
  528|  3.97k|    case PhoneNumberMatcher::POSSIBLE:
  ------------------
  |  Branch (528:5): [True: 3.97k, False: 27.4k]
  ------------------
  529|  3.97k|      return phone_util_.IsPossibleNumber(number);
  530|  2.05k|    case PhoneNumberMatcher::VALID:
  ------------------
  |  Branch (530:5): [True: 2.05k, False: 29.3k]
  ------------------
  531|  2.05k|      if (!phone_util_.IsValidNumber(number) ||
  ------------------
  |  Branch (531:11): [True: 1.11k, False: 943]
  ------------------
  532|  2.05k|          !ContainsOnlyValidXChars(number, candidate, phone_util_)) {
  ------------------
  |  Branch (532:11): [True: 520, False: 423]
  ------------------
  533|  1.63k|        return false;
  534|  1.63k|      }
  535|    423|      return IsNationalPrefixPresentIfRequired(number);
  536|  13.8k|    case PhoneNumberMatcher::STRICT_GROUPING: {
  ------------------
  |  Branch (536:5): [True: 13.8k, False: 17.5k]
  ------------------
  537|  13.8k|      if (!phone_util_.IsValidNumber(number) ||
  ------------------
  |  Branch (537:11): [True: 7.66k, False: 6.20k]
  ------------------
  538|  13.8k|          !ContainsOnlyValidXChars(number, candidate, phone_util_) ||
  ------------------
  |  Branch (538:11): [True: 1.11k, False: 5.09k]
  ------------------
  539|  13.8k|          ContainsMoreThanOneSlashInNationalNumber(
  ------------------
  |  Branch (539:11): [True: 247, False: 4.84k]
  ------------------
  540|  5.09k|              number, candidate, phone_util_) ||
  541|  13.8k|          !IsNationalPrefixPresentIfRequired(number)) {
  ------------------
  |  Branch (541:11): [True: 541, False: 4.30k]
  ------------------
  542|  9.56k|        return false;
  543|  9.56k|      }
  544|  4.30k|      ResultCallback4<bool, const PhoneNumberUtil&, const PhoneNumber&,
  545|  4.30k|                      const string&, const std::vector<string>&>* callback =
  546|  4.30k|          NewPermanentCallback(&AllNumberGroupsRemainGrouped);
  547|  4.30k|      bool is_valid = CheckNumberGroupingIsValid(number, candidate, callback);
  548|  4.30k|      delete(callback);
  549|  4.30k|      return is_valid;
  550|  13.8k|    }
  551|  11.4k|    case PhoneNumberMatcher::EXACT_GROUPING: {
  ------------------
  |  Branch (551:5): [True: 11.4k, False: 19.9k]
  ------------------
  552|  11.4k|      if (!phone_util_.IsValidNumber(number) ||
  ------------------
  |  Branch (552:11): [True: 5.77k, False: 5.72k]
  ------------------
  553|  11.4k|          !ContainsOnlyValidXChars(number, candidate, phone_util_) ||
  ------------------
  |  Branch (553:11): [True: 1.59k, False: 4.12k]
  ------------------
  554|  11.4k|          ContainsMoreThanOneSlashInNationalNumber(
  ------------------
  |  Branch (554:11): [True: 254, False: 3.86k]
  ------------------
  555|  4.12k|              number, candidate, phone_util_) ||
  556|  11.4k|          !IsNationalPrefixPresentIfRequired(number)) {
  ------------------
  |  Branch (556:11): [True: 221, False: 3.64k]
  ------------------
  557|  7.84k|        return false;
  558|  7.84k|      }
  559|  3.64k|      ResultCallback4<bool, const PhoneNumberUtil&, const PhoneNumber&,
  560|  3.64k|                      const string&, const std::vector<string>&>* callback =
  561|  3.64k|          NewPermanentCallback(
  562|  3.64k|              this, &PhoneNumberMatcher::AllNumberGroupsAreExactlyPresent);
  563|  3.64k|      bool is_valid = CheckNumberGroupingIsValid(number, candidate, callback);
  564|  3.64k|      delete(callback);
  565|  3.64k|      return is_valid;
  566|  11.4k|    }
  567|      0|    default:
  ------------------
  |  Branch (567:5): [True: 0, False: 31.3k]
  ------------------
  568|      0|      LOG(ERROR) << "No implementation defined for verification for leniency "
  569|      0|                 << static_cast<int>(leniency);
  570|      0|      return false;
  571|  31.3k|  }
  572|  31.3k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher17ExtractInnerMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEiPNS0_16PhoneNumberMatchE:
  575|  19.3k|                                           PhoneNumberMatch* match) {
  576|  19.3k|  DCHECK(match);
  ------------------
  |  |   29|  19.3k|#define DCHECK(X) assert(X)
  ------------------
  577|  19.3k|  for (std::vector<const RegExp*>::const_iterator regex =
  578|  19.3k|           reg_exps_->inner_matches_->begin();
  579|   129k|           regex != reg_exps_->inner_matches_->end(); regex++) {
  ------------------
  |  Branch (579:12): [True: 114k, False: 15.1k]
  ------------------
  580|   114k|    scoped_ptr<RegExpInput> candidate_input(
  581|   114k|        reg_exps_->regexp_factory_->CreateInput(candidate));
  582|   114k|    bool is_first_match = true;
  583|   114k|    string group;
  584|   142k|    while ((*regex)->FindAndConsume(candidate_input.get(), &group) &&
  ------------------
  |  Branch (584:12): [True: 33.0k, False: 109k]
  ------------------
  585|   142k|           max_tries_ > 0) {
  ------------------
  |  Branch (585:12): [True: 33.0k, False: 53]
  ------------------
  586|  33.0k|      int group_start_index = static_cast<int>(candidate.length() -
  587|  33.0k|          candidate_input->ToString().length() - group.length());
  588|  33.0k|      if (is_first_match) {
  ------------------
  |  Branch (588:11): [True: 23.8k, False: 9.19k]
  ------------------
  589|       |        // We should handle any group before this one too.
  590|  23.8k|        string first_group_only = candidate.substr(0, group_start_index);
  591|  23.8k|        phone_util_.TrimUnwantedEndChars(&first_group_only);
  592|  23.8k|        bool success = ParseAndVerify(first_group_only, offset, match);
  593|  23.8k|        if (success) {
  ------------------
  |  Branch (593:13): [True: 2.55k, False: 21.2k]
  ------------------
  594|  2.55k|          return true;
  595|  2.55k|        }
  596|  21.2k|        --max_tries_;
  597|  21.2k|        is_first_match = false;
  598|  21.2k|      }
  599|  30.4k|      phone_util_.TrimUnwantedEndChars(&group);
  600|  30.4k|      bool success = ParseAndVerify(group, offset + group_start_index, match);
  601|  30.4k|      if (success) {
  ------------------
  |  Branch (601:11): [True: 1.68k, False: 28.7k]
  ------------------
  602|  1.68k|        return true;
  603|  1.68k|      }
  604|  28.7k|      --max_tries_;
  605|  28.7k|    }
  606|   114k|  }
  607|  15.1k|  return false;
  608|  19.3k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher12ExtractMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEiPNS0_16PhoneNumberMatchE:
  611|  20.1k|                                      PhoneNumberMatch* match) {
  612|  20.1k|  DCHECK(match);
  ------------------
  |  |   29|  20.1k|#define DCHECK(X) assert(X)
  ------------------
  613|       |  // Skip a match that is more likely to be a date.
  614|  20.1k|  if (reg_exps_->slash_separated_dates_->PartialMatch(candidate)) {
  ------------------
  |  Branch (614:7): [True: 25, False: 20.1k]
  ------------------
  615|     25|    return false;
  616|     25|  }
  617|       |
  618|       |  // Skip potential time-stamps.
  619|  20.1k|  if (reg_exps_->time_stamps_->PartialMatch(candidate)) {
  ------------------
  |  Branch (619:7): [True: 201, False: 19.9k]
  ------------------
  620|    201|    scoped_ptr<RegExpInput> following_text(
  621|    201|        reg_exps_->regexp_factory_->CreateInput(
  622|    201|            text_.substr(offset + candidate.size())));
  623|    201|    if (reg_exps_->time_stamps_suffix_->Consume(following_text.get())) {
  ------------------
  |  Branch (623:9): [True: 10, False: 191]
  ------------------
  624|     10|      return false;
  625|     10|    }
  626|    201|  }
  627|       |
  628|       |  // Try to come up with a valid match given the entire candidate.
  629|  20.1k|  if (ParseAndVerify(candidate, offset, match)) {
  ------------------
  |  Branch (629:7): [True: 752, False: 19.3k]
  ------------------
  630|    752|    return true;
  631|    752|  }
  632|       |
  633|       |  // If that failed, try to find an "inner match" - there might be a phone
  634|       |  // number within this candidate.
  635|  19.3k|  return ExtractInnerMatch(candidate, offset, match);
  636|  20.1k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher7HasNextEv:
  638|  18.2k|bool PhoneNumberMatcher::HasNext() {
  639|       |  // Input should contain only UTF-8 characters.
  640|  18.2k|  if (!is_input_valid_utf8_) {
  ------------------
  |  Branch (640:7): [True: 6.43k, False: 11.8k]
  ------------------
  641|  6.43k|    state_ = DONE;
  642|  6.43k|    return false;
  643|  6.43k|  }
  644|  11.8k|  if (state_ == NOT_READY) {
  ------------------
  |  Branch (644:7): [True: 6.84k, False: 4.99k]
  ------------------
  645|  6.84k|    PhoneNumberMatch temp_match;
  646|  6.84k|    if (!Find(search_index_, &temp_match)) {
  ------------------
  |  Branch (646:9): [True: 1.84k, False: 4.99k]
  ------------------
  647|  1.84k|      state_ = DONE;
  648|  4.99k|    } else {
  649|  4.99k|      last_match_.reset(new PhoneNumberMatch(temp_match.start(),
  650|  4.99k|                                             temp_match.raw_string(),
  651|  4.99k|                                             temp_match.number()));
  652|  4.99k|      search_index_ = last_match_->end();
  653|  4.99k|      state_ = READY;
  654|  4.99k|    }
  655|  6.84k|  }
  656|  11.8k|  return state_ == READY;
  657|  18.2k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher4NextEPNS0_16PhoneNumberMatchE:
  659|  4.99k|bool PhoneNumberMatcher::Next(PhoneNumberMatch* match) {
  660|  4.99k|  DCHECK(match);
  ------------------
  |  |   29|  4.99k|#define DCHECK(X) assert(X)
  ------------------
  661|       |  // Check the state and find the next match as a side-effect if necessary.
  662|  4.99k|  if (!HasNext()) {
  ------------------
  |  Branch (662:7): [True: 0, False: 4.99k]
  ------------------
  663|      0|    return false;
  664|      0|  }
  665|  4.99k|  match->CopyFrom(*last_match_);
  666|  4.99k|  state_ = NOT_READY;
  667|  4.99k|  last_match_.reset(NULL);
  668|  4.99k|  return true;
  669|  4.99k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher4FindEiPNS0_16PhoneNumberMatchE:
  671|  6.84k|bool PhoneNumberMatcher::Find(int index, PhoneNumberMatch* match) {
  672|  6.84k|  DCHECK(match);
  ------------------
  |  |   29|  6.84k|#define DCHECK(X) assert(X)
  ------------------
  673|       |
  674|  6.84k|  scoped_ptr<RegExpInput> text(
  675|  6.84k|      reg_exps_->regexp_factory_for_pattern_->CreateInput(text_.substr(index)));
  676|  6.84k|  string candidate;
  677|  21.9k|  while ((max_tries_ > 0) &&
  ------------------
  |  Branch (677:10): [True: 21.7k, False: 205]
  ------------------
  678|  21.9k|         reg_exps_->pattern_->FindAndConsume(text.get(), &candidate)) {
  ------------------
  |  Branch (678:10): [True: 20.1k, False: 1.63k]
  ------------------
  679|  20.1k|    int start = static_cast<int>(text_.length() - text->ToString().length() - candidate.length());
  680|       |    // Check for extra numbers at the end.
  681|  20.1k|    reg_exps_->capture_up_to_second_number_start_pattern_->
  682|  20.1k|        PartialMatch(candidate, &candidate);
  683|  20.1k|    if (ExtractMatch(candidate, start, match)) {
  ------------------
  |  Branch (683:9): [True: 4.99k, False: 15.1k]
  ------------------
  684|  4.99k|      return true;
  685|  4.99k|    }
  686|       |
  687|  15.1k|    index = static_cast<int>(start + candidate.length());
  688|  15.1k|    --max_tries_;
  689|  15.1k|  }
  690|  1.84k|  return false;
  691|  6.84k|}
_ZNK4i18n12phonenumbers18PhoneNumberMatcher26CheckNumberGroupingIsValidERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEPNS0_15ResultCallback4IbRKNS0_15PhoneNumberUtilES4_SD_RKNS5_6vectorISB_NS9_ISB_EEEEEE:
  697|  7.95k|                    const string&, const std::vector<string>&>* checker) const {
  698|  7.95k|  DCHECK(checker);
  ------------------
  |  |   29|  7.95k|#define DCHECK(X) assert(X)
  ------------------
  699|  7.95k|  string normalized_candidate =
  700|  7.95k|      NormalizeUTF8::NormalizeDecimalDigits(candidate);
  701|  7.95k|  std::vector<string> formatted_number_groups;
  702|  7.95k|  GetNationalNumberGroups(phone_number, &formatted_number_groups);
  703|  7.95k|  if (checker->Run(phone_util_, phone_number, normalized_candidate,
  ------------------
  |  Branch (703:7): [True: 3.00k, False: 4.94k]
  ------------------
  704|  7.95k|                   formatted_number_groups)) {
  705|  3.00k|    return true;
  706|  3.00k|  }
  707|       |  // If this didn't pass, see if there are any alternate formats that match, and
  708|       |  // try them instead.
  709|  4.94k|  const PhoneMetadata* alternate_formats =
  710|  4.94k|    alternate_formats_->GetAlternateFormatsForCountry(
  711|  4.94k|        phone_number.country_code());
  712|  4.94k|  if (alternate_formats) {
  ------------------
  |  Branch (712:7): [True: 4.43k, False: 511]
  ------------------
  713|  4.43k|    string national_significant_number;
  714|  4.43k|    phone_util_.GetNationalSignificantNumber(phone_number,
  715|  4.43k|                                             &national_significant_number);
  716|  4.43k|    for (RepeatedPtrField<NumberFormat>::const_iterator it =
  717|  4.43k|             alternate_formats->number_format().begin();
  718|  53.4k|         it != alternate_formats->number_format().end(); ++it) {
  ------------------
  |  Branch (718:10): [True: 49.0k, False: 4.39k]
  ------------------
  719|  49.0k|      if (it->leading_digits_pattern_size() > 0) {
  ------------------
  |  Branch (719:11): [True: 48.9k, False: 102]
  ------------------
  720|  48.9k|        std::unique_ptr<RegExpInput> nsn_input(
  721|  48.9k|            reg_exps_->regexp_factory_->CreateInput(
  722|  48.9k|                national_significant_number));
  723|       |        // There is only one leading digits pattern for alternate formats.
  724|  48.9k|        if (!reg_exps_->regexp_cache_.GetRegExp(
  ------------------
  |  Branch (724:13): [True: 36.7k, False: 12.2k]
  ------------------
  725|  48.9k|                it->leading_digits_pattern(0)).Consume(nsn_input.get())) {
  726|       |          // Leading digits don't match; try another one.
  727|  36.7k|          continue;
  728|  36.7k|        }
  729|  48.9k|      }
  730|  12.3k|      formatted_number_groups.clear();
  731|  12.3k|      GetNationalNumberGroupsForPattern(phone_number, &*it,
  732|  12.3k|                                        &formatted_number_groups);
  733|  12.3k|      if (checker->Run(phone_util_, phone_number, normalized_candidate,
  ------------------
  |  Branch (733:11): [True: 35, False: 12.2k]
  ------------------
  734|  12.3k|                       formatted_number_groups)) {
  735|     35|        return true;
  736|     35|      }
  737|  12.3k|    }
  738|  4.43k|  }
  739|  4.90k|  return false;
  740|  4.94k|}
_ZNK4i18n12phonenumbers18PhoneNumberMatcher23GetNationalNumberGroupsERKNS0_11PhoneNumberEPNSt3__16vectorINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENSA_ISC_EEEE:
  744|  7.95k|    std::vector<string>* digit_blocks) const {
  745|  7.95k|  string rfc3966_format;
  746|       |  // This will be in the format +CC-DG1-DG2-DGX;ext=EXT where DG1..DGX
  747|       |  // represents groups of digits.
  748|  7.95k|  phone_util_.Format(number, PhoneNumberUtil::RFC3966, &rfc3966_format);
  749|       |  // We remove the extension part from the formatted string before splitting
  750|       |  // it into different groups.
  751|  7.95k|  size_t end_index = rfc3966_format.find(';');
  752|  7.95k|  if (end_index == string::npos) {
  ------------------
  |  Branch (752:7): [True: 6.67k, False: 1.28k]
  ------------------
  753|  6.67k|    end_index = rfc3966_format.length();
  754|  6.67k|  }
  755|       |  // The country-code will have a '-' following it.
  756|  7.95k|  size_t start_index = rfc3966_format.find('-') + 1;
  757|  7.95k|  SplitStringUsing(rfc3966_format.substr(start_index,
  758|  7.95k|                                         end_index - start_index),
  759|  7.95k|                   '-', digit_blocks);
  760|  7.95k|}
_ZNK4i18n12phonenumbers18PhoneNumberMatcher33GetNationalNumberGroupsForPatternERKNS0_11PhoneNumberEPKNS0_12NumberFormatEPNSt3__16vectorINS8_12basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEENSD_ISF_EEEE:
  765|  12.3k|    std::vector<string>* digit_blocks) const {
  766|  12.3k|  string rfc3966_format;
  767|       |  // We format the NSN only, and split that according to the separator.
  768|  12.3k|  string national_significant_number;
  769|  12.3k|  phone_util_.GetNationalSignificantNumber(number,
  770|  12.3k|                                           &national_significant_number);
  771|  12.3k|  phone_util_.FormatNsnUsingPattern(national_significant_number,
  772|  12.3k|                                    *formatting_pattern,
  773|  12.3k|                                    PhoneNumberUtil::RFC3966,
  774|  12.3k|                                    &rfc3966_format);
  775|  12.3k|  SplitStringUsing(rfc3966_format, '-', digit_blocks);
  776|  12.3k|}
_ZNK4i18n12phonenumbers18PhoneNumberMatcher33IsNationalPrefixPresentIfRequiredERKNS0_11PhoneNumberE:
  779|  9.13k|    const PhoneNumber& number) const {
  780|       |  // First, check how we deduced the country code. If it was written in
  781|       |  // international format, then the national prefix is not required.
  782|  9.13k|  if (number.country_code_source() != PhoneNumber::FROM_DEFAULT_COUNTRY) {
  ------------------
  |  Branch (782:7): [True: 1.97k, False: 7.16k]
  ------------------
  783|  1.97k|    return true;
  784|  1.97k|  }
  785|  7.16k|  string phone_number_region;
  786|  7.16k|  phone_util_.GetRegionCodeForCountryCode(
  787|  7.16k|      number.country_code(), &phone_number_region);
  788|  7.16k|  const PhoneMetadata* metadata =
  789|  7.16k|      phone_util_.GetMetadataForRegion(phone_number_region);
  790|  7.16k|  if (!metadata) {
  ------------------
  |  Branch (790:7): [True: 0, False: 7.16k]
  ------------------
  791|      0|    return true;
  792|      0|  }
  793|       |  // Check if a national prefix should be present when formatting this number.
  794|  7.16k|  string national_number;
  795|  7.16k|  phone_util_.GetNationalSignificantNumber(number, &national_number);
  796|  7.16k|  const NumberFormat* format_rule =
  797|  7.16k|      phone_util_.ChooseFormattingPatternForNumber(metadata->number_format(),
  798|  7.16k|                                                   national_number);
  799|       |  // To do this, we check that a national prefix formatting rule was present and
  800|       |  // that it wasn't just the first-group symbol ($1) with punctuation.
  801|  7.16k|  if (format_rule && !format_rule->national_prefix_formatting_rule().empty()) {
  ------------------
  |  Branch (801:7): [True: 5.68k, False: 1.48k]
  |  Branch (801:22): [True: 1.20k, False: 4.48k]
  ------------------
  802|  1.20k|    if (format_rule->national_prefix_optional_when_formatting()) {
  ------------------
  |  Branch (802:9): [True: 60, False: 1.14k]
  ------------------
  803|       |      // The national-prefix is optional in these cases, so we don't need to
  804|       |      // check if it was present.
  805|     60|      return true;
  806|     60|    }
  807|  1.14k|    if (phone_util_.FormattingRuleHasFirstGroupOnly(
  ------------------
  |  Branch (807:9): [True: 26, False: 1.11k]
  ------------------
  808|  1.14k|        format_rule->national_prefix_formatting_rule())) {
  809|       |      // National Prefix not needed for this number.
  810|     26|      return true;
  811|     26|    }
  812|       |    // Normalize the remainder.
  813|  1.11k|    string raw_input_copy(number.raw_input());
  814|       |    // Check if we found a national prefix and/or carrier code at the start of
  815|       |    // the raw input, and return the result.
  816|  1.11k|    phone_util_.NormalizeDigitsOnly(&raw_input_copy);
  817|  1.11k|    return phone_util_.MaybeStripNationalPrefixAndCarrierCode(
  818|  1.11k|        *metadata,
  819|  1.11k|        &raw_input_copy,
  820|  1.11k|        NULL);  // Don't need to keep the stripped carrier code.
  821|  1.14k|  }
  822|  5.96k|  return true;
  823|  7.16k|}
_ZNK4i18n12phonenumbers18PhoneNumberMatcher32AllNumberGroupsAreExactlyPresentERKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKNS8_6vectorISE_NSC_ISE_EEEE:
  829|  8.59k|    const std::vector<string>& formatted_number_groups) const {
  830|  8.59k|  const scoped_ptr<RegExpInput> candidate_number(
  831|  8.59k|      reg_exps_->regexp_factory_->CreateInput(normalized_candidate));
  832|  8.59k|  std::vector<string> candidate_groups;
  833|  8.59k|  string digit_block;
  834|  38.1k|  while (reg_exps_->capturing_ascii_digits_pattern_->FindAndConsume(
  ------------------
  |  Branch (834:10): [True: 29.5k, False: 8.59k]
  ------------------
  835|  38.1k|             candidate_number.get(),
  836|  38.1k|             &digit_block)) {
  837|  29.5k|    candidate_groups.push_back(digit_block);
  838|  29.5k|  }
  839|       |
  840|       |  // Set this to the last group, skipping it if the number has an extension.
  841|  8.59k|  int candidate_number_group_index = static_cast<int>(
  842|  8.59k|      phone_number.has_extension() ? candidate_groups.size() - 2
  ------------------
  |  Branch (842:7): [True: 2.00k, False: 6.59k]
  ------------------
  843|  8.59k|                                   : candidate_groups.size() - 1);
  844|       |  // First we check if the national significant number is formatted as a block.
  845|       |  // We use find and not equals, since the national significant number may be
  846|       |  // present with a prefix such as a national number prefix, or the country code
  847|       |  // itself.
  848|  8.59k|  string national_significant_number;
  849|  8.59k|  util.GetNationalSignificantNumber(phone_number,
  850|  8.59k|                                    &national_significant_number);
  851|  8.59k|  if (candidate_groups.size() == 1 ||
  ------------------
  |  Branch (851:7): [True: 1.26k, False: 7.33k]
  ------------------
  852|  8.59k|      candidate_groups.at(candidate_number_group_index).find(
  ------------------
  |  Branch (852:7): [True: 98, False: 7.23k]
  ------------------
  853|  7.33k|          national_significant_number) != string::npos) {
  854|  1.36k|    return true;
  855|  1.36k|  }
  856|       |  // Starting from the end, go through in reverse, excluding the first group,
  857|       |  // and check the candidate and number groups are the same.
  858|  7.23k|  for (int formatted_number_group_index =
  859|  7.23k|           static_cast<int>(formatted_number_groups.size() - 1);
  860|  7.73k|       formatted_number_group_index > 0 &&
  ------------------
  |  Branch (860:8): [True: 5.04k, False: 2.69k]
  ------------------
  861|  7.73k|       candidate_number_group_index >= 0;
  ------------------
  |  Branch (861:8): [True: 5.04k, False: 0]
  ------------------
  862|  7.23k|       --formatted_number_group_index, --candidate_number_group_index) {
  863|  5.04k|    if (candidate_groups.at(candidate_number_group_index) !=
  ------------------
  |  Branch (863:9): [True: 4.54k, False: 501]
  ------------------
  864|  5.04k|        formatted_number_groups.at(formatted_number_group_index)) {
  865|  4.54k|      return false;
  866|  4.54k|    }
  867|  5.04k|  }
  868|       |  // Now check the first group. There may be a national prefix at the start, so
  869|       |  // we only check that the candidate group ends with the formatted number
  870|       |  // group.
  871|  2.69k|  return (candidate_number_group_index >= 0 &&
  ------------------
  |  Branch (871:11): [True: 2.67k, False: 18]
  ------------------
  872|  2.69k|          HasSuffixString(candidate_groups.at(candidate_number_group_index),
  ------------------
  |  Branch (872:11): [True: 27, False: 2.64k]
  ------------------
  873|  2.67k|                          formatted_number_groups.at(0)));
  874|  7.23k|}
_ZN4i18n12phonenumbers18PhoneNumberMatcher40ContainsMoreThanOneSlashInNationalNumberERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKNS0_15PhoneNumberUtilE:
  880|  9.21k|    const PhoneNumberUtil& util) {
  881|  9.21k|  size_t first_slash_in_body = candidate.find('/');
  882|  9.21k|  if (first_slash_in_body == string::npos) {
  ------------------
  |  Branch (882:7): [True: 6.23k, False: 2.98k]
  ------------------
  883|       |    // No slashes, this is okay.
  884|  6.23k|    return false;
  885|  6.23k|  }
  886|       |  // Now look for a second one.
  887|  2.98k|  size_t second_slash_in_body = candidate.find('/', first_slash_in_body + 1);
  888|  2.98k|  if (second_slash_in_body == string::npos) {
  ------------------
  |  Branch (888:7): [True: 2.40k, False: 578]
  ------------------
  889|       |    // Only one slash, this is okay.
  890|  2.40k|    return false;
  891|  2.40k|  }
  892|       |
  893|       |  // If the first slash is after the country calling code, this is permitted.
  894|    578|  if (number.country_code_source() == PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN ||
  ------------------
  |  Branch (894:7): [True: 174, False: 404]
  ------------------
  895|    578|      number.country_code_source() ==
  ------------------
  |  Branch (895:7): [True: 185, False: 219]
  ------------------
  896|    404|          PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN) {
  897|    359|    string normalized_country_code =
  898|    359|        candidate.substr(0, first_slash_in_body);
  899|    359|    util.NormalizeDigitsOnly(&normalized_country_code);
  900|    359|    if (normalized_country_code == SimpleItoa(number.country_code())) {
  ------------------
  |  Branch (900:9): [True: 83, False: 276]
  ------------------
  901|       |      // Any more slashes and this is illegal.
  902|     83|      return candidate.find('/', second_slash_in_body + 1) != string::npos;
  903|     83|    }
  904|    359|  }
  905|    495|  return true;
  906|    578|}
phonenumbermatcher.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_126IsInvalidPunctuationSymbolEi:
   76|  92.5k|bool IsInvalidPunctuationSymbol(char32 character) {
   77|  92.5k|  return character == '%' || u_charType(character) == U_CURRENCY_SYMBOL;
  ------------------
  |  Branch (77:10): [True: 655, False: 91.8k]
  |  Branch (77:30): [True: 624, False: 91.2k]
  ------------------
   78|  92.5k|}
phonenumbermatcher.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_123ContainsOnlyValidXCharsERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKNS0_15PhoneNumberUtilE:
   81|  12.8k|                             const PhoneNumberUtil& util) {
   82|       |  // The characters 'x' and 'X' can be (1) a carrier code, in which case they
   83|       |  // always precede the national significant number or (2) an extension sign,
   84|       |  // in which case they always precede the extension number. We assume a
   85|       |  // carrier code is more than 1 digit, so the first case has to have more than
   86|       |  // 1 consecutive 'x' or 'X', whereas the second case can only have exactly 1
   87|       |  // 'x' or 'X'.
   88|  12.8k|  size_t found;
   89|  12.8k|  found = candidate.find_first_of("xX");
   90|       |  // We ignore the character if 'x' or 'X' appears as the last character of
   91|       |  // the string.
   92|  14.6k|  while (found != string::npos && found < candidate.length() - 1) {
  ------------------
  |  Branch (92:10): [True: 5.28k, False: 9.38k]
  |  Branch (92:35): [True: 5.02k, False: 254]
  ------------------
   93|       |    // We only look for 'x' or 'X' in ASCII form.
   94|  5.02k|    char next_char = candidate[found + 1];
   95|  5.02k|    if (next_char == 'x' || next_char == 'X') {
  ------------------
  |  Branch (95:9): [True: 2.87k, False: 2.15k]
  |  Branch (95:29): [True: 0, False: 2.15k]
  ------------------
   96|       |      // This is the carrier code case, in which the 'X's always precede the
   97|       |      // national significant number.
   98|  2.87k|      ++found;
   99|  2.87k|      if (util.IsNumberMatchWithOneString(
  ------------------
  |  Branch (99:11): [True: 2.23k, False: 641]
  ------------------
  100|  2.87k|              number, candidate.substr(found, candidate.length() - found))
  101|  2.87k|          != PhoneNumberUtil::NSN_MATCH) {
  102|  2.23k|        return false;
  103|  2.23k|      }
  104|  2.87k|    } else {
  105|  2.15k|      string normalized_extension(candidate.substr(found,
  106|  2.15k|                                                   candidate.length() - found));
  107|  2.15k|      util.NormalizeDigitsOnly(&normalized_extension);
  108|  2.15k|      if (normalized_extension != number.extension()) {
  ------------------
  |  Branch (108:11): [True: 998, False: 1.15k]
  ------------------
  109|    998|        return false;
  110|    998|      }
  111|  2.15k|    }
  112|  1.79k|    found = candidate.find_first_of("xX", found + 1);
  113|  1.79k|  }
  114|  9.63k|  return true;
  115|  12.8k|}
phonenumbermatcher.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_128AllNumberGroupsRemainGroupedERKNS0_15PhoneNumberUtilERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKNS8_6vectorISE_NSC_ISE_EEEE:
  121|  11.6k|    const std::vector<string>& formatted_number_groups) {
  122|  11.6k|  size_t from_index = 0;
  123|  11.6k|  if (number.country_code_source() != PhoneNumber::FROM_DEFAULT_COUNTRY) {
  ------------------
  |  Branch (123:7): [True: 6.59k, False: 5.07k]
  ------------------
  124|       |    // First skip the country code if the normalized candidate contained it.
  125|  6.59k|    string country_code = SimpleItoa(number.country_code());
  126|  6.59k|    from_index = normalized_candidate.find(country_code) + country_code.size();
  127|  6.59k|  }
  128|       |  // Check each group of consecutive digits are not broken into separate
  129|       |  // groupings in the normalized_candidate string.
  130|  19.3k|  for (size_t i = 0; i < formatted_number_groups.size(); ++i) {
  ------------------
  |  Branch (130:22): [True: 17.4k, False: 1.94k]
  ------------------
  131|       |    // Fails if the substring of normalized_candidate starting from from_index
  132|       |    // doesn't contain the consecutive digits in formatted_number_groups.at(i).
  133|  17.4k|    from_index = normalized_candidate.find(formatted_number_groups.at(i),
  134|  17.4k|                                           from_index);
  135|  17.4k|    if (from_index == string::npos) {
  ------------------
  |  Branch (135:9): [True: 6.42k, False: 11.0k]
  ------------------
  136|  6.42k|      return false;
  137|  6.42k|    }
  138|       |    // Moves from_index forward.
  139|  11.0k|    from_index += formatted_number_groups.at(i).length();
  140|  11.0k|    if (i == 0 && from_index < normalized_candidate.length()) {
  ------------------
  |  Branch (140:9): [True: 6.54k, False: 4.45k]
  |  Branch (140:19): [True: 6.04k, False: 501]
  ------------------
  141|       |      // We are at the position right after the NDC. We get the region used for
  142|       |      // formatting information based on the country code in the phone number,
  143|       |      // rather than the number itself, as we do not need to distinguish between
  144|       |      // different countries with the same country calling code and this is
  145|       |      // faster.
  146|  6.04k|      string region;
  147|  6.04k|      util.GetRegionCodeForCountryCode(number.country_code(), &region);
  148|  6.04k|      string ndd_prefix;
  149|  6.04k|      util.GetNddPrefixForRegion(region, true, &ndd_prefix);
  150|       |      // Note although normalized_candidate might contain non-ASCII formatting
  151|       |      // characters, they won't be treated as ASCII digits when converted to a
  152|       |      // char.
  153|  6.04k|      if (!ndd_prefix.empty() && isdigit(normalized_candidate.at(from_index))) {
  ------------------
  |  Branch (153:11): [True: 3.98k, False: 2.05k]
  |  Branch (153:34): [True: 3.28k, False: 698]
  ------------------
  154|       |        // This means there is no formatting symbol after the NDC. In this case,
  155|       |        // we only accept the number if there is no formatting symbol at all in
  156|       |        // the number, except for extensions. This is only important for
  157|       |        // countries with national prefixes.
  158|  3.28k|        string national_significant_number;
  159|  3.28k|        util.GetNationalSignificantNumber(number, &national_significant_number);
  160|  3.28k|        return HasPrefixString(normalized_candidate.substr(
  161|  3.28k|            from_index - formatted_number_groups.at(i).length()),
  162|  3.28k|            national_significant_number);
  163|  3.28k|        }
  164|  6.04k|      }
  165|  11.0k|    }
  166|       |    // The check here makes sure that we haven't mistakenly already used the
  167|       |    // extension to match the last group of the subscriber number. Note the
  168|       |    // extension cannot have formatting in-between digits.
  169|  1.94k|    return normalized_candidate.substr(from_index)
  170|  1.94k|        .find(number.extension()) != string::npos;
  171|  11.6k|}
_ZNK4i18n12phonenumbers16AlternateFormats29GetAlternateFormatsForCountryEi:
  383|  4.94k|      const {
  384|  4.94k|    map<int, const PhoneMetadata*>::const_iterator it =
  385|  4.94k|        calling_code_to_alternate_formats_map_.find(country_calling_code);
  386|  4.94k|    if (it != calling_code_to_alternate_formats_map_.end()) {
  ------------------
  |  Branch (386:9): [True: 4.43k, False: 511]
  ------------------
  387|  4.43k|      return it->second;
  388|  4.43k|    }
  389|    511|    return NULL;
  390|  4.94k|  }
_ZN4i18n12phonenumbers25PhoneNumberMatcherRegExpsC2Ev:
  271|      1|      : opening_parens_("(\\[\xEF\xBC\x88\xEF\xBC\xBB" /* "(\\[（［" */),
  272|      1|        closing_parens_(")\\]\xEF\xBC\x89\xEF\xBC\xBD" /* ")\\]）］" */),
  273|      1|        non_parens_(StrCat("[^", opening_parens_, closing_parens_, "]")),
  274|      1|        bracket_pair_limit_(Limit(0, 3)),
  275|      1|        leading_maybe_matched_bracket_(StrCat(
  276|      1|            "(?:[", opening_parens_, "])?",
  277|      1|            "(?:", non_parens_, "+[", closing_parens_, "])?")),
  278|      1|        bracket_pairs_(StrCat(
  279|      1|            "(?:[", opening_parens_, "]", non_parens_, "+",
  280|      1|            "[", closing_parens_, "])", bracket_pair_limit_)),
  281|      1|        lead_limit_(Limit(0, 2)),
  282|      1|        punctuation_limit_(Limit(0, 4)),
  283|      1|        digit_block_limit_(PhoneNumberUtil::kMaxLengthForNsn +
  284|      1|                           PhoneNumberUtil::kMaxLengthCountryCode),
  285|      1|        block_limit_(Limit(0, digit_block_limit_)),
  286|      1|        punctuation_(StrCat("[", PhoneNumberUtil::kValidPunctuation, "]",
  287|      1|                            punctuation_limit_)),
  288|      1|        digit_sequence_(StrCat("\\p{Nd}", Limit(1, digit_block_limit_))),
  289|      1|        lead_class_chars_(StrCat(opening_parens_, PhoneNumberUtil::kPlusChars)),
  290|      1|        lead_class_(StrCat("[", lead_class_chars_, "]")),
  291|      1|        regexp_factory_for_pattern_(new ICURegExpFactory()),
  292|       |#ifdef I18N_PHONENUMBERS_USE_RE2
  293|       |        regexp_factory_(new RE2RegExpFactory()),
  294|       |#else
  295|      1|        regexp_factory_(new ICURegExpFactory()),
  296|       |#endif  // I18N_PHONENUMBERS_USE_RE2
  297|       |        // A cache for frequently used country-specific regular expressions. Set
  298|       |        // to 32 to cover ~2-3 countries being used for the same doc with ~10
  299|       |        // patterns for each country. Some pages will have a lot more countries
  300|       |        // in use, but typically fewer numbers for each so expanding the cache
  301|       |        // for that use-case won't have a lot of benefit.
  302|      1|        regexp_cache_(*regexp_factory_, 32),
  303|      1|        pub_pages_(regexp_factory_->CreateRegExp(
  304|      1|            "\\d{1,5}-+\\d{1,5}\\s{0,4}\\(\\d{1,4}")),
  305|      1|        slash_separated_dates_(regexp_factory_->CreateRegExp(
  306|      1|            "(?:(?:[0-3]?\\d/[01]?\\d)|"
  307|      1|            "(?:[01]?\\d/[0-3]?\\d))/(?:[12]\\d)?\\d{2}")),
  308|      1|        time_stamps_(regexp_factory_->CreateRegExp(
  309|      1|            "[12]\\d{3}[-/]?[01]\\d[-/]?[0-3]\\d +[0-2]\\d$")),
  310|      1|        time_stamps_suffix_(regexp_factory_->CreateRegExp(":[0-5]\\d")),
  311|      1|        matching_brackets_(regexp_factory_->CreateRegExp(
  312|      1|            StrCat(leading_maybe_matched_bracket_, non_parens_, "+",
  313|      1|                   bracket_pairs_, non_parens_, "*"))),
  314|      1|        inner_matches_(new std::vector<const RegExp*>()),
  315|      1|        capture_up_to_second_number_start_pattern_(
  316|      1|            regexp_factory_->CreateRegExp(
  317|      1|                PhoneNumberUtil::kCaptureUpToSecondNumberStart)),
  318|      1|        capturing_ascii_digits_pattern_(
  319|      1|            regexp_factory_->CreateRegExp("(\\d+)")),
  320|      1|        lead_class_pattern_(regexp_factory_->CreateRegExp(lead_class_)),
  321|      1|        pattern_(regexp_factory_for_pattern_->CreateRegExp(StrCat(
  322|      1|            "((?:", lead_class_, punctuation_, ")", lead_limit_,
  323|      1|            digit_sequence_, "(?:", punctuation_, digit_sequence_, ")",
  324|      1|            block_limit_, "(?i)(?:",
  325|      1|            PhoneNumberUtil::GetInstance()->GetExtnPatternsForMatching(),
  326|      1|            ")?)"))) {
  327|      1|    inner_matches_->push_back(
  328|       |        // Breaks on the slash - e.g. "651-234-2345/332-445-1234"
  329|      1|        regexp_factory_->CreateRegExp("/+(.*)"));
  330|      1|    inner_matches_->push_back(
  331|       |        // Note that the bracket here is inside the capturing group, since we
  332|       |        // consider it part of the phone number. Will match a pattern like
  333|       |        // "(650) 223 3345 (754) 223 3321".
  334|      1|        regexp_factory_->CreateRegExp("(\\([^(]*)"));
  335|      1|    inner_matches_->push_back(
  336|       |        // Breaks on a hyphen - e.g. "12345 - 332-445-1234 is my number." We
  337|       |        // require a space on either side of the hyphen for it to be considered
  338|       |        // a separator.
  339|      1|        regexp_factory_->CreateRegExp("(?:\\p{Z}-|-\\p{Z})\\p{Z}*(.+)"));
  340|      1|    inner_matches_->push_back(
  341|       |        // Various types of wide hyphens. Note we have decided not to enforce a
  342|       |        // space here, since it's possible that it's supposed to be used to
  343|       |        // break two numbers without spaces, and we haven't seen many instances
  344|       |        // of it used within a number.
  345|      1|        regexp_factory_->CreateRegExp(
  346|      1|            "[\xE2\x80\x92-\xE2\x80\x95\xEF\xBC\x8D]" /* "‒-―－" */
  347|      1|            "\\p{Z}*(.+)"));
  348|      1|    inner_matches_->push_back(
  349|       |        // Breaks on a full stop - e.g. "12345. 332-445-1234 is my number."
  350|      1|        regexp_factory_->CreateRegExp("\\.+\\p{Z}*([^.]+)"));
  351|      1|    inner_matches_->push_back(
  352|       |        // Breaks on space - e.g. "3324451234 8002341234"
  353|      1|        regexp_factory_->CreateRegExp("\\p{Z}+(\\P{Z}+)"));
  354|      1|  }
phonenumbermatcher.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_15LimitEii:
   69|      5|string Limit(int lower, int upper) {
   70|      5|  DCHECK_GE(lower, 0);
  ------------------
  |  |   31|      5|#define DCHECK_GE(X, Y) assert((X) >= (Y))
  ------------------
   71|      5|  DCHECK_GT(upper, 0);
  ------------------
  |  |   32|      5|#define DCHECK_GT(X, Y) assert((X) > (Y))
  ------------------
   72|      5|  DCHECK_LT(lower, upper);
  ------------------
  |  |   33|      5|#define DCHECK_LT(X, Y) assert((X) < (Y))
  ------------------
   73|      5|  return StrCat("{", lower, ",", upper, "}");
   74|      5|}
_ZN4i18n12phonenumbers16AlternateFormatsC2Ev:
  367|      1|      : format_data_(),
  368|      1|        calling_code_to_alternate_formats_map_() {
  369|      1|    if (!LoadAlternateFormats(&format_data_)) {
  ------------------
  |  Branch (369:9): [True: 0, False: 1]
  ------------------
  370|      0|      LOG(DFATAL) << "Could not parse compiled-in metadata.";
  371|      0|      return;
  372|      0|    }
  373|      1|    for (RepeatedPtrField<PhoneMetadata>::const_iterator it =
  374|      1|             format_data_.metadata().begin();
  375|     47|         it != format_data_.metadata().end();
  ------------------
  |  Branch (375:10): [True: 46, False: 1]
  ------------------
  376|     46|         ++it) {
  377|     46|      calling_code_to_alternate_formats_map_.insert(
  378|     46|          std::make_pair(it->country_code(), &*it));
  379|     46|    }
  380|      1|  }
phonenumbermatcher.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_120LoadAlternateFormatsEPNS0_23PhoneMetadataCollectionE:
  173|      1|bool LoadAlternateFormats(PhoneMetadataCollection* alternate_formats) {
  174|      1|#if defined(I18N_PHONENUMBERS_USE_ALTERNATE_FORMATS)
  175|      1|  if (!alternate_formats->ParseFromArray(alternate_format_get(),
  ------------------
  |  Branch (175:7): [True: 0, False: 1]
  ------------------
  176|      1|                                         alternate_format_size())) {
  177|      0|    LOG(ERROR) << "Could not parse binary data.";
  178|      0|    return false;
  179|      0|  }
  180|      1|  return true;
  181|       |#else
  182|       |  return false;
  183|       |#endif
  184|      1|}

_ZN4i18n12phonenumbers15PhoneNumberUtilC2Ev:
  859|      1|    : logger_(Logger::set_logger_impl(new NullLogger())),
  860|      1|      matcher_api_(new RegexBasedMatcher()),
  861|      1|      reg_exps_(new PhoneNumberRegExpsAndMappings),
  862|      1|      country_calling_code_to_region_code_map_(
  863|      1|          new std::vector<IntRegionsPair>()),
  864|      1|      nanpa_regions_(new absl::node_hash_set<string>()),
  865|      1|      region_to_metadata_map_(new absl::node_hash_map<string, PhoneMetadata>()),
  866|      1|      country_code_to_non_geographical_metadata_map_(
  867|      1|          new absl::node_hash_map<int, PhoneMetadata>) {
  868|      1|  Logger::set_logger_impl(logger_.get());
  869|       |  // TODO: Update the java version to put the contents of the init
  870|       |  // method inside the constructor as well to keep both in sync.
  871|      1|  PhoneMetadataCollection metadata_collection;
  872|      1|  if (!LoadCompiledInMetadata(&metadata_collection)) {
  ------------------
  |  Branch (872:7): [True: 0, False: 1]
  ------------------
  873|      0|    LOG(DFATAL) << "Could not parse compiled-in metadata.";
  874|      0|    return;
  875|      0|  }
  876|       |  // Storing data in a temporary map to make it easier to find other regions
  877|       |  // that share a country calling code when inserting data.
  878|      1|  std::map<int, std::list<string>* > country_calling_code_to_region_map;
  879|      1|  for (RepeatedPtrField<PhoneMetadata>::const_iterator it =
  880|      1|           metadata_collection.metadata().begin();
  881|    255|       it != metadata_collection.metadata().end();
  ------------------
  |  Branch (881:8): [True: 254, False: 1]
  ------------------
  882|    254|       ++it) {
  883|    254|    const string& region_code = it->id();
  884|    254|    if (region_code == RegionCode::GetUnknown()) {
  ------------------
  |  Branch (884:9): [True: 0, False: 254]
  ------------------
  885|      0|      continue;
  886|      0|    }
  887|       |
  888|    254|    int country_calling_code = it->country_code();
  889|    254|    if (kRegionCodeForNonGeoEntity == region_code) {
  ------------------
  |  Branch (889:9): [True: 9, False: 245]
  ------------------
  890|      9|      country_code_to_non_geographical_metadata_map_->insert(
  891|      9|          std::make_pair(country_calling_code, *it));
  892|    245|    } else {
  893|    245|      region_to_metadata_map_->insert(std::make_pair(region_code, *it));
  894|    245|    }
  895|    254|    std::map<int, std::list<string>* >::iterator calling_code_in_map =
  896|    254|        country_calling_code_to_region_map.find(country_calling_code);
  897|    254|    if (calling_code_in_map != country_calling_code_to_region_map.end()) {
  ------------------
  |  Branch (897:9): [True: 39, False: 215]
  ------------------
  898|     39|      if (it->main_country_for_code()) {
  ------------------
  |  Branch (898:11): [True: 6, False: 33]
  ------------------
  899|      6|        calling_code_in_map->second->push_front(region_code);
  900|     33|      } else {
  901|     33|        calling_code_in_map->second->push_back(region_code);
  902|     33|      }
  903|    215|    } else {
  904|       |      // For most country calling codes, there will be only one region code.
  905|    215|      std::list<string>* list_with_region_code = new std::list<string>();
  906|    215|      list_with_region_code->push_back(region_code);
  907|    215|      country_calling_code_to_region_map.insert(
  908|    215|          std::make_pair(country_calling_code, list_with_region_code));
  909|    215|    }
  910|    254|    if (country_calling_code == kNanpaCountryCode) {
  ------------------
  |  Branch (910:9): [True: 25, False: 229]
  ------------------
  911|     25|        nanpa_regions_->insert(region_code);
  912|     25|    }
  913|    254|  }
  914|       |
  915|      1|  country_calling_code_to_region_code_map_->insert(
  916|      1|      country_calling_code_to_region_code_map_->begin(),
  917|      1|      country_calling_code_to_region_map.begin(),
  918|      1|      country_calling_code_to_region_map.end());
  919|       |  // Sort all the pairs in ascending order according to country calling code.
  920|      1|  std::sort(country_calling_code_to_region_code_map_->begin(),
  921|      1|            country_calling_code_to_region_code_map_->end(), OrderByFirst());
  922|      1|}
_ZN4i18n12phonenumbers15PhoneNumberUtil11GetInstanceEv:
  990|  8.27k|PhoneNumberUtil* PhoneNumberUtil::GetInstance() {
  991|  8.27k|  return Singleton<PhoneNumberUtil>::GetInstance();
  992|  8.27k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil26GetExtnPatternsForMatchingEv:
  994|      1|const string& PhoneNumberUtil::GetExtnPatternsForMatching() const {
  995|      1|  return reg_exps_->extn_patterns_for_matching_;
  996|      1|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20TrimUnwantedEndCharsEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1009|   115k|void PhoneNumberUtil::TrimUnwantedEndChars(string* number) const {
 1010|   115k|  DCHECK(number);
  ------------------
  |  |   29|   115k|#define DCHECK(X) assert(X)
  ------------------
 1011|   115k|  UnicodeText number_as_unicode;
 1012|   115k|  number_as_unicode.PointToUTF8(number->data(), static_cast<int>(number->size()));
 1013|   115k|  if (!number_as_unicode.UTF8WasValid()) {
  ------------------
  |  Branch (1013:7): [True: 0, False: 115k]
  ------------------
 1014|       |    // The input wasn't valid UTF-8. Produce an empty string to indicate an error.
 1015|      0|    number->clear();
 1016|      0|    return;
 1017|      0|  }
 1018|   115k|  char current_char[5];
 1019|   115k|  int len;
 1020|   115k|  UnicodeText::const_reverse_iterator reverse_it(number_as_unicode.end());
 1021|   151k|  for (; reverse_it.base() != number_as_unicode.begin(); ++reverse_it) {
  ------------------
  |  Branch (1021:10): [True: 147k, False: 4.12k]
  ------------------
 1022|   147k|    len = reverse_it.get_utf8(current_char);
 1023|   147k|    current_char[len] = '\0';
 1024|   147k|    if (!reg_exps_->unwanted_end_char_pattern_->FullMatch(current_char)) {
  ------------------
  |  Branch (1024:9): [True: 111k, False: 35.8k]
  ------------------
 1025|   111k|      break;
 1026|   111k|    }
 1027|   147k|  }
 1028|       |
 1029|   115k|  number->assign(UnicodeText::UTF8Substring(number_as_unicode.begin(),
 1030|   115k|                                            reverse_it.base()));
 1031|   115k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil31FormattingRuleHasFirstGroupOnlyERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1051|  1.14k|    const string& national_prefix_formatting_rule) const {
 1052|       |  // A pattern that is used to determine if the national prefix formatting rule
 1053|       |  // has the first group only, i.e., does not start with the national prefix.
 1054|       |  // Note that the pattern explicitly allows for unbalanced parentheses.
 1055|  1.14k|  const RegExp& first_group_only_prefix_pattern =
 1056|  1.14k|      reg_exps_->regexp_cache_->GetRegExp("\\(?\\$1\\)?");
 1057|  1.14k|  return national_prefix_formatting_rule.empty() ||
  ------------------
  |  Branch (1057:10): [True: 0, False: 1.14k]
  ------------------
 1058|  1.14k|      first_group_only_prefix_pattern.FullMatch(
  ------------------
  |  Branch (1058:7): [True: 26, False: 1.11k]
  ------------------
 1059|  1.14k|          national_prefix_formatting_rule);
 1060|  1.14k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil21GetNddPrefixForRegionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbPS8_:
 1064|  6.04k|                                            string* national_prefix) const {
 1065|  6.04k|  DCHECK(national_prefix);
  ------------------
  |  |   29|  6.04k|#define DCHECK(X) assert(X)
  ------------------
 1066|  6.04k|  const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
 1067|  6.04k|  if (!metadata) {
  ------------------
  |  Branch (1067:7): [True: 49, False: 5.99k]
  ------------------
 1068|     49|    LOG(WARNING) << "Invalid or unknown region code (" << region_code
 1069|     49|                 << ") provided.";
 1070|     49|    return;
 1071|     49|  }
 1072|  5.99k|  national_prefix->assign(metadata->national_prefix());
 1073|  5.99k|  if (strip_non_digits) {
  ------------------
  |  Branch (1073:7): [True: 5.99k, False: 0]
  ------------------
 1074|       |    // Note: if any other non-numeric symbols are ever used in national
 1075|       |    // prefixes, these would have to be removed here as well.
 1076|  5.99k|    strrmm(national_prefix, "~");
 1077|  5.99k|  }
 1078|  5.99k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil17IsValidRegionCodeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1080|  50.3k|bool PhoneNumberUtil::IsValidRegionCode(const string& region_code) const {
 1081|  50.3k|  return (region_to_metadata_map_->find(region_code) !=
 1082|  50.3k|          region_to_metadata_map_->end());
 1083|  50.3k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil26HasValidCountryCallingCodeEi:
 1086|  11.8k|    int country_calling_code) const {
 1087|       |  // Create an IntRegionsPair with the country_code passed in, and use it to
 1088|       |  // locate the pair with the same country_code in the sorted vector.
 1089|  11.8k|  IntRegionsPair target_pair;
 1090|  11.8k|  target_pair.first = country_calling_code;
 1091|  11.8k|  return (std::binary_search(country_calling_code_to_region_code_map_->begin(),
 1092|  11.8k|                             country_calling_code_to_region_code_map_->end(),
 1093|  11.8k|                             target_pair, OrderByFirst()));
 1094|  11.8k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20GetMetadataForRegionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1099|   161k|    const string& region_code) const {
 1100|   161k|  absl::node_hash_map<string, PhoneMetadata>::const_iterator it =
 1101|   161k|      region_to_metadata_map_->find(region_code);
 1102|   161k|  if (it != region_to_metadata_map_->end()) {
  ------------------
  |  Branch (1102:7): [True: 155k, False: 6.16k]
  ------------------
 1103|   155k|    return &it->second;
 1104|   155k|  }
 1105|  6.16k|  return NULL;
 1106|   161k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil35GetMetadataForNonGeographicalRegionEi:
 1109|  1.05k|    int country_calling_code) const {
 1110|  1.05k|  absl::node_hash_map<int, PhoneMetadata>::const_iterator it =
 1111|  1.05k|      country_code_to_non_geographical_metadata_map_->find(
 1112|  1.05k|          country_calling_code);
 1113|  1.05k|  if (it != country_code_to_non_geographical_metadata_map_->end()) {
  ------------------
  |  Branch (1113:7): [True: 1.05k, False: 0]
  ------------------
 1114|  1.05k|    return &it->second;
 1115|  1.05k|  }
 1116|      0|  return NULL;
 1117|  1.05k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil6FormatERKNS0_11PhoneNumberENS1_17PhoneNumberFormatEPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE:
 1121|  7.95k|                             string* formatted_number) const {
 1122|  7.95k|  DCHECK(formatted_number);
  ------------------
  |  |   29|  7.95k|#define DCHECK(X) assert(X)
  ------------------
 1123|  7.95k|  if (number.national_number() == 0) {
  ------------------
  |  Branch (1123:7): [True: 118, False: 7.83k]
  ------------------
 1124|    118|    const string& raw_input = number.raw_input();
 1125|    118|    if (!raw_input.empty()) {
  ------------------
  |  Branch (1125:9): [True: 118, False: 0]
  ------------------
 1126|       |      // Unparseable numbers that kept their raw input just use that.
 1127|       |      // This is the only case where a number can be formatted as E164 without a
 1128|       |      // leading '+' symbol (but the original number wasn't parseable anyway).
 1129|       |      // TODO: Consider removing the 'if' above so that unparseable
 1130|       |      // strings without raw input format to the empty string instead of "+00".
 1131|    118|      formatted_number->assign(raw_input);
 1132|    118|      return;
 1133|    118|    }
 1134|    118|  }
 1135|  7.83k|  int country_calling_code = number.country_code();
 1136|  7.83k|  string national_significant_number;
 1137|  7.83k|  GetNationalSignificantNumber(number, &national_significant_number);
 1138|  7.83k|  if (number_format == E164) {
  ------------------
  |  Branch (1138:7): [True: 0, False: 7.83k]
  ------------------
 1139|       |    // Early exit for E164 case (even if the country calling code is invalid)
 1140|       |    // since no formatting of the national number needs to be applied.
 1141|       |    // Extensions are not formatted.
 1142|      0|    formatted_number->assign(national_significant_number);
 1143|      0|    PrefixNumberWithCountryCallingCode(country_calling_code, E164,
 1144|      0|                                       formatted_number);
 1145|      0|    return;
 1146|      0|  }
 1147|  7.83k|  if (!HasValidCountryCallingCode(country_calling_code)) {
  ------------------
  |  Branch (1147:7): [True: 0, False: 7.83k]
  ------------------
 1148|      0|    formatted_number->assign(national_significant_number);
 1149|      0|    return;
 1150|      0|  }
 1151|       |  // Note here that all NANPA formatting rules are contained by US, so we use
 1152|       |  // that to format NANPA numbers. The same applies to Russian Fed regions -
 1153|       |  // rules are contained by Russia. French Indian Ocean country rules are
 1154|       |  // contained by Réunion.
 1155|  7.83k|  string region_code;
 1156|  7.83k|  GetRegionCodeForCountryCode(country_calling_code, &region_code);
 1157|       |  // Metadata cannot be NULL because the country calling code is valid (which
 1158|       |  // means that the region code cannot be ZZ and must be one of our supported
 1159|       |  // region codes).
 1160|  7.83k|  const PhoneMetadata* metadata =
 1161|  7.83k|      GetMetadataForRegionOrCallingCode(country_calling_code, region_code);
 1162|  7.83k|  FormatNsn(national_significant_number, *metadata, number_format,
 1163|  7.83k|            formatted_number);
 1164|  7.83k|  MaybeAppendFormattedExtension(number, *metadata, number_format,
 1165|  7.83k|                                formatted_number);
 1166|  7.83k|  PrefixNumberWithCountryCallingCode(country_calling_code, number_format,
 1167|  7.83k|                                     formatted_number);
 1168|  7.83k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil33GetMetadataForRegionOrCallingCodeEiRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1258|  46.1k|      int country_calling_code, const string& region_code) const {
 1259|  46.1k|  return kRegionCodeForNonGeoEntity == region_code
  ------------------
  |  Branch (1259:10): [True: 1.05k, False: 45.1k]
  ------------------
 1260|  46.1k|      ? GetMetadataForNonGeographicalRegion(country_calling_code)
 1261|  46.1k|      : GetMetadataForRegion(region_code);
 1262|  46.1k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil32ChooseFormattingPatternForNumberERKN6google8protobuf16RepeatedPtrFieldINS0_12NumberFormatEEERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEE:
 1728|  14.9k|    const string& national_number) const {
 1729|  14.9k|  for (RepeatedPtrField<NumberFormat>::const_iterator
 1730|  86.8k|       it = available_formats.begin(); it != available_formats.end(); ++it) {
  ------------------
  |  Branch (1730:40): [True: 83.9k, False: 2.95k]
  ------------------
 1731|  83.9k|    int size = it->leading_digits_pattern_size();
 1732|  83.9k|    if (size > 0) {
  ------------------
  |  Branch (1732:9): [True: 83.9k, False: 24]
  ------------------
 1733|  83.9k|      const scoped_ptr<RegExpInput> number_copy(
 1734|  83.9k|          reg_exps_->regexp_factory_->CreateInput(national_number));
 1735|       |      // We always use the last leading_digits_pattern, as it is the most
 1736|       |      // detailed.
 1737|  83.9k|      if (!reg_exps_->regexp_cache_->GetRegExp(
  ------------------
  |  Branch (1737:11): [True: 51.4k, False: 32.4k]
  ------------------
 1738|  83.9k|              it->leading_digits_pattern(size - 1)).Consume(
 1739|  83.9k|                  number_copy.get())) {
 1740|  51.4k|        continue;
 1741|  51.4k|      }
 1742|  83.9k|    }
 1743|  32.5k|    const RegExp& pattern_to_match(
 1744|  32.5k|        reg_exps_->regexp_cache_->GetRegExp(it->pattern()));
 1745|  32.5k|    if (pattern_to_match.FullMatch(national_number)) {
  ------------------
  |  Branch (1745:9): [True: 12.0k, False: 20.4k]
  ------------------
 1746|  12.0k|      return &(*it);
 1747|  12.0k|    }
 1748|  32.5k|  }
 1749|  2.95k|  return NULL;
 1750|  14.9k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil32FormatNsnUsingPatternWithCarrierERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_12NumberFormatENS1_17PhoneNumberFormatESA_PS8_:
 1759|  18.6k|    string* formatted_number) const {
 1760|  18.6k|  DCHECK(formatted_number);
  ------------------
  |  |   29|  18.6k|#define DCHECK(X) assert(X)
  ------------------
 1761|  18.6k|  string number_format_rule(formatting_pattern.format());
 1762|  18.6k|  if (number_format == PhoneNumberUtil::NATIONAL &&
  ------------------
  |  Branch (1762:7): [True: 0, False: 18.6k]
  ------------------
 1763|  18.6k|      carrier_code.length() > 0 &&
  ------------------
  |  Branch (1763:7): [True: 0, False: 0]
  ------------------
 1764|  18.6k|      formatting_pattern.domestic_carrier_code_formatting_rule().length() > 0) {
  ------------------
  |  Branch (1764:7): [True: 0, False: 0]
  ------------------
 1765|       |    // Replace the $CC in the formatting rule with the desired carrier code.
 1766|      0|    string carrier_code_formatting_rule =
 1767|      0|        formatting_pattern.domestic_carrier_code_formatting_rule();
 1768|      0|    reg_exps_->carrier_code_pattern_->Replace(&carrier_code_formatting_rule,
 1769|      0|                                              carrier_code);
 1770|      0|    reg_exps_->first_group_capturing_pattern_->
 1771|      0|        Replace(&number_format_rule, carrier_code_formatting_rule);
 1772|  18.6k|  } else {
 1773|       |    // Use the national prefix formatting rule instead.
 1774|  18.6k|    string national_prefix_formatting_rule =
 1775|  18.6k|        formatting_pattern.national_prefix_formatting_rule();
 1776|  18.6k|    if (number_format == PhoneNumberUtil::NATIONAL &&
  ------------------
  |  Branch (1776:9): [True: 0, False: 18.6k]
  ------------------
 1777|  18.6k|        national_prefix_formatting_rule.length() > 0) {
  ------------------
  |  Branch (1777:9): [True: 0, False: 0]
  ------------------
 1778|       |      // Apply the national_prefix_formatting_rule as the formatting_pattern
 1779|       |      // contains only information on how the national significant number
 1780|       |      // should be formatted at this point.
 1781|      0|      reg_exps_->first_group_capturing_pattern_->Replace(
 1782|      0|          &number_format_rule, national_prefix_formatting_rule);
 1783|      0|    }
 1784|  18.6k|  }
 1785|  18.6k|  formatted_number->assign(national_number);
 1786|       |
 1787|  18.6k|  const RegExp& pattern_to_match(
 1788|  18.6k|      reg_exps_->regexp_cache_->GetRegExp(formatting_pattern.pattern()));
 1789|  18.6k|  pattern_to_match.GlobalReplace(formatted_number, number_format_rule);
 1790|       |
 1791|  18.6k|  if (number_format == RFC3966) {
  ------------------
  |  Branch (1791:7): [True: 18.6k, False: 0]
  ------------------
 1792|       |    // First consume any leading punctuation, if any was present.
 1793|  18.6k|    const scoped_ptr<RegExpInput> number(
 1794|  18.6k|        reg_exps_->regexp_factory_->CreateInput(*formatted_number));
 1795|  18.6k|    if (reg_exps_->separator_pattern_->Consume(number.get())) {
  ------------------
  |  Branch (1795:9): [True: 0, False: 18.6k]
  ------------------
 1796|      0|      formatted_number->assign(number->ToString());
 1797|      0|    }
 1798|       |    // Then replace all separators with a "-".
 1799|  18.6k|    reg_exps_->separator_pattern_->GlobalReplace(formatted_number, "-");
 1800|  18.6k|  }
 1801|  18.6k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil21FormatNsnUsingPatternERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_12NumberFormatENS1_17PhoneNumberFormatEPS8_:
 1809|  12.3k|    string* formatted_number) const {
 1810|  12.3k|  DCHECK(formatted_number);
  ------------------
  |  |   29|  12.3k|#define DCHECK(X) assert(X)
  ------------------
 1811|  12.3k|  FormatNsnUsingPatternWithCarrier(national_number, formatting_pattern,
 1812|  12.3k|                                   number_format, "", formatted_number);
 1813|  12.3k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil9FormatNsnERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_13PhoneMetadataENS1_17PhoneNumberFormatEPS8_:
 1818|  7.83k|                                string* formatted_number) const {
 1819|  7.83k|  DCHECK(formatted_number);
  ------------------
  |  |   29|  7.83k|#define DCHECK(X) assert(X)
  ------------------
 1820|  7.83k|  FormatNsnWithCarrier(number, metadata, number_format, "", formatted_number);
 1821|  7.83k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20FormatNsnWithCarrierERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_13PhoneMetadataENS1_17PhoneNumberFormatESA_PS8_:
 1832|  7.83k|                                           string* formatted_number) const {
 1833|  7.83k|  DCHECK(formatted_number);
  ------------------
  |  |   29|  7.83k|#define DCHECK(X) assert(X)
  ------------------
 1834|       |  // When the intl_number_formats exists, we use that to format national number
 1835|       |  // for the INTERNATIONAL format instead of using the number_formats.
 1836|  7.83k|  const RepeatedPtrField<NumberFormat> available_formats =
 1837|  7.83k|      (metadata.intl_number_format_size() == 0 || number_format == NATIONAL)
  ------------------
  |  Branch (1837:8): [True: 7.12k, False: 709]
  |  Branch (1837:51): [True: 0, False: 709]
  ------------------
 1838|  7.83k|      ? metadata.number_format()
 1839|  7.83k|      : metadata.intl_number_format();
 1840|  7.83k|  const NumberFormat* formatting_pattern =
 1841|  7.83k|      ChooseFormattingPatternForNumber(available_formats, number);
 1842|  7.83k|  if (!formatting_pattern) {
  ------------------
  |  Branch (1842:7): [True: 1.47k, False: 6.35k]
  ------------------
 1843|  1.47k|    formatted_number->assign(number);
 1844|  6.35k|  } else {
 1845|  6.35k|    FormatNsnUsingPatternWithCarrier(number, *formatting_pattern, number_format,
 1846|  6.35k|                                     carrier_code, formatted_number);
 1847|  6.35k|  }
 1848|  7.83k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil29MaybeAppendFormattedExtensionERKNS0_11PhoneNumberERKNS0_13PhoneMetadataENS1_17PhoneNumberFormatEPNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEE:
 1856|  7.83k|    string* formatted_number) const {
 1857|  7.83k|  DCHECK(formatted_number);
  ------------------
  |  |   29|  7.83k|#define DCHECK(X) assert(X)
  ------------------
 1858|  7.83k|  if (number.has_extension() && number.extension().length() > 0) {
  ------------------
  |  Branch (1858:7): [True: 1.28k, False: 6.55k]
  |  Branch (1858:33): [True: 1.28k, False: 0]
  ------------------
 1859|  1.28k|    if (number_format == RFC3966) {
  ------------------
  |  Branch (1859:9): [True: 1.28k, False: 0]
  ------------------
 1860|  1.28k|      StrAppend(formatted_number, kRfc3966ExtnPrefix, number.extension());
 1861|  1.28k|    } else {
 1862|      0|      if (metadata.has_preferred_extn_prefix()) {
  ------------------
  |  Branch (1862:11): [True: 0, False: 0]
  ------------------
 1863|      0|        StrAppend(formatted_number, metadata.preferred_extn_prefix(),
 1864|      0|                  number.extension());
 1865|      0|      } else {
 1866|      0|        StrAppend(formatted_number, kDefaultExtnPrefix, number.extension());
 1867|      0|      }
 1868|      0|    }
 1869|  1.28k|  }
 1870|  7.83k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil35GetRegionCodesForCountryCallingCodeEiPNSt3__14listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEE:
 1880|  78.0k|    std::list<string>* region_codes) const {
 1881|  78.0k|  DCHECK(region_codes);
  ------------------
  |  |   29|  78.0k|#define DCHECK(X) assert(X)
  ------------------
 1882|       |  // Create a IntRegionsPair with the country_code passed in, and use it to
 1883|       |  // locate the pair with the same country_code in the sorted vector.
 1884|  78.0k|  IntRegionsPair target_pair;
 1885|  78.0k|  target_pair.first = country_calling_code;
 1886|  78.0k|  typedef std::vector<IntRegionsPair>::const_iterator ConstIterator;
 1887|  78.0k|  std::pair<ConstIterator, ConstIterator> range =
 1888|  78.0k|      std::equal_range(country_calling_code_to_region_code_map_->begin(),
 1889|  78.0k|                       country_calling_code_to_region_code_map_->end(),
 1890|  78.0k|                       target_pair, OrderByFirst());
 1891|  78.0k|  if (range.first != range.second) {
  ------------------
  |  Branch (1891:7): [True: 69.3k, False: 8.76k]
  ------------------
 1892|  69.3k|    region_codes->insert(region_codes->begin(),
 1893|  69.3k|                         range.first->second->begin(),
 1894|  69.3k|                         range.first->second->end());
 1895|  69.3k|  }
 1896|  78.0k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil27GetRegionCodeForCountryCodeEiPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1903|  50.6k|    string* region_code) const {
 1904|  50.6k|  DCHECK(region_code);
  ------------------
  |  |   29|  50.6k|#define DCHECK(X) assert(X)
  ------------------
 1905|  50.6k|  std::list<string> region_codes;
 1906|       |
 1907|  50.6k|  GetRegionCodesForCountryCallingCode(country_calling_code, &region_codes);
 1908|  50.6k|  *region_code = (region_codes.size() > 0) ?
  ------------------
  |  Branch (1908:18): [True: 41.9k, False: 8.76k]
  ------------------
 1909|  41.9k|      region_codes.front() : RegionCode::GetUnknown();
 1910|  50.6k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil22GetRegionCodeForNumberERKNS0_11PhoneNumberEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 1913|  27.4k|                                             string* region_code) const {
 1914|  27.4k|  DCHECK(region_code);
  ------------------
  |  |   29|  27.4k|#define DCHECK(X) assert(X)
  ------------------
 1915|  27.4k|  int country_calling_code = number.country_code();
 1916|  27.4k|  std::list<string> region_codes;
 1917|  27.4k|  GetRegionCodesForCountryCallingCode(country_calling_code, &region_codes);
 1918|  27.4k|  if (region_codes.size() == 0) {
  ------------------
  |  Branch (1918:7): [True: 0, False: 27.4k]
  ------------------
 1919|      0|    VLOG(1) << "Missing/invalid country calling code ("
 1920|      0|            << country_calling_code << ")";
 1921|      0|    *region_code = RegionCode::GetUnknown();
 1922|      0|    return;
 1923|      0|  }
 1924|  27.4k|  if (region_codes.size() == 1) {
  ------------------
  |  Branch (1924:7): [True: 24.3k, False: 3.03k]
  ------------------
 1925|  24.3k|    *region_code = region_codes.front();
 1926|  24.3k|  } else {
 1927|  3.03k|    GetRegionCodeForNumberFromRegionList(number, region_codes, region_code);
 1928|  3.03k|  }
 1929|  27.4k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil36GetRegionCodeForNumberFromRegionListERKNS0_11PhoneNumberERKNSt3__14listINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENSA_ISC_EEEEPSC_:
 1933|  3.03k|    string* region_code) const {
 1934|  3.03k|  DCHECK(region_code);
  ------------------
  |  |   29|  3.03k|#define DCHECK(X) assert(X)
  ------------------
 1935|  3.03k|  string national_number;
 1936|  3.03k|  GetNationalSignificantNumber(number, &national_number);
 1937|  3.03k|  for (std::list<string>::const_iterator it = region_codes.begin();
 1938|  38.8k|       it != region_codes.end(); ++it) {
  ------------------
  |  Branch (1938:8): [True: 36.7k, False: 2.14k]
  ------------------
 1939|       |    // Metadata cannot be NULL because the region codes come from the country
 1940|       |    // calling code map.
 1941|  36.7k|    const PhoneMetadata* metadata = GetMetadataForRegion(*it);
 1942|  36.7k|    if (metadata->has_leading_digits()) {
  ------------------
  |  Branch (1942:9): [True: 31.2k, False: 5.45k]
  ------------------
 1943|  31.2k|      const scoped_ptr<RegExpInput> number(
 1944|  31.2k|          reg_exps_->regexp_factory_->CreateInput(national_number));
 1945|  31.2k|      if (reg_exps_->regexp_cache_->
  ------------------
  |  Branch (1945:11): [True: 448, False: 30.8k]
  ------------------
 1946|  31.2k|              GetRegExp(metadata->leading_digits()).Consume(number.get())) {
 1947|    448|        *region_code = *it;
 1948|    448|        return;
 1949|    448|      }
 1950|  31.2k|    } else if (GetNumberTypeHelper(national_number, *metadata) != UNKNOWN) {
  ------------------
  |  Branch (1950:16): [True: 442, False: 5.01k]
  ------------------
 1951|    442|      *region_code = *it;
 1952|    442|      return;
 1953|    442|    }
 1954|  36.7k|  }
 1955|  2.14k|  *region_code = RegionCode::GetUnknown();
 1956|  2.14k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil28GetCountryCodeForValidRegionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1968|  24.9k|    const string& region_code) const {
 1969|  24.9k|  const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
 1970|  24.9k|  return metadata->country_code();
 1971|  24.9k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil5ParseERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_PNS0_11PhoneNumberE:
 2139|  5.52k|                                                  PhoneNumber* number) const {
 2140|  5.52k|  DCHECK(number);
  ------------------
  |  |   29|  5.52k|#define DCHECK(X) assert(X)
  ------------------
 2141|  5.52k|  return ParseHelper(number_to_parse, default_region, false, true, number);
 2142|  5.52k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20ParseAndKeepRawInputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_PNS0_11PhoneNumberE:
 2147|  55.8k|    PhoneNumber* number) const {
 2148|  55.8k|  DCHECK(number);
  ------------------
  |  |   29|  55.8k|#define DCHECK(X) assert(X)
  ------------------
 2149|  55.8k|  return ParseHelper(number_to_parse, default_region, true, true, number);
 2150|  55.8k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil21CheckRegionForParsingERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_:
 2158|  50.3k|    const string& default_region) const {
 2159|  50.3k|  if (!IsValidRegionCode(default_region) && !number_to_parse.empty()) {
  ------------------
  |  Branch (2159:7): [True: 12.4k, False: 37.8k]
  |  Branch (2159:45): [True: 12.4k, False: 0]
  ------------------
 2160|  12.4k|    const scoped_ptr<RegExpInput> number(
 2161|  12.4k|        reg_exps_->regexp_factory_->CreateInput(number_to_parse));
 2162|  12.4k|    if (!reg_exps_->plus_chars_pattern_->Consume(number.get())) {
  ------------------
  |  Branch (2162:9): [True: 8.47k, False: 3.97k]
  ------------------
 2163|  8.47k|      return false;
 2164|  8.47k|    }
 2165|  12.4k|  }
 2166|  41.8k|  return true;
 2167|  50.3k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19ExtractPhoneContextERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEm:
 2176|  61.3k|    const size_t index_of_phone_context) const {
 2177|       |  // If no phone-context parameter is present
 2178|  61.3k|  if (index_of_phone_context == std::string::npos) {
  ------------------
  |  Branch (2178:7): [True: 61.3k, False: 0]
  ------------------
 2179|  61.3k|    return absl::nullopt;
 2180|  61.3k|  }
 2181|       |
 2182|      0|  size_t phone_context_start =
 2183|      0|      index_of_phone_context + strlen(kRfc3966PhoneContext);
 2184|       |  // If phone-context parameter is empty
 2185|      0|  if (phone_context_start >= number_to_extract_from.length()) {
  ------------------
  |  Branch (2185:7): [True: 0, False: 0]
  ------------------
 2186|      0|    return "";
 2187|      0|  }
 2188|       |
 2189|      0|  size_t phone_context_end =
 2190|      0|      number_to_extract_from.find(';', phone_context_start);
 2191|       |  // If phone-context is not the last parameter
 2192|      0|  if (phone_context_end != std::string::npos) {
  ------------------
  |  Branch (2192:7): [True: 0, False: 0]
  ------------------
 2193|      0|    return number_to_extract_from.substr(
 2194|      0|        phone_context_start, phone_context_end - phone_context_start);
 2195|      0|  } else {
 2196|      0|    return number_to_extract_from.substr(phone_context_start);
 2197|      0|  }
 2198|      0|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19IsPhoneContextValidEN4absl12lts_202206238optionalINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEE:
 2203|  61.3k|    const absl::optional<string> phone_context) const {
 2204|  61.3k|  if (!phone_context.has_value()) {
  ------------------
  |  Branch (2204:7): [True: 61.3k, False: 0]
  ------------------
 2205|  61.3k|    return true;
 2206|  61.3k|  }
 2207|      0|  if (phone_context.value().empty()) {
  ------------------
  |  Branch (2207:7): [True: 0, False: 0]
  ------------------
 2208|      0|    return false;
 2209|      0|  }
 2210|       |
 2211|       |  // Does phone-context value match pattern of global-number-digits or
 2212|       |  // domainname
 2213|      0|  return reg_exps_->rfc3966_global_number_digits_pattern_->FullMatch(
  ------------------
  |  Branch (2213:10): [True: 0, False: 0]
  ------------------
 2214|      0|      std::string{phone_context.value()}) ||
 2215|      0|      reg_exps_->rfc3966_domainname_pattern_->FullMatch(
  ------------------
  |  Branch (2215:7): [True: 0, False: 0]
  ------------------
 2216|      0|          std::string{phone_context.value()});
 2217|      0|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil29BuildNationalNumberForParsingERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
 2223|  61.3k|    const string& number_to_parse, string* national_number) const {
 2224|  61.3k|  size_t index_of_phone_context = number_to_parse.find(kRfc3966PhoneContext);
 2225|       |
 2226|  61.3k|  absl::optional<string> phone_context =
 2227|  61.3k|      ExtractPhoneContext(number_to_parse, index_of_phone_context);
 2228|  61.3k|  if (!IsPhoneContextValid(phone_context)) {
  ------------------
  |  Branch (2228:7): [True: 0, False: 61.3k]
  ------------------
 2229|      0|    VLOG(2) << "The phone-context value is invalid.";
 2230|      0|    return NOT_A_NUMBER;
 2231|      0|  }
 2232|       |
 2233|  61.3k|  if (phone_context.has_value()) {
  ------------------
  |  Branch (2233:7): [True: 0, False: 61.3k]
  ------------------
 2234|       |    // If the phone context contains a phone number prefix, we need to capture
 2235|       |    // it, whereas domains will be ignored.
 2236|      0|    if (phone_context.value().at(0) == kPlusSign[0]) {
  ------------------
  |  Branch (2236:9): [True: 0, False: 0]
  ------------------
 2237|       |      // Additional parameters might follow the phone context. If so, we will
 2238|       |      // remove them here because the parameters after phone context are not
 2239|       |      // important for parsing the phone number.
 2240|      0|      StrAppend(national_number, phone_context.value());
 2241|      0|    }
 2242|       |
 2243|       |    // Now append everything between the "tel:" prefix and the phone-context.
 2244|       |    // This should include the national number, an optional extension or
 2245|       |    // isdn-subaddress component. Note we also handle the case when "tel:" is
 2246|       |    // missing, as we have seen in some of the phone number inputs. In that
 2247|       |    // case, we append everything from the beginning.
 2248|      0|    size_t index_of_rfc_prefix = number_to_parse.find(kRfc3966Prefix);
 2249|      0|    int index_of_national_number = (index_of_rfc_prefix != string::npos) ?
  ------------------
  |  Branch (2249:36): [True: 0, False: 0]
  ------------------
 2250|      0|        static_cast<int>(index_of_rfc_prefix + strlen(kRfc3966Prefix)) : 0;
 2251|      0|    StrAppend(
 2252|      0|        national_number,
 2253|      0|        number_to_parse.substr(
 2254|      0|            index_of_national_number,
 2255|      0|            index_of_phone_context - index_of_national_number));
 2256|  61.3k|  } else {
 2257|       |    // Extract a possible number from the string passed in (this strips leading
 2258|       |    // characters that could not be the start of a phone number.)
 2259|  61.3k|    ExtractPossibleNumber(number_to_parse, national_number);
 2260|  61.3k|  }
 2261|       |
 2262|       |  // Delete the isdn-subaddress and everything after it if it is present. Note
 2263|       |  // extension won't appear at the same time with isdn-subaddress according to
 2264|       |  // paragraph 5.3 of the RFC3966 spec.
 2265|  61.3k|  size_t index_of_isdn = national_number->find(kRfc3966IsdnSubaddress);
 2266|  61.3k|  if (index_of_isdn != string::npos) {
  ------------------
  |  Branch (2266:7): [True: 0, False: 61.3k]
  ------------------
 2267|      0|    national_number->erase(index_of_isdn);
 2268|      0|  }
 2269|       |  // If both phone context and isdn-subaddress are absent but other parameters
 2270|       |  // are present, the parameters are left in nationalNumber. This is because
 2271|       |  // we are concerned about deleting content from a potential number string
 2272|       |  // when there is no strong evidence that the number is actually written in
 2273|       |  // RFC3966.
 2274|  61.3k|  return NO_PARSING_ERROR;
 2275|  61.3k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil11ParseHelperERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_bbPNS0_11PhoneNumberE:
 2285|  61.3k|    PhoneNumber* phone_number) const {
 2286|  61.3k|  DCHECK(phone_number);
  ------------------
  |  |   29|  61.3k|#define DCHECK(X) assert(X)
  ------------------
 2287|       |
 2288|  61.3k|  string national_number;
 2289|  61.3k|  PhoneNumberUtil::ErrorType build_national_number_for_parsing_return =
 2290|  61.3k|      BuildNationalNumberForParsing(number_to_parse, &national_number);
 2291|  61.3k|  if (build_national_number_for_parsing_return != NO_PARSING_ERROR) {
  ------------------
  |  Branch (2291:7): [True: 0, False: 61.3k]
  ------------------
 2292|      0|    return build_national_number_for_parsing_return;
 2293|      0|  }
 2294|       |
 2295|  61.3k|  if (!IsViablePhoneNumber(national_number)) {
  ------------------
  |  Branch (2295:7): [True: 11.0k, False: 50.3k]
  ------------------
 2296|  11.0k|    VLOG(2) << "The string supplied did not seem to be a phone number.";
 2297|  11.0k|    return NOT_A_NUMBER;
 2298|  11.0k|  }
 2299|       |
 2300|  50.3k|  if (check_region &&
  ------------------
  |  Branch (2300:7): [True: 50.3k, False: 0]
  ------------------
 2301|  50.3k|      !CheckRegionForParsing(national_number, default_region)) {
  ------------------
  |  Branch (2301:7): [True: 8.47k, False: 41.8k]
  ------------------
 2302|  8.47k|    VLOG(1) << "Missing or invalid default country.";
 2303|  8.47k|    return INVALID_COUNTRY_CODE_ERROR;
 2304|  8.47k|  }
 2305|  41.8k|  PhoneNumber temp_number;
 2306|  41.8k|  if (keep_raw_input) {
  ------------------
  |  Branch (2306:7): [True: 39.1k, False: 2.66k]
  ------------------
 2307|  39.1k|    temp_number.set_raw_input(number_to_parse);
 2308|  39.1k|  }
 2309|       |  // Attempt to parse extension first, since it doesn't require country-specific
 2310|       |  // data and we want to have the non-normalised number here.
 2311|  41.8k|  string extension;
 2312|  41.8k|  MaybeStripExtension(&national_number, &extension);
 2313|  41.8k|  if (!extension.empty()) {
  ------------------
  |  Branch (2313:7): [True: 7.74k, False: 34.1k]
  ------------------
 2314|  7.74k|    temp_number.set_extension(extension);
 2315|  7.74k|  }
 2316|  41.8k|  const PhoneMetadata* country_metadata = GetMetadataForRegion(default_region);
 2317|       |  // Check to see if the number is given in international format so we know
 2318|       |  // whether this number is from the default country or not.
 2319|  41.8k|  string normalized_national_number(national_number);
 2320|  41.8k|  ErrorType country_code_error =
 2321|  41.8k|      MaybeExtractCountryCode(country_metadata, keep_raw_input,
 2322|  41.8k|                              &normalized_national_number, &temp_number);
 2323|  41.8k|  if (country_code_error != NO_PARSING_ERROR) {
  ------------------
  |  Branch (2323:7): [True: 1.52k, False: 40.3k]
  ------------------
 2324|  1.52k|    const scoped_ptr<RegExpInput> number_string_piece(
 2325|  1.52k|        reg_exps_->regexp_factory_->CreateInput(national_number));
 2326|  1.52k|    if ((country_code_error == INVALID_COUNTRY_CODE_ERROR) &&
  ------------------
  |  Branch (2326:9): [True: 782, False: 746]
  ------------------
 2327|  1.52k|        (reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get()))) {
  ------------------
  |  Branch (2327:9): [True: 552, False: 230]
  ------------------
 2328|    552|      normalized_national_number.assign(number_string_piece->ToString());
 2329|       |      // Strip the plus-char, and try again.
 2330|    552|      MaybeExtractCountryCode(country_metadata,
 2331|    552|                              keep_raw_input,
 2332|    552|                              &normalized_national_number,
 2333|    552|                              &temp_number);
 2334|    552|      if (temp_number.country_code() == 0) {
  ------------------
  |  Branch (2334:11): [True: 488, False: 64]
  ------------------
 2335|    488|        return INVALID_COUNTRY_CODE_ERROR;
 2336|    488|      }
 2337|    976|    } else {
 2338|    976|      return country_code_error;
 2339|    976|    }
 2340|  1.52k|  }
 2341|  40.3k|  int country_code = temp_number.country_code();
 2342|  40.3k|  if (country_code != 0) {
  ------------------
  |  Branch (2342:7): [True: 7.85k, False: 32.5k]
  ------------------
 2343|  7.85k|    string phone_number_region;
 2344|  7.85k|    GetRegionCodeForCountryCode(country_code, &phone_number_region);
 2345|  7.85k|    if (phone_number_region != default_region) {
  ------------------
  |  Branch (2345:9): [True: 6.95k, False: 903]
  ------------------
 2346|  6.95k|      country_metadata =
 2347|  6.95k|          GetMetadataForRegionOrCallingCode(country_code, phone_number_region);
 2348|  6.95k|    }
 2349|  32.5k|  } else if (country_metadata) {
  ------------------
  |  Branch (2349:14): [True: 32.5k, False: 0]
  ------------------
 2350|       |    // If no extracted country calling code, use the region supplied instead.
 2351|       |    // Note that the national number was already normalized by
 2352|       |    // MaybeExtractCountryCode.
 2353|  32.5k|    country_code = country_metadata->country_code();
 2354|  32.5k|  }
 2355|  40.3k|  if (normalized_national_number.length() < kMinLengthForNsn) {
  ------------------
  |  Branch (2355:7): [True: 653, False: 39.7k]
  ------------------
 2356|    653|    VLOG(2) << "The string supplied is too short to be a phone number.";
 2357|    653|    return TOO_SHORT_NSN;
 2358|    653|  }
 2359|  39.7k|  if (country_metadata) {
  ------------------
  |  Branch (2359:7): [True: 39.6k, False: 70]
  ------------------
 2360|  39.6k|    string carrier_code;
 2361|  39.6k|    string potential_national_number(normalized_national_number);
 2362|  39.6k|    MaybeStripNationalPrefixAndCarrierCode(*country_metadata,
 2363|  39.6k|                                           &potential_national_number,
 2364|  39.6k|                                           &carrier_code);
 2365|       |    // We require that the NSN remaining after stripping the national prefix
 2366|       |    // and carrier code be long enough to be a possible length for the region.
 2367|       |    // Otherwise, we don't do the stripping, since the original number could be
 2368|       |    // a valid short number.
 2369|  39.6k|    ValidationResult validation_result =
 2370|  39.6k|        TestNumberLength(potential_national_number, *country_metadata);
 2371|  39.6k|    if (validation_result != TOO_SHORT &&
  ------------------
  |  Branch (2371:9): [True: 29.9k, False: 9.74k]
  ------------------
 2372|  39.6k|        validation_result != IS_POSSIBLE_LOCAL_ONLY &&
  ------------------
  |  Branch (2372:9): [True: 27.7k, False: 2.16k]
  ------------------
 2373|  39.6k|        validation_result != INVALID_LENGTH) {
  ------------------
  |  Branch (2373:9): [True: 27.5k, False: 260]
  ------------------
 2374|  27.5k|      normalized_national_number.assign(potential_national_number);
 2375|  27.5k|      if (keep_raw_input && !carrier_code.empty()) {
  ------------------
  |  Branch (2375:11): [True: 26.0k, False: 1.44k]
  |  Branch (2375:29): [True: 279, False: 25.7k]
  ------------------
 2376|    279|        temp_number.set_preferred_domestic_carrier_code(carrier_code);
 2377|    279|      }
 2378|  27.5k|    }
 2379|  39.6k|  }
 2380|  39.7k|  size_t normalized_national_number_length =
 2381|  39.7k|      normalized_national_number.length();
 2382|  39.7k|  if (normalized_national_number_length < kMinLengthForNsn) {
  ------------------
  |  Branch (2382:7): [True: 0, False: 39.7k]
  ------------------
 2383|      0|    VLOG(2) << "The string supplied is too short to be a phone number.";
 2384|      0|    return TOO_SHORT_NSN;
 2385|      0|  }
 2386|  39.7k|  if (normalized_national_number_length > kMaxLengthForNsn) {
  ------------------
  |  Branch (2386:7): [True: 5.99k, False: 33.7k]
  ------------------
 2387|  5.99k|    VLOG(2) << "The string supplied is too long to be a phone number.";
 2388|  5.99k|    return TOO_LONG_NSN;
 2389|  5.99k|  }
 2390|  33.7k|  temp_number.set_country_code(country_code);
 2391|  33.7k|  SetItalianLeadingZerosForPhoneNumber(normalized_national_number,
 2392|  33.7k|      &temp_number);
 2393|  33.7k|  uint64 number_as_int;
 2394|  33.7k|  safe_strtou64(normalized_national_number, &number_as_int);
 2395|  33.7k|  temp_number.set_national_number(number_as_int);
 2396|  33.7k|  phone_number->Swap(&temp_number);
 2397|  33.7k|  return NO_PARSING_ERROR;
 2398|  39.7k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil21ExtractPossibleNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
 2411|  61.3k|                                            string* extracted_number) const {
 2412|  61.3k|  DCHECK(extracted_number);
  ------------------
  |  |   29|  61.3k|#define DCHECK(X) assert(X)
  ------------------
 2413|       |
 2414|  61.3k|  UnicodeText number_as_unicode;
 2415|  61.3k|  number_as_unicode.PointToUTF8(number.data(), static_cast<int>(number.size()));
 2416|  61.3k|  if (!number_as_unicode.UTF8WasValid()) {
  ------------------
  |  Branch (2416:7): [True: 0, False: 61.3k]
  ------------------
 2417|       |    // The input wasn't valid UTF-8. Produce an empty string to indicate an error.
 2418|      0|    extracted_number->clear();
 2419|      0|    return;
 2420|      0|  }
 2421|  61.3k|  char current_char[5];
 2422|  61.3k|  int len;
 2423|  61.3k|  UnicodeText::const_iterator it;
 2424|  90.9k|  for (it = number_as_unicode.begin(); it != number_as_unicode.end(); ++it) {
  ------------------
  |  Branch (2424:40): [True: 90.7k, False: 168]
  ------------------
 2425|  90.7k|    len = it.get_utf8(current_char);
 2426|  90.7k|    current_char[len] = '\0';
 2427|  90.7k|    if (reg_exps_->valid_start_char_pattern_->FullMatch(current_char)) {
  ------------------
  |  Branch (2427:9): [True: 61.2k, False: 29.5k]
  ------------------
 2428|  61.2k|      break;
 2429|  61.2k|    }
 2430|  90.7k|  }
 2431|       |
 2432|  61.3k|  if (it == number_as_unicode.end()) {
  ------------------
  |  Branch (2432:7): [True: 168, False: 61.2k]
  ------------------
 2433|       |    // No valid start character was found. extracted_number should be set to
 2434|       |    // empty string.
 2435|    168|    extracted_number->clear();
 2436|    168|    return;
 2437|    168|  }
 2438|       |
 2439|  61.2k|  extracted_number->assign(
 2440|  61.2k|      UnicodeText::UTF8Substring(it, number_as_unicode.end()));
 2441|  61.2k|  TrimUnwantedEndChars(extracted_number);
 2442|  61.2k|  if (extracted_number->length() == 0) {
  ------------------
  |  Branch (2442:7): [True: 18, False: 61.2k]
  ------------------
 2443|     18|    return;
 2444|     18|  }
 2445|       |
 2446|       |  // Now remove any extra numbers at the end.
 2447|  61.2k|  reg_exps_->capture_up_to_second_number_start_pattern_->
 2448|  61.2k|      PartialMatch(*extracted_number, extracted_number);
 2449|  61.2k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil16IsPossibleNumberERKNS0_11PhoneNumberE:
 2451|  3.97k|bool PhoneNumberUtil::IsPossibleNumber(const PhoneNumber& number) const {
 2452|  3.97k|  ValidationResult result = IsPossibleNumberWithReason(number);
 2453|  3.97k|  return result == IS_POSSIBLE || result == IS_POSSIBLE_LOCAL_ONLY;
  ------------------
  |  Branch (2453:10): [True: 686, False: 3.28k]
  |  Branch (2453:35): [True: 916, False: 2.37k]
  ------------------
 2454|  3.97k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil26IsPossibleNumberWithReasonERKNS0_11PhoneNumberE:
 2474|  3.97k|    const PhoneNumber& number) const {
 2475|  3.97k|  return IsPossibleNumberForTypeWithReason(number, PhoneNumberUtil::UNKNOWN);
 2476|  3.97k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil33IsPossibleNumberForTypeWithReasonERKNS0_11PhoneNumberENS1_15PhoneNumberTypeE:
 2480|  3.97k|                                                   PhoneNumberType type) const {
 2481|  3.97k|  string national_number;
 2482|  3.97k|  GetNationalSignificantNumber(number, &national_number);
 2483|  3.97k|  int country_code = number.country_code();
 2484|       |  // Note: For regions that share a country calling code, like NANPA numbers, we
 2485|       |  // just use the rules from the default region (US in this case) since the
 2486|       |  // GetRegionCodeForNumber will not work if the number is possible but not
 2487|       |  // valid. There is in fact one country calling code (290) where the possible
 2488|       |  // number pattern differs between various regions (Saint Helena and Tristan da
 2489|       |  // Cuñha), but this is handled by putting all possible lengths for any country
 2490|       |  // with this country calling code in the metadata for the default region in
 2491|       |  // this case.
 2492|  3.97k|  if (!HasValidCountryCallingCode(country_code)) {
  ------------------
  |  Branch (2492:7): [True: 0, False: 3.97k]
  ------------------
 2493|      0|    return INVALID_COUNTRY_CODE;
 2494|      0|  }
 2495|  3.97k|  string region_code;
 2496|  3.97k|  GetRegionCodeForCountryCode(country_code, &region_code);
 2497|       |  // Metadata cannot be NULL because the country calling code is valid.
 2498|  3.97k|  const PhoneMetadata* metadata =
 2499|  3.97k|      GetMetadataForRegionOrCallingCode(country_code, region_code);
 2500|  3.97k|  return TestNumberLength(national_number, *metadata, type);
 2501|  3.97k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil13IsValidNumberERKNS0_11PhoneNumberE:
 2535|  27.4k|bool PhoneNumberUtil::IsValidNumber(const PhoneNumber& number) const {
 2536|  27.4k|  string region_code;
 2537|  27.4k|  GetRegionCodeForNumber(number, &region_code);
 2538|  27.4k|  return IsValidNumberForRegion(number, region_code);
 2539|  27.4k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil22IsValidNumberForRegionERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 2542|  27.4k|                                             const string& region_code) const {
 2543|  27.4k|  int country_code = number.country_code();
 2544|  27.4k|  const PhoneMetadata* metadata =
 2545|  27.4k|      GetMetadataForRegionOrCallingCode(country_code, region_code);
 2546|  27.4k|  if (!metadata ||
  ------------------
  |  Branch (2546:7): [True: 2.14k, False: 25.2k]
  ------------------
 2547|  27.4k|      ((kRegionCodeForNonGeoEntity != region_code) &&
  ------------------
  |  Branch (2547:8): [True: 24.9k, False: 378]
  ------------------
 2548|  25.2k|       country_code != GetCountryCodeForValidRegion(region_code))) {
  ------------------
  |  Branch (2548:8): [True: 0, False: 24.9k]
  ------------------
 2549|       |    // Either the region code was invalid, or the country calling code for this
 2550|       |    // number does not match that of the region code.
 2551|  2.14k|    return false;
 2552|  2.14k|  }
 2553|  25.2k|  string national_number;
 2554|  25.2k|  GetNationalSignificantNumber(number, &national_number);
 2555|       |
 2556|  25.2k|  return GetNumberTypeHelper(national_number, *metadata) != UNKNOWN;
 2557|  27.4k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil36SetItalianLeadingZerosForPhoneNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS0_11PhoneNumberE:
 2577|  33.7k|    const string& national_number, PhoneNumber* phone_number) const {
 2578|  33.7k|  if (national_number.length() > 1 && national_number[0] == '0') {
  ------------------
  |  Branch (2578:7): [True: 33.7k, False: 0]
  |  Branch (2578:39): [True: 3.55k, False: 30.1k]
  ------------------
 2579|  3.55k|    phone_number->set_italian_leading_zero(true);
 2580|  3.55k|    size_t number_of_leading_zeros = 1;
 2581|       |    // Note that if the national number is all "0"s, the last "0" is not
 2582|       |    // counted as a leading zero.
 2583|  6.45k|    while (number_of_leading_zeros < national_number.length() - 1 &&
  ------------------
  |  Branch (2583:12): [True: 5.37k, False: 1.07k]
  ------------------
 2584|  6.45k|        national_number[number_of_leading_zeros] == '0') {
  ------------------
  |  Branch (2584:9): [True: 2.89k, False: 2.47k]
  ------------------
 2585|  2.89k|      number_of_leading_zeros++;
 2586|  2.89k|    }
 2587|  3.55k|    if (number_of_leading_zeros != 1) {
  ------------------
  |  Branch (2587:9): [True: 878, False: 2.67k]
  ------------------
 2588|    878|      phone_number->set_number_of_leading_zeros(static_cast<int32_t>(number_of_leading_zeros));
 2589|    878|    }
 2590|  3.55k|  }
 2591|  33.7k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20IsNumberMatchingDescERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_15PhoneNumberDescE:
 2594|   170k|    const string& national_number, const PhoneNumberDesc& number_desc) const {
 2595|       |  // Check if any possible number lengths are present; if so, we use them to
 2596|       |  // avoid checking the validation pattern if they don't match. If they are
 2597|       |  // absent, this means they match the general description, which we have
 2598|       |  // already checked before checking a specific number type.
 2599|   170k|  int actual_length = static_cast<int>(national_number.length());
 2600|   170k|  if (number_desc.possible_length_size() > 0 &&
  ------------------
  |  Branch (2600:7): [True: 157k, False: 12.9k]
  ------------------
 2601|   170k|      std::find(number_desc.possible_length().begin(),
  ------------------
  |  Branch (2601:7): [True: 108k, False: 48.5k]
  ------------------
 2602|   157k|                number_desc.possible_length().end(),
 2603|   157k|                actual_length) == number_desc.possible_length().end()) {
 2604|   108k|    return false;
 2605|   108k|  }
 2606|  61.5k|  return IsMatch(*matcher_api_, national_number, number_desc);
 2607|   170k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19GetNumberTypeHelperERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_13PhoneMetadataE:
 2610|  30.7k|    const string& national_number, const PhoneMetadata& metadata) const {
 2611|  30.7k|  if (!IsNumberMatchingDesc(national_number, metadata.general_desc())) {
  ------------------
  |  Branch (2611:7): [True: 15.9k, False: 14.7k]
  ------------------
 2612|  15.9k|    VLOG(4) << "Number type unknown - doesn't match general national number"
 2613|  15.9k|            << " pattern.";
 2614|  15.9k|    return PhoneNumberUtil::UNKNOWN;
 2615|  15.9k|  }
 2616|  14.7k|  if (IsNumberMatchingDesc(national_number, metadata.premium_rate())) {
  ------------------
  |  Branch (2616:7): [True: 147, False: 14.6k]
  ------------------
 2617|    147|    VLOG(4) << "Number is a premium number.";
 2618|    147|    return PhoneNumberUtil::PREMIUM_RATE;
 2619|    147|  }
 2620|  14.6k|  if (IsNumberMatchingDesc(national_number, metadata.toll_free())) {
  ------------------
  |  Branch (2620:7): [True: 245, False: 14.3k]
  ------------------
 2621|    245|    VLOG(4) << "Number is a toll-free number.";
 2622|    245|    return PhoneNumberUtil::TOLL_FREE;
 2623|    245|  }
 2624|  14.3k|  if (IsNumberMatchingDesc(national_number, metadata.shared_cost())) {
  ------------------
  |  Branch (2624:7): [True: 68, False: 14.2k]
  ------------------
 2625|     68|    VLOG(4) << "Number is a shared cost number.";
 2626|     68|    return PhoneNumberUtil::SHARED_COST;
 2627|     68|  }
 2628|  14.2k|  if (IsNumberMatchingDesc(national_number, metadata.voip())) {
  ------------------
  |  Branch (2628:7): [True: 458, False: 13.8k]
  ------------------
 2629|    458|    VLOG(4) << "Number is a VOIP (Voice over IP) number.";
 2630|    458|    return PhoneNumberUtil::VOIP;
 2631|    458|  }
 2632|  13.8k|  if (IsNumberMatchingDesc(national_number, metadata.personal_number())) {
  ------------------
  |  Branch (2632:7): [True: 81, False: 13.7k]
  ------------------
 2633|     81|    VLOG(4) << "Number is a personal number.";
 2634|     81|    return PhoneNumberUtil::PERSONAL_NUMBER;
 2635|     81|  }
 2636|  13.7k|  if (IsNumberMatchingDesc(national_number, metadata.pager())) {
  ------------------
  |  Branch (2636:7): [True: 53, False: 13.6k]
  ------------------
 2637|     53|    VLOG(4) << "Number is a pager number.";
 2638|     53|    return PhoneNumberUtil::PAGER;
 2639|     53|  }
 2640|  13.6k|  if (IsNumberMatchingDesc(national_number, metadata.uan())) {
  ------------------
  |  Branch (2640:7): [True: 130, False: 13.5k]
  ------------------
 2641|    130|    VLOG(4) << "Number is a UAN.";
 2642|    130|    return PhoneNumberUtil::UAN;
 2643|    130|  }
 2644|  13.5k|  if (IsNumberMatchingDesc(national_number, metadata.voicemail())) {
  ------------------
  |  Branch (2644:7): [True: 46, False: 13.5k]
  ------------------
 2645|     46|    VLOG(4) << "Number is a voicemail number.";
 2646|     46|    return PhoneNumberUtil::VOICEMAIL;
 2647|     46|  }
 2648|       |
 2649|  13.5k|  bool is_fixed_line =
 2650|  13.5k|      IsNumberMatchingDesc(national_number, metadata.fixed_line());
 2651|  13.5k|  if (is_fixed_line) {
  ------------------
  |  Branch (2651:7): [True: 11.7k, False: 1.73k]
  ------------------
 2652|  11.7k|    if (metadata.same_mobile_and_fixed_line_pattern()) {
  ------------------
  |  Branch (2652:9): [True: 89, False: 11.6k]
  ------------------
 2653|     89|      VLOG(4) << "Fixed-line and mobile patterns equal, number is fixed-line"
 2654|     89|              << " or mobile";
 2655|     89|      return PhoneNumberUtil::FIXED_LINE_OR_MOBILE;
 2656|  11.6k|    } else if (IsNumberMatchingDesc(national_number, metadata.mobile())) {
  ------------------
  |  Branch (2656:16): [True: 23, False: 11.6k]
  ------------------
 2657|     23|      VLOG(4) << "Fixed-line and mobile patterns differ, but number is "
 2658|     23|              << "still fixed-line or mobile";
 2659|     23|      return PhoneNumberUtil::FIXED_LINE_OR_MOBILE;
 2660|     23|    }
 2661|  11.6k|    VLOG(4) << "Number is a fixed line number.";
 2662|  11.6k|    return PhoneNumberUtil::FIXED_LINE;
 2663|  11.7k|  }
 2664|       |  // Otherwise, test to see if the number is mobile. Only do this if certain
 2665|       |  // that the patterns for mobile and fixed line aren't the same.
 2666|  1.73k|  if (!metadata.same_mobile_and_fixed_line_pattern() &&
  ------------------
  |  Branch (2666:7): [True: 1.39k, False: 346]
  ------------------
 2667|  1.73k|      IsNumberMatchingDesc(national_number, metadata.mobile())) {
  ------------------
  |  Branch (2667:7): [True: 297, False: 1.09k]
  ------------------
 2668|    297|    VLOG(4) << "Number is a mobile number.";
 2669|    297|    return PhoneNumberUtil::MOBILE;
 2670|    297|  }
 2671|  1.44k|  VLOG(4) << "Number type unknown - doesn\'t match any specific number type"
 2672|  1.44k|          << " pattern.";
 2673|  1.44k|  return PhoneNumberUtil::UNKNOWN;
 2674|  1.73k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil28GetNationalSignificantNumberERKNS0_11PhoneNumberEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 2678|  75.9k|    string* national_number) const {
 2679|  75.9k|  DCHECK(national_number);
  ------------------
  |  |   29|  75.9k|#define DCHECK(X) assert(X)
  ------------------
 2680|       |  // If leading zero(s) have been set, we prefix this now. Note this is not a
 2681|       |  // national prefix. Ensure the number of leading zeros is at least 0 so we
 2682|       |  // don't crash in the case of malicious input.
 2683|  75.9k|  StrAppend(national_number, number.italian_leading_zero() ?
  ------------------
  |  Branch (2683:30): [True: 3.85k, False: 72.0k]
  ------------------
 2684|  72.0k|      string(std::max(number.number_of_leading_zeros(), 0), '0') : "");
 2685|  75.9k|  StrAppend(national_number, number.national_number());
 2686|  75.9k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19NormalizeDigitsOnlyEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 2782|  48.7k|void PhoneNumberUtil::NormalizeDigitsOnly(string* number) const {
 2783|  48.7k|  DCHECK(number);
  ------------------
  |  |   29|  48.7k|#define DCHECK(X) assert(X)
  ------------------
 2784|  48.7k|  const RegExp& non_digits_pattern = reg_exps_->regexp_cache_->GetRegExp(
 2785|  48.7k|      StrCat("[^", kDigits, "]"));
 2786|       |  // Delete everything that isn't valid digits.
 2787|  48.7k|  non_digits_pattern.GlobalReplace(number, "");
 2788|       |  // Normalize all decimal digits to ASCII digits.
 2789|  48.7k|  number->assign(NormalizeUTF8::NormalizeDecimalDigits(*number));
 2790|  48.7k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil9NormalizeEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 2827|  42.4k|void PhoneNumberUtil::Normalize(string* number) const {
 2828|  42.4k|  DCHECK(number);
  ------------------
  |  |   29|  42.4k|#define DCHECK(X) assert(X)
  ------------------
 2829|  42.4k|  if (reg_exps_->valid_alpha_phone_pattern_->PartialMatch(*number)) {
  ------------------
  |  Branch (2829:7): [True: 1.85k, False: 40.5k]
  ------------------
 2830|  1.85k|    NormalizeHelper(reg_exps_->alpha_phone_mappings_, true, number);
 2831|  1.85k|  }
 2832|  42.4k|  NormalizeDigitsOnly(number);
 2833|  42.4k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19IsViablePhoneNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 2841|  70.4k|bool PhoneNumberUtil::IsViablePhoneNumber(const string& number) const {
 2842|  70.4k|  if (number.length() < kMinLengthForNsn) {
  ------------------
  |  Branch (2842:7): [True: 8.25k, False: 62.1k]
  ------------------
 2843|  8.25k|    return false;
 2844|  8.25k|  }
 2845|  62.1k|  return reg_exps_->valid_phone_number_pattern_->FullMatch(number);
 2846|  70.4k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil16ParsePrefixAsIddERKNS0_6RegExpEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 2851|  37.0k|                                       string* number) const {
 2852|  37.0k|  DCHECK(number);
  ------------------
  |  |   29|  37.0k|#define DCHECK(X) assert(X)
  ------------------
 2853|  37.0k|  const scoped_ptr<RegExpInput> number_copy(
 2854|  37.0k|      reg_exps_->regexp_factory_->CreateInput(*number));
 2855|       |  // First attempt to strip the idd_pattern at the start, if present. We make a
 2856|       |  // copy so that we can revert to the original string if necessary.
 2857|  37.0k|  if (idd_pattern.Consume(number_copy.get())) {
  ------------------
  |  Branch (2857:7): [True: 3.00k, False: 34.0k]
  ------------------
 2858|       |    // Only strip this if the first digit after the match is not a 0, since
 2859|       |    // country calling codes cannot begin with 0.
 2860|  3.00k|    string extracted_digit;
 2861|  3.00k|    if (reg_exps_->capturing_digit_pattern_->PartialMatch(
  ------------------
  |  Branch (2861:9): [True: 2.71k, False: 290]
  ------------------
 2862|  3.00k|            number_copy->ToString(), &extracted_digit)) {
 2863|  2.71k|      NormalizeDigitsOnly(&extracted_digit);
 2864|  2.71k|      if (extracted_digit == "0") {
  ------------------
  |  Branch (2864:11): [True: 431, False: 2.28k]
  ------------------
 2865|    431|        return false;
 2866|    431|      }
 2867|  2.71k|    }
 2868|  2.57k|    number->assign(number_copy->ToString());
 2869|  2.57k|    return true;
 2870|  3.00k|  }
 2871|  34.0k|  return false;
 2872|  37.0k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil41MaybeStripInternationalPrefixAndNormalizeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
 2886|  42.4k|    string* number) const {
 2887|  42.4k|  DCHECK(number);
  ------------------
  |  |   29|  42.4k|#define DCHECK(X) assert(X)
  ------------------
 2888|  42.4k|  if (number->empty()) {
  ------------------
  |  Branch (2888:7): [True: 0, False: 42.4k]
  ------------------
 2889|      0|    return PhoneNumber::FROM_DEFAULT_COUNTRY;
 2890|      0|  }
 2891|  42.4k|  const scoped_ptr<RegExpInput> number_string_piece(
 2892|  42.4k|      reg_exps_->regexp_factory_->CreateInput(*number));
 2893|  42.4k|  if (reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get())) {
  ------------------
  |  Branch (2893:7): [True: 5.34k, False: 37.0k]
  ------------------
 2894|  5.34k|    number->assign(number_string_piece->ToString());
 2895|       |    // Can now normalize the rest of the number since we've consumed the "+"
 2896|       |    // sign at the start.
 2897|  5.34k|    Normalize(number);
 2898|  5.34k|    return PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN;
 2899|  5.34k|  }
 2900|       |  // Attempt to parse the first digits as an international prefix.
 2901|  37.0k|  const RegExp& idd_pattern =
 2902|  37.0k|      reg_exps_->regexp_cache_->GetRegExp(possible_idd_prefix);
 2903|  37.0k|  Normalize(number);
 2904|  37.0k|  return ParsePrefixAsIdd(idd_pattern, number)
  ------------------
  |  Branch (2904:10): [True: 2.57k, False: 34.4k]
  ------------------
 2905|  37.0k|      ? PhoneNumber::FROM_NUMBER_WITH_IDD
 2906|  37.0k|      : PhoneNumber::FROM_DEFAULT_COUNTRY;
 2907|  42.4k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil38MaybeStripNationalPrefixAndCarrierCodeERKNS0_13PhoneMetadataEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEESC_:
 2917|  43.3k|    string* carrier_code) const {
 2918|  43.3k|  DCHECK(number);
  ------------------
  |  |   29|  43.3k|#define DCHECK(X) assert(X)
  ------------------
 2919|  43.3k|  string carrier_code_temp;
 2920|  43.3k|  const string& possible_national_prefix =
 2921|  43.3k|      metadata.national_prefix_for_parsing();
 2922|  43.3k|  if (number->empty() || possible_national_prefix.empty()) {
  ------------------
  |  Branch (2922:7): [True: 192, False: 43.1k]
  |  Branch (2922:26): [True: 1.92k, False: 41.2k]
  ------------------
 2923|       |    // Early return for numbers of zero length or with no national prefix
 2924|       |    // possible.
 2925|  2.11k|    return false;
 2926|  2.11k|  }
 2927|       |  // We use two copies here since Consume modifies the phone number, and if the
 2928|       |  // first if-clause fails the number will already be changed.
 2929|  41.2k|  const scoped_ptr<RegExpInput> number_copy(
 2930|  41.2k|      reg_exps_->regexp_factory_->CreateInput(*number));
 2931|  41.2k|  const scoped_ptr<RegExpInput> number_copy_without_transform(
 2932|  41.2k|      reg_exps_->regexp_factory_->CreateInput(*number));
 2933|  41.2k|  string number_string_copy(*number);
 2934|  41.2k|  string captured_part_of_prefix;
 2935|  41.2k|  const PhoneNumberDesc& general_desc = metadata.general_desc();
 2936|       |  // Check if the original number is viable.
 2937|  41.2k|  bool is_viable_original_number =
 2938|  41.2k|      IsMatch(*matcher_api_, *number, general_desc);
 2939|       |  // Attempt to parse the first digits as a national prefix. We make a
 2940|       |  // copy so that we can revert to the original string if necessary.
 2941|  41.2k|  const string& transform_rule = metadata.national_prefix_transform_rule();
 2942|  41.2k|  const RegExp& possible_national_prefix_pattern =
 2943|  41.2k|      reg_exps_->regexp_cache_->GetRegExp(possible_national_prefix);
 2944|  41.2k|  if (!transform_rule.empty() &&
  ------------------
  |  Branch (2944:7): [True: 6.98k, False: 34.2k]
  ------------------
 2945|  41.2k|      (possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2945:8): [True: 178, False: 6.81k]
  ------------------
 2946|  6.98k|          number_copy.get(), &carrier_code_temp, &captured_part_of_prefix) ||
 2947|  6.98k|       possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2947:8): [True: 1.65k, False: 5.16k]
  ------------------
 2948|  6.81k|           number_copy.get(), &captured_part_of_prefix)) &&
 2949|  41.2k|      !captured_part_of_prefix.empty()) {
  ------------------
  |  Branch (2949:7): [True: 336, False: 1.49k]
  ------------------
 2950|       |    // If this succeeded, then we must have had a transform rule and there must
 2951|       |    // have been some part of the prefix that we captured.
 2952|       |    // We make the transformation and check that the resultant number is still
 2953|       |    // viable. If so, replace the number and return.
 2954|    336|    possible_national_prefix_pattern.Replace(&number_string_copy,
 2955|    336|                                             transform_rule);
 2956|    336|    if (is_viable_original_number &&
  ------------------
  |  Branch (2956:9): [True: 35, False: 301]
  ------------------
 2957|    336|        !IsMatch(*matcher_api_, number_string_copy, general_desc)) {
  ------------------
  |  Branch (2957:9): [True: 35, False: 0]
  ------------------
 2958|     35|      return false;
 2959|     35|    }
 2960|    301|    number->assign(number_string_copy);
 2961|    301|    if (carrier_code) {
  ------------------
  |  Branch (2961:9): [True: 245, False: 56]
  ------------------
 2962|    245|      carrier_code->assign(carrier_code_temp);
 2963|    245|    }
 2964|  40.9k|  } else if (possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2964:14): [True: 1.60k, False: 39.3k]
  ------------------
 2965|  40.9k|                 number_copy_without_transform.get(), &carrier_code_temp) ||
 2966|  40.9k|             possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2966:14): [True: 1.99k, False: 37.3k]
  ------------------
 2967|  39.3k|                 number_copy_without_transform.get())) {
 2968|  3.60k|    VLOG(4) << "Parsed the first digits as a national prefix.";
 2969|       |    // If captured_part_of_prefix is empty, this implies nothing was captured by
 2970|       |    // the capturing groups in possible_national_prefix; therefore, no
 2971|       |    // transformation is necessary, and we just remove the national prefix.
 2972|  3.60k|    const string number_copy_as_string =
 2973|  3.60k|        number_copy_without_transform->ToString();
 2974|  3.60k|    if (is_viable_original_number &&
  ------------------
  |  Branch (2974:9): [True: 171, False: 3.43k]
  ------------------
 2975|  3.60k|        !IsMatch(*matcher_api_, number_copy_as_string, general_desc)) {
  ------------------
  |  Branch (2975:9): [True: 141, False: 30]
  ------------------
 2976|    141|      return false;
 2977|    141|    }
 2978|  3.46k|    number->assign(number_copy_as_string);
 2979|  3.46k|    if (carrier_code) {
  ------------------
  |  Branch (2979:9): [True: 2.96k, False: 499]
  ------------------
 2980|  2.96k|      carrier_code->assign(carrier_code_temp);
 2981|  2.96k|    }
 2982|  37.3k|  } else {
 2983|  37.3k|    return false;
 2984|      0|    VLOG(4) << "The first digits did not match the national prefix.";
 2985|      0|  }
 2986|  3.76k|  return true;
 2987|  41.2k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19MaybeStripExtensionEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEES9_:
 2993|  41.8k|    const {
 2994|  41.8k|  DCHECK(number);
  ------------------
  |  |   29|  41.8k|#define DCHECK(X) assert(X)
  ------------------
 2995|  41.8k|  DCHECK(extension);
  ------------------
  |  |   29|  41.8k|#define DCHECK(X) assert(X)
  ------------------
 2996|       |  // There are six extension capturing groups in the regular expression.
 2997|  41.8k|  string possible_extension_one;
 2998|  41.8k|  string possible_extension_two;
 2999|  41.8k|  string possible_extension_three;
 3000|  41.8k|  string possible_extension_four;
 3001|  41.8k|  string possible_extension_five;
 3002|  41.8k|  string possible_extension_six;
 3003|  41.8k|  string number_copy(*number);
 3004|  41.8k|  const scoped_ptr<RegExpInput> number_copy_as_regexp_input(
 3005|  41.8k|      reg_exps_->regexp_factory_->CreateInput(number_copy));
 3006|  41.8k|  if (reg_exps_->extn_pattern_->Consume(
  ------------------
  |  Branch (3006:7): [True: 9.05k, False: 32.8k]
  ------------------
 3007|  41.8k|          number_copy_as_regexp_input.get(), false, &possible_extension_one,
 3008|  41.8k|          &possible_extension_two, &possible_extension_three,
 3009|  41.8k|          &possible_extension_four, &possible_extension_five,
 3010|  41.8k|          &possible_extension_six)) {
 3011|       |    // Replace the extensions in the original string here.
 3012|  9.05k|    reg_exps_->extn_pattern_->Replace(&number_copy, "");
 3013|       |    // If we find a potential extension, and the number preceding this is a
 3014|       |    // viable number, we assume it is an extension.
 3015|  9.05k|    if ((!possible_extension_one.empty() || !possible_extension_two.empty() ||
  ------------------
  |  Branch (3015:10): [True: 0, False: 9.05k]
  |  Branch (3015:45): [True: 332, False: 8.72k]
  ------------------
 3016|  9.05k|         !possible_extension_three.empty() ||
  ------------------
  |  Branch (3016:10): [True: 8.61k, False: 113]
  ------------------
 3017|  9.05k|         !possible_extension_four.empty() || !possible_extension_five.empty() ||
  ------------------
  |  Branch (3017:10): [True: 113, False: 0]
  |  Branch (3017:46): [True: 0, False: 0]
  ------------------
 3018|  9.05k|         !possible_extension_six.empty()) &&
  ------------------
  |  Branch (3018:10): [True: 0, False: 0]
  ------------------
 3019|  9.05k|        IsViablePhoneNumber(number_copy)) {
  ------------------
  |  Branch (3019:9): [True: 7.74k, False: 1.30k]
  ------------------
 3020|  7.74k|      number->assign(number_copy);
 3021|  7.74k|      if (!possible_extension_one.empty()) {
  ------------------
  |  Branch (3021:11): [True: 0, False: 7.74k]
  ------------------
 3022|      0|        extension->assign(possible_extension_one);
 3023|  7.74k|      } else if (!possible_extension_two.empty()) {
  ------------------
  |  Branch (3023:18): [True: 332, False: 7.41k]
  ------------------
 3024|    332|        extension->assign(possible_extension_two);
 3025|  7.41k|      } else if (!possible_extension_three.empty()) {
  ------------------
  |  Branch (3025:18): [True: 7.30k, False: 113]
  ------------------
 3026|  7.30k|        extension->assign(possible_extension_three);
 3027|  7.30k|      } else if (!possible_extension_four.empty()) {
  ------------------
  |  Branch (3027:18): [True: 113, False: 0]
  ------------------
 3028|    113|        extension->assign(possible_extension_four);
 3029|    113|      } else if (!possible_extension_five.empty()) {
  ------------------
  |  Branch (3029:18): [True: 0, False: 0]
  ------------------
 3030|      0|        extension->assign(possible_extension_five);
 3031|      0|      } else if (!possible_extension_six.empty()) {
  ------------------
  |  Branch (3031:18): [True: 0, False: 0]
  ------------------
 3032|      0|        extension->assign(possible_extension_six);
 3033|      0|      }
 3034|  7.74k|      return true;
 3035|  7.74k|    }
 3036|  9.05k|  }
 3037|  34.1k|  return false;
 3038|  41.8k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil18ExtractCountryCodeEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 3045|  7.16k|int PhoneNumberUtil::ExtractCountryCode(string* national_number) const {
 3046|  7.16k|  int potential_country_code;
 3047|  7.16k|  if (national_number->empty() || (national_number->at(0) == '0')) {
  ------------------
  |  Branch (3047:7): [True: 0, False: 7.16k]
  |  Branch (3047:35): [True: 233, False: 6.93k]
  ------------------
 3048|       |    // Country codes do not begin with a '0'.
 3049|    233|    return 0;
 3050|    233|  }
 3051|  15.6k|  for (size_t i = 1; i <= kMaxLengthCountryCode; ++i) {
  ------------------
  |  Branch (3051:22): [True: 15.1k, False: 549]
  ------------------
 3052|  15.1k|    safe_strto32(national_number->substr(0, i), &potential_country_code);
 3053|  15.1k|    string region_code;
 3054|  15.1k|    GetRegionCodeForCountryCode(potential_country_code, &region_code);
 3055|  15.1k|    if (region_code != RegionCode::GetUnknown()) {
  ------------------
  |  Branch (3055:9): [True: 6.38k, False: 8.76k]
  ------------------
 3056|  6.38k|      national_number->erase(0, i);
 3057|  6.38k|      return potential_country_code;
 3058|  6.38k|    }
 3059|  15.1k|  }
 3060|    549|  return 0;
 3061|  6.93k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil23MaybeExtractCountryCodeEPKNS0_13PhoneMetadataEbPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEPNS0_11PhoneNumberE:
 3087|  42.4k|    PhoneNumber* phone_number) const {
 3088|  42.4k|  DCHECK(national_number);
  ------------------
  |  |   29|  42.4k|#define DCHECK(X) assert(X)
  ------------------
 3089|  42.4k|  DCHECK(phone_number);
  ------------------
  |  |   29|  42.4k|#define DCHECK(X) assert(X)
  ------------------
 3090|       |  // Set the default prefix to be something that will never match if there is no
 3091|       |  // default region.
 3092|  42.4k|  string possible_country_idd_prefix = default_region_metadata
  ------------------
  |  Branch (3092:40): [True: 38.1k, False: 4.24k]
  ------------------
 3093|  42.4k|      ?  default_region_metadata->international_prefix()
 3094|  42.4k|      : "NonMatch";
 3095|  42.4k|  PhoneNumber::CountryCodeSource country_code_source =
 3096|  42.4k|      MaybeStripInternationalPrefixAndNormalize(possible_country_idd_prefix,
 3097|  42.4k|                                                national_number);
 3098|  42.4k|  if (keep_raw_input) {
  ------------------
  |  Branch (3098:7): [True: 39.7k, False: 2.66k]
  ------------------
 3099|  39.7k|    phone_number->set_country_code_source(country_code_source);
 3100|  39.7k|  }
 3101|  42.4k|  if (country_code_source != PhoneNumber::FROM_DEFAULT_COUNTRY) {
  ------------------
  |  Branch (3101:7): [True: 7.91k, False: 34.4k]
  ------------------
 3102|  7.91k|    if (national_number->length() <= kMinLengthForNsn) {
  ------------------
  |  Branch (3102:9): [True: 754, False: 7.16k]
  ------------------
 3103|    754|      VLOG(2) << "Phone number had an IDD, but after this was not "
 3104|    754|              << "long enough to be a viable phone number.";
 3105|    754|      return TOO_SHORT_AFTER_IDD;
 3106|    754|    }
 3107|  7.16k|    int potential_country_code = ExtractCountryCode(national_number);
 3108|  7.16k|    if (potential_country_code != 0) {
  ------------------
  |  Branch (3108:9): [True: 6.38k, False: 782]
  ------------------
 3109|  6.38k|      phone_number->set_country_code(potential_country_code);
 3110|  6.38k|      return NO_PARSING_ERROR;
 3111|  6.38k|    }
 3112|       |    // If this fails, they must be using a strange country calling code that we
 3113|       |    // don't recognize, or that doesn't exist.
 3114|    782|    return INVALID_COUNTRY_CODE_ERROR;
 3115|  34.4k|  } else if (default_region_metadata) {
  ------------------
  |  Branch (3115:14): [True: 34.2k, False: 270]
  ------------------
 3116|       |    // Check to see if the number starts with the country calling code for the
 3117|       |    // default region. If so, we remove the country calling code, and do some
 3118|       |    // checks on the validity of the number before and after.
 3119|  34.2k|    int default_country_code = default_region_metadata->country_code();
 3120|  34.2k|    string default_country_code_string(SimpleItoa(default_country_code));
 3121|  34.2k|    VLOG(4) << "Possible country calling code: " << default_country_code_string;
 3122|  34.2k|    string potential_national_number;
 3123|  34.2k|    if (TryStripPrefixString(*national_number,
  ------------------
  |  Branch (3123:9): [True: 2.58k, False: 31.6k]
  ------------------
 3124|  34.2k|                             default_country_code_string,
 3125|  34.2k|                             &potential_national_number)) {
 3126|  2.58k|      const PhoneNumberDesc& general_num_desc =
 3127|  2.58k|          default_region_metadata->general_desc();
 3128|  2.58k|      MaybeStripNationalPrefixAndCarrierCode(*default_region_metadata,
 3129|  2.58k|                                             &potential_national_number,
 3130|  2.58k|                                             NULL);
 3131|  2.58k|      VLOG(4) << "Number without country calling code prefix";
 3132|       |      // If the number was not valid before but is valid now, or if it was too
 3133|       |      // long before, we consider the number with the country code stripped to
 3134|       |      // be a better result and keep that instead.
 3135|  2.58k|      if ((!IsMatch(*matcher_api_, *national_number, general_num_desc) &&
  ------------------
  |  Branch (3135:12): [True: 2.40k, False: 184]
  ------------------
 3136|  2.58k|          IsMatch(
  ------------------
  |  Branch (3136:11): [True: 671, False: 1.73k]
  ------------------
 3137|  2.40k|              *matcher_api_, potential_national_number, general_num_desc)) ||
 3138|  2.58k|          TestNumberLength(*national_number, *default_region_metadata) ==
  ------------------
  |  Branch (3138:11): [True: 804, False: 1.11k]
  ------------------
 3139|  1.91k|              TOO_LONG) {
 3140|  1.47k|        national_number->assign(potential_national_number);
 3141|  1.47k|        if (keep_raw_input) {
  ------------------
  |  Branch (3141:13): [True: 1.32k, False: 155]
  ------------------
 3142|  1.32k|          phone_number->set_country_code_source(
 3143|  1.32k|              PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN);
 3144|  1.32k|        }
 3145|  1.47k|        phone_number->set_country_code(default_country_code);
 3146|  1.47k|        return NO_PARSING_ERROR;
 3147|  1.47k|      }
 3148|  2.58k|    }
 3149|  34.2k|  }
 3150|       |  // No country calling code present. Set the country_code to 0.
 3151|  33.0k|  phone_number->set_country_code(0);
 3152|  33.0k|  return NO_PARSING_ERROR;
 3153|  42.4k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil13IsNumberMatchERKNS0_11PhoneNumberES4_:
 3157|  2.68k|    const PhoneNumber& second_number_in) const {
 3158|       |  // We only are about the fields that uniquely define a number, so we copy
 3159|       |  // these across explicitly.
 3160|  2.68k|  PhoneNumber first_number;
 3161|  2.68k|  CopyCoreFieldsOnly(first_number_in, &first_number);
 3162|  2.68k|  PhoneNumber second_number;
 3163|  2.68k|  CopyCoreFieldsOnly(second_number_in, &second_number);
 3164|       |  // Early exit if both had extensions and these are different.
 3165|  2.68k|  if (first_number.has_extension() && second_number.has_extension() &&
  ------------------
  |  Branch (3165:7): [True: 1.39k, False: 1.29k]
  |  Branch (3165:39): [True: 528, False: 865]
  ------------------
 3166|  2.68k|      first_number.extension() != second_number.extension()) {
  ------------------
  |  Branch (3166:7): [True: 39, False: 489]
  ------------------
 3167|     39|    return NO_MATCH;
 3168|     39|  }
 3169|  2.64k|  int first_number_country_code = first_number.country_code();
 3170|  2.64k|  int second_number_country_code = second_number.country_code();
 3171|       |  // Both had country calling code specified.
 3172|  2.64k|  if (first_number_country_code != 0 && second_number_country_code != 0) {
  ------------------
  |  Branch (3172:7): [True: 2.64k, False: 0]
  |  Branch (3172:41): [True: 2.30k, False: 339]
  ------------------
 3173|  2.30k|    if (ExactlySameAs(first_number, second_number)) {
  ------------------
  |  Branch (3173:9): [True: 675, False: 1.63k]
  ------------------
 3174|    675|      return EXACT_MATCH;
 3175|  1.63k|    } else if (first_number_country_code == second_number_country_code &&
  ------------------
  |  Branch (3175:16): [True: 1.47k, False: 158]
  ------------------
 3176|  1.63k|               IsNationalNumberSuffixOfTheOther(first_number, second_number)) {
  ------------------
  |  Branch (3176:16): [True: 748, False: 727]
  ------------------
 3177|       |      // A SHORT_NSN_MATCH occurs if there is a difference because of the
 3178|       |      // presence or absence of an 'Italian leading zero', the presence or
 3179|       |      // absence of an extension, or one NSN being a shorter variant of the
 3180|       |      // other.
 3181|    748|      return SHORT_NSN_MATCH;
 3182|    748|    }
 3183|       |    // This is not a match.
 3184|    885|    return NO_MATCH;
 3185|  2.30k|  }
 3186|       |  // Checks cases where one or both country calling codes were not specified. To
 3187|       |  // make equality checks easier, we first set the country_code fields to be
 3188|       |  // equal.
 3189|    339|  first_number.set_country_code(second_number_country_code);
 3190|       |  // If all else was the same, then this is an NSN_MATCH.
 3191|    339|  if (ExactlySameAs(first_number, second_number)) {
  ------------------
  |  Branch (3191:7): [True: 0, False: 339]
  ------------------
 3192|      0|    return NSN_MATCH;
 3193|      0|  }
 3194|    339|  if (IsNationalNumberSuffixOfTheOther(first_number, second_number)) {
  ------------------
  |  Branch (3194:7): [True: 66, False: 273]
  ------------------
 3195|     66|    return SHORT_NSN_MATCH;
 3196|     66|  }
 3197|    273|  return NO_MATCH;
 3198|    339|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil26IsNumberMatchWithOneStringERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 3235|  2.87k|    const string& second_number) const {
 3236|       |  // First see if the second number has an implicit country calling code, by
 3237|       |  // attempting to parse it.
 3238|  2.87k|  PhoneNumber second_number_as_proto;
 3239|  2.87k|  ErrorType error_type =
 3240|  2.87k|      Parse(second_number, RegionCode::GetUnknown(), &second_number_as_proto);
 3241|  2.87k|  if (error_type == NO_PARSING_ERROR) {
  ------------------
  |  Branch (3241:7): [True: 34, False: 2.84k]
  ------------------
 3242|     34|    return IsNumberMatch(first_number, second_number_as_proto);
 3243|     34|  }
 3244|  2.84k|  if (error_type == INVALID_COUNTRY_CODE_ERROR) {
  ------------------
  |  Branch (3244:7): [True: 2.65k, False: 190]
  ------------------
 3245|       |    // The second number has no country calling code. EXACT_MATCH is no longer
 3246|       |    // possible.  We parse it as if the region was the same as that for the
 3247|       |    // first number, and if EXACT_MATCH is returned, we replace this with
 3248|       |    // NSN_MATCH.
 3249|  2.65k|    string first_number_region;
 3250|  2.65k|    GetRegionCodeForCountryCode(first_number.country_code(),
 3251|  2.65k|                                &first_number_region);
 3252|  2.65k|    if (first_number_region != RegionCode::GetUnknown()) {
  ------------------
  |  Branch (3252:9): [True: 2.65k, False: 0]
  ------------------
 3253|  2.65k|      PhoneNumber second_number_with_first_number_region;
 3254|  2.65k|      Parse(second_number, first_number_region,
 3255|  2.65k|            &second_number_with_first_number_region);
 3256|  2.65k|      MatchType match = IsNumberMatch(first_number,
 3257|  2.65k|                                      second_number_with_first_number_region);
 3258|  2.65k|      if (match == EXACT_MATCH) {
  ------------------
  |  Branch (3258:11): [True: 641, False: 2.01k]
  ------------------
 3259|    641|        return NSN_MATCH;
 3260|    641|      }
 3261|  2.01k|      return match;
 3262|  2.65k|    } else {
 3263|       |      // If the first number didn't have a valid country calling code, then we
 3264|       |      // parse the second number without one as well.
 3265|      0|      error_type = ParseHelper(second_number, RegionCode::GetUnknown(), false,
 3266|      0|                               false, &second_number_as_proto);
 3267|      0|      if (error_type == NO_PARSING_ERROR) {
  ------------------
  |  Branch (3267:11): [True: 0, False: 0]
  ------------------
 3268|      0|        return IsNumberMatch(first_number, second_number_as_proto);
 3269|      0|      }
 3270|      0|    }
 3271|  2.65k|  }
 3272|       |  // One or more of the phone numbers we are trying to match is not a viable
 3273|       |  // phone number.
 3274|    190|  return INVALID_NUMBER;
 3275|  2.84k|}
_ZN4i18n12phonenumbers29PhoneNumberRegExpsAndMappingsC2Ev:
  782|      1|      : valid_phone_number_(
  783|      1|            StrCat(kDigits, "{", PhoneNumberUtil::kMinLengthForNsn, "}|[",
  784|      1|                   PhoneNumberUtil::kPlusChars, "]*(?:[",
  785|      1|                   PhoneNumberUtil::kValidPunctuation, kStarSign, "]*",
  786|      1|                   kDigits, "){3,}[", PhoneNumberUtil::kValidPunctuation,
  787|      1|                   kStarSign, kValidAlpha, kDigits, "]*")),
  788|      1|        extn_patterns_for_parsing_(CreateExtnPattern(/* for_parsing= */ true)),
  789|      1|        rfc3966_phone_digit_(
  790|      1|            StrCat("(", kDigits, "|", kRfc3966VisualSeparator, ")")),
  791|      1|        alphanum_(StrCat(kValidAlphaInclUppercase, kDigits)),
  792|      1|        rfc3966_domainlabel_(
  793|      1|            StrCat("[", alphanum_, "]+((\\-)*[", alphanum_, "])*")),
  794|      1|        rfc3966_toplabel_(StrCat("[", kValidAlphaInclUppercase,
  795|      1|                                 "]+((\\-)*[", alphanum_, "])*")),
  796|      1|        regexp_factory_(new RegExpFactory()),
  797|      1|        regexp_cache_(new RegExpCache(*regexp_factory_.get(), 128)),
  798|      1|        diallable_char_mappings_(),
  799|      1|        alpha_mappings_(),
  800|      1|        alpha_phone_mappings_(),
  801|      1|        all_plus_number_grouping_symbols_(),
  802|      1|        mobile_token_mappings_(),
  803|      1|        countries_without_national_prefix_with_area_codes_(),
  804|      1|        geo_mobile_countries_without_mobile_area_codes_(),
  805|      1|        geo_mobile_countries_(),
  806|      1|        single_international_prefix_(regexp_factory_->CreateRegExp(
  807|       |            /* "[\\d]+(?:[~⁓∼～][\\d]+)?" */
  808|      1|            "[\\d]+(?:[~\xE2\x81\x93\xE2\x88\xBC\xEF\xBD\x9E][\\d]+)?")),
  809|      1|        digits_pattern_(
  810|      1|            regexp_factory_->CreateRegExp(StrCat("[", kDigits, "]*"))),
  811|      1|        capturing_digit_pattern_(
  812|      1|            regexp_factory_->CreateRegExp(StrCat("([", kDigits, "])"))),
  813|      1|        capturing_ascii_digits_pattern_(
  814|      1|            regexp_factory_->CreateRegExp("(\\d+)")),
  815|      1|        valid_start_char_pattern_(regexp_factory_->CreateRegExp(
  816|      1|            StrCat("[", PhoneNumberUtil::kPlusChars, kDigits, "]"))),
  817|      1|        capture_up_to_second_number_start_pattern_(
  818|      1|            regexp_factory_->CreateRegExp(
  819|      1|                PhoneNumberUtil::kCaptureUpToSecondNumberStart)),
  820|      1|        unwanted_end_char_pattern_(
  821|      1|            regexp_factory_->CreateRegExp("[^\\p{N}\\p{L}#]")),
  822|      1|        separator_pattern_(regexp_factory_->CreateRegExp(
  823|      1|            StrCat("[", PhoneNumberUtil::kValidPunctuation, "]+"))),
  824|      1|        extn_patterns_for_matching_(
  825|      1|            CreateExtnPattern(/* for_parsing= */ false)),
  826|      1|        extn_pattern_(regexp_factory_->CreateRegExp(
  827|      1|            StrCat("(?i)(?:", extn_patterns_for_parsing_, ")$"))),
  828|      1|        valid_phone_number_pattern_(regexp_factory_->CreateRegExp(
  829|      1|            StrCat("(?i)", valid_phone_number_,
  830|      1|                   "(?:", extn_patterns_for_parsing_, ")?"))),
  831|      1|        valid_alpha_phone_pattern_(regexp_factory_->CreateRegExp(
  832|      1|            StrCat("(?i)(?:.*?[", kValidAlpha, "]){3}"))),
  833|       |        // The first_group_capturing_pattern was originally set to $1 but there
  834|       |        // are some countries for which the first group is not used in the
  835|       |        // national pattern (e.g. Argentina) so the $1 group does not match
  836|       |        // correctly. Therefore, we use \d, so that the first group actually
  837|       |        // used in the pattern will be matched.
  838|      1|        first_group_capturing_pattern_(
  839|      1|            regexp_factory_->CreateRegExp("(\\$\\d)")),
  840|      1|        carrier_code_pattern_(regexp_factory_->CreateRegExp("\\$CC")),
  841|      1|        plus_chars_pattern_(regexp_factory_->CreateRegExp(
  842|      1|            StrCat("[", PhoneNumberUtil::kPlusChars, "]+"))),
  843|      1|        rfc3966_global_number_digits_pattern_(regexp_factory_->CreateRegExp(
  844|      1|            StrCat("^\\", kPlusSign, rfc3966_phone_digit_, "*", kDigits,
  845|      1|                   rfc3966_phone_digit_, "*$"))),
  846|      1|        rfc3966_domainname_pattern_(regexp_factory_->CreateRegExp(StrCat(
  847|      1|            "^(", rfc3966_domainlabel_, "\\.)*", rfc3966_toplabel_, "\\.?$"))) {
  848|      1|    InitializeMapsAndSets();
  849|      1|  }
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_117CreateExtnPatternEb:
  220|      2|std::string CreateExtnPattern(bool for_parsing) {
  221|       |  // We cap the maximum length of an extension based on the ambiguity of the
  222|       |  // way the extension is prefixed. As per ITU, the officially allowed
  223|       |  // length for extensions is actually 40, but we don't support this since we
  224|       |  // haven't seen real examples and this introduces many false interpretations
  225|       |  // as the extension labels are not standardized.
  226|      2|  int ext_limit_after_explicit_label = 20;
  227|      2|  int ext_limit_after_likely_label = 15;
  228|      2|  int ext_limit_after_ambiguous_char = 9;
  229|      2|  int ext_limit_when_not_sure = 6;
  230|       |
  231|       |  // Canonical-equivalence doesn't seem to be an option with RE2, so we allow
  232|       |  // two options for representing any non-ASCII character like ó - the character
  233|       |  // itself, and one in the unicode decomposed form with the combining acute
  234|       |  // accent.
  235|       |
  236|       |  // Here the extension is called out in a more explicit way, i.e mentioning it
  237|       |  // obvious patterns like "ext.".
  238|      2|  string explicit_ext_labels =
  239|      2|      "(?:e?xt(?:ensi(?:o\xCC\x81?|\xC3\xB3))?n?|(?:\xEF\xBD\x85)?"
  240|      2|      "\xEF\xBD\x98\xEF\xBD\x94(?:\xEF\xBD\x8E)?|\xD0\xB4\xD0\xBE\xD0\xB1|"
  241|      2|      "anexo)";
  242|       |  // One-character symbols that can be used to indicate an extension, and less
  243|       |  // commonly used or more ambiguous extension labels.
  244|      2|  string ambiguous_ext_labels =
  245|      2|      "(?:[x\xEF\xBD\x98#\xEF\xBC\x83~\xEF\xBD\x9E]|int|"
  246|      2|      "\xEF\xBD\x89\xEF\xBD\x8E\xEF\xBD\x94)";
  247|       |  // When extension is not separated clearly.
  248|      2|  string ambiguous_separator = "[- ]+";
  249|       |
  250|      2|  string rfc_extn = StrCat(kRfc3966ExtnPrefix,
  251|      2|                           ExtnDigits(ext_limit_after_explicit_label));
  252|      2|  string explicit_extn = StrCat(
  253|      2|      kPossibleSeparatorsBetweenNumberAndExtLabel,
  254|      2|      explicit_ext_labels, kPossibleCharsAfterExtLabel,
  255|      2|      ExtnDigits(ext_limit_after_explicit_label),
  256|      2|      kOptionalExtSuffix);
  257|      2|  string ambiguous_extn = StrCat(
  258|      2|      kPossibleSeparatorsBetweenNumberAndExtLabel,
  259|      2|      ambiguous_ext_labels, kPossibleCharsAfterExtLabel,
  260|      2|      ExtnDigits(ext_limit_after_ambiguous_char),
  261|      2|      kOptionalExtSuffix);
  262|      2|  string american_style_extn_with_suffix = StrCat(
  263|      2|      ambiguous_separator, ExtnDigits(ext_limit_when_not_sure), "#");
  264|       |
  265|       |  // The first regular expression covers RFC 3966 format, where the extension is
  266|       |  // added using ";ext=". The second more generic where extension is mentioned
  267|       |  // with explicit labels like "ext:". In both the above cases we allow more
  268|       |  // numbers in extension than any other extension labels. The third one
  269|       |  // captures when single character extension labels or less commonly used
  270|       |  // labels are present. In such cases we capture fewer extension digits in
  271|       |  // order to reduce the chance of falsely interpreting two numbers beside each
  272|       |  // other as a number + extension. The fourth one covers the special case of
  273|       |  // American numbers where the extension is written with a hash at the end,
  274|       |  // such as "- 503#".
  275|      2|  string extension_pattern = StrCat(
  276|      2|      rfc_extn, "|",
  277|      2|      explicit_extn, "|",
  278|      2|      ambiguous_extn, "|",
  279|      2|      american_style_extn_with_suffix);
  280|       |  // Additional pattern that is supported when parsing extensions, not when
  281|       |  // matching.
  282|      2|  if (for_parsing) {
  ------------------
  |  Branch (282:7): [True: 1, False: 1]
  ------------------
  283|       |    // ",," is commonly used for auto dialling the extension when connected.
  284|       |    // Semi-colon works in Iphone and also in Android to pop up a button with
  285|       |    // the extension number following.
  286|      1|    string auto_dialling_and_ext_labels_found = "(?:,{2}|;)";
  287|       |    // This is same as kPossibleSeparatorsBetweenNumberAndExtLabel, but not
  288|       |    // matching comma as extension label may have it.
  289|      1|    string possible_separators_number_extLabel_no_comma = "[ \xC2\xA0\\t]*";
  290|       |
  291|      1|    string auto_dialling_extn = StrCat(
  292|      1|      possible_separators_number_extLabel_no_comma,
  293|      1|      auto_dialling_and_ext_labels_found, kPossibleCharsAfterExtLabel,
  294|      1|      ExtnDigits(ext_limit_after_likely_label),
  295|      1|      kOptionalExtSuffix);
  296|      1|    string only_commas_extn = StrCat(
  297|      1|      possible_separators_number_extLabel_no_comma,
  298|      1|      "(?:,)+", kPossibleCharsAfterExtLabel,
  299|      1|      ExtnDigits(ext_limit_after_ambiguous_char),
  300|      1|      kOptionalExtSuffix);
  301|       |    // Here the first pattern is exclusive for extension autodialling formats
  302|       |    // which are used when dialling and in this case we accept longer
  303|       |    // extensions. However, the second pattern is more liberal on number of
  304|       |    // commas that acts as extension labels, so we have strict cap on number of
  305|       |    // digits in such extensions.
  306|      1|    return StrCat(extension_pattern, "|",
  307|      1|                  auto_dialling_extn, "|",
  308|      1|                  only_commas_extn);
  309|      1|  }
  310|      1|  return extension_pattern;
  311|      2|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_110ExtnDigitsEi:
  210|     10|std::string ExtnDigits(int max_length) {
  211|     10|  return StrCat("([", kDigits, "]{1,", max_length, "})");
  212|     10|}
_ZN4i18n12phonenumbers29PhoneNumberRegExpsAndMappings21InitializeMapsAndSetsEv:
  521|      1|  void InitializeMapsAndSets() {
  522|      1|    diallable_char_mappings_.insert(std::make_pair('+', '+'));
  523|      1|    diallable_char_mappings_.insert(std::make_pair('*', '*'));
  524|      1|    diallable_char_mappings_.insert(std::make_pair('#', '#'));
  525|       |    // Here we insert all punctuation symbols that we wish to respect when
  526|       |    // formatting alpha numbers, as they show the intended number groupings.
  527|      1|    all_plus_number_grouping_symbols_.insert(
  528|      1|        std::make_pair(ToUnicodeCodepoint("-"), '-'));
  529|      1|    all_plus_number_grouping_symbols_.insert(
  530|      1|        std::make_pair(ToUnicodeCodepoint("\xEF\xBC\x8D" /* "－" */), '-'));
  531|      1|    all_plus_number_grouping_symbols_.insert(
  532|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x90" /* "‐" */), '-'));
  533|      1|    all_plus_number_grouping_symbols_.insert(
  534|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x91" /* "‑" */), '-'));
  535|      1|    all_plus_number_grouping_symbols_.insert(
  536|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x92" /* "‒" */), '-'));
  537|      1|    all_plus_number_grouping_symbols_.insert(
  538|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x93" /* "–" */), '-'));
  539|      1|    all_plus_number_grouping_symbols_.insert(
  540|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x94" /* "—" */), '-'));
  541|      1|    all_plus_number_grouping_symbols_.insert(
  542|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x95" /* "―" */), '-'));
  543|      1|    all_plus_number_grouping_symbols_.insert(
  544|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x88\x92" /* "−" */), '-'));
  545|      1|    all_plus_number_grouping_symbols_.insert(
  546|      1|        std::make_pair(ToUnicodeCodepoint("/"), '/'));
  547|      1|    all_plus_number_grouping_symbols_.insert(
  548|      1|        std::make_pair(ToUnicodeCodepoint("\xEF\xBC\x8F" /* "／" */), '/'));
  549|      1|    all_plus_number_grouping_symbols_.insert(
  550|      1|        std::make_pair(ToUnicodeCodepoint(" "), ' '));
  551|      1|    all_plus_number_grouping_symbols_.insert(
  552|      1|        std::make_pair(ToUnicodeCodepoint("\xE3\x80\x80" /* "　" */), ' '));
  553|      1|    all_plus_number_grouping_symbols_.insert(
  554|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x81\xA0"), ' '));
  555|      1|    all_plus_number_grouping_symbols_.insert(
  556|      1|        std::make_pair(ToUnicodeCodepoint("."), '.'));
  557|      1|    all_plus_number_grouping_symbols_.insert(
  558|      1|        std::make_pair(ToUnicodeCodepoint("\xEF\xBC\x8E" /* "．" */), '.'));
  559|       |    // Only the upper-case letters are added here - the lower-case versions are
  560|       |    // added programmatically.
  561|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("A"), '2'));
  562|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("B"), '2'));
  563|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("C"), '2'));
  564|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("D"), '3'));
  565|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("E"), '3'));
  566|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("F"), '3'));
  567|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("G"), '4'));
  568|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("H"), '4'));
  569|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("I"), '4'));
  570|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("J"), '5'));
  571|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("K"), '5'));
  572|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("L"), '5'));
  573|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("M"), '6'));
  574|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("N"), '6'));
  575|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("O"), '6'));
  576|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("P"), '7'));
  577|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("Q"), '7'));
  578|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("R"), '7'));
  579|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("S"), '7'));
  580|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("T"), '8'));
  581|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("U"), '8'));
  582|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("V"), '8'));
  583|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("W"), '9'));
  584|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("X"), '9'));
  585|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("Y"), '9'));
  586|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("Z"), '9'));
  587|      1|    std::map<char32, char> lower_case_mappings;
  588|      1|    std::map<char32, char> alpha_letters;
  589|      1|    for (std::map<char32, char>::const_iterator it = alpha_mappings_.begin();
  590|     27|         it != alpha_mappings_.end();
  ------------------
  |  Branch (590:10): [True: 26, False: 1]
  ------------------
  591|     26|         ++it) {
  592|       |      // Convert all the upper-case ASCII letters to lower-case.
  593|     26|      if (it->first < 128) {
  ------------------
  |  Branch (593:11): [True: 26, False: 0]
  ------------------
  594|     26|        char letter_as_upper = static_cast<char>(it->first);
  595|     26|        char32 letter_as_lower = static_cast<char32>(tolower(letter_as_upper));
  596|     26|        lower_case_mappings.insert(std::make_pair(letter_as_lower, it->second));
  597|       |        // Add the letters in both variants to the alpha_letters map. This just
  598|       |        // pairs each letter with its upper-case representation so that it can
  599|       |        // be retained when normalising alpha numbers.
  600|     26|        alpha_letters.insert(std::make_pair(letter_as_lower, letter_as_upper));
  601|     26|        alpha_letters.insert(std::make_pair(it->first, letter_as_upper));
  602|     26|      }
  603|     26|    }
  604|       |    // In the Java version we don't insert the lower-case mappings in the map,
  605|       |    // because we convert to upper case on the fly. Doing this here would
  606|       |    // involve pulling in all of ICU, which we don't want to do if we don't have
  607|       |    // to.
  608|      1|    alpha_mappings_.insert(lower_case_mappings.begin(),
  609|      1|                           lower_case_mappings.end());
  610|      1|    alpha_phone_mappings_.insert(alpha_mappings_.begin(),
  611|      1|                                 alpha_mappings_.end());
  612|      1|    all_plus_number_grouping_symbols_.insert(alpha_letters.begin(),
  613|      1|                                             alpha_letters.end());
  614|       |    // Add the ASCII digits so that they don't get deleted by NormalizeHelper().
  615|     11|    for (char c = '0'; c <= '9'; ++c) {
  ------------------
  |  Branch (615:24): [True: 10, False: 1]
  ------------------
  616|     10|      diallable_char_mappings_.insert(std::make_pair(c, c));
  617|     10|      alpha_phone_mappings_.insert(std::make_pair(c, c));
  618|     10|      all_plus_number_grouping_symbols_.insert(std::make_pair(c, c));
  619|     10|    }
  620|       |
  621|      1|    mobile_token_mappings_.insert(std::make_pair(54, '9'));
  622|      1|    countries_without_national_prefix_with_area_codes_.insert(52);  // Mexico
  623|      1|    geo_mobile_countries_without_mobile_area_codes_.insert(86);  // China
  624|      1|    geo_mobile_countries_.insert(52);  // Mexico
  625|      1|    geo_mobile_countries_.insert(54);  // Argentina
  626|      1|    geo_mobile_countries_.insert(55);  // Brazil
  627|       |    // Indonesia: some prefixes only (fixed CMDA wireless)
  628|      1|    geo_mobile_countries_.insert(62);
  629|      1|    geo_mobile_countries_.insert(
  630|      1|        geo_mobile_countries_without_mobile_area_codes_.begin(),
  631|      1|        geo_mobile_countries_without_mobile_area_codes_.end());
  632|      1|  }
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_118ToUnicodeCodepointEPKc:
  202|     42|char32 ToUnicodeCodepoint(const char* unicode_char) {
  203|     42|  char32 codepoint;
  204|     42|  EncodingUtils::DecodeUTF8Char(unicode_char, &codepoint);
  205|     42|  return codepoint;
  206|     42|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_122LoadCompiledInMetadataEPNS0_23PhoneMetadataCollectionE:
  124|      1|bool LoadCompiledInMetadata(PhoneMetadataCollection* metadata) {
  125|      1|  if (!metadata->ParseFromArray(metadata_get(), metadata_size())) {
  ------------------
  |  Branch (125:7): [True: 0, False: 1]
  ------------------
  126|      0|    LOG(ERROR) << "Could not parse binary data.";
  127|      0|    return false;
  128|      0|  }
  129|      1|  return true;
  130|      1|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_134PrefixNumberWithCountryCallingCodeEiNS0_15PhoneNumberUtil17PhoneNumberFormatEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  168|  7.83k|    string* formatted_number) {
  169|  7.83k|  switch (number_format) {
  170|      0|    case PhoneNumberUtil::E164:
  ------------------
  |  Branch (170:5): [True: 0, False: 7.83k]
  ------------------
  171|      0|      formatted_number->insert(0, StrCat(kPlusSign, country_calling_code));
  172|      0|      return;
  173|      0|    case PhoneNumberUtil::INTERNATIONAL:
  ------------------
  |  Branch (173:5): [True: 0, False: 7.83k]
  ------------------
  174|      0|      formatted_number->insert(0, StrCat(kPlusSign, country_calling_code, " "));
  175|      0|      return;
  176|  7.83k|    case PhoneNumberUtil::RFC3966:
  ------------------
  |  Branch (176:5): [True: 7.83k, False: 0]
  ------------------
  177|  7.83k|      formatted_number->insert(0, StrCat(kRfc3966Prefix, kPlusSign,
  178|  7.83k|                                         country_calling_code, "-"));
  179|  7.83k|      return;
  180|      0|    case PhoneNumberUtil::NATIONAL:
  ------------------
  |  Branch (180:5): [True: 0, False: 7.83k]
  ------------------
  181|      0|    default:
  ------------------
  |  Branch (181:5): [True: 0, False: 7.83k]
  ------------------
  182|       |      // Do nothing.
  183|      0|      return;
  184|  7.83k|  }
  185|  7.83k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_116TestNumberLengthERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_13PhoneMetadataE:
  482|  41.5k|    const string& number, const PhoneMetadata& metadata) {
  483|  41.5k|  return TestNumberLength(number, metadata, PhoneNumberUtil::UNKNOWN);
  484|  41.5k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_115NormalizeHelperERKNSt3__13mapIicNS2_4lessIiEENS2_9allocatorINS2_4pairIKicEEEEEEbPNS2_12basic_stringIcNS2_11char_traitsIcEENS6_IcEEEE:
  326|  1.85k|                     string* number) {
  327|  1.85k|  DCHECK(number);
  ------------------
  |  |   29|  1.85k|#define DCHECK(X) assert(X)
  ------------------
  328|  1.85k|  UnicodeText number_as_unicode;
  329|  1.85k|  number_as_unicode.PointToUTF8(number->data(), static_cast<int>(number->size()));
  330|  1.85k|  if (!number_as_unicode.UTF8WasValid()) {
  ------------------
  |  Branch (330:7): [True: 0, False: 1.85k]
  ------------------
  331|       |    // The input wasn't valid UTF-8. Produce an empty string to indicate an error.
  332|      0|    number->clear();
  333|      0|    return;
  334|      0|  }
  335|  1.85k|  string normalized_number;
  336|  1.85k|  char unicode_char[5];
  337|  1.85k|  for (UnicodeText::const_iterator it = number_as_unicode.begin();
  338|  69.9k|       it != number_as_unicode.end();
  ------------------
  |  Branch (338:8): [True: 68.1k, False: 1.85k]
  ------------------
  339|  68.1k|       ++it) {
  340|  68.1k|    std::map<char32, char>::const_iterator found_glyph_pair =
  341|  68.1k|        normalization_replacements.find(*it);
  342|  68.1k|    if (found_glyph_pair != normalization_replacements.end()) {
  ------------------
  |  Branch (342:9): [True: 53.1k, False: 14.9k]
  ------------------
  343|  53.1k|      normalized_number.push_back(found_glyph_pair->second);
  344|  53.1k|    } else if (!remove_non_matches) {
  ------------------
  |  Branch (344:16): [True: 0, False: 14.9k]
  ------------------
  345|       |      // Find out how long this unicode char is so we can append it all.
  346|      0|      int char_len = it.get_utf8(unicode_char);
  347|      0|      normalized_number.append(unicode_char, char_len);
  348|      0|    }
  349|       |    // If neither of the above are true, we remove this character.
  350|  68.1k|  }
  351|  1.85k|  number->assign(normalized_number);
  352|  1.85k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_119GetNumberDescByTypeERKNS0_13PhoneMetadataENS0_15PhoneNumberUtil15PhoneNumberTypeE:
  136|  45.5k|    PhoneNumberUtil::PhoneNumberType type) {
  137|  45.5k|  switch (type) {
  138|      0|    case PhoneNumberUtil::PREMIUM_RATE:
  ------------------
  |  Branch (138:5): [True: 0, False: 45.5k]
  ------------------
  139|      0|      return &metadata.premium_rate();
  140|      0|    case PhoneNumberUtil::TOLL_FREE:
  ------------------
  |  Branch (140:5): [True: 0, False: 45.5k]
  ------------------
  141|      0|      return &metadata.toll_free();
  142|      0|    case PhoneNumberUtil::MOBILE:
  ------------------
  |  Branch (142:5): [True: 0, False: 45.5k]
  ------------------
  143|      0|      return &metadata.mobile();
  144|      0|    case PhoneNumberUtil::FIXED_LINE:
  ------------------
  |  Branch (144:5): [True: 0, False: 45.5k]
  ------------------
  145|      0|    case PhoneNumberUtil::FIXED_LINE_OR_MOBILE:
  ------------------
  |  Branch (145:5): [True: 0, False: 45.5k]
  ------------------
  146|      0|      return &metadata.fixed_line();
  147|      0|    case PhoneNumberUtil::SHARED_COST:
  ------------------
  |  Branch (147:5): [True: 0, False: 45.5k]
  ------------------
  148|      0|      return &metadata.shared_cost();
  149|      0|    case PhoneNumberUtil::VOIP:
  ------------------
  |  Branch (149:5): [True: 0, False: 45.5k]
  ------------------
  150|      0|      return &metadata.voip();
  151|      0|    case PhoneNumberUtil::PERSONAL_NUMBER:
  ------------------
  |  Branch (151:5): [True: 0, False: 45.5k]
  ------------------
  152|      0|      return &metadata.personal_number();
  153|      0|    case PhoneNumberUtil::PAGER:
  ------------------
  |  Branch (153:5): [True: 0, False: 45.5k]
  ------------------
  154|      0|      return &metadata.pager();
  155|      0|    case PhoneNumberUtil::UAN:
  ------------------
  |  Branch (155:5): [True: 0, False: 45.5k]
  ------------------
  156|      0|      return &metadata.uan();
  157|      0|    case PhoneNumberUtil::VOICEMAIL:
  ------------------
  |  Branch (157:5): [True: 0, False: 45.5k]
  ------------------
  158|      0|      return &metadata.voicemail();
  159|  45.5k|    default:
  ------------------
  |  Branch (159:5): [True: 45.5k, False: 0]
  ------------------
  160|  45.5k|      return &metadata.general_desc();
  161|  45.5k|  }
  162|  45.5k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_116TestNumberLengthERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_13PhoneMetadataENS0_15PhoneNumberUtil15PhoneNumberTypeE:
  404|  45.5k|    PhoneNumberUtil::PhoneNumberType type) {
  405|  45.5k|  const PhoneNumberDesc* desc_for_type = GetNumberDescByType(metadata, type);
  406|       |  // There should always be "possibleLengths" set for every element. This is
  407|       |  // declared in the XML schema which is verified by
  408|       |  // PhoneNumberMetadataSchemaTest. For size efficiency, where a
  409|       |  // sub-description (e.g. fixed-line) has the same possibleLengths as the
  410|       |  // parent, this is missing, so we fall back to the general desc (where no
  411|       |  // numbers of the type exist at all, there is one possible length (-1) which
  412|       |  // is guaranteed not to match the length of any real phone number).
  413|  45.5k|  RepeatedField<int> possible_lengths =
  414|  45.5k|      desc_for_type->possible_length_size() == 0
  ------------------
  |  Branch (414:7): [True: 0, False: 45.5k]
  ------------------
  415|  45.5k|          ? metadata.general_desc().possible_length()
  416|  45.5k|          : desc_for_type->possible_length();
  417|  45.5k|  RepeatedField<int> local_lengths =
  418|  45.5k|      desc_for_type->possible_length_local_only();
  419|  45.5k|  if (type == PhoneNumberUtil::FIXED_LINE_OR_MOBILE) {
  ------------------
  |  Branch (419:7): [True: 0, False: 45.5k]
  ------------------
  420|      0|    const PhoneNumberDesc* fixed_line_desc =
  421|      0|        GetNumberDescByType(metadata, PhoneNumberUtil::FIXED_LINE);
  422|      0|    if (!DescHasPossibleNumberData(*fixed_line_desc)) {
  ------------------
  |  Branch (422:9): [True: 0, False: 0]
  ------------------
  423|       |      // The rare case has been encountered where no fixedLine data is available
  424|       |      // (true for some non-geographical entities), so we just check mobile.
  425|      0|      return TestNumberLength(number, metadata, PhoneNumberUtil::MOBILE);
  426|      0|    } else {
  427|      0|      const PhoneNumberDesc* mobile_desc =
  428|      0|          GetNumberDescByType(metadata, PhoneNumberUtil::MOBILE);
  429|      0|      if (DescHasPossibleNumberData(*mobile_desc)) {
  ------------------
  |  Branch (429:11): [True: 0, False: 0]
  ------------------
  430|       |        // Merge the mobile data in if there was any. Note that when adding the
  431|       |        // possible lengths from mobile, we have to again check they aren't
  432|       |        // empty since if they are this indicates they are the same as the
  433|       |        // general desc and should be obtained from there.
  434|      0|        possible_lengths.MergeFrom(
  435|      0|            mobile_desc->possible_length_size() == 0
  ------------------
  |  Branch (435:13): [True: 0, False: 0]
  ------------------
  436|      0|            ? metadata.general_desc().possible_length()
  437|      0|            : mobile_desc->possible_length());
  438|      0|        std::sort(possible_lengths.begin(), possible_lengths.end());
  439|       |
  440|      0|        if (local_lengths.size() == 0) {
  ------------------
  |  Branch (440:13): [True: 0, False: 0]
  ------------------
  441|      0|          local_lengths = mobile_desc->possible_length_local_only();
  442|      0|        } else {
  443|      0|          local_lengths.MergeFrom(mobile_desc->possible_length_local_only());
  444|      0|          std::sort(local_lengths.begin(), local_lengths.end());
  445|      0|        }
  446|      0|      }
  447|      0|    }
  448|      0|  }
  449|       |
  450|       |  // If the type is not suported at all (indicated by the possible lengths
  451|       |  // containing -1 at this point) we return invalid length.
  452|  45.5k|  if (possible_lengths.Get(0) == -1) {
  ------------------
  |  Branch (452:7): [True: 0, False: 45.5k]
  ------------------
  453|      0|    return PhoneNumberUtil::INVALID_LENGTH;
  454|      0|  }
  455|       |
  456|  45.5k|  int actual_length = static_cast<int>(number.length());
  457|       |  // This is safe because there is never an overlap beween the possible lengths
  458|       |  // and the local-only lengths; this is checked at build time.
  459|  45.5k|  if (std::find(local_lengths.begin(), local_lengths.end(), actual_length) !=
  ------------------
  |  Branch (459:7): [True: 3.33k, False: 42.2k]
  ------------------
  460|  45.5k|      local_lengths.end()) {
  461|  3.33k|    return PhoneNumberUtil::IS_POSSIBLE_LOCAL_ONLY;
  462|  3.33k|  }
  463|  42.2k|  int minimum_length = possible_lengths.Get(0);
  464|  42.2k|  if (minimum_length == actual_length) {
  ------------------
  |  Branch (464:7): [True: 4.73k, False: 37.4k]
  ------------------
  465|  4.73k|    return PhoneNumberUtil::IS_POSSIBLE;
  466|  37.4k|  } else if (minimum_length > actual_length) {
  ------------------
  |  Branch (466:14): [True: 11.6k, False: 25.8k]
  ------------------
  467|  11.6k|    return PhoneNumberUtil::TOO_SHORT;
  468|  25.8k|  } else if (*(possible_lengths.end() - 1) < actual_length) {
  ------------------
  |  Branch (468:14): [True: 11.0k, False: 14.7k]
  ------------------
  469|  11.0k|    return PhoneNumberUtil::TOO_LONG;
  470|  11.0k|  }
  471|       |  // We skip the first element; we've already checked it.
  472|  14.7k|  return std::find(possible_lengths.begin() + 1, possible_lengths.end(),
  ------------------
  |  Branch (472:10): [True: 14.4k, False: 340]
  ------------------
  473|  14.7k|                   actual_length) != possible_lengths.end()
  474|  14.7k|             ? PhoneNumberUtil::IS_POSSIBLE
  475|  14.7k|             : PhoneNumberUtil::INVALID_LENGTH;
  476|  42.2k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_17IsMatchERKNS0_10MatcherApiERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKNS0_15PhoneNumberDescE:
  508|   108k|             const string& number, const PhoneNumberDesc& desc) {
  509|   108k|  return matcher_api.MatchNationalNumber(number, desc, false);
  510|   108k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_118CopyCoreFieldsOnlyERKNS0_11PhoneNumberEPS2_:
  491|  5.37k|void CopyCoreFieldsOnly(const PhoneNumber& number, PhoneNumber* pruned_number) {
  492|  5.37k|  pruned_number->set_country_code(number.country_code());
  493|  5.37k|  pruned_number->set_national_number(number.national_number());
  494|  5.37k|  if (!number.extension().empty()) {
  ------------------
  |  Branch (494:7): [True: 1.92k, False: 3.45k]
  ------------------
  495|  1.92k|    pruned_number->set_extension(number.extension());
  496|  1.92k|  }
  497|  5.37k|  if (number.italian_leading_zero()) {
  ------------------
  |  Branch (497:7): [True: 406, False: 4.96k]
  ------------------
  498|    406|    pruned_number->set_italian_leading_zero(true);
  499|       |    // This field is only relevant if there are leading zeros at all.
  500|    406|    pruned_number->set_number_of_leading_zeros(
  501|    406|        number.number_of_leading_zeros());
  502|    406|  }
  503|  5.37k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_132IsNationalNumberSuffixOfTheOtherERKNS0_11PhoneNumberES4_:
  190|  1.81k|                                      const PhoneNumber& second_number) {
  191|  1.81k|  const string& first_number_national_number =
  192|  1.81k|    SimpleItoa(static_cast<uint64>(first_number.national_number()));
  193|  1.81k|  const string& second_number_national_number =
  194|  1.81k|    SimpleItoa(static_cast<uint64>(second_number.national_number()));
  195|       |  // Note that HasSuffixString returns true if the numbers are equal.
  196|  1.81k|  return HasSuffixString(first_number_national_number,
  ------------------
  |  Branch (196:10): [True: 780, False: 1.03k]
  ------------------
  197|  1.81k|                         second_number_national_number) ||
  198|  1.81k|         HasSuffixString(second_number_national_number,
  ------------------
  |  Branch (198:10): [True: 34, False: 1.00k]
  ------------------
  199|  1.03k|                         first_number_national_number);
  200|  1.81k|}

_ZN4i18n12phonenumbers17RegexBasedMatcherC2Ev:
   33|      1|    : regexp_factory_(new RegExpFactory()),
   34|      1|      regexp_cache_(new RegExpCache(*regexp_factory_, 128)) {}
_ZNK4i18n12phonenumbers17RegexBasedMatcher19MatchNationalNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_15PhoneNumberDescEb:
   41|   108k|    bool allow_prefix_match) const {
   42|   108k|  const string& national_number_pattern = number_desc.national_number_pattern();
   43|       |  // We don't want to consider it a prefix match when matching non-empty input
   44|       |  // against an empty pattern.
   45|   108k|  if (national_number_pattern.empty()) {
  ------------------
  |  Branch (45:7): [True: 0, False: 108k]
  ------------------
   46|      0|    return false;
   47|      0|  }
   48|   108k|  return Match(number, national_number_pattern, allow_prefix_match);
   49|   108k|}
_ZNK4i18n12phonenumbers17RegexBasedMatcher5MatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_b:
   54|   108k|    bool allow_prefix_match) const {
   55|   108k|  const RegExp& regexp(regexp_cache_->GetRegExp(number_pattern));
   56|       |
   57|   108k|  if (regexp.FullMatch(number)) {
  ------------------
  |  Branch (57:7): [True: 44.0k, False: 63.9k]
  ------------------
   58|  44.0k|    return true;
   59|  44.0k|  }
   60|  63.9k|  const scoped_ptr<RegExpInput> normalized_number_input(
   61|  63.9k|      regexp_factory_->CreateInput(number));
   62|  63.9k|  return regexp.Consume(normalized_number_input.get())
  ------------------
  |  Branch (62:10): [True: 7.89k, False: 56.0k]
  ------------------
   63|  63.9k|      ? allow_prefix_match
   64|  63.9k|      : false;
   65|   108k|}

_ZN4i18n12phonenumbers21AbstractRegExpFactoryD2Ev:
  190|  8.27k|  virtual ~AbstractRegExpFactory() {}
_ZN4i18n12phonenumbers11RegExpInputD2Ev:
   41|  1.49M|  virtual ~RegExpInput() {}
_ZN4i18n12phonenumbers6RegExpD2Ev:
   52|  8.27k|  virtual ~RegExp() {}
_ZNK4i18n12phonenumbers6RegExp7ConsumeEPNS0_11RegExpInputEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEESB_:
  113|  6.98k|                      string* matched_string2) const {
  114|  6.98k|    return Consume(input_string, true, matched_string1, matched_string2, NULL,
  115|  6.98k|    		   NULL, NULL, NULL);
  116|  6.98k|  }
_ZNK4i18n12phonenumbers6RegExp7ConsumeEPNS0_11RegExpInputEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  118|  47.7k|  inline bool Consume(RegExpInput* input_string, string* matched_string) const {
  119|  47.7k|    return Consume(input_string, true, matched_string, NULL, NULL, NULL, NULL,
  120|  47.7k|    	   	   NULL);
  121|  47.7k|  }
_ZNK4i18n12phonenumbers6RegExp7ConsumeEPNS0_11RegExpInputE:
  123|   433k|  inline bool Consume(RegExpInput* input_string) const {
  124|   433k|    return Consume(input_string, true, NULL, NULL, NULL, NULL, NULL, NULL);
  125|   433k|  }
_ZNK4i18n12phonenumbers6RegExp14FindAndConsumeEPNS0_11RegExpInputEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  130|   202k|                             string* matched_string) const {
  131|   202k|    return Consume(input_string, false, matched_string, NULL, NULL, NULL, NULL,
  132|   202k|    	           NULL);
  133|   202k|  }
_ZNK4i18n12phonenumbers6RegExp12PartialMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
  147|  84.3k|                           string* matched_string) const {
  148|  84.3k|    return Match(input_string, false, matched_string);
  149|  84.3k|  }
_ZNK4i18n12phonenumbers6RegExp12PartialMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  151|   147k|  inline bool PartialMatch(const string& input_string) const {
  152|   147k|    return Match(input_string, false, NULL);
  153|   147k|  }
_ZNK4i18n12phonenumbers6RegExp9FullMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  160|   516k|  inline bool FullMatch(const string& input_string) const {
  161|   516k|    return Match(input_string, true, NULL);
  162|   516k|  }
_ZNK4i18n12phonenumbers6RegExp7ReplaceEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKS8_:
  176|  9.39k|                      const string& replacement_string) const {
  177|  9.39k|    return Replace(string_to_process, false, replacement_string);
  178|  9.39k|  }
_ZNK4i18n12phonenumbers6RegExp13GlobalReplaceEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKS8_:
  181|  86.0k|                            const string& replacement_string) const {
  182|  86.0k|    return Replace(string_to_process, true, replacement_string);
  183|  86.0k|  }

_ZNK4i18n12phonenumbers16ICURegExpFactory11CreateInputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  236|   650k|RegExpInput* ICURegExpFactory::CreateInput(const string& utf8_input) const {
  237|   650k|  return new IcuRegExpInput(utf8_input);
  238|   650k|}
_ZNK4i18n12phonenumbers16ICURegExpFactory12CreateRegExpERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  240|  9.37k|RegExp* ICURegExpFactory::CreateRegExp(const string& utf8_regexp) const {
  241|  9.37k|  return new IcuRegExp(utf8_regexp);
  242|  9.37k|}
_ZN4i18n12phonenumbers14IcuRegExpInputC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   69|  1.49M|      : utf8_input_(Utf8StringToUnicodeString(utf8_input)),
   70|  1.49M|        position_(0) {}
regexp_adapter_icu.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_125Utf8StringToUnicodeStringERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   54|  1.67M|UnicodeString Utf8StringToUnicodeString(const string& source) {
   55|       |  // Note that we don't use icu::StringPiece(const string&).
   56|  1.67M|  return UnicodeString::fromUTF8(
   57|  1.67M|      icu::StringPiece(source.c_str(), static_cast<int>(source.size())));
   58|  1.67M|}
_ZN4i18n12phonenumbers14IcuRegExpInputD2Ev:
   77|  1.49M|  virtual ~IcuRegExpInput() {}
_ZNK4i18n12phonenumbers14IcuRegExpInput8ToStringEv:
   79|  68.2k|  virtual string ToString() const {
   80|  68.2k|    return UnicodeStringToUtf8String(utf8_input_.tempSubString(position_));
   81|  68.2k|  }
regexp_adapter_icu.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_125UnicodeStringToUtf8StringERKN6icu_6613UnicodeStringE:
   47|   278k|string UnicodeStringToUtf8String(const UnicodeString& source) {
   48|   278k|  string data;
   49|   278k|  source.toUTF8String(data);
   50|   278k|  return data;
   51|   278k|}
_ZN4i18n12phonenumbers9IcuRegExpC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  108|  9.37k|  explicit IcuRegExp(const string& utf8_regexp) {
  109|  9.37k|    UParseError parse_error;
  110|  9.37k|    UErrorCode status = U_ZERO_ERROR;
  111|  9.37k|    utf8_regexp_.reset(RegexPattern::compile(
  112|  9.37k|        Utf8StringToUnicodeString(utf8_regexp), 0, parse_error, status));
  113|  9.37k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (113:9): [True: 2.33k, False: 7.04k]
  ------------------
  114|       |      // The provided regular expressions should compile correctly.
  115|  2.33k|      LOG(ERROR) << "Error compiling regular expression: " << utf8_regexp;
  116|  2.33k|      utf8_regexp_.reset(NULL);
  117|  2.33k|    }
  118|  9.37k|  }
_ZN4i18n12phonenumbers9IcuRegExpD2Ev:
  124|  8.27k|  virtual ~IcuRegExp() {}
_ZNK4i18n12phonenumbers9IcuRegExp7ConsumeEPNS0_11RegExpInputEbPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEESB_SB_SB_SB_SB_:
  133|   733k|                       string* matched_string6) const {
  134|   733k|    DCHECK(input_string);
  ------------------
  |  |   29|   733k|#define DCHECK(X) assert(X)
  ------------------
  135|   733k|    if (!utf8_regexp_.get()) {
  ------------------
  |  Branch (135:9): [True: 0, False: 733k]
  ------------------
  136|      0|      return false;
  137|      0|    }
  138|   733k|    IcuRegExpInput* const input = static_cast<IcuRegExpInput*>(input_string);
  139|   733k|    UErrorCode status = U_ZERO_ERROR;
  140|   733k|    const scoped_ptr<RegexMatcher> matcher(
  141|   733k|        utf8_regexp_->matcher(*input->Data(), status));
  142|   733k|    bool match_succeeded = anchor_at_start
  ------------------
  |  Branch (142:28): [True: 488k, False: 244k]
  ------------------
  143|   733k|        ? matcher->lookingAt(input->position(), status)
  144|   733k|        : matcher->find(input->position(), status);
  145|   733k|    if (!match_succeeded || U_FAILURE(status)) {
  ------------------
  |  Branch (145:9): [True: 554k, False: 178k]
  |  Branch (145:29): [True: 0, False: 178k]
  ------------------
  146|   554k|      return false;
  147|   554k|    }
  148|   178k|    string* const matched_strings[] = {matched_string1, matched_string2,
  149|   178k|                                       matched_string3, matched_string4,
  150|   178k|                                       matched_string5, matched_string6};
  151|       |    // If less matches than expected - fail.
  152|  1.22M|    for (size_t i = 0; i < arraysize(matched_strings); ++i) {
  ------------------
  |  |  131|  1.22M|#define arraysize(array) (sizeof(ArraySizeHelper(array)))
  ------------------
  |  Branch (152:24): [True: 1.05M, False: 174k]
  ------------------
  153|  1.05M|      if (matched_strings[i]) {
  ------------------
  |  Branch (153:11): [True: 145k, False: 909k]
  ------------------
  154|       |        // Groups are counted from 1 rather than 0.
  155|   145k|        const int group_index = static_cast<int>(i + 1);
  156|   145k|        if (group_index > matcher->groupCount()) {
  ------------------
  |  Branch (156:13): [True: 3.64k, False: 142k]
  ------------------
  157|  3.64k|          return false;
  158|  3.64k|        }
  159|   142k|        *matched_strings[i] =
  160|   142k|            UnicodeStringToUtf8String(matcher->group(group_index, status));
  161|   142k|      }
  162|  1.05M|    }
  163|   174k|    input->set_position(matcher->end(status));
  164|   174k|    return !U_FAILURE(status);
  165|   178k|  }
_ZN4i18n12phonenumbers14IcuRegExpInput4DataEv:
   83|  1.58M|  UnicodeString* Data() {
   84|  1.58M|    return &utf8_input_;
   85|  1.58M|  }
_ZNK4i18n12phonenumbers14IcuRegExpInput8positionEv:
   90|  1.48M|  int position() const {
   91|  1.48M|    return position_;
   92|  1.48M|  }
_ZN4i18n12phonenumbers14IcuRegExpInput12set_positionEi:
   94|   174k|  void set_position(int position) {
   95|   174k|    DCHECK(position >= 0 && position <= utf8_input_.length());
  ------------------
  |  |   29|   174k|#define DCHECK(X) assert(X)
  ------------------
   96|   174k|    position_ = position;
   97|   174k|  }
_ZNK4i18n12phonenumbers9IcuRegExp5MatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbPS8_:
  169|   755k|             string* matched_string) const {
  170|   755k|    if (!utf8_regexp_.get()) {
  ------------------
  |  Branch (170:9): [True: 2.33k, False: 753k]
  ------------------
  171|  2.33k|      return false;
  172|  2.33k|    }
  173|   753k|    IcuRegExpInput input(input_string);
  174|   753k|    UErrorCode status = U_ZERO_ERROR;
  175|   753k|    const scoped_ptr<RegexMatcher> matcher(
  176|   753k|        utf8_regexp_->matcher(*input.Data(), status));
  177|   753k|    bool match_succeeded = full_match
  ------------------
  |  Branch (177:28): [True: 516k, False: 236k]
  ------------------
  178|   753k|        ? matcher->matches(input.position(), status)
  179|   753k|        : matcher->find(input.position(), status);
  180|   753k|    if (!match_succeeded || U_FAILURE(status)) {
  ------------------
  |  Branch (180:9): [True: 469k, False: 284k]
  |  Branch (180:29): [True: 0, False: 284k]
  ------------------
  181|   469k|      return false;
  182|   469k|    }
  183|   284k|    if (matcher->groupCount() > 0 && matched_string) {
  ------------------
  |  Branch (183:9): [True: 73.4k, False: 210k]
  |  Branch (183:38): [True: 3.37k, False: 70.1k]
  ------------------
  184|  3.37k|      *matched_string = UnicodeStringToUtf8String(matcher->group(1, status));
  185|  3.37k|    }
  186|   284k|    return !U_FAILURE(status);
  187|   753k|  }
_ZNK4i18n12phonenumbers9IcuRegExp7ReplaceEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbRKS8_:
  191|  95.4k|               const string& replacement_string) const {
  192|  95.4k|    DCHECK(string_to_process);
  ------------------
  |  |   29|  95.4k|#define DCHECK(X) assert(X)
  ------------------
  193|  95.4k|    if (!utf8_regexp_.get()) {
  ------------------
  |  Branch (193:9): [True: 0, False: 95.4k]
  ------------------
  194|      0|      return false;
  195|      0|    }
  196|  95.4k|    IcuRegExpInput input(*string_to_process);
  197|  95.4k|    UErrorCode status = U_ZERO_ERROR;
  198|  95.4k|    const scoped_ptr<RegexMatcher> matcher(
  199|  95.4k|        utf8_regexp_->matcher(*input.Data(), status));
  200|  95.4k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (200:9): [True: 0, False: 95.4k]
  ------------------
  201|      0|      return false;
  202|      0|    }
  203|       |
  204|  95.4k|    UnicodeString output;
  205|       |    // We reimplement ReplaceFirst and ReplaceAll such that their behaviour is
  206|       |    // consistent with the RE2 reg-ex matcher.
  207|  95.4k|    if (!matcher->find()) {
  ------------------
  |  Branch (207:9): [True: 30.8k, False: 64.6k]
  ------------------
  208|  30.8k|      return false;
  209|  30.8k|    }
  210|  64.6k|    matcher->appendReplacement(output,
  211|  64.6k|                               Utf8StringToUnicodeString(replacement_string),
  212|  64.6k|                               status);
  213|  64.6k|    if (global) {
  ------------------
  |  Branch (213:9): [True: 55.2k, False: 9.39k]
  ------------------
  214|       |      // Continue and look for more matches.
  215|   155k|      while (matcher->find()) {
  ------------------
  |  Branch (215:14): [True: 100k, False: 55.2k]
  ------------------
  216|   100k|        matcher->appendReplacement(
  217|   100k|            output,
  218|   100k|            Utf8StringToUnicodeString(replacement_string),
  219|   100k|            status);
  220|   100k|      }
  221|  55.2k|    }
  222|       |
  223|  64.6k|    matcher->appendTail(output);
  224|  64.6k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (224:9): [True: 0, False: 64.6k]
  ------------------
  225|      0|      return false;
  226|      0|    }
  227|  64.6k|    const string replaced_string = UnicodeStringToUtf8String(output);
  228|  64.6k|    *string_to_process = replaced_string;
  229|  64.6k|    return true;
  230|  64.6k|  }

_ZN4i18n12phonenumbers11RegExpCacheC2ERKNS0_21AbstractRegExpFactoryEm:
   33|      3|    : regexp_factory_(regexp_factory),
   34|       |#ifdef I18N_PHONENUMBERS_USE_TR1_UNORDERED_MAP
   35|       |      cache_impl_(new CacheImpl(min_items))
   36|       |#else
   37|      3|      cache_impl_(new CacheImpl())
   38|       |#endif
   39|      3|{}
_ZN4i18n12phonenumbers11RegExpCache9GetRegExpERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   49|   451k|const RegExp& RegExpCache::GetRegExp(const string& pattern) {
   50|   451k|  AutoLock l(lock_);
   51|   451k|  CacheImpl::const_iterator it = cache_impl_->find(pattern);
   52|   451k|  if (it != cache_impl_->end()) return *it->second;
  ------------------
  |  Branch (52:7): [True: 450k, False: 1.07k]
  ------------------
   53|       |
   54|  1.07k|  const RegExp* regexp = regexp_factory_.CreateRegExp(pattern);
   55|  1.07k|  cache_impl_->insert(std::make_pair(pattern, regexp));
   56|  1.07k|  return *regexp;
   57|   451k|}

_ZN4i18n12phonenumbers10RegionCode10GetUnknownEv:
   28|  31.8k|  static const char* GetUnknown() {
   29|  31.8k|    return ZZ();
   30|  31.8k|  }
_ZN4i18n12phonenumbers10RegionCode2ZZEv:
   32|  31.8k|  static const char* ZZ() {
   33|  31.8k|    return "ZZ";
   34|  31.8k|  }

_ZNK4i18n12phonenumbers3gtl12OrderByFirstclINSt3__14pairIiPNS4_4listINS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENSA_ISC_EEEEEEEEbRKT_SJ_:
   25|  1.22M|  bool operator()(const T& p1, const T& p2) const {
   26|  1.22M|    return p1.first < p2.first;
   27|  1.22M|  }

_ZN4i18n12phonenumbers10SimpleItoaEi:
   40|  41.1k|string SimpleItoa(int n) {
   41|  41.1k|  return absl::StrCat(n);
   42|  41.1k|}
_ZN4i18n12phonenumbers10SimpleItoaEm:
   44|  3.62k|string SimpleItoa(uint64 n) {
   45|  3.62k|  return absl::StrCat(n);
   46|  3.62k|}
_ZN4i18n12phonenumbers15HasPrefixStringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_:
   52|  3.28k|bool HasPrefixString(const string& s, const string& prefix) {
   53|  3.28k|  return absl::StartsWith(s, prefix);
   54|  3.28k|}
_ZN4i18n12phonenumbers16SplitStringUsingERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEcPNS1_6vectorIS7_NS5_IS7_EEEE:
   69|  20.2k|                      vector<string>* result) {
   70|  20.2k|  assert(result);
   71|  20.2k|  for (absl::string_view split_piece : absl::StrSplit(
  ------------------
  |  Branch (71:38): [True: 54.3k, False: 20.2k]
  ------------------
   72|  54.3k|           s, absl::ByChar(delimiter), absl::SkipEmpty())) {
   73|  54.3k|    result->push_back(std::string(split_piece));
   74|  54.3k|  }
   75|  20.2k|}
_ZN4i18n12phonenumbers20TryStripPrefixStringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_PS7_:
   77|  34.2k|bool TryStripPrefixString(const string& in, const string& prefix, string* out) {
   78|  34.2k|  assert(out);
   79|  34.2k|  const bool has_prefix = in.compare(0, prefix.length(), prefix) == 0;
   80|  34.2k|  out->assign(has_prefix ? in.substr(prefix.length()) : in);
  ------------------
  |  Branch (80:15): [True: 2.58k, False: 31.6k]
  ------------------
   81|       |
   82|  34.2k|  return has_prefix;
   83|  34.2k|}
_ZN4i18n12phonenumbers15HasSuffixStringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_:
   85|  5.52k|bool HasSuffixString(const string& s, const string& suffix) {
   86|  5.52k|  return absl::EndsWith(s, suffix);
   87|  5.52k|}
_ZN4i18n12phonenumbers12safe_strto32ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPi:
   95|  15.1k|void safe_strto32(const string& s, int32 *n) {
   96|  15.1k|  GenericAtoi(s, n);
   97|  15.1k|}
_ZN4i18n12phonenumbers13safe_strtou64ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPm:
   99|  33.7k|void safe_strtou64(const string& s, uint64 *n) {
  100|  33.7k|  GenericAtoi(s, n);
  101|  33.7k|}
_ZN4i18n12phonenumbers6strrmmEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKS7_:
  107|  5.99k|void strrmm(string* s, const string& chars) {
  108|  9.98k|  for (string::iterator it = s->begin(); it != s->end(); ) {
  ------------------
  |  Branch (108:42): [True: 3.98k, False: 5.99k]
  ------------------
  109|  3.98k|    const char current_char = *it;
  110|  3.98k|    if (chars.find(current_char) != string::npos) {
  ------------------
  |  Branch (110:9): [True: 0, False: 3.98k]
  ------------------
  111|      0|      it = s->erase(it);
  112|  3.98k|    } else {
  113|  3.98k|      ++it;
  114|  3.98k|    }
  115|  3.98k|  }
  116|  5.99k|}
_ZN4i18n12phonenumbers12StringHolderC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  126|  77.2k|  : absl::AlphaNum(s)
  127|  77.2k|{}
_ZN4i18n12phonenumbers12StringHolderC2EPKc:
  130|   171k|  : absl::AlphaNum(cp)
  131|   171k|{}
_ZN4i18n12phonenumbers12StringHolderC2Em:
  134|  83.7k|  : absl::AlphaNum(n)
  135|  83.7k|{}
_ZN4i18n12phonenumbers12StringHolderD2Ev:
  137|   332k|StringHolder::~StringHolder() {}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_:
  154|      5|string StrCat(const StringHolder& s1, const StringHolder& s2) {
  155|      5|  return absl::StrCat(s1, s2);
  156|      5|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_:
  159|  48.7k|              const StringHolder& s3) {
  160|  48.7k|  return absl::StrCat(s1, s2, s3);
  161|  48.7k|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_:
  164|  7.83k|              const StringHolder& s3, const StringHolder& s4) {
  165|  7.83k|  return absl::StrCat(s1, s2, s3, s4);
  166|  7.83k|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_:
  170|     27|              const StringHolder& s5) {
  171|     27|  return absl::StrCat(s1, s2, s3, s4, s5);
  172|     27|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_:
  176|      1|              const StringHolder& s5, const StringHolder& s6) {
  177|      1|  return absl::StrCat(s1, s2, s3, s4, s5, s6);
  178|      1|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_S3_:
  183|      3|              const StringHolder& s7) {
  184|      3|  return absl::StrCat(s1, s2, s3, s4, s5, s6, s7);
  185|      3|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_S3_S3_:
  190|      1|              const StringHolder& s7, const StringHolder& s8) {
  191|      1|  string result;
  192|      1|  result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
  193|      1|                 s5.Length() + s6.Length() + s7.Length() + s8.Length() + 1);
  194|      1|  return absl::StrCat(s1, s2, s3, s4, s5, s6, s7, s8);
  195|      1|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_S3_S3_S3_:
  201|      1|              const StringHolder& s9) {
  202|      1|  return absl::StrCat(s1, s2, s3, s4, s5, s6, s7, s8, s9);
  203|      1|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_:
  240|      1|              const StringHolder& s13, const StringHolder& s14) {
  241|      1|  return absl::StrCat(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
  242|      1|                      s13, s14);
  243|      1|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_:
  264|      1|              const StringHolder& s15, const StringHolder& s16) {
  265|      1|  return absl::StrCat(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
  266|      1|                      s13, s14, s15, s16);
  267|      1|}
_ZN4i18n12phonenumbers9StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_12StringHolderE:
  271|   151k|void StrAppend(string* dest, const StringHolder& s1) {
  272|   151k|  absl::StrAppend(dest, s1);
  273|   151k|}
_ZN4i18n12phonenumbers9StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_12StringHolderESB_:
  275|  1.28k|void StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2) {
  276|  1.28k|  absl::StrAppend(dest, s1, s2);
  277|  1.28k|}
_ZN4i18n12phonenumbers11GenericAtoiIiEEvRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPT_:
   90|  15.1k|void GenericAtoi(const string& s, T* out) {
   91|  15.1k|  if (!absl::SimpleAtoi(s, out))
  ------------------
  |  Branch (91:7): [True: 0, False: 15.1k]
  ------------------
   92|      0|    *out = 0;
   93|  15.1k|}
_ZN4i18n12phonenumbers11GenericAtoiImEEvRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPT_:
   90|  33.7k|void GenericAtoi(const string& s, T* out) {
   91|  33.7k|  if (!absl::SimpleAtoi(s, out))
  ------------------
  |  Branch (91:7): [True: 0, False: 33.7k]
  ------------------
   92|      0|    *out = 0;
   93|  33.7k|}

_ZNK4i18n12phonenumbers12StringHolder6LengthEv:
   96|      8|  size_t Length() const {
   97|      8|    return size();
   98|      8|  }

charntorune:
   68|  4.15M|{
   69|  4.15M|	int c, c1, c2, c3;
   70|  4.15M|	long l;
   71|       |
   72|       |	/* When we're not allowed to read anything */
   73|  4.15M|	if(length <= 0) {
  ------------------
  |  Branch (73:5): [True: 0, False: 4.15M]
  ------------------
   74|      0|		goto badlen;
   75|      0|	}
   76|       |
   77|       |	/*
   78|       |	 * one character sequence (7-bit value)
   79|       |	 *	00000-0007F => T1
   80|       |	 */
   81|  4.15M|	c = *(uchar*)str;
   82|  4.15M|	if(c < Tx) {
  ------------------
  |  Branch (82:5): [True: 3.68M, False: 472k]
  ------------------
   83|  3.68M|		*rune = (Rune)c;
   84|  3.68M|		return 1;
   85|  3.68M|	}
   86|       |
   87|       |	// If we can't read more than one character we must stop
   88|   472k|	if(length <= 1) {
  ------------------
  |  Branch (88:5): [True: 3.32k, False: 469k]
  ------------------
   89|  3.32k|		goto badlen;
   90|  3.32k|	}
   91|       |
   92|       |	/*
   93|       |	 * two character sequence (11-bit value)
   94|       |	 *	0080-07FF => T2 Tx
   95|       |	 */
   96|   469k|	c1 = *(uchar*)(str+1) ^ Tx;
   97|   469k|	if(c1 & Testx)
  ------------------
  |  Branch (97:5): [True: 321k, False: 148k]
  ------------------
   98|   321k|		goto bad;
   99|   148k|	if(c < T3) {
  ------------------
  |  Branch (99:5): [True: 95.9k, False: 52.0k]
  ------------------
  100|  95.9k|		if(c < T2)
  ------------------
  |  Branch (100:6): [True: 76.3k, False: 19.5k]
  ------------------
  101|  76.3k|			goto bad;
  102|  19.5k|		l = ((c << Bitx) | c1) & Rune2;
  103|  19.5k|		if(l <= Rune1)
  ------------------
  |  Branch (103:6): [True: 879, False: 18.6k]
  ------------------
  104|    879|			goto bad;
  105|  18.6k|		*rune = (Rune)l;
  106|  18.6k|		return 2;
  107|  19.5k|	}
  108|       |
  109|       |	// If we can't read more than two characters we must stop
  110|  52.0k|	if(length <= 2) {
  ------------------
  |  Branch (110:5): [True: 308, False: 51.7k]
  ------------------
  111|    308|		goto badlen;
  112|    308|	}
  113|       |
  114|       |	/*
  115|       |	 * three character sequence (16-bit value)
  116|       |	 *	0800-FFFF => T3 Tx Tx
  117|       |	 */
  118|  51.7k|	c2 = *(uchar*)(str+2) ^ Tx;
  119|  51.7k|	if(c2 & Testx)
  ------------------
  |  Branch (119:5): [True: 13.6k, False: 38.0k]
  ------------------
  120|  13.6k|		goto bad;
  121|  38.0k|	if(c < T4) {
  ------------------
  |  Branch (121:5): [True: 23.2k, False: 14.8k]
  ------------------
  122|  23.2k|		l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
  123|  23.2k|		if(l <= Rune2)
  ------------------
  |  Branch (123:6): [True: 399, False: 22.8k]
  ------------------
  124|    399|			goto bad;
  125|  22.8k|		if (SurrogateMin <= l && l <= SurrogateMax)
  ------------------
  |  Branch (125:7): [True: 8.42k, False: 14.3k]
  |  Branch (125:28): [True: 197, False: 8.23k]
  ------------------
  126|    197|			goto bad;
  127|  22.6k|		*rune = (Rune)l;
  128|  22.6k|		return 3;
  129|  22.8k|	}
  130|       |
  131|  14.8k|	if (length <= 3)
  ------------------
  |  Branch (131:6): [True: 86, False: 14.7k]
  ------------------
  132|     86|		goto badlen;
  133|       |
  134|       |	/*
  135|       |	 * four character sequence (21-bit value)
  136|       |	 *	10000-1FFFFF => T4 Tx Tx Tx
  137|       |	 */
  138|  14.7k|	c3 = *(uchar*)(str+3) ^ Tx;
  139|  14.7k|	if (c3 & Testx)
  ------------------
  |  Branch (139:6): [True: 2.72k, False: 12.0k]
  ------------------
  140|  2.72k|		goto bad;
  141|  12.0k|	if (c < T5) {
  ------------------
  |  Branch (141:6): [True: 11.1k, False: 934]
  ------------------
  142|  11.1k|		l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
  143|  11.1k|		if (l <= Rune3 || l > Runemax)
  ------------------
  |  Branch (143:7): [True: 153, False: 10.9k]
  |  Branch (143:21): [True: 431, False: 10.5k]
  ------------------
  144|    584|			goto bad;
  145|  10.5k|		*rune = (Rune)l;
  146|  10.5k|		return 4;
  147|  11.1k|	}
  148|       |
  149|       |	// Support for 5-byte or longer UTF-8 would go here, but
  150|       |	// since we don't have that, we'll just fall through to bad.
  151|       |
  152|       |	/*
  153|       |	 * bad decoding
  154|       |	 */
  155|   417k|bad:
  156|   417k|	*rune = Bad;
  157|   417k|	return 1;
  158|  3.72k|badlen:
  159|  3.72k|	*rune = Bad;
  160|  3.72k|	return 0;
  161|       |
  162|  12.0k|}
chartorune:
  171|  92.5k|{
  172|  92.5k|	int c, c1, c2, c3;
  173|  92.5k|	long l;
  174|       |
  175|       |	/*
  176|       |	 * one character sequence
  177|       |	 *	00000-0007F => T1
  178|       |	 */
  179|  92.5k|	c = *(uchar*)str;
  180|  92.5k|	if(c < Tx) {
  ------------------
  |  Branch (180:5): [True: 88.7k, False: 3.80k]
  ------------------
  181|  88.7k|		*rune = (Rune)c;
  182|  88.7k|		return 1;
  183|  88.7k|	}
  184|       |
  185|       |	/*
  186|       |	 * two character sequence
  187|       |	 *	0080-07FF => T2 Tx
  188|       |	 */
  189|  3.80k|	c1 = *(uchar*)(str+1) ^ Tx;
  190|  3.80k|	if(c1 & Testx)
  ------------------
  |  Branch (190:5): [True: 0, False: 3.80k]
  ------------------
  191|      0|		goto bad;
  192|  3.80k|	if(c < T3) {
  ------------------
  |  Branch (192:5): [True: 2.37k, False: 1.43k]
  ------------------
  193|  2.37k|		if(c < T2)
  ------------------
  |  Branch (193:6): [True: 0, False: 2.37k]
  ------------------
  194|      0|			goto bad;
  195|  2.37k|		l = ((c << Bitx) | c1) & Rune2;
  196|  2.37k|		if(l <= Rune1)
  ------------------
  |  Branch (196:6): [True: 0, False: 2.37k]
  ------------------
  197|      0|			goto bad;
  198|  2.37k|		*rune = (Rune)l;
  199|  2.37k|		return 2;
  200|  2.37k|	}
  201|       |
  202|       |	/*
  203|       |	 * three character sequence
  204|       |	 *	0800-FFFF => T3 Tx Tx
  205|       |	 */
  206|  1.43k|	c2 = *(uchar*)(str+2) ^ Tx;
  207|  1.43k|	if(c2 & Testx)
  ------------------
  |  Branch (207:5): [True: 0, False: 1.43k]
  ------------------
  208|      0|		goto bad;
  209|  1.43k|	if(c < T4) {
  ------------------
  |  Branch (209:5): [True: 834, False: 600]
  ------------------
  210|    834|		l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
  211|    834|		if(l <= Rune2)
  ------------------
  |  Branch (211:6): [True: 0, False: 834]
  ------------------
  212|      0|			goto bad;
  213|    834|		if (SurrogateMin <= l && l <= SurrogateMax)
  ------------------
  |  Branch (213:7): [True: 440, False: 394]
  |  Branch (213:28): [True: 0, False: 440]
  ------------------
  214|      0|			goto bad;
  215|    834|		*rune = (Rune)l;
  216|    834|		return 3;
  217|    834|	}
  218|       |
  219|       |	/*
  220|       |	 * four character sequence (21-bit value)
  221|       |	 *	10000-1FFFFF => T4 Tx Tx Tx
  222|       |	 */
  223|    600|	c3 = *(uchar*)(str+3) ^ Tx;
  224|    600|	if (c3 & Testx)
  ------------------
  |  Branch (224:6): [True: 0, False: 600]
  ------------------
  225|      0|		goto bad;
  226|    600|	if (c < T5) {
  ------------------
  |  Branch (226:6): [True: 600, False: 0]
  ------------------
  227|    600|		l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
  228|    600|		if (l <= Rune3 || l > Runemax)
  ------------------
  |  Branch (228:7): [True: 0, False: 600]
  |  Branch (228:21): [True: 0, False: 600]
  ------------------
  229|      0|			goto bad;
  230|    600|		*rune = (Rune)l;
  231|    600|		return 4;
  232|    600|	}
  233|       |
  234|       |	/*
  235|       |	 * Support for 5-byte or longer UTF-8 would go here, but
  236|       |	 * since we don't have that, we'll just fall through to bad.
  237|       |	 */
  238|       |
  239|       |	/*
  240|       |	 * bad decoding
  241|       |	 */
  242|      0|bad:
  243|      0|	*rune = Bad;
  244|      0|	return 1;
  245|    600|}
isvalidcharntorune:
  249|   352k|{
  250|   352k|	*consumed = charntorune(rune, str, length);
  251|   352k|	return *rune != Runeerror || *consumed == 3;
  ------------------
  |  Branch (251:9): [True: 143k, False: 208k]
  |  Branch (251:31): [True: 0, False: 208k]
  ------------------
  252|   352k|}

_ZN4i18n12phonenumbers11UnicodeText4Repr7reserveEi:
  109|  6.43k|void UnicodeText::Repr::reserve(int new_capacity) {
  110|       |  // If there's already enough capacity, and we're an owner, do nothing.
  111|  6.43k|  if (capacity_ >= new_capacity && ours_) return;
  ------------------
  |  Branch (111:7): [True: 0, False: 6.43k]
  |  Branch (111:36): [True: 0, False: 0]
  ------------------
  112|       |
  113|       |  // Otherwise, allocate a new buffer.
  114|  6.43k|  capacity_ = max(new_capacity, (3 * capacity_) / 2 + 20);
  115|  6.43k|  char* new_data = new char[capacity_];
  116|       |
  117|       |  // If there is an old buffer, copy it into the new buffer.
  118|  6.43k|  if (data_) {
  ------------------
  |  Branch (118:7): [True: 0, False: 6.43k]
  ------------------
  119|      0|    memcpy(new_data, data_, size_);
  120|      0|    if (ours_) delete[] data_;  // If we owned the old buffer, free it.
  ------------------
  |  Branch (120:9): [True: 0, False: 0]
  ------------------
  121|      0|  }
  122|  6.43k|  data_ = new_data;
  123|  6.43k|  ours_ = true;  // We own the new buffer.
  124|       |  // size_ is unchanged.
  125|  6.43k|}
_ZN4i18n12phonenumbers11UnicodeText4Repr6resizeEi:
  127|  6.43k|void UnicodeText::Repr::resize(int new_size) {
  128|  6.43k|  if (new_size == 0) {
  ------------------
  |  Branch (128:7): [True: 0, False: 6.43k]
  ------------------
  129|      0|    clear();
  130|  6.43k|  } else {
  131|  6.43k|    if (!ours_ || new_size > capacity_) reserve(new_size);
  ------------------
  |  Branch (131:9): [True: 0, False: 6.43k]
  |  Branch (131:19): [True: 6.43k, False: 0]
  ------------------
  132|       |    // Clear the memory in the expanded part.
  133|  6.43k|    if (size_ < new_size) memset(data_ + size_, 0, new_size - size_);
  ------------------
  |  Branch (133:9): [True: 6.43k, False: 0]
  ------------------
  134|  6.43k|    size_ = new_size;
  135|  6.43k|    ours_ = true;
  136|  6.43k|  }
  137|  6.43k|}
_ZN4i18n12phonenumbers11UnicodeText4Repr4CopyEPKci:
  148|  6.43k|void UnicodeText::Repr::Copy(const char* data, int size) {
  149|  6.43k|  resize(size);
  150|  6.43k|  memcpy(data_, data, size);
  151|  6.43k|}
_ZN4i18n12phonenumbers11UnicodeText4Repr7PointToEPKci:
  162|   237k|void UnicodeText::Repr::PointTo(const char* data, int size) {
  163|   237k|  if (ours_ && data_) delete[] data_;  // If we owned the old buffer, free it.
  ------------------
  |  Branch (163:7): [True: 237k, False: 0]
  |  Branch (163:16): [True: 0, False: 237k]
  ------------------
  164|   237k|  data_ = const_cast<char*>(data);
  165|   237k|  size_ = size;
  166|   237k|  capacity_ = size;
  167|   237k|  ours_ = false;
  168|   237k|}
_ZN4i18n12phonenumbers11UnicodeTextC2Ev:
  196|   243k|UnicodeText::UnicodeText() {
  197|   243k|}
_ZN4i18n12phonenumbers11UnicodeText13UTF8SubstringERKNS1_14const_iteratorES4_:
  212|   176k|                                  const const_iterator& last) {
  213|   176k|  assert(first <= last && "Incompatible iterators");
  214|   176k|  return string(first.it_, last.it_ - first.it_);
  215|   176k|}
_ZN4i18n12phonenumbers11UnicodeText11PointToUTF8EPKci:
  271|   243k|UnicodeText& UnicodeText::PointToUTF8(const char* buffer, int byte_length) {
  272|   243k|  repr_.utf8_was_valid_ = UniLib:: IsInterchangeValid(buffer, byte_length);
  273|   243k|  if (repr_.utf8_was_valid_) {
  ------------------
  |  Branch (273:7): [True: 237k, False: 6.43k]
  ------------------
  274|   237k|    repr_.PointTo(buffer, byte_length);
  275|   237k|  } else {
  276|  6.43k|    LOG(WARNING) << "UTF-8 buffer is not interchange-valid.";
  277|  6.43k|    repr_.Copy(buffer, byte_length);
  278|  6.43k|    repr_.size_ = ConvertToInterchangeValid(repr_.data_, byte_length);
  279|  6.43k|  }
  280|   243k|  return *this;
  281|   243k|}
_ZN4i18n12phonenumbers11UnicodeTextD2Ev:
  363|   243k|UnicodeText::~UnicodeText() {}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorC2Ev:
  417|  61.3k|UnicodeText::const_iterator::const_iterator() : it_(0) {}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorC2ERKS2_:
  420|   760k|    : it_(other.it_) {
  421|   760k|}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratoraSERKS2_:
  424|  61.3k|UnicodeText::const_iterator::operator=(const const_iterator& other) {
  425|  61.3k|  if (&other != this)
  ------------------
  |  Branch (425:7): [True: 61.3k, False: 0]
  ------------------
  426|  61.3k|    it_ = other.it_;
  427|  61.3k|  return *this;
  428|  61.3k|}
_ZNK4i18n12phonenumbers11UnicodeText5beginEv:
  430|   386k|UnicodeText::const_iterator UnicodeText::begin() const {
  431|   386k|  return const_iterator(repr_.data_);
  432|   386k|}
_ZNK4i18n12phonenumbers11UnicodeText3endEv:
  434|  1.05M|UnicodeText::const_iterator UnicodeText::end() const {
  435|  1.05M|  return const_iterator(repr_.data_ + repr_.size_);
  436|  1.05M|}
_ZN4i18n12phonenumbersltERKNS0_11UnicodeText14const_iteratorES4_:
  439|   176k|               const UnicodeText::const_iterator& rhs) {
  440|   176k|  return lhs.it_ < rhs.it_;
  441|   176k|}
_ZNK4i18n12phonenumbers11UnicodeText14const_iteratordeEv:
  443|   667k|char32 UnicodeText::const_iterator::operator*() const {
  444|       |  // (We could call chartorune here, but that does some
  445|       |  // error-checking, and we're guaranteed that our data is valid
  446|       |  // UTF-8. Also, we expect this routine to be called very often. So
  447|       |  // for speed, we do the calculation ourselves.)
  448|       |
  449|       |  // Convert from UTF-8
  450|   667k|  uint8 byte1 = static_cast<uint8>(it_[0]);
  451|   667k|  if (byte1 < 0x80)
  ------------------
  |  Branch (451:7): [True: 663k, False: 3.99k]
  ------------------
  452|   663k|    return byte1;
  453|       |
  454|  3.99k|  uint8 byte2 = static_cast<uint8>(it_[1]);
  455|  3.99k|  if (byte1 < 0xE0)
  ------------------
  |  Branch (455:7): [True: 1.30k, False: 2.68k]
  ------------------
  456|  1.30k|    return ((byte1 & 0x1F) << 6)
  457|  1.30k|          | (byte2 & 0x3F);
  458|       |
  459|  2.68k|  uint8 byte3 = static_cast<uint8>(it_[2]);
  460|  2.68k|  if (byte1 < 0xF0)
  ------------------
  |  Branch (460:7): [True: 1.48k, False: 1.20k]
  ------------------
  461|  1.48k|    return ((byte1 & 0x0F) << 12)
  462|  1.48k|         | ((byte2 & 0x3F) << 6)
  463|  1.48k|         |  (byte3 & 0x3F);
  464|       |
  465|  1.20k|  uint8 byte4 = static_cast<uint8>(it_[3]);
  466|  1.20k|  return ((byte1 & 0x07) << 18)
  467|  1.20k|       | ((byte2 & 0x3F) << 12)
  468|  1.20k|       | ((byte3 & 0x3F) << 6)
  469|  1.20k|       |  (byte4 & 0x3F);
  470|  2.68k|}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorppEv:
  472|   696k|UnicodeText::const_iterator& UnicodeText::const_iterator::operator++() {
  473|   696k|  it_ += UniLib::OneCharLen(it_);
  474|   696k|  return *this;
  475|   696k|}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratormmEv:
  477|   183k|UnicodeText::const_iterator& UnicodeText::const_iterator::operator--() {
  478|   188k|  while (UniLib::IsTrailByte(*--it_)) { }
  ------------------
  |  Branch (478:10): [True: 5.43k, False: 183k]
  ------------------
  479|   183k|  return *this;
  480|   183k|}
_ZNK4i18n12phonenumbers11UnicodeText14const_iterator8get_utf8EPc:
  482|   261k|int UnicodeText::const_iterator::get_utf8(char* utf8_output) const {
  483|   261k|  utf8_output[0] = it_[0];
  484|   261k|  if (static_cast<unsigned char>(it_[0]) < 0x80)
  ------------------
  |  Branch (484:7): [True: 257k, False: 4.41k]
  ------------------
  485|   257k|    return 1;
  486|       |
  487|  4.41k|  utf8_output[1] = it_[1];
  488|  4.41k|  if (static_cast<unsigned char>(it_[0]) < 0xE0)
  ------------------
  |  Branch (488:7): [True: 2.31k, False: 2.09k]
  ------------------
  489|  2.31k|    return 2;
  490|       |
  491|  2.09k|  utf8_output[2] = it_[2];
  492|  2.09k|  if (static_cast<unsigned char>(it_[0]) < 0xF0)
  ------------------
  |  Branch (492:7): [True: 1.05k, False: 1.03k]
  ------------------
  493|  1.05k|    return 3;
  494|       |
  495|  1.03k|  utf8_output[3] = it_[3];
  496|  1.03k|  return 4;
  497|  2.09k|}
unicodetext.cc:_ZN4i18n12phonenumbersL25ConvertToInterchangeValidEPci:
   58|  6.43k|static int ConvertToInterchangeValid(char* start, int len) {
   59|       |  // This routine is called only when we've discovered that a UTF-8 buffer
   60|       |  // that was passed to CopyUTF8, TakeOwnershipOfUTF8, or PointToUTF8
   61|       |  // was not interchange valid. This indicates a bug in the caller, and
   62|       |  // a LOG(WARNING) is done in that case.
   63|       |  // This is similar to CoerceToInterchangeValid, but it replaces each
   64|       |  // structurally valid byte with a space, and each non-interchange
   65|       |  // character with a space, even when that character requires more
   66|       |  // than one byte in UTF8. E.g., "\xEF\xB7\x90" (U+FDD0) is
   67|       |  // structurally valid UTF8, but U+FDD0 is not an interchange-valid
   68|       |  // code point. The result should contain one space, not three.
   69|       |  //
   70|       |  // Since the conversion never needs to write more data than it
   71|       |  // reads, it is safe to change the buffer in place. It returns the
   72|       |  // number of bytes written.
   73|  6.43k|  char* const in = start;
   74|  6.43k|  char* out = start;
   75|  6.43k|  char* const end = start + len;
   76|   358k|  while (start < end) {
  ------------------
  |  Branch (76:10): [True: 356k, False: 2.78k]
  ------------------
   77|   356k|    int good = UniLib::SpanInterchangeValid(start, static_cast<int>(end - start));
   78|   356k|    if (good > 0) {
  ------------------
  |  Branch (78:9): [True: 76.3k, False: 279k]
  ------------------
   79|  76.3k|      if (out != start) {
  ------------------
  |  Branch (79:11): [True: 3.40k, False: 72.9k]
  ------------------
   80|  3.40k|        memmove(out, start, good);
   81|  3.40k|      }
   82|  76.3k|      out += good;
   83|  76.3k|      start += good;
   84|  76.3k|      if (start == end) {
  ------------------
  |  Branch (84:11): [True: 3.65k, False: 72.6k]
  ------------------
   85|  3.65k|        break;
   86|  3.65k|      }
   87|  76.3k|    }
   88|       |    // Is the current string invalid UTF8 or just non-interchange UTF8?
   89|   352k|    Rune rune;
   90|   352k|    int n;
   91|   352k|    if (isvalidcharntorune(start, static_cast<int>(end - start), &rune, &n)) {
  ------------------
  |  Branch (91:9): [True: 143k, False: 208k]
  ------------------
   92|       |      // structurally valid UTF8, but not interchange valid
   93|   143k|      start += n;  // Skip over the whole character.
   94|   208k|    } else {  // bad UTF8
   95|   208k|      start += 1;  // Skip over just one byte
   96|   208k|    }
   97|   352k|    *out++ = ' ';
   98|   352k|  }
   99|  6.43k|  return static_cast<int>(out - in);
  100|  6.43k|}

_ZN4i18n12phonenumberseqERKNS0_11UnicodeText14const_iteratorES4_:
  214|  1.02M|    friend bool operator==(const CI& lhs, const CI& rhs) {
  215|  1.02M|      return lhs.it_ == rhs.it_; }
_ZN4i18n12phonenumbersneERKNS0_11UnicodeText14const_iteratorES4_:
  216|   967k|    friend bool operator!=(const CI& lhs, const CI& rhs) {
  217|   967k|      return !(lhs == rhs); }
_ZN4i18n12phonenumbersleERKNS0_11UnicodeText14const_iteratorES4_:
  221|   176k|    friend bool operator<=(const CI& lhs, const CI& rhs) {
  222|   176k|      return !(rhs < lhs); }
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorC2EPKc:
  242|  1.44M|    explicit const_iterator(const char* it) : it_(it) {}
_ZN4i18n12phonenumbers11UnicodeText22const_reverse_iteratorC2ENS1_14const_iteratorE:
  253|   115k|        std::reverse_iterator<const_iterator>(it) {}
_ZNK4i18n12phonenumbers11UnicodeText22const_reverse_iterator8get_utf8EPc:
  258|   147k|    int get_utf8(char* buf) const {
  259|   147k|      const_iterator tmp_it = base();
  260|   147k|      return (--tmp_it).get_utf8(buf);
  261|   147k|    }
_ZNK4i18n12phonenumbers11UnicodeText12UTF8WasValidEv:
  317|   243k|  bool UTF8WasValid() const { return repr_.utf8_was_valid_; }
_ZN4i18n12phonenumbers11UnicodeText4ReprC2Ev:
  340|   243k|    Repr() : data_(NULL), size_(0), capacity_(0), ours_(true), utf8_was_valid_(true) {}
_ZN4i18n12phonenumbers11UnicodeText4ReprD2Ev:
  341|   243k|    ~Repr() { if (ours_) delete[] data_; }
  ------------------
  |  Branch (341:19): [True: 6.43k, False: 237k]
  ------------------

_ZN4i18n12phonenumbers6UniLib20SpanInterchangeValidEPKci:
   48|   599k|int SpanInterchangeValid(const char* begin, int byte_length) {
   49|   599k|  Rune rune;
   50|   599k|  const char* p = begin;
   51|   599k|  const char* end = begin + byte_length;
   52|  4.04M|  while (p < end) {
  ------------------
  |  Branch (52:10): [True: 3.80M, False: 240k]
  ------------------
   53|  3.80M|    int bytes_consumed = charntorune(&rune, p, static_cast<int>(end - p));
   54|       |    // We want to accept Runeerror == U+FFFD as a valid char, but it is used
   55|       |    // by chartorune to indicate error. Luckily, the real codepoint is size 3
   56|       |    // while errors return bytes_consumed <= 1.
   57|  3.80M|    if ((rune == Runeerror && bytes_consumed <= 1) ||
  ------------------
  |  Branch (57:10): [True: 212k, False: 3.58M]
  |  Branch (57:31): [True: 212k, False: 104]
  ------------------
   58|  3.80M|        !IsInterchangeValidCodepoint(rune)) {
  ------------------
  |  Branch (58:9): [True: 146k, False: 3.44M]
  ------------------
   59|   358k|      break;  // Found
   60|   358k|    }
   61|  3.44M|    p += bytes_consumed;
   62|  3.44M|  }
   63|   599k|  return static_cast<int>(p - begin);
   64|   599k|}
unilib.cc:_ZN4i18n12phonenumbers6UniLib12_GLOBAL__N_127IsInterchangeValidCodepointEi:
   39|  3.58M|inline bool IsInterchangeValidCodepoint(char32 c) {
   40|  3.58M|  return !((c >= 0x00 && c <= 0x08) || c == 0x0B || (c >= 0x0E && c <= 0x1F) ||
  ------------------
  |  Branch (40:13): [True: 3.58M, False: 0]
  |  Branch (40:26): [True: 123k, False: 3.46M]
  |  Branch (40:40): [True: 1.53k, False: 3.46M]
  |  Branch (40:54): [True: 3.44M, False: 22.3k]
  |  Branch (40:67): [True: 16.8k, False: 3.42M]
  ------------------
   41|  3.58M|           (c >= 0x7F && c <= 0x9F) ||
  ------------------
  |  Branch (41:13): [True: 55.1k, False: 3.39M]
  |  Branch (41:26): [True: 4.38k, False: 50.7k]
  ------------------
   42|  3.58M|           (c >= 0xD800 && c <= 0xDFFF) ||
  ------------------
  |  Branch (42:13): [True: 18.4k, False: 3.42M]
  |  Branch (42:28): [True: 0, False: 18.4k]
  ------------------
   43|  3.58M|           (c >= 0xFDD0 && c <= 0xFDEF) || (c&0xFFFE) == 0xFFFE);
  ------------------
  |  Branch (43:13): [True: 18.2k, False: 3.42M]
  |  Branch (43:28): [True: 144, False: 18.0k]
  |  Branch (43:44): [True: 214, False: 3.44M]
  ------------------
   44|  3.58M|}

_ZN4i18n12phonenumbers6UniLib10OneCharLenEPKc:
   62|   745k|inline int OneCharLen(const char* src) {
   63|   745k|  return kUTF8LenTbl[*reinterpret_cast<const uint8*>(src)];
   64|   745k|}
_ZN4i18n12phonenumbers6UniLib11IsTrailByteEc:
   72|   234k|inline bool IsTrailByte(char x) {
   73|       |  // return (x & 0xC0) == 0x80;
   74|       |  // Since trail bytes are always in [0x80, 0xBF], we can optimize:
   75|   234k|  return static_cast<signed char>(x) < -0x40;
   76|   234k|}
_ZN4i18n12phonenumbers6UniLib18IsInterchangeValidEPKci:
   88|   243k|inline bool IsInterchangeValid(const char* src, int byte_length) {
   89|   243k|  return (byte_length == SpanInterchangeValid(src, byte_length));
   90|   243k|}

_Z15ConsumeLeniencyR18FuzzedDataProvider:
   37|  8.27k|    FuzzedDataProvider& fuzzed_data) {
   38|  8.27k|  switch (fuzzed_data.ConsumeIntegralInRange(0, 3)) {
   39|  2.46k|    case 0:
  ------------------
  |  Branch (39:5): [True: 2.46k, False: 5.81k]
  ------------------
   40|  2.46k|      return i18n::phonenumbers::PhoneNumberMatcher::Leniency::POSSIBLE;
   41|  1.90k|    case 1:
  ------------------
  |  Branch (41:5): [True: 1.90k, False: 6.37k]
  ------------------
   42|  1.90k|      return i18n::phonenumbers::PhoneNumberMatcher::Leniency::VALID;
   43|  1.96k|    case 2:
  ------------------
  |  Branch (43:5): [True: 1.96k, False: 6.31k]
  ------------------
   44|  1.96k|      return i18n::phonenumbers::PhoneNumberMatcher::Leniency::STRICT_GROUPING;
   45|  1.94k|    default:
  ------------------
  |  Branch (45:5): [True: 1.94k, False: 6.33k]
  ------------------
   46|  1.94k|      return i18n::phonenumbers::PhoneNumberMatcher::Leniency::EXACT_GROUPING;
   47|  8.27k|  }
   48|  8.27k|}
LLVMFuzzerTestOneInput:
   50|  8.27k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   51|       |  // Setup the data provider and util
   52|  8.27k|  FuzzedDataProvider fuzzed_data(data, size);
   53|  8.27k|  i18n::phonenumbers::PhoneNumberUtil* phone_util = 
   54|  8.27k|      i18n::phonenumbers::PhoneNumberUtil::GetInstance();
   55|       |
   56|       |  // this should be enought to get at least 2 matches
   57|  8.27k|  std::string text = fuzzed_data.ConsumeBytesAsString(128);
   58|       |
   59|       |  // the region is either 2 or 3 characters long
   60|  8.27k|  bool region_is_2_bytes = fuzzed_data.ConsumeBool();
   61|  8.27k|  std::string region = fuzzed_data.ConsumeBytesAsString(region_is_2_bytes ? 2 : 3);
  ------------------
  |  Branch (61:57): [True: 6.77k, False: 1.50k]
  ------------------
   62|       |
   63|       |  // setup fuzzed data for matchers
   64|  8.27k|  i18n::phonenumbers::PhoneNumberMatcher::Leniency leniency = 
   65|  8.27k|    ConsumeLeniency(fuzzed_data);
   66|  8.27k|  int max_tries = fuzzed_data.ConsumeIntegralInRange(0, 500);
   67|  8.27k|  bool full_match = fuzzed_data.ConsumeBool();
   68|  8.27k|  std::string regexp_string = fuzzed_data.ConsumeRandomLengthString(32);
   69|       |
   70|       |
   71|       |  // initialize and fuzz the built-in matcher
   72|  8.27k|  i18n::phonenumbers::PhoneNumberMatcher matcher(*phone_util, text, region, 
   73|  8.27k|      leniency, max_tries);
   74|  13.2k|  while (matcher.HasNext()) {
  ------------------
  |  Branch (74:10): [True: 4.99k, False: 8.27k]
  ------------------
   75|  4.99k|    i18n::phonenumbers::PhoneNumberMatch match;
   76|  4.99k|    matcher.Next(&match);
   77|  4.99k|  }
   78|       |
   79|       |  // fuzz the matching with the icu adapter
   80|  8.27k|  std::string matched_string;
   81|  8.27k|  i18n::phonenumbers::ICURegExpFactory factory;
   82|  8.27k|  std::unique_ptr<i18n::phonenumbers::RegExp> regexp(
   83|  8.27k|    factory.CreateRegExp(regexp_string));
   84|  8.27k|  regexp->Match(text, full_match, &matched_string);
   85|       |
   86|  8.27k|  return 0;
   87|  8.27k|}

