LLVMFuzzerTestOneInput:
   19|  2.51k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   20|       |
   21|  2.51k|    if (Size < kMinInputLength || Size > kMaxInputLength) {
  ------------------
  |  |   16|  5.02k|#define kMinInputLength 10
  ------------------
                  if (Size < kMinInputLength || Size > kMaxInputLength) {
  ------------------
  |  |   17|  2.50k|#define kMaxInputLength 5120
  ------------------
  |  Branch (21:9): [True: 6, False: 2.50k]
  |  Branch (21:35): [True: 15, False: 2.48k]
  ------------------
   22|     21|        return 1;
   23|     21|    }
   24|       |
   25|  2.48k|    std::string data(Data, Data + Size);
   26|  2.48k|    std::vector<char> text(data.begin(), data.end());
   27|  2.48k|    text.push_back('\0');
   28|       |
   29|  2.48k|    try {
   30|  2.48k|        Wt::rapidxml::xml_document<> doc;
   31|  2.48k|        doc.parse<0>(&text[0]);
   32|  2.48k|        Wt::Utils::fixSelfClosingTags(&doc);
   33|  2.48k|    } catch( ... ) {/*...*/}
   34|       |
   35|  2.48k|    return 0;
   36|  2.48k|}

_ZN2Wt4Json5ArrayC2Ev:
   15|      2|  : Impl()
   16|      2|{ }

_ZN2Wt4Json6ObjectC2Ev:
   17|      2|{ }

_ZN2Wt4Json5ValueC2Ev:
   87|      2|{ }
_ZN2Wt4Json5ValueC2Eb:
   90|      4|  : v_(value)
   91|      4|{ }

_ZN2WtorENS_11OrientationES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_11OrientationEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_11OrientationEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZN2WtorENS_4SideES0_:
  370|  1.03k|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|  1.03k|  Wt::WFlags<EnumType> retval(l);                                       \
  372|  1.03k|  retval |= r;                                                          \
  373|  1.03k|  return retval;                                                        \
  374|  1.03k|}                                                                       \
_ZN2Wt6WFlagsINS_4SideEEC2ES1_:
  187|  1.03k|  flags_(static_cast<unsigned int>(flag))
  188|  1.03k|{
  189|  1.03k|}
_ZN2Wt6WFlagsINS_4SideEEoRES1_:
  327|  1.03k|{
  328|  1.03k|  flags_ |= static_cast<unsigned int>(other);
  329|  1.03k|  return *this;
  330|  1.03k|}
_ZN2WtorENS_13AlignmentFlagES0_:
  370|    692|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    692|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    692|  retval |= r;                                                          \
  373|    692|  return retval;                                                        \
  374|    692|}                                                                       \
_ZN2Wt6WFlagsINS_13AlignmentFlagEEC2ES1_:
  187|    692|  flags_(static_cast<unsigned int>(flag))
  188|    692|{
  189|    692|}
_ZN2Wt6WFlagsINS_13AlignmentFlagEEoRES1_:
  327|    692|{
  328|    692|  flags_ |= static_cast<unsigned int>(other);
  329|    692|  return *this;
  330|    692|}
_ZN2WtorENS_9MatchFlagES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_9MatchFlagEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_9MatchFlagEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZNK2Wt6WFlagsINS_4SideEEorES1_:
  313|  1.38k|{
  314|  1.38k|  return WFlags<EnumType>::createFromInt
  315|  1.38k|    (flags_ | static_cast<unsigned int>(other));
  316|  1.38k|}
_ZN2Wt6WFlagsINS_4SideEE13createFromIntEi:
  173|  1.38k|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|  1.38k|    return WFlags(flags, false);
  175|  1.38k|  }
_ZN2Wt6WFlagsINS_4SideEEC2Eib:
  172|  1.38k|  WFlags(int flags, bool): flags_(flags) {}
_ZNK2Wt6WFlagsINS_13AlignmentFlagEEorES1_:
  313|  2.76k|{
  314|  2.76k|  return WFlags<EnumType>::createFromInt
  315|  2.76k|    (flags_ | static_cast<unsigned int>(other));
  316|  2.76k|}
_ZN2Wt6WFlagsINS_13AlignmentFlagEE13createFromIntEi:
  173|  2.76k|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|  2.76k|    return WFlags(flags, false);
  175|  2.76k|  }
_ZN2Wt6WFlagsINS_13AlignmentFlagEEC2Eib:
  172|  2.76k|  WFlags(int flags, bool): flags_(flags) {}
_ZNK2Wt6WFlagsINS_9MatchFlagEEorES1_:
  313|  1.38k|{
  314|  1.38k|  return WFlags<EnumType>::createFromInt
  315|  1.38k|    (flags_ | static_cast<unsigned int>(other));
  316|  1.38k|}
_ZN2Wt6WFlagsINS_9MatchFlagEE13createFromIntEi:
  173|  1.38k|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|  1.38k|    return WFlags(flags, false);
  175|  1.38k|  }
_ZN2Wt6WFlagsINS_9MatchFlagEEC2Eib:
  172|  1.38k|  WFlags(int flags, bool): flags_(flags) {}
_ZN2WtorENS_19ValidationStyleFlagES0_:
  370|     58|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|     58|  Wt::WFlags<EnumType> retval(l);                                       \
  372|     58|  retval |= r;                                                          \
  373|     58|  return retval;                                                        \
  374|     58|}                                                                       \
_ZN2Wt6WFlagsINS_19ValidationStyleFlagEEC2ES1_:
  187|     58|  flags_(static_cast<unsigned int>(flag))
  188|     58|{
  189|     58|}
_ZN2Wt6WFlagsINS_19ValidationStyleFlagEEoRES1_:
  327|     58|{
  328|     58|  flags_ |= static_cast<unsigned int>(other);
  329|     58|  return *this;
  330|     58|}
_ZN2WtorENS_7WSlider12TickPositionES1_:
  370|      2|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|      2|  Wt::WFlags<EnumType> retval(l);                                       \
  372|      2|  retval |= r;                                                          \
  373|      2|  return retval;                                                        \
  374|      2|}                                                                       \
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEoRES2_:
  327|      2|{
  328|      2|  flags_ |= static_cast<unsigned int>(other);
  329|      2|  return *this;
  330|      2|}
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEC2ES2_:
  187|      2|  flags_(static_cast<unsigned int>(flag))
  188|      2|{
  189|      2|}
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEC2ENS_11NoFlagsTypeE:
  193|      2|  : flags_(0)
  194|      2|{ }

_ZN2Wt26WJavaScriptExposableObjectC2Ev:
   17|      2|  : clientBinding_(nullptr)
   18|      2|{ }
_ZNK2Wt26WJavaScriptExposableObject17isJavaScriptBoundEv:
   46|      2|{
   47|      2|  return clientBinding_;
   48|      2|}
_ZNK2Wt26WJavaScriptExposableObject15checkModifiableEv:
   93|      2|{
   94|      2|  if (isJavaScriptBound()) {
  ------------------
  |  Branch (94:7): [True: 0, False: 2]
  ------------------
   95|      0|    throw WException("Trying to modify a JavaScript bound object!");
   96|      0|  }
   97|      2|}

_ZN2Wt7WLengthC2Ev:
   24|      2|  : auto_(true),
   25|      2|    unit_(LengthUnit::Pixel),
   26|      2|    value_(-1)
   27|      2|{ }

_ZN2Wt7WLocaleC2Ev:
   16|      2|  : decimalPoint_("."),
   17|      2|    groupSeparator_(""),
   18|      2|    dateFormat_("yyyy-MM-dd"),
   19|      2|    timeFormat_("HH:mm:ss"),
   20|      2|    dateTimeFormat_("yyyy-MM-dd HH:mm:ss"),
   21|      2|    timeZone_(nullptr)
   22|      2|{ }

_ZN2Wt7WLoggerC2Ev:
  247|      2|  : o_(&std::cerr),
  248|      2|    ownStream_(false),
  249|      2|    useLock_(true)
  250|      2|{
  251|      2|  Rule r;
  252|      2|  r.type = "*";
  253|      2|  r.scope = "*";
  254|      2|  r.include = true;
  255|      2|  rules_.push_back(r);
  256|      2|  r.type = "debug";
  257|      2|  r.include = false;
  258|      2|  rules_.push_back(r);
  259|      2|}

_ZN2Wt7WStringC2Ev:
   28|      2|  : impl_(nullptr)
   29|      2|{ }
_ZN2Wt7WStringC2EPKcNS_12CharEncodingE:
   71|      6|  : impl_(nullptr)
   72|      6|{
   73|      6|  if (value) {
  ------------------
  |  Branch (73:7): [True: 6, False: 0]
  ------------------
   74|      6|    if (realEncoding(encoding) == CharEncoding::UTF8)
  ------------------
  |  Branch (74:9): [True: 6, False: 0]
  ------------------
   75|      6|      utf8_ = value;
   76|      0|    else
   77|      0|      utf8_ = Wt::toUTF8(value);
   78|      6|  }
   79|      6|}
_ZN2Wt7WString12realEncodingENS_12CharEncodingE:
  613|      6|{
  614|      6|  return encoding == CharEncoding::Default
  ------------------
  |  Branch (614:10): [True: 6, False: 0]
  ------------------
  615|      6|    ? defaultEncoding_ : encoding;
  616|      6|}

_ZN2Wt10WTransformC2Ev:
   29|      2|{
   30|      2|  reset();
   31|      2|}
_ZN2Wt10WTransform5resetEv:
  105|      2|{
  106|      2|  checkModifiable();
  107|      2|  m_[M11] = m_[M22] = 1;
  108|      2|  m_[M21] = m_[M12] = m_[M13] = m_[M23] = 0;
  109|      2|}

_ZN2Wt8rapidxml11memory_poolIcED2Ev:
  416|  2.48k|        {
  417|  2.48k|            clear();
  418|  2.48k|        }
_ZN2Wt8rapidxml11memory_poolIcE5clearEv:
  541|  2.48k|        {
  542|  2.54k|            while (m_begin != m_static_memory)
  ------------------
  |  Branch (542:20): [True: 52, False: 2.48k]
  ------------------
  543|     52|            {
  544|     52|                char *previous_begin = reinterpret_cast<header *>(align(m_begin))->previous_begin;
  545|     52|                if (m_free_func)
  ------------------
  |  Branch (545:21): [True: 0, False: 52]
  ------------------
  546|      0|                    m_free_func(m_begin);
  547|     52|                else
  548|     52|                    delete[] m_begin;
  549|     52|                m_begin = previous_begin;
  550|     52|            }
  551|  2.48k|            init();
  552|  2.48k|        }
_ZN2Wt8rapidxml11memory_poolIcE5alignEPc:
  589|  60.3k|        {
  590|  60.3k|            std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  60.3k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  60.3k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  60.3k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  591|  60.3k|            return ptr + alignment;
  592|  60.3k|        }
_ZN2Wt8rapidxml11memory_poolIcE4initEv:
  582|  4.97k|        {
  583|  4.97k|            m_begin = m_static_memory;
  584|  4.97k|            m_ptr = align(m_begin);
  585|  4.97k|            m_end = m_static_memory + sizeof(m_static_memory);
  586|  4.97k|        }
_ZN2Wt8rapidxml12xml_documentIcEC2Ev:
 1380|  2.48k|            : xml_node<Ch>(node_document)
 1381|  2.48k|        {
 1382|  2.48k|        }
_ZN2Wt8rapidxml8xml_nodeIcEC2ENS0_9node_typeE:
  917|  55.6k|            : m_type(type)
  918|  55.6k|            , m_first_node(0)
  919|  55.6k|            , m_first_attribute(0)
  920|  55.6k|        {
  921|  55.6k|        }
_ZN2Wt8rapidxml8xml_baseIcEC2Ev:
  673|  57.7k|            : m_name(0)
  674|  57.7k|            , m_value(0)
  675|  57.7k|            , m_parent(0)
  676|  57.7k|        {
  677|  57.7k|        }
_ZN2Wt8rapidxml11memory_poolIcEC2Ev:
  406|  2.48k|            : m_alloc_func(0)
  407|  2.48k|            , m_free_func(0)
  408|  2.48k|        {
  409|  2.48k|            init();
  410|  2.48k|        }
_ZN2Wt8rapidxml12xml_documentIcE5parseILi0EEEvPc:
 1397|  2.48k|        {
 1398|  2.48k|            assert(text);
 1399|       |            
 1400|       |            // Remove current contents
 1401|  2.48k|            this->remove_all_nodes();
 1402|  2.48k|            this->remove_all_attributes();
 1403|       |            
 1404|       |            // Parse BOM, if any
 1405|  2.48k|            parse_bom<Flags>(text);
 1406|       |            
 1407|       |            // Parse children
 1408|  12.9k|            while (1)
  ------------------
  |  Branch (1408:20): [True: 10.8k, Folded]
  ------------------
 1409|  10.8k|            {
 1410|       |                // Skip whitespace before node
 1411|  10.8k|                skip<whitespace_pred, Flags>(text);
 1412|  10.8k|                if (*text == 0)
  ------------------
  |  Branch (1412:21): [True: 341, False: 10.5k]
  ------------------
 1413|    341|                    break;
 1414|       |
 1415|       |                // Parse and append new child
 1416|  10.5k|                if (*text == Ch('<'))
  ------------------
  |  Branch (1416:21): [True: 10.4k, False: 62]
  ------------------
 1417|  10.4k|                {
 1418|  10.4k|                    ++text;     // Skip '<'
 1419|  10.4k|                    if (xml_node<Ch> *node = parse_node<Flags>(text))
  ------------------
  |  Branch (1419:39): [True: 2.76k, False: 7.67k]
  ------------------
 1420|  2.76k|                        this->append_node(node);
 1421|  10.4k|                }
 1422|     62|                else
 1423|     62|                    RAPIDXML_PARSE_ERROR("expected <", text);
  ------------------
  |  |   60|     62|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1424|  10.5k|            }
 1425|       |
 1426|  2.48k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16remove_all_nodesEv:
 1204|  2.48k|        {
 1205|  2.48k|            for (xml_node<Ch> *node = first_node(); node; node = node->m_next_sibling)
  ------------------
  |  Branch (1205:53): [True: 0, False: 2.48k]
  ------------------
 1206|      0|                node->m_parent = 0;
 1207|  2.48k|            m_first_node = 0;
 1208|  2.48k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE10first_nodeEPKcmb:
  952|  48.3k|        {
  953|  48.3k|            if (name)
  ------------------
  |  Branch (953:17): [True: 0, False: 48.3k]
  ------------------
  954|      0|            {
  955|      0|                if (name_size == 0)
  ------------------
  |  Branch (955:21): [True: 0, False: 0]
  ------------------
  956|      0|                    name_size = internal::measure(name);
  957|      0|                for (xml_node<Ch> *child = m_first_node; child; child = child->next_sibling())
  ------------------
  |  Branch (957:58): [True: 0, False: 0]
  ------------------
  958|      0|                    if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (958:25): [True: 0, False: 0]
  ------------------
  959|      0|                        return child;
  960|      0|                return 0;
  961|      0|            }
  962|  48.3k|            else
  963|  48.3k|                return m_first_node;
  964|  48.3k|        }
_ZNK2Wt8rapidxml8xml_baseIcE4nameEv:
  689|  15.2k|        {
  690|  15.2k|            return m_name ? m_name : nullstr();
  ------------------
  |  Branch (690:20): [True: 15.0k, False: 254]
  ------------------
  691|  15.2k|        }
_ZN2Wt8rapidxml8xml_baseIcE7nullstrEv:
  794|  11.7k|        {
  795|  11.7k|            static Ch zero = Ch('\0');
  796|  11.7k|            return &zero;
  797|  11.7k|        }
_ZNK2Wt8rapidxml8xml_baseIcE9name_sizeEv:
  697|  15.2k|        {
  698|  15.2k|            return m_name ? m_name_size : 0;
  ------------------
  |  Branch (698:20): [True: 15.0k, False: 254]
  ------------------
  699|  15.2k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE12next_siblingEPKcmb:
 1020|  9.51k|        {
 1021|  9.51k|            assert(this->m_parent);     // Cannot query for siblings if node has no parent
 1022|  9.51k|            if (name)
  ------------------
  |  Branch (1022:17): [True: 0, False: 9.51k]
  ------------------
 1023|      0|            {
 1024|      0|                if (name_size == 0)
  ------------------
  |  Branch (1024:21): [True: 0, False: 0]
  ------------------
 1025|      0|                    name_size = internal::measure(name);
 1026|      0|                for (xml_node<Ch> *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling)
  ------------------
  |  Branch (1026:62): [True: 0, False: 0]
  ------------------
 1027|      0|                    if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        return sibling;
 1029|      0|                return 0;
 1030|      0|            }
 1031|  9.51k|            else
 1032|  9.51k|                return m_next_sibling;
 1033|  9.51k|        }
_ZN2Wt8rapidxml8xml_nodeIcE21remove_all_attributesEv:
 1325|  2.48k|        {
 1326|  2.48k|            for (xml_attribute<Ch> *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute)
  ------------------
  |  Branch (1326:68): [True: 0, False: 2.48k]
  ------------------
 1327|      0|                attribute->m_parent = 0;
 1328|  2.48k|            m_first_attribute = 0;
 1329|  2.48k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE15first_attributeEPKcmb:
 1041|  4.60k|        {
 1042|  4.60k|            if (name)
  ------------------
  |  Branch (1042:17): [True: 0, False: 4.60k]
  ------------------
 1043|      0|            {
 1044|      0|                if (name_size == 0)
  ------------------
  |  Branch (1044:21): [True: 0, False: 0]
  ------------------
 1045|      0|                    name_size = internal::measure(name);
 1046|      0|                for (xml_attribute<Ch> *attribute = m_first_attribute; attribute; attribute = attribute->m_next_attribute)
  ------------------
  |  Branch (1046:72): [True: 0, False: 0]
  ------------------
 1047|      0|                    if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (1047:25): [True: 0, False: 0]
  ------------------
 1048|      0|                        return attribute;
 1049|      0|                return 0;
 1050|      0|            }
 1051|  4.60k|            else
 1052|  4.60k|                return m_first_attribute;
 1053|  4.60k|        }
_ZN2Wt8rapidxml12xml_documentIcE9parse_bomILi0EEEvRPc:
 1883|  2.48k|        {
 1884|       |            // UTF-8?
 1885|  2.48k|            if (static_cast<unsigned char>(text[0]) == 0xEF && 
  ------------------
  |  Branch (1885:17): [True: 32, False: 2.45k]
  ------------------
 1886|     32|                static_cast<unsigned char>(text[1]) == 0xBB && 
  ------------------
  |  Branch (1886:17): [True: 20, False: 12]
  ------------------
 1887|     20|                static_cast<unsigned char>(text[2]) == 0xBF)
  ------------------
  |  Branch (1887:17): [True: 7, False: 13]
  ------------------
 1888|      7|            {
 1889|      7|                text += 3;      // Skup utf-8 bom
 1890|      7|            }
 1891|  2.48k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_15whitespace_predELi0EEEvRPc:
 1711|  51.1k|        {
 1712|  51.1k|            Ch *tmp = text;
 1713|  54.2k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 3.12k, False: 51.1k]
  ------------------
 1714|  3.12k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  51.1k|            text = tmp;
 1717|  51.1k|        }
_ZN2Wt8rapidxml12xml_documentIcE15whitespace_pred4testEc:
 1446|  55.6k|            {
 1447|  55.6k|                return internal::lookup_tables<0>::lookup_whitespace[static_cast<unsigned char>(ch)];
 1448|  55.6k|            }
_ZN2Wt8rapidxml12xml_documentIcE9next_charILi0EEEvRPc:
 1700|  78.1k|        {
 1701|  78.1k|	  if (Flags & parse_validate_utf8) {
  ------------------
  |  Branch (1701:8): [Folded, False: 78.1k]
  ------------------
 1702|      0|	    Ch *dest = 0;
 1703|      0|	    copy_check_utf8(const_cast<const Ch *&>(text), dest);
 1704|      0|	  } else
 1705|  78.1k|	    ++text;
 1706|  78.1k|	}
_ZN2Wt8rapidxml12xml_documentIcE10parse_nodeILi0EEEPNS0_8xml_nodeIcEERPc:
 2239|  41.5k|        {
 2240|       |            // Parse proper node type
 2241|  41.5k|            switch (text[0])
 2242|  41.5k|            {
 2243|       |
 2244|       |            // <...
 2245|  33.9k|            default: 
  ------------------
  |  Branch (2245:13): [True: 33.9k, False: 7.56k]
  ------------------
 2246|       |                // Parse and append element node
 2247|  33.9k|                return parse_element<Flags>(text);
 2248|       |
 2249|       |            // <?...
 2250|  2.34k|            case Ch('?'): 
  ------------------
  |  Branch (2250:13): [True: 2.34k, False: 39.1k]
  ------------------
 2251|  2.34k|                ++text;     // Skip ?
 2252|  2.34k|                if ((text[0] == Ch('x') || text[0] == Ch('X')) &&
  ------------------
  |  Branch (2252:22): [True: 1.34k, False: 1.00k]
  |  Branch (2252:44): [True: 580, False: 422]
  ------------------
 2253|  1.92k|                    (text[1] == Ch('m') || text[1] == Ch('M')) && 
  ------------------
  |  Branch (2253:22): [True: 1.08k, False: 834]
  |  Branch (2253:44): [True: 261, False: 573]
  ------------------
 2254|  1.34k|                    (text[2] == Ch('l') || text[2] == Ch('L')) &&
  ------------------
  |  Branch (2254:22): [True: 434, False: 915]
  |  Branch (2254:44): [True: 433, False: 482]
  ------------------
 2255|    867|                    whitespace_pred::test(text[3]))
  ------------------
  |  Branch (2255:21): [True: 319, False: 548]
  ------------------
 2256|    319|                {
 2257|       |                    // '<?xml ' - xml declaration
 2258|    319|                    text += 4;      // Skip 'xml '
 2259|    319|                    return parse_xml_declaration<Flags>(text);
 2260|    319|                }
 2261|  2.02k|                else
 2262|  2.02k|                {
 2263|       |                    // Parse PI
 2264|  2.02k|                    return parse_pi<Flags>(text);
 2265|  2.02k|                }
 2266|       |            
 2267|       |            // <!...
 2268|  5.22k|            case Ch('!'): 
  ------------------
  |  Branch (2268:13): [True: 5.22k, False: 36.3k]
  ------------------
 2269|       |
 2270|       |                // Parse proper subset of <! node
 2271|  5.22k|                switch (text[1])    
  ------------------
  |  Branch (2271:25): [True: 4.03k, False: 1.19k]
  ------------------
 2272|  5.22k|                {
 2273|       |                
 2274|       |                // <!-
 2275|    462|                case Ch('-'):
  ------------------
  |  Branch (2275:17): [True: 462, False: 4.76k]
  ------------------
 2276|    462|                    if (text[2] == Ch('-'))
  ------------------
  |  Branch (2276:25): [True: 241, False: 221]
  ------------------
 2277|    241|                    {
 2278|       |                        // '<!--' - xml comment
 2279|    241|                        text += 3;     // Skip '!--'
 2280|    241|                        return parse_comment<Flags>(text);
 2281|    241|                    }
 2282|    221|                    break;
 2283|       |
 2284|       |                // <![
 2285|  1.61k|                case Ch('['):
  ------------------
  |  Branch (2285:17): [True: 1.61k, False: 3.60k]
  ------------------
 2286|  1.61k|                    if (text[2] == Ch('C') && text[3] == Ch('D') && text[4] == Ch('A') && 
  ------------------
  |  Branch (2286:25): [True: 1.39k, False: 218]
  |  Branch (2286:47): [True: 1.19k, False: 206]
  |  Branch (2286:69): [True: 973, False: 217]
  ------------------
 2287|    973|                        text[5] == Ch('T') && text[6] == Ch('A') && text[7] == Ch('['))
  ------------------
  |  Branch (2287:25): [True: 759, False: 214]
  |  Branch (2287:47): [True: 535, False: 224]
  |  Branch (2287:69): [True: 335, False: 200]
  ------------------
 2288|    335|                    {
 2289|       |                        // '<![CDATA[' - cdata
 2290|    335|                        text += 8;     // Skip '![CDATA['
 2291|    335|                        return parse_cdata<Flags>(text);
 2292|    335|                    }
 2293|  1.27k|                    break;
 2294|       |
 2295|       |                // <!D
 2296|  1.95k|                case Ch('D'):
  ------------------
  |  Branch (2296:17): [True: 1.95k, False: 3.26k]
  ------------------
 2297|  1.95k|                    if (text[2] == Ch('O') && text[3] == Ch('C') && text[4] == Ch('T') && 
  ------------------
  |  Branch (2297:25): [True: 1.56k, False: 387]
  |  Branch (2297:47): [True: 1.35k, False: 215]
  |  Branch (2297:69): [True: 1.13k, False: 213]
  ------------------
 2298|  1.13k|                        text[5] == Ch('Y') && text[6] == Ch('P') && text[7] == Ch('E') && 
  ------------------
  |  Branch (2298:25): [True: 930, False: 209]
  |  Branch (2298:47): [True: 721, False: 209]
  |  Branch (2298:69): [True: 520, False: 201]
  ------------------
 2299|    520|                        whitespace_pred::test(text[8]))
  ------------------
  |  Branch (2299:25): [True: 288, False: 232]
  ------------------
 2300|    288|                    {
 2301|       |                        // '<!DOCTYPE ' - doctype
 2302|    288|                        text += 9;      // skip '!DOCTYPE '
 2303|    288|                        return parse_doctype<Flags>(text);
 2304|    288|                    }
 2305|       |
 2306|  5.22k|                }   // switch
 2307|       |
 2308|       |                // Attempt to skip other, unrecognized node types starting with <!
 2309|  4.35k|                ++text;     // Skip !
 2310|  19.4k|                while (*text != Ch('>'))
  ------------------
  |  Branch (2310:24): [True: 15.3k, False: 4.16k]
  ------------------
 2311|  15.3k|                {
 2312|  15.3k|                    if (*text == 0)
  ------------------
  |  Branch (2312:25): [True: 195, False: 15.1k]
  ------------------
 2313|    195|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    195|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2314|  15.1k|		    next_char<Flags>(text);
 2315|  15.1k|                }
 2316|  4.16k|                ++text;     // Skip '>'
 2317|  4.16k|                return 0;   // No node recognized
 2318|       |
 2319|  41.5k|            }
 2320|  41.5k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_elementILi0EEEPNS0_8xml_nodeIcEERPc:
 2195|  33.9k|        {
 2196|       |            // Create element node
 2197|  33.9k|            xml_node<Ch> *element = this->allocate_node(node_element);
 2198|       |
 2199|       |            // Extract element name
 2200|  33.9k|            Ch *name = text;
 2201|  33.9k|            skip<node_name_pred, Flags>(text);
 2202|  33.9k|            if (text == name)
  ------------------
  |  Branch (2202:17): [True: 15, False: 33.9k]
  ------------------
 2203|     15|                RAPIDXML_PARSE_ERROR("expected element name", text);
  ------------------
  |  |   60|     15|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2204|  33.9k|            element->name(name, text - name);
 2205|       |            
 2206|       |            // Skip whitespace between element name and attributes or >
 2207|  33.9k|            skip<whitespace_pred, Flags>(text);
 2208|       |
 2209|       |            // Parse attributes, if any
 2210|  33.9k|            parse_node_attributes<Flags>(text, element);
 2211|       |
 2212|       |            // Determine ending type
 2213|  33.9k|            if (*text == Ch('>'))
  ------------------
  |  Branch (2213:17): [True: 26.9k, False: 7.05k]
  ------------------
 2214|  26.9k|            {
 2215|  26.9k|                ++text;
 2216|  26.9k|                parse_node_contents<Flags>(text, element);
 2217|  26.9k|            }
 2218|  7.05k|            else if (*text == Ch('/'))
  ------------------
  |  Branch (2218:22): [True: 6.28k, False: 773]
  ------------------
 2219|  6.28k|            {
 2220|  6.28k|                ++text;
 2221|  6.28k|                if (*text != Ch('>'))
  ------------------
  |  Branch (2221:21): [True: 11, False: 6.26k]
  ------------------
 2222|     11|                    RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|     11|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2223|  6.26k|                ++text;
 2224|  6.26k|            }
 2225|    773|            else
 2226|    773|                RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|    773|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2227|       |
 2228|       |            // Place zero terminator after name
 2229|  33.1k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2229:17): [True: 6.98k, Folded]
  ------------------
 2230|  6.98k|                element->name()[element->name_size()] = Ch('\0');
 2231|       |
 2232|       |            // Return parsed element
 2233|  33.1k|            return element;
 2234|  33.9k|        }
_ZN2Wt8rapidxml11memory_poolIcE13allocate_nodeENS0_9node_typeEPKcS5_mm:
  433|  53.1k|        {
  434|  53.1k|            void *memory = allocate_aligned(sizeof(xml_node<Ch>));
  435|  53.1k|            xml_node<Ch> *node = new(memory) xml_node<Ch>(type);
  436|  53.1k|            if (name)
  ------------------
  |  Branch (436:17): [True: 0, False: 53.1k]
  ------------------
  437|      0|            {
  438|      0|                if (name_size > 0)
  ------------------
  |  Branch (438:21): [True: 0, False: 0]
  ------------------
  439|      0|                    node->name(name, name_size);
  440|      0|                else
  441|      0|                    node->name(name);
  442|      0|            }
  443|  53.1k|            if (value)
  ------------------
  |  Branch (443:17): [True: 0, False: 53.1k]
  ------------------
  444|      0|            {
  445|      0|                if (value_size > 0)
  ------------------
  |  Branch (445:21): [True: 0, False: 0]
  ------------------
  446|      0|                    node->value(value, value_size);
  447|      0|                else
  448|      0|                    node->value(value);
  449|      0|            }
  450|  53.1k|            return node;
  451|  53.1k|        }
_ZN2Wt8rapidxml11memory_poolIcE16allocate_alignedEm:
  615|  55.2k|        {
  616|       |            // Calculate aligned pointer
  617|  55.2k|            char *result = align(m_ptr);
  618|       |
  619|       |            // If not enough memory left in current pool, allocate a new pool
  620|  55.2k|            if (result + size > m_end)
  ------------------
  |  Branch (620:17): [True: 52, False: 55.1k]
  ------------------
  621|     52|            {
  622|       |                // Calculate required pool size (may be bigger than RAPIDXML_DYNAMIC_POOL_SIZE)
  623|     52|                std::size_t pool_size = RAPIDXML_DYNAMIC_POOL_SIZE;
  ------------------
  |  |  130|     52|    #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)
  ------------------
  624|     52|                if (pool_size < size)
  ------------------
  |  Branch (624:21): [True: 0, False: 52]
  ------------------
  625|      0|                    pool_size = size;
  626|       |                
  627|       |                // Allocate
  628|     52|                std::size_t alloc_size = sizeof(header) + (2 * RAPIDXML_ALIGNMENT - 2) + pool_size;     // 2 alignments required in worst case: one for header, one for actual allocation
  ------------------
  |  |  138|     52|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  629|     52|                char *raw_memory = allocate_raw(alloc_size);
  630|       |                    
  631|       |                // Setup new pool in allocated memory
  632|     52|                char *pool = align(raw_memory);
  633|     52|                header *new_header = reinterpret_cast<header *>(pool);
  634|     52|                new_header->previous_begin = m_begin;
  635|     52|                m_begin = raw_memory;
  636|     52|                m_ptr = pool + sizeof(header);
  637|     52|                m_end = raw_memory + alloc_size;
  638|       |
  639|       |                // Calculate aligned pointer again using new pool
  640|     52|                result = align(m_ptr);
  641|     52|            }
  642|       |
  643|       |            // Update pool and return aligned pointer
  644|  55.2k|            m_ptr = result + size;
  645|  55.2k|            return result;
  646|  55.2k|        }
_ZN2Wt8rapidxml11memory_poolIcE12allocate_rawEm:
  595|     52|        {
  596|       |            // Allocate
  597|     52|            void *memory;   
  598|     52|            if (m_alloc_func)   // Allocate memory using either user-specified allocation function or global operator new[]
  ------------------
  |  Branch (598:17): [True: 0, False: 52]
  ------------------
  599|      0|            {
  600|      0|                memory = m_alloc_func(size);
  601|      0|                assert(memory); // Allocator is not allowed to return 0, on failure it must either throw, stop the program or use longjmp
  602|      0|            }
  603|     52|            else
  604|     52|            {
  605|     52|                memory = new char[size];
  606|       |#ifdef RAPIDXML_NO_EXCEPTIONS
  607|       |                if (!memory)            // If exceptions are disabled, verify memory allocation, because new will not be able to throw bad_alloc
  608|       |                    RAPIDXML_PARSE_ERROR("out of memory", 0);
  609|       |#endif
  610|     52|            }
  611|     52|            return static_cast<char *>(memory);
  612|     52|        }
_ZN2Wt8rapidxml8xml_baseIcE5valueEPKcm:
  767|  28.5k|        {
  768|  28.5k|            m_value = const_cast<Ch *>(value);
  769|  28.5k|            m_value_size = size;
  770|  28.5k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_14node_name_predELi0EEEvRPc:
 1711|  34.7k|        {
 1712|  34.7k|            Ch *tmp = text;
 1713|  87.1k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 52.4k, False: 34.7k]
  ------------------
 1714|  52.4k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  34.7k|            text = tmp;
 1717|  34.7k|        }
_ZN2Wt8rapidxml12xml_documentIcE14node_name_pred4testEc:
 1455|  87.1k|            {
 1456|  87.1k|                return internal::lookup_tables<0>::lookup_node_name[static_cast<unsigned char>(ch)];
 1457|  87.1k|            }
_ZN2Wt8rapidxml8xml_baseIcE4nameEPKcm:
  737|  36.0k|        {
  738|  36.0k|            m_name = const_cast<Ch *>(name);
  739|  36.0k|            m_name_size = size;
  740|  36.0k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_node_attributesILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2396|  33.9k|        {
 2397|       |            // For all attributes 
 2398|  35.4k|            while (attribute_name_pred::test(*text))
  ------------------
  |  Branch (2398:20): [True: 2.11k, False: 33.3k]
  ------------------
 2399|  2.11k|            {
 2400|       |                // Extract attribute name
 2401|  2.11k|                Ch *name = text;
 2402|  2.11k|                ++text;     // Skip first character of attribute name
 2403|  2.11k|                skip<attribute_name_pred, Flags>(text);
 2404|  2.11k|                if (text == name)
  ------------------
  |  Branch (2404:21): [True: 0, False: 2.11k]
  ------------------
 2405|      0|                    RAPIDXML_PARSE_ERROR("expected attribute name", name);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2406|       |
 2407|       |                // Create new attribute
 2408|  2.11k|                xml_attribute<Ch> *attribute = this->allocate_attribute();
 2409|  2.11k|                attribute->name(name, text - name);
 2410|  2.11k|                node->append_attribute(attribute);
 2411|       |
 2412|       |                // Skip whitespace after attribute name
 2413|  2.11k|                skip<whitespace_pred, Flags>(text);
 2414|       |
 2415|       |                // Skip =
 2416|  2.11k|                if (*text != Ch('='))
  ------------------
  |  Branch (2416:21): [True: 43, False: 2.07k]
  ------------------
 2417|     43|                    RAPIDXML_PARSE_ERROR("expected =", text);
  ------------------
  |  |   60|     43|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2418|  2.07k|                ++text;
 2419|       |
 2420|       |                // Add terminating zero after name
 2421|  2.07k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2421:21): [True: 2.07k, Folded]
  ------------------
 2422|  2.07k|                    attribute->name()[attribute->name_size()] = 0;
 2423|       |
 2424|       |                // Skip whitespace after =
 2425|  2.07k|                skip<whitespace_pred, Flags>(text);
 2426|       |
 2427|       |                // Skip quote and remember if it was ' or "
 2428|  2.07k|                Ch quote = *text;
 2429|  2.07k|                if (quote != Ch('\'') && quote != Ch('"'))
  ------------------
  |  Branch (2429:21): [True: 1.21k, False: 862]
  |  Branch (2429:42): [True: 21, False: 1.19k]
  ------------------
 2430|     21|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|     21|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2431|  2.05k|                ++text;
 2432|       |
 2433|       |                // Extract attribute value and expand char refs in it
 2434|  2.05k|                Ch *value = text, *end;
 2435|  2.05k|                const int AttFlags = Flags & ~parse_normalize_whitespace;   // No whitespace normalization in attributes
 2436|  2.05k|                if (quote == Ch('\''))
  ------------------
  |  Branch (2436:21): [True: 862, False: 1.19k]
  ------------------
 2437|    862|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('\'')>, attribute_value_pure_pred<Ch('\'')>, AttFlags>(text);
 2438|  1.19k|                else
 2439|  1.19k|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('"')>, attribute_value_pure_pred<Ch('"')>, AttFlags>(text);
 2440|       |                
 2441|       |                // Set attribute value
 2442|  2.05k|                attribute->value(value, end - value);
 2443|       |                
 2444|       |                // Make sure that end quote is present
 2445|  2.05k|                if (*text != quote)
  ------------------
  |  Branch (2445:21): [True: 533, False: 1.52k]
  ------------------
 2446|    533|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|    533|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2447|  1.52k|                ++text;     // Skip quote
 2448|       |
 2449|       |                // Add terminating zero after value
 2450|  1.52k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2450:21): [True: 1.39k, Folded]
  ------------------
 2451|  1.39k|                    attribute->value()[attribute->value_size()] = 0;
 2452|       |
 2453|       |                // Skip whitespace after attribute value
 2454|  1.52k|                skip<whitespace_pred, Flags>(text);
 2455|  1.52k|            }
 2456|  33.9k|        }
_ZN2Wt8rapidxml12xml_documentIcE19attribute_name_pred4testEc:
 1464|  37.8k|            {
 1465|  37.8k|                return internal::lookup_tables<0>::lookup_attribute_name[static_cast<unsigned char>(ch)];
 1466|  37.8k|            }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_19attribute_name_predELi0EEEvRPc:
 1711|  2.11k|        {
 1712|  2.11k|            Ch *tmp = text;
 1713|  2.45k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 342, False: 2.11k]
  ------------------
 1714|    342|	      next_char<Flags>(tmp);
 1715|       |
 1716|  2.11k|            text = tmp;
 1717|  2.11k|        }
_ZN2Wt8rapidxml11memory_poolIcE18allocate_attributeEPKcS4_mm:
  464|  2.11k|        {
  465|  2.11k|            void *memory = allocate_aligned(sizeof(xml_attribute<Ch>));
  466|  2.11k|            xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>;
  467|  2.11k|            if (name)
  ------------------
  |  Branch (467:17): [True: 0, False: 2.11k]
  ------------------
  468|      0|            {
  469|      0|                if (name_size > 0)
  ------------------
  |  Branch (469:21): [True: 0, False: 0]
  ------------------
  470|      0|                    attribute->name(name, name_size);
  471|      0|                else
  472|      0|                    attribute->name(name);
  473|      0|            }
  474|  2.11k|            if (value)
  ------------------
  |  Branch (474:17): [True: 0, False: 2.11k]
  ------------------
  475|      0|            {
  476|      0|                if (value_size > 0)
  ------------------
  |  Branch (476:21): [True: 0, False: 0]
  ------------------
  477|      0|                    attribute->value(value, value_size);
  478|      0|                else
  479|      0|                    attribute->value(value);
  480|      0|            }
  481|  2.11k|            return attribute;
  482|  2.11k|        }
_ZN2Wt8rapidxml13xml_attributeIcEC2Ev:
  826|  2.11k|        {
  827|  2.11k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16append_attributeEPNS0_13xml_attributeIcEE:
 1233|  2.11k|        {
 1234|  2.11k|            assert(attribute && !attribute->parent());
 1235|  2.11k|            if (first_attribute())
  ------------------
  |  Branch (1235:17): [True: 1.02k, False: 1.09k]
  ------------------
 1236|  1.02k|            {
 1237|  1.02k|                attribute->m_prev_attribute = m_last_attribute;
 1238|  1.02k|                m_last_attribute->m_next_attribute = attribute;
 1239|  1.02k|            }
 1240|  1.09k|            else
 1241|  1.09k|            {
 1242|  1.09k|                attribute->m_prev_attribute = 0;
 1243|  1.09k|                m_first_attribute = attribute;
 1244|  1.09k|            }
 1245|  2.11k|            m_last_attribute = attribute;
 1246|  2.11k|            attribute->m_parent = this;
 1247|  2.11k|            attribute->m_next_attribute = 0;
 1248|  2.11k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc39EEENS2_25attribute_value_pure_predILc39EEELi0EEEPcRS8_:
 1724|    862|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|    862|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 862]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|    862|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|    862|            Ch *src = text;
 1739|    862|            Ch *dest = src;
 1740|  30.9k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 30.1k, False: 815]
  ------------------
 1741|  30.1k|            {
 1742|       |                // If entity translation is enabled    
 1743|  30.1k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 30.1k, Folded]
  ------------------
 1744|  30.1k|                {
 1745|       |                    // Test if replacement is needed
 1746|  30.1k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 7.84k, False: 22.3k]
  ------------------
 1747|  7.84k|                    {
 1748|  7.84k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 6.78k, False: 1.06k]
  ------------------
 1749|  7.84k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  3.07k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 3.07k, False: 4.77k]
  ------------------
 1753|  3.07k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 1.35k, False: 1.71k]
  |  Branch (1753:54): [True: 731, False: 621]
  |  Branch (1753:75): [True: 197, False: 534]
  ------------------
 1754|    197|                            {
 1755|    197|                                *dest = Ch('&');
 1756|    197|                                ++dest;
 1757|    197|                                src += 5;
 1758|    197|                                continue;
 1759|    197|                            }
 1760|  2.87k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.16k, False: 1.71k]
  |  Branch (1760:54): [True: 947, False: 214]
  |  Branch (1760:75): [True: 616, False: 331]
  |  Branch (1760:96): [True: 218, False: 398]
  ------------------
 1761|    218|                            {
 1762|    218|                                *dest = Ch('\'');
 1763|    218|                                ++dest;
 1764|    218|                                src += 6;
 1765|    218|                                continue;
 1766|    218|                            }
 1767|  2.65k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  2.65k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.41k, False: 6.43k]
  ------------------
 1771|  1.41k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 1.05k, False: 358]
  |  Branch (1771:54): [True: 654, False: 400]
  |  Branch (1771:75): [True: 457, False: 197]
  |  Branch (1771:96): [True: 240, False: 217]
  ------------------
 1772|    240|                            {
 1773|    240|                                *dest = Ch('"');
 1774|    240|                                ++dest;
 1775|    240|                                src += 6;
 1776|    240|                                continue;
 1777|    240|                            }
 1778|  1.17k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.17k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 621, False: 7.22k]
  ------------------
 1782|    621|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 392, False: 229]
  |  Branch (1782:54): [True: 194, False: 198]
  ------------------
 1783|    194|                            {
 1784|    194|                                *dest = Ch('>');
 1785|    194|                                ++dest;
 1786|    194|                                src += 4;
 1787|    194|                                continue;
 1788|    194|                            }
 1789|    427|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    802|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 802, False: 7.04k]
  ------------------
 1793|    802|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 575, False: 227]
  |  Branch (1793:54): [True: 195, False: 380]
  ------------------
 1794|    195|                            {
 1795|    195|                                *dest = Ch('<');
 1796|    195|                                ++dest;
 1797|    195|                                src += 4;
 1798|    195|                                continue;
 1799|    195|                            }
 1800|    607|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|    877|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 877, False: 6.97k]
  ------------------
 1804|    877|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 411, False: 466]
  ------------------
 1805|    411|                            {
 1806|    411|                                unsigned long code = 0;
 1807|    411|                                src += 3;   // Skip &#x
 1808|    807|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 807, Folded]
  ------------------
 1809|    807|                                {
 1810|    807|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|    807|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 411, False: 396]
  ------------------
 1812|    411|                                        break;
 1813|    396|                                    code = code * 16 + digit;
 1814|    396|                                    ++src;
 1815|    396|                                }
 1816|    411|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    411|                            }
 1818|    466|                            else
 1819|    466|                            {
 1820|    466|                                unsigned long code = 0;
 1821|    466|                                src += 2;   // Skip &#
 1822|    868|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 868, Folded]
  ------------------
 1823|    868|                                {
 1824|    868|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|    868|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 466, False: 402]
  ------------------
 1826|    466|                                        break;
 1827|    402|                                    code = code * 10 + digit;
 1828|    402|                                    ++src;
 1829|    402|                                }
 1830|    466|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    466|                            }
 1832|    877|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 830, False: 47]
  ------------------
 1833|    830|                                ++src;
 1834|     47|                            else
 1835|     47|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     47|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|    830|                            continue;
 1837|  7.84k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  5.92k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 5.92k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  5.92k|                    }
 1847|  30.1k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  28.2k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 28.2k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  28.2k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 28.2k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  28.2k|		else
 1868|  28.2k|		  *dest++ = *src++;
 1869|  28.2k|            }
 1870|       |
 1871|       |            // Return new end
 1872|    815|            text = src;
 1873|    815|            return dest;
 1874|       |
 1875|    862|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc39EEELi0EEEvRPc:
 1711|    862|        {
 1712|    862|            Ch *tmp = text;
 1713|  1.11k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 252, False: 862]
  ------------------
 1714|    252|	      next_char<Flags>(tmp);
 1715|       |
 1716|    862|            text = tmp;
 1717|    862|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc39EE4testEc:
 1515|  1.11k|            {
 1516|  1.11k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [True: 1.11k, Folded]
  ------------------
 1517|  1.11k|                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
 1518|      0|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1518:21): [Folded, False: 0]
  ------------------
 1519|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
 1520|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1521|      0|            }
_ZN2Wt8rapidxml12xml_documentIcE20attribute_value_predILc39EE4testEc:
 1501|  30.9k|            {
 1502|  30.9k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [True: 30.9k, Folded]
  ------------------
 1503|  30.9k|                    return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
 1504|      0|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1504:21): [Folded, False: 0]
  ------------------
 1505|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
 1506|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1507|      0|            }
_ZN2Wt8rapidxml12xml_documentIcE22insert_coded_characterILi0EEEvRPcm:
 1528|  3.89k|        {
 1529|  3.89k|            if (Flags & parse_no_utf8)
  ------------------
  |  Branch (1529:17): [Folded, False: 3.89k]
  ------------------
 1530|      0|            {
 1531|       |                // Insert 8-bit ASCII character
 1532|       |                // Todo: possibly verify that code is less than 256 and use replacement char otherwise?
 1533|      0|                text[0] = static_cast<unsigned char>(code);
 1534|      0|                text += 1;
 1535|      0|            }
 1536|  3.89k|            else
 1537|  3.89k|            {
 1538|       |                // Insert UTF8 sequence
 1539|  3.89k|                if (code < 0x80)    // 1 byte sequence
  ------------------
  |  Branch (1539:21): [True: 2.82k, False: 1.06k]
  ------------------
 1540|  2.82k|                {
 1541|  2.82k|		    text[0] = static_cast<unsigned char>(code);
 1542|  2.82k|                    text += 1;
 1543|  2.82k|                }
 1544|  1.06k|                else if (code < 0x800)  // 2 byte sequence
  ------------------
  |  Branch (1544:26): [True: 254, False: 811]
  ------------------
 1545|    254|                {
 1546|    254|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1547|    254|		    code >>= 6;
 1548|    254|		    text[0] = static_cast<unsigned char>(code | 0xC0);
 1549|    254|                    text += 2;
 1550|    254|                }
 1551|    811|	            else if (code < 0x10000)    // 3 byte sequence
  ------------------
  |  Branch (1551:23): [True: 262, False: 549]
  ------------------
 1552|    262|                {
 1553|    262|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1554|    262|		    code >>= 6;
 1555|    262|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1556|    262|		    code >>= 6;
 1557|    262|		    text[0] = static_cast<unsigned char>(code | 0xE0);
 1558|    262|                    text += 3;
 1559|    262|                }
 1560|    549|	            else if (code < 0x110000)   // 4 byte sequence
  ------------------
  |  Branch (1560:23): [True: 227, False: 322]
  ------------------
 1561|    227|                {
 1562|    227|		    text[3] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1563|    227|		    code >>= 6;
 1564|    227|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1565|    227|		    code >>= 6;
 1566|    227|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1567|    227|		    code >>= 6;
 1568|    227|		    text[0] = static_cast<unsigned char>(code | 0xF0);
 1569|    227|                    text += 4;
 1570|    227|                }
 1571|    322|                else    // Invalid, only codes up to 0x10FFFF are allowed in Unicode
 1572|    322|                {
 1573|    322|                    RAPIDXML_PARSE_ERROR
  ------------------
  |  |   60|    322|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1574|    322|		      (("invalid numeric character entity: "
 1575|    322|			+ std::to_string(code)).c_str(), 0);
 1576|    322|                }
 1577|  3.89k|            }
 1578|  3.89k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc34EEENS2_25attribute_value_pure_predILc34EEELi0EEEPcRS8_:
 1724|  1.19k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  1.19k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 1.19k]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|  1.19k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  1.19k|            Ch *src = text;
 1739|  1.19k|            Ch *dest = src;
 1740|  28.4k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 27.3k, False: 1.11k]
  ------------------
 1741|  27.3k|            {
 1742|       |                // If entity translation is enabled    
 1743|  27.3k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 27.3k, Folded]
  ------------------
 1744|  27.3k|                {
 1745|       |                    // Test if replacement is needed
 1746|  27.3k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 7.51k, False: 19.8k]
  ------------------
 1747|  7.51k|                    {
 1748|  7.51k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 6.62k, False: 883]
  ------------------
 1749|  7.51k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.62k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.62k, False: 4.88k]
  ------------------
 1753|  2.62k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 938, False: 1.68k]
  |  Branch (1753:54): [True: 578, False: 360]
  |  Branch (1753:75): [True: 196, False: 382]
  ------------------
 1754|    196|                            {
 1755|    196|                                *dest = Ch('&');
 1756|    196|                                ++dest;
 1757|    196|                                src += 5;
 1758|    196|                                continue;
 1759|    196|                            }
 1760|  2.43k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.29k, False: 1.13k]
  |  Branch (1760:54): [True: 1.01k, False: 279]
  |  Branch (1760:75): [True: 659, False: 360]
  |  Branch (1760:96): [True: 219, False: 440]
  ------------------
 1761|    219|                            {
 1762|    219|                                *dest = Ch('\'');
 1763|    219|                                ++dest;
 1764|    219|                                src += 6;
 1765|    219|                                continue;
 1766|    219|                            }
 1767|  2.21k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  2.21k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.27k, False: 6.23k]
  ------------------
 1771|  1.27k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 977, False: 300]
  |  Branch (1771:54): [True: 681, False: 296]
  |  Branch (1771:75): [True: 444, False: 237]
  |  Branch (1771:96): [True: 226, False: 218]
  ------------------
 1772|    226|                            {
 1773|    226|                                *dest = Ch('"');
 1774|    226|                                ++dest;
 1775|    226|                                src += 6;
 1776|    226|                                continue;
 1777|    226|                            }
 1778|  1.05k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.05k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 822, False: 6.68k]
  ------------------
 1782|    822|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 579, False: 243]
  |  Branch (1782:54): [True: 351, False: 228]
  ------------------
 1783|    351|                            {
 1784|    351|                                *dest = Ch('>');
 1785|    351|                                ++dest;
 1786|    351|                                src += 4;
 1787|    351|                                continue;
 1788|    351|                            }
 1789|    471|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    757|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 757, False: 6.75k]
  ------------------
 1793|    757|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 483, False: 274]
  |  Branch (1793:54): [True: 218, False: 265]
  ------------------
 1794|    218|                            {
 1795|    218|                                *dest = Ch('<');
 1796|    218|                                ++dest;
 1797|    218|                                src += 4;
 1798|    218|                                continue;
 1799|    218|                            }
 1800|    539|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  1.14k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 1.14k, False: 6.36k]
  ------------------
 1804|  1.14k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 606, False: 538]
  ------------------
 1805|    606|                            {
 1806|    606|                                unsigned long code = 0;
 1807|    606|                                src += 3;   // Skip &#x
 1808|  1.50k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 1.50k, Folded]
  ------------------
 1809|  1.50k|                                {
 1810|  1.50k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  1.50k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 606, False: 902]
  ------------------
 1812|    606|                                        break;
 1813|    902|                                    code = code * 16 + digit;
 1814|    902|                                    ++src;
 1815|    902|                                }
 1816|    606|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    606|                            }
 1818|    538|                            else
 1819|    538|                            {
 1820|    538|                                unsigned long code = 0;
 1821|    538|                                src += 2;   // Skip &#
 1822|  1.00k|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 1.00k, Folded]
  ------------------
 1823|  1.00k|                                {
 1824|  1.00k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|  1.00k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 538, False: 463]
  ------------------
 1826|    538|                                        break;
 1827|    463|                                    code = code * 10 + digit;
 1828|    463|                                    ++src;
 1829|    463|                                }
 1830|    538|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    538|                            }
 1832|  1.14k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 1.06k, False: 76]
  ------------------
 1833|  1.06k|                                ++src;
 1834|     76|                            else
 1835|     76|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     76|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|  1.06k|                            continue;
 1837|  7.51k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  5.15k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 5.15k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  5.15k|                    }
 1847|  27.3k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  24.9k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 24.9k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  24.9k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 24.9k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  24.9k|		else
 1868|  24.9k|		  *dest++ = *src++;
 1869|  24.9k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  1.11k|            text = src;
 1873|  1.11k|            return dest;
 1874|       |
 1875|  1.19k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc34EEELi0EEEvRPc:
 1711|  1.19k|        {
 1712|  1.19k|            Ch *tmp = text;
 1713|  1.55k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 359, False: 1.19k]
  ------------------
 1714|    359|	      next_char<Flags>(tmp);
 1715|       |
 1716|  1.19k|            text = tmp;
 1717|  1.19k|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc34EE4testEc:
 1515|  1.55k|            {
 1516|  1.55k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [Folded, False: 1.55k]
  ------------------
 1517|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
 1518|  1.55k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1518:21): [True: 1.55k, Folded]
  ------------------
 1519|  1.55k|                    return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
 1520|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1521|  1.55k|            }
_ZN2Wt8rapidxml12xml_documentIcE20attribute_value_predILc34EE4testEc:
 1501|  28.4k|            {
 1502|  28.4k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [Folded, False: 28.4k]
  ------------------
 1503|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
 1504|  28.4k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1504:21): [True: 28.4k, Folded]
  ------------------
 1505|  28.4k|                    return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
 1506|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1507|  28.4k|            }
_ZNK2Wt8rapidxml8xml_baseIcE5valueEv:
  708|  16.2k|        {
  709|  16.2k|            return m_value ? m_value : nullstr();
  ------------------
  |  Branch (709:20): [True: 4.73k, False: 11.5k]
  ------------------
  710|  16.2k|        }
_ZNK2Wt8rapidxml8xml_baseIcE10value_sizeEv:
  716|  10.5k|        {
  717|  10.5k|            return m_value ? m_value_size : 0;
  ------------------
  |  Branch (717:20): [True: 4.52k, False: 6.01k]
  ------------------
  718|  10.5k|        }
_ZN2Wt8rapidxml12xml_documentIcE19parse_node_contentsILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2325|  26.9k|        {
 2326|       |            // For all children and text
 2327|  32.6k|            while (1)
  ------------------
  |  Branch (2327:20): [True: 32.6k, Folded]
  ------------------
 2328|  32.6k|            {
 2329|       |                // Skip whitespace between > and node contents
 2330|  32.6k|                Ch *contents_start = text;      // Store start of node contents before whitespace is skipped
 2331|  32.6k|		if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2331:7): [Folded, False: 32.6k]
  ------------------
 2332|      0|		  skip<whitespace_pred, Flags>(text);
 2333|  32.6k|                Ch next_char = *text;
 2334|       |
 2335|       |            // After data nodes, instead of continuing the loop, control jumps here.
 2336|       |            // This is because zero termination inside parse_and_append_data() function
 2337|       |            // would wreak havoc with the above code.
 2338|       |            // Also, skipping whitespace after data nodes is unnecessary.
 2339|  47.4k|            after_data_node:    
 2340|       |                
 2341|       |                // Determine what comes next: node closing, child node, data node, or 0?
 2342|  47.4k|                switch (next_char)
 2343|  47.4k|                {
 2344|       |                
 2345|       |                // Node closing or child node
 2346|  31.8k|                case Ch('<'):
  ------------------
  |  Branch (2346:17): [True: 31.8k, False: 15.6k]
  ------------------
 2347|  31.8k|                    if (text[1] == Ch('/'))
  ------------------
  |  Branch (2347:25): [True: 733, False: 31.0k]
  ------------------
 2348|    733|                    {
 2349|       |                        // Node closing
 2350|    733|                        text += 2;      // Skip '</'
 2351|    733|                        if (Flags & parse_validate_closing_tags)
  ------------------
  |  Branch (2351:29): [Folded, False: 733]
  ------------------
 2352|      0|                        {
 2353|       |                            // Skip and validate closing tag name
 2354|      0|                            Ch *closing_name = text;
 2355|      0|                            skip<node_name_pred, Flags>(text);
 2356|      0|                            if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true))
  ------------------
  |  Branch (2356:33): [True: 0, False: 0]
  ------------------
 2357|      0|                                RAPIDXML_PARSE_ERROR("invalid closing tag name", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2358|      0|                        }
 2359|    733|                        else
 2360|    733|                        {
 2361|       |                            // No validation, just skip name
 2362|    733|                            skip<node_name_pred, Flags>(text);
 2363|    733|                        }
 2364|       |                        // Skip remaining whitespace after node name
 2365|    733|                        skip<whitespace_pred, Flags>(text);
 2366|    733|                        if (*text != Ch('>'))
  ------------------
  |  Branch (2366:29): [True: 21, False: 712]
  ------------------
 2367|     21|                            RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|     21|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2368|    712|                        ++text;     // Skip '>'
 2369|    712|                        return;     // Node closed, finished parsing contents
 2370|    733|                    }
 2371|  31.0k|                    else
 2372|  31.0k|                    {
 2373|       |                        // Child node
 2374|  31.0k|                        ++text;     // Skip '<'
 2375|  31.0k|                        if (xml_node<Ch> *child = parse_node<Flags>(text))
  ------------------
  |  Branch (2375:43): [True: 4.49k, False: 26.6k]
  ------------------
 2376|  4.49k|                            node->append_node(child);
 2377|  31.0k|                    }
 2378|  31.0k|                    break;
 2379|       |
 2380|       |                // End of data - error
 2381|  31.0k|                case Ch('\0'):
  ------------------
  |  Branch (2381:17): [True: 365, False: 47.1k]
  ------------------
 2382|    365|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    365|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2383|       |
 2384|       |                // Data node
 2385|  15.3k|                default:
  ------------------
  |  Branch (2385:17): [True: 15.3k, False: 32.1k]
  ------------------
 2386|  15.3k|                    next_char = parse_and_append_data<Flags>(node, text, contents_start);
 2387|  15.3k|                    goto after_data_node;   // Bypass regular processing after data nodes
 2388|       |
 2389|  47.4k|                }
 2390|  47.4k|            }
 2391|  26.9k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_and_append_dataILi0EEEcPNS0_8xml_nodeIcEERPcS7_:
 2098|  15.3k|        {
 2099|       |            // Backup to contents start if whitespace trimming is disabled
 2100|  15.3k|            if (!(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (2100:17): [True: 15.3k, Folded]
  ------------------
 2101|  15.3k|                text = contents_start;     
 2102|       |            
 2103|       |            // Skip until end of data
 2104|  15.3k|            Ch *value = text, *end;
 2105|  15.3k|            if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2105:17): [Folded, False: 15.3k]
  ------------------
 2106|      0|                end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);   
 2107|  15.3k|            else
 2108|  15.3k|                end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text);
 2109|       |
 2110|       |            // Trim trailing whitespace if flag is set; leading was already trimmed by whitespace skip after >
 2111|  15.3k|            if (Flags & parse_trim_whitespace)
  ------------------
  |  Branch (2111:17): [Folded, False: 15.3k]
  ------------------
 2112|      0|            {
 2113|      0|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2113:21): [Folded, False: 0]
  ------------------
 2114|      0|                {
 2115|       |                    // Whitespace is already condensed to single space characters by skipping function, so just trim 1 char off the end
 2116|      0|                    if (*(end - 1) == Ch(' '))
  ------------------
  |  Branch (2116:25): [True: 0, False: 0]
  ------------------
 2117|      0|                        --end;
 2118|      0|                }
 2119|      0|                else
 2120|      0|                {
 2121|       |                    // Backup until non-whitespace character is found
 2122|      0|                    while (whitespace_pred::test(*(end - 1)))
  ------------------
  |  Branch (2122:28): [True: 0, False: 0]
  ------------------
 2123|      0|                        --end;
 2124|      0|                }
 2125|      0|            }
 2126|       |            
 2127|       |            // If characters are still left between end and value (this test is only necessary if normalization is enabled)
 2128|       |            // Create new data node
 2129|  15.3k|            if (!(Flags & parse_no_data_nodes))
  ------------------
  |  Branch (2129:17): [True: 14.8k, Folded]
  ------------------
 2130|  14.8k|            {
 2131|  14.8k|                xml_node<Ch> *data = this->allocate_node(node_data);
 2132|  14.8k|                data->value(value, end - value);
 2133|  14.8k|                node->append_node(data);
 2134|  14.8k|            }
 2135|       |
 2136|       |            // Add data to parent node if no data exists yet
 2137|  15.3k|            if (!(Flags & parse_no_element_values)) 
  ------------------
  |  Branch (2137:17): [True: 14.8k, Folded]
  ------------------
 2138|  14.8k|                if (*node->value() == Ch('\0'))
  ------------------
  |  Branch (2138:21): [True: 11.5k, False: 3.33k]
  ------------------
 2139|  11.5k|                    node->value(value, end - value);
 2140|       |
 2141|       |            // Place zero terminator after value
 2142|  15.3k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2142:17): [True: 14.8k, Folded]
  ------------------
 2143|  14.8k|            {
 2144|  14.8k|                Ch ch = *text;
 2145|  14.8k|                *end = Ch('\0');
 2146|  14.8k|                return ch;      // Return character that ends data; this is required because zero terminator overwritten it
 2147|  14.8k|            }
 2148|       |
 2149|       |            // Return character that ends data
 2150|    436|            return *text;
 2151|  15.3k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_9text_predENS2_20text_pure_no_ws_predELi0EEEPcRS6_:
 1724|  15.3k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  15.3k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 15.3k]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|  15.3k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  15.3k|            Ch *src = text;
 1739|  15.3k|            Ch *dest = src;
 1740|  63.2k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 48.4k, False: 14.8k]
  ------------------
 1741|  48.4k|            {
 1742|       |                // If entity translation is enabled    
 1743|  48.4k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 48.4k, Folded]
  ------------------
 1744|  48.4k|                {
 1745|       |                    // Test if replacement is needed
 1746|  48.4k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 20.5k, False: 27.8k]
  ------------------
 1747|  20.5k|                    {
 1748|  20.5k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 8.10k, False: 12.4k]
  ------------------
 1749|  20.5k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.99k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.99k, False: 17.5k]
  ------------------
 1753|  2.99k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 1.11k, False: 1.87k]
  |  Branch (1753:54): [True: 654, False: 462]
  |  Branch (1753:75): [True: 300, False: 354]
  ------------------
 1754|    300|                            {
 1755|    300|                                *dest = Ch('&');
 1756|    300|                                ++dest;
 1757|    300|                                src += 5;
 1758|    300|                                continue;
 1759|    300|                            }
 1760|  2.69k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.52k, False: 1.16k]
  |  Branch (1760:54): [True: 1.24k, False: 285]
  |  Branch (1760:75): [True: 884, False: 358]
  |  Branch (1760:96): [True: 329, False: 555]
  ------------------
 1761|    329|                            {
 1762|    329|                                *dest = Ch('\'');
 1763|    329|                                ++dest;
 1764|    329|                                src += 6;
 1765|    329|                                continue;
 1766|    329|                            }
 1767|  2.36k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  2.36k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.86k, False: 18.6k]
  ------------------
 1771|  1.86k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 1.54k, False: 327]
  |  Branch (1771:54): [True: 1.06k, False: 480]
  |  Branch (1771:75): [True: 736, False: 324]
  |  Branch (1771:96): [True: 342, False: 394]
  ------------------
 1772|    342|                            {
 1773|    342|                                *dest = Ch('"');
 1774|    342|                                ++dest;
 1775|    342|                                src += 6;
 1776|    342|                                continue;
 1777|    342|                            }
 1778|  1.52k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.52k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 629, False: 19.9k]
  ------------------
 1782|    629|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 422, False: 207]
  |  Branch (1782:54): [True: 204, False: 218]
  ------------------
 1783|    204|                            {
 1784|    204|                                *dest = Ch('>');
 1785|    204|                                ++dest;
 1786|    204|                                src += 4;
 1787|    204|                                continue;
 1788|    204|                            }
 1789|    425|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    751|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 751, False: 19.7k]
  ------------------
 1793|    751|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 521, False: 230]
  |  Branch (1793:54): [True: 308, False: 213]
  ------------------
 1794|    308|                            {
 1795|    308|                                *dest = Ch('<');
 1796|    308|                                ++dest;
 1797|    308|                                src += 4;
 1798|    308|                                continue;
 1799|    308|                            }
 1800|    443|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  1.86k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 1.86k, False: 18.6k]
  ------------------
 1804|  1.86k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 774, False: 1.09k]
  ------------------
 1805|    774|                            {
 1806|    774|                                unsigned long code = 0;
 1807|    774|                                src += 3;   // Skip &#x
 1808|  4.50k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 4.50k, Folded]
  ------------------
 1809|  4.50k|                                {
 1810|  4.50k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  4.50k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 774, False: 3.72k]
  ------------------
 1812|    774|                                        break;
 1813|  3.72k|                                    code = code * 16 + digit;
 1814|  3.72k|                                    ++src;
 1815|  3.72k|                                }
 1816|    774|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    774|                            }
 1818|  1.09k|                            else
 1819|  1.09k|                            {
 1820|  1.09k|                                unsigned long code = 0;
 1821|  1.09k|                                src += 2;   // Skip &#
 1822|  3.44k|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 3.44k, Folded]
  ------------------
 1823|  3.44k|                                {
 1824|  3.44k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|  3.44k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 1.09k, False: 2.35k]
  ------------------
 1826|  1.09k|                                        break;
 1827|  2.35k|                                    code = code * 10 + digit;
 1828|  2.35k|                                    ++src;
 1829|  2.35k|                                }
 1830|  1.09k|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|  1.09k|                            }
 1832|  1.86k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 1.43k, False: 436]
  ------------------
 1833|  1.43k|                                ++src;
 1834|    436|                            else
 1835|    436|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|    436|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|  1.43k|                            continue;
 1837|  20.5k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  17.1k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 17.1k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  17.1k|                    }
 1847|  48.4k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  45.0k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 45.0k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  45.0k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 45.0k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  45.0k|		else
 1868|  45.0k|		  *dest++ = *src++;
 1869|  45.0k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  14.8k|            text = src;
 1873|  14.8k|            return dest;
 1874|       |
 1875|  15.3k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_20text_pure_no_ws_predELi0EEEvRPc:
 1711|  15.3k|        {
 1712|  15.3k|            Ch *tmp = text;
 1713|  20.8k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 5.56k, False: 15.3k]
  ------------------
 1714|  5.56k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  15.3k|            text = tmp;
 1717|  15.3k|        }
_ZN2Wt8rapidxml12xml_documentIcE20text_pure_no_ws_pred4testEc:
 1482|  20.8k|            {
 1483|  20.8k|                return internal::lookup_tables<0>::lookup_text_pure_no_ws[static_cast<unsigned char>(ch)];
 1484|  20.8k|            }
_ZN2Wt8rapidxml12xml_documentIcE9text_pred4testEc:
 1473|  63.2k|            {
 1474|  63.2k|                return internal::lookup_tables<0>::lookup_text[static_cast<unsigned char>(ch)];
 1475|  63.2k|            }
_ZN2Wt8rapidxml12xml_documentIcE21parse_xml_declarationILi0EEEPNS0_8xml_nodeIcEERPc:
 1896|    319|        {
 1897|       |            // If parsing of declaration is disabled
 1898|    319|            if (!(Flags & parse_declaration_node))
  ------------------
  |  Branch (1898:17): [True: 319, Folded]
  ------------------
 1899|    319|            {
 1900|       |                // Skip until end of declaration
 1901|  1.80k|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (1901:24): [True: 1.15k, False: 653]
  |  Branch (1901:46): [True: 353, False: 300]
  ------------------
 1902|  1.50k|                {
 1903|  1.50k|                    if (!text[0])
  ------------------
  |  Branch (1903:25): [True: 19, False: 1.48k]
  ------------------
 1904|     19|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     19|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1905|  1.48k|                    ++text;
 1906|  1.48k|                }
 1907|    300|                text += 2;    // Skip '?>'
 1908|    300|                return 0;
 1909|    319|            }
 1910|       |
 1911|       |            // Create declaration
 1912|      0|            xml_node<Ch> *declaration = this->allocate_node(node_declaration);
 1913|       |
 1914|       |            // Skip whitespace before attributes or ?>
 1915|      0|            skip<whitespace_pred, Flags>(text);
 1916|       |
 1917|       |            // Parse declaration attributes
 1918|      0|            parse_node_attributes<Flags>(text, declaration);
 1919|       |            
 1920|       |            // Skip ?>
 1921|      0|            if (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (1921:17): [True: 0, False: 0]
  |  Branch (1921:39): [True: 0, False: 0]
  ------------------
 1922|      0|                RAPIDXML_PARSE_ERROR("expected ?>", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1923|      0|            text += 2;
 1924|       |            
 1925|      0|            return declaration;
 1926|      0|        }
_ZN2Wt8rapidxml12xml_documentIcE8parse_piILi0EEEPNS0_8xml_nodeIcEERPc:
 2038|  2.02k|        {
 2039|       |            // If creation of PI nodes is enabled
 2040|  2.02k|            if (Flags & parse_pi_nodes)
  ------------------
  |  Branch (2040:17): [Folded, False: 2.02k]
  ------------------
 2041|      0|            {
 2042|       |                // Create pi node
 2043|      0|                xml_node<Ch> *pi = this->allocate_node(node_pi);
 2044|       |
 2045|       |                // Extract PI target name
 2046|      0|                Ch *name = text;
 2047|      0|                skip<node_name_pred, Flags>(text);
 2048|      0|                if (text == name)
  ------------------
  |  Branch (2048:21): [True: 0, False: 0]
  ------------------
 2049|      0|                    RAPIDXML_PARSE_ERROR("expected PI target", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2050|      0|                pi->name(name, text - name);
 2051|       |                
 2052|       |                // Skip whitespace between pi target and pi
 2053|      0|                skip<whitespace_pred, Flags>(text);
 2054|       |
 2055|       |                // Remember start of pi
 2056|      0|                Ch *value = text;
 2057|       |                
 2058|       |                // Skip to '?>'
 2059|      0|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (2059:24): [True: 0, False: 0]
  |  Branch (2059:46): [True: 0, False: 0]
  ------------------
 2060|      0|                {
 2061|      0|                    if (*text == Ch('\0'))
  ------------------
  |  Branch (2061:25): [True: 0, False: 0]
  ------------------
 2062|      0|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2063|      0|                    ++text;
 2064|      0|                }
 2065|       |
 2066|       |                // Set pi value (verbatim, no entity expansion or whitespace normalization)
 2067|      0|                pi->value(value, text - value);     
 2068|       |                
 2069|       |                // Place zero terminator after name and value
 2070|      0|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2070:21): [True: 0, Folded]
  ------------------
 2071|      0|                {
 2072|      0|                    pi->name()[pi->name_size()] = Ch('\0');
 2073|      0|                    pi->value()[pi->value_size()] = Ch('\0');
 2074|      0|                }
 2075|       |                
 2076|      0|                text += 2;                          // Skip '?>'
 2077|      0|                return pi;
 2078|      0|            }
 2079|  2.02k|            else
 2080|  2.02k|            {
 2081|       |                // Skip to '?>'
 2082|  12.4k|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (2082:24): [True: 9.92k, False: 2.50k]
  |  Branch (2082:46): [True: 597, False: 1.90k]
  ------------------
 2083|  10.5k|                {
 2084|  10.5k|                    if (*text == Ch('\0'))
  ------------------
  |  Branch (2084:25): [True: 118, False: 10.4k]
  ------------------
 2085|    118|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    118|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2086|  10.4k|                    ++text;
 2087|  10.4k|                }
 2088|  1.90k|                text += 2;    // Skip '?>'
 2089|  1.90k|                return 0;
 2090|  2.02k|            }
 2091|  2.02k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_commentILi0EEEPNS0_8xml_nodeIcEERPc:
 1931|    241|        {
 1932|       |            // If parsing of comments is disabled
 1933|    241|            if (!(Flags & parse_comment_nodes))
  ------------------
  |  Branch (1933:17): [True: 241, Folded]
  ------------------
 1934|    241|            {
 1935|       |                // Skip until end of comment
 1936|  1.20k|                while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
  ------------------
  |  Branch (1936:24): [True: 554, False: 653]
  |  Branch (1936:46): [True: 227, False: 426]
  |  Branch (1936:68): [True: 217, False: 209]
  ------------------
 1937|    998|                {
 1938|    998|                    if (!text[0])
  ------------------
  |  Branch (1938:25): [True: 32, False: 966]
  ------------------
 1939|     32|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     32|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1940|    966|                    ++text;
 1941|    966|                }
 1942|    209|                text += 3;     // Skip '-->'
 1943|    209|                return 0;      // Do not produce comment node
 1944|    241|            }
 1945|       |
 1946|       |            // Remember value start
 1947|      0|            Ch *value = text;
 1948|       |
 1949|       |            // Skip until end of comment
 1950|      0|            while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
  ------------------
  |  Branch (1950:20): [True: 0, False: 0]
  |  Branch (1950:42): [True: 0, False: 0]
  |  Branch (1950:64): [True: 0, False: 0]
  ------------------
 1951|      0|            {
 1952|      0|                if (!text[0])
  ------------------
  |  Branch (1952:21): [True: 0, False: 0]
  ------------------
 1953|      0|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1954|      0|                ++text;
 1955|      0|            }
 1956|       |
 1957|       |            // Create comment node
 1958|      0|            xml_node<Ch> *comment = this->allocate_node(node_comment);
 1959|      0|            comment->value(value, text - value);
 1960|       |            
 1961|       |            // Place zero terminator after comment value
 1962|      0|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (1962:17): [True: 0, Folded]
  ------------------
 1963|      0|                *text = Ch('\0');
 1964|       |            
 1965|      0|            text += 3;     // Skip '-->'
 1966|      0|            return comment;
 1967|      0|        }
_ZN2Wt8rapidxml12xml_documentIcE11parse_cdataILi0EEEPNS0_8xml_nodeIcEERPc:
 2156|    335|        {
 2157|       |            // If CDATA is disabled
 2158|    335|            if (Flags & parse_no_data_nodes)
  ------------------
  |  Branch (2158:17): [Folded, False: 335]
  ------------------
 2159|      0|            {
 2160|       |                // Skip until end of cdata
 2161|      0|                while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
  ------------------
  |  Branch (2161:24): [True: 0, False: 0]
  |  Branch (2161:46): [True: 0, False: 0]
  |  Branch (2161:68): [True: 0, False: 0]
  ------------------
 2162|      0|                {
 2163|      0|                    if (!text[0])
  ------------------
  |  Branch (2163:25): [True: 0, False: 0]
  ------------------
 2164|      0|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2165|      0|		    next_char<Flags>(text);
 2166|      0|                }
 2167|      0|                text += 3;      // Skip ]]>
 2168|      0|                return 0;       // Do not produce CDATA node
 2169|      0|            }
 2170|       |
 2171|       |            // Skip until end of cdata
 2172|    335|            Ch *value = text;
 2173|  1.18k|            while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
  ------------------
  |  Branch (2173:20): [True: 487, False: 702]
  |  Branch (2173:42): [True: 222, False: 480]
  |  Branch (2173:64): [True: 204, False: 276]
  ------------------
 2174|    913|            {
 2175|    913|                if (!text[0])
  ------------------
  |  Branch (2175:21): [True: 59, False: 854]
  ------------------
 2176|     59|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     59|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2177|    854|		next_char<Flags>(text);
 2178|    854|            }
 2179|       |
 2180|       |            // Create new cdata node
 2181|    276|            xml_node<Ch> *cdata = this->allocate_node(node_cdata);
 2182|    276|            cdata->value(value, text - value);
 2183|       |
 2184|       |            // Place zero terminator after value
 2185|    276|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2185:17): [True: 276, Folded]
  ------------------
 2186|    276|                *text = Ch('\0');
 2187|       |
 2188|    276|            text += 3;      // Skip ]]>
 2189|    276|            return cdata;
 2190|    335|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_doctypeILi0EEEPNS0_8xml_nodeIcEERPc:
 1972|    288|        {
 1973|       |            // Remember value start
 1974|    288|            Ch *value = text;
 1975|       |
 1976|       |            // Skip to >
 1977|    733|            while (*text != Ch('>'))
  ------------------
  |  Branch (1977:20): [True: 487, False: 246]
  ------------------
 1978|    487|            {
 1979|       |                // Determine character type
 1980|    487|                switch (*text)
 1981|    487|                {
 1982|       |                
 1983|       |                // If '[' encountered, scan for matching ending ']' using naive algorithm with depth
 1984|       |                // This works for all W3C test files except for 2 most wicked
 1985|    215|                case Ch('['):
  ------------------
  |  Branch (1985:17): [True: 215, False: 272]
  ------------------
 1986|    215|                {
 1987|    215|                    ++text;     // Skip '['
 1988|    215|                    int depth = 1;
 1989|    834|                    while (depth > 0)
  ------------------
  |  Branch (1989:28): [True: 637, False: 197]
  ------------------
 1990|    637|                    {
 1991|    637|                        switch (*text)
  ------------------
  |  Branch (1991:33): [True: 435, False: 202]
  ------------------
 1992|    637|                        {
 1993|    211|                            case Ch('['): ++depth; break;
  ------------------
  |  Branch (1993:29): [True: 211, False: 426]
  ------------------
 1994|    206|                            case Ch(']'): --depth; break;
  ------------------
  |  Branch (1994:29): [True: 206, False: 431]
  ------------------
 1995|     18|                            case 0: RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     18|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
  |  Branch (1995:29): [True: 18, False: 619]
  ------------------
 1996|    637|                        }
 1997|    619|                        ++text;
 1998|    619|                    }
 1999|    197|                    break;
 2000|    215|                }
 2001|       |                
 2002|       |                // Error on end of text
 2003|    197|                case Ch('\0'):
  ------------------
  |  Branch (2003:17): [True: 24, False: 463]
  ------------------
 2004|     24|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     24|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2005|       |                
 2006|       |                // Other character, skip it
 2007|    248|                default:
  ------------------
  |  Branch (2007:17): [True: 248, False: 239]
  ------------------
 2008|    248|                    ++text;
 2009|       |
 2010|    487|                }
 2011|    487|            }
 2012|       |            
 2013|       |            // If DOCTYPE nodes enabled
 2014|    246|            if (Flags & parse_doctype_node)
  ------------------
  |  Branch (2014:17): [Folded, False: 246]
  ------------------
 2015|      0|            {
 2016|       |                // Create a new doctype node
 2017|      0|                xml_node<Ch> *doctype = this->allocate_node(node_doctype);
 2018|      0|                doctype->value(value, text - value);
 2019|       |                
 2020|       |                // Place zero terminator after value
 2021|      0|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2021:21): [True: 0, Folded]
  ------------------
 2022|      0|                    *text = Ch('\0');
 2023|       |
 2024|      0|                text += 1;      // skip '>'
 2025|      0|                return doctype;
 2026|      0|            }
 2027|    246|            else
 2028|    246|            {
 2029|    246|                text += 1;      // skip '>'
 2030|    246|                return 0;
 2031|    246|            }
 2032|       |
 2033|    246|        }
_ZN2Wt8rapidxml8xml_nodeIcE11append_nodeEPS2_:
 1113|  26.1k|        {
 1114|  26.1k|            assert(child && !child->parent() && child->type() != node_document);
 1115|  26.1k|            if (first_node())
  ------------------
  |  Branch (1115:17): [True: 9.73k, False: 16.3k]
  ------------------
 1116|  9.73k|            {
 1117|  9.73k|                child->m_prev_sibling = m_last_node;
 1118|  9.73k|                m_last_node->m_next_sibling = child;
 1119|  9.73k|            }
 1120|  16.3k|            else
 1121|  16.3k|            {
 1122|  16.3k|                child->m_prev_sibling = 0;
 1123|  16.3k|                m_first_node = child;
 1124|  16.3k|            }
 1125|  26.1k|            m_last_node = child;
 1126|  26.1k|            child->m_parent = this;
 1127|  26.1k|            child->m_next_sibling = 0;
 1128|  26.1k|        }
_ZN2Wt8rapidxml11parse_errorC2EPKcPv:
   84|  2.14k|            : m_what(what)
   85|  2.14k|            , m_where(location)
   86|  2.14k|        {
   87|  2.14k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE8documentEv:
  939|  4.00k|        {
  940|  4.00k|            xml_node<Ch> *node = const_cast<xml_node<Ch> *>(this);
  941|  11.7k|            while (node->parent())
  ------------------
  |  Branch (941:20): [True: 7.72k, False: 4.00k]
  ------------------
  942|  7.72k|                node = node->parent();
  943|  4.00k|            return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
  ------------------
  |  Branch (943:20): [True: 4.00k, False: 0]
  ------------------
  944|  4.00k|        }
_ZNK2Wt8rapidxml8xml_baseIcE6parentEv:
  786|  19.4k|        {
  787|  19.4k|            return m_parent;
  788|  19.4k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE4typeEv:
  929|  4.00k|        {
  930|  4.00k|            return m_type;
  931|  4.00k|        }

_ZN2Wt10DomElement16isSelfClosingTagERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE:
 2055|  6.21k|{
 2056|  6.21k|  return (   (tag == "br")
  ------------------
  |  Branch (2056:14): [True: 804, False: 5.40k]
  ------------------
 2057|  5.40k|          || (tag == "hr")
  ------------------
  |  Branch (2057:14): [True: 340, False: 5.06k]
  ------------------
 2058|  5.06k|          || (tag == "img")
  ------------------
  |  Branch (2058:14): [True: 199, False: 4.86k]
  ------------------
 2059|  4.86k|          || (tag == "area")
  ------------------
  |  Branch (2059:14): [True: 226, False: 4.64k]
  ------------------
 2060|  4.64k|          || (tag == "col")
  ------------------
  |  Branch (2060:14): [True: 201, False: 4.44k]
  ------------------
 2061|  4.44k|          || (tag == "input")
  ------------------
  |  Branch (2061:14): [True: 234, False: 4.20k]
  ------------------
 2062|  4.20k|          || (tag == "link")
  ------------------
  |  Branch (2062:14): [True: 194, False: 4.01k]
  ------------------
 2063|  4.01k|          || (tag == "meta"));
  ------------------
  |  Branch (2063:14): [True: 3, False: 4.00k]
  ------------------
 2064|  6.21k|}
DomElement.C:_ZN12_GLOBAL__N_117createCssNamesMapB5cxx11Ev:
  117|      2|{
  118|      2|  CssPropertyMap cssNames;
  119|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePosition, std::string("position"));
  120|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleZIndex,std::string("z-index"));
  121|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFloat,std::string("float"));
  122|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleClear,std::string("clear"));
  123|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWidth,std::string("width"));
  124|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleHeight,std::string("height"));
  125|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleLineHeight,std::string("line-height"));
  126|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMinWidth,std::string("min-width"));
  127|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMinHeight,std::string("min-height"));
  128|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMaxWidth,std::string("max-width"));
  129|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMaxHeight,std::string("max-height"));
  130|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleLeft,std::string("left"));
  131|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleRight,std::string("right"));
  132|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTop,std::string("top"));
  133|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBottom,std::string("bottom"));
  134|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleInsetInline,std::string("inset-inline"));
  135|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleInsetInlineStart,std::string("inset-inline-start"));
  136|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleInsetInlineEnd,std::string("inset-inline-end"));
  137|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleInsetBlock,std::string("inset-block"));
  138|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleInsetBlockStart,std::string("inset-block-start"));
  139|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleInsetBlockEnd,std::string("inset-block-end"));
  140|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleVerticalAlign,std::string("vertical-align"));
  141|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextAlign,std::string("text-align"));
  142|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePadding,std::string("padding"));
  143|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingTop,std::string("padding-top"));
  144|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingRight,std::string("padding-right"));
  145|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingBottom,std::string("padding-bottom"));
  146|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingLeft,std::string("padding-left"));
  147|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingInline,std::string("padding-inline"));
  148|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingInlineStart,std::string("padding-inline-start"));
  149|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingInlineEnd,std::string("padding-inline-end"));
  150|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingBlock,std::string("padding-block"));
  151|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingBlockStart,std::string("padding-block-start"));
  152|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingBlockEnd,std::string("padding-block-end"));
  153|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMargin,std::string("margin"));
  154|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginTop,std::string("margin-top"));
  155|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginRight,std::string("margin-right"));
  156|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginBottom,std::string("margin-bottom"));
  157|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginLeft,std::string("margin-left"));
  158|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginInline,std::string("margin-inline"));
  159|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginInlineStart,std::string("margin-inline-start"));
  160|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginInlineEnd,std::string("margin-inline-end"));
  161|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginBlock,std::string("margin-block"));
  162|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginBlockStart,std::string("margin-block-start"));
  163|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginBlockEnd,std::string("margin-block-end"));
  164|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleCursor,std::string("cursor"));
  165|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderTop,std::string("border-top"));
  166|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderRight,std::string("border-right"));
  167|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBottom,std::string("border-bottom"));
  168|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderLeft,std::string("border-left"));
  169|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInline,std::string("border-inline"));
  170|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineStart,std::string("border-inline-start"));
  171|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineEnd,std::string("border-inline-end"));
  172|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlock,std::string("border-block"));
  173|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockStart,std::string("border-block-start"));
  174|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockEnd,std::string("border-block-end"));
  175|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorTop,std::string("border-color-top"));
  176|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorRight,std::string("border-color-right"));
  177|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorBottom,std::string("border-color-bottom"));
  178|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorLeft,std::string("border-color-left"));
  179|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineColor,std::string("border-inline-color"));
  180|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineStartColor,std::string("border-inline-start-color"));
  181|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineEndColor,std::string("border-inline-end-color"));
  182|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockColor,std::string("border-block-color"));
  183|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockStartColor,std::string("border-block-start-color"));
  184|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockEndColor,std::string("border-block-end-color"));
  185|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthTop,std::string("border-width-top"));
  186|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthRight,std::string("border-width-right"));
  187|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthBottom,std::string("border-width-bottom"));
  188|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthLeft,std::string("border-width-left"));
  189|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineWidth,std::string("border-inline-width"));
  190|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineStartWidth,std::string("border-inline-start-width"));
  191|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderInlineEndWidth,std::string("border-inline-end-width"));
  192|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockWidth,std::string("border-block-width"));
  193|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockStartWidth,std::string("border-block-start-width"));
  194|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBlockEndWidth,std::string("border-block-end-width"));
  195|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleColor,std::string("color"));
  196|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowX,std::string("overflow-x"));
  197|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowY,std::string("overflow-y"));
  198|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOpacity,std::string("opacity"));
  199|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontFamily,std::string("font-family"));
  200|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontStyle,std::string("font-style"));
  201|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontVariant,std::string("font-variant"));
  202|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontWeight,std::string("font-weight"));
  203|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontSize,std::string("font-size"));
  204|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundColor,std::string("background-color"));
  205|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundImage,std::string("background-image"));
  206|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundRepeat,std::string("background-repeat"));
  207|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundAttachment,std::string("background-attachment"));
  208|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundPosition,std::string("background-position"));
  209|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextDecoration,std::string("text-decoration"));
  210|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWhiteSpace,std::string("white-space"));
  211|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTableLayout,std::string("table-layout"));
  212|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderSpacing,std::string("border-spacing"));
  213|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  214|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakBefore,std::string("page-break-before"));
  215|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakAfter,std::string("page-break-after"));
  216|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleZoom,std::string("zoom"));
  217|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleVisibility,std::string("visibility"));
  218|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleDisplay,std::string("display"));
  219|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWebkitAppearance,std::string("-webkit-appearance"));
  220|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBoxSizing,std::string("box-sizing"));
  221|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlex,std::string("flex"));
  222|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexDirection,std::string("flex-direction"));
  223|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexFlow,std::string("flex-flow"));
  224|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleAlignSelf,std::string("align-self"));
  225|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleAnchorName,std::string("anchor-name"));
  226|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePositionAnchor,std::string("position-anchor"));
  227|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePositionArea,std::string("position-area"));
  228|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePositionTryFallbacks,std::string("position-try-fallbacks"));
  229|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleJustifyContent,std::string("justify-content"));
  230|      2|  return cssNames;
  231|      2|}
DomElement.C:_ZN12_GLOBAL__N_122createCssCamelNamesMapB5cxx11Ev:
  236|      2|{
  237|      2|  CssPropertyMap cssCamelNames;
  238|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::Style,std::string("cssText"));
  239|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePosition,std::string("position"));
  240|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZIndex,std::string("zIndex"));
  241|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFloat,std::string("cssFloat"));
  242|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleClear,std::string("clear"));
  243|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWidth,std::string("width"));
  244|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleHeight,std::string("height"));
  245|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLineHeight,std::string("lineHeight"));
  246|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinWidth,std::string("minWidth"));
  247|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinHeight,std::string("minHeight"));
  248|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxWidth,std::string("maxWidth"));
  249|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxHeight,std::string("maxHeight"));
  250|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLeft,std::string("left"));
  251|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleRight,std::string("right"));
  252|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTop,std::string("top"));
  253|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBottom,std::string("bottom"));
  254|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleInsetInline,std::string("insetInline"));
  255|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleInsetInlineStart,std::string("insetInlineStart"));
  256|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleInsetInlineEnd,std::string("insetInlineEnd"));
  257|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleInsetBlock,std::string("insetBlock"));
  258|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleInsetBlockStart,std::string("insetBlockStart"));
  259|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleInsetBlockEnd,std::string("insetBlockEnd"));
  260|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVerticalAlign,std::string("verticalAlign"));
  261|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextAlign,std::string("textAlign"));
  262|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePadding,std::string("padding"));
  263|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingTop,std::string("paddingTop"));
  264|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingRight,std::string("paddingRight"));
  265|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingBottom,std::string("paddingBottom"));
  266|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingLeft,std::string("paddingLeft"));
  267|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingInline,std::string("paddingInline"));
  268|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingInlineStart,std::string("paddingInlineStart"));
  269|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingInlineEnd,std::string("paddingInlineEnd"));
  270|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingBlock,std::string("paddingBlock"));
  271|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingBlockStart,std::string("paddingBlockStart"));
  272|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingBlockEnd,std::string("paddingBlockEnd"));
  273|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMargin,std::string("margin"));
  274|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginTop,std::string("marginTop"));
  275|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginRight,std::string("marginRight"));
  276|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginBottom,std::string("marginBottom"));
  277|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginLeft,std::string("marginLeft"));
  278|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginInline,std::string("marginInline"));
  279|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginInlineStart,std::string("marginInlineStart"));
  280|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginInlineEnd,std::string("marginInlineEnd"));
  281|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginBlock,std::string("marginBlock"));
  282|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginBlockStart,std::string("marginBlockStart"));
  283|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginBlockEnd,std::string("marginBlockEnd"));
  284|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleCursor,std::string("cursor"));
  285|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderTop,std::string("borderTop"));
  286|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderRight,std::string("borderRight"));
  287|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBottom,std::string("borderBottom"));
  288|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderLeft,std::string("borderLeft"));
  289|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInline,std::string("borderInline"));
  290|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineStart,std::string("borderInlineStart"));
  291|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineEnd,std::string("borderInlineEnd"));
  292|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlock,std::string("borderBlock"));
  293|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockStart,std::string("borderBlockStart"));
  294|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockEnd,std::string("borderBlockEnd"));
  295|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorTop,std::string("borderColorTop"));
  296|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorRight,std::string("borderColorRight"));
  297|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorBottom,std::string("borderColorBottom"));
  298|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorLeft,std::string("borderColorLeft"));
  299|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineColor,std::string("borderInlineColor"));
  300|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineStartColor,std::string("borderInlineStartColor"));
  301|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineEndColor,std::string("borderInlineEndColor"));
  302|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockColor,std::string("borderBlockColor"));
  303|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockStartColor,std::string("borderBlockStartColor"));
  304|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockEndColor,std::string("borderBlockEndColor"));
  305|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthTop,std::string("borderWidthTop"));
  306|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthRight,std::string("borderWidthRight"));
  307|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthBottom,std::string("borderWidthBottom"));
  308|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthLeft,std::string("borderWidthLeft"));
  309|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineWidth,std::string("borderInlineWidth"));
  310|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineStartWidth,std::string("borderInlineStartWidth"));
  311|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderInlineEndWidth,std::string("borderInlineEndWidth"));
  312|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockWidth,std::string("borderBlockWidth"));
  313|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockStartWidth,std::string("borderBlockStartWidth"));
  314|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBlockEndWidth,std::string("borderBlockEndWidth"));
  315|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleColor,std::string("color"));
  316|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowX,std::string("overflowX"));
  317|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowY,std::string("overflowY"));
  318|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOpacity,std::string("opacity"));
  319|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontFamily,std::string("fontFamily"));
  320|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontStyle,std::string("fontStyle"));
  321|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontVariant,std::string("fontVariant"));
  322|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontWeight,std::string("fontWeight"));
  323|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontSize,std::string("fontSize"));
  324|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundColor,std::string("backgroundColor"));
  325|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundImage,std::string("backgroundImage"));
  326|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundRepeat,std::string("backgroundRepeat"));
  327|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundAttachment,std::string("backgroundAttachment"));
  328|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundPosition,std::string("backgroundPosition"));
  329|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextDecoration,std::string("textDecoration"));
  330|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWhiteSpace,std::string("whiteSpace"));
  331|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTableLayout,std::string("tableLayout"));
  332|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderSpacing,std::string("borderSpacing"));
  333|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  334|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakBefore,std::string("pageBreakBefore"));
  335|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakAfter,std::string("pageBreakAfter"));
  336|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZoom,std::string("zoom"));
  337|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVisibility,std::string("visibility"));
  338|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleDisplay,std::string("display"));
  339|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWebkitAppearance,std::string("webKitAppearance"));
  340|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBoxSizing,std::string("boxSizing"));
  341|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlex,std::string("flex"));
  342|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexDirection,std::string("flexDirection"));
  343|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexFlow,std::string("flexFlow"));
  344|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleAlignSelf,std::string("alignSelf"));
  345|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleAnchorName,std::string("anchorName"));
  346|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePositionAnchor,std::string("positionAnchor"));
  347|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePositionArea,std::string("positionArea"));
  348|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePositionTryFallbacks,std::string("positionTryFallbacks"));
  349|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleJustifyContent,std::string("justifyContent"));
  350|      2|  return cssCamelNames;
  351|      2|}

_ZN2Wt5Utils18fixSelfClosingTagsEPNS_8rapidxml8xml_nodeIcEE:
  598|  9.85k|{
  599|  19.3k|  for (Wt::rapidxml::xml_node<> *x_child = x_node->first_node(); x_child;
  ------------------
  |  Branch (599:66): [True: 9.51k, False: 9.85k]
  ------------------
  600|  9.85k|       x_child = x_child->next_sibling())
  601|  9.51k|    fixSelfClosingTags(x_child);
  602|       |
  603|  9.85k|  if (!x_node->first_node()
  ------------------
  |  Branch (603:7): [True: 9.14k, False: 715]
  |  Branch (603:7): [True: 4.00k, False: 5.84k]
  ------------------
  604|  9.14k|      && x_node->value_size() == 0
  ------------------
  |  Branch (604:10): [True: 6.21k, False: 2.93k]
  ------------------
  605|  6.21k|      && !Wt::DomElement::isSelfClosingTag
  ------------------
  |  Branch (605:10): [True: 4.00k, False: 2.20k]
  ------------------
  606|  6.21k|      (std::string(x_node->name(), x_node->name_size()))) {
  607|       |    // We need to add an emtpy data node since <div /> is illegal HTML
  608|       |    // (but valid XML / XHTML)
  609|  4.00k|    Wt::rapidxml::xml_node<> *empty = x_node->document()->allocate_node(Wt::rapidxml::node_data);
  610|  4.00k|    x_node->append_node(empty);
  611|  4.00k|  }
  612|  9.85k|}

_ZN2Wt5Utils6insertINS_8PropertyENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRSt13unordered_mapIT_T0_St4hashISA_ESt8equal_toISA_ESaISt4pairIKSA_SB_EEERSH_RKSB_:
  260|    446|{
  261|    446|#ifndef WT_TARGET_JAVA
  262|    446|  m.insert(std::make_pair(key, value));
  263|    446|#endif // WT_TARGET_JAVA
  264|    446|}

