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

_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|    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_4SideEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_4SideEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_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|    692|{
  314|    692|  return WFlags<EnumType>::createFromInt
  315|    692|    (flags_ | static_cast<unsigned int>(other));
  316|    692|}
_ZN2Wt6WFlagsINS_4SideEE13createFromIntEi:
  173|    692|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|    692|    return WFlags(flags, false);
  175|    692|  }
_ZN2Wt6WFlagsINS_4SideEEC2Eib:
  172|    692|  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:
  236|      2|  : o_(&std::cerr),
  237|      2|    ownStream_(false),
  238|      2|    useLock_(true)
  239|      2|{
  240|      2|  Rule r;
  241|      2|  r.type = "*";
  242|      2|  r.scope = "*";
  243|      2|  r.include = true;
  244|      2|  rules_.push_back(r);
  245|      2|  r.type = "debug";
  246|      2|  r.include = false;
  247|      2|  rules_.push_back(r);
  248|      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:
  611|      6|{
  612|      6|  return encoding == CharEncoding::Default
  ------------------
  |  Branch (612:10): [True: 6, False: 0]
  ------------------
  613|      6|    ? defaultEncoding_ : encoding;
  614|      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|}

_ZN4linb3anyC2Ev:
   40|      2|        vtable(nullptr)
   41|      2|    {
   42|      2|    }
_ZN4linb3any15vtable_for_typeIbEEPNS0_11vtable_typeEv:
  285|      4|    {
  286|      4|        using VTableType = typename std::conditional<requires_allocation<T>::value, vtable_dynamic<T>, vtable_stack<T>>::type;
  287|      4|        static vtable_type table = {
  288|      4|            VTableType::type, VTableType::destroy,
  289|      4|            VTableType::copy, VTableType::move,
  290|      4|            VTableType::swap,
  291|      4|        };
  292|      4|        return &table;
  293|      4|    }
_ZN4linb3anyC2IRbvEEOT_:
   78|      4|    {
   79|      4|        static_assert(std::is_copy_constructible<typename std::decay<ValueType>::type>::value,
   80|      4|            "T shall satisfy the CopyConstructible requirements.");
   81|      4|        this->construct(std::forward<ValueType>(value));
   82|      4|    }
_ZN4linb3any9constructIRbEEvOT_:
  362|      4|    {
  363|      4|        using T = typename std::decay<ValueType>::type;
  364|       |
  365|      4|        this->vtable = vtable_for_type<T>();
  366|       |
  367|      4|        do_construct<ValueType, T>(std::forward<ValueType>(value));
  368|      4|    }
_ZN4linb3any12do_constructIRbbEENSt9enable_ifIXntsr19requires_allocationIT0_EE5valueEvE4typeEOT_:
  354|      4|    {
  355|      4|        new (&storage.stack) T(std::forward<ValueType>(value));
  356|      4|    }

_ZN2Wt8rapidxml11memory_poolIcED2Ev:
  416|  2.55k|        {
  417|  2.55k|            clear();
  418|  2.55k|        }
_ZN2Wt8rapidxml11memory_poolIcE5clearEv:
  541|  2.55k|        {
  542|  2.61k|            while (m_begin != m_static_memory)
  ------------------
  |  Branch (542:20): [True: 59, False: 2.55k]
  ------------------
  543|     59|            {
  544|     59|                char *previous_begin = reinterpret_cast<header *>(align(m_begin))->previous_begin;
  545|     59|                if (m_free_func)
  ------------------
  |  Branch (545:21): [True: 0, False: 59]
  ------------------
  546|      0|                    m_free_func(m_begin);
  547|     59|                else
  548|     59|                    delete[] m_begin;
  549|     59|                m_begin = previous_begin;
  550|     59|            }
  551|  2.55k|            init();
  552|  2.55k|        }
_ZN2Wt8rapidxml11memory_poolIcE5alignEPc:
  589|  65.6k|        {
  590|  65.6k|            std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  65.6k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  65.6k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  65.6k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  591|  65.6k|            return ptr + alignment;
  592|  65.6k|        }
_ZN2Wt8rapidxml11memory_poolIcE4initEv:
  582|  5.10k|        {
  583|  5.10k|            m_begin = m_static_memory;
  584|  5.10k|            m_ptr = align(m_begin);
  585|  5.10k|            m_end = m_static_memory + sizeof(m_static_memory);
  586|  5.10k|        }
_ZN2Wt8rapidxml12xml_documentIcEC2Ev:
 1380|  2.55k|            : xml_node<Ch>(node_document)
 1381|  2.55k|        {
 1382|  2.55k|        }
_ZN2Wt8rapidxml8xml_nodeIcEC2ENS0_9node_typeE:
  917|  60.4k|            : m_type(type)
  918|  60.4k|            , m_first_node(0)
  919|  60.4k|            , m_first_attribute(0)
  920|  60.4k|        {
  921|  60.4k|        }
_ZN2Wt8rapidxml8xml_baseIcEC2Ev:
  673|  62.8k|            : m_name(0)
  674|  62.8k|            , m_value(0)
  675|  62.8k|            , m_parent(0)
  676|  62.8k|        {
  677|  62.8k|        }
_ZN2Wt8rapidxml11memory_poolIcEC2Ev:
  406|  2.55k|            : m_alloc_func(0)
  407|  2.55k|            , m_free_func(0)
  408|  2.55k|        {
  409|  2.55k|            init();
  410|  2.55k|        }
_ZN2Wt8rapidxml12xml_documentIcE5parseILi0EEEvPc:
 1397|  2.55k|        {
 1398|  2.55k|            assert(text);
 1399|       |            
 1400|       |            // Remove current contents
 1401|  2.55k|            this->remove_all_nodes();
 1402|  2.55k|            this->remove_all_attributes();
 1403|       |            
 1404|       |            // Parse BOM, if any
 1405|  2.55k|            parse_bom<Flags>(text);
 1406|       |            
 1407|       |            // Parse children
 1408|  12.5k|            while (1)
  ------------------
  |  Branch (1408:20): [True: 10.3k, Folded]
  ------------------
 1409|  10.3k|            {
 1410|       |                // Skip whitespace before node
 1411|  10.3k|                skip<whitespace_pred, Flags>(text);
 1412|  10.3k|                if (*text == 0)
  ------------------
  |  Branch (1412:21): [True: 332, False: 10.0k]
  ------------------
 1413|    332|                    break;
 1414|       |
 1415|       |                // Parse and append new child
 1416|  10.0k|                if (*text == Ch('<'))
  ------------------
  |  Branch (1416:21): [True: 10.0k, False: 59]
  ------------------
 1417|  10.0k|                {
 1418|  10.0k|                    ++text;     // Skip '<'
 1419|  10.0k|                    if (xml_node<Ch> *node = parse_node<Flags>(text))
  ------------------
  |  Branch (1419:39): [True: 2.55k, False: 7.45k]
  ------------------
 1420|  2.55k|                        this->append_node(node);
 1421|  10.0k|                }
 1422|     59|                else
 1423|     59|                    RAPIDXML_PARSE_ERROR("expected <", text);
  ------------------
  |  |   60|     59|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1424|  10.0k|            }
 1425|       |
 1426|  2.55k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16remove_all_nodesEv:
 1204|  2.55k|        {
 1205|  2.55k|            for (xml_node<Ch> *node = first_node(); node; node = node->m_next_sibling)
  ------------------
  |  Branch (1205:53): [True: 0, False: 2.55k]
  ------------------
 1206|      0|                node->m_parent = 0;
 1207|  2.55k|            m_first_node = 0;
 1208|  2.55k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE10first_nodeEPKcmb:
  952|  47.2k|        {
  953|  47.2k|            if (name)
  ------------------
  |  Branch (953:17): [True: 0, False: 47.2k]
  ------------------
  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|  47.2k|            else
  963|  47.2k|                return m_first_node;
  964|  47.2k|        }
_ZNK2Wt8rapidxml8xml_baseIcE4nameEv:
  689|  13.6k|        {
  690|  13.6k|            return m_name ? m_name : nullstr();
  ------------------
  |  Branch (690:20): [True: 13.4k, False: 250]
  ------------------
  691|  13.6k|        }
_ZN2Wt8rapidxml8xml_baseIcE7nullstrEv:
  794|  14.2k|        {
  795|  14.2k|            static Ch zero = Ch('\0');
  796|  14.2k|            return &zero;
  797|  14.2k|        }
_ZNK2Wt8rapidxml8xml_baseIcE9name_sizeEv:
  697|  13.6k|        {
  698|  13.6k|            return m_name ? m_name_size : 0;
  ------------------
  |  Branch (698:20): [True: 13.4k, False: 250]
  ------------------
  699|  13.6k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE12next_siblingEPKcmb:
 1020|  8.32k|        {
 1021|  8.32k|            assert(this->m_parent);     // Cannot query for siblings if node has no parent
 1022|  8.32k|            if (name)
  ------------------
  |  Branch (1022:17): [True: 0, False: 8.32k]
  ------------------
 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|  8.32k|            else
 1032|  8.32k|                return m_next_sibling;
 1033|  8.32k|        }
_ZN2Wt8rapidxml8xml_nodeIcE21remove_all_attributesEv:
 1325|  2.55k|        {
 1326|  2.55k|            for (xml_attribute<Ch> *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute)
  ------------------
  |  Branch (1326:68): [True: 0, False: 2.55k]
  ------------------
 1327|      0|                attribute->m_parent = 0;
 1328|  2.55k|            m_first_attribute = 0;
 1329|  2.55k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE15first_attributeEPKcmb:
 1041|  4.99k|        {
 1042|  4.99k|            if (name)
  ------------------
  |  Branch (1042:17): [True: 0, False: 4.99k]
  ------------------
 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.99k|            else
 1052|  4.99k|                return m_first_attribute;
 1053|  4.99k|        }
_ZN2Wt8rapidxml12xml_documentIcE9parse_bomILi0EEEvRPc:
 1883|  2.55k|        {
 1884|       |            // UTF-8?
 1885|  2.55k|            if (static_cast<unsigned char>(text[0]) == 0xEF && 
  ------------------
  |  Branch (1885:17): [True: 27, False: 2.52k]
  ------------------
 1886|     27|                static_cast<unsigned char>(text[1]) == 0xBB && 
  ------------------
  |  Branch (1886:17): [True: 15, False: 12]
  ------------------
 1887|     15|                static_cast<unsigned char>(text[2]) == 0xBF)
  ------------------
  |  Branch (1887:17): [True: 3, False: 12]
  ------------------
 1888|      3|            {
 1889|      3|                text += 3;      // Skup utf-8 bom
 1890|      3|            }
 1891|  2.55k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_15whitespace_predELi0EEEvRPc:
 1711|  54.0k|        {
 1712|  54.0k|            Ch *tmp = text;
 1713|  57.1k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 3.09k, False: 54.0k]
  ------------------
 1714|  3.09k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  54.0k|            text = tmp;
 1717|  54.0k|        }
_ZN2Wt8rapidxml12xml_documentIcE15whitespace_pred4testEc:
 1446|  58.4k|            {
 1447|  58.4k|                return internal::lookup_tables<0>::lookup_whitespace[static_cast<unsigned char>(ch)];
 1448|  58.4k|            }
_ZN2Wt8rapidxml12xml_documentIcE9next_charILi0EEEvRPc:
 1700|  92.2k|        {
 1701|  92.2k|	  if (Flags & parse_validate_utf8) {
  ------------------
  |  Branch (1701:8): [Folded, False: 92.2k]
  ------------------
 1702|      0|	    Ch *dest = 0;
 1703|      0|	    copy_check_utf8(const_cast<const Ch *&>(text), dest);
 1704|      0|	  } else
 1705|  92.2k|	    ++text;
 1706|  92.2k|	}
_ZN2Wt8rapidxml12xml_documentIcE10parse_nodeILi0EEEPNS0_8xml_nodeIcEERPc:
 2239|  44.4k|        {
 2240|       |            // Parse proper node type
 2241|  44.4k|            switch (text[0])
 2242|  44.4k|            {
 2243|       |
 2244|       |            // <...
 2245|  36.5k|            default: 
  ------------------
  |  Branch (2245:13): [True: 36.5k, False: 7.89k]
  ------------------
 2246|       |                // Parse and append element node
 2247|  36.5k|                return parse_element<Flags>(text);
 2248|       |
 2249|       |            // <?...
 2250|  1.85k|            case Ch('?'): 
  ------------------
  |  Branch (2250:13): [True: 1.85k, False: 42.5k]
  ------------------
 2251|  1.85k|                ++text;     // Skip ?
 2252|  1.85k|                if ((text[0] == Ch('x') || text[0] == Ch('X')) &&
  ------------------
  |  Branch (2252:22): [True: 1.02k, False: 834]
  |  Branch (2252:44): [True: 421, False: 413]
  ------------------
 2253|  1.44k|                    (text[1] == Ch('m') || text[1] == Ch('M')) && 
  ------------------
  |  Branch (2253:22): [True: 663, False: 783]
  |  Branch (2253:44): [True: 374, False: 409]
  ------------------
 2254|  1.03k|                    (text[2] == Ch('l') || text[2] == Ch('L')) &&
  ------------------
  |  Branch (2254:22): [True: 399, False: 638]
  |  Branch (2254:44): [True: 213, False: 425]
  ------------------
 2255|    612|                    whitespace_pred::test(text[3]))
  ------------------
  |  Branch (2255:21): [True: 222, False: 390]
  ------------------
 2256|    222|                {
 2257|       |                    // '<?xml ' - xml declaration
 2258|    222|                    text += 4;      // Skip 'xml '
 2259|    222|                    return parse_xml_declaration<Flags>(text);
 2260|    222|                }
 2261|  1.63k|                else
 2262|  1.63k|                {
 2263|       |                    // Parse PI
 2264|  1.63k|                    return parse_pi<Flags>(text);
 2265|  1.63k|                }
 2266|       |            
 2267|       |            // <!...
 2268|  6.03k|            case Ch('!'): 
  ------------------
  |  Branch (2268:13): [True: 6.03k, False: 38.3k]
  ------------------
 2269|       |
 2270|       |                // Parse proper subset of <! node
 2271|  6.03k|                switch (text[1])    
  ------------------
  |  Branch (2271:25): [True: 4.84k, False: 1.18k]
  ------------------
 2272|  6.03k|                {
 2273|       |                
 2274|       |                // <!-
 2275|    462|                case Ch('-'):
  ------------------
  |  Branch (2275:17): [True: 462, False: 5.57k]
  ------------------
 2276|    462|                    if (text[2] == Ch('-'))
  ------------------
  |  Branch (2276:25): [True: 232, False: 230]
  ------------------
 2277|    232|                    {
 2278|       |                        // '<!--' - xml comment
 2279|    232|                        text += 3;     // Skip '!--'
 2280|    232|                        return parse_comment<Flags>(text);
 2281|    232|                    }
 2282|    230|                    break;
 2283|       |
 2284|       |                // <![
 2285|  2.07k|                case Ch('['):
  ------------------
  |  Branch (2285:17): [True: 2.07k, False: 3.95k]
  ------------------
 2286|  2.07k|                    if (text[2] == Ch('C') && text[3] == Ch('D') && text[4] == Ch('A') && 
  ------------------
  |  Branch (2286:25): [True: 1.76k, False: 311]
  |  Branch (2286:47): [True: 1.48k, False: 279]
  |  Branch (2286:69): [True: 1.18k, False: 304]
  ------------------
 2287|  1.18k|                        text[5] == Ch('T') && text[6] == Ch('A') && text[7] == Ch('['))
  ------------------
  |  Branch (2287:25): [True: 915, False: 267]
  |  Branch (2287:47): [True: 691, False: 224]
  |  Branch (2287:69): [True: 355, False: 336]
  ------------------
 2288|    355|                    {
 2289|       |                        // '<![CDATA[' - cdata
 2290|    355|                        text += 8;     // Skip '![CDATA['
 2291|    355|                        return parse_cdata<Flags>(text);
 2292|    355|                    }
 2293|  1.72k|                    break;
 2294|       |
 2295|       |                // <!D
 2296|  2.31k|                case Ch('D'):
  ------------------
  |  Branch (2296:17): [True: 2.31k, False: 3.72k]
  ------------------
 2297|  2.31k|                    if (text[2] == Ch('O') && text[3] == Ch('C') && text[4] == Ch('T') && 
  ------------------
  |  Branch (2297:25): [True: 1.95k, False: 357]
  |  Branch (2297:47): [True: 1.68k, False: 266]
  |  Branch (2297:69): [True: 1.46k, False: 226]
  ------------------
 2298|  1.46k|                        text[5] == Ch('Y') && text[6] == Ch('P') && text[7] == Ch('E') && 
  ------------------
  |  Branch (2298:25): [True: 1.23k, False: 225]
  |  Branch (2298:47): [True: 924, False: 312]
  |  Branch (2298:69): [True: 603, False: 321]
  ------------------
 2299|    603|                        whitespace_pred::test(text[8]))
  ------------------
  |  Branch (2299:25): [True: 321, False: 282]
  ------------------
 2300|    321|                    {
 2301|       |                        // '<!DOCTYPE ' - doctype
 2302|    321|                        text += 9;      // skip '!DOCTYPE '
 2303|    321|                        return parse_doctype<Flags>(text);
 2304|    321|                    }
 2305|       |
 2306|  6.03k|                }   // switch
 2307|       |
 2308|       |                // Attempt to skip other, unrecognized node types starting with <!
 2309|  5.12k|                ++text;     // Skip !
 2310|  32.4k|                while (*text != Ch('>'))
  ------------------
  |  Branch (2310:24): [True: 27.5k, False: 4.89k]
  ------------------
 2311|  27.5k|                {
 2312|  27.5k|                    if (*text == 0)
  ------------------
  |  Branch (2312:25): [True: 232, False: 27.3k]
  ------------------
 2313|    232|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    232|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2314|  27.3k|		    next_char<Flags>(text);
 2315|  27.3k|                }
 2316|  4.89k|                ++text;     // Skip '>'
 2317|  4.89k|                return 0;   // No node recognized
 2318|       |
 2319|  44.4k|            }
 2320|  44.4k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_elementILi0EEEPNS0_8xml_nodeIcEERPc:
 2195|  36.5k|        {
 2196|       |            // Create element node
 2197|  36.5k|            xml_node<Ch> *element = this->allocate_node(node_element);
 2198|       |
 2199|       |            // Extract element name
 2200|  36.5k|            Ch *name = text;
 2201|  36.5k|            skip<node_name_pred, Flags>(text);
 2202|  36.5k|            if (text == name)
  ------------------
  |  Branch (2202:17): [True: 23, False: 36.4k]
  ------------------
 2203|     23|                RAPIDXML_PARSE_ERROR("expected element name", text);
  ------------------
  |  |   60|     23|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2204|  36.4k|            element->name(name, text - name);
 2205|       |            
 2206|       |            // Skip whitespace between element name and attributes or >
 2207|  36.4k|            skip<whitespace_pred, Flags>(text);
 2208|       |
 2209|       |            // Parse attributes, if any
 2210|  36.4k|            parse_node_attributes<Flags>(text, element);
 2211|       |
 2212|       |            // Determine ending type
 2213|  36.4k|            if (*text == Ch('>'))
  ------------------
  |  Branch (2213:17): [True: 30.3k, False: 6.14k]
  ------------------
 2214|  30.3k|            {
 2215|  30.3k|                ++text;
 2216|  30.3k|                parse_node_contents<Flags>(text, element);
 2217|  30.3k|            }
 2218|  6.14k|            else if (*text == Ch('/'))
  ------------------
  |  Branch (2218:22): [True: 5.34k, False: 796]
  ------------------
 2219|  5.34k|            {
 2220|  5.34k|                ++text;
 2221|  5.34k|                if (*text != Ch('>'))
  ------------------
  |  Branch (2221:21): [True: 8, False: 5.33k]
  ------------------
 2222|      8|                    RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|      8|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2223|  5.33k|                ++text;
 2224|  5.33k|            }
 2225|    796|            else
 2226|    796|                RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|    796|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2227|       |
 2228|       |            // Place zero terminator after name
 2229|  35.6k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2229:17): [True: 5.98k, Folded]
  ------------------
 2230|  5.98k|                element->name()[element->name_size()] = Ch('\0');
 2231|       |
 2232|       |            // Return parsed element
 2233|  35.6k|            return element;
 2234|  36.4k|        }
_ZN2Wt8rapidxml11memory_poolIcE13allocate_nodeENS0_9node_typeEPKcS5_mm:
  433|  57.8k|        {
  434|  57.8k|            void *memory = allocate_aligned(sizeof(xml_node<Ch>));
  435|  57.8k|            xml_node<Ch> *node = new(memory) xml_node<Ch>(type);
  436|  57.8k|            if (name)
  ------------------
  |  Branch (436:17): [True: 0, False: 57.8k]
  ------------------
  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|  57.8k|            if (value)
  ------------------
  |  Branch (443:17): [True: 0, False: 57.8k]
  ------------------
  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|  57.8k|            return node;
  451|  57.8k|        }
_ZN2Wt8rapidxml11memory_poolIcE16allocate_alignedEm:
  615|  60.3k|        {
  616|       |            // Calculate aligned pointer
  617|  60.3k|            char *result = align(m_ptr);
  618|       |
  619|       |            // If not enough memory left in current pool, allocate a new pool
  620|  60.3k|            if (result + size > m_end)
  ------------------
  |  Branch (620:17): [True: 59, False: 60.2k]
  ------------------
  621|     59|            {
  622|       |                // Calculate required pool size (may be bigger than RAPIDXML_DYNAMIC_POOL_SIZE)
  623|     59|                std::size_t pool_size = RAPIDXML_DYNAMIC_POOL_SIZE;
  ------------------
  |  |  130|     59|    #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)
  ------------------
  624|     59|                if (pool_size < size)
  ------------------
  |  Branch (624:21): [True: 0, False: 59]
  ------------------
  625|      0|                    pool_size = size;
  626|       |                
  627|       |                // Allocate
  628|     59|                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|     59|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  629|     59|                char *raw_memory = allocate_raw(alloc_size);
  630|       |                    
  631|       |                // Setup new pool in allocated memory
  632|     59|                char *pool = align(raw_memory);
  633|     59|                header *new_header = reinterpret_cast<header *>(pool);
  634|     59|                new_header->previous_begin = m_begin;
  635|     59|                m_begin = raw_memory;
  636|     59|                m_ptr = pool + sizeof(header);
  637|     59|                m_end = raw_memory + alloc_size;
  638|       |
  639|       |                // Calculate aligned pointer again using new pool
  640|     59|                result = align(m_ptr);
  641|     59|            }
  642|       |
  643|       |            // Update pool and return aligned pointer
  644|  60.3k|            m_ptr = result + size;
  645|  60.3k|            return result;
  646|  60.3k|        }
_ZN2Wt8rapidxml11memory_poolIcE12allocate_rawEm:
  595|     59|        {
  596|       |            // Allocate
  597|     59|            void *memory;   
  598|     59|            if (m_alloc_func)   // Allocate memory using either user-specified allocation function or global operator new[]
  ------------------
  |  Branch (598:17): [True: 0, False: 59]
  ------------------
  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|     59|            else
  604|     59|            {
  605|     59|                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|     59|            }
  611|     59|            return static_cast<char *>(memory);
  612|     59|        }
_ZN2Wt8rapidxml8xml_baseIcE5valueEPKcm:
  767|  33.7k|        {
  768|  33.7k|            m_value = const_cast<Ch *>(value);
  769|  33.7k|            m_value_size = size;
  770|  33.7k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_14node_name_predELi0EEEvRPc:
 1711|  37.1k|        {
 1712|  37.1k|            Ch *tmp = text;
 1713|  90.2k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 53.0k, False: 37.1k]
  ------------------
 1714|  53.0k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  37.1k|            text = tmp;
 1717|  37.1k|        }
_ZN2Wt8rapidxml12xml_documentIcE14node_name_pred4testEc:
 1455|  90.2k|            {
 1456|  90.2k|                return internal::lookup_tables<0>::lookup_node_name[static_cast<unsigned char>(ch)];
 1457|  90.2k|            }
_ZN2Wt8rapidxml8xml_baseIcE4nameEPKcm:
  737|  38.9k|        {
  738|  38.9k|            m_name = const_cast<Ch *>(name);
  739|  38.9k|            m_name_size = size;
  740|  38.9k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_node_attributesILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2396|  36.4k|        {
 2397|       |            // For all attributes 
 2398|  38.3k|            while (attribute_name_pred::test(*text))
  ------------------
  |  Branch (2398:20): [True: 2.44k, False: 35.8k]
  ------------------
 2399|  2.44k|            {
 2400|       |                // Extract attribute name
 2401|  2.44k|                Ch *name = text;
 2402|  2.44k|                ++text;     // Skip first character of attribute name
 2403|  2.44k|                skip<attribute_name_pred, Flags>(text);
 2404|  2.44k|                if (text == name)
  ------------------
  |  Branch (2404:21): [True: 0, False: 2.44k]
  ------------------
 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.44k|                xml_attribute<Ch> *attribute = this->allocate_attribute();
 2409|  2.44k|                attribute->name(name, text - name);
 2410|  2.44k|                node->append_attribute(attribute);
 2411|       |
 2412|       |                // Skip whitespace after attribute name
 2413|  2.44k|                skip<whitespace_pred, Flags>(text);
 2414|       |
 2415|       |                // Skip =
 2416|  2.44k|                if (*text != Ch('='))
  ------------------
  |  Branch (2416:21): [True: 44, False: 2.39k]
  ------------------
 2417|     44|                    RAPIDXML_PARSE_ERROR("expected =", text);
  ------------------
  |  |   60|     44|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2418|  2.39k|                ++text;
 2419|       |
 2420|       |                // Add terminating zero after name
 2421|  2.39k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2421:21): [True: 2.39k, Folded]
  ------------------
 2422|  2.39k|                    attribute->name()[attribute->name_size()] = 0;
 2423|       |
 2424|       |                // Skip whitespace after =
 2425|  2.39k|                skip<whitespace_pred, Flags>(text);
 2426|       |
 2427|       |                // Skip quote and remember if it was ' or "
 2428|  2.39k|                Ch quote = *text;
 2429|  2.39k|                if (quote != Ch('\'') && quote != Ch('"'))
  ------------------
  |  Branch (2429:21): [True: 1.35k, False: 1.04k]
  |  Branch (2429:42): [True: 18, False: 1.33k]
  ------------------
 2430|     18|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|     18|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2431|  2.38k|                ++text;
 2432|       |
 2433|       |                // Extract attribute value and expand char refs in it
 2434|  2.38k|                Ch *value = text, *end;
 2435|  2.38k|                const int AttFlags = Flags & ~parse_normalize_whitespace;   // No whitespace normalization in attributes
 2436|  2.38k|                if (quote == Ch('\''))
  ------------------
  |  Branch (2436:21): [True: 1.04k, False: 1.33k]
  ------------------
 2437|  1.04k|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('\'')>, attribute_value_pure_pred<Ch('\'')>, AttFlags>(text);
 2438|  1.33k|                else
 2439|  1.33k|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('"')>, attribute_value_pure_pred<Ch('"')>, AttFlags>(text);
 2440|       |                
 2441|       |                // Set attribute value
 2442|  2.38k|                attribute->value(value, end - value);
 2443|       |                
 2444|       |                // Make sure that end quote is present
 2445|  2.38k|                if (*text != quote)
  ------------------
  |  Branch (2445:21): [True: 564, False: 1.81k]
  ------------------
 2446|    564|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|    564|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2447|  1.81k|                ++text;     // Skip quote
 2448|       |
 2449|       |                // Add terminating zero after value
 2450|  1.81k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2450:21): [True: 1.70k, Folded]
  ------------------
 2451|  1.70k|                    attribute->value()[attribute->value_size()] = 0;
 2452|       |
 2453|       |                // Skip whitespace after attribute value
 2454|  1.81k|                skip<whitespace_pred, Flags>(text);
 2455|  1.81k|            }
 2456|  36.4k|        }
_ZN2Wt8rapidxml12xml_documentIcE19attribute_name_pred4testEc:
 1464|  41.4k|            {
 1465|  41.4k|                return internal::lookup_tables<0>::lookup_attribute_name[static_cast<unsigned char>(ch)];
 1466|  41.4k|            }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_19attribute_name_predELi0EEEvRPc:
 1711|  2.44k|        {
 1712|  2.44k|            Ch *tmp = text;
 1713|  3.29k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 849, False: 2.44k]
  ------------------
 1714|    849|	      next_char<Flags>(tmp);
 1715|       |
 1716|  2.44k|            text = tmp;
 1717|  2.44k|        }
_ZN2Wt8rapidxml11memory_poolIcE18allocate_attributeEPKcS4_mm:
  464|  2.44k|        {
  465|  2.44k|            void *memory = allocate_aligned(sizeof(xml_attribute<Ch>));
  466|  2.44k|            xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>;
  467|  2.44k|            if (name)
  ------------------
  |  Branch (467:17): [True: 0, False: 2.44k]
  ------------------
  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.44k|            if (value)
  ------------------
  |  Branch (474:17): [True: 0, False: 2.44k]
  ------------------
  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.44k|            return attribute;
  482|  2.44k|        }
_ZN2Wt8rapidxml13xml_attributeIcEC2Ev:
  826|  2.44k|        {
  827|  2.44k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16append_attributeEPNS0_13xml_attributeIcEE:
 1233|  2.44k|        {
 1234|  2.44k|            assert(attribute && !attribute->parent());
 1235|  2.44k|            if (first_attribute())
  ------------------
  |  Branch (1235:17): [True: 1.30k, False: 1.13k]
  ------------------
 1236|  1.30k|            {
 1237|  1.30k|                attribute->m_prev_attribute = m_last_attribute;
 1238|  1.30k|                m_last_attribute->m_next_attribute = attribute;
 1239|  1.30k|            }
 1240|  1.13k|            else
 1241|  1.13k|            {
 1242|  1.13k|                attribute->m_prev_attribute = 0;
 1243|  1.13k|                m_first_attribute = attribute;
 1244|  1.13k|            }
 1245|  2.44k|            m_last_attribute = attribute;
 1246|  2.44k|            attribute->m_parent = this;
 1247|  2.44k|            attribute->m_next_attribute = 0;
 1248|  2.44k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc39EEENS2_25attribute_value_pure_predILc39EEELi0EEEPcRS8_:
 1724|  1.04k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  1.04k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 1.04k]
  ------------------
 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.04k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  1.04k|            Ch *src = text;
 1739|  1.04k|            Ch *dest = src;
 1740|  18.3k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 17.3k, False: 998]
  ------------------
 1741|  17.3k|            {
 1742|       |                // If entity translation is enabled    
 1743|  17.3k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 17.3k, Folded]
  ------------------
 1744|  17.3k|                {
 1745|       |                    // Test if replacement is needed
 1746|  17.3k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 6.15k, False: 11.1k]
  ------------------
 1747|  6.15k|                    {
 1748|  6.15k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 5.36k, False: 795]
  ------------------
 1749|  6.15k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.04k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.04k, False: 4.10k]
  ------------------
 1753|  2.04k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 782, False: 1.26k]
  |  Branch (1753:54): [True: 531, False: 251]
  |  Branch (1753:75): [True: 194, False: 337]
  ------------------
 1754|    194|                            {
 1755|    194|                                *dest = Ch('&');
 1756|    194|                                ++dest;
 1757|    194|                                src += 5;
 1758|    194|                                continue;
 1759|    194|                            }
 1760|  1.85k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 991, False: 863]
  |  Branch (1760:54): [True: 768, False: 223]
  |  Branch (1760:75): [True: 496, False: 272]
  |  Branch (1760:96): [True: 232, False: 264]
  ------------------
 1761|    232|                            {
 1762|    232|                                *dest = Ch('\'');
 1763|    232|                                ++dest;
 1764|    232|                                src += 6;
 1765|    232|                                continue;
 1766|    232|                            }
 1767|  1.62k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  1.62k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.10k, False: 5.04k]
  ------------------
 1771|  1.10k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 857, False: 251]
  |  Branch (1771:54): [True: 606, False: 251]
  |  Branch (1771:75): [True: 406, False: 200]
  |  Branch (1771:96): [True: 211, False: 195]
  ------------------
 1772|    211|                            {
 1773|    211|                                *dest = Ch('"');
 1774|    211|                                ++dest;
 1775|    211|                                src += 6;
 1776|    211|                                continue;
 1777|    211|                            }
 1778|    897|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|    897|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 778, False: 5.37k]
  ------------------
 1782|    778|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 547, False: 231]
  |  Branch (1782:54): [True: 200, False: 347]
  ------------------
 1783|    200|                            {
 1784|    200|                                *dest = Ch('>');
 1785|    200|                                ++dest;
 1786|    200|                                src += 4;
 1787|    200|                                continue;
 1788|    200|                            }
 1789|    578|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    597|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 597, False: 5.56k]
  ------------------
 1793|    597|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 393, False: 204]
  |  Branch (1793:54): [True: 194, False: 199]
  ------------------
 1794|    194|                            {
 1795|    194|                                *dest = Ch('<');
 1796|    194|                                ++dest;
 1797|    194|                                src += 4;
 1798|    194|                                continue;
 1799|    194|                            }
 1800|    403|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|    831|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 831, False: 5.32k]
  ------------------
 1804|    831|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 396, False: 435]
  ------------------
 1805|    396|                            {
 1806|    396|                                unsigned long code = 0;
 1807|    396|                                src += 3;   // Skip &#x
 1808|    796|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 796, Folded]
  ------------------
 1809|    796|                                {
 1810|    796|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|    796|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 396, False: 400]
  ------------------
 1812|    396|                                        break;
 1813|    400|                                    code = code * 16 + digit;
 1814|    400|                                    ++src;
 1815|    400|                                }
 1816|    396|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    396|                            }
 1818|    435|                            else
 1819|    435|                            {
 1820|    435|                                unsigned long code = 0;
 1821|    435|                                src += 2;   // Skip &#
 1822|    842|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 842, Folded]
  ------------------
 1823|    842|                                {
 1824|    842|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|    842|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 435, False: 407]
  ------------------
 1826|    435|                                        break;
 1827|    407|                                    code = code * 10 + digit;
 1828|    407|                                    ++src;
 1829|    407|                                }
 1830|    435|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    435|                            }
 1832|    831|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 780, False: 51]
  ------------------
 1833|    780|                                ++src;
 1834|     51|                            else
 1835|     51|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     51|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|    780|                            continue;
 1837|  6.15k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  4.29k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 4.29k]
  ------------------
 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|  4.29k|                    }
 1847|  17.3k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  15.4k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 15.4k]
  ------------------
 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|  15.4k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 15.4k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  15.4k|		else
 1868|  15.4k|		  *dest++ = *src++;
 1869|  15.4k|            }
 1870|       |
 1871|       |            // Return new end
 1872|    998|            text = src;
 1873|    998|            return dest;
 1874|       |
 1875|  1.04k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc39EEELi0EEEvRPc:
 1711|  1.04k|        {
 1712|  1.04k|            Ch *tmp = text;
 1713|  1.50k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 456, False: 1.04k]
  ------------------
 1714|    456|	      next_char<Flags>(tmp);
 1715|       |
 1716|  1.04k|            text = tmp;
 1717|  1.04k|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc39EE4testEc:
 1515|  1.50k|            {
 1516|  1.50k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [True: 1.50k, Folded]
  ------------------
 1517|  1.50k|                    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|  18.3k|            {
 1502|  18.3k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [True: 18.3k, Folded]
  ------------------
 1503|  18.3k|                    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.88k|        {
 1529|  3.88k|            if (Flags & parse_no_utf8)
  ------------------
  |  Branch (1529:17): [Folded, False: 3.88k]
  ------------------
 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.88k|            else
 1537|  3.88k|            {
 1538|       |                // Insert UTF8 sequence
 1539|  3.88k|                if (code < 0x80)    // 1 byte sequence
  ------------------
  |  Branch (1539:21): [True: 2.81k, False: 1.06k]
  ------------------
 1540|  2.81k|                {
 1541|  2.81k|		    text[0] = static_cast<unsigned char>(code);
 1542|  2.81k|                    text += 1;
 1543|  2.81k|                }
 1544|  1.06k|                else if (code < 0x800)  // 2 byte sequence
  ------------------
  |  Branch (1544:26): [True: 219, False: 844]
  ------------------
 1545|    219|                {
 1546|    219|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1547|    219|		    code >>= 6;
 1548|    219|		    text[0] = static_cast<unsigned char>(code | 0xC0);
 1549|    219|                    text += 2;
 1550|    219|                }
 1551|    844|	            else if (code < 0x10000)    // 3 byte sequence
  ------------------
  |  Branch (1551:23): [True: 276, False: 568]
  ------------------
 1552|    276|                {
 1553|    276|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1554|    276|		    code >>= 6;
 1555|    276|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1556|    276|		    code >>= 6;
 1557|    276|		    text[0] = static_cast<unsigned char>(code | 0xE0);
 1558|    276|                    text += 3;
 1559|    276|                }
 1560|    568|	            else if (code < 0x110000)   // 4 byte sequence
  ------------------
  |  Branch (1560:23): [True: 235, False: 333]
  ------------------
 1561|    235|                {
 1562|    235|		    text[3] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1563|    235|		    code >>= 6;
 1564|    235|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1565|    235|		    code >>= 6;
 1566|    235|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1567|    235|		    code >>= 6;
 1568|    235|		    text[0] = static_cast<unsigned char>(code | 0xF0);
 1569|    235|                    text += 4;
 1570|    235|                }
 1571|    333|                else    // Invalid, only codes up to 0x10FFFF are allowed in Unicode
 1572|    333|                {
 1573|    333|                    RAPIDXML_PARSE_ERROR
  ------------------
  |  |   60|    333|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1574|    333|		      (("invalid numeric character entity: "
 1575|    333|			+ std::to_string(code)).c_str(), 0);
 1576|    333|                }
 1577|  3.88k|            }
 1578|  3.88k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc34EEENS2_25attribute_value_pure_predILc34EEELi0EEEPcRS8_:
 1724|  1.33k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  1.33k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 1.33k]
  ------------------
 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.33k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  1.33k|            Ch *src = text;
 1739|  1.33k|            Ch *dest = src;
 1740|  38.1k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 36.8k, False: 1.26k]
  ------------------
 1741|  36.8k|            {
 1742|       |                // If entity translation is enabled    
 1743|  36.8k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 36.8k, Folded]
  ------------------
 1744|  36.8k|                {
 1745|       |                    // Test if replacement is needed
 1746|  36.8k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 9.60k, False: 27.2k]
  ------------------
 1747|  9.60k|                    {
 1748|  9.60k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 8.27k, False: 1.33k]
  ------------------
 1749|  9.60k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  3.54k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 3.54k, False: 6.06k]
  ------------------
 1753|  3.54k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 1.51k, False: 2.02k]
  |  Branch (1753:54): [True: 823, False: 696]
  |  Branch (1753:75): [True: 217, False: 606]
  ------------------
 1754|    217|                            {
 1755|    217|                                *dest = Ch('&');
 1756|    217|                                ++dest;
 1757|    217|                                src += 5;
 1758|    217|                                continue;
 1759|    217|                            }
 1760|  3.32k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.45k, False: 1.87k]
  |  Branch (1760:54): [True: 1.18k, False: 272]
  |  Branch (1760:75): [True: 773, False: 409]
  |  Branch (1760:96): [True: 344, False: 429]
  ------------------
 1761|    344|                            {
 1762|    344|                                *dest = Ch('\'');
 1763|    344|                                ++dest;
 1764|    344|                                src += 6;
 1765|    344|                                continue;
 1766|    344|                            }
 1767|  2.98k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  2.98k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 2.25k, False: 7.35k]
  ------------------
 1771|  2.25k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 1.83k, False: 419]
  |  Branch (1771:54): [True: 1.38k, False: 450]
  |  Branch (1771:75): [True: 519, False: 867]
  |  Branch (1771:96): [True: 229, False: 290]
  ------------------
 1772|    229|                            {
 1773|    229|                                *dest = Ch('"');
 1774|    229|                                ++dest;
 1775|    229|                                src += 6;
 1776|    229|                                continue;
 1777|    229|                            }
 1778|  2.02k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  2.02k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 651, False: 8.95k]
  ------------------
 1782|    651|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 421, False: 230]
  |  Branch (1782:54): [True: 200, False: 221]
  ------------------
 1783|    200|                            {
 1784|    200|                                *dest = Ch('>');
 1785|    200|                                ++dest;
 1786|    200|                                src += 4;
 1787|    200|                                continue;
 1788|    200|                            }
 1789|    451|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    774|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 774, False: 8.83k]
  ------------------
 1793|    774|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 490, False: 284]
  |  Branch (1793:54): [True: 203, False: 287]
  ------------------
 1794|    203|                            {
 1795|    203|                                *dest = Ch('<');
 1796|    203|                                ++dest;
 1797|    203|                                src += 4;
 1798|    203|                                continue;
 1799|    203|                            }
 1800|    571|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  1.04k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 1.04k, False: 8.56k]
  ------------------
 1804|  1.04k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 604, False: 443]
  ------------------
 1805|    604|                            {
 1806|    604|                                unsigned long code = 0;
 1807|    604|                                src += 3;   // Skip &#x
 1808|  1.43k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 1.43k, Folded]
  ------------------
 1809|  1.43k|                                {
 1810|  1.43k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  1.43k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 604, False: 828]
  ------------------
 1812|    604|                                        break;
 1813|    828|                                    code = code * 16 + digit;
 1814|    828|                                    ++src;
 1815|    828|                                }
 1816|    604|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    604|                            }
 1818|    443|                            else
 1819|    443|                            {
 1820|    443|                                unsigned long code = 0;
 1821|    443|                                src += 2;   // Skip &#
 1822|    869|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 869, Folded]
  ------------------
 1823|    869|                                {
 1824|    869|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|    869|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 443, False: 426]
  ------------------
 1826|    443|                                        break;
 1827|    426|                                    code = code * 10 + digit;
 1828|    426|                                    ++src;
 1829|    426|                                }
 1830|    443|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    443|                            }
 1832|  1.04k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 981, False: 66]
  ------------------
 1833|    981|                                ++src;
 1834|     66|                            else
 1835|     66|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     66|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|    981|                            continue;
 1837|  9.60k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  7.36k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 7.36k]
  ------------------
 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|  7.36k|                    }
 1847|  36.8k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  34.6k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 34.6k]
  ------------------
 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|  34.6k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 34.6k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  34.6k|		else
 1868|  34.6k|		  *dest++ = *src++;
 1869|  34.6k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  1.26k|            text = src;
 1873|  1.26k|            return dest;
 1874|       |
 1875|  1.33k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc34EEELi0EEEvRPc:
 1711|  1.33k|        {
 1712|  1.33k|            Ch *tmp = text;
 1713|  1.92k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 588, False: 1.33k]
  ------------------
 1714|    588|	      next_char<Flags>(tmp);
 1715|       |
 1716|  1.33k|            text = tmp;
 1717|  1.33k|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc34EE4testEc:
 1515|  1.92k|            {
 1516|  1.92k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [Folded, False: 1.92k]
  ------------------
 1517|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
 1518|  1.92k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1518:21): [True: 1.92k, Folded]
  ------------------
 1519|  1.92k|                    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.92k|            }
_ZN2Wt8rapidxml12xml_documentIcE20attribute_value_predILc34EE4testEc:
 1501|  38.1k|            {
 1502|  38.1k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [Folded, False: 38.1k]
  ------------------
 1503|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
 1504|  38.1k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1504:21): [True: 38.1k, Folded]
  ------------------
 1505|  38.1k|                    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|  38.1k|            }
_ZNK2Wt8rapidxml8xml_baseIcE5valueEv:
  708|  18.8k|        {
  709|  18.8k|            return m_value ? m_value : nullstr();
  ------------------
  |  Branch (709:20): [True: 4.80k, False: 14.0k]
  ------------------
  710|  18.8k|        }
_ZNK2Wt8rapidxml8xml_baseIcE10value_sizeEv:
  716|  9.65k|        {
  717|  9.65k|            return m_value ? m_value_size : 0;
  ------------------
  |  Branch (717:20): [True: 4.57k, False: 5.08k]
  ------------------
  718|  9.65k|        }
_ZN2Wt8rapidxml12xml_documentIcE19parse_node_contentsILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2325|  30.3k|        {
 2326|       |            // For all children and text
 2327|  35.8k|            while (1)
  ------------------
  |  Branch (2327:20): [True: 35.8k, Folded]
  ------------------
 2328|  35.8k|            {
 2329|       |                // Skip whitespace between > and node contents
 2330|  35.8k|                Ch *contents_start = text;      // Store start of node contents before whitespace is skipped
 2331|  35.8k|		if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2331:7): [Folded, False: 35.8k]
  ------------------
 2332|      0|		  skip<whitespace_pred, Flags>(text);
 2333|  35.8k|                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|  53.0k|            after_data_node:    
 2340|       |                
 2341|       |                // Determine what comes next: node closing, child node, data node, or 0?
 2342|  53.0k|                switch (next_char)
 2343|  53.0k|                {
 2344|       |                
 2345|       |                // Node closing or child node
 2346|  35.0k|                case Ch('<'):
  ------------------
  |  Branch (2346:17): [True: 35.0k, False: 17.9k]
  ------------------
 2347|  35.0k|                    if (text[1] == Ch('/'))
  ------------------
  |  Branch (2347:25): [True: 666, False: 34.4k]
  ------------------
 2348|    666|                    {
 2349|       |                        // Node closing
 2350|    666|                        text += 2;      // Skip '</'
 2351|    666|                        if (Flags & parse_validate_closing_tags)
  ------------------
  |  Branch (2351:29): [Folded, False: 666]
  ------------------
 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|    666|                        else
 2360|    666|                        {
 2361|       |                            // No validation, just skip name
 2362|    666|                            skip<node_name_pred, Flags>(text);
 2363|    666|                        }
 2364|       |                        // Skip remaining whitespace after node name
 2365|    666|                        skip<whitespace_pred, Flags>(text);
 2366|    666|                        if (*text != Ch('>'))
  ------------------
  |  Branch (2366:29): [True: 23, False: 643]
  ------------------
 2367|     23|                            RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|     23|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2368|    643|                        ++text;     // Skip '>'
 2369|    643|                        return;     // Node closed, finished parsing contents
 2370|    666|                    }
 2371|  34.4k|                    else
 2372|  34.4k|                    {
 2373|       |                        // Child node
 2374|  34.4k|                        ++text;     // Skip '<'
 2375|  34.4k|                        if (xml_node<Ch> *child = parse_node<Flags>(text))
  ------------------
  |  Branch (2375:43): [True: 3.72k, False: 30.6k]
  ------------------
 2376|  3.72k|                            node->append_node(child);
 2377|  34.4k|                    }
 2378|  34.4k|                    break;
 2379|       |
 2380|       |                // End of data - error
 2381|  34.4k|                case Ch('\0'):
  ------------------
  |  Branch (2381:17): [True: 357, False: 52.6k]
  ------------------
 2382|    357|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    357|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2383|       |
 2384|       |                // Data node
 2385|  17.6k|                default:
  ------------------
  |  Branch (2385:17): [True: 17.6k, False: 35.4k]
  ------------------
 2386|  17.6k|                    next_char = parse_and_append_data<Flags>(node, text, contents_start);
 2387|  17.6k|                    goto after_data_node;   // Bypass regular processing after data nodes
 2388|       |
 2389|  53.0k|                }
 2390|  53.0k|            }
 2391|  30.3k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_and_append_dataILi0EEEcPNS0_8xml_nodeIcEERPcS7_:
 2098|  17.6k|        {
 2099|       |            // Backup to contents start if whitespace trimming is disabled
 2100|  17.6k|            if (!(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (2100:17): [True: 17.6k, Folded]
  ------------------
 2101|  17.6k|                text = contents_start;     
 2102|       |            
 2103|       |            // Skip until end of data
 2104|  17.6k|            Ch *value = text, *end;
 2105|  17.6k|            if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2105:17): [Folded, False: 17.6k]
  ------------------
 2106|      0|                end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);   
 2107|  17.6k|            else
 2108|  17.6k|                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|  17.6k|            if (Flags & parse_trim_whitespace)
  ------------------
  |  Branch (2111:17): [Folded, False: 17.6k]
  ------------------
 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|  17.6k|            if (!(Flags & parse_no_data_nodes))
  ------------------
  |  Branch (2129:17): [True: 17.1k, Folded]
  ------------------
 2130|  17.1k|            {
 2131|  17.1k|                xml_node<Ch> *data = this->allocate_node(node_data);
 2132|  17.1k|                data->value(value, end - value);
 2133|  17.1k|                node->append_node(data);
 2134|  17.1k|            }
 2135|       |
 2136|       |            // Add data to parent node if no data exists yet
 2137|  17.6k|            if (!(Flags & parse_no_element_values)) 
  ------------------
  |  Branch (2137:17): [True: 17.1k, Folded]
  ------------------
 2138|  17.1k|                if (*node->value() == Ch('\0'))
  ------------------
  |  Branch (2138:21): [True: 14.0k, False: 3.10k]
  ------------------
 2139|  14.0k|                    node->value(value, end - value);
 2140|       |
 2141|       |            // Place zero terminator after value
 2142|  17.6k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2142:17): [True: 17.1k, Folded]
  ------------------
 2143|  17.1k|            {
 2144|  17.1k|                Ch ch = *text;
 2145|  17.1k|                *end = Ch('\0');
 2146|  17.1k|                return ch;      // Return character that ends data; this is required because zero terminator overwritten it
 2147|  17.1k|            }
 2148|       |
 2149|       |            // Return character that ends data
 2150|    445|            return *text;
 2151|  17.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_9text_predENS2_20text_pure_no_ws_predELi0EEEPcRS6_:
 1724|  17.6k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  17.6k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 17.6k]
  ------------------
 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|  17.6k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  17.6k|            Ch *src = text;
 1739|  17.6k|            Ch *dest = src;
 1740|  68.4k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 51.3k, False: 17.1k]
  ------------------
 1741|  51.3k|            {
 1742|       |                // If entity translation is enabled    
 1743|  51.3k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 51.3k, Folded]
  ------------------
 1744|  51.3k|                {
 1745|       |                    // Test if replacement is needed
 1746|  51.3k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 23.8k, False: 27.5k]
  ------------------
 1747|  23.8k|                    {
 1748|  23.8k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 9.01k, False: 14.7k]
  ------------------
 1749|  23.8k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  3.27k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 3.27k, False: 20.5k]
  ------------------
 1753|  3.27k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 1.36k, False: 1.90k]
  |  Branch (1753:54): [True: 895, False: 469]
  |  Branch (1753:75): [True: 516, False: 379]
  ------------------
 1754|    516|                            {
 1755|    516|                                *dest = Ch('&');
 1756|    516|                                ++dest;
 1757|    516|                                src += 5;
 1758|    516|                                continue;
 1759|    516|                            }
 1760|  2.75k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.51k, False: 1.24k]
  |  Branch (1760:54): [True: 1.25k, False: 263]
  |  Branch (1760:75): [True: 894, False: 356]
  |  Branch (1760:96): [True: 309, False: 585]
  ------------------
 1761|    309|                            {
 1762|    309|                                *dest = Ch('\'');
 1763|    309|                                ++dest;
 1764|    309|                                src += 6;
 1765|    309|                                continue;
 1766|    309|                            }
 1767|  2.44k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  2.44k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.94k, False: 21.8k]
  ------------------
 1771|  1.94k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 1.59k, False: 356]
  |  Branch (1771:54): [True: 1.11k, False: 479]
  |  Branch (1771:75): [True: 808, False: 306]
  |  Branch (1771:96): [True: 440, False: 368]
  ------------------
 1772|    440|                            {
 1773|    440|                                *dest = Ch('"');
 1774|    440|                                ++dest;
 1775|    440|                                src += 6;
 1776|    440|                                continue;
 1777|    440|                            }
 1778|  1.50k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.50k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 1.02k, False: 22.7k]
  ------------------
 1782|  1.02k|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 693, False: 336]
  |  Branch (1782:54): [True: 326, False: 367]
  ------------------
 1783|    326|                            {
 1784|    326|                                *dest = Ch('>');
 1785|    326|                                ++dest;
 1786|    326|                                src += 4;
 1787|    326|                                continue;
 1788|    326|                            }
 1789|    703|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    763|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 763, False: 23.0k]
  ------------------
 1793|    763|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 474, False: 289]
  |  Branch (1793:54): [True: 264, False: 210]
  ------------------
 1794|    264|                            {
 1795|    264|                                *dest = Ch('<');
 1796|    264|                                ++dest;
 1797|    264|                                src += 4;
 1798|    264|                                continue;
 1799|    264|                            }
 1800|    499|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  2.00k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 2.00k, False: 21.8k]
  ------------------
 1804|  2.00k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 799, False: 1.20k]
  ------------------
 1805|    799|                            {
 1806|    799|                                unsigned long code = 0;
 1807|    799|                                src += 3;   // Skip &#x
 1808|  4.66k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 4.66k, Folded]
  ------------------
 1809|  4.66k|                                {
 1810|  4.66k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  4.66k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 799, False: 3.87k]
  ------------------
 1812|    799|                                        break;
 1813|  3.87k|                                    code = code * 16 + digit;
 1814|  3.87k|                                    ++src;
 1815|  3.87k|                                }
 1816|    799|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    799|                            }
 1818|  1.20k|                            else
 1819|  1.20k|                            {
 1820|  1.20k|                                unsigned long code = 0;
 1821|  1.20k|                                src += 2;   // Skip &#
 1822|  3.63k|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 3.63k, Folded]
  ------------------
 1823|  3.63k|                                {
 1824|  3.63k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|  3.63k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 1.20k, False: 2.43k]
  ------------------
 1826|  1.20k|                                        break;
 1827|  2.43k|                                    code = code * 10 + digit;
 1828|  2.43k|                                    ++src;
 1829|  2.43k|                                }
 1830|  1.20k|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|  1.20k|                            }
 1832|  2.00k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 1.55k, False: 445]
  ------------------
 1833|  1.55k|                                ++src;
 1834|    445|                            else
 1835|    445|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|    445|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|  1.55k|                            continue;
 1837|  23.8k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  19.9k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 19.9k]
  ------------------
 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|  19.9k|                    }
 1847|  51.3k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  47.4k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 47.4k]
  ------------------
 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|  47.4k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 47.4k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  47.4k|		else
 1868|  47.4k|		  *dest++ = *src++;
 1869|  47.4k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  17.1k|            text = src;
 1873|  17.1k|            return dest;
 1874|       |
 1875|  17.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_20text_pure_no_ws_predELi0EEEvRPc:
 1711|  17.6k|        {
 1712|  17.6k|            Ch *tmp = text;
 1713|  23.5k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 5.90k, False: 17.6k]
  ------------------
 1714|  5.90k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  17.6k|            text = tmp;
 1717|  17.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE20text_pure_no_ws_pred4testEc:
 1482|  23.5k|            {
 1483|  23.5k|                return internal::lookup_tables<0>::lookup_text_pure_no_ws[static_cast<unsigned char>(ch)];
 1484|  23.5k|            }
_ZN2Wt8rapidxml12xml_documentIcE9text_pred4testEc:
 1473|  68.4k|            {
 1474|  68.4k|                return internal::lookup_tables<0>::lookup_text[static_cast<unsigned char>(ch)];
 1475|  68.4k|            }
_ZN2Wt8rapidxml12xml_documentIcE21parse_xml_declarationILi0EEEPNS0_8xml_nodeIcEERPc:
 1896|    222|        {
 1897|       |            // If parsing of declaration is disabled
 1898|    222|            if (!(Flags & parse_declaration_node))
  ------------------
  |  Branch (1898:17): [True: 222, Folded]
  ------------------
 1899|    222|            {
 1900|       |                // Skip until end of declaration
 1901|    815|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (1901:24): [True: 411, False: 404]
  |  Branch (1901:46): [True: 209, False: 195]
  ------------------
 1902|    620|                {
 1903|    620|                    if (!text[0])
  ------------------
  |  Branch (1903:25): [True: 27, False: 593]
  ------------------
 1904|     27|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     27|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1905|    593|                    ++text;
 1906|    593|                }
 1907|    195|                text += 2;    // Skip '?>'
 1908|    195|                return 0;
 1909|    222|            }
 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|  1.63k|        {
 2039|       |            // If creation of PI nodes is enabled
 2040|  1.63k|            if (Flags & parse_pi_nodes)
  ------------------
  |  Branch (2040:17): [Folded, False: 1.63k]
  ------------------
 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|  1.63k|            else
 2080|  1.63k|            {
 2081|       |                // Skip to '?>'
 2082|  4.96k|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (2082:24): [True: 3.22k, False: 1.74k]
  |  Branch (2082:46): [True: 216, False: 1.52k]
  ------------------
 2083|  3.44k|                {
 2084|  3.44k|                    if (*text == Ch('\0'))
  ------------------
  |  Branch (2084:25): [True: 111, False: 3.33k]
  ------------------
 2085|    111|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    111|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2086|  3.33k|                    ++text;
 2087|  3.33k|                }
 2088|  1.52k|                text += 2;    // Skip '?>'
 2089|  1.52k|                return 0;
 2090|  1.63k|            }
 2091|  1.63k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_commentILi0EEEPNS0_8xml_nodeIcEERPc:
 1931|    232|        {
 1932|       |            // If parsing of comments is disabled
 1933|    232|            if (!(Flags & parse_comment_nodes))
  ------------------
  |  Branch (1933:17): [True: 232, Folded]
  ------------------
 1934|    232|            {
 1935|       |                // Skip until end of comment
 1936|  1.12k|                while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
  ------------------
  |  Branch (1936:24): [True: 462, False: 666]
  |  Branch (1936:46): [True: 219, False: 447]
  |  Branch (1936:68): [True: 247, False: 200]
  ------------------
 1937|    928|                {
 1938|    928|                    if (!text[0])
  ------------------
  |  Branch (1938:25): [True: 32, False: 896]
  ------------------
 1939|     32|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     32|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1940|    896|                    ++text;
 1941|    896|                }
 1942|    200|                text += 3;     // Skip '-->'
 1943|    200|                return 0;      // Do not produce comment node
 1944|    232|            }
 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|    355|        {
 2157|       |            // If CDATA is disabled
 2158|    355|            if (Flags & parse_no_data_nodes)
  ------------------
  |  Branch (2158:17): [Folded, False: 355]
  ------------------
 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|    355|            Ch *value = text;
 2173|  1.30k|            while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
  ------------------
  |  Branch (2173:20): [True: 556, False: 744]
  |  Branch (2173:42): [True: 238, False: 506]
  |  Branch (2173:64): [True: 214, False: 292]
  ------------------
 2174|  1.00k|            {
 2175|  1.00k|                if (!text[0])
  ------------------
  |  Branch (2175:21): [True: 63, False: 945]
  ------------------
 2176|     63|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     63|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2177|    945|		next_char<Flags>(text);
 2178|    945|            }
 2179|       |
 2180|       |            // Create new cdata node
 2181|    292|            xml_node<Ch> *cdata = this->allocate_node(node_cdata);
 2182|    292|            cdata->value(value, text - value);
 2183|       |
 2184|       |            // Place zero terminator after value
 2185|    292|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2185:17): [True: 292, Folded]
  ------------------
 2186|    292|                *text = Ch('\0');
 2187|       |
 2188|    292|            text += 3;      // Skip ]]>
 2189|    292|            return cdata;
 2190|    355|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_doctypeILi0EEEPNS0_8xml_nodeIcEERPc:
 1972|    321|        {
 1973|       |            // Remember value start
 1974|    321|            Ch *value = text;
 1975|       |
 1976|       |            // Skip to >
 1977|    802|            while (*text != Ch('>'))
  ------------------
  |  Branch (1977:20): [True: 526, False: 276]
  ------------------
 1978|    526|            {
 1979|       |                // Determine character type
 1980|    526|                switch (*text)
 1981|    526|                {
 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|    231|                case Ch('['):
  ------------------
  |  Branch (1985:17): [True: 231, False: 295]
  ------------------
 1986|    231|                {
 1987|    231|                    ++text;     // Skip '['
 1988|    231|                    int depth = 1;
 1989|    872|                    while (depth > 0)
  ------------------
  |  Branch (1989:28): [True: 661, False: 211]
  ------------------
 1990|    661|                    {
 1991|    661|                        switch (*text)
  ------------------
  |  Branch (1991:33): [True: 454, False: 207]
  ------------------
 1992|    661|                        {
 1993|    209|                            case Ch('['): ++depth; break;
  ------------------
  |  Branch (1993:29): [True: 209, False: 452]
  ------------------
 1994|    225|                            case Ch(']'): --depth; break;
  ------------------
  |  Branch (1994:29): [True: 225, False: 436]
  ------------------
 1995|     20|                            case 0: RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     20|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
  |  Branch (1995:29): [True: 20, False: 641]
  ------------------
 1996|    661|                        }
 1997|    641|                        ++text;
 1998|    641|                    }
 1999|    211|                    break;
 2000|    231|                }
 2001|       |                
 2002|       |                // Error on end of text
 2003|    211|                case Ch('\0'):
  ------------------
  |  Branch (2003:17): [True: 25, False: 501]
  ------------------
 2004|     25|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     25|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2005|       |                
 2006|       |                // Other character, skip it
 2007|    270|                default:
  ------------------
  |  Branch (2007:17): [True: 270, False: 256]
  ------------------
 2008|    270|                    ++text;
 2009|       |
 2010|    526|                }
 2011|    526|            }
 2012|       |            
 2013|       |            // If DOCTYPE nodes enabled
 2014|    276|            if (Flags & parse_doctype_node)
  ------------------
  |  Branch (2014:17): [Folded, False: 276]
  ------------------
 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|    276|            else
 2028|    276|            {
 2029|    276|                text += 1;      // skip '>'
 2030|    276|                return 0;
 2031|    276|            }
 2032|       |
 2033|    276|        }
_ZN2Wt8rapidxml8xml_nodeIcE11append_nodeEPS2_:
 1113|  27.3k|        {
 1114|  27.3k|            assert(child && !child->parent() && child->type() != node_document);
 1115|  27.3k|            if (first_node())
  ------------------
  |  Branch (1115:17): [True: 8.55k, False: 18.7k]
  ------------------
 1116|  8.55k|            {
 1117|  8.55k|                child->m_prev_sibling = m_last_node;
 1118|  8.55k|                m_last_node->m_next_sibling = child;
 1119|  8.55k|            }
 1120|  18.7k|            else
 1121|  18.7k|            {
 1122|  18.7k|                child->m_prev_sibling = 0;
 1123|  18.7k|                m_first_node = child;
 1124|  18.7k|            }
 1125|  27.3k|            m_last_node = child;
 1126|  27.3k|            child->m_parent = this;
 1127|  27.3k|            child->m_next_sibling = 0;
 1128|  27.3k|        }
_ZN2Wt8rapidxml11parse_errorC2EPKcPv:
   84|  2.22k|            : m_what(what)
   85|  2.22k|            , m_where(location)
   86|  2.22k|        {
   87|  2.22k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE8documentEv:
  939|  3.91k|        {
  940|  3.91k|            xml_node<Ch> *node = const_cast<xml_node<Ch> *>(this);
  941|  11.1k|            while (node->parent())
  ------------------
  |  Branch (941:20): [True: 7.22k, False: 3.91k]
  ------------------
  942|  7.22k|                node = node->parent();
  943|  3.91k|            return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
  ------------------
  |  Branch (943:20): [True: 3.91k, False: 0]
  ------------------
  944|  3.91k|        }
_ZNK2Wt8rapidxml8xml_baseIcE6parentEv:
  786|  18.3k|        {
  787|  18.3k|            return m_parent;
  788|  18.3k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE4typeEv:
  929|  3.91k|        {
  930|  3.91k|            return m_type;
  931|  3.91k|        }

_ZN2Wt10DomElement16isSelfClosingTagERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE:
 1934|  5.27k|{
 1935|  5.27k|  return (   (tag == "br")
  ------------------
  |  Branch (1935:14): [True: 196, False: 5.08k]
  ------------------
 1936|  5.08k|          || (tag == "hr")
  ------------------
  |  Branch (1936:14): [True: 196, False: 4.88k]
  ------------------
 1937|  4.88k|          || (tag == "img")
  ------------------
  |  Branch (1937:14): [True: 194, False: 4.69k]
  ------------------
 1938|  4.69k|          || (tag == "area")
  ------------------
  |  Branch (1938:14): [True: 194, False: 4.49k]
  ------------------
 1939|  4.49k|          || (tag == "col")
  ------------------
  |  Branch (1939:14): [True: 195, False: 4.30k]
  ------------------
 1940|  4.30k|          || (tag == "input")
  ------------------
  |  Branch (1940:14): [True: 195, False: 4.10k]
  ------------------
 1941|  4.10k|          || (tag == "link")
  ------------------
  |  Branch (1941:14): [True: 195, False: 3.91k]
  ------------------
 1942|  3.91k|          || (tag == "meta"));
  ------------------
  |  Branch (1942:14): [True: 1, False: 3.91k]
  ------------------
 1943|  5.27k|}
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::StyleVerticalAlign,std::string("vertical-align"));
  135|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextAlign,std::string("text-align"));
  136|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePadding,std::string("padding"));
  137|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingTop,std::string("padding-top"));
  138|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingRight,std::string("padding-right"));
  139|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingBottom,std::string("padding-bottom"));
  140|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingLeft,std::string("padding-left"));
  141|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMargin,std::string("margin"));
  142|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginTop,std::string("margin-top"));
  143|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginRight,std::string("margin-right"));
  144|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginBottom,std::string("margin-bottom"));
  145|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginLeft,std::string("margin-left"));
  146|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleCursor,std::string("cursor"));
  147|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderTop,std::string("border-top"));
  148|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderRight,std::string("border-right"));
  149|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBottom,std::string("border-bottom"));
  150|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderLeft,std::string("border-left"));
  151|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorTop,std::string("border-color-top"));
  152|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorRight,std::string("border-color-right"));
  153|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorBottom,std::string("border-color-bottom"));
  154|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorLeft,std::string("border-color-left"));
  155|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthTop,std::string("border-width-top"));
  156|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthRight,std::string("border-width-right"));
  157|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthBottom,std::string("border-width-bottom"));
  158|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthLeft,std::string("border-width-left"));
  159|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleColor,std::string("color"));
  160|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowX,std::string("overflow-x"));
  161|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowY,std::string("overflow-y"));
  162|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOpacity,std::string("opacity"));
  163|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontFamily,std::string("font-family"));
  164|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontStyle,std::string("font-style"));
  165|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontVariant,std::string("font-variant"));
  166|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontWeight,std::string("font-weight"));
  167|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontSize,std::string("font-size"));
  168|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundColor,std::string("background-color"));
  169|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundImage,std::string("background-image"));
  170|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundRepeat,std::string("background-repeat"));
  171|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundAttachment,std::string("background-attachment"));
  172|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundPosition,std::string("background-position"));
  173|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextDecoration,std::string("text-decoration"));
  174|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWhiteSpace,std::string("white-space"));
  175|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTableLayout,std::string("table-layout"));
  176|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderSpacing,std::string("border-spacing"));
  177|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  178|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakBefore,std::string("page-break-before"));
  179|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakAfter,std::string("page-break-after"));
  180|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleZoom,std::string("zoom"));
  181|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleVisibility,std::string("visibility"));
  182|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleDisplay,std::string("display"));
  183|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWebkitAppearance,std::string("-webkit-appearance"));
  184|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBoxSizing,std::string("box-sizing"));
  185|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlex,std::string("flex"));
  186|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexDirection,std::string("flex-direction"));
  187|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexFlow,std::string("flex-flow"));
  188|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleAlignSelf,std::string("align-self"));
  189|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleJustifyContent,std::string("justify-content"));
  190|      2|  return cssNames;
  191|      2|}
DomElement.C:_ZN12_GLOBAL__N_122createCssCamelNamesMapB5cxx11Ev:
  196|      2|{
  197|      2|  CssPropertyMap cssCamelNames;
  198|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::Style,std::string("cssText"));
  199|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePosition,std::string("position"));
  200|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZIndex,std::string("zIndex"));
  201|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFloat,std::string("cssFloat"));
  202|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleClear,std::string("clear"));
  203|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWidth,std::string("width"));
  204|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleHeight,std::string("height"));
  205|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLineHeight,std::string("lineHeight"));
  206|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinWidth,std::string("minWidth"));
  207|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinHeight,std::string("minHeight"));
  208|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxWidth,std::string("maxWidth"));
  209|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxHeight,std::string("maxHeight"));
  210|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLeft,std::string("left"));
  211|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleRight,std::string("right"));
  212|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTop,std::string("top"));
  213|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBottom,std::string("bottom"));
  214|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVerticalAlign,std::string("verticalAlign"));
  215|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextAlign,std::string("textAlign"));
  216|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePadding,std::string("padding"));
  217|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingTop,std::string("paddingTop"));
  218|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingRight,std::string("paddingRight"));
  219|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingBottom,std::string("paddingBottom"));
  220|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingLeft,std::string("paddingLeft"));
  221|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMargin,std::string("margin"));
  222|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginTop,std::string("marginTop"));
  223|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginRight,std::string("marginRight"));
  224|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginBottom,std::string("marginBottom"));
  225|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginLeft,std::string("marginLeft"));
  226|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleCursor,std::string("cursor"));
  227|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderTop,std::string("borderTop"));
  228|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderRight,std::string("borderRight"));
  229|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBottom,std::string("borderBottom"));
  230|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderLeft,std::string("borderLeft"));
  231|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorTop,std::string("borderColorTop"));
  232|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorRight,std::string("borderColorRight"));
  233|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorBottom,std::string("borderColorBottom"));
  234|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorLeft,std::string("borderColorLeft"));
  235|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthTop,std::string("borderWidthTop"));
  236|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthRight,std::string("borderWidthRight"));
  237|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthBottom,std::string("borderWidthBottom"));
  238|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthLeft,std::string("borderWidthLeft"));
  239|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleColor,std::string("color"));
  240|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowX,std::string("overflowX"));
  241|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowY,std::string("overflowY"));
  242|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOpacity,std::string("opacity"));
  243|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontFamily,std::string("fontFamily"));
  244|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontStyle,std::string("fontStyle"));
  245|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontVariant,std::string("fontVariant"));
  246|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontWeight,std::string("fontWeight"));
  247|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontSize,std::string("fontSize"));
  248|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundColor,std::string("backgroundColor"));
  249|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundImage,std::string("backgroundImage"));
  250|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundRepeat,std::string("backgroundRepeat"));
  251|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundAttachment,std::string("backgroundAttachment"));
  252|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundPosition,std::string("backgroundPosition"));
  253|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextDecoration,std::string("textDecoration"));
  254|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWhiteSpace,std::string("whiteSpace"));
  255|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTableLayout,std::string("tableLayout"));
  256|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderSpacing,std::string("borderSpacing"));
  257|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  258|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakBefore,std::string("pageBreakBefore"));
  259|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakAfter,std::string("pageBreakAfter"));
  260|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZoom,std::string("zoom"));
  261|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVisibility,std::string("visibility"));
  262|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleDisplay,std::string("display"));
  263|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWebkitAppearance,std::string("webKitAppearance"));
  264|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBoxSizing,std::string("boxSizing"));
  265|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlex,std::string("flex"));
  266|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexDirection,std::string("flexDirection"));
  267|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexFlow,std::string("flexFlow"));
  268|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleAlignSelf,std::string("alignSelf"));
  269|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleJustifyContent,std::string("justifyContent"));
  270|      2|  return cssCamelNames;
  271|      2|}

_ZN2Wt5Utils18fixSelfClosingTagsEPNS_8rapidxml8xml_nodeIcEE:
  494|  8.65k|{
  495|  16.9k|  for (Wt::rapidxml::xml_node<> *x_child = x_node->first_node(); x_child;
  ------------------
  |  Branch (495:66): [True: 8.32k, False: 8.65k]
  ------------------
  496|  8.65k|       x_child = x_child->next_sibling())
  497|  8.32k|    fixSelfClosingTags(x_child);
  498|       |
  499|  8.65k|  if (!x_node->first_node()
  ------------------
  |  Branch (499:7): [True: 7.95k, False: 696]
  |  Branch (499:7): [True: 3.91k, False: 4.74k]
  ------------------
  500|  7.95k|      && x_node->value_size() == 0
  ------------------
  |  Branch (500:10): [True: 5.27k, False: 2.68k]
  ------------------
  501|  5.27k|      && !Wt::DomElement::isSelfClosingTag
  ------------------
  |  Branch (501:10): [True: 3.91k, False: 1.36k]
  ------------------
  502|  5.27k|      (std::string(x_node->name(), x_node->name_size()))) {
  503|       |    // We need to add an emtpy data node since <div /> is illegal HTML
  504|       |    // (but valid XML / XHTML)
  505|  3.91k|    Wt::rapidxml::xml_node<> *empty = x_node->document()->allocate_node(Wt::rapidxml::node_data);
  506|  3.91k|    x_node->append_node(empty);
  507|  3.91k|  }
  508|  8.65k|}

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

