_ZN7ser4cpp6BufferD2Ev:
   42|  6.68k|    ~Buffer() = default;
_ZN7ser4cpp6BufferC2Em:
   45|  6.68k|        HasLength(length),
   46|  6.68k|        bytes(std::make_unique<uint8_t[]>(length))
   47|  6.68k|    {}
_ZNK7ser4cpp6Buffer9as_rsliceEv:
   59|  34.9k|    {
   60|  34.9k|        return rseq_t(this->bytes.get(), this->length());
   61|  34.9k|    }
_ZN7ser4cpp6Buffer9as_wsliceEv:
   64|  37.1k|    {
   65|  37.1k|        return wseq_t(this->bytes.get(), this->length());
   66|  37.1k|    }

_ZN7ser4cpp9HasLengthImEC2Em:
   53|   755k|    explicit HasLength(L length) : m_length(length)
   54|   755k|    {}
_ZNK7ser4cpp9HasLengthImE6lengthEv:
   36|  2.34M|    {
   37|  2.34M|        return m_length;
   38|  2.34M|    }
_ZNK7ser4cpp9HasLengthImE12is_not_emptyEv:
   46|  57.5k|    {
   47|  57.5k|        return m_length != 0;
   48|  57.5k|    }
_ZNK7ser4cpp9HasLengthImE8is_emptyEv:
   41|  37.5k|    {
   42|  37.5k|        return m_length == 0;
   43|  37.5k|    }

_ZN7ser4cpp4RSeqImEC2EPKhm:
   59|   651k|        HasLength<L>(length),
   60|   651k|        buffer_(buffer)
   61|   651k|    {}
_ZNK7ser4cpp4RSeqImE4takeEm:
   70|   100k|    {
   71|   100k|        return RSeq(this->buffer_, (count < this->length()) ? count : this->length());
  ------------------
  |  Branch (71:36): [True: 86.9k, False: 13.8k]
  ------------------
   72|   100k|    }
_ZNK7ser4cpp4RSeqImEcvPKhEv:
   88|  1.14M|    {
   89|  1.14M|        return this->buffer_;
   90|  1.14M|    };
_ZNK7ser4cpp4RSeqImE4skipEm:
   75|  71.9k|    {
   76|  71.9k|        auto num = ser4cpp::min(this->length(), count);
   77|  71.9k|        return RSeq(this->buffer_ + num, this->length() - num);
   78|  71.9k|    }
_ZN7ser4cpp4RSeqImE7advanceEm:
   81|   581k|    {
   82|   581k|        auto num = ser4cpp::min(this->length(), count);
   83|   581k|        this->buffer_ += num;
   84|   581k|        this->m_length -= num;
   85|   581k|    }
_ZN7ser4cpp4RSeqImEC2Ev:
   55|  9.79k|    RSeq() : HasLength<L>(0)
   56|  9.79k|    {}

_ZN7ser4cpp4WSeqImE9copy_fromERKNS_4RSeqImEE:
  111|  50.4k|    {
  112|  50.4k|        return this->transfer_from<memcpy>(src);
  113|  50.4k|    }
_ZN7ser4cpp4WSeqImE13transfer_fromIXcvPFPvS3_PKvmEadL_Z6memcpyEEEENS_4RSeqImEERKS9_:
  123|  50.4k|    {
  124|  50.4k|        if (src.length() > this->length())
  ------------------
  |  Branch (124:13): [True: 0, False: 50.4k]
  ------------------
  125|      0|        {
  126|      0|            return RSeq<L>::empty();
  127|      0|        }
  128|  50.4k|        else
  129|  50.4k|        {
  130|  50.4k|            const auto ret = this->readonly().take(src.length());
  131|  50.4k|            mem_func(buffer_, src, src.length());
  132|  50.4k|            this->advance(src.length());
  133|  50.4k|            return ret;
  134|  50.4k|        }
  135|  50.4k|    }
_ZNK7ser4cpp4WSeqImE8readonlyEv:
  101|  50.4k|    {
  102|  50.4k|        return RSeq<L>(this->buffer_, this->length());
  103|  50.4k|    }
_ZN7ser4cpp4WSeqImE7advanceEm:
   70|  50.4k|    {
   71|  50.4k|        const auto num = ser4cpp::min(count, this->length());
   72|  50.4k|        this->buffer_ += num;
   73|  50.4k|        this->m_length -= num;
   74|  50.4k|        return num;
   75|  50.4k|    }
_ZN7ser4cpp4WSeqImEC2EPhm:
   55|  87.5k|    WSeq(uint8_t* buffer, L length) : HasLength<L>(length), buffer_(buffer)
   56|  87.5k|    {}
_ZNK7ser4cpp4WSeqImE4skipEm:
   90|  37.1k|    {
   91|  37.1k|        const auto num = ser4cpp::min(count, this->m_length);
   92|  37.1k|        return WSeq(this->buffer_ + num, this->m_length - num);
   93|  37.1k|    }

_ZN7ser4cpp11DoubleFloat9read_fromERNS_4RSeqImEERd:
   44|  8.04k|    {
   45|  8.04k|        uint64_t value;
   46|  8.04k|        if(UInt64::read_from(input, value))
  ------------------
  |  Branch (46:12): [True: 8.04k, False: 0]
  ------------------
   47|  8.04k|        {
   48|  8.04k|            out = to_double(value);
   49|  8.04k|            return true;
   50|  8.04k|        }
   51|       |        
   52|      0|        return false;
   53|  8.04k|    }
_ZN7ser4cpp11DoubleFloat9to_doubleEm:
   64|  8.04k|    {
   65|       |        // Extract the required values
   66|  8.04k|        bool sign = (value & 0x8000000000000000) != 0;
   67|  8.04k|        uint16_t exponent = static_cast<uint16_t>((value >> 52) & 0x7FF);
   68|  8.04k|        uint64_t mantissa = value & 0xFFFFFFFFFFFFF;
   69|       |
   70|       |        // Check special cases
   71|  8.04k|        if(exponent == 0x7FF)
  ------------------
  |  Branch (71:12): [True: 1.31k, False: 6.73k]
  ------------------
   72|  1.31k|        {
   73|  1.31k|            if(mantissa != 0)
  ------------------
  |  Branch (73:16): [True: 903, False: 407]
  ------------------
   74|    903|            {
   75|    903|                return std::numeric_limits<double>::quiet_NaN();
   76|    903|            }
   77|    407|            else
   78|    407|            {
   79|    407|                if(!sign)
  ------------------
  |  Branch (79:20): [True: 201, False: 206]
  ------------------
   80|    201|                {
   81|    201|                    return std::numeric_limits<double>::infinity();
   82|    201|                }
   83|    206|                else
   84|    206|                {
   85|    206|                    return -std::numeric_limits<double>::infinity();
   86|    206|                }
   87|       |                
   88|    407|            }
   89|  1.31k|        }
   90|  6.73k|        if(exponent == 0 && mantissa == 0)
  ------------------
  |  Branch (90:12): [True: 1.33k, False: 5.40k]
  |  Branch (90:29): [True: 283, False: 1.05k]
  ------------------
   91|    283|        {
   92|    283|            return 0.0;
   93|    283|        }
   94|       |
   95|       |        // Build the actual value
   96|  6.45k|        auto weighted_mantissa = static_cast<double>(mantissa)/(uint64_t{1} << 52);
   97|  6.45k|        double result;
   98|  6.45k|        if(exponent == 0)
  ------------------
  |  Branch (98:12): [True: 1.05k, False: 5.40k]
  ------------------
   99|  1.05k|        {
  100|  1.05k|            result = std::ldexp(weighted_mantissa, 2 - (uint16_t{1} << 11));
  101|  1.05k|        }
  102|  5.40k|        else
  103|  5.40k|        {
  104|  5.40k|            result = std::ldexp(1.0 + weighted_mantissa, exponent - 1023);
  105|  5.40k|        }
  106|       |
  107|       |        // Adjust the sign
  108|  6.45k|        if(sign)
  ------------------
  |  Branch (108:12): [True: 1.79k, False: 4.66k]
  ------------------
  109|  1.79k|        {
  110|  1.79k|            result = -result;
  111|  1.79k|        }
  112|       |
  113|  6.45k|        return result;
  114|  6.73k|    }

_ZN7ser4cpp13EndianHelpers4readERNS_4RSeqImEE:
  182|  90.1k|    {
  183|  90.1k|        return true;
  184|  90.1k|    }
_ZN7ser4cpp11serializers8read_oneIhEEbRNS_4RSeqImEERT_:
   41|  77.9k|{
   42|  77.9k|    return UInt8::read_from(input, out);
   43|  77.9k|}
_ZN7ser4cpp11serializers8read_oneIsEEbRNS_4RSeqImEERT_:
   47|  9.90k|{
   48|  9.90k|    return Int16::read_from(input, out);
   49|  9.90k|}
_ZN7ser4cpp11serializers8read_oneItEEbRNS_4RSeqImEERT_:
   53|  16.4k|{
   54|  16.4k|    return UInt16::read_from(input, out);
   55|  16.4k|}
_ZN7ser4cpp11serializers8read_oneIiEEbRNS_4RSeqImEERT_:
   59|  8.57k|{
   60|  8.57k|    return Int32::read_from(input, out);
   61|  8.57k|}
_ZN7ser4cpp11serializers8read_oneIjEEbRNS_4RSeqImEERT_:
   65|  13.1k|{
   66|  13.1k|    return UInt32::read_from(input, out);
   67|  13.1k|}
_ZN7ser4cpp11serializers8read_oneIdEEbRNS_4RSeqImEERT_:
   89|  8.04k|{
   90|  8.04k|    return DoubleFloat::read_from(input, out);
   91|  8.04k|}
_ZN7ser4cpp11serializers8read_oneIfEEbRNS_4RSeqImEERT_:
   95|  10.3k|{
   96|  10.3k|    return SingleFloat::read_from(input, out);
   97|  10.3k|}
_ZN7ser4cpp13EndianHelpers4readIhJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  25.4k|    {
  171|  25.4k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 25.4k, False: 0]
  |  Branch (171:55): [True: 25.4k, False: 0]
  ------------------
  172|  25.4k|    }
_ZN7ser4cpp13EndianHelpers4readIhJN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  3.64k|    {
  171|  3.64k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 3.64k, False: 0]
  |  Branch (171:55): [True: 3.64k, False: 0]
  ------------------
  172|  3.64k|    }
_ZN7ser4cpp13EndianHelpers4readIN8opendnp37DNPTimeEJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  19.4k|    {
  171|  19.4k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 19.4k, False: 0]
  |  Branch (171:55): [True: 19.4k, False: 0]
  ------------------
  172|  19.4k|    }
_ZN7ser4cpp13EndianHelpers4readIhJtEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  6.27k|    {
  171|  6.27k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 6.27k, False: 0]
  |  Branch (171:55): [True: 6.27k, False: 0]
  ------------------
  172|  6.27k|    }
_ZN7ser4cpp13EndianHelpers4readItJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  13.6k|    {
  171|  13.6k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 13.6k, False: 0]
  |  Branch (171:55): [True: 13.6k, False: 0]
  ------------------
  172|  13.6k|    }
_ZN7ser4cpp13EndianHelpers4readIhJhjjhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|    923|    {
  171|    923|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 923, False: 0]
  |  Branch (171:55): [True: 923, False: 0]
  ------------------
  172|    923|    }
_ZN7ser4cpp13EndianHelpers4readIhJjjhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|    923|    {
  171|    923|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 923, False: 0]
  |  Branch (171:55): [True: 923, False: 0]
  ------------------
  172|    923|    }
_ZN7ser4cpp13EndianHelpers4readIjJjhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|    923|    {
  171|    923|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 923, False: 0]
  |  Branch (171:55): [True: 923, False: 0]
  ------------------
  172|    923|    }
_ZN7ser4cpp13EndianHelpers4readIjJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.64k|    {
  171|  2.64k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.64k, False: 0]
  |  Branch (171:55): [True: 2.64k, False: 0]
  ------------------
  172|  2.64k|    }
_ZN7ser4cpp13EndianHelpers4readIhJjEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.00k|    {
  171|  5.00k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.00k, False: 0]
  |  Branch (171:55): [True: 5.00k, False: 0]
  ------------------
  172|  5.00k|    }
_ZN7ser4cpp13EndianHelpers4readIjJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  7.40k|    {
  171|  7.40k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 7.40k, False: 0]
  |  Branch (171:55): [True: 7.40k, False: 0]
  ------------------
  172|  7.40k|    }
_ZN7ser4cpp13EndianHelpers4readIhJjN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.13k|    {
  171|  2.13k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.13k, False: 0]
  |  Branch (171:55): [True: 2.13k, False: 0]
  ------------------
  172|  2.13k|    }
_ZN7ser4cpp13EndianHelpers4readIjJN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.13k|    {
  171|  2.13k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.13k, False: 0]
  |  Branch (171:55): [True: 2.13k, False: 0]
  ------------------
  172|  2.13k|    }
_ZN7ser4cpp13EndianHelpers4readIhJtN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.81k|    {
  171|  2.81k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.81k, False: 0]
  |  Branch (171:55): [True: 2.81k, False: 0]
  ------------------
  172|  2.81k|    }
_ZN7ser4cpp13EndianHelpers4readItJN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.81k|    {
  171|  2.81k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.81k, False: 0]
  |  Branch (171:55): [True: 2.81k, False: 0]
  ------------------
  172|  2.81k|    }
_ZN7ser4cpp13EndianHelpers4readIhJiEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  4.71k|    {
  171|  4.71k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 4.71k, False: 0]
  |  Branch (171:55): [True: 4.71k, False: 0]
  ------------------
  172|  4.71k|    }
_ZN7ser4cpp13EndianHelpers4readIhJsEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.32k|    {
  171|  5.32k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.32k, False: 0]
  |  Branch (171:55): [True: 5.32k, False: 0]
  ------------------
  172|  5.32k|    }
_ZN7ser4cpp13EndianHelpers4readIiJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.47k|    {
  171|  5.47k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.47k, False: 0]
  |  Branch (171:55): [True: 5.47k, False: 0]
  ------------------
  172|  5.47k|    }
_ZN7ser4cpp13EndianHelpers4readIsJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  6.25k|    {
  171|  6.25k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 6.25k, False: 0]
  |  Branch (171:55): [True: 6.25k, False: 0]
  ------------------
  172|  6.25k|    }
_ZN7ser4cpp13EndianHelpers4readIhJfEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  7.30k|    {
  171|  7.30k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 7.30k, False: 0]
  |  Branch (171:55): [True: 7.30k, False: 0]
  ------------------
  172|  7.30k|    }
_ZN7ser4cpp13EndianHelpers4readIfJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  7.30k|    {
  171|  7.30k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 7.30k, False: 0]
  |  Branch (171:55): [True: 7.30k, False: 0]
  ------------------
  172|  7.30k|    }
_ZN7ser4cpp13EndianHelpers4readIhJdEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.20k|    {
  171|  5.20k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.20k, False: 0]
  |  Branch (171:55): [True: 5.20k, False: 0]
  ------------------
  172|  5.20k|    }
_ZN7ser4cpp13EndianHelpers4readIdJEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  5.20k|    {
  171|  5.20k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 5.20k, False: 0]
  |  Branch (171:55): [True: 5.20k, False: 0]
  ------------------
  172|  5.20k|    }
_ZN7ser4cpp13EndianHelpers4readIhJiN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.36k|    {
  171|  2.36k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.36k, False: 0]
  |  Branch (171:55): [True: 2.36k, False: 0]
  ------------------
  172|  2.36k|    }
_ZN7ser4cpp13EndianHelpers4readIiJN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.36k|    {
  171|  2.36k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.36k, False: 0]
  |  Branch (171:55): [True: 2.36k, False: 0]
  ------------------
  172|  2.36k|    }
_ZN7ser4cpp13EndianHelpers4readIhJsN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.14k|    {
  171|  2.14k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.14k, False: 0]
  |  Branch (171:55): [True: 2.14k, False: 0]
  ------------------
  172|  2.14k|    }
_ZN7ser4cpp13EndianHelpers4readIsJN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.14k|    {
  171|  2.14k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.14k, False: 0]
  |  Branch (171:55): [True: 2.14k, False: 0]
  ------------------
  172|  2.14k|    }
_ZN7ser4cpp13EndianHelpers4readIhJfN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.02k|    {
  171|  2.02k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.02k, False: 0]
  |  Branch (171:55): [True: 2.02k, False: 0]
  ------------------
  172|  2.02k|    }
_ZN7ser4cpp13EndianHelpers4readIfJN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  2.02k|    {
  171|  2.02k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 2.02k, False: 0]
  |  Branch (171:55): [True: 2.02k, False: 0]
  ------------------
  172|  2.02k|    }
_ZN7ser4cpp13EndianHelpers4readIhJdN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  1.77k|    {
  171|  1.77k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 1.77k, False: 0]
  |  Branch (171:55): [True: 1.77k, False: 0]
  ------------------
  172|  1.77k|    }
_ZN7ser4cpp13EndianHelpers4readIdJN8opendnp37DNPTimeEEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  1.77k|    {
  171|  1.77k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 1.77k, False: 0]
  |  Branch (171:55): [True: 1.77k, False: 0]
  ------------------
  172|  1.77k|    }
_ZN7ser4cpp13EndianHelpers4readIiJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|    736|    {
  171|    736|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 736, False: 0]
  |  Branch (171:55): [True: 736, False: 0]
  ------------------
  172|    736|    }
_ZN7ser4cpp13EndianHelpers4readIsJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  1.50k|    {
  171|  1.50k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 1.50k, False: 0]
  |  Branch (171:55): [True: 1.50k, False: 0]
  ------------------
  172|  1.50k|    }
_ZN7ser4cpp13EndianHelpers4readIfJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  1.05k|    {
  171|  1.05k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 1.05k, False: 0]
  |  Branch (171:55): [True: 1.05k, False: 0]
  ------------------
  172|  1.05k|    }
_ZN7ser4cpp13EndianHelpers4readIdJhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  1.07k|    {
  171|  1.07k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 1.07k, False: 0]
  |  Branch (171:55): [True: 1.07k, False: 0]
  ------------------
  172|  1.07k|    }
_ZN7ser4cpp13EndianHelpers4readIN8opendnp37DNPTimeEJjhEEEbRNS_4RSeqImEERT_DpRT0_:
  170|  1.72k|    {
  171|  1.72k|        return serializers::read_one(input, value) && read(input, args...);
  ------------------
  |  Branch (171:16): [True: 1.72k, False: 0]
  |  Branch (171:55): [True: 1.72k, False: 0]
  ------------------
  172|  1.72k|    }

_ZN7ser4cpp5UInt89read_fromERNS_4RSeqImEERh:
   48|   367k|    {
   49|   367k|        if (input.length() < size) return false;
  ------------------
  |  Branch (49:13): [True: 0, False: 367k]
  ------------------
   50|       |
   51|   367k|        out = read(input);
   52|   367k|        input.advance(size);
   53|   367k|        return true;
   54|   367k|    }
_ZN7ser4cpp5UInt84readEPKh:
   73|   367k|    {
   74|   367k|        return (*start);
   75|   367k|    }
_ZN7ser4cpp5Bit16ItLh0ELh1EE9read_fromERNS_4RSeqImEERt:
  100|   103k|    {
  101|   103k|        if (input.length() < size) return false;
  ------------------
  |  Branch (101:13): [True: 0, False: 103k]
  ------------------
  102|       |
  103|   103k|        out = read(input);
  104|   103k|        input.advance(size);
  105|   103k|        return true;
  106|   103k|    }
_ZN7ser4cpp5Bit16ItLh0ELh1EE4readEPKh:
  116|   103k|    {
  117|   103k|        return (static_cast<T>(data[B0]) << 0) | (static_cast<T>(data[B1]) << 8);
  118|   103k|    }
_ZN7ser4cpp5Bit64ImLh0ELh1ELh2ELh3ELh4ELh5ELh6ELh7EE9read_fromERNS_4RSeqImEERm:
  208|  8.04k|    {
  209|  8.04k|        if (input.length() < size) return false;
  ------------------
  |  Branch (209:13): [True: 0, False: 8.04k]
  ------------------
  210|       |
  211|  8.04k|        out = read(input);
  212|  8.04k|        input.advance(size);
  213|  8.04k|        return true;
  214|  8.04k|    }
_ZN7ser4cpp5Bit64ImLh0ELh1ELh2ELh3ELh4ELh5ELh6ELh7EE4readEPKh:
  224|  8.04k|    {
  225|  8.04k|        return	(static_cast<T>(data[B0]) << 0) |
  226|  8.04k|                (static_cast<T>(data[B1]) << 8) |
  227|  8.04k|                (static_cast<T>(data[B2]) << 16) |
  228|  8.04k|                (static_cast<T>(data[B3]) << 24) |
  229|  8.04k|                (static_cast<T>(data[B4]) << 32) |
  230|  8.04k|                (static_cast<T>(data[B5]) << 40) |
  231|  8.04k|                (static_cast<T>(data[B6]) << 48) |
  232|  8.04k|                (static_cast<T>(data[B7]) << 56);
  233|  8.04k|    }
_ZN7ser4cpp5Bit32IjLh0ELh1ELh2ELh3EE9read_fromERNS_4RSeqImEERj:
  150|  23.4k|    {
  151|  23.4k|        if (input.length() < size) return false;
  ------------------
  |  Branch (151:13): [True: 0, False: 23.4k]
  ------------------
  152|       |
  153|  23.4k|        out = read(input);
  154|  23.4k|        input.advance(size);
  155|  23.4k|        return true;
  156|  23.4k|    }
_ZN7ser4cpp5Bit32IjLh0ELh1ELh2ELh3EE4readEPKh:
  166|  23.4k|    {
  167|  23.4k|        return	(static_cast<T>(data[B0]) << 0) |
  168|  23.4k|                (static_cast<T>(data[B1]) << 8) |
  169|  23.4k|                (static_cast<T>(data[B2]) << 16) |
  170|  23.4k|                (static_cast<T>(data[B3]) << 24);
  171|  23.4k|    }
_ZN7ser4cpp5Bit16IsLh0ELh1EE9read_fromERNS_4RSeqImEERs:
  100|  9.90k|    {
  101|  9.90k|        if (input.length() < size) return false;
  ------------------
  |  Branch (101:13): [True: 0, False: 9.90k]
  ------------------
  102|       |
  103|  9.90k|        out = read(input);
  104|  9.90k|        input.advance(size);
  105|  9.90k|        return true;
  106|  9.90k|    }
_ZN7ser4cpp5Bit16IsLh0ELh1EE4readEPKh:
  116|  9.90k|    {
  117|  9.90k|        return (static_cast<T>(data[B0]) << 0) | (static_cast<T>(data[B1]) << 8);
  118|  9.90k|    }
_ZN7ser4cpp5Bit32IiLh0ELh1ELh2ELh3EE9read_fromERNS_4RSeqImEERi:
  150|  8.57k|    {
  151|  8.57k|        if (input.length() < size) return false;
  ------------------
  |  Branch (151:13): [True: 0, False: 8.57k]
  ------------------
  152|       |
  153|  8.57k|        out = read(input);
  154|  8.57k|        input.advance(size);
  155|  8.57k|        return true;
  156|  8.57k|    }
_ZN7ser4cpp5Bit32IiLh0ELh1ELh2ELh3EE4readEPKh:
  166|  8.57k|    {
  167|  8.57k|        return	(static_cast<T>(data[B0]) << 0) |
  168|  8.57k|                (static_cast<T>(data[B1]) << 8) |
  169|  8.57k|                (static_cast<T>(data[B2]) << 16) |
  170|  8.57k|                (static_cast<T>(data[B3]) << 24);
  171|  8.57k|    }
_ZN7ser4cpp6UBit48ILh0ELh1ELh2ELh3ELh4ELh5EE9read_fromERNS_4RSeqImEERNS_10UInt48TypeE:
  262|  21.2k|    {
  263|  21.2k|        if (input.length() < size) return false;
  ------------------
  |  Branch (263:13): [True: 0, False: 21.2k]
  ------------------
  264|       |
  265|  21.2k|        out = read(input);
  266|  21.2k|        input.advance(size);
  267|  21.2k|        return true;
  268|  21.2k|    }
_ZN7ser4cpp6UBit48ILh0ELh1ELh2ELh3ELh4ELh5EE4readEPKh:
  285|  21.2k|    {
  286|  21.2k|        return UInt48Type(
  287|  21.2k|                    (static_cast<uint64_t>(data[B0]) << 0) |
  288|  21.2k|                    (static_cast<uint64_t>(data[B1]) << 8) |
  289|  21.2k|                    (static_cast<uint64_t>(data[B2]) << 16) |
  290|  21.2k|                    (static_cast<uint64_t>(data[B3]) << 24) |
  291|  21.2k|                    (static_cast<uint64_t>(data[B4]) << 32) |
  292|  21.2k|                    (static_cast<uint64_t>(data[B5]) << 40));
  293|  21.2k|    }

_ZN7ser4cpp11SingleFloat9read_fromERNS_4RSeqImEERf:
   44|  10.3k|    {
   45|  10.3k|        uint32_t value;
   46|  10.3k|        if(UInt32::read_from(input, value))
  ------------------
  |  Branch (46:12): [True: 10.3k, False: 0]
  ------------------
   47|  10.3k|        {
   48|  10.3k|            out = to_float32(value);
   49|  10.3k|            return true;
   50|  10.3k|        }
   51|       |        
   52|      0|        return false;
   53|  10.3k|    }
_ZN7ser4cpp11SingleFloat10to_float32Ej:
   64|  10.3k|    {
   65|       |        // Extract the required values
   66|  10.3k|        bool sign = (value & 0x80000000) != 0;
   67|  10.3k|        uint8_t exponent = static_cast<uint8_t>((value >> 23) & 0xFF);
   68|  10.3k|        uint32_t mantissa = value & 0x7FFFFF;
   69|       |
   70|       |        // Check special cases
   71|  10.3k|        if(exponent == 0xFF)
  ------------------
  |  Branch (71:12): [True: 1.67k, False: 8.70k]
  ------------------
   72|  1.67k|        {
   73|  1.67k|            if(mantissa != 0)
  ------------------
  |  Branch (73:16): [True: 1.25k, False: 419]
  ------------------
   74|  1.25k|            {
   75|  1.25k|                return std::numeric_limits<float>::quiet_NaN();
   76|  1.25k|            }
   77|    419|            else
   78|    419|            {
   79|    419|                if(!sign)
  ------------------
  |  Branch (79:20): [True: 195, False: 224]
  ------------------
   80|    195|                {
   81|    195|                    return std::numeric_limits<float>::infinity();
   82|    195|                }
   83|    224|                else
   84|    224|                {
   85|    224|                    return -std::numeric_limits<float>::infinity();
   86|    224|                }
   87|       |                
   88|    419|            }
   89|  1.67k|        }
   90|  8.70k|        if(exponent == 0 && mantissa == 0)
  ------------------
  |  Branch (90:12): [True: 2.29k, False: 6.40k]
  |  Branch (90:29): [True: 1.00k, False: 1.29k]
  ------------------
   91|  1.00k|        {
   92|  1.00k|            return 0.0f;
   93|  1.00k|        }
   94|       |
   95|       |        // Build the actual value
   96|  7.70k|        auto weighted_mantissa = static_cast<float>(mantissa)/(uint32_t{1} << 23);
   97|  7.70k|        float result;
   98|  7.70k|        if(exponent == 0)
  ------------------
  |  Branch (98:12): [True: 1.29k, False: 6.40k]
  ------------------
   99|  1.29k|        {
  100|  1.29k|            result = std::ldexp(weighted_mantissa, 2 - (uint16_t{1} << 8));
  101|  1.29k|        }
  102|  6.40k|        else
  103|  6.40k|        {
  104|  6.40k|            result = std::ldexp(1.0f + weighted_mantissa, exponent - 127);
  105|  6.40k|        }
  106|       |
  107|       |        // Adjust the sign
  108|  7.70k|        if(sign)
  ------------------
  |  Branch (108:12): [True: 2.33k, False: 5.36k]
  ------------------
  109|  2.33k|        {
  110|  2.33k|            result = -result;
  111|  2.33k|        }
  112|       |
  113|  7.70k|        return result;
  114|  8.70k|    }

_ZN7ser4cpp10UInt48TypeC2Em:
   37|  21.2k|    explicit UInt48Type(uint64_t value) : representation(value)
   38|  21.2k|    {}
_ZN7ser4cpp10UInt48TypeC2Ev:
   40|  21.2k|    UInt48Type() : representation(0)
   41|  21.2k|    {}
_ZNK7ser4cpp10UInt48Type3GetEv:
   49|  21.2k|    {
   50|  21.2k|        return representation;
   51|  21.2k|    }

_ZN7ser4cpp3minImEET_S1_S1_:
   33|   740k|{
   34|   740k|    return (a < b) ? a : b;
  ------------------
  |  Branch (34:12): [True: 82.9k, False: 657k]
  ------------------
   35|   740k|}
_ZN7ser4cpp3minIhEET_S1_S1_:
   33|  2.14k|{
   34|  2.14k|    return (a < b) ? a : b;
  ------------------
  |  Branch (34:12): [True: 0, False: 2.14k]
  ------------------
   35|  2.14k|}

_ZN7ser4cpp14HexConversions11to_hex_charEc:
   42|   111k|    {
   43|   111k|        return (c > 9) ? ('A' + (c - 10)) : ('0' + c);
  ------------------
  |  Branch (43:16): [True: 35.2k, False: 76.6k]
  ------------------
   44|   111k|    }

_ZN7ser4cpp10UncopyableD2Ev:
   39|  6.68k|    virtual ~Uncopyable() = default;
_ZN7ser4cpp10UncopyableC2Ev:
   37|  6.68k|    Uncopyable() = default; //allow construction/destruction/move

_ZN8opendnp313ConsoleLogger6CreateEb:
   46|  6.68k|    {
   47|  6.68k|        return std::make_shared<ConsoleLogger>(printLocation);
   48|  6.68k|    };
_ZN8opendnp313ConsoleLoggerC2Eb:
   50|  6.68k|    ConsoleLogger(bool printLocation) : printLocation(printLocation) {}

_ZN8opendnp312AnalogOutputIsEC2Es:
   37|  1.50k|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIsEC2EsNS_13CommandStatusE:
   39|  1.50k|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}
_ZN8opendnp312AnalogOutputIiEC2Ei:
   37|    736|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIiEC2EiNS_13CommandStatusE:
   39|    736|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}
_ZN8opendnp312AnalogOutputIfEC2Ef:
   37|  1.05k|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIfEC2EfNS_13CommandStatusE:
   39|  1.05k|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}
_ZN8opendnp312AnalogOutputIdEC2Ed:
   37|  1.07k|    AnalogOutput(T value_) : value(value_), status(CommandStatus::SUCCESS) {}
_ZN8opendnp312AnalogOutputIdEC2EdNS_13CommandStatusE:
   39|  1.07k|    AnalogOutput(T value_, CommandStatus status_) : value(value_), status(status_) {}

_ZN8opendnp311MeasurementC2ENS_5FlagsE:
   43|   179k|    Measurement(Flags flags) : flags(flags) {}
_ZN8opendnp311MeasurementC2ENS_5FlagsENS_7DNPTimeE:
   45|  15.0k|    Measurement(Flags flags, DNPTime time) : flags(flags), time(time) {}
_ZN8opendnp316TypedMeasurementIbEC2EbNS_5FlagsE:
   59|  82.0k|    TypedMeasurement(T value, Flags flags) : Measurement(flags), value(value) {}
_ZN8opendnp316TypedMeasurementIbEC2EbNS_5FlagsENS_7DNPTimeE:
   60|  2.69k|    TypedMeasurement(T value, Flags flags, DNPTime time) : Measurement(flags, time), value(value) {}
_ZN8opendnp316TypedMeasurementINS_9DoubleBitEEC2ES1_NS_5FlagsE:
   59|  19.1k|    TypedMeasurement(T value, Flags flags) : Measurement(flags), value(value) {}
_ZN8opendnp316TypedMeasurementINS_9DoubleBitEEC2ES1_NS_5FlagsENS_7DNPTimeE:
   60|  2.05k|    TypedMeasurement(T value, Flags flags, DNPTime time) : Measurement(flags, time), value(value) {}
_ZN8opendnp316TypedMeasurementIdEC2ENS_5FlagsE:
   58|  25.8k|    TypedMeasurement(Flags flags) : Measurement(flags), value(0) {}
_ZN8opendnp316TypedMeasurementIdEC2EdNS_5FlagsE:
   59|  20.5k|    TypedMeasurement(T value, Flags flags) : Measurement(flags), value(value) {}
_ZN8opendnp316TypedMeasurementIdEC2EdNS_5FlagsENS_7DNPTimeE:
   60|  5.36k|    TypedMeasurement(T value, Flags flags, DNPTime time) : Measurement(flags, time), value(value) {}
_ZN8opendnp316TypedMeasurementIjEC2EjNS_5FlagsE:
   59|  31.9k|    TypedMeasurement(T value, Flags flags) : Measurement(flags), value(value) {}
_ZN8opendnp316TypedMeasurementIjEC2EjNS_5FlagsENS_7DNPTimeE:
   60|  4.95k|    TypedMeasurement(T value, Flags flags, DNPTime time) : Measurement(flags, time), value(value) {}

_ZN8opendnp37DNPTimeC2Ev:
   32|   196k|    DNPTime() : value(0), quality(TimestampQuality::INVALID) {}
_ZN8opendnp37DNPTimeC2Em:
   33|  32.6k|    explicit DNPTime(uint64_t value) : value(value), quality(TimestampQuality::SYNCHRONIZED) {}

_ZN8opendnp35FlagsC2Eh:
   42|   134k|    explicit Flags(uint8_t value) : value(value) {}

_ZN8opendnp38IINField5EmptyEv:
   83|  39.4k|    {
   84|  39.4k|        return IINField(0, 0);
   85|  39.4k|    }
_ZN8opendnp38IINFieldC2ENS_6IINBitE:
   87|    555|    IINField(IINBit bit) : LSB(0), MSB(0)
   88|    555|    {
   89|    555|        this->SetBit(bit);
   90|    555|    }
_ZN8opendnp38IINFieldC2Ehh:
   92|  40.6k|    IINField(uint8_t aLSB, uint8_t aMSB) : LSB(aLSB), MSB(aMSB) {}
_ZN8opendnp38IINFieldC2Ev:
   94|  34.6k|    IINField() : LSB(0), MSB(0) {}
_ZNK8opendnp38IINField3AnyEv:
  111|  39.9k|    {
  112|  39.9k|        return (LSB | MSB) != 0;
  113|  39.9k|    }
_ZN8opendnp38IINFieldoRERKS0_:
  131|  39.9k|    {
  132|  39.9k|        MSB |= aIIN.MSB;
  133|  39.9k|        LSB |= aIIN.LSB;
  134|  39.9k|        return *this;
  135|  39.9k|    }
_ZN8opendnp38IINField3SetENS0_7MSBMaskE:
  175|    555|    {
  176|    555|        MSB |= static_cast<uint8_t>(bit);
  177|    555|    }

_ZN8opendnp37IndexedINS_6BinaryEEC2Ev:
   36|  3.57k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_15DoubleBitBinaryEEC2Ev:
   36|  3.74k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_18BinaryOutputStatusEEC2Ev:
   36|  3.04k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_23ControlRelayOutputBlockEEC2Ev:
   36|    923|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_18BinaryCommandEventEEC2Ev:
   36|  7.44k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_7CounterEEC2Ev:
   36|  3.43k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_13FrozenCounterEEC2Ev:
   36|  3.60k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_6AnalogEEC2Ev:
   36|  5.34k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_17AnalogOutputInt32EEC2Ev:
   36|    736|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_17AnalogOutputInt16EEC2Ev:
   36|  1.50k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_19AnalogOutputFloat32EEC2Ev:
   36|  1.05k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_20AnalogOutputDouble64EEC2Ev:
   36|  1.07k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_18AnalogOutputStatusEEC2Ev:
   36|  6.40k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_18AnalogCommandEventEEC2Ev:
   36|  6.66k|    Indexed() : value(), index(0) {}
_ZN8opendnp37IndexedINS_15TimeAndIntervalEEC2Ev:
   36|    810|    Indexed() : value(), index(0) {}
_ZN8opendnp39WithIndexINS_11OctetStringEEENS_7IndexedIT_EERKS3_t:
   43|  2.14k|{
   44|  2.14k|    return Indexed<T>(value, index);
   45|  2.14k|}
_ZN8opendnp37IndexedINS_11OctetStringEEC2ERKS1_t:
   34|  2.14k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_6BinaryEEENS_7IndexedIT_EERKS3_t:
   43|  36.3k|{
   44|  36.3k|    return Indexed<T>(value, index);
   45|  36.3k|}
_ZN8opendnp37IndexedINS_6BinaryEEC2ERKS1_t:
   34|  36.3k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_15DoubleBitBinaryEEENS_7IndexedIT_EERKS3_t:
   43|  11.8k|{
   44|  11.8k|    return Indexed<T>(value, index);
   45|  11.8k|}
_ZN8opendnp37IndexedINS_15DoubleBitBinaryEEC2ERKS1_t:
   34|  11.8k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_18BinaryOutputStatusEEENS_7IndexedIT_EERKS3_t:
   43|  30.6k|{
   44|  30.6k|    return Indexed<T>(value, index);
   45|  30.6k|}
_ZN8opendnp37IndexedINS_18BinaryOutputStatusEEC2ERKS1_t:
   34|  30.6k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_7CounterEEENS_7IndexedIT_EERKS3_t:
   43|  4.58k|{
   44|  4.58k|    return Indexed<T>(value, index);
   45|  4.58k|}
_ZN8opendnp37IndexedINS_7CounterEEC2ERKS1_t:
   34|  4.58k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_13FrozenCounterEEENS_7IndexedIT_EERKS3_t:
   43|  6.84k|{
   44|  6.84k|    return Indexed<T>(value, index);
   45|  6.84k|}
_ZN8opendnp37IndexedINS_13FrozenCounterEEC2ERKS1_t:
   34|  6.84k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_6AnalogEEENS_7IndexedIT_EERKS3_t:
   43|  7.37k|{
   44|  7.37k|    return Indexed<T>(value, index);
   45|  7.37k|}
_ZN8opendnp37IndexedINS_6AnalogEEC2ERKS1_t:
   34|  7.37k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_18AnalogOutputStatusEEENS_7IndexedIT_EERKS3_t:
   43|  6.75k|{
   44|  6.75k|    return Indexed<T>(value, index);
   45|  6.75k|}
_ZN8opendnp37IndexedINS_18AnalogOutputStatusEEC2ERKS1_t:
   34|  6.75k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_15TimeAndIntervalEEENS_7IndexedIT_EERKS3_t:
   43|    916|{
   44|    916|    return Indexed<T>(value, index);
   45|    916|}
_ZN8opendnp37IndexedINS_15TimeAndIntervalEEC2ERKS1_t:
   34|    916|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}
_ZN8opendnp39WithIndexINS_8IINValueEEENS_7IndexedIT_EERKS3_t:
   43|  33.7k|{
   44|  33.7k|    return Indexed<T>(value, index);
   45|  33.7k|}
_ZN8opendnp37IndexedINS_8IINValueEEC2ERKS1_t:
   34|  33.7k|    Indexed(const T& value_, uint16_t index_) : value(value_), index(index_) {}

_ZN8opendnp311OctetStringC2ERKNS_6BufferE:
   57|  2.14k|    OctetString(const Buffer& buffer) : OctetData(buffer) {}

LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEE11ForeachItemIZNS_14LoggingHandler9PrintCrobERKS4_E3$_0EEvRKT_:
   79|    287|    {
   80|    287|        FunctorVisitor<T, Fun> visitor(fun);
   81|    287|        this->Foreach(visitor);
   82|    287|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_14LoggingHandler9PrintCrobERKNS_11ICollectionIS3_EEE3$_0EC2ERKS9_:
   46|    287|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_14LoggingHandler9PrintCrobERKNS_11ICollectionIS3_EEE3$_0E7OnValueERKS3_:
   49|    923|    {
   50|    923|        fun(value);
   51|    923|    }
LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_11OctetStringEEEE11ForeachItemIZNS_14LoggingHandler11PrintOctetsERKS4_E3$_0EEvRKT_:
   79|  1.02k|    {
   80|  1.02k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  1.02k|        this->Foreach(visitor);
   82|  1.02k|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_11OctetStringEEEZNS_14LoggingHandler11PrintOctetsERKNS_11ICollectionIS3_EEE3$_0EC2ERKS9_:
   46|  1.02k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_11OctetStringEEEZNS_14LoggingHandler11PrintOctetsERKNS_11ICollectionIS3_EEE3$_0E7OnValueERKS3_:
   49|  2.14k|    {
   50|  2.14k|        fun(value);
   51|  2.14k|    }
LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_15TimeAndIntervalEEEE11ForeachItemIZNS_14LoggingHandler20PrintTimeAndIntervalERKS4_E3$_0EEvRKT_:
   79|    539|    {
   80|    539|        FunctorVisitor<T, Fun> visitor(fun);
   81|    539|        this->Foreach(visitor);
   82|    539|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_15TimeAndIntervalEEEZNS_14LoggingHandler20PrintTimeAndIntervalERKNS_11ICollectionIS3_EEE3$_0EC2ERKS9_:
   46|    539|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_15TimeAndIntervalEEEZNS_14LoggingHandler20PrintTimeAndIntervalERKNS_11ICollectionIS3_EEE3$_0E7OnValueERKS3_:
   49|  1.72k|    {
   50|  1.72k|        fun(value);
   51|  1.72k|    }
_ZNK8opendnp311ICollectionINS_11Group50Var1EE11ForeachItemIZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS0_IT_EEEUlRKS1_E_EEvRKS7_:
   79|    258|    {
   80|    258|        FunctorVisitor<T, Fun> visitor(fun);
   81|    258|        this->Foreach(visitor);
   82|    258|    }
_ZN8opendnp314FunctorVisitorINS_11Group50Var1EZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_EC2ERKSC_:
   46|    258|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_11Group50Var1EZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_E7OnValueESB_:
   49|    850|    {
   50|    850|        fun(value);
   51|    850|    }
_ZNK8opendnp311ICollectionINS_11Group51Var1EE11ForeachItemIZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS0_IT_EEEUlRKS1_E_EEvRKS7_:
   79|    297|    {
   80|    297|        FunctorVisitor<T, Fun> visitor(fun);
   81|    297|        this->Foreach(visitor);
   82|    297|    }
_ZN8opendnp314FunctorVisitorINS_11Group51Var1EZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_EC2ERKSC_:
   46|    297|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_11Group51Var1EZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_E7OnValueESB_:
   49|    593|    {
   50|    593|        fun(value);
   51|    593|    }
_ZNK8opendnp311ICollectionINS_11Group51Var2EE11ForeachItemIZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS0_IT_EEEUlRKS1_E_EEvRKS7_:
   79|    414|    {
   80|    414|        FunctorVisitor<T, Fun> visitor(fun);
   81|    414|        this->Foreach(visitor);
   82|    414|    }
_ZN8opendnp314FunctorVisitorINS_11Group51Var2EZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_EC2ERKSC_:
   46|    414|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_11Group51Var2EZNS_14LoggingHandler9PrintTimeIS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_E7OnValueESB_:
   49|  1.15k|    {
   50|  1.15k|        fun(value);
   51|  1.15k|    }
_ZNK8opendnp311ICollectionINS_11Group52Var1EE11ForeachItemIZNS_14LoggingHandler11PrintTime16IS1_EENS_8IINFieldERKNS0_IT_EEEUlRKS1_E_EEvRKS7_:
   79|    259|    {
   80|    259|        FunctorVisitor<T, Fun> visitor(fun);
   81|    259|        this->Foreach(visitor);
   82|    259|    }
_ZN8opendnp314FunctorVisitorINS_11Group52Var1EZNS_14LoggingHandler11PrintTime16IS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_EC2ERKSC_:
   46|    259|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_11Group52Var1EZNS_14LoggingHandler11PrintTime16IS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_E7OnValueESB_:
   49|  2.84k|    {
   50|  2.84k|        fun(value);
   51|  2.84k|    }
_ZNK8opendnp311ICollectionINS_11Group52Var2EE11ForeachItemIZNS_14LoggingHandler11PrintTime16IS1_EENS_8IINFieldERKNS0_IT_EEEUlRKS1_E_EEvRKS7_:
   79|    272|    {
   80|    272|        FunctorVisitor<T, Fun> visitor(fun);
   81|    272|        this->Foreach(visitor);
   82|    272|    }
_ZN8opendnp314FunctorVisitorINS_11Group52Var2EZNS_14LoggingHandler11PrintTime16IS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_EC2ERKSC_:
   46|    272|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_11Group52Var2EZNS_14LoggingHandler11PrintTime16IS1_EENS_8IINFieldERKNS_11ICollectionIT_EEEUlRKS1_E_E7OnValueESB_:
   49|  2.44k|    {
   50|  2.44k|        fun(value);
   51|  2.44k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_8IINValueEEEE11ForeachItemIZNS_14LoggingHandler6PrintVIS2_EENS_8IINFieldERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKS9_:
   79|    324|    {
   80|    324|        FunctorVisitor<T, Fun> visitor(fun);
   81|    324|        this->Foreach(visitor);
   82|    324|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_8IINValueEEEZNS_14LoggingHandler6PrintVIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSF_:
   46|    324|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_8IINValueEEEZNS_14LoggingHandler6PrintVIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESE_:
   49|  33.7k|    {
   50|  33.7k|        fun(value);
   51|  33.7k|    }
LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_6BinaryEEEE11ForeachItemIZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS6_13ProcessHeaderERKNS_11RangeHeaderERKS4_E3$_0EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEERKT0_EUlRKS3_E_EEvRKSG_:
   79|    648|    {
   80|    648|        FunctorVisitor<T, Fun> visitor(fun);
   81|    648|        this->Foreach(visitor);
   82|    648|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_6BinaryEEEZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS4_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionIS3_EEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS9_INS1_IT_EEEERKT0_EUlRKS3_E_EC2ERKSQ_:
   46|    648|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_6BinaryEEEZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS4_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionIS3_EEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS9_INS1_IT_EEEERKT0_EUlRKS3_E_E7OnValueESP_:
   49|  36.3k|    {
   50|  36.3k|        fun(value);
   51|  36.3k|    }
LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEE11ForeachItemIZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS6_13ProcessHeaderERKNS_11RangeHeaderERKS4_E3$_0EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEERKT0_EUlRKS3_E_EEvRKSG_:
   79|    891|    {
   80|    891|        FunctorVisitor<T, Fun> visitor(fun);
   81|    891|        this->Foreach(visitor);
   82|    891|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_15DoubleBitBinaryEEEZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS4_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionIS3_EEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS9_INS1_IT_EEEERKT0_EUlRKS3_E_EC2ERKSQ_:
   46|    891|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_15DoubleBitBinaryEEEZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS4_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionIS3_EEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS9_INS1_IT_EEEERKT0_EUlRKS3_E_E7OnValueESP_:
   49|  11.8k|    {
   50|  11.8k|        fun(value);
   51|  11.8k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEE11ForeachItemIZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKSA_:
   79|  1.24k|    {
   80|  1.24k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  1.24k|        this->Foreach(visitor);
   82|  1.24k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18BinaryOutputStatusEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSG_:
   46|  1.24k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18BinaryOutputStatusEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESF_:
   49|  33.6k|    {
   50|  33.6k|        fun(value);
   51|  33.6k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_7CounterEEEE11ForeachItemIZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKSA_:
   79|  2.29k|    {
   80|  2.29k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  2.29k|        this->Foreach(visitor);
   82|  2.29k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_7CounterEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSG_:
   46|  2.29k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_7CounterEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESF_:
   49|  8.01k|    {
   50|  8.01k|        fun(value);
   51|  8.01k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_13FrozenCounterEEEE11ForeachItemIZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKSA_:
   79|  2.69k|    {
   80|  2.69k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  2.69k|        this->Foreach(visitor);
   82|  2.69k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_13FrozenCounterEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSG_:
   46|  2.69k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_13FrozenCounterEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESF_:
   49|  10.4k|    {
   50|  10.4k|        fun(value);
   51|  10.4k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_6AnalogEEEE11ForeachItemIZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKSA_:
   79|  3.68k|    {
   80|  3.68k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  3.68k|        this->Foreach(visitor);
   82|  3.68k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_6AnalogEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSG_:
   46|  3.68k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_6AnalogEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESF_:
   49|  12.7k|    {
   50|  12.7k|        fun(value);
   51|  12.7k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEE11ForeachItemIZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKSA_:
   79|  3.23k|    {
   80|  3.23k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  3.23k|        this->Foreach(visitor);
   82|  3.23k|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18AnalogOutputStatusEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSG_:
   46|  3.23k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18AnalogOutputStatusEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESF_:
   49|  13.1k|    {
   50|  13.1k|        fun(value);
   51|  13.1k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_6BinaryEEEE11ForeachItemIZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKSA_:
   79|    858|    {
   80|    858|        FunctorVisitor<T, Fun> visitor(fun);
   81|    858|        this->Foreach(visitor);
   82|    858|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_6BinaryEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSG_:
   46|    858|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_6BinaryEEEZNS_14LoggingHandler8PrintVQTIS2_EENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESF_:
   49|  3.57k|    {
   50|  3.57k|        fun(value);
   51|  3.57k|    }
LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEE11ForeachItemIZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS6_13ProcessHeaderERKNS_12PrefixHeaderERKS4_E3$_0EENS_8IINFieldENS_14GroupVariationERKNS0_INS1_IT_EEEERKT0_EUlRKS3_E_EEvRKSG_:
   79|    718|    {
   80|    718|        FunctorVisitor<T, Fun> visitor(fun);
   81|    718|        this->Foreach(visitor);
   82|    718|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_15DoubleBitBinaryEEEZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS4_13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionIS3_EEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS9_INS1_IT_EEEERKT0_EUlRKS3_E_EC2ERKSQ_:
   46|    718|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_15DoubleBitBinaryEEEZNS_14LoggingHandler17PrintVQTStringifyIS2_ZNS4_13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionIS3_EEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS9_INS1_IT_EEEERKT0_EUlRKS3_E_E7OnValueESP_:
   49|  3.74k|    {
   50|  3.74k|        fun(value);
   51|  3.74k|    }
LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_18BinaryCommandEventEEEE11ForeachItemIZNS_14LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKS4_E3$_0EEvRKT_:
   79|    782|    {
   80|    782|        FunctorVisitor<T, Fun> visitor(fun);
   81|    782|        this->Foreach(visitor);
   82|    782|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18BinaryCommandEventEEEZNS_14LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionIS3_EEE3$_0EC2ERKSC_:
   46|    782|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18BinaryCommandEventEEEZNS_14LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionIS3_EEE3$_0E7OnValueERKS3_:
   49|  7.44k|    {
   50|  7.44k|        fun(value);
   51|  7.44k|    }
LoggingHandler.cpp:_ZNK8opendnp311ICollectionINS_7IndexedINS_18AnalogCommandEventEEEE11ForeachItemIZNS_14LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKS4_E3$_0EEvRKT_:
   79|  2.10k|    {
   80|  2.10k|        FunctorVisitor<T, Fun> visitor(fun);
   81|  2.10k|        this->Foreach(visitor);
   82|  2.10k|    }
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18AnalogCommandEventEEEZNS_14LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionIS3_EEE3$_0EC2ERKSC_:
   46|  2.10k|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
LoggingHandler.cpp:_ZN8opendnp314FunctorVisitorINS_7IndexedINS_18AnalogCommandEventEEEZNS_14LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionIS3_EEE3$_0E7OnValueERKS3_:
   49|  6.66k|    {
   50|  6.66k|        fun(value);
   51|  6.66k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEE11ForeachItemIZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKS9_:
   79|    284|    {
   80|    284|        FunctorVisitor<T, Fun> visitor(fun);
   81|    284|        this->Foreach(visitor);
   82|    284|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt16EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSF_:
   46|    284|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt16EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESE_:
   49|  1.50k|    {
   50|  1.50k|        fun(value);
   51|  1.50k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEE11ForeachItemIZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKS9_:
   79|    323|    {
   80|    323|        FunctorVisitor<T, Fun> visitor(fun);
   81|    323|        this->Foreach(visitor);
   82|    323|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt32EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSF_:
   46|    323|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_17AnalogOutputInt32EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESE_:
   49|    736|    {
   50|    736|        fun(value);
   51|    736|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEE11ForeachItemIZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKS9_:
   79|    326|    {
   80|    326|        FunctorVisitor<T, Fun> visitor(fun);
   81|    326|        this->Foreach(visitor);
   82|    326|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSF_:
   46|    326|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESE_:
   49|  1.05k|    {
   50|  1.05k|        fun(value);
   51|  1.05k|    }
_ZNK8opendnp311ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEE11ForeachItemIZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS0_INS1_IT_EEEEEUlRKS3_E_EEvRKS9_:
   79|    391|    {
   80|    391|        FunctorVisitor<T, Fun> visitor(fun);
   81|    391|        this->Foreach(visitor);
   82|    391|    }
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_EC2ERKSF_:
   46|    391|    FunctorVisitor(const Fun& fun_) : fun(fun_) {}
_ZN8opendnp314FunctorVisitorINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_14LoggingHandler7PrintAOIS2_EENS_8IINFieldERKNS_11ICollectionINS1_IT_EEEEEUlRKS3_E_E7OnValueESE_:
   49|  1.07k|    {
   50|  1.07k|        fun(value);
   51|  1.07k|    }

_ZN8opendnp317IDecoderCallbacks10PushIndentEv:
   33|   138k|    virtual void PushIndent(){};
_ZN8opendnp317IDecoderCallbacks9PopIndentEv:
   34|   138k|    virtual void PopIndent(){};

_ZN8opendnp39AddressesC2Ett:
   32|  37.8k|    Addresses(uint16_t source, uint16_t destination) : source(source), destination(destination) {}
_ZNK8opendnp39AddresseseqERKS0_:
   40|  1.74k|    {
   41|  1.74k|        return (this->source == other.source) && (this->destination == other.destination);
  ------------------
  |  Branch (41:16): [True: 1.74k, False: 0]
  |  Branch (41:50): [True: 1.74k, False: 0]
  ------------------
   42|  1.74k|    }
_ZNK8opendnp39AddressesneERKS0_:
   45|  1.74k|    {
   46|  1.74k|        return !((*this) == other);
   47|  1.74k|    }
_ZN8opendnp39AddressesC2Ev:
   30|  46.8k|    Addresses() = default;

_ZN8opendnp311ILogHandlerD2Ev:
   34|  6.68k|    virtual ~ILogHandler() {}

_ZN8opendnp38LogLevelC2Ei:
   43|    578|    explicit LogLevel(int32_t level) : value(level) {}
_ZNK8opendnp38LogLevel4nextEv:
   46|    544|    {
   47|    544|        return LogLevel(value << 1);
   48|    544|    }
_ZN8opendnp39LogLevels4noneEv:
   71|     34|    {
   72|     34|        return LogLevels(0);
   73|     34|    }
_ZN8opendnp39LogLevelsC2Ei:
   66|    544|    explicit LogLevels(int32_t levels) : levels(levels) {}
_ZN8opendnp39LogLevels10everythingEv:
   76|     34|    {
   77|     34|        return LogLevels(~0);
   78|     34|    }
_ZNK8opendnp39LogLevelsorERKNS_8LogLevelE:
   97|    476|    {
   98|    476|        return LogLevels(this->levels | other.value);
   99|    476|    }
_ZN8opendnp38ModuleIdC2Ev:
   31|  6.68k|    ModuleId() = default;
_ZNK8opendnp39LogLevels6is_setERKNS_8LogLevelE:
   81|   519k|    {
   82|   519k|        return (level.value & levels) != 0;
   83|   519k|    }

_ZN8opendnp36LoggerC2ERKNSt3__110shared_ptrINS_11ILogHandlerEEENS_8ModuleIdERKNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_9LogLevelsE:
   49|  6.68k|        : backend(backend), settings(std::make_shared<Settings>(moduleid, id, levels))
   50|  6.68k|    {
   51|  6.68k|    }
_ZN8opendnp36Logger8SettingsC2ENS_8ModuleIdERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS_9LogLevelsE:
   41|  6.68k|        Settings(ModuleId module, const std::string& id, LogLevels levels) : module(module), id(id), levels(levels) {}
_ZNK8opendnp36Logger10is_enabledERKNS_8LogLevelE:
   82|   519k|    {
   83|   519k|        return backend && settings->levels.is_set(level);
  ------------------
  |  Branch (83:16): [True: 519k, False: 0]
  |  Branch (83:27): [True: 0, False: 519k]
  ------------------
   84|   519k|    }

_ZN8opendnp36BufferC2EPKhm:
   32|  10.9k|    Buffer(const uint8_t* data, std::size_t length) : data(data), length(length) {}

_ZN8opendnp310UncopyableC2Ev:
   32|   151k|    Uncopyable() = default; // allow construction/destruction/move
_ZN8opendnp310UncopyableD2Ev:
   34|   151k|    virtual ~Uncopyable() = default;

_ZN8opendnp311SequenceNumIhLh64EEC2Ev:
   46|  6.68k|    SequenceNum() : seq(0) {}
_ZNK8opendnp311SequenceNumIhLh64EEcvhEv:
   42|  1.83k|    {
   43|  1.83k|        return this->seq;
   44|  1.83k|    }
_ZN8opendnp311SequenceNumIhLh64EEC2Eh:
   48|  37.1k|    SequenceNum(T value) : seq(value) {}
_ZN8opendnp311SequenceNumIhLh64EE9IncrementEv:
   56|  37.1k|    {
   57|  37.1k|        this->seq = Next(this->seq);
   58|  37.1k|    }
_ZN8opendnp311SequenceNumIhLh64EE4NextEh:
   31|  37.1k|    {
   32|  37.1k|        return (seq + 1) % Modulus;
   33|  37.1k|    }

_ZN8opendnp310APDUHeaderC2ERKNS_15AppControlFieldENS_12FunctionCodeE:
   43|  34.4k|    APDUHeader(const AppControlField& control, FunctionCode function) : control(control), function(function) {}
_ZN8opendnp318APDUResponseHeaderC2ERKNS_15AppControlFieldENS_12FunctionCodeERKNS_8IINFieldE:
   59|  1.20k|        : APDUHeader(control, function), IIN(IIN)
   60|  1.20k|    {
   61|  1.20k|    }
_ZN8opendnp310APDUHeaderC2Ev:
   41|    488|    APDUHeader() = default;
_ZN8opendnp318APDUResponseHeaderC2Ev:
   56|    204|    APDUResponseHeader() = default;

_ZN8opendnp37logging9LogHeaderERNS_6LoggerERKNS_8LogLevelERKNS_10APDUHeaderE:
   33|  33.1k|    {
   34|  33.1k|        FORMAT_LOG_BLOCK(logger, flags, "FIR: %i FIN: %i CON: %i UNS: %i SEQ: %i FUNC: %s", header.control.FIR,
  ------------------
  |  |   54|  33.1k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 33.1k]
  |  |  ------------------
  |  |   55|  33.1k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   35|  33.1k|                         header.control.FIN, header.control.CON, header.control.UNS, header.control.SEQ,
   36|  33.1k|                         FunctionCodeSpec::to_human_string(header.function));
   37|  33.1k|    }
_ZN8opendnp37logging9LogHeaderERNS_6LoggerERKNS_8LogLevelERKNS_18APDUResponseHeaderE:
   40|  1.20k|    {
   41|  1.20k|        FORMAT_LOG_BLOCK(logger, flags, "FIR: %i FIN: %i CON: %i UNS: %i SEQ: %i FUNC: %s IIN: [0x%02x, 0x%02x]",
  ------------------
  |  |   54|  1.20k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |   55|  1.20k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   42|  1.20k|                         header.control.FIR, header.control.FIN, header.control.CON, header.control.UNS,
   43|  1.20k|                         header.control.SEQ, FunctionCodeSpec::to_human_string(header.function), header.IIN.LSB,
   44|  1.20k|                         header.IIN.MSB);
   45|  1.20k|    }

_ZN8opendnp318AnalogCommandEventC2Ev:
   26|  6.66k|AnalogCommandEvent::AnalogCommandEvent() : value(0), status(CommandStatus::SUCCESS) {}
_ZN8opendnp318AnalogCommandEventC2EdNS_13CommandStatusE:
   28|  3.72k|AnalogCommandEvent::AnalogCommandEvent(double value_, CommandStatus status_) : value(value_), status(status_) {}
_ZN8opendnp318AnalogCommandEventC2EdNS_13CommandStatusENS_7DNPTimeE:
   31|  2.93k|    : value(value_), status(status_), time(time_)
   32|  2.93k|{
   33|  2.93k|}

_ZN8opendnp317AnalogOutputInt16C2EsNS_13CommandStatusE:
   27|  1.50k|AnalogOutputInt16::AnalogOutputInt16(int16_t aValue, CommandStatus aStatus) : AnalogOutput<int16_t>(aValue, aStatus) {}
_ZN8opendnp317AnalogOutputInt16C2Ev:
   29|  1.50k|AnalogOutputInt16::AnalogOutputInt16() : AnalogOutput<int16_t>(0) {}
_ZN8opendnp317AnalogOutputInt32C2EiNS_13CommandStatusE:
   38|    736|AnalogOutputInt32::AnalogOutputInt32(int32_t aValue, CommandStatus aStatus) : AnalogOutput<int32_t>(aValue, aStatus) {}
_ZN8opendnp317AnalogOutputInt32C2Ev:
   40|    736|AnalogOutputInt32::AnalogOutputInt32() : AnalogOutput<int32_t>(0) {}
_ZN8opendnp319AnalogOutputFloat32C2EfNS_13CommandStatusE:
   49|  1.05k|AnalogOutputFloat32::AnalogOutputFloat32(float aValue, CommandStatus aStatus) : AnalogOutput<float>(aValue, aStatus) {}
_ZN8opendnp319AnalogOutputFloat32C2Ev:
   51|  1.05k|AnalogOutputFloat32::AnalogOutputFloat32() : AnalogOutput<float>(0) {}
_ZN8opendnp320AnalogOutputDouble64C2EdNS_13CommandStatusE:
   60|  1.07k|AnalogOutputDouble64::AnalogOutputDouble64(double aValue, CommandStatus aStatus) : AnalogOutput<double>(aValue, aStatus)
   61|  1.07k|{
   62|  1.07k|}
_ZN8opendnp320AnalogOutputDouble64C2Ev:
   64|  1.07k|AnalogOutputDouble64::AnalogOutputDouble64() : AnalogOutput<double>(0) {}

_ZN8opendnp315AppControlFieldC2Eh:
   28|  34.4k|    : FIR((byte & FIR_MASK) != 0),
   29|  34.4k|      FIN((byte & FIN_MASK) != 0),
   30|  34.4k|      CON((byte & CON_MASK) != 0),
   31|  34.4k|      UNS((byte & UNS_MASK) != 0),
   32|  34.4k|      SEQ(byte & SEQ_MASK)
   33|  34.4k|{
   34|  34.4k|}
_ZN8opendnp315AppControlFieldC2Ebbbbh:
   42|      2|    : FIR(fir), FIN(fin), CON(con), UNS(uns), SEQ(seq)
   43|      2|{
   44|      2|}

_ZN8opendnp315AppControlFieldC2Ev:
   36|    488|    AppControlField() = default;

_ZN8opendnp318BinaryCommandEventC2Ev:
   26|  7.44k|BinaryCommandEvent::BinaryCommandEvent() : value(false), status(CommandStatus::SUCCESS), time(0) {}
_ZN8opendnp318BinaryCommandEventC2ENS_5FlagsE:
   28|  6.33k|BinaryCommandEvent::BinaryCommandEvent(Flags flags) : value(GetValueFromFlags(flags)), status(GetStatusFromFlags(flags))
   29|  6.33k|{
   30|  6.33k|}
_ZN8opendnp318BinaryCommandEventC2ENS_5FlagsENS_7DNPTimeE:
   33|  1.11k|    : value(GetValueFromFlags(flags)), status(GetStatusFromFlags(flags)), time(time)
   34|  1.11k|{
   35|  1.11k|}
_ZN8opendnp318BinaryCommandEvent17GetValueFromFlagsENS_5FlagsE:
   55|  7.44k|{
   56|  7.44k|    return (flags.value & ValueMask) == ValueMask;
   57|  7.44k|}
_ZN8opendnp318BinaryCommandEvent18GetStatusFromFlagsENS_5FlagsE:
   60|  7.44k|{
   61|  7.44k|    return CommandStatusSpec::from_type(flags.value & StatusMask);
   62|  7.44k|}

_ZN8opendnp323ControlRelayOutputBlockC2ENS_13OperationTypeENS_13TripCloseCodeEbhjjNS_13CommandStatusE:
   32|    923|    : opType(opType_),
   33|    923|      tcc(tcc_),
   34|    923|      clear(clear_),
   35|    923|      count(count_),
   36|    923|      onTimeMS(onTime_),
   37|    923|      offTimeMS(offTime_),
   38|    923|      status(status_),
   39|    923|      rawCode(((TripCloseCodeSpec::to_type(tcc) << 6) & 0xC0) | ((static_cast<uint8_t>(clear) << 5) & 0x20)
   40|    923|              | (OperationTypeSpec::to_type(opType) & 0x0F))
   41|    923|{
   42|    923|}
_ZN8opendnp323ControlRelayOutputBlockC2EhhjjNS_13CommandStatusE:
   46|    923|    : opType(OperationTypeSpec::from_type(rawCode_ & 0x0F)),
   47|    923|      tcc(TripCloseCodeSpec::from_type((rawCode_ >> 6) & 0x3)),
   48|    923|      clear(rawCode_ & 0x20),
   49|    923|      count(count_),
   50|    923|      onTimeMS(onTime_),
   51|    923|      offTimeMS(offTime_),
   52|    923|      status(status_),
   53|    923|      rawCode(rawCode_)
   54|    923|{
   55|    923|}

_ZN8opendnp320GroupVariationRecordC2EhhNS_14GroupVariationENS_18GroupVariationTypeE:
   29|  62.1k|    : enumeration(enumeration_), type(type_), group(group_), variation(variation_)
   30|  62.1k|{
   31|  62.1k|}
_ZN8opendnp312HeaderRecordC2ERKNS_20GroupVariationRecordEhj:
   34|  59.1k|    : GroupVariationRecord(gv), qualifier(qualifier_), headerIndex(headerIndex_)
   35|  59.1k|{
   36|  59.1k|}
_ZNK8opendnp312HeaderRecord16GetQualifierCodeEv:
   39|  59.1k|{
   40|  59.1k|    return QualifierCodeSpec::from_type(qualifier);
   41|  59.1k|}
_ZN8opendnp320GroupVariationRecord9GetRecordEhh:
   44|  62.1k|{
   45|  62.1k|    auto pair = GetEnumAndType(group, variation);
   46|  62.1k|    return GroupVariationRecord(group, variation, pair.enumeration, pair.type);
   47|  62.1k|}
_ZN8opendnp320GroupVariationRecord11GetGroupVarEhh:
   50|  62.1k|{
   51|  62.1k|    return (group << 8) | variation;
   52|  62.1k|}
_ZN8opendnp320GroupVariationRecord14GetEnumAndTypeEhh:
   55|  62.1k|{
   56|  62.1k|    auto type = GetType(group, variation);
   57|  62.1k|    auto enumeration = GroupVariationSpec::from_type(GetGroupVar(group, variation));
   58|       |
   59|  62.1k|    if (enumeration == GroupVariation::UNKNOWN)
  ------------------
  |  Branch (59:9): [True: 4.99k, False: 57.1k]
  ------------------
   60|  4.99k|    {
   61|  4.99k|        switch (group)
   62|  4.99k|        {
   63|    890|        case (110):
  ------------------
  |  Branch (63:9): [True: 890, False: 4.10k]
  ------------------
   64|    890|            enumeration = GroupVariation::Group110Var0;
   65|    890|            break;
   66|    892|        case (111):
  ------------------
  |  Branch (66:9): [True: 892, False: 4.10k]
  ------------------
   67|    892|            enumeration = GroupVariation::Group111Var0;
   68|    892|            break;
   69|    231|        case (112):
  ------------------
  |  Branch (69:9): [True: 231, False: 4.76k]
  ------------------
   70|    231|            enumeration = GroupVariation::Group112Var0;
   71|    231|            break;
   72|     23|        case (113):
  ------------------
  |  Branch (72:9): [True: 23, False: 4.97k]
  ------------------
   73|     23|            enumeration = GroupVariation::Group113Var0;
   74|     23|            break;
   75|  2.96k|        default:
  ------------------
  |  Branch (75:9): [True: 2.96k, False: 2.03k]
  ------------------
   76|  2.96k|            break;
   77|  4.99k|        }
   78|  4.99k|    }
   79|       |
   80|  62.1k|    return EnumAndType(enumeration, type);
   81|  62.1k|}
_ZN8opendnp320GroupVariationRecord7GetTypeEhh:
   84|  62.1k|{
   85|  62.1k|    switch (group)
   86|  62.1k|    {
   87|  2.41k|    case (1):
  ------------------
  |  Branch (87:5): [True: 2.41k, False: 59.7k]
  ------------------
   88|  2.41k|        return GroupVariationType::STATIC;
   89|       |
   90|  1.91k|    case (2):
  ------------------
  |  Branch (90:5): [True: 1.91k, False: 60.2k]
  ------------------
   91|  1.91k|        return GroupVariationType::EVENT;
   92|       |
   93|  1.95k|    case (3):
  ------------------
  |  Branch (93:5): [True: 1.95k, False: 60.1k]
  ------------------
   94|  1.95k|        return GroupVariationType::STATIC;
   95|       |
   96|  1.52k|    case (4):
  ------------------
  |  Branch (96:5): [True: 1.52k, False: 60.6k]
  ------------------
   97|  1.52k|        return GroupVariationType::EVENT;
   98|       |
   99|    985|    case (10):
  ------------------
  |  Branch (99:5): [True: 985, False: 61.1k]
  ------------------
  100|    985|        return GroupVariationType::STATIC;
  101|       |
  102|  1.27k|    case (11):
  ------------------
  |  Branch (102:5): [True: 1.27k, False: 60.8k]
  ------------------
  103|  1.27k|        return GroupVariationType::EVENT;
  104|       |
  105|  1.14k|    case (13):
  ------------------
  |  Branch (105:5): [True: 1.14k, False: 60.9k]
  ------------------
  106|  1.14k|        return GroupVariationType::EVENT;
  107|       |
  108|  2.94k|    case (20):
  ------------------
  |  Branch (108:5): [True: 2.94k, False: 59.1k]
  ------------------
  109|  2.94k|        return GroupVariationType::STATIC;
  110|       |
  111|  4.79k|    case (21):
  ------------------
  |  Branch (111:5): [True: 4.79k, False: 57.3k]
  ------------------
  112|  4.79k|        return GroupVariationType::STATIC;
  113|       |
  114|  2.63k|    case (22):
  ------------------
  |  Branch (114:5): [True: 2.63k, False: 59.4k]
  ------------------
  115|  2.63k|        return GroupVariationType::EVENT;
  116|       |
  117|  2.31k|    case (23):
  ------------------
  |  Branch (117:5): [True: 2.31k, False: 59.8k]
  ------------------
  118|  2.31k|        return GroupVariationType::EVENT;
  119|       |
  120|  3.63k|    case (30):
  ------------------
  |  Branch (120:5): [True: 3.63k, False: 58.4k]
  ------------------
  121|  3.63k|        return GroupVariationType::STATIC;
  122|       |
  123|  4.57k|    case (32):
  ------------------
  |  Branch (123:5): [True: 4.57k, False: 57.5k]
  ------------------
  124|  4.57k|        return GroupVariationType::EVENT;
  125|       |
  126|  3.19k|    case (40):
  ------------------
  |  Branch (126:5): [True: 3.19k, False: 58.9k]
  ------------------
  127|  3.19k|        return GroupVariationType::STATIC;
  128|       |
  129|  2.44k|    case (41):
  ------------------
  |  Branch (129:5): [True: 2.44k, False: 59.6k]
  ------------------
  130|  2.44k|        return GroupVariationType::EVENT;
  131|       |
  132|  4.88k|    case (42):
  ------------------
  |  Branch (132:5): [True: 4.88k, False: 57.2k]
  ------------------
  133|  4.88k|        return GroupVariationType::EVENT;
  134|       |
  135|  4.30k|    case (43):
  ------------------
  |  Branch (135:5): [True: 4.30k, False: 57.8k]
  ------------------
  136|  4.30k|        return GroupVariationType::EVENT;
  137|       |
  138|  2.52k|    case (50):
  ------------------
  |  Branch (138:5): [True: 2.52k, False: 59.6k]
  ------------------
  139|  2.52k|        switch (variation)
  140|  2.52k|        {
  141|  1.11k|        case (4):
  ------------------
  |  Branch (141:9): [True: 1.11k, False: 1.41k]
  ------------------
  142|  1.11k|            return GroupVariationType::STATIC;
  143|  1.41k|        default:
  ------------------
  |  Branch (143:9): [True: 1.41k, False: 1.11k]
  ------------------
  144|  1.41k|            return GroupVariationType::OTHER;
  145|  2.52k|        }
  146|       |
  147|    898|    case (60):
  ------------------
  |  Branch (147:5): [True: 898, False: 61.2k]
  ------------------
  148|    898|        switch (variation)
  149|    898|        {
  150|    275|        case (1):
  ------------------
  |  Branch (150:9): [True: 275, False: 623]
  ------------------
  151|    275|            return GroupVariationType::STATIC;
  152|    623|        default:
  ------------------
  |  Branch (152:9): [True: 623, False: 275]
  ------------------
  153|    623|            return GroupVariationType::EVENT;
  154|    898|        }
  155|       |
  156|  1.28k|    case (110):
  ------------------
  |  Branch (156:5): [True: 1.28k, False: 60.8k]
  ------------------
  157|  1.28k|        return GroupVariationType::STATIC;
  158|       |
  159|  1.33k|    case (111):
  ------------------
  |  Branch (159:5): [True: 1.33k, False: 60.7k]
  ------------------
  160|  1.33k|        return GroupVariationType::EVENT;
  161|       |
  162|    205|    case (121):
  ------------------
  |  Branch (162:5): [True: 205, False: 61.9k]
  ------------------
  163|    205|        return GroupVariationType::STATIC;
  164|    200|    case (122):
  ------------------
  |  Branch (164:5): [True: 200, False: 61.9k]
  ------------------
  165|    200|        return GroupVariationType::EVENT;
  166|       |
  167|  8.73k|    default:
  ------------------
  |  Branch (167:5): [True: 8.73k, False: 53.3k]
  ------------------
  168|  8.73k|        return GroupVariationType::OTHER;
  169|  62.1k|    }
  170|  62.1k|}

_ZN8opendnp311EnumAndTypeC2ENS_14GroupVariationENS_18GroupVariationTypeE:
   44|  62.1k|    EnumAndType(GroupVariation enumeration_, GroupVariationType type_) : enumeration(enumeration_), type(type_) {}
_ZN8opendnp316AllObjectsHeaderC2ERKNS_12HeaderRecordE:
   93|  13.8k|    explicit AllObjectsHeader(const HeaderRecord& record) : HeaderRecord(record) {}
_ZN8opendnp311CountHeaderC2ERKNS_12HeaderRecordEt:
   99|  2.56k|    CountHeader(const HeaderRecord& record, uint16_t count_) : HeaderRecord(record), count(count_) {}
_ZN8opendnp311RangeHeaderC2ERKNS_12HeaderRecordERKNS_5RangeE:
  115|  9.74k|    RangeHeader(const HeaderRecord& record, const Range& range_) : HeaderRecord(record), range(range_) {}
_ZN8opendnp312PrefixHeaderC2ERKNS_12HeaderRecordEt:
  123|  13.8k|    PrefixHeader(const HeaderRecord& record, uint16_t count_) : HeaderRecord(record), count(count_) {}

_ZN8opendnp38IINField6SetBitENS_6IINBitE:
   79|    555|{
   80|    555|    switch (bit)
   81|    555|    {
   82|      0|    case (IINBit::BROADCAST):
  ------------------
  |  Branch (82:5): [True: 0, False: 555]
  ------------------
   83|      0|        Set(LSBMask::BROADCAST);
   84|      0|        break;
   85|      0|    case (IINBit::CLASS1_EVENTS):
  ------------------
  |  Branch (85:5): [True: 0, False: 555]
  ------------------
   86|      0|        Set(LSBMask::CLASS1_EVENTS);
   87|      0|        break;
   88|      0|    case (IINBit::CLASS2_EVENTS):
  ------------------
  |  Branch (88:5): [True: 0, False: 555]
  ------------------
   89|      0|        Set(LSBMask::CLASS2_EVENTS);
   90|      0|        break;
   91|      0|    case (IINBit::CLASS3_EVENTS):
  ------------------
  |  Branch (91:5): [True: 0, False: 555]
  ------------------
   92|      0|        Set(LSBMask::CLASS3_EVENTS);
   93|      0|        break;
   94|      0|    case (IINBit::NEED_TIME):
  ------------------
  |  Branch (94:5): [True: 0, False: 555]
  ------------------
   95|      0|        Set(LSBMask::NEED_TIME);
   96|      0|        break;
   97|      0|    case (IINBit::LOCAL_CONTROL):
  ------------------
  |  Branch (97:5): [True: 0, False: 555]
  ------------------
   98|      0|        Set(LSBMask::LOCAL_CONTROL);
   99|      0|        break;
  100|      0|    case (IINBit::DEVICE_TROUBLE):
  ------------------
  |  Branch (100:5): [True: 0, False: 555]
  ------------------
  101|      0|        Set(LSBMask::DEVICE_TROUBLE);
  102|      0|        break;
  103|      0|    case (IINBit::DEVICE_RESTART):
  ------------------
  |  Branch (103:5): [True: 0, False: 555]
  ------------------
  104|      0|        Set(LSBMask::DEVICE_RESTART);
  105|      0|        break;
  106|    555|    case (IINBit::FUNC_NOT_SUPPORTED):
  ------------------
  |  Branch (106:5): [True: 555, False: 0]
  ------------------
  107|    555|        Set(MSBMask::FUNC_NOT_SUPPORTED);
  108|    555|        break;
  109|      0|    case (IINBit::OBJECT_UNKNOWN):
  ------------------
  |  Branch (109:5): [True: 0, False: 555]
  ------------------
  110|      0|        Set(MSBMask::OBJECT_UNKNOWN);
  111|      0|        break;
  112|      0|    case (IINBit::PARAM_ERROR):
  ------------------
  |  Branch (112:5): [True: 0, False: 555]
  ------------------
  113|      0|        Set(MSBMask::PARAM_ERROR);
  114|      0|        break;
  115|      0|    case (IINBit::EVENT_BUFFER_OVERFLOW):
  ------------------
  |  Branch (115:5): [True: 0, False: 555]
  ------------------
  116|      0|        Set(MSBMask::EVENT_BUFFER_OVERFLOW);
  117|      0|        break;
  118|      0|    case (IINBit::ALREADY_EXECUTING):
  ------------------
  |  Branch (118:5): [True: 0, False: 555]
  ------------------
  119|      0|        Set(MSBMask::ALREADY_EXECUTING);
  120|      0|        break;
  121|      0|    case (IINBit::CONFIG_CORRUPT):
  ------------------
  |  Branch (121:5): [True: 0, False: 555]
  ------------------
  122|      0|        Set(MSBMask::CONFIG_CORRUPT);
  123|      0|        break;
  124|      0|    case (IINBit::RESERVED1):
  ------------------
  |  Branch (124:5): [True: 0, False: 555]
  ------------------
  125|      0|        Set(MSBMask::RESERVED1);
  126|      0|        break;
  127|      0|    case (IINBit::RESERVED2):
  ------------------
  |  Branch (127:5): [True: 0, False: 555]
  ------------------
  128|      0|        Set(MSBMask::RESERVED2);
  129|      0|        break;
  130|      0|    default:
  ------------------
  |  Branch (130:5): [True: 0, False: 555]
  ------------------
  131|      0|        break;
  132|    555|    };
  133|    555|}

_ZN8opendnp38IINValueC2Eb:
   31|  33.7k|    IINValue(bool value_) : value(value_) {}

_ZN8opendnp313BinaryFactory4FromEh:
   36|  5.03k|    {
   37|  5.03k|        return Binary(Flags(flags));
   38|  5.03k|    }
_ZN8opendnp313BinaryFactory4FromEht:
   41|    730|    {
   42|    730|        return From(flags, DNPTime(time));
   43|    730|    }
_ZN8opendnp313BinaryFactory4FromEhNS_7DNPTimeE:
   46|  1.76k|    {
   47|  1.76k|        return Binary(Flags(flags), time);
   48|  1.76k|    }
_ZN8opendnp322DoubleBitBinaryFactory4FromEh:
   54|  3.53k|    {
   55|  3.53k|        return DoubleBitBinary(Flags(flags));
   56|  3.53k|    }
_ZN8opendnp322DoubleBitBinaryFactory4FromEht:
   59|  1.48k|    {
   60|  1.48k|        return From(flags, DNPTime(time));
   61|  1.48k|    }
_ZN8opendnp322DoubleBitBinaryFactory4FromEhNS_7DNPTimeE:
   64|  2.05k|    {
   65|  2.05k|        return DoubleBitBinary(Flags(flags), time);
   66|  2.05k|    }
_ZN8opendnp313AnalogFactory4FromEi:
   72|  1.70k|    {
   73|  1.70k|        return Analog(count);
   74|  1.70k|    }
_ZN8opendnp313AnalogFactory4FromEhd:
   76|  8.72k|    {
   77|  8.72k|        return Analog(value, Flags(flags));
   78|  8.72k|    }
_ZN8opendnp313AnalogFactory4FromEhdNS_7DNPTimeE:
   80|  2.29k|    {
   81|  2.29k|        return Analog(value, Flags(flags), time);
   82|  2.29k|    }
_ZN8opendnp314CounterFactory4FromEj:
   88|  2.16k|    {
   89|  2.16k|        return Counter(count);
   90|  2.16k|    }
_ZN8opendnp314CounterFactory4FromEhj:
   92|  4.34k|    {
   93|  4.34k|        return Counter(count, Flags(flags));
   94|  4.34k|    }
_ZN8opendnp314CounterFactory4FromEhjNS_7DNPTimeE:
   96|  1.50k|    {
   97|  1.50k|        return Counter(count, Flags(flags), time);
   98|  1.50k|    }
_ZN8opendnp320FrozenCounterFactory4FromEj:
  104|  2.27k|    {
  105|  2.27k|        return FrozenCounter(count);
  106|  2.27k|    }
_ZN8opendnp320FrozenCounterFactory4FromEhj:
  108|  4.72k|    {
  109|  4.72k|        return FrozenCounter(count, Flags(flags));
  110|  4.72k|    }
_ZN8opendnp320FrozenCounterFactory4FromEhjNS_7DNPTimeE:
  112|  3.44k|    {
  113|  3.44k|        return FrozenCounter(count, Flags(flags), time);
  114|  3.44k|    }
_ZN8opendnp322TimeAndIntervalFactory4FromENS_7DNPTimeEjh:
  120|  1.72k|    {
  121|  1.72k|        return TimeAndInterval(time, interval, units);
  122|  1.72k|    }
_ZN8opendnp330ControlRelayOutputBlockFactory4FromEhhjjh:
  129|    923|    {
  130|    923|        return ControlRelayOutputBlock(code, count, onTime, offTime, CommandStatusSpec::from_type(status));
  131|    923|    }
_ZN8opendnp325BinaryOutputStatusFactory4FromEh:
  137|  3.48k|    {
  138|  3.48k|        return BinaryOutputStatus(Flags(flags));
  139|  3.48k|    }
_ZN8opendnp325BinaryOutputStatusFactory4FromEhNS_7DNPTimeE:
  142|    923|    {
  143|    923|        return BinaryOutputStatus(Flags(flags), time);
  144|    923|    }
_ZN8opendnp325BinaryCommandEventFactory4FromEh:
  150|  6.33k|    {
  151|  6.33k|        return BinaryCommandEvent(Flags(flags));
  152|  6.33k|    }
_ZN8opendnp325BinaryCommandEventFactory4FromEhNS_7DNPTimeE:
  155|  1.11k|    {
  156|  1.11k|        return BinaryCommandEvent(Flags(flags), time);
  157|  1.11k|    }
_ZN8opendnp325AnalogOutputStatusFactory4FromEhd:
  163|  10.0k|    {
  164|  10.0k|        return AnalogOutputStatus(value, Flags(flags));
  165|  10.0k|    }
_ZN8opendnp325AnalogOutputStatusFactory4FromEhdNS_7DNPTimeE:
  168|  3.06k|    {
  169|  3.06k|        return AnalogOutputStatus(value, Flags(flags), time);
  170|  3.06k|    }
_ZN8opendnp325AnalogCommandEventFactory4FromEhd:
  176|  3.72k|    {
  177|  3.72k|        return AnalogCommandEvent(value, CommandStatusSpec::from_type(status));
  178|  3.72k|    }
_ZN8opendnp325AnalogCommandEventFactory4FromEhdNS_7DNPTimeE:
  181|  2.93k|    {
  182|  2.93k|        return AnalogCommandEvent(value, CommandStatusSpec::from_type(status), time);
  183|  2.93k|    }
_ZN8opendnp319AnalogOutputFactoryINS_17AnalogOutputInt32EiE4FromEih:
  189|    736|    {
  190|    736|        return Target(value, CommandStatusSpec::from_type(status));
  191|    736|    }
_ZN8opendnp319AnalogOutputFactoryINS_17AnalogOutputInt16EsE4FromEsh:
  189|  1.50k|    {
  190|  1.50k|        return Target(value, CommandStatusSpec::from_type(status));
  191|  1.50k|    }
_ZN8opendnp319AnalogOutputFactoryINS_19AnalogOutputFloat32EfE4FromEfh:
  189|  1.05k|    {
  190|  1.05k|        return Target(value, CommandStatusSpec::from_type(status));
  191|  1.05k|    }
_ZN8opendnp319AnalogOutputFactoryINS_20AnalogOutputDouble64EdE4FromEdh:
  189|  1.07k|    {
  190|  1.07k|        return Target(value, CommandStatusSpec::from_type(status));
  191|  1.07k|    }

_ZN8opendnp36BinaryC2Ev:
   31|  6.80k|Binary::Binary() : TypedMeasurement(false, flags::RESTART) {}
_ZN8opendnp36BinaryC2Eb:
   33|  33.0k|Binary::Binary(bool value) : TypedMeasurement(value, flags::GetBinaryFlags(flags::ONLINE, value)) {}
_ZN8opendnp36BinaryC2ENS_5FlagsE:
   35|  5.03k|Binary::Binary(Flags flags) : TypedMeasurement(flags::GetBinaryValue(flags), flags) {}
_ZN8opendnp36BinaryC2ENS_5FlagsENS_7DNPTimeE:
   37|  1.76k|Binary::Binary(Flags flags, DNPTime time) : TypedMeasurement(flags::GetBinaryValue(flags), flags, time) {}
_ZN8opendnp315DoubleBitBinaryC2Ev:
   48|  5.59k|DoubleBitBinary::DoubleBitBinary() : TypedMeasurement(DoubleBit::INDETERMINATE, flags::RESTART) {}
_ZN8opendnp315DoubleBitBinaryC2ENS_9DoubleBitE:
   50|  9.99k|DoubleBitBinary::DoubleBitBinary(DoubleBit value) : TypedMeasurement(value, GetFlags(flags::ONLINE, value)) {}
_ZN8opendnp315DoubleBitBinaryC2ENS_5FlagsE:
   52|  3.53k|DoubleBitBinary::DoubleBitBinary(Flags flags) : TypedMeasurement(GetValue(flags), flags) {}
_ZN8opendnp315DoubleBitBinaryC2ENS_5FlagsENS_7DNPTimeE:
   54|  2.05k|DoubleBitBinary::DoubleBitBinary(Flags flags, DNPTime time) : TypedMeasurement(GetValue(flags), flags, time) {}
_ZN8opendnp315DoubleBitBinary8GetValueENS_5FlagsE:
   64|  5.59k|{
   65|       |    // the value is the top 2 bits, so down-shift 6
   66|  5.59k|    uint8_t value = flags.value >> 6;
   67|  5.59k|    return DoubleBitSpec::from_type(value);
   68|  5.59k|}
_ZN8opendnp315DoubleBitBinary8GetFlagsENS_5FlagsENS_9DoubleBitE:
   71|  9.99k|{
   72|  9.99k|    uint8_t value = DoubleBitSpec::to_type(state) << 6;
   73|  9.99k|    return Flags((QualityMask & flags.value) | value);
   74|  9.99k|}
_ZN8opendnp318BinaryOutputStatusC2Ev:
   78|  4.40k|BinaryOutputStatus::BinaryOutputStatus() : TypedMeasurement(false, flags::RESTART) {}
_ZN8opendnp318BinaryOutputStatusC2Eb:
   81|  29.2k|    : TypedMeasurement(value, flags::GetBinaryFlags(flags::ONLINE, value))
   82|  29.2k|{
   83|  29.2k|}
_ZN8opendnp318BinaryOutputStatusC2ENS_5FlagsE:
   85|  3.48k|BinaryOutputStatus::BinaryOutputStatus(Flags flags) : TypedMeasurement(flags::GetBinaryValue(flags), flags) {}
_ZN8opendnp318BinaryOutputStatusC2ENS_5FlagsENS_7DNPTimeE:
   88|    923|    : TypedMeasurement(flags::GetBinaryValue(flags), flags, time)
   89|    923|{
   90|    923|}
_ZN8opendnp36AnalogC2Ev:
  104|  12.7k|Analog::Analog() : TypedMeasurement(flags::RESTART) {}
_ZN8opendnp36AnalogC2Ed:
  106|  1.70k|Analog::Analog(double value) : TypedMeasurement(value, flags::ONLINE) {}
_ZN8opendnp36AnalogC2EdNS_5FlagsE:
  108|  8.72k|Analog::Analog(double value, Flags flags) : TypedMeasurement(value, flags) {}
_ZN8opendnp36AnalogC2EdNS_5FlagsENS_7DNPTimeE:
  110|  2.29k|Analog::Analog(double value, Flags flags, DNPTime time) : TypedMeasurement<double>(value, flags, time) {}
_ZN8opendnp37CounterC2Ev:
  114|  8.01k|Counter::Counter() : TypedMeasurement(0, flags::RESTART) {}
_ZN8opendnp37CounterC2Ej:
  116|  2.16k|Counter::Counter(uint32_t value) : TypedMeasurement<uint32_t>(value, flags::ONLINE) {}
_ZN8opendnp37CounterC2EjNS_5FlagsE:
  118|  4.34k|Counter::Counter(uint32_t value, Flags flags) : TypedMeasurement<uint32_t>(value, flags) {}
_ZN8opendnp37CounterC2EjNS_5FlagsENS_7DNPTimeE:
  120|  1.50k|Counter::Counter(uint32_t value, Flags flags, DNPTime time) : TypedMeasurement<uint32_t>(value, flags, time) {}
_ZN8opendnp313FrozenCounterC2Ev:
  124|  10.4k|FrozenCounter::FrozenCounter() : TypedMeasurement(0, flags::RESTART) {}
_ZN8opendnp313FrozenCounterC2Ej:
  126|  2.27k|FrozenCounter::FrozenCounter(uint32_t value) : TypedMeasurement<uint32_t>(value, flags::ONLINE) {}
_ZN8opendnp313FrozenCounterC2EjNS_5FlagsE:
  128|  4.72k|FrozenCounter::FrozenCounter(uint32_t value, Flags flags) : TypedMeasurement<uint32_t>(value, flags) {}
_ZN8opendnp313FrozenCounterC2EjNS_5FlagsENS_7DNPTimeE:
  130|  3.44k|FrozenCounter::FrozenCounter(uint32_t value, Flags flags, DNPTime time) : TypedMeasurement<uint32_t>(value, flags, time)
  131|  3.44k|{
  132|  3.44k|}
_ZN8opendnp318AnalogOutputStatusC2Ev:
  136|  13.1k|AnalogOutputStatus::AnalogOutputStatus() : TypedMeasurement<double>(flags::RESTART) {}
_ZN8opendnp318AnalogOutputStatusC2EdNS_5FlagsE:
  140|  10.0k|AnalogOutputStatus::AnalogOutputStatus(double value, Flags flags) : TypedMeasurement<double>(value, flags) {}
_ZN8opendnp318AnalogOutputStatusC2EdNS_5FlagsENS_7DNPTimeE:
  143|  3.06k|    : TypedMeasurement<double>(value, flags, time)
  144|  3.06k|{
  145|  3.06k|}
_ZN8opendnp315TimeAndIntervalC2Ev:
  149|  1.72k|TimeAndInterval::TimeAndInterval() : time(0), interval(0), units(0) {}
_ZN8opendnp315TimeAndIntervalC2ENS_7DNPTimeEjh:
  152|  1.72k|    : time(time_), interval(interval_), units(units_)
  153|  1.72k|{
  154|  1.72k|}
_ZNK8opendnp315TimeAndInterval12GetUnitsEnumEv:
  162|  1.72k|{
  163|  1.72k|    return IntervalUnitsSpec::from_type(units);
  164|  1.72k|}

_ZN8opendnp37MessageC2ERKNS_9AddressesERKN7ser4cpp4RSeqImEE:
   34|  72.5k|    Message(const Addresses& addresses, const ser4cpp::rseq_t& payload) : addresses(addresses), payload(payload) {}
_ZN8opendnp37MessageC2Ev:
   32|  2.62k|    Message() = default;

_ZN8opendnp39OctetDataC2ERKNS_6BufferE:
   35|  2.14k|    : size(input.length == 0 ? 1 : ser4cpp::min<uint8_t>(MAX_SIZE, static_cast<uint8_t>(input.length)))
  ------------------
  |  Branch (35:12): [True: 0, False: 2.14k]
  ------------------
   36|  2.14k|{
   37|  2.14k|    ser4cpp::rseq_t input_slice(input.data, input.length);
   38|  2.14k|    if (input_slice.is_not_empty())
  ------------------
  |  Branch (38:9): [True: 2.14k, False: 0]
  ------------------
   39|  2.14k|    {
   40|  2.14k|        ser4cpp::wseq_t dest(buffer.data(), buffer.size());
   41|  2.14k|        dest.copy_from(input_slice.take(size));
   42|  2.14k|    }
   43|  2.14k|}
_ZNK8opendnp39OctetData8ToBufferEv:
   71|  2.14k|{
   72|  2.14k|    return Buffer(buffer.data(), size);
   73|  2.14k|}

_ZN8opendnp35flags14GetBinaryValueENS_5FlagsE:
   30|  11.2k|    {
   31|  11.2k|        return (flags.value & static_cast<uint8_t>(BinaryQuality::STATE)) != 0;
   32|  11.2k|    }
_ZN8opendnp35flags14GetBinaryFlagsENS_5FlagsEb:
   35|  62.3k|    {
   36|  62.3k|        return (value) ? Flags(flags.value | static_cast<uint8_t>(BinaryQuality::STATE))
  ------------------
  |  Branch (36:16): [True: 30.0k, False: 32.3k]
  ------------------
   37|  62.3k|                       : Flags(flags.value & (~static_cast<uint8_t>(BinaryQuality::STATE)));
   38|  62.3k|    }

_ZN8opendnp35RangeC2Ev:
   44|  17.8k|    Range() : start(1), stop(0) {}
_ZNK8opendnp35Range5CountEv:
   47|  24.1k|    {
   48|  24.1k|        return IsValid() ? (static_cast<size_t>(stop) - static_cast<size_t>(start) + 1) : 0;
  ------------------
  |  Branch (48:16): [True: 24.1k, False: 0]
  ------------------
   49|  24.1k|    }
_ZNK8opendnp35Range7IsValidEv:
  102|  41.0k|    {
  103|  41.0k|        return start <= stop;
  104|  41.0k|    }

_ZN8opendnp316APDUHeaderParser12ParseRequestERKN7ser4cpp4RSeqImEEPNS_6LoggerE:
   34|  33.4k|{
   35|  33.4k|    if (apdu.length() < APDUHeader::REQUEST_SIZE)
  ------------------
  |  Branch (35:9): [True: 284, False: 33.1k]
  ------------------
   36|    284|    {
   37|    284|        FORMAT_LOGGER_BLOCK(logger, flags::WARN, "Request fragment  with insufficient size of %zu bytes",
  ------------------
  |  |   62|    284|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 284, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 284]
  |  |  ------------------
  |  |   63|    284|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   38|    284|                            apdu.length());
   39|    284|        return Result<APDUHeader>::Error();
   40|    284|    }
   41|       |
   42|  33.1k|    return Result<APDUHeader>::Ok(APDUHeader(AppControlField(apdu[0]), FunctionCodeSpec::from_type(apdu[1])),
   43|  33.1k|                                  apdu.skip(APDUHeader::REQUEST_SIZE));
   44|  33.4k|}
_ZN8opendnp316APDUHeaderParser13ParseResponseERKN7ser4cpp4RSeqImEEPNS_6LoggerE:
   48|  1.41k|{
   49|  1.41k|    if (apdu.length() < APDUHeader::RESPONSE_SIZE)
  ------------------
  |  Branch (49:9): [True: 204, False: 1.20k]
  ------------------
   50|    204|    {
   51|    204|        FORMAT_LOGGER_BLOCK(logger, flags::WARN, "Response fragment  with insufficient size of %zu bytes",
  ------------------
  |  |   62|    204|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 204, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 204]
  |  |  ------------------
  |  |   63|    204|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   52|    204|                            apdu.length());
   53|    204|        return Result<APDUResponseHeader>::Error();
   54|    204|    }
   55|       |
   56|  1.20k|    return Result<APDUResponseHeader>::Ok(
   57|  1.20k|        APDUResponseHeader(AppControlField(apdu[0]), FunctionCodeSpec::from_type(apdu[1]), IINField(apdu[2], apdu[3])),
   58|  1.20k|        apdu.skip(APDUHeader::RESPONSE_SIZE));
   59|  1.41k|}

_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEE5ErrorEv:
   50|    284|        {
   51|    284|            return Result();
   52|    284|        }
_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEEC2Ev:
   57|    284|        Result() : success(false) {}
_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEE2OkERKS2_RKN7ser4cpp4RSeqImEE:
   45|  33.1k|        {
   46|  33.1k|            return Result(header, objects);
   47|  33.1k|        }
_ZN8opendnp316APDUHeaderParser6ResultINS_10APDUHeaderEEC2ERKS2_RKN7ser4cpp4RSeqImEE:
   55|  33.1k|        Result(const T& header, const ser4cpp::rseq_t& objects) : success(true), header(header), objects(objects) {}
_ZN8opendnp316APDUHeaderParser6ResultINS_18APDUResponseHeaderEE5ErrorEv:
   50|    204|        {
   51|    204|            return Result();
   52|    204|        }
_ZN8opendnp316APDUHeaderParser6ResultINS_18APDUResponseHeaderEEC2Ev:
   57|    204|        Result() : success(false) {}
_ZN8opendnp316APDUHeaderParser6ResultINS_18APDUResponseHeaderEE2OkERKS2_RKN7ser4cpp4RSeqImEE:
   45|  1.20k|        {
   46|  1.20k|            return Result(header, objects);
   47|  1.20k|        }
_ZN8opendnp316APDUHeaderParser6ResultINS_18APDUResponseHeaderEEC2ERKS2_RKN7ser4cpp4RSeqImEE:
   55|  1.20k|        Result(const T& header, const ser4cpp::rseq_t& objects) : success(true), header(header), objects(objects) {}

_ZN8opendnp310APDUParser15ParseSinglePassERKN7ser4cpp4RSeqImEEPNS_6LoggerEPNS_12IAPDUHandlerEPNS_10IWhiteListERKNS_14ParserSettingsE:
   65|  34.4k|{
   66|  34.4k|    uint32_t count = 0;
   67|  34.4k|    ser4cpp::rseq_t copy(buffer);
   68|  74.3k|    while (copy.length() > 0)
  ------------------
  |  Branch (68:12): [True: 63.0k, False: 11.3k]
  ------------------
   69|  63.0k|    {
   70|  63.0k|        auto result = ParseHeader(copy, pLogger, count, settings, pHandler, pWhiteList);
   71|  63.0k|        ++count;
   72|  63.0k|        if (result != ParseResult::OK)
  ------------------
  |  Branch (72:13): [True: 23.1k, False: 39.9k]
  ------------------
   73|  23.1k|        {
   74|  23.1k|            return result;
   75|  23.1k|        }
   76|  63.0k|    }
   77|  11.3k|    return ParseResult::OK;
   78|  34.4k|}
_ZN8opendnp310APDUParser11ParseHeaderERN7ser4cpp4RSeqImEEPNS_6LoggerEjRKNS_14ParserSettingsEPNS_12IAPDUHandlerEPNS_10IWhiteListE:
   86|  63.0k|{
   87|  63.0k|    ObjectHeader header;
   88|  63.0k|    auto result = ObjectHeaderParser::ParseObjectHeader(header, buffer, pLogger);
   89|  63.0k|    if (result != ParseResult::OK)
  ------------------
  |  Branch (89:9): [True: 953, False: 62.1k]
  ------------------
   90|    953|    {
   91|    953|        return result;
   92|    953|    }
   93|       |
   94|  62.1k|    const auto GV = GroupVariationRecord::GetRecord(header.group, header.variation);
   95|       |
   96|  62.1k|    if (GV.enumeration == GroupVariation::UNKNOWN)
  ------------------
  |  Branch (96:9): [True: 2.96k, False: 59.1k]
  ------------------
   97|  2.96k|    {
   98|  2.96k|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unknown object %i / %i", GV.group, GV.variation);
  ------------------
  |  |   62|  2.96k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 2.96k, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 2.96k]
  |  |  ------------------
  |  |   63|  2.96k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   99|  2.96k|        return ParseResult::UNKNOWN_OBJECT;
  100|  2.96k|    }
  101|       |
  102|       |    // if a white-list is defined and it doesn't validate, exit early
  103|  59.1k|    if (pWhiteList && !pWhiteList->IsAllowed(count, GV.enumeration, QualifierCodeSpec::from_type(header.qualifier)))
  ------------------
  |  Branch (103:9): [True: 0, False: 59.1k]
  |  Branch (103:23): [True: 0, False: 0]
  ------------------
  104|      0|    {
  105|      0|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Header (%i) w/ Object (%i,%i) and qualifier (%i) failed whitelist",
  ------------------
  |  |   62|      0|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 0, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 0]
  |  |  ------------------
  |  |   63|      0|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  106|      0|                            count, header.group, header.variation, header.qualifier);
  107|       |
  108|      0|        return ParseResult::NOT_ON_WHITELIST;
  109|      0|    }
  110|       |
  111|  59.1k|    return APDUParser::ParseQualifier(buffer, pLogger, HeaderRecord(GV, header.qualifier, count), settings, pHandler);
  112|  59.1k|}
_ZN8opendnp310APDUParser14ParseQualifierERN7ser4cpp4RSeqImEEPNS_6LoggerERKNS_12HeaderRecordERKNS_14ParserSettingsEPNS_12IAPDUHandlerE:
  119|  59.1k|{
  120|  59.1k|    switch (record.GetQualifierCode())
  121|  59.1k|    {
  122|  13.8k|    case (QualifierCode::ALL_OBJECTS):
  ------------------
  |  Branch (122:5): [True: 13.8k, False: 45.3k]
  ------------------
  123|  13.8k|        return HandleAllObjectsHeader(pLogger, record, settings, pHandler);
  124|       |
  125|  3.68k|    case (QualifierCode::UINT8_CNT):
  ------------------
  |  Branch (125:5): [True: 3.68k, False: 55.4k]
  ------------------
  126|  3.68k|        return CountParser::ParseHeader(buffer, NumParser::OneByte(), settings, record, pLogger, pHandler);
  127|       |
  128|    745|    case (QualifierCode::UINT16_CNT):
  ------------------
  |  Branch (128:5): [True: 745, False: 58.4k]
  ------------------
  129|    745|        return CountParser::ParseHeader(buffer, NumParser::TwoByte(), settings, record, pLogger, pHandler);
  130|       |
  131|  16.1k|    case (QualifierCode::UINT8_START_STOP):
  ------------------
  |  Branch (131:5): [True: 16.1k, False: 43.0k]
  ------------------
  132|  16.1k|        return RangeParser::ParseHeader(buffer, NumParser::OneByte(), settings, record, pLogger, pHandler);
  133|       |
  134|  1.68k|    case (QualifierCode::UINT16_START_STOP):
  ------------------
  |  Branch (134:5): [True: 1.68k, False: 57.4k]
  ------------------
  135|  1.68k|        return RangeParser::ParseHeader(buffer, NumParser::TwoByte(), settings, record, pLogger, pHandler);
  136|       |
  137|  19.8k|    case (QualifierCode::UINT8_CNT_UINT8_INDEX):
  ------------------
  |  Branch (137:5): [True: 19.8k, False: 39.2k]
  ------------------
  138|  19.8k|        return CountIndexParser::ParseHeader(buffer, NumParser::OneByte(), settings, record, pLogger, pHandler);
  139|       |
  140|    536|    case (QualifierCode::UINT16_CNT_UINT16_INDEX):
  ------------------
  |  Branch (140:5): [True: 536, False: 58.6k]
  ------------------
  141|    536|        return CountIndexParser::ParseHeader(buffer, NumParser::TwoByte(), settings, record, pLogger, pHandler);
  142|       |
  143|  2.65k|    default:
  ------------------
  |  Branch (143:5): [True: 2.65k, False: 56.5k]
  ------------------
  144|  2.65k|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unknown qualifier %x", record.qualifier);
  ------------------
  |  |   62|  2.65k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 2.65k, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 2.65k]
  |  |  ------------------
  |  |   63|  2.65k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  145|  2.65k|        return ParseResult::UNKNOWN_QUALIFIER;
  146|  59.1k|    }
  147|  59.1k|}
_ZN8opendnp310APDUParser22HandleAllObjectsHeaderEPNS_6LoggerERKNS_12HeaderRecordERKNS_14ParserSettingsEPNS_12IAPDUHandlerE:
  153|  13.8k|{
  154|  13.8k|    FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u - %s - %s", record.group, record.variation,
  ------------------
  |  |   62|  13.8k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 13.8k, False: 0]
  |  |  |  Branch (62:9): [True: 0, False: 13.8k]
  |  |  |  Branch (62:20): [True: 0, False: 13.8k]
  |  |  ------------------
  |  |   63|  13.8k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  155|  13.8k|                        GroupVariationSpec::to_human_string(record.enumeration),
  156|  13.8k|                        QualifierCodeSpec::to_human_string(QualifierCode::ALL_OBJECTS));
  157|       |
  158|  13.8k|    if (pHandler)
  ------------------
  |  Branch (158:9): [True: 13.8k, False: 0]
  ------------------
  159|  13.8k|    {
  160|  13.8k|        pHandler->OnHeader(AllObjectsHeader(record));
  161|  13.8k|    }
  162|       |
  163|  13.8k|    return ParseResult::OK;
  164|  13.8k|}

_ZN8opendnp314NumBytesInBitsEm:
   28|  1.74k|{
   29|  1.74k|    size_t numBytes = numBits / 8;
   30|  1.74k|    return ((numBits % 8) == 0) ? numBytes : numBytes + 1;
  ------------------
  |  Branch (30:12): [True: 440, False: 1.30k]
  ------------------
   31|  1.74k|}
_ZN8opendnp36GetBitERKN7ser4cpp4RSeqImEEm:
   34|  96.0k|{
   35|  96.0k|    size_t byte = position / 8;
   36|  96.0k|    size_t bit = position % 8;
   37|  96.0k|    assert(byte < buffer.length());
  ------------------
  |  Branch (37:5): [True: 96.0k, False: 0]
  ------------------
   38|  96.0k|    return (buffer[byte] & (1 << bit)) != 0;
   39|  96.0k|}
_ZN8opendnp320NumBytesInDoubleBitsEm:
   42|    840|{
   43|    840|    size_t numBytes = numBits / 4;
   44|    840|    return ((numBits % 4) == 0) ? numBytes : numBytes + 1;
  ------------------
  |  Branch (44:12): [True: 229, False: 611]
  ------------------
   45|    840|}
_ZN8opendnp312GetDoubleBitERKN7ser4cpp4RSeqImEEm:
   48|  9.99k|{
   49|  9.99k|    size_t byteNumber = index / 4;
   50|  9.99k|    assert(byteNumber < buffer.length());
  ------------------
  |  Branch (50:5): [True: 9.99k, False: 0]
  ------------------
   51|  9.99k|    uint8_t byte = buffer[byteNumber];
   52|  9.99k|    size_t bitshift = 2 * (index % 4);
   53|  9.99k|    return DoubleBitSpec::from_type((byte >> bitshift) & 0x03);
   54|  9.99k|}

_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    303|{
   64|    303|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    303|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    303|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    303|    {
   36|    303|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    303|    {
   45|    303|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  2.10k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.80k, False: 303]
  ------------------
   48|  1.80k|        {
   49|  1.80k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.80k|        }
   51|    303|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    280|{
   64|    280|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    280|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    280|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    280|    {
   36|    280|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    280|    {
   45|    280|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.31k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.03k, False: 280]
  ------------------
   48|  1.03k|        {
   49|  1.03k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.03k|        }
   51|    280|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    275|{
   64|    275|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    275|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    275|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    275|    {
   36|    275|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    275|    {
   45|    275|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.00k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 730, False: 275]
  ------------------
   48|    730|        {
   49|    730|            visitor.OnValue(readFunc(copy, pos));
   50|    730|        }
   51|    275|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    276|{
   64|    276|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    276|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    276|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    276|    {
   36|    276|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    276|    {
   45|    276|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.96k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.69k, False: 276]
  ------------------
   48|  1.69k|        {
   49|  1.69k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.69k|        }
   51|    276|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    211|{
   64|    211|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    211|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    211|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    211|    {
   36|    211|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    211|    {
   45|    211|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    782|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 571, False: 211]
  ------------------
   48|    571|        {
   49|    571|            visitor.OnValue(readFunc(copy, pos));
   50|    571|        }
   51|    211|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    231|{
   64|    231|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    231|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    231|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    231|    {
   36|    231|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_16CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    231|    {
   45|    231|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.71k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.48k, False: 231]
  ------------------
   48|  1.48k|        {
   49|  1.48k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.48k|        }
   51|    231|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    269|{
   64|    269|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    269|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    269|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    269|    {
   36|    269|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    269|    {
   45|    269|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  2.38k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 2.12k, False: 269]
  ------------------
   48|  2.12k|        {
   49|  2.12k|            visitor.OnValue(readFunc(copy, pos));
   50|  2.12k|        }
   51|    269|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    422|{
   64|    422|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    422|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    422|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    422|    {
   36|    422|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    422|    {
   45|    422|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.34k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 923, False: 422]
  ------------------
   48|    923|        {
   49|    923|            visitor.OnValue(readFunc(copy, pos));
   50|    923|        }
   51|    422|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    287|{
   64|    287|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    287|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    287|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    287|    {
   36|    287|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    287|    {
   45|    287|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.21k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 923, False: 287]
  ------------------
   48|    923|        {
   49|    923|            visitor.OnValue(readFunc(copy, pos));
   50|    923|        }
   51|    287|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    535|{
   64|    535|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    535|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    535|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    535|    {
   36|    535|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    535|    {
   45|    535|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  6.86k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 6.33k, False: 535]
  ------------------
   48|  6.33k|        {
   49|  6.33k|            visitor.OnValue(readFunc(copy, pos));
   50|  6.33k|        }
   51|    535|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    247|{
   64|    247|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    247|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    247|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    247|    {
   36|    247|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    247|    {
   45|    247|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.36k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.11k, False: 247]
  ------------------
   48|  1.11k|        {
   49|  1.11k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.11k|        }
   51|    247|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    248|{
   64|    248|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    248|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    248|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    248|    {
   36|    248|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    248|    {
   45|    248|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.21k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 963, False: 248]
  ------------------
   48|    963|        {
   49|    963|            visitor.OnValue(readFunc(copy, pos));
   50|    963|        }
   51|    248|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    279|{
   64|    279|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    279|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    279|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    279|    {
   36|    279|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    279|    {
   45|    279|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.24k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 964, False: 279]
  ------------------
   48|    964|        {
   49|    964|            visitor.OnValue(readFunc(copy, pos));
   50|    964|        }
   51|    279|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    233|{
   64|    233|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    233|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    233|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    233|    {
   36|    233|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    233|    {
   45|    233|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    883|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 650, False: 233]
  ------------------
   48|    650|        {
   49|    650|            visitor.OnValue(readFunc(copy, pos));
   50|    650|        }
   51|    233|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    243|{
   64|    243|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    243|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    243|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    243|    {
   36|    243|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    243|    {
   45|    243|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.09k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 853, False: 243]
  ------------------
   48|    853|        {
   49|    853|            visitor.OnValue(readFunc(copy, pos));
   50|    853|        }
   51|    243|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    240|{
   64|    240|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    240|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    240|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    240|    {
   36|    240|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    240|    {
   45|    240|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.19k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 958, False: 240]
  ------------------
   48|    958|        {
   49|    958|            visitor.OnValue(readFunc(copy, pos));
   50|    958|        }
   51|    240|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    227|{
   64|    227|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    227|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    227|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    227|    {
   36|    227|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    227|    {
   45|    227|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.32k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.09k, False: 227]
  ------------------
   48|  1.09k|        {
   49|  1.09k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.09k|        }
   51|    227|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    258|    {
   45|    258|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.00k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 748, False: 258]
  ------------------
   48|    748|        {
   49|    748|            visitor.OnValue(readFunc(copy, pos));
   50|    748|        }
   51|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    233|{
   64|    233|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    233|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    233|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    233|    {
   36|    233|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    233|    {
   45|    233|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.03k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 800, False: 233]
  ------------------
   48|    800|        {
   49|    800|            visitor.OnValue(readFunc(copy, pos));
   50|    800|        }
   51|    233|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    270|{
   64|    270|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    270|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    270|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    270|    {
   36|    270|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    270|    {
   45|    270|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    752|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 482, False: 270]
  ------------------
   48|    482|        {
   49|    482|            visitor.OnValue(readFunc(copy, pos));
   50|    482|        }
   51|    270|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    216|{
   64|    216|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    216|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    216|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    216|    {
   36|    216|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    216|    {
   45|    216|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.24k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.02k, False: 216]
  ------------------
   48|  1.02k|        {
   49|  1.02k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.02k|        }
   51|    216|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    259|    {
   45|    259|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    815|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 556, False: 259]
  ------------------
   48|    556|        {
   49|    556|            visitor.OnValue(readFunc(copy, pos));
   50|    556|        }
   51|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    225|{
   64|    225|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    225|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    225|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    225|    {
   36|    225|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    225|    {
   45|    225|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    914|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 689, False: 225]
  ------------------
   48|    689|        {
   49|    689|            visitor.OnValue(readFunc(copy, pos));
   50|    689|        }
   51|    225|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    266|{
   64|    266|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    266|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    266|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    266|    {
   36|    266|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    266|    {
   45|    266|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    967|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 701, False: 266]
  ------------------
   48|    701|        {
   49|    701|            visitor.OnValue(readFunc(copy, pos));
   50|    701|        }
   51|    266|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    288|{
   64|    288|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    288|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    288|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    288|    {
   36|    288|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    288|    {
   45|    288|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.12k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 836, False: 288]
  ------------------
   48|    836|        {
   49|    836|            visitor.OnValue(readFunc(copy, pos));
   50|    836|        }
   51|    288|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    216|{
   64|    216|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    216|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    216|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    216|    {
   36|    216|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    216|    {
   45|    216|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    669|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 453, False: 216]
  ------------------
   48|    453|        {
   49|    453|            visitor.OnValue(readFunc(copy, pos));
   50|    453|        }
   51|    216|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    235|{
   64|    235|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    235|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    235|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    235|    {
   36|    235|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    235|    {
   45|    235|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    835|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 600, False: 235]
  ------------------
   48|    600|        {
   49|    600|            visitor.OnValue(readFunc(copy, pos));
   50|    600|        }
   51|    235|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_17AnalogOutputInt32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    323|{
   64|    323|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    323|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    323|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    323|    {
   36|    323|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    323|    {
   45|    323|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.05k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 736, False: 323]
  ------------------
   48|    736|        {
   49|    736|            visitor.OnValue(readFunc(copy, pos));
   50|    736|        }
   51|    323|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_17AnalogOutputInt16EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    284|{
   64|    284|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    284|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt16EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    284|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    284|    {
   36|    284|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_17AnalogOutputInt16EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    284|    {
   45|    284|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.79k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.50k, False: 284]
  ------------------
   48|  1.50k|        {
   49|  1.50k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.50k|        }
   51|    284|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    326|{
   64|    326|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    326|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    326|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    326|    {
   36|    326|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_19AnalogOutputFloat32EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    326|    {
   45|    326|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.37k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.05k, False: 326]
  ------------------
   48|  1.05k|        {
   49|  1.05k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.05k|        }
   51|    326|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    391|{
   64|    391|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    391|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    391|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    391|    {
   36|    391|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_20AnalogOutputDouble64EEEZNS_16CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    391|    {
   45|    391|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.46k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.07k, False: 391]
  ------------------
   48|  1.07k|        {
   49|  1.07k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.07k|        }
   51|    391|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    220|{
   64|    220|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    220|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    220|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    220|    {
   36|    220|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    220|    {
   45|    220|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    875|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 655, False: 220]
  ------------------
   48|    655|        {
   49|    655|            visitor.OnValue(readFunc(copy, pos));
   50|    655|        }
   51|    220|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    257|{
   64|    257|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    257|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    257|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    257|    {
   36|    257|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    257|    {
   45|    257|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    989|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 732, False: 257]
  ------------------
   48|    732|        {
   49|    732|            visitor.OnValue(readFunc(copy, pos));
   50|    732|        }
   51|    257|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    249|{
   64|    249|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    249|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    249|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    249|    {
   36|    249|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    249|    {
   45|    249|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.30k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.05k, False: 249]
  ------------------
   48|  1.05k|        {
   49|  1.05k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.05k|        }
   51|    249|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    239|{
   64|    239|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    239|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    239|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    239|    {
   36|    239|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    239|    {
   45|    239|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.02k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 789, False: 239]
  ------------------
   48|    789|        {
   49|    789|            visitor.OnValue(readFunc(copy, pos));
   50|    789|        }
   51|    239|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    280|{
   64|    280|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    280|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    280|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    280|    {
   36|    280|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    280|    {
   45|    280|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.34k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.06k, False: 280]
  ------------------
   48|  1.06k|        {
   49|  1.06k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.06k|        }
   51|    280|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    255|{
   64|    255|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    255|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    255|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    255|    {
   36|    255|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    255|    {
   45|    255|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.14k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 886, False: 255]
  ------------------
   48|    886|        {
   49|    886|            visitor.OnValue(readFunc(copy, pos));
   50|    886|        }
   51|    255|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    256|{
   64|    256|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    256|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    256|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    256|    {
   36|    256|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    256|    {
   45|    256|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.05k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 801, False: 256]
  ------------------
   48|    801|        {
   49|    801|            visitor.OnValue(readFunc(copy, pos));
   50|    801|        }
   51|    256|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    216|{
   64|    216|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    216|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    216|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    216|    {
   36|    216|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    216|    {
   45|    216|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    638|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 422, False: 216]
  ------------------
   48|    422|        {
   49|    422|            visitor.OnValue(readFunc(copy, pos));
   50|    422|        }
   51|    216|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    369|{
   64|    369|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    369|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    369|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    369|    {
   36|    369|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    369|    {
   45|    369|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.35k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 988, False: 369]
  ------------------
   48|    988|        {
   49|    988|            visitor.OnValue(readFunc(copy, pos));
   50|    988|        }
   51|    369|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    233|{
   64|    233|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    233|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    233|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    233|    {
   36|    233|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    233|    {
   45|    233|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    943|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 710, False: 233]
  ------------------
   48|    710|        {
   49|    710|            visitor.OnValue(readFunc(copy, pos));
   50|    710|        }
   51|    233|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    280|{
   64|    280|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    280|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    280|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    280|    {
   36|    280|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    280|    {
   45|    280|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.03k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 755, False: 280]
  ------------------
   48|    755|        {
   49|    755|            visitor.OnValue(readFunc(copy, pos));
   50|    755|        }
   51|    280|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    231|{
   64|    231|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    231|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    231|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    231|    {
   36|    231|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    231|    {
   45|    231|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    898|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 667, False: 231]
  ------------------
   48|    667|        {
   49|    667|            visitor.OnValue(readFunc(copy, pos));
   50|    667|        }
   51|    231|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    281|{
   64|    281|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    281|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    281|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    281|    {
   36|    281|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    281|    {
   45|    281|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.41k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.13k, False: 281]
  ------------------
   48|  1.13k|        {
   49|  1.13k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.13k|        }
   51|    281|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    219|{
   64|    219|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    219|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    219|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    219|    {
   36|    219|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    219|    {
   45|    219|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.10k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 888, False: 219]
  ------------------
   48|    888|        {
   49|    888|            visitor.OnValue(readFunc(copy, pos));
   50|    888|        }
   51|    219|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    234|{
   64|    234|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    234|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    234|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    234|    {
   36|    234|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    234|    {
   45|    234|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.00k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 766, False: 234]
  ------------------
   48|    766|        {
   49|    766|            visitor.OnValue(readFunc(copy, pos));
   50|    766|        }
   51|    234|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogCommandEventEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    259|    {
   45|    259|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.00k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 750, False: 259]
  ------------------
   48|    750|        {
   49|    750|            visitor.OnValue(readFunc(copy, pos));
   50|    750|        }
   51|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    256|{
   64|    256|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    256|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    256|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    256|    {
   36|    256|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_16CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    256|    {
   45|    256|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.06k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 810, False: 256]
  ------------------
   48|    810|        {
   49|    810|            visitor.OnValue(readFunc(copy, pos));
   50|    810|        }
   51|    256|    }
CountIndexParser.cpp:_ZN8opendnp324CreateBufferedCollectionItZNS_16CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EENS_18BufferedCollectionIT_T0_EERKS4_mRKSJ_:
   63|    351|{
   64|    351|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    351|}
CountIndexParser.cpp:_ZN8opendnp318BufferedCollectionItZNS_16CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EC2ERKS4_mRKSG_:
   34|    351|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    351|    {
   36|    351|    }
CountIndexParser.cpp:_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_16CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EENS_18BufferedCollectionIT_T0_EERKS7_mRKSM_:
   63|    540|{
   64|    540|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    540|}
CountIndexParser.cpp:_ZN8opendnp318BufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_16CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EC2ERKS7_mRKSJ_:
   34|    540|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    540|    {
   36|    540|    }
CountIndexParser.cpp:_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_16CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0E7ForeachERNS_8IVisitorIS3_EE:
   44|    540|    {
   45|    540|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.61k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.07k, False: 540]
  ------------------
   48|  1.07k|        {
   49|  1.07k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.07k|        }
   51|    540|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group50Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    258|{
   64|    258|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    258|}
_ZN8opendnp318BufferedCollectionINS_11Group50Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    258|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    258|    {
   36|    258|    }
_ZNK8opendnp318BufferedCollectionINS_11Group50Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E7ForeachERNS_8IVisitorIS1_EE:
   44|    258|    {
   45|    258|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.10k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 850, False: 258]
  ------------------
   48|    850|        {
   49|    850|            visitor.OnValue(readFunc(copy, pos));
   50|    850|        }
   51|    258|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group50Var3EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    204|{
   64|    204|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    204|}
_ZN8opendnp318BufferedCollectionINS_11Group50Var3EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    204|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    204|    {
   36|    204|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group51Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    297|{
   64|    297|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    297|}
_ZN8opendnp318BufferedCollectionINS_11Group51Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    297|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    297|    {
   36|    297|    }
_ZNK8opendnp318BufferedCollectionINS_11Group51Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E7ForeachERNS_8IVisitorIS1_EE:
   44|    297|    {
   45|    297|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    890|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 593, False: 297]
  ------------------
   48|    593|        {
   49|    593|            visitor.OnValue(readFunc(copy, pos));
   50|    593|        }
   51|    297|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group51Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    414|{
   64|    414|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    414|}
_ZN8opendnp318BufferedCollectionINS_11Group51Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    414|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    414|    {
   36|    414|    }
_ZNK8opendnp318BufferedCollectionINS_11Group51Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E7ForeachERNS_8IVisitorIS1_EE:
   44|    414|    {
   45|    414|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.56k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.15k, False: 414]
  ------------------
   48|  1.15k|        {
   49|  1.15k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.15k|        }
   51|    414|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group52Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_11Group52Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZNK8opendnp318BufferedCollectionINS_11Group52Var1EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E7ForeachERNS_8IVisitorIS1_EE:
   44|    259|    {
   45|    259|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  3.10k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 2.84k, False: 259]
  ------------------
   48|  2.84k|        {
   49|  2.84k|            visitor.OnValue(readFunc(copy, pos));
   50|  2.84k|        }
   51|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_11Group52Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EENS_18BufferedCollectionIT_T0_EESB_mRKSI_:
   63|    272|{
   64|    272|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    272|}
_ZN8opendnp318BufferedCollectionINS_11Group52Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_EC2ESB_mRKSF_:
   34|    272|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    272|    {
   36|    272|    }
_ZNK8opendnp318BufferedCollectionINS_11Group52Var2EZNS_11CountParser13InvokeCountOfIS1_EEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRS9_jE_E7ForeachERNS_8IVisitorIS1_EE:
   44|    272|    {
   45|    272|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  2.71k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 2.44k, False: 272]
  ------------------
   48|  2.44k|        {
   49|  2.44k|            visitor.OnValue(readFunc(copy, pos));
   50|  2.44k|        }
   51|    272|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|    372|{
   64|    372|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    372|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EC2ESG_mRKSK_:
   34|    372|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    372|    {
   36|    372|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    372|    {
   45|    372|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  33.4k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 33.0k, False: 372]
  ------------------
   48|  33.0k|        {
   49|  33.0k|            visitor.OnValue(readFunc(copy, pos));
   50|  33.0k|        }
   51|    372|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    276|{
   64|    276|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    276|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    276|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    276|    {
   36|    276|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6BinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    276|    {
   45|    276|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  3.50k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 3.22k, False: 276]
  ------------------
   48|  3.22k|        {
   49|  3.22k|            visitor.OnValue(readFunc(copy, pos));
   50|  3.22k|        }
   51|    276|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser29InvokeRangeDoubleBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_mE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|    597|{
   64|    597|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    597|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser29InvokeRangeDoubleBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_mE_EC2ESG_mRKSK_:
   34|    597|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    597|    {
   36|    597|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser29InvokeRangeDoubleBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_mE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    597|    {
   45|    597|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  10.5k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 9.99k, False: 597]
  ------------------
   48|  9.99k|        {
   49|  9.99k|            visitor.OnValue(readFunc(copy, pos));
   50|  9.99k|        }
   51|    597|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|    303|{
   64|    303|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    303|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EC2ESG_mRKSK_:
   34|    303|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    303|    {
   36|    303|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    303|    {
   45|    303|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  29.5k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 29.2k, False: 303]
  ------------------
   48|  29.2k|        {
   49|  29.2k|            visitor.OnValue(readFunc(copy, pos));
   50|  29.2k|        }
   51|    303|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    294|{
   64|    294|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    294|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    294|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    294|    {
   36|    294|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_15DoubleBitBinaryEEEZNS_11RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    294|    {
   45|    294|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  2.13k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.84k, False: 294]
  ------------------
   48|  1.84k|        {
   49|  1.84k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.84k|        }
   51|    294|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    253|{
   64|    253|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    253|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    253|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    253|    {
   36|    253|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18BinaryOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    253|    {
   45|    253|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.61k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.36k, False: 253]
  ------------------
   48|  1.36k|        {
   49|  1.36k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.36k|        }
   51|    253|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    374|{
   64|    374|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    374|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    374|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    374|    {
   36|    374|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    374|    {
   45|    374|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.74k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.37k, False: 374]
  ------------------
   48|  1.37k|        {
   49|  1.37k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.37k|        }
   51|    374|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    245|{
   64|    245|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    245|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    245|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    245|    {
   36|    245|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    245|    {
   45|    245|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.28k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.03k, False: 245]
  ------------------
   48|  1.03k|        {
   49|  1.03k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.03k|        }
   51|    245|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    426|{
   64|    426|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    426|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    426|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    426|    {
   36|    426|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    426|    {
   45|    426|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.58k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.15k, False: 426]
  ------------------
   48|  1.15k|        {
   49|  1.15k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.15k|        }
   51|    426|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    249|{
   64|    249|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    249|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    249|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    249|    {
   36|    249|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_7CounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    249|    {
   45|    249|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.26k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.01k, False: 249]
  ------------------
   48|  1.01k|        {
   49|  1.01k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.01k|        }
   51|    249|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    263|{
   64|    263|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    263|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    263|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    263|    {
   36|    263|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    263|    {
   45|    263|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.96k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.70k, False: 263]
  ------------------
   48|  1.70k|        {
   49|  1.70k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.70k|        }
   51|    263|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    252|{
   64|    252|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    252|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    252|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    252|    {
   36|    252|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    252|    {
   45|    252|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.21k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 965, False: 252]
  ------------------
   48|    965|        {
   49|    965|            visitor.OnValue(readFunc(copy, pos));
   50|    965|        }
   51|    252|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    259|{
   64|    259|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    259|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    259|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    259|    {
   36|    259|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    259|    {
   45|    259|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|    993|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 734, False: 259]
  ------------------
   48|    734|        {
   49|    734|            visitor.OnValue(readFunc(copy, pos));
   50|    734|        }
   51|    259|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    343|{
   64|    343|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    343|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    343|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    343|    {
   36|    343|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    343|    {
   45|    343|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.50k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.16k, False: 343]
  ------------------
   48|  1.16k|        {
   49|  1.16k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.16k|        }
   51|    343|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    387|{
   64|    387|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    387|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    387|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    387|    {
   36|    387|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    387|    {
   45|    387|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.63k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.24k, False: 387]
  ------------------
   48|  1.24k|        {
   49|  1.24k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.24k|        }
   51|    387|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    234|{
   64|    234|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    234|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    234|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    234|    {
   36|    234|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_13FrozenCounterEEEZNS_11RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    234|    {
   45|    234|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.25k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.02k, False: 234]
  ------------------
   48|  1.02k|        {
   49|  1.02k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.02k|        }
   51|    234|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    405|{
   64|    405|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    405|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    405|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    405|    {
   36|    405|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    405|    {
   45|    405|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.66k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.26k, False: 405]
  ------------------
   48|  1.26k|        {
   49|  1.26k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.26k|        }
   51|    405|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    246|{
   64|    246|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    246|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    246|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    246|    {
   36|    246|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    246|    {
   45|    246|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  2.09k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.84k, False: 246]
  ------------------
   48|  1.84k|        {
   49|  1.84k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.84k|        }
   51|    246|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    239|{
   64|    239|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    239|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    239|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    239|    {
   36|    239|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    239|    {
   45|    239|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.00k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 764, False: 239]
  ------------------
   48|    764|        {
   49|    764|            visitor.OnValue(readFunc(copy, pos));
   50|    764|        }
   51|    239|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    265|{
   64|    265|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    265|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    265|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    265|    {
   36|    265|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    265|    {
   45|    265|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.20k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 936, False: 265]
  ------------------
   48|    936|        {
   49|    936|            visitor.OnValue(readFunc(copy, pos));
   50|    936|        }
   51|    265|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    286|{
   64|    286|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    286|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    286|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    286|    {
   36|    286|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    286|    {
   45|    286|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  2.01k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.73k, False: 286]
  ------------------
   48|  1.73k|        {
   49|  1.73k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.73k|        }
   51|    286|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    273|{
   64|    273|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    273|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    273|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    273|    {
   36|    273|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_6AnalogEEEZNS_11RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    273|    {
   45|    273|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.10k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 834, False: 273]
  ------------------
   48|    834|        {
   49|    834|            visitor.OnValue(readFunc(copy, pos));
   50|    834|        }
   51|    273|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    245|{
   64|    245|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    245|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    245|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    245|    {
   36|    245|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    245|    {
   45|    245|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.56k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.32k, False: 245]
  ------------------
   48|  1.32k|        {
   49|  1.32k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.32k|        }
   51|    245|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    226|{
   64|    226|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    226|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    226|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    226|    {
   36|    226|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    226|    {
   45|    226|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.23k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.00k, False: 226]
  ------------------
   48|  1.00k|        {
   49|  1.00k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.00k|        }
   51|    226|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    459|{
   64|    459|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    459|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    459|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    459|    {
   36|    459|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    459|    {
   45|    459|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  3.12k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 2.67k, False: 459]
  ------------------
   48|  2.67k|        {
   49|  2.67k|            visitor.OnValue(readFunc(copy, pos));
   50|  2.67k|        }
   51|    459|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    329|{
   64|    329|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    329|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    329|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    329|    {
   36|    329|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_18AnalogOutputStatusEEEZNS_11RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    329|    {
   45|    329|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  2.08k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.76k, False: 329]
  ------------------
   48|  1.76k|        {
   49|  1.76k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.76k|        }
   51|    329|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_11RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EENS_18BufferedCollectionIT_T0_EESH_mRKSO_:
   63|    283|{
   64|    283|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    283|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_11RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_EC2ESH_mRKSL_:
   34|    283|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    283|    {
   36|    283|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_15TimeAndIntervalEEEZNS_11RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSF_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    283|    {
   45|    283|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.19k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 916, False: 283]
  ------------------
   48|    916|        {
   49|    916|            visitor.OnValue(readFunc(copy, pos));
   50|    916|        }
   51|    283|    }
_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_8IINValueEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EENS_18BufferedCollectionIT_T0_EESG_mRKSN_:
   63|    324|{
   64|    324|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    324|}
_ZN8opendnp318BufferedCollectionINS_7IndexedINS_8IINValueEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_EC2ESG_mRKSK_:
   34|    324|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    324|    {
   36|    324|    }
_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_8IINValueEEEZNS_11RangeParser23InvokeRangeBitfieldTypeIS2_EEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEEUlRSE_jE_E7ForeachERNS_8IVisitorIS3_EE:
   44|    324|    {
   45|    324|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  34.0k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 33.7k, False: 324]
  ------------------
   48|  33.7k|        {
   49|  33.7k|            visitor.OnValue(readFunc(copy, pos));
   50|  33.7k|        }
   51|    324|    }
RangeParser.cpp:_ZN8opendnp324CreateBufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_11RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EENS_18BufferedCollectionIT_T0_EERKS7_mRKSM_:
   63|    480|{
   64|    480|    return BufferedCollection<T, ReadFunc>(buffer, count, readFunc);
   65|    480|}
RangeParser.cpp:_ZN8opendnp318BufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_11RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0EC2ERKS7_mRKSJ_:
   34|    480|        : buffer(buffer), COUNT(count), readFunc(readFunc)
   35|    480|    {
   36|    480|    }
RangeParser.cpp:_ZNK8opendnp318BufferedCollectionINS_7IndexedINS_11OctetStringEEEZNS_11RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerEE3$_0E7ForeachERNS_8IVisitorIS3_EE:
   44|    480|    {
   45|    480|        ser4cpp::rseq_t copy(buffer);
   46|       |
   47|  1.54k|        for (uint32_t pos = 0; pos < COUNT; ++pos)
  ------------------
  |  Branch (47:32): [True: 1.06k, False: 480]
  ------------------
   48|  1.06k|        {
   49|  1.06k|            visitor.OnValue(readFunc(copy, pos));
   50|  1.06k|        }
   51|    480|    }

_ZN8opendnp316CountIndexParserC2EtmRKNS_9NumParserEPFvRKNS_12HeaderRecordEtS3_RKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEE:
   40|  18.2k|    : count(count), requiredSize(requiredSize), numparser(numparser), handler(handler)
   41|  18.2k|{
   42|  18.2k|}
_ZN8opendnp316CountIndexParser11ParseHeaderERN7ser4cpp4RSeqImEERKNS_9NumParserERKNS_14ParserSettingsERKNS_12HeaderRecordEPNS_6LoggerEPNS_12IAPDUHandlerE:
   50|  20.4k|{
   51|  20.4k|    uint16_t count;
   52|  20.4k|    auto res = numparser.ParseCount(buffer, count, pLogger);
   53|  20.4k|    if (res == ParseResult::OK)
  ------------------
  |  Branch (53:9): [True: 19.9k, False: 413]
  ------------------
   54|  19.9k|    {
   55|  19.9k|        FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u %s, %s [%u]", record.group, record.variation,
  ------------------
  |  |   62|  19.9k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 19.9k, False: 0]
  |  |  |  Branch (62:9): [True: 0, False: 19.9k]
  |  |  |  Branch (62:20): [True: 0, False: 19.9k]
  |  |  ------------------
  |  |   63|  19.9k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   56|  19.9k|                            GroupVariationSpec::to_human_string(record.enumeration),
   57|  19.9k|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), count);
   58|       |
   59|  19.9k|        if (settings.ExpectsContents())
  ------------------
  |  Branch (59:13): [True: 19.4k, False: 586]
  ------------------
   60|  19.4k|        {
   61|  19.4k|            return ParseCountOfObjects(buffer, record, numparser, count, pLogger, pHandler);
   62|  19.4k|        }
   63|    586|        else
   64|    586|        {
   65|    586|            return ParseCountOfIndices(buffer, record, numparser, count, pLogger, pHandler);
   66|    586|        }
   67|  19.9k|    }
   68|       |
   69|    413|    return res;
   70|  20.4k|}
_ZNK8opendnp316CountIndexParser7ProcessERKNS_12HeaderRecordERN7ser4cpp4RSeqImEEPNS_12IAPDUHandlerEPNS_6LoggerE:
   76|  18.2k|{
   77|  18.2k|    if (buffer.length() < requiredSize)
  ------------------
  |  Branch (77:9): [True: 5.34k, False: 12.9k]
  ------------------
   78|  5.34k|    {
   79|  5.34k|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified objects");
  ------------------
  |  |   48|  5.34k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 5.34k, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 5.34k]
  |  |  ------------------
  |  |   49|  5.34k|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   80|  5.34k|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
   81|  5.34k|    }
   82|       |
   83|  12.9k|    if (pHandler)
  ------------------
  |  Branch (83:9): [True: 12.9k, False: 0]
  ------------------
   84|  12.9k|    {
   85|  12.9k|        handler(record, count, numparser, buffer, *pHandler);
   86|  12.9k|    }
   87|  12.9k|    buffer.advance(requiredSize);
   88|  12.9k|    return ParseResult::OK;
   89|  18.2k|}
_ZN8opendnp316CountIndexParser19ParseCountOfObjectsERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerE:
   97|  19.4k|{
   98|  19.4k|    switch (record.enumeration)
   99|  19.4k|    {
  100|    306|    case (GroupVariation::Group2Var1):
  ------------------
  |  Branch (100:5): [True: 306, False: 19.0k]
  ------------------
  101|    306|        return CountIndexParser::From<Group2Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  102|    459|    case (GroupVariation::Group2Var2):
  ------------------
  |  Branch (102:5): [True: 459, False: 18.9k]
  ------------------
  103|    459|        return CountIndexParser::From<Group2Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  104|    277|    case (GroupVariation::Group2Var3):
  ------------------
  |  Branch (104:5): [True: 277, False: 19.1k]
  ------------------
  105|    277|        return CountIndexParser::From<Group2Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  106|       |
  107|    279|    case (GroupVariation::Group4Var1):
  ------------------
  |  Branch (107:5): [True: 279, False: 19.1k]
  ------------------
  108|    279|        return CountIndexParser::From<Group4Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  109|    373|    case (GroupVariation::Group4Var2):
  ------------------
  |  Branch (109:5): [True: 373, False: 19.0k]
  ------------------
  110|    373|        return CountIndexParser::From<Group4Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  111|    234|    case (GroupVariation::Group4Var3):
  ------------------
  |  Branch (111:5): [True: 234, False: 19.1k]
  ------------------
  112|    234|        return CountIndexParser::From<Group4Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  113|       |
  114|    272|    case (GroupVariation::Group11Var1):
  ------------------
  |  Branch (114:5): [True: 272, False: 19.1k]
  ------------------
  115|    272|        return CountIndexParser::From<Group11Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  116|    509|    case (GroupVariation::Group11Var2):
  ------------------
  |  Branch (116:5): [True: 509, False: 18.8k]
  ------------------
  117|    509|        return CountIndexParser::From<Group11Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  118|       |
  119|    473|    case (GroupVariation::Group12Var1):
  ------------------
  |  Branch (119:5): [True: 473, False: 18.9k]
  ------------------
  120|    473|        return CountIndexParser::From<Group12Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  121|       |
  122|    541|    case (GroupVariation::Group13Var1):
  ------------------
  |  Branch (122:5): [True: 541, False: 18.8k]
  ------------------
  123|    541|        return CountIndexParser::From<Group13Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  124|    303|    case (GroupVariation::Group13Var2):
  ------------------
  |  Branch (124:5): [True: 303, False: 19.1k]
  ------------------
  125|    303|        return CountIndexParser::From<Group13Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  126|       |
  127|    251|    case (GroupVariation::Group22Var1):
  ------------------
  |  Branch (127:5): [True: 251, False: 19.1k]
  ------------------
  128|    251|        return CountIndexParser::From<Group22Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  129|    289|    case (GroupVariation::Group22Var2):
  ------------------
  |  Branch (129:5): [True: 289, False: 19.1k]
  ------------------
  130|    289|        return CountIndexParser::From<Group22Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  131|    439|    case (GroupVariation::Group22Var5):
  ------------------
  |  Branch (131:5): [True: 439, False: 18.9k]
  ------------------
  132|    439|        return CountIndexParser::From<Group22Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  133|    538|    case (GroupVariation::Group22Var6):
  ------------------
  |  Branch (133:5): [True: 538, False: 18.8k]
  ------------------
  134|    538|        return CountIndexParser::From<Group22Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  135|       |
  136|    444|    case (GroupVariation::Group23Var1):
  ------------------
  |  Branch (136:5): [True: 444, False: 18.9k]
  ------------------
  137|    444|        return CountIndexParser::From<Group23Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  138|    229|    case (GroupVariation::Group23Var2):
  ------------------
  |  Branch (138:5): [True: 229, False: 19.1k]
  ------------------
  139|    229|        return CountIndexParser::From<Group23Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  140|    292|    case (GroupVariation::Group23Var5):
  ------------------
  |  Branch (140:5): [True: 292, False: 19.1k]
  ------------------
  141|    292|        return CountIndexParser::From<Group23Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  142|    384|    case (GroupVariation::Group23Var6):
  ------------------
  |  Branch (142:5): [True: 384, False: 19.0k]
  ------------------
  143|    384|        return CountIndexParser::From<Group23Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  144|       |
  145|    273|    case (GroupVariation::Group32Var1):
  ------------------
  |  Branch (145:5): [True: 273, False: 19.1k]
  ------------------
  146|    273|        return CountIndexParser::From<Group32Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  147|    217|    case (GroupVariation::Group32Var2):
  ------------------
  |  Branch (147:5): [True: 217, False: 19.1k]
  ------------------
  148|    217|        return CountIndexParser::From<Group32Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  149|    296|    case (GroupVariation::Group32Var3):
  ------------------
  |  Branch (149:5): [True: 296, False: 19.1k]
  ------------------
  150|    296|        return CountIndexParser::From<Group32Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  151|    403|    case (GroupVariation::Group32Var4):
  ------------------
  |  Branch (151:5): [True: 403, False: 19.0k]
  ------------------
  152|    403|        return CountIndexParser::From<Group32Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  153|    271|    case (GroupVariation::Group32Var5):
  ------------------
  |  Branch (153:5): [True: 271, False: 19.1k]
  ------------------
  154|    271|        return CountIndexParser::From<Group32Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  155|    583|    case (GroupVariation::Group32Var6):
  ------------------
  |  Branch (155:5): [True: 583, False: 18.8k]
  ------------------
  156|    583|        return CountIndexParser::From<Group32Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  157|    362|    case (GroupVariation::Group32Var7):
  ------------------
  |  Branch (157:5): [True: 362, False: 19.0k]
  ------------------
  158|    362|        return CountIndexParser::From<Group32Var7>(count, numparser).Process(record, buffer, pHandler, pLogger);
  159|    451|    case (GroupVariation::Group32Var8):
  ------------------
  |  Branch (159:5): [True: 451, False: 18.9k]
  ------------------
  160|    451|        return CountIndexParser::From<Group32Var8>(count, numparser).Process(record, buffer, pHandler, pLogger);
  161|       |
  162|    344|    case (GroupVariation::Group41Var1):
  ------------------
  |  Branch (162:5): [True: 344, False: 19.0k]
  ------------------
  163|    344|        return CountIndexParser::From<Group41Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  164|    286|    case (GroupVariation::Group41Var2):
  ------------------
  |  Branch (164:5): [True: 286, False: 19.1k]
  ------------------
  165|    286|        return CountIndexParser::From<Group41Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  166|    328|    case (GroupVariation::Group41Var3):
  ------------------
  |  Branch (166:5): [True: 328, False: 19.0k]
  ------------------
  167|    328|        return CountIndexParser::From<Group41Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  168|    642|    case (GroupVariation::Group41Var4):
  ------------------
  |  Branch (168:5): [True: 642, False: 18.7k]
  ------------------
  169|    642|        return CountIndexParser::From<Group41Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  170|       |
  171|    221|    case (GroupVariation::Group42Var1):
  ------------------
  |  Branch (171:5): [True: 221, False: 19.1k]
  ------------------
  172|    221|        return CountIndexParser::From<Group42Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  173|    467|    case (GroupVariation::Group42Var2):
  ------------------
  |  Branch (173:5): [True: 467, False: 18.9k]
  ------------------
  174|    467|        return CountIndexParser::From<Group42Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  175|    459|    case (GroupVariation::Group42Var3):
  ------------------
  |  Branch (175:5): [True: 459, False: 18.9k]
  ------------------
  176|    459|        return CountIndexParser::From<Group42Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  177|    342|    case (GroupVariation::Group42Var4):
  ------------------
  |  Branch (177:5): [True: 342, False: 19.0k]
  ------------------
  178|    342|        return CountIndexParser::From<Group42Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  179|    492|    case (GroupVariation::Group42Var5):
  ------------------
  |  Branch (179:5): [True: 492, False: 18.9k]
  ------------------
  180|    492|        return CountIndexParser::From<Group42Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  181|    472|    case (GroupVariation::Group42Var6):
  ------------------
  |  Branch (181:5): [True: 472, False: 18.9k]
  ------------------
  182|    472|        return CountIndexParser::From<Group42Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  183|    411|    case (GroupVariation::Group42Var7):
  ------------------
  |  Branch (183:5): [True: 411, False: 18.9k]
  ------------------
  184|    411|        return CountIndexParser::From<Group42Var7>(count, numparser).Process(record, buffer, pHandler, pLogger);
  185|    403|    case (GroupVariation::Group42Var8):
  ------------------
  |  Branch (185:5): [True: 403, False: 19.0k]
  ------------------
  186|    403|        return CountIndexParser::From<Group42Var8>(count, numparser).Process(record, buffer, pHandler, pLogger);
  187|       |
  188|    410|    case (GroupVariation::Group43Var1):
  ------------------
  |  Branch (188:5): [True: 410, False: 18.9k]
  ------------------
  189|    410|        return CountIndexParser::From<Group43Var1>(count, numparser).Process(record, buffer, pHandler, pLogger);
  190|    234|    case (GroupVariation::Group43Var2):
  ------------------
  |  Branch (190:5): [True: 234, False: 19.1k]
  ------------------
  191|    234|        return CountIndexParser::From<Group43Var2>(count, numparser).Process(record, buffer, pHandler, pLogger);
  192|    288|    case (GroupVariation::Group43Var3):
  ------------------
  |  Branch (192:5): [True: 288, False: 19.1k]
  ------------------
  193|    288|        return CountIndexParser::From<Group43Var3>(count, numparser).Process(record, buffer, pHandler, pLogger);
  194|    420|    case (GroupVariation::Group43Var4):
  ------------------
  |  Branch (194:5): [True: 420, False: 18.9k]
  ------------------
  195|    420|        return CountIndexParser::From<Group43Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  196|    497|    case (GroupVariation::Group43Var5):
  ------------------
  |  Branch (196:5): [True: 497, False: 18.9k]
  ------------------
  197|    497|        return CountIndexParser::From<Group43Var5>(count, numparser).Process(record, buffer, pHandler, pLogger);
  198|    406|    case (GroupVariation::Group43Var6):
  ------------------
  |  Branch (198:5): [True: 406, False: 18.9k]
  ------------------
  199|    406|        return CountIndexParser::From<Group43Var6>(count, numparser).Process(record, buffer, pHandler, pLogger);
  200|    369|    case (GroupVariation::Group43Var7):
  ------------------
  |  Branch (200:5): [True: 369, False: 19.0k]
  ------------------
  201|    369|        return CountIndexParser::From<Group43Var7>(count, numparser).Process(record, buffer, pHandler, pLogger);
  202|    467|    case (GroupVariation::Group43Var8):
  ------------------
  |  Branch (202:5): [True: 467, False: 18.9k]
  ------------------
  203|    467|        return CountIndexParser::From<Group43Var8>(count, numparser).Process(record, buffer, pHandler, pLogger);
  204|    567|    case (GroupVariation::Group50Var4):
  ------------------
  |  Branch (204:5): [True: 567, False: 18.8k]
  ------------------
  205|    567|        return CountIndexParser::From<Group50Var4>(count, numparser).Process(record, buffer, pHandler, pLogger);
  206|    848|    case (GroupVariation::Group111Var0):
  ------------------
  |  Branch (206:5): [True: 848, False: 18.5k]
  ------------------
  207|    848|        return ParseIndexPrefixedOctetData(buffer, record, numparser, count, pLogger, pHandler);
  208|       |
  209|    283|    default:
  ------------------
  |  Branch (209:5): [True: 283, False: 19.1k]
  ------------------
  210|       |
  211|    283|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unsupported qualifier/object - %s - %i / %i",
  ------------------
  |  |   62|    283|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 283, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 283]
  |  |  ------------------
  |  |   63|    283|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  212|    283|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), record.group,
  213|    283|                            record.variation);
  214|       |
  215|    283|        return ParseResult::INVALID_OBJECT_QUALIFIER;
  216|  19.4k|    }
  217|  19.4k|}
_ZN8opendnp316CountIndexParser19ParseCountOfIndicesERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEtPNS_6LoggerEPNS_12IAPDUHandlerE:
  225|    586|{
  226|    586|    const auto SIZE = static_cast<size_t>(count) * static_cast<size_t>(numparser.NumBytes());
  227|       |
  228|    586|    if (buffer.length() < SIZE)
  ------------------
  |  Branch (228:9): [True: 235, False: 351]
  ------------------
  229|    235|    {
  230|    235|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified sequence of indices");
  ------------------
  |  |   48|    235|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 235, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 235]
  |  |  ------------------
  |  |   49|    235|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  231|    235|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
  232|    235|    }
  233|       |
  234|    351|    if (pHandler)
  ------------------
  |  Branch (234:9): [True: 351, False: 0]
  ------------------
  235|    351|    {
  236|    351|        auto read = [&numparser, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> uint16_t {
  237|    351|            return numparser.ReadNum(buffer);
  238|    351|        };
  239|       |
  240|    351|        auto collection = CreateBufferedCollection<uint16_t>(buffer, count, read);
  241|    351|        pHandler->OnHeader(PrefixHeader(record, count), collection);
  242|    351|    }
  243|       |
  244|    351|    buffer.advance(SIZE);
  245|    351|    return ParseResult::OK;
  246|    586|}
_ZN8opendnp316CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerE:
  254|    848|{
  255|    848|    if (record.variation == 0)
  ------------------
  |  Branch (255:9): [True: 87, False: 761]
  ------------------
  256|     87|    {
  257|     87|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Octet string variation 0 may only be used in requests");
  ------------------
  |  |   48|     87|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 87, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 87]
  |  |  ------------------
  |  |   49|     87|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  258|     87|        return ParseResult::INVALID_OBJECT;
  259|     87|    }
  260|       |
  261|    761|    const uint32_t TOTAL_SIZE = count * (numparser.NumBytes() + record.variation);
  262|       |
  263|    761|    if (buffer.length() < TOTAL_SIZE)
  ------------------
  |  Branch (263:9): [True: 221, False: 540]
  ------------------
  264|    221|    {
  265|    221|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified bitfield objects");
  ------------------
  |  |   48|    221|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 221, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 221]
  |  |  ------------------
  |  |   49|    221|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  266|    221|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
  267|    221|    }
  268|       |
  269|    540|    if (pHandler)
  ------------------
  |  Branch (269:9): [True: 540, False: 0]
  ------------------
  270|    540|    {
  271|    540|        auto read = [&numparser, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<OctetString> {
  272|    540|            auto index = numparser.ReadNum(buffer);
  273|    540|            const auto octetStringSlice = buffer.take(record.variation);
  274|    540|            OctetString octets(Buffer(octetStringSlice, octetStringSlice.length()));
  275|    540|            buffer.advance(record.variation);
  276|    540|            return WithIndex(octets, index);
  277|    540|        };
  278|       |
  279|    540|        auto collection = CreateBufferedCollection<Indexed<OctetString>>(buffer, count, read);
  280|    540|        pHandler->OnHeader(PrefixHeader(record, count), collection);
  281|    540|    }
  282|       |
  283|    540|    buffer.advance(TOTAL_SIZE);
  284|    540|    return ParseResult::OK;
  285|    761|}
CountIndexParser.cpp:_ZZN8opendnp316CountIndexParser27ParseIndexPrefixedOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_9NumParserEjPNS_6LoggerEPNS_12IAPDUHandlerEENK3$_0clES4_j:
  271|  1.07k|        auto read = [&numparser, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<OctetString> {
  272|  1.07k|            auto index = numparser.ReadNum(buffer);
  273|  1.07k|            const auto octetStringSlice = buffer.take(record.variation);
  274|  1.07k|            OctetString octets(Buffer(octetStringSlice, octetStringSlice.length()));
  275|  1.07k|            buffer.advance(record.variation);
  276|  1.07k|            return WithIndex(octets, index);
  277|  1.07k|        };

_ZN8opendnp316CountIndexParser4FromINS_10Group2Var1EEES0_tRKNS_9NumParserE:
  111|    306|{
  112|    306|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    306|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    306|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    303|{
  129|    303|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    303|    {
  131|    303|        Indexed<typename Descriptor::Target> pair;
  132|    303|        pair.index = numparser.ReadNum(buffer);
  133|    303|        Descriptor::ReadTarget(buffer, pair.value);
  134|    303|        return pair;
  135|    303|    };
  136|       |
  137|    303|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    303|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    303|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.80k|    {
  131|  1.80k|        Indexed<typename Descriptor::Target> pair;
  132|  1.80k|        pair.index = numparser.ReadNum(buffer);
  133|  1.80k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.80k|        return pair;
  135|  1.80k|    };
_ZN8opendnp316CountIndexParser4FromINS_10Group2Var2EEES0_tRKNS_9NumParserE:
  111|    459|{
  112|    459|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    459|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    459|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    280|{
  129|    280|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    280|    {
  131|    280|        Indexed<typename Descriptor::Target> pair;
  132|    280|        pair.index = numparser.ReadNum(buffer);
  133|    280|        Descriptor::ReadTarget(buffer, pair.value);
  134|    280|        return pair;
  135|    280|    };
  136|       |
  137|    280|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    280|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    280|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.03k|    {
  131|  1.03k|        Indexed<typename Descriptor::Target> pair;
  132|  1.03k|        pair.index = numparser.ReadNum(buffer);
  133|  1.03k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.03k|        return pair;
  135|  1.03k|    };
_ZN8opendnp316CountIndexParser4FromINS_10Group2Var3EEES0_tRKNS_9NumParserE:
  111|    277|{
  112|    277|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    277|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    277|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    275|{
  129|    275|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    275|    {
  131|    275|        Indexed<typename Descriptor::Target> pair;
  132|    275|        pair.index = numparser.ReadNum(buffer);
  133|    275|        Descriptor::ReadTarget(buffer, pair.value);
  134|    275|        return pair;
  135|    275|    };
  136|       |
  137|    275|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    275|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    275|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group2Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    730|    {
  131|    730|        Indexed<typename Descriptor::Target> pair;
  132|    730|        pair.index = numparser.ReadNum(buffer);
  133|    730|        Descriptor::ReadTarget(buffer, pair.value);
  134|    730|        return pair;
  135|    730|    };
_ZN8opendnp316CountIndexParser4FromINS_10Group4Var1EEES0_tRKNS_9NumParserE:
  111|    279|{
  112|    279|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    279|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    279|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    276|{
  129|    276|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    276|    {
  131|    276|        Indexed<typename Descriptor::Target> pair;
  132|    276|        pair.index = numparser.ReadNum(buffer);
  133|    276|        Descriptor::ReadTarget(buffer, pair.value);
  134|    276|        return pair;
  135|    276|    };
  136|       |
  137|    276|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    276|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    276|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.69k|    {
  131|  1.69k|        Indexed<typename Descriptor::Target> pair;
  132|  1.69k|        pair.index = numparser.ReadNum(buffer);
  133|  1.69k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.69k|        return pair;
  135|  1.69k|    };
_ZN8opendnp316CountIndexParser4FromINS_10Group4Var2EEES0_tRKNS_9NumParserE:
  111|    373|{
  112|    373|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    373|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    373|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    211|{
  129|    211|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    211|    {
  131|    211|        Indexed<typename Descriptor::Target> pair;
  132|    211|        pair.index = numparser.ReadNum(buffer);
  133|    211|        Descriptor::ReadTarget(buffer, pair.value);
  134|    211|        return pair;
  135|    211|    };
  136|       |
  137|    211|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    211|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    211|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    571|    {
  131|    571|        Indexed<typename Descriptor::Target> pair;
  132|    571|        pair.index = numparser.ReadNum(buffer);
  133|    571|        Descriptor::ReadTarget(buffer, pair.value);
  134|    571|        return pair;
  135|    571|    };
_ZN8opendnp316CountIndexParser4FromINS_10Group4Var3EEES0_tRKNS_9NumParserE:
  111|    234|{
  112|    234|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    234|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    234|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    231|{
  129|    231|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    231|    {
  131|    231|        Indexed<typename Descriptor::Target> pair;
  132|    231|        pair.index = numparser.ReadNum(buffer);
  133|    231|        Descriptor::ReadTarget(buffer, pair.value);
  134|    231|        return pair;
  135|    231|    };
  136|       |
  137|    231|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    231|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    231|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_10Group4Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.48k|    {
  131|  1.48k|        Indexed<typename Descriptor::Target> pair;
  132|  1.48k|        pair.index = numparser.ReadNum(buffer);
  133|  1.48k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.48k|        return pair;
  135|  1.48k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group11Var1EEES0_tRKNS_9NumParserE:
  111|    272|{
  112|    272|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    272|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    272|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    269|{
  129|    269|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    269|    {
  131|    269|        Indexed<typename Descriptor::Target> pair;
  132|    269|        pair.index = numparser.ReadNum(buffer);
  133|    269|        Descriptor::ReadTarget(buffer, pair.value);
  134|    269|        return pair;
  135|    269|    };
  136|       |
  137|    269|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    269|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    269|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group11Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  2.12k|    {
  131|  2.12k|        Indexed<typename Descriptor::Target> pair;
  132|  2.12k|        pair.index = numparser.ReadNum(buffer);
  133|  2.12k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  2.12k|        return pair;
  135|  2.12k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group11Var2EEES0_tRKNS_9NumParserE:
  111|    509|{
  112|    509|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    509|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    509|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    422|{
  129|    422|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    422|    {
  131|    422|        Indexed<typename Descriptor::Target> pair;
  132|    422|        pair.index = numparser.ReadNum(buffer);
  133|    422|        Descriptor::ReadTarget(buffer, pair.value);
  134|    422|        return pair;
  135|    422|    };
  136|       |
  137|    422|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    422|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    422|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group11Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    923|    {
  131|    923|        Indexed<typename Descriptor::Target> pair;
  132|    923|        pair.index = numparser.ReadNum(buffer);
  133|    923|        Descriptor::ReadTarget(buffer, pair.value);
  134|    923|        return pair;
  135|    923|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group12Var1EEES0_tRKNS_9NumParserE:
  111|    473|{
  112|    473|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    473|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    473|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    287|{
  129|    287|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    287|    {
  131|    287|        Indexed<typename Descriptor::Target> pair;
  132|    287|        pair.index = numparser.ReadNum(buffer);
  133|    287|        Descriptor::ReadTarget(buffer, pair.value);
  134|    287|        return pair;
  135|    287|    };
  136|       |
  137|    287|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    287|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    287|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group12Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    923|    {
  131|    923|        Indexed<typename Descriptor::Target> pair;
  132|    923|        pair.index = numparser.ReadNum(buffer);
  133|    923|        Descriptor::ReadTarget(buffer, pair.value);
  134|    923|        return pair;
  135|    923|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group13Var1EEES0_tRKNS_9NumParserE:
  111|    541|{
  112|    541|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    541|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    541|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    535|{
  129|    535|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    535|    {
  131|    535|        Indexed<typename Descriptor::Target> pair;
  132|    535|        pair.index = numparser.ReadNum(buffer);
  133|    535|        Descriptor::ReadTarget(buffer, pair.value);
  134|    535|        return pair;
  135|    535|    };
  136|       |
  137|    535|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    535|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    535|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group13Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  6.33k|    {
  131|  6.33k|        Indexed<typename Descriptor::Target> pair;
  132|  6.33k|        pair.index = numparser.ReadNum(buffer);
  133|  6.33k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  6.33k|        return pair;
  135|  6.33k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group13Var2EEES0_tRKNS_9NumParserE:
  111|    303|{
  112|    303|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    303|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    303|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    247|{
  129|    247|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    247|    {
  131|    247|        Indexed<typename Descriptor::Target> pair;
  132|    247|        pair.index = numparser.ReadNum(buffer);
  133|    247|        Descriptor::ReadTarget(buffer, pair.value);
  134|    247|        return pair;
  135|    247|    };
  136|       |
  137|    247|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    247|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    247|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group13Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.11k|    {
  131|  1.11k|        Indexed<typename Descriptor::Target> pair;
  132|  1.11k|        pair.index = numparser.ReadNum(buffer);
  133|  1.11k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.11k|        return pair;
  135|  1.11k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var1EEES0_tRKNS_9NumParserE:
  111|    251|{
  112|    251|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    251|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    251|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    248|{
  129|    248|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    248|    {
  131|    248|        Indexed<typename Descriptor::Target> pair;
  132|    248|        pair.index = numparser.ReadNum(buffer);
  133|    248|        Descriptor::ReadTarget(buffer, pair.value);
  134|    248|        return pair;
  135|    248|    };
  136|       |
  137|    248|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    248|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    248|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    963|    {
  131|    963|        Indexed<typename Descriptor::Target> pair;
  132|    963|        pair.index = numparser.ReadNum(buffer);
  133|    963|        Descriptor::ReadTarget(buffer, pair.value);
  134|    963|        return pair;
  135|    963|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var2EEES0_tRKNS_9NumParserE:
  111|    289|{
  112|    289|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    289|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    289|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    279|{
  129|    279|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    279|    {
  131|    279|        Indexed<typename Descriptor::Target> pair;
  132|    279|        pair.index = numparser.ReadNum(buffer);
  133|    279|        Descriptor::ReadTarget(buffer, pair.value);
  134|    279|        return pair;
  135|    279|    };
  136|       |
  137|    279|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    279|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    279|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    964|    {
  131|    964|        Indexed<typename Descriptor::Target> pair;
  132|    964|        pair.index = numparser.ReadNum(buffer);
  133|    964|        Descriptor::ReadTarget(buffer, pair.value);
  134|    964|        return pair;
  135|    964|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var5EEES0_tRKNS_9NumParserE:
  111|    439|{
  112|    439|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    439|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    439|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    233|{
  129|    233|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    233|    {
  131|    233|        Indexed<typename Descriptor::Target> pair;
  132|    233|        pair.index = numparser.ReadNum(buffer);
  133|    233|        Descriptor::ReadTarget(buffer, pair.value);
  134|    233|        return pair;
  135|    233|    };
  136|       |
  137|    233|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    233|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    233|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    650|    {
  131|    650|        Indexed<typename Descriptor::Target> pair;
  132|    650|        pair.index = numparser.ReadNum(buffer);
  133|    650|        Descriptor::ReadTarget(buffer, pair.value);
  134|    650|        return pair;
  135|    650|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group22Var6EEES0_tRKNS_9NumParserE:
  111|    538|{
  112|    538|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    538|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    538|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    243|{
  129|    243|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    243|    {
  131|    243|        Indexed<typename Descriptor::Target> pair;
  132|    243|        pair.index = numparser.ReadNum(buffer);
  133|    243|        Descriptor::ReadTarget(buffer, pair.value);
  134|    243|        return pair;
  135|    243|    };
  136|       |
  137|    243|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    243|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    243|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group22Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    853|    {
  131|    853|        Indexed<typename Descriptor::Target> pair;
  132|    853|        pair.index = numparser.ReadNum(buffer);
  133|    853|        Descriptor::ReadTarget(buffer, pair.value);
  134|    853|        return pair;
  135|    853|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var1EEES0_tRKNS_9NumParserE:
  111|    444|{
  112|    444|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    444|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    444|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    240|{
  129|    240|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    240|    {
  131|    240|        Indexed<typename Descriptor::Target> pair;
  132|    240|        pair.index = numparser.ReadNum(buffer);
  133|    240|        Descriptor::ReadTarget(buffer, pair.value);
  134|    240|        return pair;
  135|    240|    };
  136|       |
  137|    240|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    240|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    240|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    958|    {
  131|    958|        Indexed<typename Descriptor::Target> pair;
  132|    958|        pair.index = numparser.ReadNum(buffer);
  133|    958|        Descriptor::ReadTarget(buffer, pair.value);
  134|    958|        return pair;
  135|    958|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var2EEES0_tRKNS_9NumParserE:
  111|    229|{
  112|    229|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    229|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    229|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    227|{
  129|    227|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    227|    {
  131|    227|        Indexed<typename Descriptor::Target> pair;
  132|    227|        pair.index = numparser.ReadNum(buffer);
  133|    227|        Descriptor::ReadTarget(buffer, pair.value);
  134|    227|        return pair;
  135|    227|    };
  136|       |
  137|    227|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    227|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    227|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.09k|    {
  131|  1.09k|        Indexed<typename Descriptor::Target> pair;
  132|  1.09k|        pair.index = numparser.ReadNum(buffer);
  133|  1.09k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.09k|        return pair;
  135|  1.09k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var5EEES0_tRKNS_9NumParserE:
  111|    292|{
  112|    292|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    292|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    292|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    258|{
  129|    258|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    258|    {
  131|    258|        Indexed<typename Descriptor::Target> pair;
  132|    258|        pair.index = numparser.ReadNum(buffer);
  133|    258|        Descriptor::ReadTarget(buffer, pair.value);
  134|    258|        return pair;
  135|    258|    };
  136|       |
  137|    258|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    258|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    258|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    748|    {
  131|    748|        Indexed<typename Descriptor::Target> pair;
  132|    748|        pair.index = numparser.ReadNum(buffer);
  133|    748|        Descriptor::ReadTarget(buffer, pair.value);
  134|    748|        return pair;
  135|    748|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group23Var6EEES0_tRKNS_9NumParserE:
  111|    384|{
  112|    384|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    384|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    384|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    233|{
  129|    233|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    233|    {
  131|    233|        Indexed<typename Descriptor::Target> pair;
  132|    233|        pair.index = numparser.ReadNum(buffer);
  133|    233|        Descriptor::ReadTarget(buffer, pair.value);
  134|    233|        return pair;
  135|    233|    };
  136|       |
  137|    233|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    233|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    233|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group23Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    800|    {
  131|    800|        Indexed<typename Descriptor::Target> pair;
  132|    800|        pair.index = numparser.ReadNum(buffer);
  133|    800|        Descriptor::ReadTarget(buffer, pair.value);
  134|    800|        return pair;
  135|    800|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var1EEES0_tRKNS_9NumParserE:
  111|    273|{
  112|    273|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    273|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    273|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    270|{
  129|    270|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    270|    {
  131|    270|        Indexed<typename Descriptor::Target> pair;
  132|    270|        pair.index = numparser.ReadNum(buffer);
  133|    270|        Descriptor::ReadTarget(buffer, pair.value);
  134|    270|        return pair;
  135|    270|    };
  136|       |
  137|    270|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    270|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    270|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    482|    {
  131|    482|        Indexed<typename Descriptor::Target> pair;
  132|    482|        pair.index = numparser.ReadNum(buffer);
  133|    482|        Descriptor::ReadTarget(buffer, pair.value);
  134|    482|        return pair;
  135|    482|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var2EEES0_tRKNS_9NumParserE:
  111|    217|{
  112|    217|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    217|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    217|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    216|{
  129|    216|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    216|    {
  131|    216|        Indexed<typename Descriptor::Target> pair;
  132|    216|        pair.index = numparser.ReadNum(buffer);
  133|    216|        Descriptor::ReadTarget(buffer, pair.value);
  134|    216|        return pair;
  135|    216|    };
  136|       |
  137|    216|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    216|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    216|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.02k|    {
  131|  1.02k|        Indexed<typename Descriptor::Target> pair;
  132|  1.02k|        pair.index = numparser.ReadNum(buffer);
  133|  1.02k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.02k|        return pair;
  135|  1.02k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var3EEES0_tRKNS_9NumParserE:
  111|    296|{
  112|    296|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    296|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    296|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    556|    {
  131|    556|        Indexed<typename Descriptor::Target> pair;
  132|    556|        pair.index = numparser.ReadNum(buffer);
  133|    556|        Descriptor::ReadTarget(buffer, pair.value);
  134|    556|        return pair;
  135|    556|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var4EEES0_tRKNS_9NumParserE:
  111|    403|{
  112|    403|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    403|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    403|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    225|{
  129|    225|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    225|    {
  131|    225|        Indexed<typename Descriptor::Target> pair;
  132|    225|        pair.index = numparser.ReadNum(buffer);
  133|    225|        Descriptor::ReadTarget(buffer, pair.value);
  134|    225|        return pair;
  135|    225|    };
  136|       |
  137|    225|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    225|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    225|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    689|    {
  131|    689|        Indexed<typename Descriptor::Target> pair;
  132|    689|        pair.index = numparser.ReadNum(buffer);
  133|    689|        Descriptor::ReadTarget(buffer, pair.value);
  134|    689|        return pair;
  135|    689|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var5EEES0_tRKNS_9NumParserE:
  111|    271|{
  112|    271|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    271|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    271|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    266|{
  129|    266|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    266|    {
  131|    266|        Indexed<typename Descriptor::Target> pair;
  132|    266|        pair.index = numparser.ReadNum(buffer);
  133|    266|        Descriptor::ReadTarget(buffer, pair.value);
  134|    266|        return pair;
  135|    266|    };
  136|       |
  137|    266|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    266|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    266|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    701|    {
  131|    701|        Indexed<typename Descriptor::Target> pair;
  132|    701|        pair.index = numparser.ReadNum(buffer);
  133|    701|        Descriptor::ReadTarget(buffer, pair.value);
  134|    701|        return pair;
  135|    701|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var6EEES0_tRKNS_9NumParserE:
  111|    583|{
  112|    583|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    583|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    583|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    288|{
  129|    288|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    288|    {
  131|    288|        Indexed<typename Descriptor::Target> pair;
  132|    288|        pair.index = numparser.ReadNum(buffer);
  133|    288|        Descriptor::ReadTarget(buffer, pair.value);
  134|    288|        return pair;
  135|    288|    };
  136|       |
  137|    288|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    288|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    288|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    836|    {
  131|    836|        Indexed<typename Descriptor::Target> pair;
  132|    836|        pair.index = numparser.ReadNum(buffer);
  133|    836|        Descriptor::ReadTarget(buffer, pair.value);
  134|    836|        return pair;
  135|    836|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var7EEES0_tRKNS_9NumParserE:
  111|    362|{
  112|    362|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    362|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    362|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    216|{
  129|    216|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    216|    {
  131|    216|        Indexed<typename Descriptor::Target> pair;
  132|    216|        pair.index = numparser.ReadNum(buffer);
  133|    216|        Descriptor::ReadTarget(buffer, pair.value);
  134|    216|        return pair;
  135|    216|    };
  136|       |
  137|    216|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    216|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    216|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    453|    {
  131|    453|        Indexed<typename Descriptor::Target> pair;
  132|    453|        pair.index = numparser.ReadNum(buffer);
  133|    453|        Descriptor::ReadTarget(buffer, pair.value);
  134|    453|        return pair;
  135|    453|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group32Var8EEES0_tRKNS_9NumParserE:
  111|    451|{
  112|    451|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    451|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    451|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    235|{
  129|    235|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    235|    {
  131|    235|        Indexed<typename Descriptor::Target> pair;
  132|    235|        pair.index = numparser.ReadNum(buffer);
  133|    235|        Descriptor::ReadTarget(buffer, pair.value);
  134|    235|        return pair;
  135|    235|    };
  136|       |
  137|    235|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    235|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    235|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group32Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    600|    {
  131|    600|        Indexed<typename Descriptor::Target> pair;
  132|    600|        pair.index = numparser.ReadNum(buffer);
  133|    600|        Descriptor::ReadTarget(buffer, pair.value);
  134|    600|        return pair;
  135|    600|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var1EEES0_tRKNS_9NumParserE:
  111|    344|{
  112|    344|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    344|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    344|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    323|{
  129|    323|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    323|    {
  131|    323|        Indexed<typename Descriptor::Target> pair;
  132|    323|        pair.index = numparser.ReadNum(buffer);
  133|    323|        Descriptor::ReadTarget(buffer, pair.value);
  134|    323|        return pair;
  135|    323|    };
  136|       |
  137|    323|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    323|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    323|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    736|    {
  131|    736|        Indexed<typename Descriptor::Target> pair;
  132|    736|        pair.index = numparser.ReadNum(buffer);
  133|    736|        Descriptor::ReadTarget(buffer, pair.value);
  134|    736|        return pair;
  135|    736|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var2EEES0_tRKNS_9NumParserE:
  111|    286|{
  112|    286|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    286|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    286|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    284|{
  129|    284|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    284|    {
  131|    284|        Indexed<typename Descriptor::Target> pair;
  132|    284|        pair.index = numparser.ReadNum(buffer);
  133|    284|        Descriptor::ReadTarget(buffer, pair.value);
  134|    284|        return pair;
  135|    284|    };
  136|       |
  137|    284|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    284|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    284|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.50k|    {
  131|  1.50k|        Indexed<typename Descriptor::Target> pair;
  132|  1.50k|        pair.index = numparser.ReadNum(buffer);
  133|  1.50k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.50k|        return pair;
  135|  1.50k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var3EEES0_tRKNS_9NumParserE:
  111|    328|{
  112|    328|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    328|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    328|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    326|{
  129|    326|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    326|    {
  131|    326|        Indexed<typename Descriptor::Target> pair;
  132|    326|        pair.index = numparser.ReadNum(buffer);
  133|    326|        Descriptor::ReadTarget(buffer, pair.value);
  134|    326|        return pair;
  135|    326|    };
  136|       |
  137|    326|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    326|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    326|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.05k|    {
  131|  1.05k|        Indexed<typename Descriptor::Target> pair;
  132|  1.05k|        pair.index = numparser.ReadNum(buffer);
  133|  1.05k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.05k|        return pair;
  135|  1.05k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group41Var4EEES0_tRKNS_9NumParserE:
  111|    642|{
  112|    642|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    642|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    642|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    391|{
  129|    391|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    391|    {
  131|    391|        Indexed<typename Descriptor::Target> pair;
  132|    391|        pair.index = numparser.ReadNum(buffer);
  133|    391|        Descriptor::ReadTarget(buffer, pair.value);
  134|    391|        return pair;
  135|    391|    };
  136|       |
  137|    391|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    391|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    391|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group41Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.07k|    {
  131|  1.07k|        Indexed<typename Descriptor::Target> pair;
  132|  1.07k|        pair.index = numparser.ReadNum(buffer);
  133|  1.07k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.07k|        return pair;
  135|  1.07k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var1EEES0_tRKNS_9NumParserE:
  111|    221|{
  112|    221|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    221|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    221|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    220|{
  129|    220|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    220|    {
  131|    220|        Indexed<typename Descriptor::Target> pair;
  132|    220|        pair.index = numparser.ReadNum(buffer);
  133|    220|        Descriptor::ReadTarget(buffer, pair.value);
  134|    220|        return pair;
  135|    220|    };
  136|       |
  137|    220|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    220|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    220|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    655|    {
  131|    655|        Indexed<typename Descriptor::Target> pair;
  132|    655|        pair.index = numparser.ReadNum(buffer);
  133|    655|        Descriptor::ReadTarget(buffer, pair.value);
  134|    655|        return pair;
  135|    655|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var2EEES0_tRKNS_9NumParserE:
  111|    467|{
  112|    467|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    467|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    467|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    257|{
  129|    257|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    257|    {
  131|    257|        Indexed<typename Descriptor::Target> pair;
  132|    257|        pair.index = numparser.ReadNum(buffer);
  133|    257|        Descriptor::ReadTarget(buffer, pair.value);
  134|    257|        return pair;
  135|    257|    };
  136|       |
  137|    257|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    257|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    257|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    732|    {
  131|    732|        Indexed<typename Descriptor::Target> pair;
  132|    732|        pair.index = numparser.ReadNum(buffer);
  133|    732|        Descriptor::ReadTarget(buffer, pair.value);
  134|    732|        return pair;
  135|    732|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var3EEES0_tRKNS_9NumParserE:
  111|    459|{
  112|    459|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    459|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    459|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    249|{
  129|    249|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    249|    {
  131|    249|        Indexed<typename Descriptor::Target> pair;
  132|    249|        pair.index = numparser.ReadNum(buffer);
  133|    249|        Descriptor::ReadTarget(buffer, pair.value);
  134|    249|        return pair;
  135|    249|    };
  136|       |
  137|    249|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    249|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    249|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.05k|    {
  131|  1.05k|        Indexed<typename Descriptor::Target> pair;
  132|  1.05k|        pair.index = numparser.ReadNum(buffer);
  133|  1.05k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.05k|        return pair;
  135|  1.05k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var4EEES0_tRKNS_9NumParserE:
  111|    342|{
  112|    342|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    342|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    342|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    239|{
  129|    239|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    239|    {
  131|    239|        Indexed<typename Descriptor::Target> pair;
  132|    239|        pair.index = numparser.ReadNum(buffer);
  133|    239|        Descriptor::ReadTarget(buffer, pair.value);
  134|    239|        return pair;
  135|    239|    };
  136|       |
  137|    239|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    239|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    239|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    789|    {
  131|    789|        Indexed<typename Descriptor::Target> pair;
  132|    789|        pair.index = numparser.ReadNum(buffer);
  133|    789|        Descriptor::ReadTarget(buffer, pair.value);
  134|    789|        return pair;
  135|    789|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var5EEES0_tRKNS_9NumParserE:
  111|    492|{
  112|    492|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    492|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    492|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    280|{
  129|    280|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    280|    {
  131|    280|        Indexed<typename Descriptor::Target> pair;
  132|    280|        pair.index = numparser.ReadNum(buffer);
  133|    280|        Descriptor::ReadTarget(buffer, pair.value);
  134|    280|        return pair;
  135|    280|    };
  136|       |
  137|    280|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    280|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    280|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.06k|    {
  131|  1.06k|        Indexed<typename Descriptor::Target> pair;
  132|  1.06k|        pair.index = numparser.ReadNum(buffer);
  133|  1.06k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.06k|        return pair;
  135|  1.06k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var6EEES0_tRKNS_9NumParserE:
  111|    472|{
  112|    472|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    472|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    472|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    255|{
  129|    255|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    255|    {
  131|    255|        Indexed<typename Descriptor::Target> pair;
  132|    255|        pair.index = numparser.ReadNum(buffer);
  133|    255|        Descriptor::ReadTarget(buffer, pair.value);
  134|    255|        return pair;
  135|    255|    };
  136|       |
  137|    255|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    255|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    255|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    886|    {
  131|    886|        Indexed<typename Descriptor::Target> pair;
  132|    886|        pair.index = numparser.ReadNum(buffer);
  133|    886|        Descriptor::ReadTarget(buffer, pair.value);
  134|    886|        return pair;
  135|    886|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var7EEES0_tRKNS_9NumParserE:
  111|    411|{
  112|    411|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    411|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    411|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    256|{
  129|    256|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    256|    {
  131|    256|        Indexed<typename Descriptor::Target> pair;
  132|    256|        pair.index = numparser.ReadNum(buffer);
  133|    256|        Descriptor::ReadTarget(buffer, pair.value);
  134|    256|        return pair;
  135|    256|    };
  136|       |
  137|    256|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    256|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    256|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    801|    {
  131|    801|        Indexed<typename Descriptor::Target> pair;
  132|    801|        pair.index = numparser.ReadNum(buffer);
  133|    801|        Descriptor::ReadTarget(buffer, pair.value);
  134|    801|        return pair;
  135|    801|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group42Var8EEES0_tRKNS_9NumParserE:
  111|    403|{
  112|    403|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    403|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    403|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    216|{
  129|    216|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    216|    {
  131|    216|        Indexed<typename Descriptor::Target> pair;
  132|    216|        pair.index = numparser.ReadNum(buffer);
  133|    216|        Descriptor::ReadTarget(buffer, pair.value);
  134|    216|        return pair;
  135|    216|    };
  136|       |
  137|    216|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    216|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    216|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group42Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    422|    {
  131|    422|        Indexed<typename Descriptor::Target> pair;
  132|    422|        pair.index = numparser.ReadNum(buffer);
  133|    422|        Descriptor::ReadTarget(buffer, pair.value);
  134|    422|        return pair;
  135|    422|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var1EEES0_tRKNS_9NumParserE:
  111|    410|{
  112|    410|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    410|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    410|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    369|{
  129|    369|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    369|    {
  131|    369|        Indexed<typename Descriptor::Target> pair;
  132|    369|        pair.index = numparser.ReadNum(buffer);
  133|    369|        Descriptor::ReadTarget(buffer, pair.value);
  134|    369|        return pair;
  135|    369|    };
  136|       |
  137|    369|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    369|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    369|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var1EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    988|    {
  131|    988|        Indexed<typename Descriptor::Target> pair;
  132|    988|        pair.index = numparser.ReadNum(buffer);
  133|    988|        Descriptor::ReadTarget(buffer, pair.value);
  134|    988|        return pair;
  135|    988|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var2EEES0_tRKNS_9NumParserE:
  111|    234|{
  112|    234|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    234|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    234|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    233|{
  129|    233|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    233|    {
  131|    233|        Indexed<typename Descriptor::Target> pair;
  132|    233|        pair.index = numparser.ReadNum(buffer);
  133|    233|        Descriptor::ReadTarget(buffer, pair.value);
  134|    233|        return pair;
  135|    233|    };
  136|       |
  137|    233|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    233|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    233|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var2EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    710|    {
  131|    710|        Indexed<typename Descriptor::Target> pair;
  132|    710|        pair.index = numparser.ReadNum(buffer);
  133|    710|        Descriptor::ReadTarget(buffer, pair.value);
  134|    710|        return pair;
  135|    710|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var3EEES0_tRKNS_9NumParserE:
  111|    288|{
  112|    288|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    288|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    288|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    280|{
  129|    280|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    280|    {
  131|    280|        Indexed<typename Descriptor::Target> pair;
  132|    280|        pair.index = numparser.ReadNum(buffer);
  133|    280|        Descriptor::ReadTarget(buffer, pair.value);
  134|    280|        return pair;
  135|    280|    };
  136|       |
  137|    280|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    280|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    280|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var3EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    755|    {
  131|    755|        Indexed<typename Descriptor::Target> pair;
  132|    755|        pair.index = numparser.ReadNum(buffer);
  133|    755|        Descriptor::ReadTarget(buffer, pair.value);
  134|    755|        return pair;
  135|    755|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var4EEES0_tRKNS_9NumParserE:
  111|    420|{
  112|    420|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    420|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    420|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    231|{
  129|    231|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    231|    {
  131|    231|        Indexed<typename Descriptor::Target> pair;
  132|    231|        pair.index = numparser.ReadNum(buffer);
  133|    231|        Descriptor::ReadTarget(buffer, pair.value);
  134|    231|        return pair;
  135|    231|    };
  136|       |
  137|    231|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    231|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    231|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    667|    {
  131|    667|        Indexed<typename Descriptor::Target> pair;
  132|    667|        pair.index = numparser.ReadNum(buffer);
  133|    667|        Descriptor::ReadTarget(buffer, pair.value);
  134|    667|        return pair;
  135|    667|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var5EEES0_tRKNS_9NumParserE:
  111|    497|{
  112|    497|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    497|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    497|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    281|{
  129|    281|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    281|    {
  131|    281|        Indexed<typename Descriptor::Target> pair;
  132|    281|        pair.index = numparser.ReadNum(buffer);
  133|    281|        Descriptor::ReadTarget(buffer, pair.value);
  134|    281|        return pair;
  135|    281|    };
  136|       |
  137|    281|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    281|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    281|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var5EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|  1.13k|    {
  131|  1.13k|        Indexed<typename Descriptor::Target> pair;
  132|  1.13k|        pair.index = numparser.ReadNum(buffer);
  133|  1.13k|        Descriptor::ReadTarget(buffer, pair.value);
  134|  1.13k|        return pair;
  135|  1.13k|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var6EEES0_tRKNS_9NumParserE:
  111|    406|{
  112|    406|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    406|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    406|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    219|{
  129|    219|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    219|    {
  131|    219|        Indexed<typename Descriptor::Target> pair;
  132|    219|        pair.index = numparser.ReadNum(buffer);
  133|    219|        Descriptor::ReadTarget(buffer, pair.value);
  134|    219|        return pair;
  135|    219|    };
  136|       |
  137|    219|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    219|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    219|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var6EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    888|    {
  131|    888|        Indexed<typename Descriptor::Target> pair;
  132|    888|        pair.index = numparser.ReadNum(buffer);
  133|    888|        Descriptor::ReadTarget(buffer, pair.value);
  134|    888|        return pair;
  135|    888|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var7EEES0_tRKNS_9NumParserE:
  111|    369|{
  112|    369|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    369|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    369|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    234|{
  129|    234|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    234|    {
  131|    234|        Indexed<typename Descriptor::Target> pair;
  132|    234|        pair.index = numparser.ReadNum(buffer);
  133|    234|        Descriptor::ReadTarget(buffer, pair.value);
  134|    234|        return pair;
  135|    234|    };
  136|       |
  137|    234|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    234|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    234|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var7EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    766|    {
  131|    766|        Indexed<typename Descriptor::Target> pair;
  132|    766|        pair.index = numparser.ReadNum(buffer);
  133|    766|        Descriptor::ReadTarget(buffer, pair.value);
  134|    766|        return pair;
  135|    766|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group43Var8EEES0_tRKNS_9NumParserE:
  111|    467|{
  112|    467|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    467|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    467|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    259|{
  129|    259|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    259|    {
  131|    259|        Indexed<typename Descriptor::Target> pair;
  132|    259|        pair.index = numparser.ReadNum(buffer);
  133|    259|        Descriptor::ReadTarget(buffer, pair.value);
  134|    259|        return pair;
  135|    259|    };
  136|       |
  137|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    259|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    259|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group43Var8EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    750|    {
  131|    750|        Indexed<typename Descriptor::Target> pair;
  132|    750|        pair.index = numparser.ReadNum(buffer);
  133|    750|        Descriptor::ReadTarget(buffer, pair.value);
  134|    750|        return pair;
  135|    750|    };
_ZN8opendnp316CountIndexParser4FromINS_11Group50Var4EEES0_tRKNS_9NumParserE:
  111|    567|{
  112|    567|    const size_t SIZE = static_cast<size_t>(count) * (Descriptor::Size() + numparser.NumBytes());
  113|    567|    return CountIndexParser(count, SIZE, numparser, &InvokeCountOf<Descriptor>);
  114|    567|}
_ZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  128|    256|{
  129|    256|    auto read = [&numparser](ser4cpp::rseq_t & buffer, uint32_t) -> Indexed<typename Descriptor::Target>
  130|    256|    {
  131|    256|        Indexed<typename Descriptor::Target> pair;
  132|    256|        pair.index = numparser.ReadNum(buffer);
  133|    256|        Descriptor::ReadTarget(buffer, pair.value);
  134|    256|        return pair;
  135|    256|    };
  136|       |
  137|    256|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, count, read);
  138|    256|    handler.OnHeader(PrefixHeader(record, count), collection);
  139|    256|}
_ZZN8opendnp316CountIndexParser13InvokeCountOfINS_11Group50Var4EEEvRKNS_12HeaderRecordEtRKNS_9NumParserERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  130|    810|    {
  131|    810|        Indexed<typename Descriptor::Target> pair;
  132|    810|        pair.index = numparser.ReadNum(buffer);
  133|    810|        Descriptor::ReadTarget(buffer, pair.value);
  134|    810|        return pair;
  135|    810|    };

_ZN8opendnp311CountParserC2EtmPFvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEE:
   30|  2.85k|    : count(count), required_size(required_size), handler(handler)
   31|  2.85k|{
   32|  2.85k|}
_ZNK8opendnp311CountParser7ProcessERKNS_12HeaderRecordERN7ser4cpp4RSeqImEEPNS_12IAPDUHandlerEPNS_6LoggerE:
   38|  2.85k|{
   39|  2.85k|    if (buffer.length() < required_size)
  ------------------
  |  Branch (39:9): [True: 1.14k, False: 1.70k]
  ------------------
   40|  1.14k|    {
   41|  1.14k|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified objects");
  ------------------
  |  |   48|  1.14k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 1.14k, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 1.14k]
  |  |  ------------------
  |  |   49|  1.14k|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   42|  1.14k|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
   43|  1.14k|    }
   44|       |
   45|  1.70k|    if (pHandler)
  ------------------
  |  Branch (45:9): [True: 1.70k, False: 0]
  ------------------
   46|  1.70k|    {
   47|  1.70k|        handler(record, count, buffer, *pHandler);
   48|  1.70k|    }
   49|  1.70k|    buffer.advance(required_size);
   50|  1.70k|    return ParseResult::OK;
   51|  2.85k|}
_ZN8opendnp311CountParser11ParseHeaderERN7ser4cpp4RSeqImEERKNS_9NumParserERKNS_14ParserSettingsERKNS_12HeaderRecordEPNS_6LoggerEPNS_12IAPDUHandlerE:
   59|  4.43k|{
   60|  4.43k|    uint16_t count;
   61|  4.43k|    auto result = numParser.ParseCount(buffer, count, pLogger);
   62|  4.43k|    if (result == ParseResult::OK)
  ------------------
  |  Branch (62:9): [True: 3.94k, False: 491]
  ------------------
   63|  3.94k|    {
   64|  3.94k|        FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u %s, %s [%u]", record.group, record.variation,
  ------------------
  |  |   62|  3.94k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 3.94k, False: 0]
  |  |  |  Branch (62:9): [True: 0, False: 3.94k]
  |  |  |  Branch (62:20): [True: 0, False: 3.94k]
  |  |  ------------------
  |  |   63|  3.94k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   65|  3.94k|                            GroupVariationSpec::to_human_string(record.enumeration),
   66|  3.94k|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), count);
   67|       |
   68|  3.94k|        if (settings.ExpectsContents())
  ------------------
  |  Branch (68:13): [True: 3.07k, False: 862]
  ------------------
   69|  3.07k|        {
   70|  3.07k|            return ParseCountOfObjects(buffer, record, count, pLogger, pHandler);
   71|  3.07k|        }
   72|       |
   73|    862|        if (pHandler)
  ------------------
  |  Branch (73:13): [True: 862, False: 0]
  ------------------
   74|    862|        {
   75|    862|            pHandler->OnHeader(CountHeader(record, count));
   76|    862|        }
   77|       |
   78|    862|        return ParseResult::OK;
   79|  3.94k|    }
   80|    491|    else
   81|    491|    {
   82|    491|        return result;
   83|    491|    }
   84|  4.43k|}
_ZN8opendnp311CountParser19ParseCountOfObjectsERN7ser4cpp4RSeqImEERKNS_12HeaderRecordEtPNS_6LoggerEPNS_12IAPDUHandlerE:
   88|  3.07k|{
   89|  3.07k|    switch (record.enumeration)
   90|  3.07k|    {
   91|    466|    case (GroupVariation::Group50Var1):
  ------------------
  |  Branch (91:5): [True: 466, False: 2.61k]
  ------------------
   92|    466|        return CountParser::From<Group50Var1>(count).Process(record, buffer, pHandler, pLogger);
   93|       |
   94|    419|    case (GroupVariation::Group50Var3):
  ------------------
  |  Branch (94:5): [True: 419, False: 2.66k]
  ------------------
   95|    419|        return CountParser::From<Group50Var3>(count).Process(record, buffer, pHandler, pLogger);
   96|       |
   97|    530|    case (GroupVariation::Group51Var1):
  ------------------
  |  Branch (97:5): [True: 530, False: 2.54k]
  ------------------
   98|    530|        return CountParser::From<Group51Var1>(count).Process(record, buffer, pHandler, pLogger);
   99|       |
  100|    612|    case (GroupVariation::Group51Var2):
  ------------------
  |  Branch (100:5): [True: 612, False: 2.46k]
  ------------------
  101|    612|        return CountParser::From<Group51Var2>(count).Process(record, buffer, pHandler, pLogger);
  102|       |
  103|    467|    case (GroupVariation::Group52Var1):
  ------------------
  |  Branch (103:5): [True: 467, False: 2.61k]
  ------------------
  104|    467|        return CountParser::From<Group52Var1>(count).Process(record, buffer, pHandler, pLogger);
  105|       |
  106|    357|    case (GroupVariation::Group52Var2):
  ------------------
  |  Branch (106:5): [True: 357, False: 2.72k]
  ------------------
  107|    357|        return CountParser::From<Group52Var2>(count).Process(record, buffer, pHandler, pLogger);
  108|       |
  109|    228|    default:
  ------------------
  |  Branch (109:5): [True: 228, False: 2.85k]
  ------------------
  110|    228|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unsupported qualifier/object - %s - %i / %i",
  ------------------
  |  |   62|    228|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 228, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 228]
  |  |  ------------------
  |  |   63|    228|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  111|    228|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), record.group,
  112|    228|                            record.variation);
  113|       |
  114|    228|        return ParseResult::INVALID_OBJECT_QUALIFIER;
  115|  3.07k|    }
  116|  3.07k|}

_ZN8opendnp311CountParser4FromINS_11Group50Var1EEES0_t:
   81|    466|{
   82|    466|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    466|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    466|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group50Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    258|{
   92|    258|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    258|        T value;
   94|    258|        T::Read(buffer, value);
   95|    258|        return value;
   96|    258|    };
   97|       |
   98|    258|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    258|    handler.OnHeader(CountHeader(record, count), collection);
  100|    258|}
_ZZN8opendnp311CountParser13InvokeCountOfINS_11Group50Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRS8_jE_clESD_j:
   92|    850|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    850|        T value;
   94|    850|        T::Read(buffer, value);
   95|    850|        return value;
   96|    850|    };
_ZN8opendnp311CountParser4FromINS_11Group50Var3EEES0_t:
   81|    419|{
   82|    419|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    419|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    419|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group50Var3EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    204|{
   92|    204|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    204|        T value;
   94|    204|        T::Read(buffer, value);
   95|    204|        return value;
   96|    204|    };
   97|       |
   98|    204|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    204|    handler.OnHeader(CountHeader(record, count), collection);
  100|    204|}
_ZN8opendnp311CountParser4FromINS_11Group51Var1EEES0_t:
   81|    530|{
   82|    530|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    530|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    530|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group51Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    297|{
   92|    297|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    297|        T value;
   94|    297|        T::Read(buffer, value);
   95|    297|        return value;
   96|    297|    };
   97|       |
   98|    297|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    297|    handler.OnHeader(CountHeader(record, count), collection);
  100|    297|}
_ZZN8opendnp311CountParser13InvokeCountOfINS_11Group51Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRS8_jE_clESD_j:
   92|    593|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    593|        T value;
   94|    593|        T::Read(buffer, value);
   95|    593|        return value;
   96|    593|    };
_ZN8opendnp311CountParser4FromINS_11Group51Var2EEES0_t:
   81|    612|{
   82|    612|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    612|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    612|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group51Var2EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    414|{
   92|    414|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    414|        T value;
   94|    414|        T::Read(buffer, value);
   95|    414|        return value;
   96|    414|    };
   97|       |
   98|    414|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    414|    handler.OnHeader(CountHeader(record, count), collection);
  100|    414|}
_ZZN8opendnp311CountParser13InvokeCountOfINS_11Group51Var2EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRS8_jE_clESD_j:
   92|  1.15k|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|  1.15k|        T value;
   94|  1.15k|        T::Read(buffer, value);
   95|  1.15k|        return value;
   96|  1.15k|    };
_ZN8opendnp311CountParser4FromINS_11Group52Var1EEES0_t:
   81|    467|{
   82|    467|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    467|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    467|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group52Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    259|{
   92|    259|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    259|        T value;
   94|    259|        T::Read(buffer, value);
   95|    259|        return value;
   96|    259|    };
   97|       |
   98|    259|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    259|    handler.OnHeader(CountHeader(record, count), collection);
  100|    259|}
_ZZN8opendnp311CountParser13InvokeCountOfINS_11Group52Var1EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRS8_jE_clESD_j:
   92|  2.84k|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|  2.84k|        T value;
   94|  2.84k|        T::Read(buffer, value);
   95|  2.84k|        return value;
   96|  2.84k|    };
_ZN8opendnp311CountParser4FromINS_11Group52Var2EEES0_t:
   81|    357|{
   82|    357|    const auto size = static_cast<size_t>(count) * Descriptor::Size();
   83|    357|    return CountParser(count, size, &InvokeCountOf<Descriptor>);
   84|    357|}
_ZN8opendnp311CountParser13InvokeCountOfINS_11Group52Var2EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
   91|    272|{
   92|    272|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|    272|        T value;
   94|    272|        T::Read(buffer, value);
   95|    272|        return value;
   96|    272|    };
   97|       |
   98|    272|    auto collection = CreateBufferedCollection<T>(buffer, count, read);
   99|    272|    handler.OnHeader(CountHeader(record, count), collection);
  100|    272|}
_ZZN8opendnp311CountParser13InvokeCountOfINS_11Group52Var2EEEvRKNS_12HeaderRecordEtRKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRS8_jE_clESD_j:
   92|  2.44k|    auto read = [](ser4cpp::rseq_t& buffer, uint32_t) -> T {
   93|  2.44k|        T value;
   94|  2.44k|        T::Read(buffer, value);
   95|  2.44k|        return value;
   96|  2.44k|    };

_ZN7ser4cpp11serializers8read_oneIN8opendnp37DNPTimeEEEbRNS_4RSeqImEERT_:
   39|  21.2k|    {
   40|  21.2k|        UInt48Type temp;
   41|  21.2k|        bool result = UInt48::read_from(input, temp);
   42|  21.2k|        out.value = temp.Get();
   43|  21.2k|        return result;
   44|  21.2k|    }

_ZN8opendnp312IAPDUHandlerC2Ev:
   25|  34.4k|IAPDUHandler::IAPDUHandler() : numTotalHeaders(0), numIgnoredHeaders(0) {}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_16AllObjectsHeaderE:
   40|  13.8k|{
   41|  13.8k|    Record(header, this->ProcessHeader(header));
   42|  13.8k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderE:
   45|    560|{
   46|    560|    Record(header, this->ProcessHeader(header));
   47|    560|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderE:
   50|    862|{
   51|    862|    Record(header, this->ProcessHeader(header));
   52|    862|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var1EEE:
   55|    258|{
   56|    258|    Record(header, this->ProcessHeader(header, values));
   57|    258|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var3EEE:
   60|    204|{
   61|    204|    Record(header, this->ProcessHeader(header, values));
   62|    204|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var1EEE:
   65|    297|{
   66|    297|    Record(header, this->ProcessHeader(header, values));
   67|    297|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var2EEE:
   70|    414|{
   71|    414|    Record(header, this->ProcessHeader(header, values));
   72|    414|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var1EEE:
   75|    259|{
   76|    259|    Record(header, this->ProcessHeader(header, values));
   77|    259|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var2EEE:
   80|    272|{
   81|    272|    Record(header, this->ProcessHeader(header, values));
   82|    272|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_8IINValueEEEEE:
   85|    324|{
   86|    324|    Record(header, this->ProcessHeader(header, values));
   87|    324|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
   90|    648|{
   91|    648|    Record(header, this->ProcessHeader(header, values));
   92|    648|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
   95|    891|{
   96|    891|    Record(header, this->ProcessHeader(header, values));
   97|    891|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  100|    556|{
  101|    556|    Record(header, this->ProcessHeader(header, values));
  102|    556|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  105|  1.29k|{
  106|  1.29k|    Record(header, this->ProcessHeader(header, values));
  107|  1.29k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  110|  1.73k|{
  111|  1.73k|    Record(header, this->ProcessHeader(header, values));
  112|  1.73k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  115|  1.71k|{
  116|  1.71k|    Record(header, this->ProcessHeader(header, values));
  117|  1.71k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  120|  1.25k|{
  121|  1.25k|    Record(header, this->ProcessHeader(header, values));
  122|  1.25k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  125|    480|{
  126|    480|    Record(header, this->ProcessHeader(header, values));
  127|    480|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  130|    283|{
  131|    283|    Record(header, this->ProcessHeader(header, values));
  132|    283|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
  137|    858|{
  138|    858|    Record(header, this->ProcessHeader(header, values));
  139|    858|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  142|    691|{
  143|    691|    Record(header, this->ProcessHeader(header, values));
  144|    691|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
  147|    718|{
  148|    718|    Record(header, this->ProcessHeader(header, values));
  149|    718|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  152|  1.00k|{
  153|  1.00k|    Record(header, this->ProcessHeader(header, values));
  154|  1.00k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  157|    958|{
  158|    958|    Record(header, this->ProcessHeader(header, values));
  159|    958|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  162|  1.97k|{
  163|  1.97k|    Record(header, this->ProcessHeader(header, values));
  164|  1.97k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  167|  1.97k|{
  168|  1.97k|    Record(header, this->ProcessHeader(header, values));
  169|  1.97k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  172|    540|{
  173|    540|    Record(header, this->ProcessHeader(header, values));
  174|    540|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  177|    256|{
  178|    256|    Record(header, this->ProcessHeader(header, values));
  179|    256|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryCommandEventEEEEE:
  182|    782|{
  183|    782|    Record(header, this->ProcessHeader(header, values));
  184|    782|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogCommandEventEEEEE:
  187|  2.10k|{
  188|  2.10k|    Record(header, this->ProcessHeader(header, values));
  189|  2.10k|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionItEE:
  192|    351|{
  193|    351|    Record(header, this->ProcessHeader(header, values));
  194|    351|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
  199|    287|{
  200|    287|    Record(header, this->ProcessHeader(header, values));
  201|    287|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEEE:
  204|    284|{
  205|    284|    Record(header, this->ProcessHeader(header, values));
  206|    284|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEEE:
  209|    323|{
  210|    323|    Record(header, this->ProcessHeader(header, values));
  211|    323|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEEE:
  214|    326|{
  215|    326|    Record(header, this->ProcessHeader(header, values));
  216|    326|}
_ZN8opendnp312IAPDUHandler8OnHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEEE:
  219|    391|{
  220|    391|    Record(header, this->ProcessHeader(header, values));
  221|    391|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var3EEE:
  246|    204|{
  247|    204|    return ProcessUnsupportedHeader();
  248|    204|}
_ZN8opendnp312IAPDUHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionItEE:
  393|    351|{
  394|    351|    return ProcessUnsupportedHeader();
  395|    351|}

_ZN8opendnp312IAPDUHandler6RecordERKNS_12HeaderRecordERKNS_8IINFieldE:
  172|  39.9k|    {
  173|  39.9k|        errors |= result;
  174|  39.9k|        ++numTotalHeaders;
  175|  39.9k|        this->OnHeaderResult(record, result);
  176|  39.9k|    }
_ZN8opendnp312IAPDUHandler24ProcessUnsupportedHeaderEv:
  179|    555|    {
  180|    555|        ++numIgnoredHeaders;
  181|    555|        return IINField(IINBit::FUNC_NOT_SUPPORTED);
  182|    555|    }

_ZN8opendnp39NumParserC2EPFtRN7ser4cpp4RSeqImEEEh:
   31|  42.6k|NumParser::NumParser(ReadFun pReadFun, uint8_t size) : pReadFun(pReadFun), size(size) {}
_ZNK8opendnp39NumParser8NumBytesEv:
   34|  19.6k|{
   35|  19.6k|    return size;
   36|  19.6k|}
_ZNK8opendnp39NumParser10ParseCountERN7ser4cpp4RSeqImEERtPNS_6LoggerE:
   39|  24.8k|{
   40|  24.8k|    if (this->Read(count, buffer))
  ------------------
  |  Branch (40:9): [True: 24.0k, False: 831]
  ------------------
   41|  24.0k|    {
   42|  24.0k|        if (count == 0)
  ------------------
  |  Branch (42:13): [True: 73, False: 23.9k]
  ------------------
   43|     73|        {
   44|     73|            SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "count of 0");
  ------------------
  |  |   48|     73|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 73, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 73]
  |  |  ------------------
  |  |   49|     73|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   45|     73|            return ParseResult::COUNT_OF_ZERO;
   46|     73|        }
   47|       |
   48|  23.9k|        return ParseResult::OK;
   49|  24.0k|    }
   50|    831|    else
   51|    831|    {
   52|    831|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for count");
  ------------------
  |  |   48|    831|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 831, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 831]
  |  |  ------------------
  |  |   49|    831|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   53|    831|        return ParseResult::NOT_ENOUGH_DATA_FOR_RANGE;
   54|    831|    }
   55|  24.8k|}
_ZNK8opendnp39NumParser10ParseRangeERN7ser4cpp4RSeqImEERNS_5RangeEPNS_6LoggerE:
   58|  17.8k|{
   59|  17.8k|    if (buffer.length() < (2 * static_cast<size_t>(size)))
  ------------------
  |  Branch (59:9): [True: 953, False: 16.8k]
  ------------------
   60|    953|    {
   61|    953|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for start / stop");
  ------------------
  |  |   48|    953|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 953, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 953]
  |  |  ------------------
  |  |   49|    953|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   62|    953|        return ParseResult::NOT_ENOUGH_DATA_FOR_RANGE;
   63|    953|    }
   64|       |
   65|  16.8k|    range.start = this->ReadNum(buffer);
   66|  16.8k|    range.stop = this->ReadNum(buffer);
   67|       |
   68|  16.8k|    if (range.IsValid())
  ------------------
  |  Branch (68:9): [True: 16.5k, False: 291]
  ------------------
   69|  16.5k|    {
   70|  16.5k|        return ParseResult::OK;
   71|  16.5k|    }
   72|       |
   73|    291|    FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "start (%u) > stop (%u)", range.start, range.stop);
  ------------------
  |  |   62|    291|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 291, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 291]
  |  |  ------------------
  |  |   63|    291|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   74|    291|    return ParseResult::BAD_START_STOP;
   75|  16.8k|}
_ZNK8opendnp39NumParser7ReadNumERN7ser4cpp4RSeqImEE:
   78|  84.1k|{
   79|  84.1k|    return pReadFun(buffer);
   80|  84.1k|}
_ZNK8opendnp39NumParser4ReadERtRN7ser4cpp4RSeqImEE:
   83|  24.8k|{
   84|  24.8k|    if (buffer.length() < size)
  ------------------
  |  Branch (84:9): [True: 831, False: 24.0k]
  ------------------
   85|    831|    {
   86|    831|        return false;
   87|    831|    }
   88|       |
   89|  24.0k|    num = pReadFun(buffer);
   90|  24.0k|    return true;
   91|  24.8k|}
_ZN8opendnp39NumParser11ReadOneByteERN7ser4cpp4RSeqImEE:
   94|   103k|{
   95|   103k|    uint8_t result = 0;
   96|   103k|    ser4cpp::UInt8::read_from(buffer, result);
   97|   103k|    return result;
   98|   103k|}
_ZN8opendnp39NumParser12ReadTwoBytesERN7ser4cpp4RSeqImEE:
  101|  4.60k|{
  102|  4.60k|    uint16_t result = 0;
  103|  4.60k|    ser4cpp::UInt16::read_from(buffer, result);
  104|  4.60k|    return result;
  105|  4.60k|}
_ZN8opendnp39NumParser7OneByteEv:
  108|  39.7k|{
  109|  39.7k|    return NumParser(&ReadOneByte, 1);
  110|  39.7k|}
_ZN8opendnp39NumParser7TwoByteEv:
  113|  2.96k|{
  114|  2.96k|    return NumParser(&ReadTwoBytes, 2);
  115|  2.96k|}

_ZN8opendnp312ObjectHeaderC2Ev:
   32|  63.0k|ObjectHeader::ObjectHeader() : group(0), variation(0), qualifier(0) {}
_ZN8opendnp318ObjectHeaderParser17ParseObjectHeaderERNS_12ObjectHeaderERN7ser4cpp4RSeqImEEPNS_6LoggerE:
   35|  63.0k|{
   36|  63.0k|    if (buffer.length() < 3)
  ------------------
  |  Branch (36:9): [True: 953, False: 62.1k]
  ------------------
   37|    953|    {
   38|    953|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for header");
  ------------------
  |  |   48|    953|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 953, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 953]
  |  |  ------------------
  |  |   49|    953|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   39|    953|        return ParseResult::NOT_ENOUGH_DATA_FOR_HEADER;
   40|    953|    }
   41|       |
   42|  62.1k|    ser4cpp::UInt8::read_from(buffer, header.group);
   43|  62.1k|    ser4cpp::UInt8::read_from(buffer, header.variation);
   44|  62.1k|    ser4cpp::UInt8::read_from(buffer, header.qualifier);
   45|  62.1k|    return ParseResult::OK;
   46|  63.0k|}

_ZN8opendnp314ParserSettings7DefaultENS_8LogLevelE:
   37|  33.3k|    {
   38|  33.3k|        return ParserSettings(true, logLevel);
   39|  33.3k|    }
_ZN8opendnp314ParserSettingsC2EbNS_8LogLevelE:
   58|  34.4k|        : expectContents(expectContents_), logLevel(logLevel_)
   59|  34.4k|    {
   60|  34.4k|    }
_ZN8opendnp314ParserSettings10NoContentsENS_8LogLevelE:
   32|  1.09k|    {
   33|  1.09k|        return ParserSettings(false, logLevel);
   34|  1.09k|    }
_ZNK8opendnp314ParserSettings15ExpectsContentsEv:
   47|  40.5k|    {
   48|  40.5k|        return expectContents;
   49|  40.5k|    }
_ZNK8opendnp314ParserSettings12LoggingLevelEv:
   52|  54.3k|    {
   53|  54.3k|        return logLevel;
   54|  54.3k|    }

_ZN8opendnp311RangeParserC2ERKNS_5RangeEmPFvRKNS_12HeaderRecordES3_RKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEE:
   37|  14.8k|    : range(range), requiredSize(requiredSize), handler(handler)
   38|  14.8k|{
   39|  14.8k|}
_ZN8opendnp311RangeParser11ParseHeaderERN7ser4cpp4RSeqImEERKNS_9NumParserERKNS_14ParserSettingsERKNS_12HeaderRecordEPNS_6LoggerEPNS_12IAPDUHandlerE:
   47|  17.8k|{
   48|  17.8k|    Range range;
   49|  17.8k|    auto res = numparser.ParseRange(buffer, range, pLogger);
   50|  17.8k|    if (res != ParseResult::OK)
  ------------------
  |  Branch (50:9): [True: 1.24k, False: 16.5k]
  ------------------
   51|  1.24k|    {
   52|  1.24k|        return res;
   53|  1.24k|    }
   54|       |
   55|  16.5k|    FORMAT_LOGGER_BLOCK(pLogger, settings.LoggingLevel(), "%03u,%03u %s, %s [%u, %u]", record.group, record.variation,
  ------------------
  |  |   62|  16.5k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 16.5k, False: 0]
  |  |  |  Branch (62:9): [True: 0, False: 16.5k]
  |  |  |  Branch (62:20): [True: 0, False: 16.5k]
  |  |  ------------------
  |  |   63|  16.5k|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
   56|  16.5k|                        GroupVariationSpec::to_human_string(record.enumeration),
   57|  16.5k|                        QualifierCodeSpec::to_human_string(record.GetQualifierCode()), range.start, range.stop);
   58|       |
   59|  16.5k|    if (settings.ExpectsContents())
  ------------------
  |  Branch (59:9): [True: 16.0k, False: 560]
  ------------------
   60|  16.0k|    {
   61|  16.0k|        return ParseRangeOfObjects(buffer, record, range, pLogger, pHandler);
   62|  16.0k|    }
   63|       |
   64|    560|    if (pHandler)
  ------------------
  |  Branch (64:9): [True: 560, False: 0]
  ------------------
   65|    560|    {
   66|    560|        pHandler->OnHeader(RangeHeader(record, range));
   67|    560|    }
   68|    560|    return ParseResult::OK;
   69|  16.5k|}
_ZNK8opendnp311RangeParser7ProcessERKNS_12HeaderRecordERN7ser4cpp4RSeqImEEPNS_12IAPDUHandlerEPNS_6LoggerE:
   75|  14.8k|{
   76|  14.8k|    if (buffer.length() < requiredSize)
  ------------------
  |  Branch (76:9): [True: 6.09k, False: 8.70k]
  ------------------
   77|  6.09k|    {
   78|  6.09k|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified objects");
  ------------------
  |  |   48|  6.09k|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 6.09k, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 6.09k]
  |  |  ------------------
  |  |   49|  6.09k|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
   79|  6.09k|        return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
   80|  6.09k|    }
   81|       |
   82|  8.70k|    if (pHandler)
  ------------------
  |  Branch (82:9): [True: 8.70k, False: 0]
  ------------------
   83|  8.70k|    {
   84|  8.70k|        handler(record, range, buffer, *pHandler);
   85|  8.70k|    }
   86|  8.70k|    buffer.advance(requiredSize);
   87|  8.70k|    return ParseResult::OK;
   88|  14.8k|}
_ZN8opendnp311RangeParser19ParseRangeOfObjectsERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerE:
   96|  16.0k|{
   97|  16.0k|    switch (record.enumeration)
   98|  16.0k|    {
   99|    665|    case (GroupVariation::Group1Var1):
  ------------------
  |  Branch (99:5): [True: 665, False: 15.3k]
  ------------------
  100|    665|        return RangeParser::FromBitfieldType<Binary>(range).Process(record, buffer, pHandler, pLogger);
  101|       |
  102|    483|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group1Var2);
  ------------------
  |  |   91|    483|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 483, False: 15.5k]
  |  |  ------------------
  |  |   92|    483|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  103|       |
  104|    840|    case (GroupVariation::Group3Var1):
  ------------------
  |  Branch (104:5): [True: 840, False: 15.1k]
  ------------------
  105|    840|        return RangeParser::FromDoubleBitfieldType<DoubleBitBinary>(range).Process(record, buffer, pHandler, pLogger);
  106|    527|    case (GroupVariation::Group10Var1):
  ------------------
  |  Branch (106:5): [True: 527, False: 15.5k]
  ------------------
  107|    527|        return RangeParser::FromBitfieldType<BinaryOutputStatus>(range).Process(record, buffer, pHandler, pLogger);
  108|       |
  109|    515|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group3Var2);
  ------------------
  |  |   91|    515|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 515, False: 15.5k]
  |  |  ------------------
  |  |   92|    515|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  110|    355|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group10Var2);
  ------------------
  |  |   91|    355|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 355, False: 15.6k]
  |  |  ------------------
  |  |   92|    355|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  111|       |
  112|    703|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var1);
  ------------------
  |  |   91|    703|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 703, False: 15.3k]
  |  |  ------------------
  |  |   92|    703|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  113|    466|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var2);
  ------------------
  |  |   91|    466|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 466, False: 15.5k]
  |  |  ------------------
  |  |   92|    466|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  114|    694|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var5);
  ------------------
  |  |   91|    694|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 694, False: 15.3k]
  |  |  ------------------
  |  |   92|    694|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  115|    476|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group20Var6);
  ------------------
  |  |   91|    476|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 476, False: 15.5k]
  |  |  ------------------
  |  |   92|    476|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  116|       |
  117|    495|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var1);
  ------------------
  |  |   91|    495|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 495, False: 15.5k]
  |  |  ------------------
  |  |   92|    495|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  118|    476|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var2);
  ------------------
  |  |   91|    476|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 476, False: 15.5k]
  |  |  ------------------
  |  |   92|    476|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  119|    490|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var5);
  ------------------
  |  |   91|    490|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 490, False: 15.5k]
  |  |  ------------------
  |  |   92|    490|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  120|    637|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var6);
  ------------------
  |  |   91|    637|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 637, False: 15.3k]
  |  |  ------------------
  |  |   92|    637|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  121|    658|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var9);
  ------------------
  |  |   91|    658|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 658, False: 15.3k]
  |  |  ------------------
  |  |   92|    658|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  122|    454|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group21Var10);
  ------------------
  |  |   91|    454|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 454, False: 15.5k]
  |  |  ------------------
  |  |   92|    454|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  123|       |
  124|    671|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var1);
  ------------------
  |  |   91|    671|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 671, False: 15.3k]
  |  |  ------------------
  |  |   92|    671|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  125|    346|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var2);
  ------------------
  |  |   91|    346|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 346, False: 15.6k]
  |  |  ------------------
  |  |   92|    346|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  126|    348|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var3);
  ------------------
  |  |   91|    348|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 348, False: 15.6k]
  |  |  ------------------
  |  |   92|    348|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  127|    482|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var4);
  ------------------
  |  |   91|    482|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 482, False: 15.5k]
  |  |  ------------------
  |  |   92|    482|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  128|    382|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var5);
  ------------------
  |  |   91|    382|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 382, False: 15.6k]
  |  |  ------------------
  |  |   92|    382|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  129|    472|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group30Var6);
  ------------------
  |  |   91|    472|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 472, False: 15.5k]
  |  |  ------------------
  |  |   92|    472|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  130|       |
  131|    460|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var1);
  ------------------
  |  |   91|    460|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 460, False: 15.5k]
  |  |  ------------------
  |  |   92|    460|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  132|    447|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var2);
  ------------------
  |  |   91|    447|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 447, False: 15.5k]
  |  |  ------------------
  |  |   92|    447|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  133|    718|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var3);
  ------------------
  |  |   91|    718|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 718, False: 15.3k]
  |  |  ------------------
  |  |   92|    718|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  134|    630|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group40Var4);
  ------------------
  |  |   91|    630|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 630, False: 15.3k]
  |  |  ------------------
  |  |   92|    630|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  135|       |
  136|    363|        MACRO_PARSE_OBJECTS_WITH_RANGE(Group50Var4);
  ------------------
  |  |   91|    363|    case (GroupVariation::descriptor):                                                                                 \
  |  |  ------------------
  |  |  |  Branch (91:5): [True: 363, False: 15.6k]
  |  |  ------------------
  |  |   92|    363|        return RangeParser::FromFixedSize<descriptor>(range).Process(record, buffer, pHandler, pLogger);
  ------------------
  137|       |
  138|    551|    case (GroupVariation::Group80Var1):
  ------------------
  |  Branch (138:5): [True: 551, False: 15.4k]
  ------------------
  139|    551|        return RangeParser::FromBitfieldType<IINValue>(range).Process(record, buffer, pHandler, pLogger);
  140|       |
  141|    882|    case (GroupVariation::Group110Var0):
  ------------------
  |  Branch (141:5): [True: 882, False: 15.1k]
  ------------------
  142|    882|        return ParseRangeOfOctetData(buffer, record, range, pLogger, pHandler);
  143|       |
  144|    341|    default:
  ------------------
  |  Branch (144:5): [True: 341, False: 15.6k]
  ------------------
  145|    341|        FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "Unsupported qualifier/object - %s - %i / %i",
  ------------------
  |  |   62|    341|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (62:9): [True: 341, False: 0]
  |  |  |  Branch (62:20): [True: 0, False: 341]
  |  |  ------------------
  |  |   63|    341|    {                                                                                                                  \
  |  |   64|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   65|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   66|      0|        pLogger->log(levels, LOCATION, message_buffer_some_name_no_conflict);                                          \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   67|      0|    }
  ------------------
  146|    341|                            QualifierCodeSpec::to_human_string(record.GetQualifierCode()), record.group,
  147|    341|                            record.variation);
  148|       |
  149|    341|        return ParseResult::INVALID_OBJECT_QUALIFIER;
  150|  16.0k|    }
  151|  16.0k|}
_ZN8opendnp311RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerE:
  155|    882|{
  156|    882|    if (record.variation > 0)
  ------------------
  |  Branch (156:9): [True: 688, False: 194]
  ------------------
  157|    688|    {
  158|    688|        const auto COUNT = range.Count();
  159|    688|        auto size = record.variation * COUNT;
  160|    688|        if (buffer.length() < size)
  ------------------
  |  Branch (160:13): [True: 208, False: 480]
  ------------------
  161|    208|        {
  162|    208|            SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for specified octet objects");
  ------------------
  |  |   48|    208|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 208, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 208]
  |  |  ------------------
  |  |   49|    208|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  163|    208|            return ParseResult::NOT_ENOUGH_DATA_FOR_OBJECTS;
  164|    208|        }
  165|       |
  166|    480|        if (pHandler)
  ------------------
  |  Branch (166:13): [True: 480, False: 0]
  ------------------
  167|    480|        {
  168|    480|            auto read = [range, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<OctetString> {
  169|    480|                const auto octetData = buffer.take(record.variation);
  170|    480|                OctetString octets(Buffer(octetData, octetData.length()));
  171|    480|                buffer.advance(record.variation);
  172|    480|                return WithIndex(octets, range.start + pos);
  173|    480|            };
  174|       |
  175|    480|            auto collection = CreateBufferedCollection<Indexed<OctetString>>(buffer, COUNT, read);
  176|       |
  177|    480|            pHandler->OnHeader(RangeHeader(record, range), collection);
  178|    480|        }
  179|       |
  180|    480|        buffer.advance(size);
  181|    480|        return ParseResult::OK;
  182|    688|    }
  183|    194|    else
  184|    194|    {
  185|    194|        SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Octet string variation 0 may only be used in requests");
  ------------------
  |  |   48|    194|    if (pLogger && pLogger->is_enabled(levels))                                                                        \
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 194, False: 0]
  |  |  |  Branch (48:20): [True: 0, False: 194]
  |  |  ------------------
  |  |   49|    194|    {                                                                                                                  \
  |  |   50|      0|        pLogger->log(levels, LOCATION, message);                                                                       \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   51|      0|    }
  ------------------
  186|    194|        return ParseResult::INVALID_OBJECT;
  187|    194|    }
  188|    882|}
RangeParser.cpp:_ZZN8opendnp311RangeParser21ParseRangeOfOctetDataERN7ser4cpp4RSeqImEERKNS_12HeaderRecordERKNS_5RangeEPNS_6LoggerEPNS_12IAPDUHandlerEENK3$_0clES4_j:
  168|  1.06k|            auto read = [range, record](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<OctetString> {
  169|  1.06k|                const auto octetData = buffer.take(record.variation);
  170|  1.06k|                OctetString octets(Buffer(octetData, octetData.length()));
  171|  1.06k|                buffer.advance(record.variation);
  172|  1.06k|                return WithIndex(octets, range.start + pos);
  173|  1.06k|            };

_ZN8opendnp311RangeParser16FromBitfieldTypeINS_6BinaryEEES0_RKNS_5RangeE:
  166|    665|{
  167|    665|    const auto SIZE = NumBytesInBits(range.Count());
  168|    665|    return RangeParser(range, SIZE, &InvokeRangeBitfieldType<Type>);
  169|    665|}
_ZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_6BinaryEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  176|    372|{
  177|    372|    const auto COUNT = range.Count();
  178|       |
  179|    372|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|    372|        Type value(GetBit(buffer, pos));
  181|    372|        return WithIndex(value, range.start + pos);
  182|    372|    };
  183|       |
  184|    372|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  185|       |
  186|    372|    handler.OnHeader(RangeHeader(record, range), collection);
  187|    372|}
_ZZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_6BinaryEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  179|  33.0k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|  33.0k|        Type value(GetBit(buffer, pos));
  181|  33.0k|        return WithIndex(value, range.start + pos);
  182|  33.0k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_10Group1Var2EEES0_RKNS_5RangeE:
  116|    483|{
  117|    483|    const auto size = range.Count() * Descriptor::Size();
  118|    483|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    483|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    276|{
  133|    276|    const auto COUNT = range.Count();
  134|       |
  135|    276|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    276|        typename Descriptor::Target target;
  137|    276|        Descriptor::ReadTarget(buffer, target);
  138|    276|        return WithIndex(target, range.start + pos);
  139|    276|    };
  140|       |
  141|    276|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    276|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    276|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_10Group1Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  3.22k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  3.22k|        typename Descriptor::Target target;
  137|  3.22k|        Descriptor::ReadTarget(buffer, target);
  138|  3.22k|        return WithIndex(target, range.start + pos);
  139|  3.22k|    };
_ZN8opendnp311RangeParser22FromDoubleBitfieldTypeINS_15DoubleBitBinaryEEES0_RKNS_5RangeE:
  190|    840|{
  191|    840|    const auto size = NumBytesInDoubleBits(range.Count());
  192|    840|    return RangeParser(range, size, &InvokeRangeDoubleBitfieldType<Type>);
  193|    840|}
_ZN8opendnp311RangeParser29InvokeRangeDoubleBitfieldTypeINS_15DoubleBitBinaryEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  200|    597|{
  201|    597|    const auto COUNT = range.Count();
  202|       |
  203|    597|    auto read = [range](ser4cpp::rseq_t& buffer, size_t pos) -> Indexed<Type> {
  204|    597|        Type value(GetDoubleBit(buffer, pos));
  205|    597|        return WithIndex(value, static_cast<uint16_t>(range.start + pos));
  206|    597|    };
  207|       |
  208|    597|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  209|       |
  210|    597|    handler.OnHeader(RangeHeader(record, range), collection);
  211|    597|}
_ZZN8opendnp311RangeParser29InvokeRangeDoubleBitfieldTypeINS_15DoubleBitBinaryEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_mE_clESG_m:
  203|  9.99k|    auto read = [range](ser4cpp::rseq_t& buffer, size_t pos) -> Indexed<Type> {
  204|  9.99k|        Type value(GetDoubleBit(buffer, pos));
  205|  9.99k|        return WithIndex(value, static_cast<uint16_t>(range.start + pos));
  206|  9.99k|    };
_ZN8opendnp311RangeParser16FromBitfieldTypeINS_18BinaryOutputStatusEEES0_RKNS_5RangeE:
  166|    527|{
  167|    527|    const auto SIZE = NumBytesInBits(range.Count());
  168|    527|    return RangeParser(range, SIZE, &InvokeRangeBitfieldType<Type>);
  169|    527|}
_ZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_18BinaryOutputStatusEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  176|    303|{
  177|    303|    const auto COUNT = range.Count();
  178|       |
  179|    303|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|    303|        Type value(GetBit(buffer, pos));
  181|    303|        return WithIndex(value, range.start + pos);
  182|    303|    };
  183|       |
  184|    303|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  185|       |
  186|    303|    handler.OnHeader(RangeHeader(record, range), collection);
  187|    303|}
_ZZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_18BinaryOutputStatusEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  179|  29.2k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|  29.2k|        Type value(GetBit(buffer, pos));
  181|  29.2k|        return WithIndex(value, range.start + pos);
  182|  29.2k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_10Group3Var2EEES0_RKNS_5RangeE:
  116|    515|{
  117|    515|    const auto size = range.Count() * Descriptor::Size();
  118|    515|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    515|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    294|{
  133|    294|    const auto COUNT = range.Count();
  134|       |
  135|    294|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    294|        typename Descriptor::Target target;
  137|    294|        Descriptor::ReadTarget(buffer, target);
  138|    294|        return WithIndex(target, range.start + pos);
  139|    294|    };
  140|       |
  141|    294|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    294|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    294|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_10Group3Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.84k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.84k|        typename Descriptor::Target target;
  137|  1.84k|        Descriptor::ReadTarget(buffer, target);
  138|  1.84k|        return WithIndex(target, range.start + pos);
  139|  1.84k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group10Var2EEES0_RKNS_5RangeE:
  116|    355|{
  117|    355|    const auto size = range.Count() * Descriptor::Size();
  118|    355|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    355|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    253|{
  133|    253|    const auto COUNT = range.Count();
  134|       |
  135|    253|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    253|        typename Descriptor::Target target;
  137|    253|        Descriptor::ReadTarget(buffer, target);
  138|    253|        return WithIndex(target, range.start + pos);
  139|    253|    };
  140|       |
  141|    253|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    253|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    253|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group10Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.36k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.36k|        typename Descriptor::Target target;
  137|  1.36k|        Descriptor::ReadTarget(buffer, target);
  138|  1.36k|        return WithIndex(target, range.start + pos);
  139|  1.36k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var1EEES0_RKNS_5RangeE:
  116|    703|{
  117|    703|    const auto size = range.Count() * Descriptor::Size();
  118|    703|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    703|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    374|{
  133|    374|    const auto COUNT = range.Count();
  134|       |
  135|    374|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    374|        typename Descriptor::Target target;
  137|    374|        Descriptor::ReadTarget(buffer, target);
  138|    374|        return WithIndex(target, range.start + pos);
  139|    374|    };
  140|       |
  141|    374|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    374|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    374|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.37k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.37k|        typename Descriptor::Target target;
  137|  1.37k|        Descriptor::ReadTarget(buffer, target);
  138|  1.37k|        return WithIndex(target, range.start + pos);
  139|  1.37k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var2EEES0_RKNS_5RangeE:
  116|    466|{
  117|    466|    const auto size = range.Count() * Descriptor::Size();
  118|    466|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    466|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    245|{
  133|    245|    const auto COUNT = range.Count();
  134|       |
  135|    245|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    245|        typename Descriptor::Target target;
  137|    245|        Descriptor::ReadTarget(buffer, target);
  138|    245|        return WithIndex(target, range.start + pos);
  139|    245|    };
  140|       |
  141|    245|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    245|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    245|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.03k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.03k|        typename Descriptor::Target target;
  137|  1.03k|        Descriptor::ReadTarget(buffer, target);
  138|  1.03k|        return WithIndex(target, range.start + pos);
  139|  1.03k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var5EEES0_RKNS_5RangeE:
  116|    694|{
  117|    694|    const auto size = range.Count() * Descriptor::Size();
  118|    694|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    694|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    426|{
  133|    426|    const auto COUNT = range.Count();
  134|       |
  135|    426|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    426|        typename Descriptor::Target target;
  137|    426|        Descriptor::ReadTarget(buffer, target);
  138|    426|        return WithIndex(target, range.start + pos);
  139|    426|    };
  140|       |
  141|    426|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    426|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    426|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.15k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.15k|        typename Descriptor::Target target;
  137|  1.15k|        Descriptor::ReadTarget(buffer, target);
  138|  1.15k|        return WithIndex(target, range.start + pos);
  139|  1.15k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group20Var6EEES0_RKNS_5RangeE:
  116|    476|{
  117|    476|    const auto size = range.Count() * Descriptor::Size();
  118|    476|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    476|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    249|{
  133|    249|    const auto COUNT = range.Count();
  134|       |
  135|    249|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    249|        typename Descriptor::Target target;
  137|    249|        Descriptor::ReadTarget(buffer, target);
  138|    249|        return WithIndex(target, range.start + pos);
  139|    249|    };
  140|       |
  141|    249|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    249|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    249|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group20Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.01k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.01k|        typename Descriptor::Target target;
  137|  1.01k|        Descriptor::ReadTarget(buffer, target);
  138|  1.01k|        return WithIndex(target, range.start + pos);
  139|  1.01k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var1EEES0_RKNS_5RangeE:
  116|    495|{
  117|    495|    const auto size = range.Count() * Descriptor::Size();
  118|    495|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    495|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    263|{
  133|    263|    const auto COUNT = range.Count();
  134|       |
  135|    263|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    263|        typename Descriptor::Target target;
  137|    263|        Descriptor::ReadTarget(buffer, target);
  138|    263|        return WithIndex(target, range.start + pos);
  139|    263|    };
  140|       |
  141|    263|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    263|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    263|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.70k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.70k|        typename Descriptor::Target target;
  137|  1.70k|        Descriptor::ReadTarget(buffer, target);
  138|  1.70k|        return WithIndex(target, range.start + pos);
  139|  1.70k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var2EEES0_RKNS_5RangeE:
  116|    476|{
  117|    476|    const auto size = range.Count() * Descriptor::Size();
  118|    476|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    476|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    252|{
  133|    252|    const auto COUNT = range.Count();
  134|       |
  135|    252|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    252|        typename Descriptor::Target target;
  137|    252|        Descriptor::ReadTarget(buffer, target);
  138|    252|        return WithIndex(target, range.start + pos);
  139|    252|    };
  140|       |
  141|    252|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    252|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    252|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|    965|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    965|        typename Descriptor::Target target;
  137|    965|        Descriptor::ReadTarget(buffer, target);
  138|    965|        return WithIndex(target, range.start + pos);
  139|    965|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var5EEES0_RKNS_5RangeE:
  116|    490|{
  117|    490|    const auto size = range.Count() * Descriptor::Size();
  118|    490|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    490|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    259|{
  133|    259|    const auto COUNT = range.Count();
  134|       |
  135|    259|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    259|        typename Descriptor::Target target;
  137|    259|        Descriptor::ReadTarget(buffer, target);
  138|    259|        return WithIndex(target, range.start + pos);
  139|    259|    };
  140|       |
  141|    259|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    259|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    259|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|    734|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    734|        typename Descriptor::Target target;
  137|    734|        Descriptor::ReadTarget(buffer, target);
  138|    734|        return WithIndex(target, range.start + pos);
  139|    734|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var6EEES0_RKNS_5RangeE:
  116|    637|{
  117|    637|    const auto size = range.Count() * Descriptor::Size();
  118|    637|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    637|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    343|{
  133|    343|    const auto COUNT = range.Count();
  134|       |
  135|    343|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    343|        typename Descriptor::Target target;
  137|    343|        Descriptor::ReadTarget(buffer, target);
  138|    343|        return WithIndex(target, range.start + pos);
  139|    343|    };
  140|       |
  141|    343|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    343|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    343|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.16k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.16k|        typename Descriptor::Target target;
  137|  1.16k|        Descriptor::ReadTarget(buffer, target);
  138|  1.16k|        return WithIndex(target, range.start + pos);
  139|  1.16k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group21Var9EEES0_RKNS_5RangeE:
  116|    658|{
  117|    658|    const auto size = range.Count() * Descriptor::Size();
  118|    658|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    658|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    387|{
  133|    387|    const auto COUNT = range.Count();
  134|       |
  135|    387|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    387|        typename Descriptor::Target target;
  137|    387|        Descriptor::ReadTarget(buffer, target);
  138|    387|        return WithIndex(target, range.start + pos);
  139|    387|    };
  140|       |
  141|    387|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    387|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    387|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group21Var9EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.24k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.24k|        typename Descriptor::Target target;
  137|  1.24k|        Descriptor::ReadTarget(buffer, target);
  138|  1.24k|        return WithIndex(target, range.start + pos);
  139|  1.24k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_12Group21Var10EEES0_RKNS_5RangeE:
  116|    454|{
  117|    454|    const auto size = range.Count() * Descriptor::Size();
  118|    454|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    454|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    234|{
  133|    234|    const auto COUNT = range.Count();
  134|       |
  135|    234|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    234|        typename Descriptor::Target target;
  137|    234|        Descriptor::ReadTarget(buffer, target);
  138|    234|        return WithIndex(target, range.start + pos);
  139|    234|    };
  140|       |
  141|    234|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    234|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    234|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_12Group21Var10EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.02k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.02k|        typename Descriptor::Target target;
  137|  1.02k|        Descriptor::ReadTarget(buffer, target);
  138|  1.02k|        return WithIndex(target, range.start + pos);
  139|  1.02k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var1EEES0_RKNS_5RangeE:
  116|    671|{
  117|    671|    const auto size = range.Count() * Descriptor::Size();
  118|    671|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    671|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    405|{
  133|    405|    const auto COUNT = range.Count();
  134|       |
  135|    405|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    405|        typename Descriptor::Target target;
  137|    405|        Descriptor::ReadTarget(buffer, target);
  138|    405|        return WithIndex(target, range.start + pos);
  139|    405|    };
  140|       |
  141|    405|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    405|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    405|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.26k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.26k|        typename Descriptor::Target target;
  137|  1.26k|        Descriptor::ReadTarget(buffer, target);
  138|  1.26k|        return WithIndex(target, range.start + pos);
  139|  1.26k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var2EEES0_RKNS_5RangeE:
  116|    346|{
  117|    346|    const auto size = range.Count() * Descriptor::Size();
  118|    346|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    346|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    246|{
  133|    246|    const auto COUNT = range.Count();
  134|       |
  135|    246|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    246|        typename Descriptor::Target target;
  137|    246|        Descriptor::ReadTarget(buffer, target);
  138|    246|        return WithIndex(target, range.start + pos);
  139|    246|    };
  140|       |
  141|    246|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    246|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    246|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.84k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.84k|        typename Descriptor::Target target;
  137|  1.84k|        Descriptor::ReadTarget(buffer, target);
  138|  1.84k|        return WithIndex(target, range.start + pos);
  139|  1.84k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var3EEES0_RKNS_5RangeE:
  116|    348|{
  117|    348|    const auto size = range.Count() * Descriptor::Size();
  118|    348|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    348|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    239|{
  133|    239|    const auto COUNT = range.Count();
  134|       |
  135|    239|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    239|        typename Descriptor::Target target;
  137|    239|        Descriptor::ReadTarget(buffer, target);
  138|    239|        return WithIndex(target, range.start + pos);
  139|    239|    };
  140|       |
  141|    239|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    239|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    239|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|    764|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    764|        typename Descriptor::Target target;
  137|    764|        Descriptor::ReadTarget(buffer, target);
  138|    764|        return WithIndex(target, range.start + pos);
  139|    764|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var4EEES0_RKNS_5RangeE:
  116|    482|{
  117|    482|    const auto size = range.Count() * Descriptor::Size();
  118|    482|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    482|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    265|{
  133|    265|    const auto COUNT = range.Count();
  134|       |
  135|    265|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    265|        typename Descriptor::Target target;
  137|    265|        Descriptor::ReadTarget(buffer, target);
  138|    265|        return WithIndex(target, range.start + pos);
  139|    265|    };
  140|       |
  141|    265|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    265|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    265|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|    936|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    936|        typename Descriptor::Target target;
  137|    936|        Descriptor::ReadTarget(buffer, target);
  138|    936|        return WithIndex(target, range.start + pos);
  139|    936|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var5EEES0_RKNS_5RangeE:
  116|    382|{
  117|    382|    const auto size = range.Count() * Descriptor::Size();
  118|    382|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    382|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    286|{
  133|    286|    const auto COUNT = range.Count();
  134|       |
  135|    286|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    286|        typename Descriptor::Target target;
  137|    286|        Descriptor::ReadTarget(buffer, target);
  138|    286|        return WithIndex(target, range.start + pos);
  139|    286|    };
  140|       |
  141|    286|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    286|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    286|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var5EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.73k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.73k|        typename Descriptor::Target target;
  137|  1.73k|        Descriptor::ReadTarget(buffer, target);
  138|  1.73k|        return WithIndex(target, range.start + pos);
  139|  1.73k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group30Var6EEES0_RKNS_5RangeE:
  116|    472|{
  117|    472|    const auto size = range.Count() * Descriptor::Size();
  118|    472|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    472|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    273|{
  133|    273|    const auto COUNT = range.Count();
  134|       |
  135|    273|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    273|        typename Descriptor::Target target;
  137|    273|        Descriptor::ReadTarget(buffer, target);
  138|    273|        return WithIndex(target, range.start + pos);
  139|    273|    };
  140|       |
  141|    273|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    273|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    273|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group30Var6EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|    834|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    834|        typename Descriptor::Target target;
  137|    834|        Descriptor::ReadTarget(buffer, target);
  138|    834|        return WithIndex(target, range.start + pos);
  139|    834|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var1EEES0_RKNS_5RangeE:
  116|    460|{
  117|    460|    const auto size = range.Count() * Descriptor::Size();
  118|    460|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    460|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    245|{
  133|    245|    const auto COUNT = range.Count();
  134|       |
  135|    245|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    245|        typename Descriptor::Target target;
  137|    245|        Descriptor::ReadTarget(buffer, target);
  138|    245|        return WithIndex(target, range.start + pos);
  139|    245|    };
  140|       |
  141|    245|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    245|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    245|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var1EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.32k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.32k|        typename Descriptor::Target target;
  137|  1.32k|        Descriptor::ReadTarget(buffer, target);
  138|  1.32k|        return WithIndex(target, range.start + pos);
  139|  1.32k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var2EEES0_RKNS_5RangeE:
  116|    447|{
  117|    447|    const auto size = range.Count() * Descriptor::Size();
  118|    447|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    447|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    226|{
  133|    226|    const auto COUNT = range.Count();
  134|       |
  135|    226|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    226|        typename Descriptor::Target target;
  137|    226|        Descriptor::ReadTarget(buffer, target);
  138|    226|        return WithIndex(target, range.start + pos);
  139|    226|    };
  140|       |
  141|    226|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    226|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    226|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var2EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.00k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.00k|        typename Descriptor::Target target;
  137|  1.00k|        Descriptor::ReadTarget(buffer, target);
  138|  1.00k|        return WithIndex(target, range.start + pos);
  139|  1.00k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var3EEES0_RKNS_5RangeE:
  116|    718|{
  117|    718|    const auto size = range.Count() * Descriptor::Size();
  118|    718|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    718|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    459|{
  133|    459|    const auto COUNT = range.Count();
  134|       |
  135|    459|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    459|        typename Descriptor::Target target;
  137|    459|        Descriptor::ReadTarget(buffer, target);
  138|    459|        return WithIndex(target, range.start + pos);
  139|    459|    };
  140|       |
  141|    459|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    459|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    459|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var3EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  2.67k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  2.67k|        typename Descriptor::Target target;
  137|  2.67k|        Descriptor::ReadTarget(buffer, target);
  138|  2.67k|        return WithIndex(target, range.start + pos);
  139|  2.67k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group40Var4EEES0_RKNS_5RangeE:
  116|    630|{
  117|    630|    const auto size = range.Count() * Descriptor::Size();
  118|    630|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    630|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    329|{
  133|    329|    const auto COUNT = range.Count();
  134|       |
  135|    329|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    329|        typename Descriptor::Target target;
  137|    329|        Descriptor::ReadTarget(buffer, target);
  138|    329|        return WithIndex(target, range.start + pos);
  139|    329|    };
  140|       |
  141|    329|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    329|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    329|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group40Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|  1.76k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|  1.76k|        typename Descriptor::Target target;
  137|  1.76k|        Descriptor::ReadTarget(buffer, target);
  138|  1.76k|        return WithIndex(target, range.start + pos);
  139|  1.76k|    };
_ZN8opendnp311RangeParser13FromFixedSizeINS_11Group50Var4EEES0_RKNS_5RangeE:
  116|    363|{
  117|    363|    const auto size = range.Count() * Descriptor::Size();
  118|    363|    return RangeParser(range, size, &InvokeRangeOf<Descriptor>);
  119|    363|}
_ZN8opendnp311RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  132|    283|{
  133|    283|    const auto COUNT = range.Count();
  134|       |
  135|    283|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    283|        typename Descriptor::Target target;
  137|    283|        Descriptor::ReadTarget(buffer, target);
  138|    283|        return WithIndex(target, range.start + pos);
  139|    283|    };
  140|       |
  141|    283|    auto collection = CreateBufferedCollection<Indexed<typename Descriptor::Target>>(buffer, COUNT, read);
  142|       |
  143|    283|    handler.OnHeader(RangeHeader(record, range), collection);
  144|    283|}
_ZZN8opendnp311RangeParser13InvokeRangeOfINS_11Group50Var4EEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  135|    916|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) {
  136|    916|        typename Descriptor::Target target;
  137|    916|        Descriptor::ReadTarget(buffer, target);
  138|    916|        return WithIndex(target, range.start + pos);
  139|    916|    };
_ZN8opendnp311RangeParser16FromBitfieldTypeINS_8IINValueEEES0_RKNS_5RangeE:
  166|    551|{
  167|    551|    const auto SIZE = NumBytesInBits(range.Count());
  168|    551|    return RangeParser(range, SIZE, &InvokeRangeBitfieldType<Type>);
  169|    551|}
_ZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_8IINValueEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerE:
  176|    324|{
  177|    324|    const auto COUNT = range.Count();
  178|       |
  179|    324|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|    324|        Type value(GetBit(buffer, pos));
  181|    324|        return WithIndex(value, range.start + pos);
  182|    324|    };
  183|       |
  184|    324|    auto collection = CreateBufferedCollection<Indexed<Type>>(buffer, COUNT, read);
  185|       |
  186|    324|    handler.OnHeader(RangeHeader(record, range), collection);
  187|    324|}
_ZZN8opendnp311RangeParser23InvokeRangeBitfieldTypeINS_8IINValueEEEvRKNS_12HeaderRecordERKNS_5RangeERKN7ser4cpp4RSeqImEERNS_12IAPDUHandlerEENKUlRSB_jE_clESG_j:
  179|  33.7k|    auto read = [range](ser4cpp::rseq_t& buffer, uint32_t pos) -> Indexed<Type> {
  180|  33.7k|        Type value(GetBit(buffer, pos));
  181|  33.7k|        return WithIndex(value, range.start + pos);
  182|  33.7k|    };

_ZN8opendnp37DecoderC2ERNS_17IDecoderCallbacksERKNS_6LoggerE:
   27|  6.68k|Decoder::Decoder(IDecoderCallbacks& callbacks, const Logger& logger) : impl(new DecoderImpl(callbacks, logger)) {}
_ZN8opendnp37Decoder10DecodeLPDUERKNS_6BufferE:
   30|  6.68k|{
   31|  6.68k|    ser4cpp::rseq_t rseqData(data.data, data.length);
   32|  6.68k|    impl->DecodeLPDU(rseqData);
   33|  6.68k|}
_ZN8opendnp37DecoderD2Ev:
   48|  6.68k|{
   49|  6.68k|    delete impl;
   50|  6.68k|}

_ZN8opendnp311DecoderImplC2ERNS_17IDecoderCallbacksERKNS_6LoggerE:
   34|  6.68k|    : callbacks(&callbacks), logger(logger), link(logger), transportRx(logger, 2048)
   35|  6.68k|{
   36|  6.68k|}
_ZN8opendnp311DecoderImpl10DecodeLPDUERKN7ser4cpp4RSeqImEE:
   39|  6.68k|{
   40|  6.68k|    Indent i(*callbacks);
   41|       |
   42|  6.68k|    ser4cpp::rseq_t remaining(data);
   43|       |
   44|  17.8k|    while (remaining.is_not_empty())
  ------------------
  |  Branch (44:12): [True: 11.1k, False: 6.68k]
  ------------------
   45|  11.1k|    {
   46|  11.1k|        auto dest = this->link.WriteBuff();
   47|       |
   48|  11.1k|        const auto NUM = (remaining.length() > dest.length()) ? dest.length() : remaining.length();
  ------------------
  |  Branch (48:26): [True: 4.47k, False: 6.68k]
  ------------------
   49|       |
   50|  11.1k|        dest.copy_from(remaining.take(NUM));
   51|  11.1k|        link.OnRead(NUM, *this);
   52|       |
   53|  11.1k|        remaining.advance(NUM);
   54|  11.1k|    }
   55|  6.68k|}
_ZN8opendnp311DecoderImpl10DecodeTPDUERKN7ser4cpp4RSeqImEE:
   58|  37.5k|{
   59|  37.5k|    Indent i(*callbacks);
   60|  37.5k|    FORMAT_HEX_BLOCK(logger, flags::TRANSPORT_RX, data, 18, 18);
  ------------------
  |  |   70|  37.5k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (70:9): [True: 0, False: 37.5k]
  |  |  ------------------
  |  |   71|  37.5k|    {                                                                                                                  \
  |  |   72|      0|        opendnp3::HexLogging::log(logger, levels, buffer, ' ', firstSize, otherSize);                                  \
  |  |   73|      0|    }
  ------------------
   61|       |
   62|  37.5k|    auto result = transportRx.ProcessReceive(Message(Addresses(), data));
   63|  37.5k|    if (result.payload.is_not_empty())
  ------------------
  |  Branch (63:9): [True: 34.8k, False: 2.68k]
  ------------------
   64|  34.8k|    {
   65|  34.8k|        this->DecodeAPDU(result.payload);
   66|  34.8k|    }
   67|  37.5k|}
_ZN8opendnp311DecoderImpl10DecodeAPDUERKN7ser4cpp4RSeqImEE:
   70|  34.8k|{
   71|  34.8k|    Indent i(*callbacks);
   72|       |
   73|  34.8k|    FORMAT_HEX_BLOCK(this->logger, flags::APP_HEX_RX, data, 18, 18);
  ------------------
  |  |   70|  34.8k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (70:9): [True: 0, False: 34.8k]
  |  |  ------------------
  |  |   71|  34.8k|    {                                                                                                                  \
  |  |   72|      0|        opendnp3::HexLogging::log(logger, levels, buffer, ' ', firstSize, otherSize);                                  \
  |  |   73|      0|    }
  ------------------
   74|       |
   75|  34.8k|    if (IsResponse(data))
  ------------------
  |  Branch (75:9): [True: 1.41k, False: 33.4k]
  ------------------
   76|  1.41k|    {
   77|  1.41k|        const auto result = APDUHeaderParser::ParseResponse(data, &logger);
   78|  1.41k|        if (result.success)
  ------------------
  |  Branch (78:13): [True: 1.20k, False: 204]
  ------------------
   79|  1.20k|        {
   80|  1.20k|            logging::LogHeader(this->logger, flags::APP_HEADER_RX, result.header);
   81|       |
   82|  1.20k|            if ((result.header.IIN.LSB & 0x01) != 0)
  ------------------
  |  Branch (82:17): [True: 763, False: 445]
  ------------------
   83|    763|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.0 - Broadcast");
  ------------------
  |  |   42|    763|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 763]
  |  |  ------------------
  |  |   43|    763|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   84|  1.20k|            if ((result.header.IIN.LSB & 0x02) != 0)
  ------------------
  |  Branch (84:17): [True: 339, False: 869]
  ------------------
   85|    339|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.1 - Class 1 events");
  ------------------
  |  |   42|    339|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 339]
  |  |  ------------------
  |  |   43|    339|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   86|  1.20k|            if ((result.header.IIN.LSB & 0x04) != 0)
  ------------------
  |  Branch (86:17): [True: 528, False: 680]
  ------------------
   87|    528|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.2 - Class 2 events");
  ------------------
  |  |   42|    528|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 528]
  |  |  ------------------
  |  |   43|    528|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   88|  1.20k|            if ((result.header.IIN.LSB & 0x08) != 0)
  ------------------
  |  Branch (88:17): [True: 338, False: 870]
  ------------------
   89|    338|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.3 - Class 3 events");
  ------------------
  |  |   42|    338|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 338]
  |  |  ------------------
  |  |   43|    338|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   90|  1.20k|            if ((result.header.IIN.LSB & 0x10) != 0)
  ------------------
  |  Branch (90:17): [True: 471, False: 737]
  ------------------
   91|    471|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.4 - Need time");
  ------------------
  |  |   42|    471|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 471]
  |  |  ------------------
  |  |   43|    471|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   92|  1.20k|            if ((result.header.IIN.LSB & 0x20) != 0)
  ------------------
  |  Branch (92:17): [True: 487, False: 721]
  ------------------
   93|    487|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.5 - Local control");
  ------------------
  |  |   42|    487|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 487]
  |  |  ------------------
  |  |   43|    487|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   94|  1.20k|            if ((result.header.IIN.LSB & 0x40) != 0)
  ------------------
  |  Branch (94:17): [True: 741, False: 467]
  ------------------
   95|    741|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.6 - Device trouble");
  ------------------
  |  |   42|    741|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 741]
  |  |  ------------------
  |  |   43|    741|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   96|  1.20k|            if ((result.header.IIN.LSB & 0x80) != 0)
  ------------------
  |  Branch (96:17): [True: 799, False: 409]
  ------------------
   97|    799|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.7 - Device restart");
  ------------------
  |  |   42|    799|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 799]
  |  |  ------------------
  |  |   43|    799|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   98|  1.20k|            if ((result.header.IIN.MSB & 0x01) != 0)
  ------------------
  |  Branch (98:17): [True: 381, False: 827]
  ------------------
   99|    381|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.0 - Function code not supported");
  ------------------
  |  |   42|    381|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 381]
  |  |  ------------------
  |  |   43|    381|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  100|  1.20k|            if ((result.header.IIN.MSB & 0x02) != 0)
  ------------------
  |  Branch (100:17): [True: 438, False: 770]
  ------------------
  101|    438|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.1 - Object unknown");
  ------------------
  |  |   42|    438|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 438]
  |  |  ------------------
  |  |   43|    438|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  102|  1.20k|            if ((result.header.IIN.MSB & 0x04) != 0)
  ------------------
  |  Branch (102:17): [True: 647, False: 561]
  ------------------
  103|    647|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.2 - Parameter error");
  ------------------
  |  |   42|    647|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 647]
  |  |  ------------------
  |  |   43|    647|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  104|  1.20k|            if ((result.header.IIN.MSB & 0x08) != 0)
  ------------------
  |  Branch (104:17): [True: 560, False: 648]
  ------------------
  105|    560|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.3 - Event buffer overflow");
  ------------------
  |  |   42|    560|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 560]
  |  |  ------------------
  |  |   43|    560|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  106|  1.20k|            if ((result.header.IIN.MSB & 0x10) != 0)
  ------------------
  |  Branch (106:17): [True: 385, False: 823]
  ------------------
  107|    385|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.4 - Already executing");
  ------------------
  |  |   42|    385|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 385]
  |  |  ------------------
  |  |   43|    385|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  108|  1.20k|            if ((result.header.IIN.MSB & 0x20) != 0)
  ------------------
  |  Branch (108:17): [True: 627, False: 581]
  ------------------
  109|    627|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.5 - Configuration corrupt");
  ------------------
  |  |   42|    627|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 627]
  |  |  ------------------
  |  |   43|    627|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  110|  1.20k|            if ((result.header.IIN.MSB & 0x40) != 0)
  ------------------
  |  Branch (110:17): [True: 375, False: 833]
  ------------------
  111|    375|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.6 - Reserved 1");
  ------------------
  |  |   42|    375|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 375]
  |  |  ------------------
  |  |   43|    375|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  112|  1.20k|            if ((result.header.IIN.MSB & 0x80) != 0)
  ------------------
  |  Branch (112:17): [True: 395, False: 813]
  ------------------
  113|    395|                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.7 - Reserved 2");
  ------------------
  |  |   42|    395|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 395]
  |  |  ------------------
  |  |   43|    395|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  114|       |
  115|  1.20k|            Indent i(*callbacks);
  116|  1.20k|            LoggingHandler handler(logger, *callbacks);
  117|  1.20k|            APDUParser::ParseSinglePass(result.objects, &logger, &handler, nullptr, ParserSettings::Default());
  118|  1.20k|        }
  119|  1.41k|    }
  120|  33.4k|    else
  121|  33.4k|    {
  122|  33.4k|        const auto result = APDUHeaderParser::ParseRequest(data, &logger);
  123|  33.4k|        if (result.success)
  ------------------
  |  Branch (123:13): [True: 33.1k, False: 284]
  ------------------
  124|  33.1k|        {
  125|  33.1k|            logging::LogHeader(this->logger, flags::APP_HEADER_RX, result.header);
  126|       |
  127|  33.1k|            Indent i(*callbacks);
  128|  33.1k|            LoggingHandler handler(logger, *callbacks);
  129|  33.1k|            auto settings = (result.header.function == FunctionCode::READ) ? ParserSettings::NoContents()
  ------------------
  |  Branch (129:29): [True: 1.09k, False: 32.1k]
  ------------------
  130|  33.1k|                                                                           : ParserSettings::Default();
  131|  33.1k|            APDUParser::ParseSinglePass(result.objects, &logger, &handler, nullptr, settings);
  132|  33.1k|        }
  133|  33.4k|    }
  134|  34.8k|}
_ZN8opendnp311DecoderImpl10IsResponseERKN7ser4cpp4RSeqImEE:
  137|  34.8k|{
  138|  34.8k|    if (data.length() < 2)
  ------------------
  |  Branch (138:9): [True: 284, False: 34.6k]
  ------------------
  139|    284|    {
  140|    284|        return false;
  141|    284|    }
  142|       |
  143|  34.6k|    switch (FunctionCodeSpec::from_type(data[1]))
  144|  34.6k|    {
  145|    383|    case (FunctionCode::RESPONSE):
  ------------------
  |  Branch (145:5): [True: 383, False: 34.2k]
  ------------------
  146|    918|    case (FunctionCode::UNSOLICITED_RESPONSE):
  ------------------
  |  Branch (146:5): [True: 535, False: 34.0k]
  ------------------
  147|  1.41k|    case (FunctionCode::AUTH_RESPONSE):
  ------------------
  |  Branch (147:5): [True: 494, False: 34.1k]
  ------------------
  148|  1.41k|        return true;
  149|  33.1k|    default:
  ------------------
  |  Branch (149:5): [True: 33.1k, False: 1.41k]
  ------------------
  150|  33.1k|        return false;
  151|  34.6k|    }
  152|  34.6k|}
_ZN8opendnp311DecoderImpl7OnFrameERKNS_16LinkHeaderFieldsERKN7ser4cpp4RSeqImEE:
  155|  37.8k|{
  156|  37.8k|    if (header.func == LinkFunction::PRI_CONFIRMED_USER_DATA || header.func == LinkFunction::PRI_UNCONFIRMED_USER_DATA)
  ------------------
  |  Branch (156:9): [True: 1.25k, False: 36.5k]
  |  Branch (156:65): [True: 36.3k, False: 236]
  ------------------
  157|  37.5k|    {
  158|  37.5k|        this->DecodeTPDU(userdata);
  159|  37.5k|    }
  160|       |
  161|  37.8k|    return true;
  162|  37.8k|}

_ZN8opendnp36IndentC2ERNS_17IDecoderCallbacksE:
   31|   138k|    Indent(IDecoderCallbacks& callbacks) : m_callbacks(&callbacks)
   32|   138k|    {
   33|   138k|        m_callbacks->PushIndent();
   34|   138k|    }
_ZN8opendnp36IndentD2Ev:
   37|   138k|    {
   38|   138k|        m_callbacks->PopIndent();
   39|   138k|    }

_ZN8opendnp314LoggingHandlerC2ERKNS_6LoggerERNS_17IDecoderCallbacksE:
   30|  34.4k|    : logger(logger_), callbacks(&callbacks_)
   31|  34.4k|{
   32|  34.4k|}
_ZN8opendnp314LoggingHandler14OnHeaderResultERKNS_12HeaderRecordERKNS_8IINFieldE:
   35|  39.9k|{
   36|  39.9k|    if (result.Any())
  ------------------
  |  Branch (36:9): [True: 555, False: 39.4k]
  ------------------
   37|    555|    {
   38|    555|        Indent i(*callbacks);
   39|    555|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "Pretty printing not supported for this type");
  ------------------
  |  |   42|    555|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 555]
  |  |  ------------------
  |  |   43|    555|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   40|    555|    }
   41|  39.9k|}
_ZN8opendnp314LoggingHandler11ToUTCStringERKNS_7DNPTimeE:
   44|  21.3k|{
   45|  21.3k|    auto seconds = static_cast<time_t>(dnptime.value / 1000);
   46|  21.3k|    auto milliseconds = static_cast<uint16_t>(dnptime.value % 1000);
   47|       |
   48|       |#ifdef WIN32
   49|       |    tm t;
   50|       |    if (gmtime_s(&t, &seconds) != 0)
   51|       |    {
   52|       |        return "BAD TIME";
   53|       |    }
   54|       |#else
   55|  21.3k|    tm t;
   56|  21.3k|    if (!gmtime_r(&seconds, &t))
  ------------------
  |  Branch (56:9): [True: 0, False: 21.3k]
  ------------------
   57|      0|    {
   58|      0|        return "BAD TIME";
   59|      0|    }
   60|  21.3k|#endif
   61|       |
   62|  21.3k|    std::ostringstream oss;
   63|  21.3k|    oss << (1900 + t.tm_year);
   64|  21.3k|    oss << "-" << std::setfill('0') << std::setw(2) << (1 + t.tm_mon);
   65|  21.3k|    oss << "-" << std::setfill('0') << std::setw(2) << t.tm_mday;
   66|  21.3k|    oss << " " << std::setfill('0') << std::setw(2) << t.tm_hour;
   67|  21.3k|    oss << ":" << std::setfill('0') << std::setw(2) << t.tm_min;
   68|  21.3k|    oss << ":" << std::setfill('0') << std::setw(2) << t.tm_sec;
   69|  21.3k|    oss << "." << std::setfill('0') << std::setw(3) << milliseconds;
   70|  21.3k|    return oss.str();
   71|  21.3k|}
_ZN8opendnp314LoggingHandler9PrintCrobERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
   74|    287|{
   75|    287|    Indent i(*callbacks);
   76|    287|    auto logItem = [this](const Indexed<ControlRelayOutputBlock>& item) {
   77|    287|        std::ostringstream oss;
   78|    287|        oss << "[" << item.index << "] - code: 0x" << ToHex(item.value.rawCode) << " ("
   79|    287|            << "op type: " << OperationTypeSpec::to_human_string(item.value.opType)
   80|    287|            << ", tcc: " << TripCloseCodeSpec::to_human_string(item.value.tcc) << ", cr: " << item.value.clear << ")";
   81|    287|        oss << " count: " << static_cast<size_t>(item.value.count);
   82|    287|        oss << " on-time: " << static_cast<size_t>(item.value.onTimeMS);
   83|    287|        oss << " off-time: " << static_cast<size_t>(item.value.offTimeMS);
   84|    287|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
   85|    287|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
   86|    287|    };
   87|       |
   88|    287|    items.ForeachItem(logItem);
   89|       |
   90|    287|    return IINField::Empty();
   91|    287|}
_ZN8opendnp314LoggingHandler11PrintOctetsERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
   94|  1.02k|{
   95|  1.02k|    Indent i(*callbacks);
   96|  1.02k|    auto logItem = [this](const Indexed<OctetString>& item) {
   97|  1.02k|        const auto buffer = item.value.ToBuffer();
   98|  1.02k|        const auto slice = ser4cpp::rseq_t(buffer.data, buffer.length);
   99|  1.02k|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] value: (length = %zu)", item.index, slice.length());
  100|  1.02k|        FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, slice, 18, 18);
  101|  1.02k|    };
  102|       |
  103|  1.02k|    items.ForeachItem(logItem);
  104|       |
  105|  1.02k|    return IINField::Empty();
  106|  1.02k|}
_ZN8opendnp314LoggingHandler20PrintTimeAndIntervalERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  109|    539|{
  110|    539|    Indent i(*callbacks);
  111|    539|    auto logItem = [this](const Indexed<TimeAndInterval>& item) {
  112|    539|        std::ostringstream oss;
  113|    539|        oss << "[" << item.index << "] - startTime: " << ToUTCString(item.value.time);
  114|    539|        oss << " count: " << item.value.interval;
  115|    539|        oss << " units: " << IntervalUnitsSpec::to_human_string(item.value.GetUnitsEnum()) << " ("
  116|    539|            << static_cast<int>(item.value.units) << ")";
  117|    539|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  118|    539|    };
  119|       |
  120|    539|    values.ForeachItem(logItem);
  121|       |
  122|    539|    return IINField::Empty();
  123|    539|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group50Var1EEE:
  126|    258|{
  127|    258|    return this->PrintTime(values);
  128|    258|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var1EEE:
  131|    297|{
  132|    297|    return this->PrintTime(values);
  133|    297|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group51Var2EEE:
  136|    414|{
  137|    414|    return this->PrintTime(values);
  138|    414|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var1EEE:
  141|    259|{
  142|    259|    return this->PrintTime16(values);
  143|    259|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11CountHeaderERKNS_11ICollectionINS_11Group52Var2EEE:
  146|    272|{
  147|    272|    return this->PrintTime16(values);
  148|    272|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_8IINValueEEEEE:
  151|    324|{
  152|    324|    return this->PrintV(values);
  153|    324|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
  156|    648|{
  157|    648|    auto stringify = [](bool value) -> const char* { return GetStringValue(value); };
  158|    648|    return this->PrintVQTStringify(header.enumeration, values, stringify);
  159|    648|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
  162|    891|{
  163|    891|    auto stringify = [](DoubleBit db) -> const char* { return DoubleBitSpec::to_human_string(db); };
  164|    891|    return this->PrintVQTStringify(header.enumeration, values, stringify);
  165|    891|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  169|    556|{
  170|    556|    return this->PrintVQT(header.enumeration, values);
  171|    556|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  174|  1.29k|{
  175|  1.29k|    return this->PrintVQT(header.enumeration, values);
  176|  1.29k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  179|  1.73k|{
  180|  1.73k|    return this->PrintVQT(header.enumeration, values);
  181|  1.73k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  184|  1.71k|{
  185|  1.71k|    return this->PrintVQT(header.enumeration, values);
  186|  1.71k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  190|  1.25k|{
  191|  1.25k|    return this->PrintVQT(header.enumeration, values);
  192|  1.25k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  195|    480|{
  196|    480|    return this->PrintOctets(values);
  197|    480|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  201|    283|{
  202|    283|    return this->PrintTimeAndInterval(values);
  203|    283|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEE:
  206|    858|{
  207|    858|    return this->PrintVQT(header.enumeration, values);
  208|    858|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryOutputStatusEEEEE:
  212|    691|{
  213|    691|    return this->PrintVQT(header.enumeration, values);
  214|    691|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEE:
  217|    718|{
  218|    718|    auto stringify = [](DoubleBit db) -> const char* { return DoubleBitSpec::to_human_string(db); };
  219|    718|    return this->PrintVQTStringify(header.enumeration, values, stringify);
  220|    718|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_7CounterEEEEE:
  223|  1.00k|{
  224|  1.00k|    return this->PrintVQT(header.enumeration, values);
  225|  1.00k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_13FrozenCounterEEEEE:
  228|    958|{
  229|    958|    return this->PrintVQT(header.enumeration, values);
  230|    958|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_6AnalogEEEEE:
  233|  1.97k|{
  234|  1.97k|    return this->PrintVQT(header.enumeration, values);
  235|  1.97k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogOutputStatusEEEEE:
  239|  1.97k|{
  240|  1.97k|    return this->PrintVQT(header.enumeration, values);
  241|  1.97k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEE:
  244|    540|{
  245|    540|    return this->PrintOctets(values);
  246|    540|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEE:
  250|    256|{
  251|    256|    return this->PrintTimeAndInterval(values);
  252|    256|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryCommandEventEEEEE:
  256|    782|{
  257|    782|    Indent i(*callbacks);
  258|    782|    const bool HAS_TIME = HasAbsoluteTime(header.enumeration);
  259|    782|    auto logItem = [this, HAS_TIME](const Indexed<BinaryCommandEvent>& item) {
  260|    782|        std::ostringstream oss;
  261|    782|        oss << "[" << item.index << "] - value: " << GetStringValue(item.value.value)
  262|    782|            << "  status: " << CommandStatusSpec::to_human_string(item.value.status);
  263|    782|        if (HAS_TIME)
  264|    782|        {
  265|    782|            oss << " time: " << ToUTCString(item.value.time);
  266|    782|        }
  267|    782|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  268|    782|    };
  269|       |
  270|    782|    values.ForeachItem(logItem);
  271|       |
  272|    782|    return IINField::Empty();
  273|    782|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogCommandEventEEEEE:
  277|  2.10k|{
  278|  2.10k|    Indent i(*callbacks);
  279|  2.10k|    const bool HAS_TIME = HasAbsoluteTime(header.enumeration);
  280|  2.10k|    auto logItem = [this, HAS_TIME](const Indexed<AnalogCommandEvent>& item) {
  281|  2.10k|        std::ostringstream oss;
  282|  2.10k|        oss << "[" << item.index << "] - value: " << item.value.value
  283|  2.10k|            << "  status: " << CommandStatusSpec::to_human_string(item.value.status);
  284|  2.10k|        if (HAS_TIME)
  285|  2.10k|        {
  286|  2.10k|            oss << " time: " << ToUTCString(item.value.time);
  287|  2.10k|        }
  288|  2.10k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  289|  2.10k|    };
  290|       |
  291|  2.10k|    values.ForeachItem(logItem);
  292|       |
  293|  2.10k|    return IINField::Empty();
  294|  2.10k|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEE:
  298|    287|{
  299|    287|    return PrintCrob(values);
  300|    287|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt16EEEEE:
  304|    284|{
  305|    284|    return PrintAO(values);
  306|    284|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_17AnalogOutputInt32EEEEE:
  310|    323|{
  311|    323|    return PrintAO(values);
  312|    323|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_19AnalogOutputFloat32EEEEE:
  316|    326|{
  317|    326|    return PrintAO(values);
  318|    326|}
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_20AnalogOutputDouble64EEEEE:
  322|    391|{
  323|    391|    return PrintAO(values);
  324|    391|}
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler9PrintCrobERKNS_11ICollectionINS_7IndexedINS_23ControlRelayOutputBlockEEEEEENK3$_0clERKS4_:
   76|    923|    auto logItem = [this](const Indexed<ControlRelayOutputBlock>& item) {
   77|    923|        std::ostringstream oss;
   78|    923|        oss << "[" << item.index << "] - code: 0x" << ToHex(item.value.rawCode) << " ("
   79|    923|            << "op type: " << OperationTypeSpec::to_human_string(item.value.opType)
   80|    923|            << ", tcc: " << TripCloseCodeSpec::to_human_string(item.value.tcc) << ", cr: " << item.value.clear << ")";
   81|    923|        oss << " count: " << static_cast<size_t>(item.value.count);
   82|    923|        oss << " on-time: " << static_cast<size_t>(item.value.onTimeMS);
   83|    923|        oss << " off-time: " << static_cast<size_t>(item.value.offTimeMS);
   84|    923|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
   85|    923|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|    923|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 923]
  |  |  ------------------
  |  |   43|    923|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   86|    923|    };
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler11PrintOctetsERKNS_11ICollectionINS_7IndexedINS_11OctetStringEEEEEENK3$_0clERKS4_:
   96|  2.14k|    auto logItem = [this](const Indexed<OctetString>& item) {
   97|  2.14k|        const auto buffer = item.value.ToBuffer();
   98|  2.14k|        const auto slice = ser4cpp::rseq_t(buffer.data, buffer.length);
   99|  2.14k|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] value: (length = %zu)", item.index, slice.length());
  ------------------
  |  |   54|  2.14k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 2.14k]
  |  |  ------------------
  |  |   55|  2.14k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  100|  2.14k|        FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, slice, 18, 18);
  ------------------
  |  |   70|  2.14k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (70:9): [True: 0, False: 2.14k]
  |  |  ------------------
  |  |   71|  2.14k|    {                                                                                                                  \
  |  |   72|      0|        opendnp3::HexLogging::log(logger, levels, buffer, ' ', firstSize, otherSize);                                  \
  |  |   73|      0|    }
  ------------------
  101|  2.14k|    };
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler20PrintTimeAndIntervalERKNS_11ICollectionINS_7IndexedINS_15TimeAndIntervalEEEEEENK3$_0clERKS4_:
  111|  1.72k|    auto logItem = [this](const Indexed<TimeAndInterval>& item) {
  112|  1.72k|        std::ostringstream oss;
  113|  1.72k|        oss << "[" << item.index << "] - startTime: " << ToUTCString(item.value.time);
  114|  1.72k|        oss << " count: " << item.value.interval;
  115|  1.72k|        oss << " units: " << IntervalUnitsSpec::to_human_string(item.value.GetUnitsEnum()) << " ("
  116|  1.72k|            << static_cast<int>(item.value.units) << ")";
  117|  1.72k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  1.72k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 1.72k]
  |  |  ------------------
  |  |   43|  1.72k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  118|  1.72k|    };
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_6BinaryEEEEEENK3$_0clEb:
  157|  36.3k|    auto stringify = [](bool value) -> const char* { return GetStringValue(value); };
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEEENK3$_0clENS_9DoubleBitE:
  163|  11.8k|    auto stringify = [](DoubleBit db) -> const char* { return DoubleBitSpec::to_human_string(db); };
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_15DoubleBitBinaryEEEEEENK3$_0clENS_9DoubleBitE:
  218|  3.74k|    auto stringify = [](DoubleBit db) -> const char* { return DoubleBitSpec::to_human_string(db); };
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18BinaryCommandEventEEEEEENK3$_0clERKS7_:
  259|  7.44k|    auto logItem = [this, HAS_TIME](const Indexed<BinaryCommandEvent>& item) {
  260|  7.44k|        std::ostringstream oss;
  261|  7.44k|        oss << "[" << item.index << "] - value: " << GetStringValue(item.value.value)
  262|  7.44k|            << "  status: " << CommandStatusSpec::to_human_string(item.value.status);
  263|  7.44k|        if (HAS_TIME)
  ------------------
  |  Branch (263:13): [True: 1.11k, False: 6.33k]
  ------------------
  264|  1.11k|        {
  265|  1.11k|            oss << " time: " << ToUTCString(item.value.time);
  266|  1.11k|        }
  267|  7.44k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  7.44k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 7.44k]
  |  |  ------------------
  |  |   43|  7.44k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  268|  7.44k|    };
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedINS_18AnalogCommandEventEEEEEENK3$_0clERKS7_:
  280|  6.66k|    auto logItem = [this, HAS_TIME](const Indexed<AnalogCommandEvent>& item) {
  281|  6.66k|        std::ostringstream oss;
  282|  6.66k|        oss << "[" << item.index << "] - value: " << item.value.value
  283|  6.66k|            << "  status: " << CommandStatusSpec::to_human_string(item.value.status);
  284|  6.66k|        if (HAS_TIME)
  ------------------
  |  Branch (284:13): [True: 2.93k, False: 3.72k]
  ------------------
  285|  2.93k|        {
  286|  2.93k|            oss << " time: " << ToUTCString(item.value.time);
  287|  2.93k|        }
  288|  6.66k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  6.66k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 6.66k]
  |  |  ------------------
  |  |   43|  6.66k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  289|  6.66k|    };

_ZN8opendnp314LoggingHandler14GetStringValueEb:
   52|  43.7k|    {
   53|  43.7k|        return value ? "1" : "0";
  ------------------
  |  Branch (53:16): [True: 21.3k, False: 22.3k]
  ------------------
   54|  43.7k|    }
_ZN8opendnp314LoggingHandler5ToHexEh:
   57|  55.9k|    {
   58|  55.9k|        std::ostringstream oss;
   59|  55.9k|        oss << ser4cpp::HexConversions::to_hex_char((b & 0xf0) >> 4) << ser4cpp::HexConversions::to_hex_char(b & 0xf);
   60|  55.9k|        return oss.str();
   61|  55.9k|    }
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_16AllObjectsHeaderE:
   92|  13.8k|    {
   93|  13.8k|        return IINField::Empty();
   94|  13.8k|    }
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11RangeHeaderE:
   96|    560|    {
   97|    560|        return IINField::Empty();
   98|    560|    }
_ZN8opendnp314LoggingHandler13ProcessHeaderERKNS_11CountHeaderE:
  100|    862|    {
  101|    862|        return IINField::Empty();
  102|    862|    }
_ZN8opendnp314LoggingHandler9PrintTimeINS_11Group50Var1EEENS_8IINFieldERKNS_11ICollectionIT_EE:
  172|    258|{
  173|    258|    Indent i(*callbacks);
  174|    258|    uint32_t count = 0;
  175|    258|    auto logItem = [this, &count](const T& item) {
  176|    258|        auto time = ToUTCString(item.time);
  177|    258|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - time: %s", count, time.c_str());
  178|    258|        ++count;
  179|    258|    };
  180|       |
  181|    258|    items.ForeachItem(logItem);
  182|       |
  183|    258|    return IINField::Empty();
  184|    258|}
_ZZN8opendnp314LoggingHandler9PrintTimeINS_11Group50Var1EEENS_8IINFieldERKNS_11ICollectionIT_EEENKUlRKS2_E_clESA_:
  175|    850|    auto logItem = [this, &count](const T& item) {
  176|    850|        auto time = ToUTCString(item.time);
  177|    850|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - time: %s", count, time.c_str());
  ------------------
  |  |   54|    850|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 850]
  |  |  ------------------
  |  |   55|    850|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  178|    850|        ++count;
  179|    850|    };
_ZN8opendnp314LoggingHandler9PrintTimeINS_11Group51Var1EEENS_8IINFieldERKNS_11ICollectionIT_EE:
  172|    297|{
  173|    297|    Indent i(*callbacks);
  174|    297|    uint32_t count = 0;
  175|    297|    auto logItem = [this, &count](const T& item) {
  176|    297|        auto time = ToUTCString(item.time);
  177|    297|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - time: %s", count, time.c_str());
  178|    297|        ++count;
  179|    297|    };
  180|       |
  181|    297|    items.ForeachItem(logItem);
  182|       |
  183|    297|    return IINField::Empty();
  184|    297|}
_ZZN8opendnp314LoggingHandler9PrintTimeINS_11Group51Var1EEENS_8IINFieldERKNS_11ICollectionIT_EEENKUlRKS2_E_clESA_:
  175|    593|    auto logItem = [this, &count](const T& item) {
  176|    593|        auto time = ToUTCString(item.time);
  177|    593|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - time: %s", count, time.c_str());
  ------------------
  |  |   54|    593|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 593]
  |  |  ------------------
  |  |   55|    593|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  178|    593|        ++count;
  179|    593|    };
_ZN8opendnp314LoggingHandler9PrintTimeINS_11Group51Var2EEENS_8IINFieldERKNS_11ICollectionIT_EE:
  172|    414|{
  173|    414|    Indent i(*callbacks);
  174|    414|    uint32_t count = 0;
  175|    414|    auto logItem = [this, &count](const T& item) {
  176|    414|        auto time = ToUTCString(item.time);
  177|    414|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - time: %s", count, time.c_str());
  178|    414|        ++count;
  179|    414|    };
  180|       |
  181|    414|    items.ForeachItem(logItem);
  182|       |
  183|    414|    return IINField::Empty();
  184|    414|}
_ZZN8opendnp314LoggingHandler9PrintTimeINS_11Group51Var2EEENS_8IINFieldERKNS_11ICollectionIT_EEENKUlRKS2_E_clESA_:
  175|  1.15k|    auto logItem = [this, &count](const T& item) {
  176|  1.15k|        auto time = ToUTCString(item.time);
  177|  1.15k|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - time: %s", count, time.c_str());
  ------------------
  |  |   54|  1.15k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |   55|  1.15k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  178|  1.15k|        ++count;
  179|  1.15k|    };
_ZN8opendnp314LoggingHandler11PrintTime16INS_11Group52Var1EEENS_8IINFieldERKNS_11ICollectionIT_EE:
  187|    259|{
  188|    259|    Indent i(*callbacks);
  189|    259|    uint32_t count = 0;
  190|    259|    auto logItem = [this, &count](const T& item) {
  191|    259|        std::ostringstream oss;
  192|    259|        oss << "[" << count << "] - time: " << item.time;
  193|    259|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  194|    259|        ++count;
  195|    259|    };
  196|       |
  197|    259|    items.ForeachItem(logItem);
  198|       |
  199|    259|    return IINField::Empty();
  200|    259|}
_ZZN8opendnp314LoggingHandler11PrintTime16INS_11Group52Var1EEENS_8IINFieldERKNS_11ICollectionIT_EEENKUlRKS2_E_clESA_:
  190|  2.84k|    auto logItem = [this, &count](const T& item) {
  191|  2.84k|        std::ostringstream oss;
  192|  2.84k|        oss << "[" << count << "] - time: " << item.time;
  193|  2.84k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  2.84k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 2.84k]
  |  |  ------------------
  |  |   43|  2.84k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  194|  2.84k|        ++count;
  195|  2.84k|    };
_ZN8opendnp314LoggingHandler11PrintTime16INS_11Group52Var2EEENS_8IINFieldERKNS_11ICollectionIT_EE:
  187|    272|{
  188|    272|    Indent i(*callbacks);
  189|    272|    uint32_t count = 0;
  190|    272|    auto logItem = [this, &count](const T& item) {
  191|    272|        std::ostringstream oss;
  192|    272|        oss << "[" << count << "] - time: " << item.time;
  193|    272|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  194|    272|        ++count;
  195|    272|    };
  196|       |
  197|    272|    items.ForeachItem(logItem);
  198|       |
  199|    272|    return IINField::Empty();
  200|    272|}
_ZZN8opendnp314LoggingHandler11PrintTime16INS_11Group52Var2EEENS_8IINFieldERKNS_11ICollectionIT_EEENKUlRKS2_E_clESA_:
  190|  2.44k|    auto logItem = [this, &count](const T& item) {
  191|  2.44k|        std::ostringstream oss;
  192|  2.44k|        oss << "[" << count << "] - time: " << item.time;
  193|  2.44k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  2.44k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 2.44k]
  |  |  ------------------
  |  |   43|  2.44k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  194|  2.44k|        ++count;
  195|  2.44k|    };
_ZN8opendnp314LoggingHandler6PrintVINS_8IINValueEEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEE:
  159|    324|{
  160|    324|    Indent i(*callbacks);
  161|    324|    auto logItem = [this](const Indexed<T>& item) {
  162|    324|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - value: %s", item.index,
  163|    324|                         GetStringValue(item.value.value));
  164|    324|    };
  165|       |
  166|    324|    items.ForeachItem(logItem);
  167|       |
  168|    324|    return IINField::Empty();
  169|    324|}
_ZZN8opendnp314LoggingHandler6PrintVINS_8IINValueEEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS5_IS2_EEE_clESD_:
  161|  33.7k|    auto logItem = [this](const Indexed<T>& item) {
  162|  33.7k|        FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] - value: %s", item.index,
  ------------------
  |  |   54|  33.7k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 33.7k]
  |  |  ------------------
  |  |   55|  33.7k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  163|  33.7k|                         GetStringValue(item.value.value));
  164|  33.7k|    };
LoggingHandler.cpp:_ZN8opendnp314LoggingHandler17PrintVQTStringifyINS_6BinaryEZNS0_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedIS2_EEEEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS6_INS7_IT_EEEERKT0_:
  243|    648|{
  244|    648|    Indent i(*callbacks);
  245|    648|    auto logItem = [this, gv, stringify](const Indexed<T>& item) {
  246|    648|        std::ostringstream oss;
  247|    648|        oss << "[" << item.index << "] - value: " << stringify(item.value.value);
  248|    648|        if (HasFlags(gv))
  249|    648|        {
  250|    648|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  251|    648|        }
  252|    648|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  253|    648|        {
  254|    648|            oss << " time: " << item.value.time.value;
  255|    648|        }
  256|    648|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  257|    648|    };
  258|       |
  259|    648|    items.ForeachItem(logItem);
  260|       |
  261|    648|    return IINField::Empty();
  262|    648|}
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler17PrintVQTStringifyINS_6BinaryEZNS0_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedIS2_EEEEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS6_INS7_IT_EEEERKT0_ENKUlRKS8_E_clESO_:
  245|  36.3k|    auto logItem = [this, gv, stringify](const Indexed<T>& item) {
  246|  36.3k|        std::ostringstream oss;
  247|  36.3k|        oss << "[" << item.index << "] - value: " << stringify(item.value.value);
  248|  36.3k|        if (HasFlags(gv))
  ------------------
  |  Branch (248:13): [True: 3.22k, False: 33.0k]
  ------------------
  249|  3.22k|        {
  250|  3.22k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  251|  3.22k|        }
  252|  36.3k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (252:13): [True: 0, False: 36.3k]
  |  Branch (252:36): [True: 0, False: 36.3k]
  ------------------
  253|      0|        {
  254|      0|            oss << " time: " << item.value.time.value;
  255|      0|        }
  256|  36.3k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  36.3k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 36.3k]
  |  |  ------------------
  |  |   43|  36.3k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  257|  36.3k|    };
LoggingHandler.cpp:_ZN8opendnp314LoggingHandler17PrintVQTStringifyINS_15DoubleBitBinaryEZNS0_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedIS2_EEEEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS6_INS7_IT_EEEERKT0_:
  243|    891|{
  244|    891|    Indent i(*callbacks);
  245|    891|    auto logItem = [this, gv, stringify](const Indexed<T>& item) {
  246|    891|        std::ostringstream oss;
  247|    891|        oss << "[" << item.index << "] - value: " << stringify(item.value.value);
  248|    891|        if (HasFlags(gv))
  249|    891|        {
  250|    891|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  251|    891|        }
  252|    891|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  253|    891|        {
  254|    891|            oss << " time: " << item.value.time.value;
  255|    891|        }
  256|    891|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  257|    891|    };
  258|       |
  259|    891|    items.ForeachItem(logItem);
  260|       |
  261|    891|    return IINField::Empty();
  262|    891|}
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler17PrintVQTStringifyINS_15DoubleBitBinaryEZNS0_13ProcessHeaderERKNS_11RangeHeaderERKNS_11ICollectionINS_7IndexedIS2_EEEEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS6_INS7_IT_EEEERKT0_ENKUlRKS8_E_clESO_:
  245|  11.8k|    auto logItem = [this, gv, stringify](const Indexed<T>& item) {
  246|  11.8k|        std::ostringstream oss;
  247|  11.8k|        oss << "[" << item.index << "] - value: " << stringify(item.value.value);
  248|  11.8k|        if (HasFlags(gv))
  ------------------
  |  Branch (248:13): [True: 1.84k, False: 9.99k]
  ------------------
  249|  1.84k|        {
  250|  1.84k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  251|  1.84k|        }
  252|  11.8k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (252:13): [True: 0, False: 11.8k]
  |  Branch (252:36): [True: 0, False: 11.8k]
  ------------------
  253|      0|        {
  254|      0|            oss << " time: " << item.value.time.value;
  255|      0|        }
  256|  11.8k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  11.8k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 11.8k]
  |  |  ------------------
  |  |   43|  11.8k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  257|  11.8k|    };
_ZN8opendnp314LoggingHandler8PrintVQTINS_18BinaryOutputStatusEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEE:
  203|  1.24k|{
  204|  1.24k|    Indent i(*callbacks);
  205|  1.24k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  1.24k|        std::ostringstream oss;
  207|  1.24k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  1.24k|        if (HasFlags(gv))
  209|  1.24k|        {
  210|  1.24k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  1.24k|        }
  212|  1.24k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  213|  1.24k|        {
  214|  1.24k|            oss << " time: " << ToUTCString(item.value.time);
  215|  1.24k|        }
  216|  1.24k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  217|  1.24k|    };
  218|       |
  219|  1.24k|    items.ForeachItem(logItem);
  220|       |
  221|  1.24k|    return IINField::Empty();
  222|  1.24k|}
_ZZN8opendnp314LoggingHandler8PrintVQTINS_18BinaryOutputStatusEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS6_IS2_EEE_clESE_:
  205|  33.6k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  33.6k|        std::ostringstream oss;
  207|  33.6k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  33.6k|        if (HasFlags(gv))
  ------------------
  |  Branch (208:13): [True: 4.40k, False: 29.2k]
  ------------------
  209|  4.40k|        {
  210|  4.40k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  4.40k|        }
  212|  33.6k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (212:13): [True: 923, False: 32.7k]
  |  Branch (212:36): [True: 0, False: 32.7k]
  ------------------
  213|    923|        {
  214|    923|            oss << " time: " << ToUTCString(item.value.time);
  215|    923|        }
  216|  33.6k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  33.6k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 33.6k]
  |  |  ------------------
  |  |   43|  33.6k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  217|  33.6k|    };
_ZN8opendnp314LoggingHandler8PrintVQTINS_7CounterEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEE:
  203|  2.29k|{
  204|  2.29k|    Indent i(*callbacks);
  205|  2.29k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  2.29k|        std::ostringstream oss;
  207|  2.29k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  2.29k|        if (HasFlags(gv))
  209|  2.29k|        {
  210|  2.29k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  2.29k|        }
  212|  2.29k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  213|  2.29k|        {
  214|  2.29k|            oss << " time: " << ToUTCString(item.value.time);
  215|  2.29k|        }
  216|  2.29k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  217|  2.29k|    };
  218|       |
  219|  2.29k|    items.ForeachItem(logItem);
  220|       |
  221|  2.29k|    return IINField::Empty();
  222|  2.29k|}
_ZZN8opendnp314LoggingHandler8PrintVQTINS_7CounterEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS6_IS2_EEE_clESE_:
  205|  8.01k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  8.01k|        std::ostringstream oss;
  207|  8.01k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  8.01k|        if (HasFlags(gv))
  ------------------
  |  Branch (208:13): [True: 5.84k, False: 2.16k]
  ------------------
  209|  5.84k|        {
  210|  5.84k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  5.84k|        }
  212|  8.01k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (212:13): [True: 1.50k, False: 6.50k]
  |  Branch (212:36): [True: 0, False: 6.50k]
  ------------------
  213|  1.50k|        {
  214|  1.50k|            oss << " time: " << ToUTCString(item.value.time);
  215|  1.50k|        }
  216|  8.01k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  8.01k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 8.01k]
  |  |  ------------------
  |  |   43|  8.01k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  217|  8.01k|    };
_ZN8opendnp314LoggingHandler8PrintVQTINS_13FrozenCounterEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEE:
  203|  2.69k|{
  204|  2.69k|    Indent i(*callbacks);
  205|  2.69k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  2.69k|        std::ostringstream oss;
  207|  2.69k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  2.69k|        if (HasFlags(gv))
  209|  2.69k|        {
  210|  2.69k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  2.69k|        }
  212|  2.69k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  213|  2.69k|        {
  214|  2.69k|            oss << " time: " << ToUTCString(item.value.time);
  215|  2.69k|        }
  216|  2.69k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  217|  2.69k|    };
  218|       |
  219|  2.69k|    items.ForeachItem(logItem);
  220|       |
  221|  2.69k|    return IINField::Empty();
  222|  2.69k|}
_ZZN8opendnp314LoggingHandler8PrintVQTINS_13FrozenCounterEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS6_IS2_EEE_clESE_:
  205|  10.4k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  10.4k|        std::ostringstream oss;
  207|  10.4k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  10.4k|        if (HasFlags(gv))
  ------------------
  |  Branch (208:13): [True: 8.17k, False: 2.27k]
  ------------------
  209|  8.17k|        {
  210|  8.17k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  8.17k|        }
  212|  10.4k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (212:13): [True: 3.44k, False: 6.99k]
  |  Branch (212:36): [True: 0, False: 6.99k]
  ------------------
  213|  3.44k|        {
  214|  3.44k|            oss << " time: " << ToUTCString(item.value.time);
  215|  3.44k|        }
  216|  10.4k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  10.4k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 10.4k]
  |  |  ------------------
  |  |   43|  10.4k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  217|  10.4k|    };
_ZN8opendnp314LoggingHandler8PrintVQTINS_6AnalogEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEE:
  203|  3.68k|{
  204|  3.68k|    Indent i(*callbacks);
  205|  3.68k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  3.68k|        std::ostringstream oss;
  207|  3.68k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  3.68k|        if (HasFlags(gv))
  209|  3.68k|        {
  210|  3.68k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  3.68k|        }
  212|  3.68k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  213|  3.68k|        {
  214|  3.68k|            oss << " time: " << ToUTCString(item.value.time);
  215|  3.68k|        }
  216|  3.68k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  217|  3.68k|    };
  218|       |
  219|  3.68k|    items.ForeachItem(logItem);
  220|       |
  221|  3.68k|    return IINField::Empty();
  222|  3.68k|}
_ZZN8opendnp314LoggingHandler8PrintVQTINS_6AnalogEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS6_IS2_EEE_clESE_:
  205|  12.7k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  12.7k|        std::ostringstream oss;
  207|  12.7k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  12.7k|        if (HasFlags(gv))
  ------------------
  |  Branch (208:13): [True: 11.0k, False: 1.70k]
  ------------------
  209|  11.0k|        {
  210|  11.0k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  11.0k|        }
  212|  12.7k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (212:13): [True: 2.29k, False: 10.4k]
  |  Branch (212:36): [True: 0, False: 10.4k]
  ------------------
  213|  2.29k|        {
  214|  2.29k|            oss << " time: " << ToUTCString(item.value.time);
  215|  2.29k|        }
  216|  12.7k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  12.7k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 12.7k]
  |  |  ------------------
  |  |   43|  12.7k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  217|  12.7k|    };
_ZN8opendnp314LoggingHandler8PrintVQTINS_18AnalogOutputStatusEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEE:
  203|  3.23k|{
  204|  3.23k|    Indent i(*callbacks);
  205|  3.23k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  3.23k|        std::ostringstream oss;
  207|  3.23k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  3.23k|        if (HasFlags(gv))
  209|  3.23k|        {
  210|  3.23k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  3.23k|        }
  212|  3.23k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  213|  3.23k|        {
  214|  3.23k|            oss << " time: " << ToUTCString(item.value.time);
  215|  3.23k|        }
  216|  3.23k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  217|  3.23k|    };
  218|       |
  219|  3.23k|    items.ForeachItem(logItem);
  220|       |
  221|  3.23k|    return IINField::Empty();
  222|  3.23k|}
_ZZN8opendnp314LoggingHandler8PrintVQTINS_18AnalogOutputStatusEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS6_IS2_EEE_clESE_:
  205|  13.1k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  13.1k|        std::ostringstream oss;
  207|  13.1k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  13.1k|        if (HasFlags(gv))
  ------------------
  |  Branch (208:13): [True: 13.1k, False: 0]
  ------------------
  209|  13.1k|        {
  210|  13.1k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  13.1k|        }
  212|  13.1k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (212:13): [True: 3.06k, False: 10.0k]
  |  Branch (212:36): [True: 0, False: 10.0k]
  ------------------
  213|  3.06k|        {
  214|  3.06k|            oss << " time: " << ToUTCString(item.value.time);
  215|  3.06k|        }
  216|  13.1k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  13.1k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 13.1k]
  |  |  ------------------
  |  |   43|  13.1k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  217|  13.1k|    };
_ZN8opendnp314LoggingHandler8PrintVQTINS_6BinaryEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEE:
  203|    858|{
  204|    858|    Indent i(*callbacks);
  205|    858|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|    858|        std::ostringstream oss;
  207|    858|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|    858|        if (HasFlags(gv))
  209|    858|        {
  210|    858|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|    858|        }
  212|    858|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  213|    858|        {
  214|    858|            oss << " time: " << ToUTCString(item.value.time);
  215|    858|        }
  216|    858|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  217|    858|    };
  218|       |
  219|    858|    items.ForeachItem(logItem);
  220|       |
  221|    858|    return IINField::Empty();
  222|    858|}
_ZZN8opendnp314LoggingHandler8PrintVQTINS_6BinaryEEENS_8IINFieldENS_14GroupVariationERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS6_IS2_EEE_clESE_:
  205|  3.57k|    auto logItem = [this, gv](const Indexed<T>& item) {
  206|  3.57k|        std::ostringstream oss;
  207|  3.57k|        oss << "[" << item.index << "] - value: " << item.value.value;
  208|  3.57k|        if (HasFlags(gv))
  ------------------
  |  Branch (208:13): [True: 3.57k, False: 0]
  ------------------
  209|  3.57k|        {
  210|  3.57k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  211|  3.57k|        }
  212|  3.57k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (212:13): [True: 1.03k, False: 2.53k]
  |  Branch (212:36): [True: 730, False: 1.80k]
  ------------------
  213|  1.76k|        {
  214|  1.76k|            oss << " time: " << ToUTCString(item.value.time);
  215|  1.76k|        }
  216|  3.57k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  3.57k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 3.57k]
  |  |  ------------------
  |  |   43|  3.57k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  217|  3.57k|    };
LoggingHandler.cpp:_ZN8opendnp314LoggingHandler17PrintVQTStringifyINS_15DoubleBitBinaryEZNS0_13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedIS2_EEEEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS6_INS7_IT_EEEERKT0_:
  243|    718|{
  244|    718|    Indent i(*callbacks);
  245|    718|    auto logItem = [this, gv, stringify](const Indexed<T>& item) {
  246|    718|        std::ostringstream oss;
  247|    718|        oss << "[" << item.index << "] - value: " << stringify(item.value.value);
  248|    718|        if (HasFlags(gv))
  249|    718|        {
  250|    718|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  251|    718|        }
  252|    718|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  253|    718|        {
  254|    718|            oss << " time: " << item.value.time.value;
  255|    718|        }
  256|    718|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  257|    718|    };
  258|       |
  259|    718|    items.ForeachItem(logItem);
  260|       |
  261|    718|    return IINField::Empty();
  262|    718|}
LoggingHandler.cpp:_ZZN8opendnp314LoggingHandler17PrintVQTStringifyINS_15DoubleBitBinaryEZNS0_13ProcessHeaderERKNS_12PrefixHeaderERKNS_11ICollectionINS_7IndexedIS2_EEEEE3$_0EENS_8IINFieldENS_14GroupVariationERKNS6_INS7_IT_EEEERKT0_ENKUlRKS8_E_clESO_:
  245|  3.74k|    auto logItem = [this, gv, stringify](const Indexed<T>& item) {
  246|  3.74k|        std::ostringstream oss;
  247|  3.74k|        oss << "[" << item.index << "] - value: " << stringify(item.value.value);
  248|  3.74k|        if (HasFlags(gv))
  ------------------
  |  Branch (248:13): [True: 3.74k, False: 0]
  ------------------
  249|  3.74k|        {
  250|  3.74k|            oss << " flags: 0x" << std::hex << ToHex(item.value.flags.value) << std::dec;
  251|  3.74k|        }
  252|  3.74k|        if (HasAbsoluteTime(gv) || HasRelativeTime(gv))
  ------------------
  |  Branch (252:13): [True: 571, False: 3.17k]
  |  Branch (252:36): [True: 1.48k, False: 1.69k]
  ------------------
  253|  2.05k|        {
  254|  2.05k|            oss << " time: " << item.value.time.value;
  255|  2.05k|        }
  256|  3.74k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  3.74k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 3.74k]
  |  |  ------------------
  |  |   43|  3.74k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  257|  3.74k|    };
_ZN8opendnp314LoggingHandler7PrintAOINS_17AnalogOutputInt16EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEE:
  225|    284|{
  226|    284|    Indent i(*callbacks);
  227|    284|    auto logItem = [this](const Indexed<T>& item) {
  228|    284|        std::ostringstream oss;
  229|    284|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|    284|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|    284|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  232|    284|    };
  233|       |
  234|    284|    items.ForeachItem(logItem);
  235|       |
  236|    284|    return IINField::Empty();
  237|    284|}
_ZZN8opendnp314LoggingHandler7PrintAOINS_17AnalogOutputInt16EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS5_IS2_EEE_clESD_:
  227|  1.50k|    auto logItem = [this](const Indexed<T>& item) {
  228|  1.50k|        std::ostringstream oss;
  229|  1.50k|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|  1.50k|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|  1.50k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  1.50k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 1.50k]
  |  |  ------------------
  |  |   43|  1.50k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  232|  1.50k|    };
_ZN8opendnp314LoggingHandler7PrintAOINS_17AnalogOutputInt32EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEE:
  225|    323|{
  226|    323|    Indent i(*callbacks);
  227|    323|    auto logItem = [this](const Indexed<T>& item) {
  228|    323|        std::ostringstream oss;
  229|    323|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|    323|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|    323|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  232|    323|    };
  233|       |
  234|    323|    items.ForeachItem(logItem);
  235|       |
  236|    323|    return IINField::Empty();
  237|    323|}
_ZZN8opendnp314LoggingHandler7PrintAOINS_17AnalogOutputInt32EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS5_IS2_EEE_clESD_:
  227|    736|    auto logItem = [this](const Indexed<T>& item) {
  228|    736|        std::ostringstream oss;
  229|    736|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|    736|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|    736|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|    736|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 736]
  |  |  ------------------
  |  |   43|    736|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  232|    736|    };
_ZN8opendnp314LoggingHandler7PrintAOINS_19AnalogOutputFloat32EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEE:
  225|    326|{
  226|    326|    Indent i(*callbacks);
  227|    326|    auto logItem = [this](const Indexed<T>& item) {
  228|    326|        std::ostringstream oss;
  229|    326|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|    326|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|    326|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  232|    326|    };
  233|       |
  234|    326|    items.ForeachItem(logItem);
  235|       |
  236|    326|    return IINField::Empty();
  237|    326|}
_ZZN8opendnp314LoggingHandler7PrintAOINS_19AnalogOutputFloat32EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS5_IS2_EEE_clESD_:
  227|  1.05k|    auto logItem = [this](const Indexed<T>& item) {
  228|  1.05k|        std::ostringstream oss;
  229|  1.05k|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|  1.05k|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|  1.05k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  1.05k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 1.05k]
  |  |  ------------------
  |  |   43|  1.05k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  232|  1.05k|    };
_ZN8opendnp314LoggingHandler7PrintAOINS_20AnalogOutputDouble64EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEE:
  225|    391|{
  226|    391|    Indent i(*callbacks);
  227|    391|    auto logItem = [this](const Indexed<T>& item) {
  228|    391|        std::ostringstream oss;
  229|    391|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|    391|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|    391|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  232|    391|    };
  233|       |
  234|    391|    items.ForeachItem(logItem);
  235|       |
  236|    391|    return IINField::Empty();
  237|    391|}
_ZZN8opendnp314LoggingHandler7PrintAOINS_20AnalogOutputDouble64EEENS_8IINFieldERKNS_11ICollectionINS_7IndexedIT_EEEEENKUlRKNS5_IS2_EEE_clESD_:
  227|  1.07k|    auto logItem = [this](const Indexed<T>& item) {
  228|  1.07k|        std::ostringstream oss;
  229|  1.07k|        oss << "[" << item.index << "] - value: " << item.value.value;
  230|  1.07k|        oss << " status: " << CommandStatusSpec::to_human_string(item.value.status);
  231|  1.07k|        SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
  ------------------
  |  |   42|  1.07k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 1.07k]
  |  |  ------------------
  |  |   43|  1.07k|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  232|  1.07k|    };

_ZN8opendnp315HasAbsoluteTimeENS_14GroupVariationE:
   37|   136k|{
   38|   136k|  switch(gv)
   39|   136k|  {
   40|  1.03k|    case(GroupVariation::Group2Var2):
  ------------------
  |  Branch (40:5): [True: 1.03k, False: 135k]
  ------------------
   41|  1.03k|        return true;
   42|    571|    case(GroupVariation::Group4Var2):
  ------------------
  |  Branch (42:5): [True: 571, False: 135k]
  ------------------
   43|    571|        return true;
   44|    923|    case(GroupVariation::Group11Var2):
  ------------------
  |  Branch (44:5): [True: 923, False: 135k]
  ------------------
   45|    923|        return true;
   46|    247|    case(GroupVariation::Group13Var2):
  ------------------
  |  Branch (46:5): [True: 247, False: 136k]
  ------------------
   47|    247|        return true;
   48|    734|    case(GroupVariation::Group21Var5):
  ------------------
  |  Branch (48:5): [True: 734, False: 135k]
  ------------------
   49|    734|        return true;
   50|  1.16k|    case(GroupVariation::Group21Var6):
  ------------------
  |  Branch (50:5): [True: 1.16k, False: 135k]
  ------------------
   51|  1.16k|        return true;
   52|    650|    case(GroupVariation::Group22Var5):
  ------------------
  |  Branch (52:5): [True: 650, False: 135k]
  ------------------
   53|    650|        return true;
   54|    853|    case(GroupVariation::Group22Var6):
  ------------------
  |  Branch (54:5): [True: 853, False: 135k]
  ------------------
   55|    853|        return true;
   56|    748|    case(GroupVariation::Group23Var5):
  ------------------
  |  Branch (56:5): [True: 748, False: 135k]
  ------------------
   57|    748|        return true;
   58|    800|    case(GroupVariation::Group23Var6):
  ------------------
  |  Branch (58:5): [True: 800, False: 135k]
  ------------------
   59|    800|        return true;
   60|    556|    case(GroupVariation::Group32Var3):
  ------------------
  |  Branch (60:5): [True: 556, False: 135k]
  ------------------
   61|    556|        return true;
   62|    689|    case(GroupVariation::Group32Var4):
  ------------------
  |  Branch (62:5): [True: 689, False: 135k]
  ------------------
   63|    689|        return true;
   64|    453|    case(GroupVariation::Group32Var7):
  ------------------
  |  Branch (64:5): [True: 453, False: 135k]
  ------------------
   65|    453|        return true;
   66|    600|    case(GroupVariation::Group32Var8):
  ------------------
  |  Branch (66:5): [True: 600, False: 135k]
  ------------------
   67|    600|        return true;
   68|  1.05k|    case(GroupVariation::Group42Var3):
  ------------------
  |  Branch (68:5): [True: 1.05k, False: 135k]
  ------------------
   69|  1.05k|        return true;
   70|    789|    case(GroupVariation::Group42Var4):
  ------------------
  |  Branch (70:5): [True: 789, False: 135k]
  ------------------
   71|    789|        return true;
   72|    801|    case(GroupVariation::Group42Var7):
  ------------------
  |  Branch (72:5): [True: 801, False: 135k]
  ------------------
   73|    801|        return true;
   74|    422|    case(GroupVariation::Group42Var8):
  ------------------
  |  Branch (74:5): [True: 422, False: 135k]
  ------------------
   75|    422|        return true;
   76|    280|    case(GroupVariation::Group43Var3):
  ------------------
  |  Branch (76:5): [True: 280, False: 136k]
  ------------------
   77|    280|        return true;
   78|    231|    case(GroupVariation::Group43Var4):
  ------------------
  |  Branch (78:5): [True: 231, False: 136k]
  ------------------
   79|    231|        return true;
   80|    234|    case(GroupVariation::Group43Var7):
  ------------------
  |  Branch (80:5): [True: 234, False: 136k]
  ------------------
   81|    234|        return true;
   82|    259|    case(GroupVariation::Group43Var8):
  ------------------
  |  Branch (82:5): [True: 259, False: 136k]
  ------------------
   83|    259|        return true;
   84|      0|    case(GroupVariation::Group50Var1):
  ------------------
  |  Branch (84:5): [True: 0, False: 136k]
  ------------------
   85|      0|        return true;
   86|      0|    case(GroupVariation::Group50Var3):
  ------------------
  |  Branch (86:5): [True: 0, False: 136k]
  ------------------
   87|      0|        return true;
   88|      0|    case(GroupVariation::Group50Var4):
  ------------------
  |  Branch (88:5): [True: 0, False: 136k]
  ------------------
   89|      0|        return true;
   90|      0|    case(GroupVariation::Group51Var1):
  ------------------
  |  Branch (90:5): [True: 0, False: 136k]
  ------------------
   91|      0|        return true;
   92|      0|    case(GroupVariation::Group51Var2):
  ------------------
  |  Branch (92:5): [True: 0, False: 136k]
  ------------------
   93|      0|        return true;
   94|   122k|    default:
  ------------------
  |  Branch (94:5): [True: 122k, False: 14.1k]
  ------------------
   95|   122k|      return false;
   96|   136k|  }
   97|   136k|}
_ZN8opendnp315HasRelativeTimeENS_14GroupVariationE:
   99|   120k|{
  100|   120k|  switch(gv)
  101|   120k|  {
  102|    730|    case(GroupVariation::Group2Var3):
  ------------------
  |  Branch (102:5): [True: 730, False: 119k]
  ------------------
  103|    730|        return true;
  104|  1.48k|    case(GroupVariation::Group4Var3):
  ------------------
  |  Branch (104:5): [True: 1.48k, False: 119k]
  ------------------
  105|  1.48k|        return true;
  106|      0|    case(GroupVariation::Group52Var1):
  ------------------
  |  Branch (106:5): [True: 0, False: 120k]
  ------------------
  107|      0|        return true;
  108|      0|    case(GroupVariation::Group52Var2):
  ------------------
  |  Branch (108:5): [True: 0, False: 120k]
  ------------------
  109|      0|        return true;
  110|   118k|    default:
  ------------------
  |  Branch (110:5): [True: 118k, False: 2.21k]
  ------------------
  111|   118k|      return false;
  112|   120k|  }
  113|   120k|}
_ZN8opendnp38HasFlagsENS_14GroupVariationE:
  115|   133k|{
  116|   133k|  switch(gv)
  117|   133k|  {
  118|  3.22k|    case(GroupVariation::Group1Var2):
  ------------------
  |  Branch (118:5): [True: 3.22k, False: 130k]
  ------------------
  119|  3.22k|        return true;
  120|  1.80k|    case(GroupVariation::Group2Var1):
  ------------------
  |  Branch (120:5): [True: 1.80k, False: 131k]
  ------------------
  121|  1.80k|        return true;
  122|  1.03k|    case(GroupVariation::Group2Var2):
  ------------------
  |  Branch (122:5): [True: 1.03k, False: 132k]
  ------------------
  123|  1.03k|        return true;
  124|    730|    case(GroupVariation::Group2Var3):
  ------------------
  |  Branch (124:5): [True: 730, False: 132k]
  ------------------
  125|    730|        return true;
  126|  1.84k|    case(GroupVariation::Group3Var2):
  ------------------
  |  Branch (126:5): [True: 1.84k, False: 131k]
  ------------------
  127|  1.84k|        return true;
  128|  1.69k|    case(GroupVariation::Group4Var1):
  ------------------
  |  Branch (128:5): [True: 1.69k, False: 131k]
  ------------------
  129|  1.69k|        return true;
  130|    571|    case(GroupVariation::Group4Var2):
  ------------------
  |  Branch (130:5): [True: 571, False: 132k]
  ------------------
  131|    571|        return true;
  132|  1.48k|    case(GroupVariation::Group4Var3):
  ------------------
  |  Branch (132:5): [True: 1.48k, False: 131k]
  ------------------
  133|  1.48k|        return true;
  134|  1.36k|    case(GroupVariation::Group10Var2):
  ------------------
  |  Branch (134:5): [True: 1.36k, False: 132k]
  ------------------
  135|  1.36k|        return true;
  136|  2.12k|    case(GroupVariation::Group11Var1):
  ------------------
  |  Branch (136:5): [True: 2.12k, False: 131k]
  ------------------
  137|  2.12k|        return true;
  138|    923|    case(GroupVariation::Group11Var2):
  ------------------
  |  Branch (138:5): [True: 923, False: 132k]
  ------------------
  139|    923|        return true;
  140|      0|    case(GroupVariation::Group13Var1):
  ------------------
  |  Branch (140:5): [True: 0, False: 133k]
  ------------------
  141|      0|        return true;
  142|      0|    case(GroupVariation::Group13Var2):
  ------------------
  |  Branch (142:5): [True: 0, False: 133k]
  ------------------
  143|      0|        return true;
  144|  1.37k|    case(GroupVariation::Group20Var1):
  ------------------
  |  Branch (144:5): [True: 1.37k, False: 132k]
  ------------------
  145|  1.37k|        return true;
  146|  1.03k|    case(GroupVariation::Group20Var2):
  ------------------
  |  Branch (146:5): [True: 1.03k, False: 132k]
  ------------------
  147|  1.03k|        return true;
  148|  1.70k|    case(GroupVariation::Group21Var1):
  ------------------
  |  Branch (148:5): [True: 1.70k, False: 131k]
  ------------------
  149|  1.70k|        return true;
  150|    965|    case(GroupVariation::Group21Var2):
  ------------------
  |  Branch (150:5): [True: 965, False: 132k]
  ------------------
  151|    965|        return true;
  152|    734|    case(GroupVariation::Group21Var5):
  ------------------
  |  Branch (152:5): [True: 734, False: 132k]
  ------------------
  153|    734|        return true;
  154|  1.16k|    case(GroupVariation::Group21Var6):
  ------------------
  |  Branch (154:5): [True: 1.16k, False: 132k]
  ------------------
  155|  1.16k|        return true;
  156|    963|    case(GroupVariation::Group22Var1):
  ------------------
  |  Branch (156:5): [True: 963, False: 132k]
  ------------------
  157|    963|        return true;
  158|    964|    case(GroupVariation::Group22Var2):
  ------------------
  |  Branch (158:5): [True: 964, False: 132k]
  ------------------
  159|    964|        return true;
  160|    650|    case(GroupVariation::Group22Var5):
  ------------------
  |  Branch (160:5): [True: 650, False: 132k]
  ------------------
  161|    650|        return true;
  162|    853|    case(GroupVariation::Group22Var6):
  ------------------
  |  Branch (162:5): [True: 853, False: 132k]
  ------------------
  163|    853|        return true;
  164|    958|    case(GroupVariation::Group23Var1):
  ------------------
  |  Branch (164:5): [True: 958, False: 132k]
  ------------------
  165|    958|        return true;
  166|  1.09k|    case(GroupVariation::Group23Var2):
  ------------------
  |  Branch (166:5): [True: 1.09k, False: 132k]
  ------------------
  167|  1.09k|        return true;
  168|    748|    case(GroupVariation::Group23Var5):
  ------------------
  |  Branch (168:5): [True: 748, False: 132k]
  ------------------
  169|    748|        return true;
  170|    800|    case(GroupVariation::Group23Var6):
  ------------------
  |  Branch (170:5): [True: 800, False: 132k]
  ------------------
  171|    800|        return true;
  172|  1.26k|    case(GroupVariation::Group30Var1):
  ------------------
  |  Branch (172:5): [True: 1.26k, False: 132k]
  ------------------
  173|  1.26k|        return true;
  174|  1.84k|    case(GroupVariation::Group30Var2):
  ------------------
  |  Branch (174:5): [True: 1.84k, False: 131k]
  ------------------
  175|  1.84k|        return true;
  176|  1.73k|    case(GroupVariation::Group30Var5):
  ------------------
  |  Branch (176:5): [True: 1.73k, False: 131k]
  ------------------
  177|  1.73k|        return true;
  178|    834|    case(GroupVariation::Group30Var6):
  ------------------
  |  Branch (178:5): [True: 834, False: 132k]
  ------------------
  179|    834|        return true;
  180|    482|    case(GroupVariation::Group32Var1):
  ------------------
  |  Branch (180:5): [True: 482, False: 132k]
  ------------------
  181|    482|        return true;
  182|  1.02k|    case(GroupVariation::Group32Var2):
  ------------------
  |  Branch (182:5): [True: 1.02k, False: 132k]
  ------------------
  183|  1.02k|        return true;
  184|    556|    case(GroupVariation::Group32Var3):
  ------------------
  |  Branch (184:5): [True: 556, False: 132k]
  ------------------
  185|    556|        return true;
  186|    689|    case(GroupVariation::Group32Var4):
  ------------------
  |  Branch (186:5): [True: 689, False: 132k]
  ------------------
  187|    689|        return true;
  188|    701|    case(GroupVariation::Group32Var5):
  ------------------
  |  Branch (188:5): [True: 701, False: 132k]
  ------------------
  189|    701|        return true;
  190|    836|    case(GroupVariation::Group32Var6):
  ------------------
  |  Branch (190:5): [True: 836, False: 132k]
  ------------------
  191|    836|        return true;
  192|    453|    case(GroupVariation::Group32Var7):
  ------------------
  |  Branch (192:5): [True: 453, False: 133k]
  ------------------
  193|    453|        return true;
  194|    600|    case(GroupVariation::Group32Var8):
  ------------------
  |  Branch (194:5): [True: 600, False: 132k]
  ------------------
  195|    600|        return true;
  196|  1.32k|    case(GroupVariation::Group40Var1):
  ------------------
  |  Branch (196:5): [True: 1.32k, False: 132k]
  ------------------
  197|  1.32k|        return true;
  198|  1.00k|    case(GroupVariation::Group40Var2):
  ------------------
  |  Branch (198:5): [True: 1.00k, False: 132k]
  ------------------
  199|  1.00k|        return true;
  200|  2.67k|    case(GroupVariation::Group40Var3):
  ------------------
  |  Branch (200:5): [True: 2.67k, False: 130k]
  ------------------
  201|  2.67k|        return true;
  202|  1.76k|    case(GroupVariation::Group40Var4):
  ------------------
  |  Branch (202:5): [True: 1.76k, False: 131k]
  ------------------
  203|  1.76k|        return true;
  204|    655|    case(GroupVariation::Group42Var1):
  ------------------
  |  Branch (204:5): [True: 655, False: 132k]
  ------------------
  205|    655|        return true;
  206|    732|    case(GroupVariation::Group42Var2):
  ------------------
  |  Branch (206:5): [True: 732, False: 132k]
  ------------------
  207|    732|        return true;
  208|  1.05k|    case(GroupVariation::Group42Var3):
  ------------------
  |  Branch (208:5): [True: 1.05k, False: 132k]
  ------------------
  209|  1.05k|        return true;
  210|    789|    case(GroupVariation::Group42Var4):
  ------------------
  |  Branch (210:5): [True: 789, False: 132k]
  ------------------
  211|    789|        return true;
  212|  1.06k|    case(GroupVariation::Group42Var5):
  ------------------
  |  Branch (212:5): [True: 1.06k, False: 132k]
  ------------------
  213|  1.06k|        return true;
  214|    886|    case(GroupVariation::Group42Var6):
  ------------------
  |  Branch (214:5): [True: 886, False: 132k]
  ------------------
  215|    886|        return true;
  216|    801|    case(GroupVariation::Group42Var7):
  ------------------
  |  Branch (216:5): [True: 801, False: 132k]
  ------------------
  217|    801|        return true;
  218|    422|    case(GroupVariation::Group42Var8):
  ------------------
  |  Branch (218:5): [True: 422, False: 133k]
  ------------------
  219|    422|        return true;
  220|  78.4k|    default:
  ------------------
  |  Branch (220:5): [True: 78.4k, False: 54.9k]
  ------------------
  221|  78.4k|      return false;
  222|   133k|  }
  223|   133k|}

_ZN8opendnp317CommandStatusSpec9from_typeEh:
   43|  19.3k|{
   44|  19.3k|  switch(arg)
   45|  19.3k|  {
   46|  2.73k|    case(0):
  ------------------
  |  Branch (46:5): [True: 2.73k, False: 16.6k]
  ------------------
   47|  2.73k|      return CommandStatus::SUCCESS;
   48|    868|    case(1):
  ------------------
  |  Branch (48:5): [True: 868, False: 18.5k]
  ------------------
   49|    868|      return CommandStatus::TIMEOUT;
   50|    394|    case(2):
  ------------------
  |  Branch (50:5): [True: 394, False: 19.0k]
  ------------------
   51|    394|      return CommandStatus::NO_SELECT;
   52|    362|    case(3):
  ------------------
  |  Branch (52:5): [True: 362, False: 19.0k]
  ------------------
   53|    362|      return CommandStatus::FORMAT_ERROR;
   54|    379|    case(4):
  ------------------
  |  Branch (54:5): [True: 379, False: 19.0k]
  ------------------
   55|    379|      return CommandStatus::NOT_SUPPORTED;
   56|    661|    case(5):
  ------------------
  |  Branch (56:5): [True: 661, False: 18.7k]
  ------------------
   57|    661|      return CommandStatus::ALREADY_ACTIVE;
   58|    396|    case(6):
  ------------------
  |  Branch (58:5): [True: 396, False: 18.9k]
  ------------------
   59|    396|      return CommandStatus::HARDWARE_ERROR;
   60|    367|    case(7):
  ------------------
  |  Branch (60:5): [True: 367, False: 19.0k]
  ------------------
   61|    367|      return CommandStatus::LOCAL;
   62|    332|    case(8):
  ------------------
  |  Branch (62:5): [True: 332, False: 19.0k]
  ------------------
   63|    332|      return CommandStatus::TOO_MANY_OPS;
   64|    342|    case(9):
  ------------------
  |  Branch (64:5): [True: 342, False: 19.0k]
  ------------------
   65|    342|      return CommandStatus::NOT_AUTHORIZED;
   66|    294|    case(10):
  ------------------
  |  Branch (66:5): [True: 294, False: 19.1k]
  ------------------
   67|    294|      return CommandStatus::AUTOMATION_INHIBIT;
   68|    383|    case(11):
  ------------------
  |  Branch (68:5): [True: 383, False: 19.0k]
  ------------------
   69|    383|      return CommandStatus::PROCESSING_LIMITED;
   70|    352|    case(12):
  ------------------
  |  Branch (70:5): [True: 352, False: 19.0k]
  ------------------
   71|    352|      return CommandStatus::OUT_OF_RANGE;
   72|    299|    case(13):
  ------------------
  |  Branch (72:5): [True: 299, False: 19.0k]
  ------------------
   73|    299|      return CommandStatus::DOWNSTREAM_LOCAL;
   74|    339|    case(14):
  ------------------
  |  Branch (74:5): [True: 339, False: 19.0k]
  ------------------
   75|    339|      return CommandStatus::ALREADY_COMPLETE;
   76|    475|    case(15):
  ------------------
  |  Branch (76:5): [True: 475, False: 18.9k]
  ------------------
   77|    475|      return CommandStatus::BLOCKED;
   78|    256|    case(16):
  ------------------
  |  Branch (78:5): [True: 256, False: 19.1k]
  ------------------
   79|    256|      return CommandStatus::CANCELLED;
   80|    361|    case(17):
  ------------------
  |  Branch (80:5): [True: 361, False: 19.0k]
  ------------------
   81|    361|      return CommandStatus::BLOCKED_OTHER_MASTER;
   82|    360|    case(18):
  ------------------
  |  Branch (82:5): [True: 360, False: 19.0k]
  ------------------
   83|    360|      return CommandStatus::DOWNSTREAM_FAIL;
   84|    440|    case(126):
  ------------------
  |  Branch (84:5): [True: 440, False: 18.9k]
  ------------------
   85|    440|      return CommandStatus::NON_PARTICIPATING;
   86|  9.00k|    default:
  ------------------
  |  Branch (86:5): [True: 9.00k, False: 10.3k]
  ------------------
   87|  9.00k|      return CommandStatus::UNDEFINED;
   88|  19.3k|  }
   89|  19.3k|}
_ZN8opendnp317CommandStatusSpec15to_human_stringENS_13CommandStatusE:
  141|  19.3k|{
  142|  19.3k|  switch(arg)
  143|  19.3k|  {
  144|  2.73k|    case(CommandStatus::SUCCESS):
  ------------------
  |  Branch (144:5): [True: 2.73k, False: 16.6k]
  ------------------
  145|  2.73k|      return "SUCCESS";
  146|    868|    case(CommandStatus::TIMEOUT):
  ------------------
  |  Branch (146:5): [True: 868, False: 18.5k]
  ------------------
  147|    868|      return "TIMEOUT";
  148|    394|    case(CommandStatus::NO_SELECT):
  ------------------
  |  Branch (148:5): [True: 394, False: 19.0k]
  ------------------
  149|    394|      return "NO_SELECT";
  150|    362|    case(CommandStatus::FORMAT_ERROR):
  ------------------
  |  Branch (150:5): [True: 362, False: 19.0k]
  ------------------
  151|    362|      return "FORMAT_ERROR";
  152|    379|    case(CommandStatus::NOT_SUPPORTED):
  ------------------
  |  Branch (152:5): [True: 379, False: 19.0k]
  ------------------
  153|    379|      return "NOT_SUPPORTED";
  154|    661|    case(CommandStatus::ALREADY_ACTIVE):
  ------------------
  |  Branch (154:5): [True: 661, False: 18.7k]
  ------------------
  155|    661|      return "ALREADY_ACTIVE";
  156|    396|    case(CommandStatus::HARDWARE_ERROR):
  ------------------
  |  Branch (156:5): [True: 396, False: 18.9k]
  ------------------
  157|    396|      return "HARDWARE_ERROR";
  158|    367|    case(CommandStatus::LOCAL):
  ------------------
  |  Branch (158:5): [True: 367, False: 19.0k]
  ------------------
  159|    367|      return "LOCAL";
  160|    332|    case(CommandStatus::TOO_MANY_OPS):
  ------------------
  |  Branch (160:5): [True: 332, False: 19.0k]
  ------------------
  161|    332|      return "TOO_MANY_OPS";
  162|    342|    case(CommandStatus::NOT_AUTHORIZED):
  ------------------
  |  Branch (162:5): [True: 342, False: 19.0k]
  ------------------
  163|    342|      return "NOT_AUTHORIZED";
  164|    294|    case(CommandStatus::AUTOMATION_INHIBIT):
  ------------------
  |  Branch (164:5): [True: 294, False: 19.1k]
  ------------------
  165|    294|      return "AUTOMATION_INHIBIT";
  166|    383|    case(CommandStatus::PROCESSING_LIMITED):
  ------------------
  |  Branch (166:5): [True: 383, False: 19.0k]
  ------------------
  167|    383|      return "PROCESSING_LIMITED";
  168|    352|    case(CommandStatus::OUT_OF_RANGE):
  ------------------
  |  Branch (168:5): [True: 352, False: 19.0k]
  ------------------
  169|    352|      return "OUT_OF_RANGE";
  170|    299|    case(CommandStatus::DOWNSTREAM_LOCAL):
  ------------------
  |  Branch (170:5): [True: 299, False: 19.0k]
  ------------------
  171|    299|      return "DOWNSTREAM_LOCAL";
  172|    339|    case(CommandStatus::ALREADY_COMPLETE):
  ------------------
  |  Branch (172:5): [True: 339, False: 19.0k]
  ------------------
  173|    339|      return "ALREADY_COMPLETE";
  174|    475|    case(CommandStatus::BLOCKED):
  ------------------
  |  Branch (174:5): [True: 475, False: 18.9k]
  ------------------
  175|    475|      return "BLOCKED";
  176|    256|    case(CommandStatus::CANCELLED):
  ------------------
  |  Branch (176:5): [True: 256, False: 19.1k]
  ------------------
  177|    256|      return "CANCELLED";
  178|    361|    case(CommandStatus::BLOCKED_OTHER_MASTER):
  ------------------
  |  Branch (178:5): [True: 361, False: 19.0k]
  ------------------
  179|    361|      return "BLOCKED_OTHER_MASTER";
  180|    360|    case(CommandStatus::DOWNSTREAM_FAIL):
  ------------------
  |  Branch (180:5): [True: 360, False: 19.0k]
  ------------------
  181|    360|      return "DOWNSTREAM_FAIL";
  182|    440|    case(CommandStatus::NON_PARTICIPATING):
  ------------------
  |  Branch (182:5): [True: 440, False: 18.9k]
  ------------------
  183|    440|      return "NON_PARTICIPATING";
  184|  9.00k|    default:
  ------------------
  |  Branch (184:5): [True: 9.00k, False: 10.3k]
  ------------------
  185|  9.00k|      return "UNDEFINED";
  186|  19.3k|  }
  187|  19.3k|}

_ZN8opendnp313DoubleBitSpec7to_typeENS_9DoubleBitE:
   38|  9.99k|{
   39|  9.99k|  return static_cast<uint8_t>(arg);
   40|  9.99k|}
_ZN8opendnp313DoubleBitSpec9from_typeEh:
   43|  15.5k|{
   44|  15.5k|  switch(arg)
   45|  15.5k|  {
   46|  7.05k|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 7.05k, False: 8.52k]
  ------------------
   47|  7.05k|      return DoubleBit::INTERMEDIATE;
   48|  2.32k|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 2.32k, False: 13.2k]
  ------------------
   49|  2.32k|      return DoubleBit::DETERMINED_OFF;
   50|  1.88k|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 1.88k, False: 13.6k]
  ------------------
   51|  1.88k|      return DoubleBit::DETERMINED_ON;
   52|  4.31k|    default:
  ------------------
  |  Branch (52:5): [True: 4.31k, False: 11.2k]
  ------------------
   53|  4.31k|      return DoubleBit::INDETERMINATE;
   54|  15.5k|  }
   55|  15.5k|}
_ZN8opendnp313DoubleBitSpec15to_human_stringENS_9DoubleBitE:
   73|  15.5k|{
   74|  15.5k|  switch(arg)
   75|  15.5k|  {
   76|  7.05k|    case(DoubleBit::INTERMEDIATE):
  ------------------
  |  Branch (76:5): [True: 7.05k, False: 8.52k]
  ------------------
   77|  7.05k|      return "INTERMEDIATE";
   78|  2.32k|    case(DoubleBit::DETERMINED_OFF):
  ------------------
  |  Branch (78:5): [True: 2.32k, False: 13.2k]
  ------------------
   79|  2.32k|      return "DETERMINED_OFF";
   80|  1.88k|    case(DoubleBit::DETERMINED_ON):
  ------------------
  |  Branch (80:5): [True: 1.88k, False: 13.6k]
  ------------------
   81|  1.88k|      return "DETERMINED_ON";
   82|  4.31k|    default:
  ------------------
  |  Branch (82:5): [True: 4.31k, False: 11.2k]
  ------------------
   83|  4.31k|      return "INDETERMINATE";
   84|  15.5k|  }
   85|  15.5k|}

_ZN8opendnp316FunctionCodeSpec9from_typeEh:
   43|  69.0k|{
   44|  69.0k|  switch(arg)
   45|  69.0k|  {
   46|  3.70k|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 3.70k, False: 65.3k]
  ------------------
   47|  3.70k|      return FunctionCode::CONFIRM;
   48|  2.18k|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 2.18k, False: 66.8k]
  ------------------
   49|  2.18k|      return FunctionCode::READ;
   50|  1.69k|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 1.69k, False: 67.3k]
  ------------------
   51|  1.69k|      return FunctionCode::WRITE;
   52|  1.12k|    case(0x3):
  ------------------
  |  Branch (52:5): [True: 1.12k, False: 67.8k]
  ------------------
   53|  1.12k|      return FunctionCode::SELECT;
   54|  1.20k|    case(0x4):
  ------------------
  |  Branch (54:5): [True: 1.20k, False: 67.8k]
  ------------------
   55|  1.20k|      return FunctionCode::OPERATE;
   56|  1.02k|    case(0x5):
  ------------------
  |  Branch (56:5): [True: 1.02k, False: 67.9k]
  ------------------
   57|  1.02k|      return FunctionCode::DIRECT_OPERATE;
   58|  2.90k|    case(0x6):
  ------------------
  |  Branch (58:5): [True: 2.90k, False: 66.1k]
  ------------------
   59|  2.90k|      return FunctionCode::DIRECT_OPERATE_NR;
   60|    906|    case(0x7):
  ------------------
  |  Branch (60:5): [True: 906, False: 68.1k]
  ------------------
   61|    906|      return FunctionCode::IMMED_FREEZE;
   62|  1.03k|    case(0x8):
  ------------------
  |  Branch (62:5): [True: 1.03k, False: 67.9k]
  ------------------
   63|  1.03k|      return FunctionCode::IMMED_FREEZE_NR;
   64|    914|    case(0x9):
  ------------------
  |  Branch (64:5): [True: 914, False: 68.1k]
  ------------------
   65|    914|      return FunctionCode::FREEZE_CLEAR;
   66|    498|    case(0xA):
  ------------------
  |  Branch (66:5): [True: 498, False: 68.5k]
  ------------------
   67|    498|      return FunctionCode::FREEZE_CLEAR_NR;
   68|    562|    case(0xB):
  ------------------
  |  Branch (68:5): [True: 562, False: 68.4k]
  ------------------
   69|    562|      return FunctionCode::FREEZE_AT_TIME;
   70|    676|    case(0xC):
  ------------------
  |  Branch (70:5): [True: 676, False: 68.3k]
  ------------------
   71|    676|      return FunctionCode::FREEZE_AT_TIME_NR;
   72|    392|    case(0xD):
  ------------------
  |  Branch (72:5): [True: 392, False: 68.6k]
  ------------------
   73|    392|      return FunctionCode::COLD_RESTART;
   74|    632|    case(0xE):
  ------------------
  |  Branch (74:5): [True: 632, False: 68.3k]
  ------------------
   75|    632|      return FunctionCode::WARM_RESTART;
   76|  1.20k|    case(0xF):
  ------------------
  |  Branch (76:5): [True: 1.20k, False: 67.8k]
  ------------------
   77|  1.20k|      return FunctionCode::INITIALIZE_DATA;
   78|    314|    case(0x10):
  ------------------
  |  Branch (78:5): [True: 314, False: 68.7k]
  ------------------
   79|    314|      return FunctionCode::INITIALIZE_APPLICATION;
   80|    510|    case(0x11):
  ------------------
  |  Branch (80:5): [True: 510, False: 68.5k]
  ------------------
   81|    510|      return FunctionCode::START_APPLICATION;
   82|  1.48k|    case(0x12):
  ------------------
  |  Branch (82:5): [True: 1.48k, False: 67.5k]
  ------------------
   83|  1.48k|      return FunctionCode::STOP_APPLICATION;
   84|    706|    case(0x13):
  ------------------
  |  Branch (84:5): [True: 706, False: 68.3k]
  ------------------
   85|    706|      return FunctionCode::SAVE_CONFIGURATION;
   86|    496|    case(0x14):
  ------------------
  |  Branch (86:5): [True: 496, False: 68.5k]
  ------------------
   87|    496|      return FunctionCode::ENABLE_UNSOLICITED;
   88|    354|    case(0x15):
  ------------------
  |  Branch (88:5): [True: 354, False: 68.6k]
  ------------------
   89|    354|      return FunctionCode::DISABLE_UNSOLICITED;
   90|    384|    case(0x16):
  ------------------
  |  Branch (90:5): [True: 384, False: 68.6k]
  ------------------
   91|    384|      return FunctionCode::ASSIGN_CLASS;
   92|    348|    case(0x17):
  ------------------
  |  Branch (92:5): [True: 348, False: 68.6k]
  ------------------
   93|    348|      return FunctionCode::DELAY_MEASURE;
   94|    670|    case(0x18):
  ------------------
  |  Branch (94:5): [True: 670, False: 68.3k]
  ------------------
   95|    670|      return FunctionCode::RECORD_CURRENT_TIME;
   96|    608|    case(0x19):
  ------------------
  |  Branch (96:5): [True: 608, False: 68.4k]
  ------------------
   97|    608|      return FunctionCode::OPEN_FILE;
   98|    274|    case(0x1A):
  ------------------
  |  Branch (98:5): [True: 274, False: 68.7k]
  ------------------
   99|    274|      return FunctionCode::CLOSE_FILE;
  100|    526|    case(0x1B):
  ------------------
  |  Branch (100:5): [True: 526, False: 68.4k]
  ------------------
  101|    526|      return FunctionCode::DELETE_FILE;
  102|    868|    case(0x1C):
  ------------------
  |  Branch (102:5): [True: 868, False: 68.1k]
  ------------------
  103|    868|      return FunctionCode::GET_FILE_INFO;
  104|    600|    case(0x1D):
  ------------------
  |  Branch (104:5): [True: 600, False: 68.4k]
  ------------------
  105|    600|      return FunctionCode::AUTHENTICATE_FILE;
  106|    978|    case(0x1E):
  ------------------
  |  Branch (106:5): [True: 978, False: 68.0k]
  ------------------
  107|    978|      return FunctionCode::ABORT_FILE;
  108|    784|    case(0x20):
  ------------------
  |  Branch (108:5): [True: 784, False: 68.2k]
  ------------------
  109|    784|      return FunctionCode::AUTH_REQUEST;
  110|  1.66k|    case(0x21):
  ------------------
  |  Branch (110:5): [True: 1.66k, False: 67.3k]
  ------------------
  111|  1.66k|      return FunctionCode::AUTH_REQUEST_NO_ACK;
  112|    753|    case(0x81):
  ------------------
  |  Branch (112:5): [True: 753, False: 68.2k]
  ------------------
  113|    753|      return FunctionCode::RESPONSE;
  114|    886|    case(0x82):
  ------------------
  |  Branch (114:5): [True: 886, False: 68.1k]
  ------------------
  115|    886|      return FunctionCode::UNSOLICITED_RESPONSE;
  116|    981|    case(0x83):
  ------------------
  |  Branch (116:5): [True: 981, False: 68.0k]
  ------------------
  117|    981|      return FunctionCode::AUTH_RESPONSE;
  118|  34.1k|    default:
  ------------------
  |  Branch (118:5): [True: 34.1k, False: 34.8k]
  ------------------
  119|  34.1k|      return FunctionCode::UNKNOWN;
  120|  69.0k|  }
  121|  69.0k|}

_ZN8opendnp318GroupVariationSpec9from_typeEt:
   43|  62.1k|{
   44|  62.1k|  switch(arg)
   45|  62.1k|  {
   46|    364|    case(0x100):
  ------------------
  |  Branch (46:5): [True: 364, False: 61.7k]
  ------------------
   47|    364|      return GroupVariation::Group1Var0;
   48|  1.18k|    case(0x101):
  ------------------
  |  Branch (48:5): [True: 1.18k, False: 60.9k]
  ------------------
   49|  1.18k|      return GroupVariation::Group1Var1;
   50|    773|    case(0x102):
  ------------------
  |  Branch (50:5): [True: 773, False: 61.3k]
  ------------------
   51|    773|      return GroupVariation::Group1Var2;
   52|    268|    case(0x200):
  ------------------
  |  Branch (52:5): [True: 268, False: 61.8k]
  ------------------
   53|    268|      return GroupVariation::Group2Var0;
   54|    475|    case(0x201):
  ------------------
  |  Branch (54:5): [True: 475, False: 61.6k]
  ------------------
   55|    475|      return GroupVariation::Group2Var1;
   56|    631|    case(0x202):
  ------------------
  |  Branch (56:5): [True: 631, False: 61.4k]
  ------------------
   57|    631|      return GroupVariation::Group2Var2;
   58|    463|    case(0x203):
  ------------------
  |  Branch (58:5): [True: 463, False: 61.6k]
  ------------------
   59|    463|      return GroupVariation::Group2Var3;
   60|    256|    case(0x300):
  ------------------
  |  Branch (60:5): [True: 256, False: 61.8k]
  ------------------
   61|    256|      return GroupVariation::Group3Var0;
   62|  1.14k|    case(0x301):
  ------------------
  |  Branch (62:5): [True: 1.14k, False: 60.9k]
  ------------------
   63|  1.14k|      return GroupVariation::Group3Var1;
   64|    524|    case(0x302):
  ------------------
  |  Branch (64:5): [True: 524, False: 61.6k]
  ------------------
   65|    524|      return GroupVariation::Group3Var2;
   66|    237|    case(0x400):
  ------------------
  |  Branch (66:5): [True: 237, False: 61.8k]
  ------------------
   67|    237|      return GroupVariation::Group4Var0;
   68|    330|    case(0x401):
  ------------------
  |  Branch (68:5): [True: 330, False: 61.7k]
  ------------------
   69|    330|      return GroupVariation::Group4Var1;
   70|    539|    case(0x402):
  ------------------
  |  Branch (70:5): [True: 539, False: 61.5k]
  ------------------
   71|    539|      return GroupVariation::Group4Var2;
   72|    378|    case(0x403):
  ------------------
  |  Branch (72:5): [True: 378, False: 61.7k]
  ------------------
   73|    378|      return GroupVariation::Group4Var3;
   74|     73|    case(0xA00):
  ------------------
  |  Branch (74:5): [True: 73, False: 62.0k]
  ------------------
   75|     73|      return GroupVariation::Group10Var0;
   76|    529|    case(0xA01):
  ------------------
  |  Branch (76:5): [True: 529, False: 61.5k]
  ------------------
   77|    529|      return GroupVariation::Group10Var1;
   78|    358|    case(0xA02):
  ------------------
  |  Branch (78:5): [True: 358, False: 61.7k]
  ------------------
   79|    358|      return GroupVariation::Group10Var2;
   80|    258|    case(0xB00):
  ------------------
  |  Branch (80:5): [True: 258, False: 61.8k]
  ------------------
   81|    258|      return GroupVariation::Group11Var0;
   82|    292|    case(0xB01):
  ------------------
  |  Branch (82:5): [True: 292, False: 61.8k]
  ------------------
   83|    292|      return GroupVariation::Group11Var1;
   84|    707|    case(0xB02):
  ------------------
  |  Branch (84:5): [True: 707, False: 61.4k]
  ------------------
   85|    707|      return GroupVariation::Group11Var2;
   86|    239|    case(0xC00):
  ------------------
  |  Branch (86:5): [True: 239, False: 61.8k]
  ------------------
   87|    239|      return GroupVariation::Group12Var0;
   88|    671|    case(0xC01):
  ------------------
  |  Branch (88:5): [True: 671, False: 61.4k]
  ------------------
   89|    671|      return GroupVariation::Group12Var1;
   90|    639|    case(0xD01):
  ------------------
  |  Branch (90:5): [True: 639, False: 61.4k]
  ------------------
   91|    639|      return GroupVariation::Group13Var1;
   92|    484|    case(0xD02):
  ------------------
  |  Branch (92:5): [True: 484, False: 61.6k]
  ------------------
   93|    484|      return GroupVariation::Group13Var2;
   94|    200|    case(0x1400):
  ------------------
  |  Branch (94:5): [True: 200, False: 61.9k]
  ------------------
   95|    200|      return GroupVariation::Group20Var0;
   96|    893|    case(0x1401):
  ------------------
  |  Branch (96:5): [True: 893, False: 61.2k]
  ------------------
   97|    893|      return GroupVariation::Group20Var1;
   98|    606|    case(0x1402):
  ------------------
  |  Branch (98:5): [True: 606, False: 61.5k]
  ------------------
   99|    606|      return GroupVariation::Group20Var2;
  100|    709|    case(0x1405):
  ------------------
  |  Branch (100:5): [True: 709, False: 61.4k]
  ------------------
  101|    709|      return GroupVariation::Group20Var5;
  102|    485|    case(0x1406):
  ------------------
  |  Branch (102:5): [True: 485, False: 61.6k]
  ------------------
  103|    485|      return GroupVariation::Group20Var6;
  104|    214|    case(0x1500):
  ------------------
  |  Branch (104:5): [True: 214, False: 61.9k]
  ------------------
  105|    214|      return GroupVariation::Group21Var0;
  106|    814|    case(0x1501):
  ------------------
  |  Branch (106:5): [True: 814, False: 61.3k]
  ------------------
  107|    814|      return GroupVariation::Group21Var1;
  108|    638|    case(0x1502):
  ------------------
  |  Branch (108:5): [True: 638, False: 61.4k]
  ------------------
  109|    638|      return GroupVariation::Group21Var2;
  110|    921|    case(0x1505):
  ------------------
  |  Branch (110:5): [True: 921, False: 61.2k]
  ------------------
  111|    921|      return GroupVariation::Group21Var5;
  112|    842|    case(0x1506):
  ------------------
  |  Branch (112:5): [True: 842, False: 61.2k]
  ------------------
  113|    842|      return GroupVariation::Group21Var6;
  114|    694|    case(0x1509):
  ------------------
  |  Branch (114:5): [True: 694, False: 61.4k]
  ------------------
  115|    694|      return GroupVariation::Group21Var9;
  116|    642|    case(0x150A):
  ------------------
  |  Branch (116:5): [True: 642, False: 61.4k]
  ------------------
  117|    642|      return GroupVariation::Group21Var10;
  118|    198|    case(0x1600):
  ------------------
  |  Branch (118:5): [True: 198, False: 61.9k]
  ------------------
  119|    198|      return GroupVariation::Group22Var0;
  120|    544|    case(0x1601):
  ------------------
  |  Branch (120:5): [True: 544, False: 61.5k]
  ------------------
  121|    544|      return GroupVariation::Group22Var1;
  122|    460|    case(0x1602):
  ------------------
  |  Branch (122:5): [True: 460, False: 61.6k]
  ------------------
  123|    460|      return GroupVariation::Group22Var2;
  124|    687|    case(0x1605):
  ------------------
  |  Branch (124:5): [True: 687, False: 61.4k]
  ------------------
  125|    687|      return GroupVariation::Group22Var5;
  126|    728|    case(0x1606):
  ------------------
  |  Branch (126:5): [True: 728, False: 61.3k]
  ------------------
  127|    728|      return GroupVariation::Group22Var6;
  128|    198|    case(0x1700):
  ------------------
  |  Branch (128:5): [True: 198, False: 61.9k]
  ------------------
  129|    198|      return GroupVariation::Group23Var0;
  130|    948|    case(0x1701):
  ------------------
  |  Branch (130:5): [True: 948, False: 61.1k]
  ------------------
  131|    948|      return GroupVariation::Group23Var1;
  132|    250|    case(0x1702):
  ------------------
  |  Branch (132:5): [True: 250, False: 61.8k]
  ------------------
  133|    250|      return GroupVariation::Group23Var2;
  134|    479|    case(0x1705):
  ------------------
  |  Branch (134:5): [True: 479, False: 61.6k]
  ------------------
  135|    479|      return GroupVariation::Group23Var5;
  136|    406|    case(0x1706):
  ------------------
  |  Branch (136:5): [True: 406, False: 61.7k]
  ------------------
  137|    406|      return GroupVariation::Group23Var6;
  138|     92|    case(0x1E00):
  ------------------
  |  Branch (138:5): [True: 92, False: 62.0k]
  ------------------
  139|     92|      return GroupVariation::Group30Var0;
  140|    679|    case(0x1E01):
  ------------------
  |  Branch (140:5): [True: 679, False: 61.4k]
  ------------------
  141|    679|      return GroupVariation::Group30Var1;
  142|    418|    case(0x1E02):
  ------------------
  |  Branch (142:5): [True: 418, False: 61.7k]
  ------------------
  143|    418|      return GroupVariation::Group30Var2;
  144|    529|    case(0x1E03):
  ------------------
  |  Branch (144:5): [True: 529, False: 61.5k]
  ------------------
  145|    529|      return GroupVariation::Group30Var3;
  146|    675|    case(0x1E04):
  ------------------
  |  Branch (146:5): [True: 675, False: 61.4k]
  ------------------
  147|    675|      return GroupVariation::Group30Var4;
  148|    570|    case(0x1E05):
  ------------------
  |  Branch (148:5): [True: 570, False: 61.5k]
  ------------------
  149|    570|      return GroupVariation::Group30Var5;
  150|    652|    case(0x1E06):
  ------------------
  |  Branch (150:5): [True: 652, False: 61.4k]
  ------------------
  151|    652|      return GroupVariation::Group30Var6;
  152|    281|    case(0x2000):
  ------------------
  |  Branch (152:5): [True: 281, False: 61.8k]
  ------------------
  153|    281|      return GroupVariation::Group32Var0;
  154|    461|    case(0x2001):
  ------------------
  |  Branch (154:5): [True: 461, False: 61.6k]
  ------------------
  155|    461|      return GroupVariation::Group32Var1;
  156|    283|    case(0x2002):
  ------------------
  |  Branch (156:5): [True: 283, False: 61.8k]
  ------------------
  157|    283|      return GroupVariation::Group32Var2;
  158|    496|    case(0x2003):
  ------------------
  |  Branch (158:5): [True: 496, False: 61.6k]
  ------------------
  159|    496|      return GroupVariation::Group32Var3;
  160|    600|    case(0x2004):
  ------------------
  |  Branch (160:5): [True: 600, False: 61.5k]
  ------------------
  161|    600|      return GroupVariation::Group32Var4;
  162|    469|    case(0x2005):
  ------------------
  |  Branch (162:5): [True: 469, False: 61.6k]
  ------------------
  163|    469|      return GroupVariation::Group32Var5;
  164|    776|    case(0x2006):
  ------------------
  |  Branch (164:5): [True: 776, False: 61.3k]
  ------------------
  165|    776|      return GroupVariation::Group32Var6;
  166|    547|    case(0x2007):
  ------------------
  |  Branch (166:5): [True: 547, False: 61.5k]
  ------------------
  167|    547|      return GroupVariation::Group32Var7;
  168|    647|    case(0x2008):
  ------------------
  |  Branch (168:5): [True: 647, False: 61.4k]
  ------------------
  169|    647|      return GroupVariation::Group32Var8;
  170|    285|    case(0x2800):
  ------------------
  |  Branch (170:5): [True: 285, False: 61.8k]
  ------------------
  171|    285|      return GroupVariation::Group40Var0;
  172|    683|    case(0x2801):
  ------------------
  |  Branch (172:5): [True: 683, False: 61.4k]
  ------------------
  173|    683|      return GroupVariation::Group40Var1;
  174|    497|    case(0x2802):
  ------------------
  |  Branch (174:5): [True: 497, False: 61.6k]
  ------------------
  175|    497|      return GroupVariation::Group40Var2;
  176|    753|    case(0x2803):
  ------------------
  |  Branch (176:5): [True: 753, False: 61.3k]
  ------------------
  177|    753|      return GroupVariation::Group40Var3;
  178|    951|    case(0x2804):
  ------------------
  |  Branch (178:5): [True: 951, False: 61.1k]
  ------------------
  179|    951|      return GroupVariation::Group40Var4;
  180|    201|    case(0x2900):
  ------------------
  |  Branch (180:5): [True: 201, False: 61.9k]
  ------------------
  181|    201|      return GroupVariation::Group41Var0;
  182|    361|    case(0x2901):
  ------------------
  |  Branch (182:5): [True: 361, False: 61.7k]
  ------------------
  183|    361|      return GroupVariation::Group41Var1;
  184|    290|    case(0x2902):
  ------------------
  |  Branch (184:5): [True: 290, False: 61.8k]
  ------------------
  185|    290|      return GroupVariation::Group41Var2;
  186|    524|    case(0x2903):
  ------------------
  |  Branch (186:5): [True: 524, False: 61.6k]
  ------------------
  187|    524|      return GroupVariation::Group41Var3;
  188|  1.04k|    case(0x2904):
  ------------------
  |  Branch (188:5): [True: 1.04k, False: 61.0k]
  ------------------
  189|  1.04k|      return GroupVariation::Group41Var4;
  190|    220|    case(0x2A00):
  ------------------
  |  Branch (190:5): [True: 220, False: 61.9k]
  ------------------
  191|    220|      return GroupVariation::Group42Var0;
  192|    423|    case(0x2A01):
  ------------------
  |  Branch (192:5): [True: 423, False: 61.7k]
  ------------------
  193|    423|      return GroupVariation::Group42Var1;
  194|    539|    case(0x2A02):
  ------------------
  |  Branch (194:5): [True: 539, False: 61.5k]
  ------------------
  195|    539|      return GroupVariation::Group42Var2;
  196|    704|    case(0x2A03):
  ------------------
  |  Branch (196:5): [True: 704, False: 61.4k]
  ------------------
  197|    704|      return GroupVariation::Group42Var3;
  198|    540|    case(0x2A04):
  ------------------
  |  Branch (198:5): [True: 540, False: 61.5k]
  ------------------
  199|    540|      return GroupVariation::Group42Var4;
  200|    712|    case(0x2A05):
  ------------------
  |  Branch (200:5): [True: 712, False: 61.4k]
  ------------------
  201|    712|      return GroupVariation::Group42Var5;
  202|    665|    case(0x2A06):
  ------------------
  |  Branch (202:5): [True: 665, False: 61.4k]
  ------------------
  203|    665|      return GroupVariation::Group42Var6;
  204|    477|    case(0x2A07):
  ------------------
  |  Branch (204:5): [True: 477, False: 61.6k]
  ------------------
  205|    477|      return GroupVariation::Group42Var7;
  206|    584|    case(0x2A08):
  ------------------
  |  Branch (206:5): [True: 584, False: 61.5k]
  ------------------
  207|    584|      return GroupVariation::Group42Var8;
  208|    655|    case(0x2B01):
  ------------------
  |  Branch (208:5): [True: 655, False: 61.4k]
  ------------------
  209|    655|      return GroupVariation::Group43Var1;
  210|    266|    case(0x2B02):
  ------------------
  |  Branch (210:5): [True: 266, False: 61.8k]
  ------------------
  211|    266|      return GroupVariation::Group43Var2;
  212|    356|    case(0x2B03):
  ------------------
  |  Branch (212:5): [True: 356, False: 61.7k]
  ------------------
  213|    356|      return GroupVariation::Group43Var3;
  214|    613|    case(0x2B04):
  ------------------
  |  Branch (214:5): [True: 613, False: 61.5k]
  ------------------
  215|    613|      return GroupVariation::Group43Var4;
  216|    561|    case(0x2B05):
  ------------------
  |  Branch (216:5): [True: 561, False: 61.5k]
  ------------------
  217|    561|      return GroupVariation::Group43Var5;
  218|    601|    case(0x2B06):
  ------------------
  |  Branch (218:5): [True: 601, False: 61.5k]
  ------------------
  219|    601|      return GroupVariation::Group43Var6;
  220|    571|    case(0x2B07):
  ------------------
  |  Branch (220:5): [True: 571, False: 61.5k]
  ------------------
  221|    571|      return GroupVariation::Group43Var7;
  222|    660|    case(0x2B08):
  ------------------
  |  Branch (222:5): [True: 660, False: 61.4k]
  ------------------
  223|    660|      return GroupVariation::Group43Var8;
  224|    777|    case(0x3201):
  ------------------
  |  Branch (224:5): [True: 777, False: 61.3k]
  ------------------
  225|    777|      return GroupVariation::Group50Var1;
  226|    610|    case(0x3203):
  ------------------
  |  Branch (226:5): [True: 610, False: 61.5k]
  ------------------
  227|    610|      return GroupVariation::Group50Var3;
  228|  1.11k|    case(0x3204):
  ------------------
  |  Branch (228:5): [True: 1.11k, False: 61.0k]
  ------------------
  229|  1.11k|      return GroupVariation::Group50Var4;
  230|    766|    case(0x3301):
  ------------------
  |  Branch (230:5): [True: 766, False: 61.3k]
  ------------------
  231|    766|      return GroupVariation::Group51Var1;
  232|    811|    case(0x3302):
  ------------------
  |  Branch (232:5): [True: 811, False: 61.3k]
  ------------------
  233|    811|      return GroupVariation::Group51Var2;
  234|    649|    case(0x3401):
  ------------------
  |  Branch (234:5): [True: 649, False: 61.4k]
  ------------------
  235|    649|      return GroupVariation::Group52Var1;
  236|    528|    case(0x3402):
  ------------------
  |  Branch (236:5): [True: 528, False: 61.5k]
  ------------------
  237|    528|      return GroupVariation::Group52Var2;
  238|    275|    case(0x3C01):
  ------------------
  |  Branch (238:5): [True: 275, False: 61.8k]
  ------------------
  239|    275|      return GroupVariation::Group60Var1;
  240|    211|    case(0x3C02):
  ------------------
  |  Branch (240:5): [True: 211, False: 61.9k]
  ------------------
  241|    211|      return GroupVariation::Group60Var2;
  242|    206|    case(0x3C03):
  ------------------
  |  Branch (242:5): [True: 206, False: 61.9k]
  ------------------
  243|    206|      return GroupVariation::Group60Var3;
  244|    184|    case(0x3C04):
  ------------------
  |  Branch (244:5): [True: 184, False: 61.9k]
  ------------------
  245|    184|      return GroupVariation::Group60Var4;
  246|    317|    case(0x4601):
  ------------------
  |  Branch (246:5): [True: 317, False: 61.8k]
  ------------------
  247|    317|      return GroupVariation::Group70Var1;
  248|    194|    case(0x4602):
  ------------------
  |  Branch (248:5): [True: 194, False: 61.9k]
  ------------------
  249|    194|      return GroupVariation::Group70Var2;
  250|     71|    case(0x4603):
  ------------------
  |  Branch (250:5): [True: 71, False: 62.0k]
  ------------------
  251|     71|      return GroupVariation::Group70Var3;
  252|    207|    case(0x4604):
  ------------------
  |  Branch (252:5): [True: 207, False: 61.9k]
  ------------------
  253|    207|      return GroupVariation::Group70Var4;
  254|    204|    case(0x4605):
  ------------------
  |  Branch (254:5): [True: 204, False: 61.9k]
  ------------------
  255|    204|      return GroupVariation::Group70Var5;
  256|    235|    case(0x4606):
  ------------------
  |  Branch (256:5): [True: 235, False: 61.8k]
  ------------------
  257|    235|      return GroupVariation::Group70Var6;
  258|    226|    case(0x4607):
  ------------------
  |  Branch (258:5): [True: 226, False: 61.9k]
  ------------------
  259|    226|      return GroupVariation::Group70Var7;
  260|    264|    case(0x4608):
  ------------------
  |  Branch (260:5): [True: 264, False: 61.8k]
  ------------------
  261|    264|      return GroupVariation::Group70Var8;
  262|    555|    case(0x5001):
  ------------------
  |  Branch (262:5): [True: 555, False: 61.5k]
  ------------------
  263|    555|      return GroupVariation::Group80Var1;
  264|    392|    case(0x6E00):
  ------------------
  |  Branch (264:5): [True: 392, False: 61.7k]
  ------------------
  265|    392|      return GroupVariation::Group110Var0;
  266|    443|    case(0x6F00):
  ------------------
  |  Branch (266:5): [True: 443, False: 61.6k]
  ------------------
  267|    443|      return GroupVariation::Group111Var0;
  268|    408|    case(0x7000):
  ------------------
  |  Branch (268:5): [True: 408, False: 61.7k]
  ------------------
  269|    408|      return GroupVariation::Group112Var0;
  270|    205|    case(0x7100):
  ------------------
  |  Branch (270:5): [True: 205, False: 61.9k]
  ------------------
  271|    205|      return GroupVariation::Group113Var0;
  272|  4.99k|    default:
  ------------------
  |  Branch (272:5): [True: 4.99k, False: 57.1k]
  ------------------
  273|  4.99k|      return GroupVariation::UNKNOWN;
  274|  62.1k|  }
  275|  62.1k|}

_ZN8opendnp317IntervalUnitsSpec9from_typeEh:
   43|  1.72k|{
   44|  1.72k|  switch(arg)
   45|  1.72k|  {
   46|    312|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 312, False: 1.41k]
  ------------------
   47|    312|      return IntervalUnits::NoRepeat;
   48|     48|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 48, False: 1.67k]
  ------------------
   49|     48|      return IntervalUnits::Milliseconds;
   50|     23|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 23, False: 1.70k]
  ------------------
   51|     23|      return IntervalUnits::Seconds;
   52|     12|    case(0x3):
  ------------------
  |  Branch (52:5): [True: 12, False: 1.71k]
  ------------------
   53|     12|      return IntervalUnits::Minutes;
   54|     16|    case(0x4):
  ------------------
  |  Branch (54:5): [True: 16, False: 1.71k]
  ------------------
   55|     16|      return IntervalUnits::Hours;
   56|     31|    case(0x5):
  ------------------
  |  Branch (56:5): [True: 31, False: 1.69k]
  ------------------
   57|     31|      return IntervalUnits::Days;
   58|     15|    case(0x6):
  ------------------
  |  Branch (58:5): [True: 15, False: 1.71k]
  ------------------
   59|     15|      return IntervalUnits::Weeks;
   60|    159|    case(0x7):
  ------------------
  |  Branch (60:5): [True: 159, False: 1.56k]
  ------------------
   61|    159|      return IntervalUnits::Months7;
   62|     11|    case(0x8):
  ------------------
  |  Branch (62:5): [True: 11, False: 1.71k]
  ------------------
   63|     11|      return IntervalUnits::Months8;
   64|      7|    case(0x9):
  ------------------
  |  Branch (64:5): [True: 7, False: 1.71k]
  ------------------
   65|      7|      return IntervalUnits::Months9;
   66|      9|    case(0xA):
  ------------------
  |  Branch (66:5): [True: 9, False: 1.71k]
  ------------------
   67|      9|      return IntervalUnits::Seasons;
   68|  1.08k|    default:
  ------------------
  |  Branch (68:5): [True: 1.08k, False: 643]
  ------------------
   69|  1.08k|      return IntervalUnits::Undefined;
   70|  1.72k|  }
   71|  1.72k|}
_ZN8opendnp317IntervalUnitsSpec15to_human_stringENS_13IntervalUnitsE:
  105|  1.72k|{
  106|  1.72k|  switch(arg)
  107|  1.72k|  {
  108|    312|    case(IntervalUnits::NoRepeat):
  ------------------
  |  Branch (108:5): [True: 312, False: 1.41k]
  ------------------
  109|    312|      return "NoRepeat";
  110|     48|    case(IntervalUnits::Milliseconds):
  ------------------
  |  Branch (110:5): [True: 48, False: 1.67k]
  ------------------
  111|     48|      return "Milliseconds";
  112|     23|    case(IntervalUnits::Seconds):
  ------------------
  |  Branch (112:5): [True: 23, False: 1.70k]
  ------------------
  113|     23|      return "Seconds";
  114|     12|    case(IntervalUnits::Minutes):
  ------------------
  |  Branch (114:5): [True: 12, False: 1.71k]
  ------------------
  115|     12|      return "Minutes";
  116|     16|    case(IntervalUnits::Hours):
  ------------------
  |  Branch (116:5): [True: 16, False: 1.71k]
  ------------------
  117|     16|      return "Hours";
  118|     31|    case(IntervalUnits::Days):
  ------------------
  |  Branch (118:5): [True: 31, False: 1.69k]
  ------------------
  119|     31|      return "Days";
  120|     15|    case(IntervalUnits::Weeks):
  ------------------
  |  Branch (120:5): [True: 15, False: 1.71k]
  ------------------
  121|     15|      return "Weeks";
  122|    159|    case(IntervalUnits::Months7):
  ------------------
  |  Branch (122:5): [True: 159, False: 1.56k]
  ------------------
  123|    159|      return "Months7";
  124|     11|    case(IntervalUnits::Months8):
  ------------------
  |  Branch (124:5): [True: 11, False: 1.71k]
  ------------------
  125|     11|      return "Months8";
  126|      7|    case(IntervalUnits::Months9):
  ------------------
  |  Branch (126:5): [True: 7, False: 1.71k]
  ------------------
  127|      7|      return "Months9";
  128|      9|    case(IntervalUnits::Seasons):
  ------------------
  |  Branch (128:5): [True: 9, False: 1.71k]
  ------------------
  129|      9|      return "Seasons";
  130|  1.08k|    default:
  ------------------
  |  Branch (130:5): [True: 1.08k, False: 643]
  ------------------
  131|  1.08k|      return "Undefined";
  132|  1.72k|  }
  133|  1.72k|}

_ZN8opendnp316LinkFunctionSpec9from_typeEh:
   43|   119k|{
   44|   119k|  switch(arg)
   45|   119k|  {
   46|    258|    case(0x40):
  ------------------
  |  Branch (46:5): [True: 258, False: 118k]
  ------------------
   47|    258|      return LinkFunction::PRI_RESET_LINK_STATES;
   48|    544|    case(0x42):
  ------------------
  |  Branch (48:5): [True: 544, False: 118k]
  ------------------
   49|    544|      return LinkFunction::PRI_TEST_LINK_STATES;
   50|  4.30k|    case(0x43):
  ------------------
  |  Branch (50:5): [True: 4.30k, False: 114k]
  ------------------
   51|  4.30k|      return LinkFunction::PRI_CONFIRMED_USER_DATA;
   52|   110k|    case(0x44):
  ------------------
  |  Branch (52:5): [True: 110k, False: 8.79k]
  ------------------
   53|   110k|      return LinkFunction::PRI_UNCONFIRMED_USER_DATA;
   54|    227|    case(0x49):
  ------------------
  |  Branch (54:5): [True: 227, False: 118k]
  ------------------
   55|    227|      return LinkFunction::PRI_REQUEST_LINK_STATUS;
   56|    504|    case(0x0):
  ------------------
  |  Branch (56:5): [True: 504, False: 118k]
  ------------------
   57|    504|      return LinkFunction::SEC_ACK;
   58|  1.15k|    case(0x1):
  ------------------
  |  Branch (58:5): [True: 1.15k, False: 118k]
  ------------------
   59|  1.15k|      return LinkFunction::SEC_NACK;
   60|    584|    case(0xB):
  ------------------
  |  Branch (60:5): [True: 584, False: 118k]
  ------------------
   61|    584|      return LinkFunction::SEC_LINK_STATUS;
   62|    547|    case(0xF):
  ------------------
  |  Branch (62:5): [True: 547, False: 118k]
  ------------------
   63|    547|      return LinkFunction::SEC_NOT_SUPPORTED;
   64|    675|    default:
  ------------------
  |  Branch (64:5): [True: 675, False: 118k]
  ------------------
   65|    675|      return LinkFunction::INVALID;
   66|   119k|  }
   67|   119k|}

_ZN8opendnp317OperationTypeSpec7to_typeENS_13OperationTypeE:
   38|    923|{
   39|    923|  return static_cast<uint8_t>(arg);
   40|    923|}
_ZN8opendnp317OperationTypeSpec9from_typeEh:
   43|    923|{
   44|    923|  switch(arg)
   45|    923|  {
   46|    180|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 180, False: 743]
  ------------------
   47|    180|      return OperationType::NUL;
   48|     70|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 70, False: 853]
  ------------------
   49|     70|      return OperationType::PULSE_ON;
   50|    116|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 116, False: 807]
  ------------------
   51|    116|      return OperationType::PULSE_OFF;
   52|     71|    case(0x3):
  ------------------
  |  Branch (52:5): [True: 71, False: 852]
  ------------------
   53|     71|      return OperationType::LATCH_ON;
   54|     65|    case(0x4):
  ------------------
  |  Branch (54:5): [True: 65, False: 858]
  ------------------
   55|     65|      return OperationType::LATCH_OFF;
   56|    421|    default:
  ------------------
  |  Branch (56:5): [True: 421, False: 502]
  ------------------
   57|    421|      return OperationType::Undefined;
   58|    923|  }
   59|    923|}
_ZN8opendnp317OperationTypeSpec15to_human_stringENS_13OperationTypeE:
   81|    923|{
   82|    923|  switch(arg)
   83|    923|  {
   84|    180|    case(OperationType::NUL):
  ------------------
  |  Branch (84:5): [True: 180, False: 743]
  ------------------
   85|    180|      return "NUL";
   86|     70|    case(OperationType::PULSE_ON):
  ------------------
  |  Branch (86:5): [True: 70, False: 853]
  ------------------
   87|     70|      return "PULSE_ON";
   88|    116|    case(OperationType::PULSE_OFF):
  ------------------
  |  Branch (88:5): [True: 116, False: 807]
  ------------------
   89|    116|      return "PULSE_OFF";
   90|     71|    case(OperationType::LATCH_ON):
  ------------------
  |  Branch (90:5): [True: 71, False: 852]
  ------------------
   91|     71|      return "LATCH_ON";
   92|     65|    case(OperationType::LATCH_OFF):
  ------------------
  |  Branch (92:5): [True: 65, False: 858]
  ------------------
   93|     65|      return "LATCH_OFF";
   94|    421|    default:
  ------------------
  |  Branch (94:5): [True: 421, False: 502]
  ------------------
   95|    421|      return "Undefined";
   96|    923|  }
   97|    923|}

_ZN8opendnp317QualifierCodeSpec9from_typeEh:
   43|  59.1k|{
   44|  59.1k|  switch(arg)
   45|  59.1k|  {
   46|  16.1k|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 16.1k, False: 43.0k]
  ------------------
   47|  16.1k|      return QualifierCode::UINT8_START_STOP;
   48|  1.68k|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 1.68k, False: 57.4k]
  ------------------
   49|  1.68k|      return QualifierCode::UINT16_START_STOP;
   50|  13.8k|    case(0x6):
  ------------------
  |  Branch (50:5): [True: 13.8k, False: 45.3k]
  ------------------
   51|  13.8k|      return QualifierCode::ALL_OBJECTS;
   52|  3.68k|    case(0x7):
  ------------------
  |  Branch (52:5): [True: 3.68k, False: 55.4k]
  ------------------
   53|  3.68k|      return QualifierCode::UINT8_CNT;
   54|    745|    case(0x8):
  ------------------
  |  Branch (54:5): [True: 745, False: 58.4k]
  ------------------
   55|    745|      return QualifierCode::UINT16_CNT;
   56|  19.8k|    case(0x17):
  ------------------
  |  Branch (56:5): [True: 19.8k, False: 39.2k]
  ------------------
   57|  19.8k|      return QualifierCode::UINT8_CNT_UINT8_INDEX;
   58|    536|    case(0x28):
  ------------------
  |  Branch (58:5): [True: 536, False: 58.6k]
  ------------------
   59|    536|      return QualifierCode::UINT16_CNT_UINT16_INDEX;
   60|  2.65k|    default:
  ------------------
  |  Branch (60:5): [True: 2.65k, False: 56.5k]
  ------------------
   61|  2.65k|      return QualifierCode::UNDEFINED;
   62|  59.1k|  }
   63|  59.1k|}

_ZN8opendnp317TripCloseCodeSpec7to_typeENS_13TripCloseCodeE:
   38|    923|{
   39|    923|  return static_cast<uint8_t>(arg);
   40|    923|}
_ZN8opendnp317TripCloseCodeSpec9from_typeEh:
   43|    923|{
   44|    923|  switch(arg)
   45|    923|  {
   46|    573|    case(0x0):
  ------------------
  |  Branch (46:5): [True: 573, False: 350]
  ------------------
   47|    573|      return TripCloseCode::NUL;
   48|     66|    case(0x1):
  ------------------
  |  Branch (48:5): [True: 66, False: 857]
  ------------------
   49|     66|      return TripCloseCode::CLOSE;
   50|     84|    case(0x2):
  ------------------
  |  Branch (50:5): [True: 84, False: 839]
  ------------------
   51|     84|      return TripCloseCode::TRIP;
   52|    200|    case(0x3):
  ------------------
  |  Branch (52:5): [True: 200, False: 723]
  ------------------
   53|    200|      return TripCloseCode::RESERVED;
   54|      0|    default:
  ------------------
  |  Branch (54:5): [True: 0, False: 923]
  ------------------
   55|      0|      throw new std::invalid_argument("Unknown value");
   56|    923|  }
   57|    923|}
_ZN8opendnp317TripCloseCodeSpec15to_human_stringENS_13TripCloseCodeE:
   77|    923|{
   78|    923|  switch(arg)
   79|    923|  {
   80|    573|    case(TripCloseCode::NUL):
  ------------------
  |  Branch (80:5): [True: 573, False: 350]
  ------------------
   81|    573|      return "NUL";
   82|     66|    case(TripCloseCode::CLOSE):
  ------------------
  |  Branch (82:5): [True: 66, False: 857]
  ------------------
   83|     66|      return "CLOSE";
   84|     84|    case(TripCloseCode::TRIP):
  ------------------
  |  Branch (84:5): [True: 84, False: 839]
  ------------------
   85|     84|      return "TRIP";
   86|    200|    case(TripCloseCode::RESERVED):
  ------------------
  |  Branch (86:5): [True: 200, False: 723]
  ------------------
   87|    200|      return "RESERVED";
   88|      0|    default:
  ------------------
  |  Branch (88:5): [True: 0, False: 923]
  ------------------
   89|      0|      return "UNDEFINED";
   90|    923|  }
   91|    923|}

_ZN8opendnp310Group1Var2C2Ev:
   45|  3.22k|Group1Var2::Group1Var2() : flags(0)
   46|  3.22k|{}
_ZN8opendnp310Group1Var24ReadERN7ser4cpp4RSeqImEERS0_:
   49|  3.22k|{
   50|  3.22k|  return LittleEndian::read(buffer, output.flags);
   51|  3.22k|}
_ZN8opendnp310Group1Var210ReadTargetERN7ser4cpp4RSeqImEERNS_6BinaryE:
   59|  3.22k|{
   60|  3.22k|  Group1Var2 value;
   61|  3.22k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 3.22k, False: 0]
  ------------------
   62|  3.22k|  {
   63|  3.22k|    output = BinaryFactory::From(value.flags);
   64|  3.22k|    return true;
   65|  3.22k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  3.22k|}

_ZN8opendnp310Group1Var24SizeEv:
   63|    483|  static size_t Size() { return 1; }

_ZN8opendnp311Group10Var2C2Ev:
   45|  1.36k|Group10Var2::Group10Var2() : flags(0)
   46|  1.36k|{}
_ZN8opendnp311Group10Var24ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.36k|{
   50|  1.36k|  return LittleEndian::read(buffer, output.flags);
   51|  1.36k|}
_ZN8opendnp311Group10Var210ReadTargetERN7ser4cpp4RSeqImEERNS_18BinaryOutputStatusE:
   59|  1.36k|{
   60|  1.36k|  Group10Var2 value;
   61|  1.36k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.36k, False: 0]
  ------------------
   62|  1.36k|  {
   63|  1.36k|    output = BinaryOutputStatusFactory::From(value.flags);
   64|  1.36k|    return true;
   65|  1.36k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.36k|}

_ZN8opendnp311Group10Var24SizeEv:
   62|    355|  static size_t Size() { return 1; }

_ZN8opendnp311Group11Var1C2Ev:
   45|  2.12k|Group11Var1::Group11Var1() : flags(0)
   46|  2.12k|{}
_ZN8opendnp311Group11Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  2.12k|{
   50|  2.12k|  return LittleEndian::read(buffer, output.flags);
   51|  2.12k|}
_ZN8opendnp311Group11Var110ReadTargetERN7ser4cpp4RSeqImEERNS_18BinaryOutputStatusE:
   59|  2.12k|{
   60|  2.12k|  Group11Var1 value;
   61|  2.12k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 2.12k, False: 0]
  ------------------
   62|  2.12k|  {
   63|  2.12k|    output = BinaryOutputStatusFactory::From(value.flags);
   64|  2.12k|    return true;
   65|  2.12k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  2.12k|}
_ZN8opendnp311Group11Var2C2Ev:
   79|    923|Group11Var2::Group11Var2() : flags(0), time(0)
   80|    923|{}
_ZN8opendnp311Group11Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|    923|{
   84|    923|  return LittleEndian::read(buffer, output.flags, output.time);
   85|    923|}
_ZN8opendnp311Group11Var210ReadTargetERN7ser4cpp4RSeqImEERNS_18BinaryOutputStatusE:
   93|    923|{
   94|    923|  Group11Var2 value;
   95|    923|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 923, False: 0]
  ------------------
   96|    923|  {
   97|    923|    output = BinaryOutputStatusFactory::From(value.flags, value.time);
   98|    923|    return true;
   99|    923|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|    923|}

_ZN8opendnp311Group11Var14SizeEv:
   56|    272|  static size_t Size() { return 1; }
_ZN8opendnp311Group11Var24SizeEv:
   76|    509|  static size_t Size() { return 7; }

_ZN8opendnp311Group12Var1C2Ev:
   45|    923|Group12Var1::Group12Var1() : code(0), count(0), onTime(0), offTime(0), status(0)
   46|    923|{}
_ZN8opendnp311Group12Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    923|{
   50|    923|  return LittleEndian::read(buffer, output.code, output.count, output.onTime, output.offTime, output.status);
   51|    923|}
_ZN8opendnp311Group12Var110ReadTargetERN7ser4cpp4RSeqImEERNS_23ControlRelayOutputBlockE:
   59|    923|{
   60|    923|  Group12Var1 value;
   61|    923|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 923, False: 0]
  ------------------
   62|    923|  {
   63|    923|    output = ControlRelayOutputBlockFactory::From(value.code, value.count, value.onTime, value.offTime, value.status);
   64|    923|    return true;
   65|    923|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|    923|}

_ZN8opendnp311Group12Var14SizeEv:
   56|    473|  static size_t Size() { return 11; }

_ZN8opendnp311Group13Var1C2Ev:
   45|  6.33k|Group13Var1::Group13Var1() : flags(0)
   46|  6.33k|{}
_ZN8opendnp311Group13Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  6.33k|{
   50|  6.33k|  return LittleEndian::read(buffer, output.flags);
   51|  6.33k|}
_ZN8opendnp311Group13Var110ReadTargetERN7ser4cpp4RSeqImEERNS_18BinaryCommandEventE:
   59|  6.33k|{
   60|  6.33k|  Group13Var1 value;
   61|  6.33k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 6.33k, False: 0]
  ------------------
   62|  6.33k|  {
   63|  6.33k|    output = BinaryCommandEventFactory::From(value.flags);
   64|  6.33k|    return true;
   65|  6.33k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  6.33k|}
_ZN8opendnp311Group13Var2C2Ev:
   79|  1.11k|Group13Var2::Group13Var2() : flags(0), time(0)
   80|  1.11k|{}
_ZN8opendnp311Group13Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.11k|{
   84|  1.11k|  return LittleEndian::read(buffer, output.flags, output.time);
   85|  1.11k|}
_ZN8opendnp311Group13Var210ReadTargetERN7ser4cpp4RSeqImEERNS_18BinaryCommandEventE:
   93|  1.11k|{
   94|  1.11k|  Group13Var2 value;
   95|  1.11k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.11k, False: 0]
  ------------------
   96|  1.11k|  {
   97|  1.11k|    output = BinaryCommandEventFactory::From(value.flags, value.time);
   98|  1.11k|    return true;
   99|  1.11k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.11k|}

_ZN8opendnp311Group13Var14SizeEv:
   50|    541|  static size_t Size() { return 1; }
_ZN8opendnp311Group13Var24SizeEv:
   69|    303|  static size_t Size() { return 7; }

_ZN8opendnp310Group2Var1C2Ev:
   45|  1.80k|Group2Var1::Group2Var1() : flags(0)
   46|  1.80k|{}
_ZN8opendnp310Group2Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.80k|{
   50|  1.80k|  return LittleEndian::read(buffer, output.flags);
   51|  1.80k|}
_ZN8opendnp310Group2Var110ReadTargetERN7ser4cpp4RSeqImEERNS_6BinaryE:
   59|  1.80k|{
   60|  1.80k|  Group2Var1 value;
   61|  1.80k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.80k, False: 0]
  ------------------
   62|  1.80k|  {
   63|  1.80k|    output = BinaryFactory::From(value.flags);
   64|  1.80k|    return true;
   65|  1.80k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.80k|}
_ZN8opendnp310Group2Var2C2Ev:
   79|  1.03k|Group2Var2::Group2Var2() : flags(0), time(0)
   80|  1.03k|{}
_ZN8opendnp310Group2Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.03k|{
   84|  1.03k|  return LittleEndian::read(buffer, output.flags, output.time);
   85|  1.03k|}
_ZN8opendnp310Group2Var210ReadTargetERN7ser4cpp4RSeqImEERNS_6BinaryE:
   93|  1.03k|{
   94|  1.03k|  Group2Var2 value;
   95|  1.03k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.03k, False: 0]
  ------------------
   96|  1.03k|  {
   97|  1.03k|    output = BinaryFactory::From(value.flags, value.time);
   98|  1.03k|    return true;
   99|  1.03k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.03k|}
_ZN8opendnp310Group2Var3C2Ev:
  113|    730|Group2Var3::Group2Var3() : flags(0), time(0)
  114|    730|{}
_ZN8opendnp310Group2Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|    730|{
  118|    730|  return LittleEndian::read(buffer, output.flags, output.time);
  119|    730|}
_ZN8opendnp310Group2Var310ReadTargetERN7ser4cpp4RSeqImEERNS_6BinaryE:
  127|    730|{
  128|    730|  Group2Var3 value;
  129|    730|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 730, False: 0]
  ------------------
  130|    730|  {
  131|    730|    output = BinaryFactory::From(value.flags, value.time);
  132|    730|    return true;
  133|    730|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|    730|}

_ZN8opendnp310Group2Var14SizeEv:
   56|    306|  static size_t Size() { return 1; }
_ZN8opendnp310Group2Var24SizeEv:
   76|    459|  static size_t Size() { return 7; }
_ZN8opendnp310Group2Var34SizeEv:
   97|    277|  static size_t Size() { return 3; }

_ZN8opendnp311Group20Var1C2Ev:
   45|  1.37k|Group20Var1::Group20Var1() : flags(0), value(0)
   46|  1.37k|{}
_ZN8opendnp311Group20Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.37k|{
   50|  1.37k|  return LittleEndian::read(buffer, output.flags, output.value);
   51|  1.37k|}
_ZN8opendnp311Group20Var110ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
   59|  1.37k|{
   60|  1.37k|  Group20Var1 value;
   61|  1.37k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.37k, False: 0]
  ------------------
   62|  1.37k|  {
   63|  1.37k|    output = CounterFactory::From(value.flags, value.value);
   64|  1.37k|    return true;
   65|  1.37k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.37k|}
_ZN8opendnp311Group20Var2C2Ev:
   79|  1.03k|Group20Var2::Group20Var2() : flags(0), value(0)
   80|  1.03k|{}
_ZN8opendnp311Group20Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.03k|{
   84|  1.03k|  return LittleEndian::read(buffer, output.flags, output.value);
   85|  1.03k|}
_ZN8opendnp311Group20Var210ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
   93|  1.03k|{
   94|  1.03k|  Group20Var2 value;
   95|  1.03k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.03k, False: 0]
  ------------------
   96|  1.03k|  {
   97|  1.03k|    output = CounterFactory::From(value.flags, value.value);
   98|  1.03k|    return true;
   99|  1.03k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.03k|}
_ZN8opendnp311Group20Var5C2Ev:
  113|  1.15k|Group20Var5::Group20Var5() : value(0)
  114|  1.15k|{}
_ZN8opendnp311Group20Var54ReadERN7ser4cpp4RSeqImEERS0_:
  117|  1.15k|{
  118|  1.15k|  return LittleEndian::read(buffer, output.value);
  119|  1.15k|}
_ZN8opendnp311Group20Var510ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
  127|  1.15k|{
  128|  1.15k|  Group20Var5 value;
  129|  1.15k|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 1.15k, False: 0]
  ------------------
  130|  1.15k|  {
  131|  1.15k|    output = CounterFactory::From(value.value);
  132|  1.15k|    return true;
  133|  1.15k|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|  1.15k|}
_ZN8opendnp311Group20Var6C2Ev:
  147|  1.01k|Group20Var6::Group20Var6() : value(0)
  148|  1.01k|{}
_ZN8opendnp311Group20Var64ReadERN7ser4cpp4RSeqImEERS0_:
  151|  1.01k|{
  152|  1.01k|  return LittleEndian::read(buffer, output.value);
  153|  1.01k|}
_ZN8opendnp311Group20Var610ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
  161|  1.01k|{
  162|  1.01k|  Group20Var6 value;
  163|  1.01k|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 1.01k, False: 0]
  ------------------
  164|  1.01k|  {
  165|  1.01k|    output = CounterFactory::From(value.value);
  166|  1.01k|    return true;
  167|  1.01k|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|  1.01k|}

_ZN8opendnp311Group20Var14SizeEv:
   56|    703|  static size_t Size() { return 5; }
_ZN8opendnp311Group20Var24SizeEv:
   79|    466|  static size_t Size() { return 3; }
_ZN8opendnp311Group20Var54SizeEv:
  102|    694|  static size_t Size() { return 4; }
_ZN8opendnp311Group20Var64SizeEv:
  124|    476|  static size_t Size() { return 2; }

_ZN8opendnp311Group21Var1C2Ev:
   45|  1.70k|Group21Var1::Group21Var1() : flags(0), value(0)
   46|  1.70k|{}
_ZN8opendnp311Group21Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.70k|{
   50|  1.70k|  return LittleEndian::read(buffer, output.flags, output.value);
   51|  1.70k|}
_ZN8opendnp311Group21Var110ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
   59|  1.70k|{
   60|  1.70k|  Group21Var1 value;
   61|  1.70k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.70k, False: 0]
  ------------------
   62|  1.70k|  {
   63|  1.70k|    output = FrozenCounterFactory::From(value.flags, value.value);
   64|  1.70k|    return true;
   65|  1.70k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.70k|}
_ZN8opendnp311Group21Var2C2Ev:
   79|    965|Group21Var2::Group21Var2() : flags(0), value(0)
   80|    965|{}
_ZN8opendnp311Group21Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|    965|{
   84|    965|  return LittleEndian::read(buffer, output.flags, output.value);
   85|    965|}
_ZN8opendnp311Group21Var210ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
   93|    965|{
   94|    965|  Group21Var2 value;
   95|    965|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 965, False: 0]
  ------------------
   96|    965|  {
   97|    965|    output = FrozenCounterFactory::From(value.flags, value.value);
   98|    965|    return true;
   99|    965|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|    965|}
_ZN8opendnp311Group21Var5C2Ev:
  113|    734|Group21Var5::Group21Var5() : flags(0), value(0), time(0)
  114|    734|{}
_ZN8opendnp311Group21Var54ReadERN7ser4cpp4RSeqImEERS0_:
  117|    734|{
  118|    734|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  119|    734|}
_ZN8opendnp311Group21Var510ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
  127|    734|{
  128|    734|  Group21Var5 value;
  129|    734|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 734, False: 0]
  ------------------
  130|    734|  {
  131|    734|    output = FrozenCounterFactory::From(value.flags, value.value, value.time);
  132|    734|    return true;
  133|    734|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|    734|}
_ZN8opendnp311Group21Var6C2Ev:
  147|  1.16k|Group21Var6::Group21Var6() : flags(0), value(0), time(0)
  148|  1.16k|{}
_ZN8opendnp311Group21Var64ReadERN7ser4cpp4RSeqImEERS0_:
  151|  1.16k|{
  152|  1.16k|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  153|  1.16k|}
_ZN8opendnp311Group21Var610ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
  161|  1.16k|{
  162|  1.16k|  Group21Var6 value;
  163|  1.16k|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 1.16k, False: 0]
  ------------------
  164|  1.16k|  {
  165|  1.16k|    output = FrozenCounterFactory::From(value.flags, value.value, value.time);
  166|  1.16k|    return true;
  167|  1.16k|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|  1.16k|}
_ZN8opendnp311Group21Var9C2Ev:
  181|  1.24k|Group21Var9::Group21Var9() : value(0)
  182|  1.24k|{}
_ZN8opendnp311Group21Var94ReadERN7ser4cpp4RSeqImEERS0_:
  185|  1.24k|{
  186|  1.24k|  return LittleEndian::read(buffer, output.value);
  187|  1.24k|}
_ZN8opendnp311Group21Var910ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
  195|  1.24k|{
  196|  1.24k|  Group21Var9 value;
  197|  1.24k|  if(Read(buff, value))
  ------------------
  |  Branch (197:6): [True: 1.24k, False: 0]
  ------------------
  198|  1.24k|  {
  199|  1.24k|    output = FrozenCounterFactory::From(value.value);
  200|  1.24k|    return true;
  201|  1.24k|  }
  202|      0|  else
  203|      0|  {
  204|      0|    return false;
  205|      0|  }
  206|  1.24k|}
_ZN8opendnp312Group21Var10C2Ev:
  215|  1.02k|Group21Var10::Group21Var10() : value(0)
  216|  1.02k|{}
_ZN8opendnp312Group21Var104ReadERN7ser4cpp4RSeqImEERS0_:
  219|  1.02k|{
  220|  1.02k|  return LittleEndian::read(buffer, output.value);
  221|  1.02k|}
_ZN8opendnp312Group21Var1010ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
  229|  1.02k|{
  230|  1.02k|  Group21Var10 value;
  231|  1.02k|  if(Read(buff, value))
  ------------------
  |  Branch (231:6): [True: 1.02k, False: 0]
  ------------------
  232|  1.02k|  {
  233|  1.02k|    output = FrozenCounterFactory::From(value.value);
  234|  1.02k|    return true;
  235|  1.02k|  }
  236|      0|  else
  237|      0|  {
  238|      0|    return false;
  239|      0|  }
  240|  1.02k|}

_ZN8opendnp311Group21Var14SizeEv:
   56|    495|  static size_t Size() { return 5; }
_ZN8opendnp311Group21Var24SizeEv:
   79|    476|  static size_t Size() { return 3; }
_ZN8opendnp311Group21Var54SizeEv:
  102|    490|  static size_t Size() { return 11; }
_ZN8opendnp311Group21Var64SizeEv:
  126|    637|  static size_t Size() { return 9; }
_ZN8opendnp311Group21Var94SizeEv:
  150|    658|  static size_t Size() { return 4; }
_ZN8opendnp312Group21Var104SizeEv:
  172|    454|  static size_t Size() { return 2; }

_ZN8opendnp311Group22Var1C2Ev:
   45|    963|Group22Var1::Group22Var1() : flags(0), value(0)
   46|    963|{}
_ZN8opendnp311Group22Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    963|{
   50|    963|  return LittleEndian::read(buffer, output.flags, output.value);
   51|    963|}
_ZN8opendnp311Group22Var110ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
   59|    963|{
   60|    963|  Group22Var1 value;
   61|    963|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 963, False: 0]
  ------------------
   62|    963|  {
   63|    963|    output = CounterFactory::From(value.flags, value.value);
   64|    963|    return true;
   65|    963|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|    963|}
_ZN8opendnp311Group22Var2C2Ev:
   79|    964|Group22Var2::Group22Var2() : flags(0), value(0)
   80|    964|{}
_ZN8opendnp311Group22Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|    964|{
   84|    964|  return LittleEndian::read(buffer, output.flags, output.value);
   85|    964|}
_ZN8opendnp311Group22Var210ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
   93|    964|{
   94|    964|  Group22Var2 value;
   95|    964|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 964, False: 0]
  ------------------
   96|    964|  {
   97|    964|    output = CounterFactory::From(value.flags, value.value);
   98|    964|    return true;
   99|    964|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|    964|}
_ZN8opendnp311Group22Var5C2Ev:
  113|    650|Group22Var5::Group22Var5() : flags(0), value(0), time(0)
  114|    650|{}
_ZN8opendnp311Group22Var54ReadERN7ser4cpp4RSeqImEERS0_:
  117|    650|{
  118|    650|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  119|    650|}
_ZN8opendnp311Group22Var510ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
  127|    650|{
  128|    650|  Group22Var5 value;
  129|    650|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 650, False: 0]
  ------------------
  130|    650|  {
  131|    650|    output = CounterFactory::From(value.flags, value.value, value.time);
  132|    650|    return true;
  133|    650|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|    650|}
_ZN8opendnp311Group22Var6C2Ev:
  147|    853|Group22Var6::Group22Var6() : flags(0), value(0), time(0)
  148|    853|{}
_ZN8opendnp311Group22Var64ReadERN7ser4cpp4RSeqImEERS0_:
  151|    853|{
  152|    853|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  153|    853|}
_ZN8opendnp311Group22Var610ReadTargetERN7ser4cpp4RSeqImEERNS_7CounterE:
  161|    853|{
  162|    853|  Group22Var6 value;
  163|    853|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 853, False: 0]
  ------------------
  164|    853|  {
  165|    853|    output = CounterFactory::From(value.flags, value.value, value.time);
  166|    853|    return true;
  167|    853|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|    853|}

_ZN8opendnp311Group22Var14SizeEv:
   56|    251|  static size_t Size() { return 5; }
_ZN8opendnp311Group22Var24SizeEv:
   78|    289|  static size_t Size() { return 3; }
_ZN8opendnp311Group22Var54SizeEv:
  100|    439|  static size_t Size() { return 11; }
_ZN8opendnp311Group22Var64SizeEv:
  123|    538|  static size_t Size() { return 9; }

_ZN8opendnp311Group23Var1C2Ev:
   45|    958|Group23Var1::Group23Var1() : flags(0), value(0)
   46|    958|{}
_ZN8opendnp311Group23Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    958|{
   50|    958|  return LittleEndian::read(buffer, output.flags, output.value);
   51|    958|}
_ZN8opendnp311Group23Var110ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
   59|    958|{
   60|    958|  Group23Var1 value;
   61|    958|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 958, False: 0]
  ------------------
   62|    958|  {
   63|    958|    output = FrozenCounterFactory::From(value.flags, value.value);
   64|    958|    return true;
   65|    958|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|    958|}
_ZN8opendnp311Group23Var2C2Ev:
   79|  1.09k|Group23Var2::Group23Var2() : flags(0), value(0)
   80|  1.09k|{}
_ZN8opendnp311Group23Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.09k|{
   84|  1.09k|  return LittleEndian::read(buffer, output.flags, output.value);
   85|  1.09k|}
_ZN8opendnp311Group23Var210ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
   93|  1.09k|{
   94|  1.09k|  Group23Var2 value;
   95|  1.09k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.09k, False: 0]
  ------------------
   96|  1.09k|  {
   97|  1.09k|    output = FrozenCounterFactory::From(value.flags, value.value);
   98|  1.09k|    return true;
   99|  1.09k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.09k|}
_ZN8opendnp311Group23Var5C2Ev:
  113|    748|Group23Var5::Group23Var5() : flags(0), value(0), time(0)
  114|    748|{}
_ZN8opendnp311Group23Var54ReadERN7ser4cpp4RSeqImEERS0_:
  117|    748|{
  118|    748|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  119|    748|}
_ZN8opendnp311Group23Var510ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
  127|    748|{
  128|    748|  Group23Var5 value;
  129|    748|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 748, False: 0]
  ------------------
  130|    748|  {
  131|    748|    output = FrozenCounterFactory::From(value.flags, value.value, value.time);
  132|    748|    return true;
  133|    748|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|    748|}
_ZN8opendnp311Group23Var6C2Ev:
  147|    800|Group23Var6::Group23Var6() : flags(0), value(0), time(0)
  148|    800|{}
_ZN8opendnp311Group23Var64ReadERN7ser4cpp4RSeqImEERS0_:
  151|    800|{
  152|    800|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  153|    800|}
_ZN8opendnp311Group23Var610ReadTargetERN7ser4cpp4RSeqImEERNS_13FrozenCounterE:
  161|    800|{
  162|    800|  Group23Var6 value;
  163|    800|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 800, False: 0]
  ------------------
  164|    800|  {
  165|    800|    output = FrozenCounterFactory::From(value.flags, value.value, value.time);
  166|    800|    return true;
  167|    800|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|    800|}

_ZN8opendnp311Group23Var14SizeEv:
   56|    444|  static size_t Size() { return 5; }
_ZN8opendnp311Group23Var24SizeEv:
   78|    229|  static size_t Size() { return 3; }
_ZN8opendnp311Group23Var54SizeEv:
  100|    292|  static size_t Size() { return 11; }
_ZN8opendnp311Group23Var64SizeEv:
  123|    384|  static size_t Size() { return 9; }

_ZN8opendnp310Group3Var2C2Ev:
   45|  1.84k|Group3Var2::Group3Var2() : flags(0)
   46|  1.84k|{}
_ZN8opendnp310Group3Var24ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.84k|{
   50|  1.84k|  return LittleEndian::read(buffer, output.flags);
   51|  1.84k|}
_ZN8opendnp310Group3Var210ReadTargetERN7ser4cpp4RSeqImEERNS_15DoubleBitBinaryE:
   59|  1.84k|{
   60|  1.84k|  Group3Var2 value;
   61|  1.84k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.84k, False: 0]
  ------------------
   62|  1.84k|  {
   63|  1.84k|    output = DoubleBitBinaryFactory::From(value.flags);
   64|  1.84k|    return true;
   65|  1.84k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.84k|}

_ZN8opendnp310Group3Var24SizeEv:
   62|    515|  static size_t Size() { return 1; }

_ZN8opendnp311Group30Var1C2Ev:
   45|  1.26k|Group30Var1::Group30Var1() : flags(0), value(0)
   46|  1.26k|{}
_ZN8opendnp311Group30Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.26k|{
   50|  1.26k|  return LittleEndian::read(buffer, output.flags, output.value);
   51|  1.26k|}
_ZN8opendnp311Group30Var110ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
   59|  1.26k|{
   60|  1.26k|  Group30Var1 value;
   61|  1.26k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.26k, False: 0]
  ------------------
   62|  1.26k|  {
   63|  1.26k|    output = AnalogFactory::From(value.flags, value.value);
   64|  1.26k|    return true;
   65|  1.26k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.26k|}
_ZN8opendnp311Group30Var2C2Ev:
   79|  1.84k|Group30Var2::Group30Var2() : flags(0), value(0)
   80|  1.84k|{}
_ZN8opendnp311Group30Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.84k|{
   84|  1.84k|  return LittleEndian::read(buffer, output.flags, output.value);
   85|  1.84k|}
_ZN8opendnp311Group30Var210ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
   93|  1.84k|{
   94|  1.84k|  Group30Var2 value;
   95|  1.84k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.84k, False: 0]
  ------------------
   96|  1.84k|  {
   97|  1.84k|    output = AnalogFactory::From(value.flags, value.value);
   98|  1.84k|    return true;
   99|  1.84k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.84k|}
_ZN8opendnp311Group30Var3C2Ev:
  113|    764|Group30Var3::Group30Var3() : value(0)
  114|    764|{}
_ZN8opendnp311Group30Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|    764|{
  118|    764|  return LittleEndian::read(buffer, output.value);
  119|    764|}
_ZN8opendnp311Group30Var310ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  127|    764|{
  128|    764|  Group30Var3 value;
  129|    764|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 764, False: 0]
  ------------------
  130|    764|  {
  131|    764|    output = AnalogFactory::From(value.value);
  132|    764|    return true;
  133|    764|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|    764|}
_ZN8opendnp311Group30Var4C2Ev:
  147|    936|Group30Var4::Group30Var4() : value(0)
  148|    936|{}
_ZN8opendnp311Group30Var44ReadERN7ser4cpp4RSeqImEERS0_:
  151|    936|{
  152|    936|  return LittleEndian::read(buffer, output.value);
  153|    936|}
_ZN8opendnp311Group30Var410ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  161|    936|{
  162|    936|  Group30Var4 value;
  163|    936|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 936, False: 0]
  ------------------
  164|    936|  {
  165|    936|    output = AnalogFactory::From(value.value);
  166|    936|    return true;
  167|    936|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|    936|}
_ZN8opendnp311Group30Var5C2Ev:
  181|  1.73k|Group30Var5::Group30Var5() : flags(0), value(0.0)
  182|  1.73k|{}
_ZN8opendnp311Group30Var54ReadERN7ser4cpp4RSeqImEERS0_:
  185|  1.73k|{
  186|  1.73k|  return LittleEndian::read(buffer, output.flags, output.value);
  187|  1.73k|}
_ZN8opendnp311Group30Var510ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  195|  1.73k|{
  196|  1.73k|  Group30Var5 value;
  197|  1.73k|  if(Read(buff, value))
  ------------------
  |  Branch (197:6): [True: 1.73k, False: 0]
  ------------------
  198|  1.73k|  {
  199|  1.73k|    output = AnalogFactory::From(value.flags, value.value);
  200|  1.73k|    return true;
  201|  1.73k|  }
  202|      0|  else
  203|      0|  {
  204|      0|    return false;
  205|      0|  }
  206|  1.73k|}
_ZN8opendnp311Group30Var6C2Ev:
  215|    834|Group30Var6::Group30Var6() : flags(0), value(0.0)
  216|    834|{}
_ZN8opendnp311Group30Var64ReadERN7ser4cpp4RSeqImEERS0_:
  219|    834|{
  220|    834|  return LittleEndian::read(buffer, output.flags, output.value);
  221|    834|}
_ZN8opendnp311Group30Var610ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  229|    834|{
  230|    834|  Group30Var6 value;
  231|    834|  if(Read(buff, value))
  ------------------
  |  Branch (231:6): [True: 834, False: 0]
  ------------------
  232|    834|  {
  233|    834|    output = AnalogFactory::From(value.flags, value.value);
  234|    834|    return true;
  235|    834|  }
  236|      0|  else
  237|      0|  {
  238|      0|    return false;
  239|      0|  }
  240|    834|}

_ZN8opendnp311Group30Var14SizeEv:
   56|    671|  static size_t Size() { return 5; }
_ZN8opendnp311Group30Var24SizeEv:
   79|    346|  static size_t Size() { return 3; }
_ZN8opendnp311Group30Var34SizeEv:
  102|    348|  static size_t Size() { return 4; }
_ZN8opendnp311Group30Var44SizeEv:
  124|    482|  static size_t Size() { return 2; }
_ZN8opendnp311Group30Var54SizeEv:
  146|    382|  static size_t Size() { return 5; }
_ZN8opendnp311Group30Var64SizeEv:
  169|    472|  static size_t Size() { return 9; }

_ZN8opendnp311Group32Var1C2Ev:
   45|    482|Group32Var1::Group32Var1() : flags(0), value(0)
   46|    482|{}
_ZN8opendnp311Group32Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    482|{
   50|    482|  return LittleEndian::read(buffer, output.flags, output.value);
   51|    482|}
_ZN8opendnp311Group32Var110ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
   59|    482|{
   60|    482|  Group32Var1 value;
   61|    482|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 482, False: 0]
  ------------------
   62|    482|  {
   63|    482|    output = AnalogFactory::From(value.flags, value.value);
   64|    482|    return true;
   65|    482|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|    482|}
_ZN8opendnp311Group32Var2C2Ev:
   79|  1.02k|Group32Var2::Group32Var2() : flags(0), value(0)
   80|  1.02k|{}
_ZN8opendnp311Group32Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.02k|{
   84|  1.02k|  return LittleEndian::read(buffer, output.flags, output.value);
   85|  1.02k|}
_ZN8opendnp311Group32Var210ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
   93|  1.02k|{
   94|  1.02k|  Group32Var2 value;
   95|  1.02k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.02k, False: 0]
  ------------------
   96|  1.02k|  {
   97|  1.02k|    output = AnalogFactory::From(value.flags, value.value);
   98|  1.02k|    return true;
   99|  1.02k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.02k|}
_ZN8opendnp311Group32Var3C2Ev:
  113|    556|Group32Var3::Group32Var3() : flags(0), value(0), time(0)
  114|    556|{}
_ZN8opendnp311Group32Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|    556|{
  118|    556|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  119|    556|}
_ZN8opendnp311Group32Var310ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  127|    556|{
  128|    556|  Group32Var3 value;
  129|    556|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 556, False: 0]
  ------------------
  130|    556|  {
  131|    556|    output = AnalogFactory::From(value.flags, value.value, value.time);
  132|    556|    return true;
  133|    556|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|    556|}
_ZN8opendnp311Group32Var4C2Ev:
  147|    689|Group32Var4::Group32Var4() : flags(0), value(0), time(0)
  148|    689|{}
_ZN8opendnp311Group32Var44ReadERN7ser4cpp4RSeqImEERS0_:
  151|    689|{
  152|    689|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  153|    689|}
_ZN8opendnp311Group32Var410ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  161|    689|{
  162|    689|  Group32Var4 value;
  163|    689|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 689, False: 0]
  ------------------
  164|    689|  {
  165|    689|    output = AnalogFactory::From(value.flags, value.value, value.time);
  166|    689|    return true;
  167|    689|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|    689|}
_ZN8opendnp311Group32Var5C2Ev:
  181|    701|Group32Var5::Group32Var5() : flags(0), value(0.0)
  182|    701|{}
_ZN8opendnp311Group32Var54ReadERN7ser4cpp4RSeqImEERS0_:
  185|    701|{
  186|    701|  return LittleEndian::read(buffer, output.flags, output.value);
  187|    701|}
_ZN8opendnp311Group32Var510ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  195|    701|{
  196|    701|  Group32Var5 value;
  197|    701|  if(Read(buff, value))
  ------------------
  |  Branch (197:6): [True: 701, False: 0]
  ------------------
  198|    701|  {
  199|    701|    output = AnalogFactory::From(value.flags, value.value);
  200|    701|    return true;
  201|    701|  }
  202|      0|  else
  203|      0|  {
  204|      0|    return false;
  205|      0|  }
  206|    701|}
_ZN8opendnp311Group32Var6C2Ev:
  215|    836|Group32Var6::Group32Var6() : flags(0), value(0.0)
  216|    836|{}
_ZN8opendnp311Group32Var64ReadERN7ser4cpp4RSeqImEERS0_:
  219|    836|{
  220|    836|  return LittleEndian::read(buffer, output.flags, output.value);
  221|    836|}
_ZN8opendnp311Group32Var610ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  229|    836|{
  230|    836|  Group32Var6 value;
  231|    836|  if(Read(buff, value))
  ------------------
  |  Branch (231:6): [True: 836, False: 0]
  ------------------
  232|    836|  {
  233|    836|    output = AnalogFactory::From(value.flags, value.value);
  234|    836|    return true;
  235|    836|  }
  236|      0|  else
  237|      0|  {
  238|      0|    return false;
  239|      0|  }
  240|    836|}
_ZN8opendnp311Group32Var7C2Ev:
  249|    453|Group32Var7::Group32Var7() : flags(0), value(0.0), time(0)
  250|    453|{}
_ZN8opendnp311Group32Var74ReadERN7ser4cpp4RSeqImEERS0_:
  253|    453|{
  254|    453|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  255|    453|}
_ZN8opendnp311Group32Var710ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  263|    453|{
  264|    453|  Group32Var7 value;
  265|    453|  if(Read(buff, value))
  ------------------
  |  Branch (265:6): [True: 453, False: 0]
  ------------------
  266|    453|  {
  267|    453|    output = AnalogFactory::From(value.flags, value.value, value.time);
  268|    453|    return true;
  269|    453|  }
  270|      0|  else
  271|      0|  {
  272|      0|    return false;
  273|      0|  }
  274|    453|}
_ZN8opendnp311Group32Var8C2Ev:
  283|    600|Group32Var8::Group32Var8() : flags(0), value(0.0), time(0)
  284|    600|{}
_ZN8opendnp311Group32Var84ReadERN7ser4cpp4RSeqImEERS0_:
  287|    600|{
  288|    600|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  289|    600|}
_ZN8opendnp311Group32Var810ReadTargetERN7ser4cpp4RSeqImEERNS_6AnalogE:
  297|    600|{
  298|    600|  Group32Var8 value;
  299|    600|  if(Read(buff, value))
  ------------------
  |  Branch (299:6): [True: 600, False: 0]
  ------------------
  300|    600|  {
  301|    600|    output = AnalogFactory::From(value.flags, value.value, value.time);
  302|    600|    return true;
  303|    600|  }
  304|      0|  else
  305|      0|  {
  306|      0|    return false;
  307|      0|  }
  308|    600|}

_ZN8opendnp311Group32Var14SizeEv:
   56|    273|  static size_t Size() { return 5; }
_ZN8opendnp311Group32Var24SizeEv:
   78|    217|  static size_t Size() { return 3; }
_ZN8opendnp311Group32Var34SizeEv:
  100|    296|  static size_t Size() { return 11; }
_ZN8opendnp311Group32Var44SizeEv:
  123|    403|  static size_t Size() { return 9; }
_ZN8opendnp311Group32Var54SizeEv:
  146|    271|  static size_t Size() { return 5; }
_ZN8opendnp311Group32Var64SizeEv:
  168|    583|  static size_t Size() { return 9; }
_ZN8opendnp311Group32Var74SizeEv:
  190|    362|  static size_t Size() { return 11; }
_ZN8opendnp311Group32Var84SizeEv:
  213|    451|  static size_t Size() { return 15; }

_ZN8opendnp310Group4Var1C2Ev:
   45|  1.69k|Group4Var1::Group4Var1() : flags(0)
   46|  1.69k|{}
_ZN8opendnp310Group4Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.69k|{
   50|  1.69k|  return LittleEndian::read(buffer, output.flags);
   51|  1.69k|}
_ZN8opendnp310Group4Var110ReadTargetERN7ser4cpp4RSeqImEERNS_15DoubleBitBinaryE:
   59|  1.69k|{
   60|  1.69k|  Group4Var1 value;
   61|  1.69k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.69k, False: 0]
  ------------------
   62|  1.69k|  {
   63|  1.69k|    output = DoubleBitBinaryFactory::From(value.flags);
   64|  1.69k|    return true;
   65|  1.69k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.69k|}
_ZN8opendnp310Group4Var2C2Ev:
   79|    571|Group4Var2::Group4Var2() : flags(0), time(0)
   80|    571|{}
_ZN8opendnp310Group4Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|    571|{
   84|    571|  return LittleEndian::read(buffer, output.flags, output.time);
   85|    571|}
_ZN8opendnp310Group4Var210ReadTargetERN7ser4cpp4RSeqImEERNS_15DoubleBitBinaryE:
   93|    571|{
   94|    571|  Group4Var2 value;
   95|    571|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 571, False: 0]
  ------------------
   96|    571|  {
   97|    571|    output = DoubleBitBinaryFactory::From(value.flags, value.time);
   98|    571|    return true;
   99|    571|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|    571|}
_ZN8opendnp310Group4Var3C2Ev:
  113|  1.48k|Group4Var3::Group4Var3() : flags(0), time(0)
  114|  1.48k|{}
_ZN8opendnp310Group4Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|  1.48k|{
  118|  1.48k|  return LittleEndian::read(buffer, output.flags, output.time);
  119|  1.48k|}
_ZN8opendnp310Group4Var310ReadTargetERN7ser4cpp4RSeqImEERNS_15DoubleBitBinaryE:
  127|  1.48k|{
  128|  1.48k|  Group4Var3 value;
  129|  1.48k|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 1.48k, False: 0]
  ------------------
  130|  1.48k|  {
  131|  1.48k|    output = DoubleBitBinaryFactory::From(value.flags, value.time);
  132|  1.48k|    return true;
  133|  1.48k|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|  1.48k|}

_ZN8opendnp310Group4Var14SizeEv:
   56|    279|  static size_t Size() { return 1; }
_ZN8opendnp310Group4Var24SizeEv:
   76|    373|  static size_t Size() { return 7; }
_ZN8opendnp310Group4Var34SizeEv:
   97|    234|  static size_t Size() { return 3; }

_ZN8opendnp311Group40Var1C2Ev:
   45|  1.32k|Group40Var1::Group40Var1() : flags(0), value(0)
   46|  1.32k|{}
_ZN8opendnp311Group40Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|  1.32k|{
   50|  1.32k|  return LittleEndian::read(buffer, output.flags, output.value);
   51|  1.32k|}
_ZN8opendnp311Group40Var110ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
   59|  1.32k|{
   60|  1.32k|  Group40Var1 value;
   61|  1.32k|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 1.32k, False: 0]
  ------------------
   62|  1.32k|  {
   63|  1.32k|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
   64|  1.32k|    return true;
   65|  1.32k|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|  1.32k|}
_ZN8opendnp311Group40Var2C2Ev:
   79|  1.00k|Group40Var2::Group40Var2() : flags(0), value(0)
   80|  1.00k|{}
_ZN8opendnp311Group40Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.00k|{
   84|  1.00k|  return LittleEndian::read(buffer, output.flags, output.value);
   85|  1.00k|}
_ZN8opendnp311Group40Var210ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
   93|  1.00k|{
   94|  1.00k|  Group40Var2 value;
   95|  1.00k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.00k, False: 0]
  ------------------
   96|  1.00k|  {
   97|  1.00k|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
   98|  1.00k|    return true;
   99|  1.00k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.00k|}
_ZN8opendnp311Group40Var3C2Ev:
  113|  2.67k|Group40Var3::Group40Var3() : flags(0), value(0.0)
  114|  2.67k|{}
_ZN8opendnp311Group40Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|  2.67k|{
  118|  2.67k|  return LittleEndian::read(buffer, output.flags, output.value);
  119|  2.67k|}
_ZN8opendnp311Group40Var310ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  127|  2.67k|{
  128|  2.67k|  Group40Var3 value;
  129|  2.67k|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 2.67k, False: 0]
  ------------------
  130|  2.67k|  {
  131|  2.67k|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
  132|  2.67k|    return true;
  133|  2.67k|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|  2.67k|}
_ZN8opendnp311Group40Var4C2Ev:
  147|  1.76k|Group40Var4::Group40Var4() : flags(0), value(0.0)
  148|  1.76k|{}
_ZN8opendnp311Group40Var44ReadERN7ser4cpp4RSeqImEERS0_:
  151|  1.76k|{
  152|  1.76k|  return LittleEndian::read(buffer, output.flags, output.value);
  153|  1.76k|}
_ZN8opendnp311Group40Var410ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  161|  1.76k|{
  162|  1.76k|  Group40Var4 value;
  163|  1.76k|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 1.76k, False: 0]
  ------------------
  164|  1.76k|  {
  165|  1.76k|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
  166|  1.76k|    return true;
  167|  1.76k|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|  1.76k|}

_ZN8opendnp311Group40Var14SizeEv:
   56|    460|  static size_t Size() { return 5; }
_ZN8opendnp311Group40Var24SizeEv:
   79|    447|  static size_t Size() { return 3; }
_ZN8opendnp311Group40Var34SizeEv:
  102|    718|  static size_t Size() { return 5; }
_ZN8opendnp311Group40Var44SizeEv:
  125|    630|  static size_t Size() { return 9; }

_ZN8opendnp311Group41Var1C2Ev:
   45|    736|Group41Var1::Group41Var1() : value(0), status(0)
   46|    736|{}
_ZN8opendnp311Group41Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    736|{
   50|    736|  return LittleEndian::read(buffer, output.value, output.status);
   51|    736|}
_ZN8opendnp311Group41Var110ReadTargetERN7ser4cpp4RSeqImEERNS_17AnalogOutputInt32E:
   59|    736|{
   60|    736|  Group41Var1 value;
   61|    736|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 736, False: 0]
  ------------------
   62|    736|  {
   63|    736|    output = AnalogOutputInt32Factory::From(value.value, value.status);
   64|    736|    return true;
   65|    736|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|    736|}
_ZN8opendnp311Group41Var2C2Ev:
   79|  1.50k|Group41Var2::Group41Var2() : value(0), status(0)
   80|  1.50k|{}
_ZN8opendnp311Group41Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|  1.50k|{
   84|  1.50k|  return LittleEndian::read(buffer, output.value, output.status);
   85|  1.50k|}
_ZN8opendnp311Group41Var210ReadTargetERN7ser4cpp4RSeqImEERNS_17AnalogOutputInt16E:
   93|  1.50k|{
   94|  1.50k|  Group41Var2 value;
   95|  1.50k|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 1.50k, False: 0]
  ------------------
   96|  1.50k|  {
   97|  1.50k|    output = AnalogOutputInt16Factory::From(value.value, value.status);
   98|  1.50k|    return true;
   99|  1.50k|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|  1.50k|}
_ZN8opendnp311Group41Var3C2Ev:
  113|  1.05k|Group41Var3::Group41Var3() : value(0.0), status(0)
  114|  1.05k|{}
_ZN8opendnp311Group41Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|  1.05k|{
  118|  1.05k|  return LittleEndian::read(buffer, output.value, output.status);
  119|  1.05k|}
_ZN8opendnp311Group41Var310ReadTargetERN7ser4cpp4RSeqImEERNS_19AnalogOutputFloat32E:
  127|  1.05k|{
  128|  1.05k|  Group41Var3 value;
  129|  1.05k|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 1.05k, False: 0]
  ------------------
  130|  1.05k|  {
  131|  1.05k|    output = AnalogOutputFloat32Factory::From(value.value, value.status);
  132|  1.05k|    return true;
  133|  1.05k|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|  1.05k|}
_ZN8opendnp311Group41Var4C2Ev:
  147|  1.07k|Group41Var4::Group41Var4() : value(0.0), status(0)
  148|  1.07k|{}
_ZN8opendnp311Group41Var44ReadERN7ser4cpp4RSeqImEERS0_:
  151|  1.07k|{
  152|  1.07k|  return LittleEndian::read(buffer, output.value, output.status);
  153|  1.07k|}
_ZN8opendnp311Group41Var410ReadTargetERN7ser4cpp4RSeqImEERNS_20AnalogOutputDouble64E:
  161|  1.07k|{
  162|  1.07k|  Group41Var4 value;
  163|  1.07k|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 1.07k, False: 0]
  ------------------
  164|  1.07k|  {
  165|  1.07k|    output = AnalogOutputDouble64Factory::From(value.value, value.status);
  166|  1.07k|    return true;
  167|  1.07k|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|  1.07k|}

_ZN8opendnp311Group41Var14SizeEv:
   56|    344|  static size_t Size() { return 5; }
_ZN8opendnp311Group41Var24SizeEv:
   77|    286|  static size_t Size() { return 3; }
_ZN8opendnp311Group41Var34SizeEv:
   98|    328|  static size_t Size() { return 5; }
_ZN8opendnp311Group41Var44SizeEv:
  119|    642|  static size_t Size() { return 9; }

_ZN8opendnp311Group42Var1C2Ev:
   45|    655|Group42Var1::Group42Var1() : flags(0), value(0)
   46|    655|{}
_ZN8opendnp311Group42Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    655|{
   50|    655|  return LittleEndian::read(buffer, output.flags, output.value);
   51|    655|}
_ZN8opendnp311Group42Var110ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
   59|    655|{
   60|    655|  Group42Var1 value;
   61|    655|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 655, False: 0]
  ------------------
   62|    655|  {
   63|    655|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
   64|    655|    return true;
   65|    655|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|    655|}
_ZN8opendnp311Group42Var2C2Ev:
   79|    732|Group42Var2::Group42Var2() : flags(0), value(0)
   80|    732|{}
_ZN8opendnp311Group42Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|    732|{
   84|    732|  return LittleEndian::read(buffer, output.flags, output.value);
   85|    732|}
_ZN8opendnp311Group42Var210ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
   93|    732|{
   94|    732|  Group42Var2 value;
   95|    732|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 732, False: 0]
  ------------------
   96|    732|  {
   97|    732|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
   98|    732|    return true;
   99|    732|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|    732|}
_ZN8opendnp311Group42Var3C2Ev:
  113|  1.05k|Group42Var3::Group42Var3() : flags(0), value(0), time(0)
  114|  1.05k|{}
_ZN8opendnp311Group42Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|  1.05k|{
  118|  1.05k|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  119|  1.05k|}
_ZN8opendnp311Group42Var310ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  127|  1.05k|{
  128|  1.05k|  Group42Var3 value;
  129|  1.05k|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 1.05k, False: 0]
  ------------------
  130|  1.05k|  {
  131|  1.05k|    output = AnalogOutputStatusFactory::From(value.flags, value.value, value.time);
  132|  1.05k|    return true;
  133|  1.05k|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|  1.05k|}
_ZN8opendnp311Group42Var4C2Ev:
  147|    789|Group42Var4::Group42Var4() : flags(0), value(0), time(0)
  148|    789|{}
_ZN8opendnp311Group42Var44ReadERN7ser4cpp4RSeqImEERS0_:
  151|    789|{
  152|    789|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  153|    789|}
_ZN8opendnp311Group42Var410ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  161|    789|{
  162|    789|  Group42Var4 value;
  163|    789|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 789, False: 0]
  ------------------
  164|    789|  {
  165|    789|    output = AnalogOutputStatusFactory::From(value.flags, value.value, value.time);
  166|    789|    return true;
  167|    789|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|    789|}
_ZN8opendnp311Group42Var5C2Ev:
  181|  1.06k|Group42Var5::Group42Var5() : flags(0), value(0.0)
  182|  1.06k|{}
_ZN8opendnp311Group42Var54ReadERN7ser4cpp4RSeqImEERS0_:
  185|  1.06k|{
  186|  1.06k|  return LittleEndian::read(buffer, output.flags, output.value);
  187|  1.06k|}
_ZN8opendnp311Group42Var510ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  195|  1.06k|{
  196|  1.06k|  Group42Var5 value;
  197|  1.06k|  if(Read(buff, value))
  ------------------
  |  Branch (197:6): [True: 1.06k, False: 0]
  ------------------
  198|  1.06k|  {
  199|  1.06k|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
  200|  1.06k|    return true;
  201|  1.06k|  }
  202|      0|  else
  203|      0|  {
  204|      0|    return false;
  205|      0|  }
  206|  1.06k|}
_ZN8opendnp311Group42Var6C2Ev:
  215|    886|Group42Var6::Group42Var6() : flags(0), value(0.0)
  216|    886|{}
_ZN8opendnp311Group42Var64ReadERN7ser4cpp4RSeqImEERS0_:
  219|    886|{
  220|    886|  return LittleEndian::read(buffer, output.flags, output.value);
  221|    886|}
_ZN8opendnp311Group42Var610ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  229|    886|{
  230|    886|  Group42Var6 value;
  231|    886|  if(Read(buff, value))
  ------------------
  |  Branch (231:6): [True: 886, False: 0]
  ------------------
  232|    886|  {
  233|    886|    output = AnalogOutputStatusFactory::From(value.flags, value.value);
  234|    886|    return true;
  235|    886|  }
  236|      0|  else
  237|      0|  {
  238|      0|    return false;
  239|      0|  }
  240|    886|}
_ZN8opendnp311Group42Var7C2Ev:
  249|    801|Group42Var7::Group42Var7() : flags(0), value(0.0), time(0)
  250|    801|{}
_ZN8opendnp311Group42Var74ReadERN7ser4cpp4RSeqImEERS0_:
  253|    801|{
  254|    801|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  255|    801|}
_ZN8opendnp311Group42Var710ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  263|    801|{
  264|    801|  Group42Var7 value;
  265|    801|  if(Read(buff, value))
  ------------------
  |  Branch (265:6): [True: 801, False: 0]
  ------------------
  266|    801|  {
  267|    801|    output = AnalogOutputStatusFactory::From(value.flags, value.value, value.time);
  268|    801|    return true;
  269|    801|  }
  270|      0|  else
  271|      0|  {
  272|      0|    return false;
  273|      0|  }
  274|    801|}
_ZN8opendnp311Group42Var8C2Ev:
  283|    422|Group42Var8::Group42Var8() : flags(0), value(0.0), time(0)
  284|    422|{}
_ZN8opendnp311Group42Var84ReadERN7ser4cpp4RSeqImEERS0_:
  287|    422|{
  288|    422|  return LittleEndian::read(buffer, output.flags, output.value, output.time);
  289|    422|}
_ZN8opendnp311Group42Var810ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogOutputStatusE:
  297|    422|{
  298|    422|  Group42Var8 value;
  299|    422|  if(Read(buff, value))
  ------------------
  |  Branch (299:6): [True: 422, False: 0]
  ------------------
  300|    422|  {
  301|    422|    output = AnalogOutputStatusFactory::From(value.flags, value.value, value.time);
  302|    422|    return true;
  303|    422|  }
  304|      0|  else
  305|      0|  {
  306|      0|    return false;
  307|      0|  }
  308|    422|}

_ZN8opendnp311Group42Var14SizeEv:
   56|    221|  static size_t Size() { return 5; }
_ZN8opendnp311Group42Var24SizeEv:
   78|    467|  static size_t Size() { return 3; }
_ZN8opendnp311Group42Var34SizeEv:
  100|    459|  static size_t Size() { return 11; }
_ZN8opendnp311Group42Var44SizeEv:
  123|    342|  static size_t Size() { return 9; }
_ZN8opendnp311Group42Var54SizeEv:
  146|    492|  static size_t Size() { return 5; }
_ZN8opendnp311Group42Var64SizeEv:
  168|    472|  static size_t Size() { return 9; }
_ZN8opendnp311Group42Var74SizeEv:
  190|    411|  static size_t Size() { return 11; }
_ZN8opendnp311Group42Var84SizeEv:
  213|    403|  static size_t Size() { return 15; }

_ZN8opendnp311Group43Var1C2Ev:
   45|    988|Group43Var1::Group43Var1() : status(0), value(0)
   46|    988|{}
_ZN8opendnp311Group43Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    988|{
   50|    988|  return LittleEndian::read(buffer, output.status, output.value);
   51|    988|}
_ZN8opendnp311Group43Var110ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
   59|    988|{
   60|    988|  Group43Var1 value;
   61|    988|  if(Read(buff, value))
  ------------------
  |  Branch (61:6): [True: 988, False: 0]
  ------------------
   62|    988|  {
   63|    988|    output = AnalogCommandEventFactory::From(value.status, value.value);
   64|    988|    return true;
   65|    988|  }
   66|      0|  else
   67|      0|  {
   68|      0|    return false;
   69|      0|  }
   70|    988|}
_ZN8opendnp311Group43Var2C2Ev:
   79|    710|Group43Var2::Group43Var2() : status(0), value(0)
   80|    710|{}
_ZN8opendnp311Group43Var24ReadERN7ser4cpp4RSeqImEERS0_:
   83|    710|{
   84|    710|  return LittleEndian::read(buffer, output.status, output.value);
   85|    710|}
_ZN8opendnp311Group43Var210ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
   93|    710|{
   94|    710|  Group43Var2 value;
   95|    710|  if(Read(buff, value))
  ------------------
  |  Branch (95:6): [True: 710, False: 0]
  ------------------
   96|    710|  {
   97|    710|    output = AnalogCommandEventFactory::From(value.status, value.value);
   98|    710|    return true;
   99|    710|  }
  100|      0|  else
  101|      0|  {
  102|      0|    return false;
  103|      0|  }
  104|    710|}
_ZN8opendnp311Group43Var3C2Ev:
  113|    755|Group43Var3::Group43Var3() : status(0), value(0), time(0)
  114|    755|{}
_ZN8opendnp311Group43Var34ReadERN7ser4cpp4RSeqImEERS0_:
  117|    755|{
  118|    755|  return LittleEndian::read(buffer, output.status, output.value, output.time);
  119|    755|}
_ZN8opendnp311Group43Var310ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
  127|    755|{
  128|    755|  Group43Var3 value;
  129|    755|  if(Read(buff, value))
  ------------------
  |  Branch (129:6): [True: 755, False: 0]
  ------------------
  130|    755|  {
  131|    755|    output = AnalogCommandEventFactory::From(value.status, value.value, value.time);
  132|    755|    return true;
  133|    755|  }
  134|      0|  else
  135|      0|  {
  136|      0|    return false;
  137|      0|  }
  138|    755|}
_ZN8opendnp311Group43Var4C2Ev:
  147|    667|Group43Var4::Group43Var4() : status(0), value(0), time(0)
  148|    667|{}
_ZN8opendnp311Group43Var44ReadERN7ser4cpp4RSeqImEERS0_:
  151|    667|{
  152|    667|  return LittleEndian::read(buffer, output.status, output.value, output.time);
  153|    667|}
_ZN8opendnp311Group43Var410ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
  161|    667|{
  162|    667|  Group43Var4 value;
  163|    667|  if(Read(buff, value))
  ------------------
  |  Branch (163:6): [True: 667, False: 0]
  ------------------
  164|    667|  {
  165|    667|    output = AnalogCommandEventFactory::From(value.status, value.value, value.time);
  166|    667|    return true;
  167|    667|  }
  168|      0|  else
  169|      0|  {
  170|      0|    return false;
  171|      0|  }
  172|    667|}
_ZN8opendnp311Group43Var5C2Ev:
  181|  1.13k|Group43Var5::Group43Var5() : status(0), value(0.0)
  182|  1.13k|{}
_ZN8opendnp311Group43Var54ReadERN7ser4cpp4RSeqImEERS0_:
  185|  1.13k|{
  186|  1.13k|  return LittleEndian::read(buffer, output.status, output.value);
  187|  1.13k|}
_ZN8opendnp311Group43Var510ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
  195|  1.13k|{
  196|  1.13k|  Group43Var5 value;
  197|  1.13k|  if(Read(buff, value))
  ------------------
  |  Branch (197:6): [True: 1.13k, False: 0]
  ------------------
  198|  1.13k|  {
  199|  1.13k|    output = AnalogCommandEventFactory::From(value.status, value.value);
  200|  1.13k|    return true;
  201|  1.13k|  }
  202|      0|  else
  203|      0|  {
  204|      0|    return false;
  205|      0|  }
  206|  1.13k|}
_ZN8opendnp311Group43Var6C2Ev:
  215|    888|Group43Var6::Group43Var6() : status(0), value(0.0)
  216|    888|{}
_ZN8opendnp311Group43Var64ReadERN7ser4cpp4RSeqImEERS0_:
  219|    888|{
  220|    888|  return LittleEndian::read(buffer, output.status, output.value);
  221|    888|}
_ZN8opendnp311Group43Var610ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
  229|    888|{
  230|    888|  Group43Var6 value;
  231|    888|  if(Read(buff, value))
  ------------------
  |  Branch (231:6): [True: 888, False: 0]
  ------------------
  232|    888|  {
  233|    888|    output = AnalogCommandEventFactory::From(value.status, value.value);
  234|    888|    return true;
  235|    888|  }
  236|      0|  else
  237|      0|  {
  238|      0|    return false;
  239|      0|  }
  240|    888|}
_ZN8opendnp311Group43Var7C2Ev:
  249|    766|Group43Var7::Group43Var7() : status(0), value(0.0), time(0)
  250|    766|{}
_ZN8opendnp311Group43Var74ReadERN7ser4cpp4RSeqImEERS0_:
  253|    766|{
  254|    766|  return LittleEndian::read(buffer, output.status, output.value, output.time);
  255|    766|}
_ZN8opendnp311Group43Var710ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
  263|    766|{
  264|    766|  Group43Var7 value;
  265|    766|  if(Read(buff, value))
  ------------------
  |  Branch (265:6): [True: 766, False: 0]
  ------------------
  266|    766|  {
  267|    766|    output = AnalogCommandEventFactory::From(value.status, value.value, value.time);
  268|    766|    return true;
  269|    766|  }
  270|      0|  else
  271|      0|  {
  272|      0|    return false;
  273|      0|  }
  274|    766|}
_ZN8opendnp311Group43Var8C2Ev:
  283|    750|Group43Var8::Group43Var8() : status(0), value(0.0), time(0)
  284|    750|{}
_ZN8opendnp311Group43Var84ReadERN7ser4cpp4RSeqImEERS0_:
  287|    750|{
  288|    750|  return LittleEndian::read(buffer, output.status, output.value, output.time);
  289|    750|}
_ZN8opendnp311Group43Var810ReadTargetERN7ser4cpp4RSeqImEERNS_18AnalogCommandEventE:
  297|    750|{
  298|    750|  Group43Var8 value;
  299|    750|  if(Read(buff, value))
  ------------------
  |  Branch (299:6): [True: 750, False: 0]
  ------------------
  300|    750|  {
  301|    750|    output = AnalogCommandEventFactory::From(value.status, value.value, value.time);
  302|    750|    return true;
  303|    750|  }
  304|      0|  else
  305|      0|  {
  306|      0|    return false;
  307|      0|  }
  308|    750|}

_ZN8opendnp311Group43Var14SizeEv:
   50|    410|  static size_t Size() { return 5; }
_ZN8opendnp311Group43Var24SizeEv:
   71|    234|  static size_t Size() { return 3; }
_ZN8opendnp311Group43Var34SizeEv:
   92|    288|  static size_t Size() { return 11; }
_ZN8opendnp311Group43Var44SizeEv:
  114|    420|  static size_t Size() { return 9; }
_ZN8opendnp311Group43Var54SizeEv:
  136|    497|  static size_t Size() { return 5; }
_ZN8opendnp311Group43Var64SizeEv:
  157|    406|  static size_t Size() { return 9; }
_ZN8opendnp311Group43Var74SizeEv:
  178|    369|  static size_t Size() { return 11; }
_ZN8opendnp311Group43Var84SizeEv:
  200|    467|  static size_t Size() { return 15; }

_ZN8opendnp311Group50Var1C2Ev:
   45|    850|Group50Var1::Group50Var1() : time(0)
   46|    850|{}
_ZN8opendnp311Group50Var14ReadERN7ser4cpp4RSeqImEERS0_:
   49|    850|{
   50|    850|  return LittleEndian::read(buffer, output.time);
   51|    850|}
_ZN8opendnp311Group50Var4C2Ev:
   75|  1.72k|Group50Var4::Group50Var4() : time(0), interval(0), units(0)
   76|  1.72k|{}
_ZN8opendnp311Group50Var44ReadERN7ser4cpp4RSeqImEERS0_:
   79|  1.72k|{
   80|  1.72k|  return LittleEndian::read(buffer, output.time, output.interval, output.units);
   81|  1.72k|}
_ZN8opendnp311Group50Var410ReadTargetERN7ser4cpp4RSeqImEERNS_15TimeAndIntervalE:
   89|  1.72k|{
   90|  1.72k|  Group50Var4 value;
   91|  1.72k|  if(Read(buff, value))
  ------------------
  |  Branch (91:6): [True: 1.72k, False: 0]
  ------------------
   92|  1.72k|  {
   93|  1.72k|    output = TimeAndIntervalFactory::From(value.time, value.interval, value.units);
   94|  1.72k|    return true;
   95|  1.72k|  }
   96|      0|  else
   97|      0|  {
   98|      0|    return false;
   99|      0|  }
  100|  1.72k|}

_ZN8opendnp311Group50Var14SizeEv:
   50|    466|  static size_t Size() { return 6; }
_ZN8opendnp311Group50Var34SizeEv:
   64|    419|  static size_t Size() { return 6; }
_ZN8opendnp311Group50Var44SizeEv:
   78|    930|  static size_t Size() { return 11; }

_ZN8opendnp311Group51Var1C2Ev:
   43|    593|Group51Var1::Group51Var1() : time(0)
   44|    593|{}
_ZN8opendnp311Group51Var14ReadERN7ser4cpp4RSeqImEERS0_:
   47|    593|{
   48|    593|  return LittleEndian::read(buffer, output.time);
   49|    593|}
_ZN8opendnp311Group51Var2C2Ev:
   58|  1.15k|Group51Var2::Group51Var2() : time(0)
   59|  1.15k|{}
_ZN8opendnp311Group51Var24ReadERN7ser4cpp4RSeqImEERS0_:
   62|  1.15k|{
   63|  1.15k|  return LittleEndian::read(buffer, output.time);
   64|  1.15k|}

_ZN8opendnp311Group51Var14SizeEv:
   48|    530|  static size_t Size() { return 6; }
_ZN8opendnp311Group51Var24SizeEv:
   62|    612|  static size_t Size() { return 6; }

_ZN8opendnp311Group52Var1C2Ev:
   43|  2.84k|Group52Var1::Group52Var1() : time(0)
   44|  2.84k|{}
_ZN8opendnp311Group52Var14ReadERN7ser4cpp4RSeqImEERS0_:
   47|  2.84k|{
   48|  2.84k|  return LittleEndian::read(buffer, output.time);
   49|  2.84k|}
_ZN8opendnp311Group52Var2C2Ev:
   58|  2.44k|Group52Var2::Group52Var2() : time(0)
   59|  2.44k|{}
_ZN8opendnp311Group52Var24ReadERN7ser4cpp4RSeqImEERS0_:
   62|  2.44k|{
   63|  2.44k|  return LittleEndian::read(buffer, output.time);
   64|  2.44k|}

_ZN8opendnp311Group52Var14SizeEv:
   48|    467|  static size_t Size() { return 2; }
_ZN8opendnp311Group52Var24SizeEv:
   62|    357|  static size_t Size() { return 2; }

_ZN8opendnp33CRC12IsCorrectCRCEPKhm:
   75|   126k|{
   76|       |// This definition is automatically set when compiling for OSS-Fuzz.
   77|       |// See https://llvm.org/docs/LibFuzzer.html#fuzzer-friendly-build-mode
   78|   126k|#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
   79|   126k|    return true;
   80|       |#else
   81|       |    ser4cpp::rseq_t buffer(input + length, 2);
   82|       |    uint16_t crcValue;
   83|       |    ser4cpp::UInt16::read_from(buffer, crcValue);
   84|       |    return CRC::CalcCrc(input, length) == crcValue;
   85|       |#endif
   86|   126k|}

_ZN8opendnp310IFrameSinkD2Ev:
   36|  6.68k|    virtual ~IFrameSink() {}

_ZN8opendnp39LinkFrame12ReadUserDataEPKhPhm:
   34|  37.8k|{
   35|  37.8k|    size_t length = len;
   36|  37.8k|    uint8_t const* pRead = pSrc;
   37|  37.8k|    uint8_t* pWrite = pDest;
   38|       |
   39|   122k|    while (length > 0)
  ------------------
  |  Branch (39:12): [True: 84.7k, False: 37.8k]
  ------------------
   40|  84.7k|    {
   41|  84.7k|        size_t max = LPDU_DATA_BLOCK_SIZE;
   42|  84.7k|        size_t num = (length <= max) ? length : max;
  ------------------
  |  Branch (42:22): [True: 37.5k, False: 47.1k]
  ------------------
   43|  84.7k|        size_t num_with_crc = num + 2;
   44|  84.7k|        memmove(pWrite, pRead, num);
   45|  84.7k|        pRead += num_with_crc;
   46|  84.7k|        pWrite += num;
   47|  84.7k|        length -= num;
   48|  84.7k|    }
   49|  37.8k|}
_ZN8opendnp39LinkFrame15ValidateBodyCRCEPKhm:
   52|  37.8k|{
   53|   122k|    while (length > 0)
  ------------------
  |  Branch (53:12): [True: 84.7k, False: 37.8k]
  ------------------
   54|  84.7k|    {
   55|  84.7k|        size_t max = LPDU_DATA_BLOCK_SIZE;
   56|  84.7k|        size_t num = (length <= max) ? length : max;
  ------------------
  |  Branch (56:22): [True: 37.5k, False: 47.1k]
  ------------------
   57|       |
   58|  84.7k|        if (CRC::IsCorrectCRC(pBody, num))
  ------------------
  |  Branch (58:13): [True: 84.7k, False: 0]
  ------------------
   59|  84.7k|        {
   60|  84.7k|            pBody += (num + 2);
   61|  84.7k|            length -= num;
   62|  84.7k|        }
   63|      0|        else
   64|      0|        {
   65|      0|            return false;
   66|      0|        }
   67|  84.7k|    }
   68|  37.8k|    return true;
   69|  37.8k|}
_ZN8opendnp39LinkFrame13CalcFrameSizeEm:
   72|  77.9k|{
   73|  77.9k|    return LPDU_HEADER_SIZE + CalcUserDataSize(dataLength);
   74|  77.9k|}
_ZN8opendnp39LinkFrame16CalcUserDataSizeEm:
   77|  77.9k|{
   78|  77.9k|    if (dataLength > 0)
  ------------------
  |  Branch (78:9): [True: 76.7k, False: 1.26k]
  ------------------
   79|  76.7k|    {
   80|  76.7k|        size_t mod16 = dataLength % LPDU_DATA_BLOCK_SIZE;
   81|  76.7k|        size_t size = (dataLength / LPDU_DATA_BLOCK_SIZE) * LPDU_DATA_PLUS_CRC_SIZE; // complete blocks
   82|  76.7k|        return (mod16 > 0) ? (size + mod16 + LPDU_CRC_SIZE) : size;                  // possible partial block
  ------------------
  |  Branch (82:16): [True: 75.3k, False: 1.35k]
  ------------------
   83|  76.7k|    }
   84|       |
   85|  1.26k|    return 0;
   86|  77.9k|}

_ZN8opendnp310LinkHeaderC2Ev:
   29|  6.68k|LinkHeader::LinkHeader() : length(5), src(0), dest(0), ctrl(0) {}
_ZN8opendnp310LinkHeader4ReadEPKh:
   73|  41.4k|{
   74|  41.4k|    length = apBuff[LI_LENGTH];
   75|  41.4k|    ser4cpp::rseq_t buffer(apBuff + LI_DESTINATION, 4);
   76|  41.4k|    ser4cpp::UInt16::read_from(buffer, dest);
   77|  41.4k|    ser4cpp::UInt16::read_from(buffer, src);
   78|  41.4k|    ctrl = apBuff[LI_CONTROL];
   79|  41.4k|}

_ZNK8opendnp310LinkHeader9GetLengthEv:
   50|   115k|    {
   51|   115k|        return length;
   52|   115k|    }
_ZNK8opendnp310LinkHeader7GetDestEv:
   54|  37.8k|    {
   55|  37.8k|        return dest;
   56|  37.8k|    }
_ZNK8opendnp310LinkHeader6GetSrcEv:
   58|  37.8k|    {
   59|  37.8k|        return src;
   60|  37.8k|    }
_ZNK8opendnp310LinkHeader12IsFromMasterEv:
   62|  37.8k|    {
   63|  37.8k|        return (ctrl & MASK_DIR) != 0;
   64|  37.8k|    }
_ZNK8opendnp310LinkHeader10IsPriToSecEv:
   66|  41.3k|    {
   67|  41.3k|        return (ctrl & MASK_PRM) != 0;
   68|  41.3k|    }
_ZNK8opendnp310LinkHeader8IsFcbSetEv:
   70|  39.2k|    {
   71|  39.2k|        return (ctrl & MASK_FCB) != 0;
   72|  39.2k|    }
_ZNK8opendnp310LinkHeader11IsFcvDfcSetEv:
   74|  77.0k|    {
   75|  77.0k|        return (ctrl & MASK_FCV) != 0;
   76|  77.0k|    }
_ZNK8opendnp310LinkHeader11GetFuncEnumEv:
   82|   119k|    {
   83|   119k|        return LinkFunctionSpec::from_type(ctrl & MASK_FUNC_OR_PRM);
   84|   119k|    }
_ZN8opendnp310LinkHeader11ValidLengthEv:
   87|  41.4k|    {
   88|  41.4k|        return length > 4;
   89|  41.4k|    }

_ZN8opendnp316LinkHeaderFieldsC2ENS_12LinkFunctionEbbbNS_9AddressesE:
   30|  37.8k|    : func(func_), isFromMaster(isMaster_), fcb(fcb_), fcvdfc(fcvdfc_), addresses(addresses_)
   31|  37.8k|{
   32|  37.8k|}

_ZN8opendnp315LinkLayerParserC2ERKNS_6LoggerE:
   32|  6.68k|    : logger(logger), state(State::FindSync), frameSize(0), buffer(rxBuffer, LPDU_MAX_FRAME_SIZE)
   33|  6.68k|{
   34|  6.68k|}
_ZNK8opendnp315LinkLayerParser9WriteBuffEv:
   44|  11.1k|{
   45|  11.1k|    return ser4cpp::wseq_t(buffer.WriteBuff(), buffer.NumWriteBytes());
   46|  11.1k|}
_ZN8opendnp315LinkLayerParser6OnReadEmRNS_10IFrameSinkE:
   49|  11.1k|{
   50|  11.1k|    buffer.AdvanceWrite(numBytes);
   51|       |
   52|  48.9k|    while (ParseUntilComplete() == State::Complete)
  ------------------
  |  Branch (52:12): [True: 37.8k, False: 11.1k]
  ------------------
   53|  37.8k|    {
   54|  37.8k|        ++statistics.numLinkFrameRx;
   55|  37.8k|        this->PushFrame(sink);
   56|  37.8k|        state = State::FindSync;
   57|  37.8k|    }
   58|       |
   59|  11.1k|    buffer.Shift();
   60|  11.1k|}
_ZN8opendnp315LinkLayerParser18ParseUntilCompleteEv:
   63|  48.9k|{
   64|  48.9k|    auto lastState = this->state;
   65|       |    // continue as long as we're making progress, i.e. a state change
   66|   169k|    while ((this->state = ParseOneStep()) != lastState)
  ------------------
  |  Branch (66:12): [True: 120k, False: 48.9k]
  ------------------
   67|   120k|    {
   68|   120k|        lastState = state;
   69|   120k|    }
   70|  48.9k|    return state;
   71|  48.9k|}
_ZN8opendnp315LinkLayerParser12ParseOneStepEv:
   74|   169k|{
   75|   169k|    switch (state)
   76|   169k|    {
   77|  49.3k|    case (State::FindSync):
  ------------------
  |  Branch (77:5): [True: 49.3k, False: 120k]
  ------------------
   78|  49.3k|        return ParseSync();
   79|  41.5k|    case (State::ReadHeader):
  ------------------
  |  Branch (79:5): [True: 41.5k, False: 128k]
  ------------------
   80|  41.5k|        return ParseHeader();
   81|  40.9k|    case (State::ReadBody):
  ------------------
  |  Branch (81:5): [True: 40.9k, False: 128k]
  ------------------
   82|  40.9k|        return ParseBody();
   83|  37.8k|    default:
  ------------------
  |  Branch (83:5): [True: 37.8k, False: 131k]
  ------------------
   84|  37.8k|        return state;
   85|   169k|    }
   86|   169k|}
_ZN8opendnp315LinkLayerParser9ParseSyncEv:
   89|  49.3k|{
   90|  49.3k|    if (this->buffer.NumBytesRead() >= 10) // && buffer.Sync())
  ------------------
  |  Branch (90:9): [True: 41.6k, False: 7.66k]
  ------------------
   91|  41.6k|    {
   92|  41.6k|        size_t skipCount = 0;
   93|  41.6k|        const auto synced = buffer.Sync(skipCount);
   94|  41.6k|        if (skipCount > 0)
  ------------------
  |  Branch (94:13): [True: 7.84k, False: 33.8k]
  ------------------
   95|  7.84k|        {
   96|  7.84k|            FORMAT_LOG_BLOCK(logger, flags::WARN, "Skipped %zu bytes seaching for start bytes", skipCount);
  ------------------
  |  |   54|  7.84k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 7.84k]
  |  |  ------------------
  |  |   55|  7.84k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   97|  7.84k|        }
   98|       |
   99|  41.6k|        return synced ? State::ReadHeader : State::FindSync;
  ------------------
  |  Branch (99:16): [True: 41.4k, False: 220]
  ------------------
  100|  41.6k|    }
  101|       |
  102|  7.66k|    return State::FindSync;
  103|  49.3k|}
_ZN8opendnp315LinkLayerParser11ParseHeaderEv:
  106|  41.5k|{
  107|  41.5k|    if (this->buffer.NumBytesRead() >= 10)
  ------------------
  |  Branch (107:9): [True: 41.4k, False: 119]
  ------------------
  108|  41.4k|    {
  109|  41.4k|        if (this->ReadHeader())
  ------------------
  |  Branch (109:13): [True: 37.9k, False: 3.51k]
  ------------------
  110|  37.9k|        {
  111|  37.9k|            return State::ReadBody;
  112|  37.9k|        }
  113|       |
  114|  3.51k|        this->FailFrame();
  115|  3.51k|        return State::FindSync;
  116|  41.4k|    }
  117|    119|    else
  118|    119|    {
  119|    119|        return State::ReadHeader;
  120|    119|    }
  121|  41.5k|}
_ZN8opendnp315LinkLayerParser9ParseBodyEv:
  124|  40.9k|{
  125|  40.9k|    if (buffer.NumBytesRead() < this->frameSize)
  ------------------
  |  Branch (125:9): [True: 3.16k, False: 37.8k]
  ------------------
  126|  3.16k|    {
  127|  3.16k|        return State::ReadBody;
  128|  3.16k|    }
  129|       |
  130|  37.8k|    if (this->ValidateBody())
  ------------------
  |  Branch (130:9): [True: 37.8k, False: 0]
  ------------------
  131|  37.8k|    {
  132|  37.8k|        this->TransferUserData();
  133|  37.8k|        return State::Complete;
  134|  37.8k|    }
  135|       |
  136|      0|    this->FailFrame();
  137|      0|    return State::FindSync;
  138|  37.8k|}
_ZN8opendnp315LinkLayerParser9PushFrameERNS_10IFrameSinkE:
  141|  37.8k|{
  142|  37.8k|    LinkHeaderFields fields(header.GetFuncEnum(), header.IsFromMaster(), header.IsFcbSet(), header.IsFcvDfcSet(),
  143|  37.8k|                            Addresses(header.GetSrc(), header.GetDest()));
  144|       |
  145|  37.8k|    sink.OnFrame(fields, userData);
  146|       |
  147|  37.8k|    buffer.AdvanceRead(frameSize);
  148|  37.8k|}
_ZN8opendnp315LinkLayerParser16TransferUserDataEv:
  151|  37.8k|{
  152|  37.8k|    uint32_t len = header.GetLength() - LPDU_MIN_LENGTH;
  153|  37.8k|    LinkFrame::ReadUserData(buffer.ReadBuffer() + LPDU_HEADER_SIZE, rxBuffer, len);
  154|  37.8k|    userData = ser4cpp::rseq_t(rxBuffer, len);
  155|  37.8k|}
_ZN8opendnp315LinkLayerParser10ReadHeaderEv:
  158|  41.4k|{
  159|  41.4k|    header.Read(buffer.ReadBuffer());
  160|  41.4k|    if (CRC::IsCorrectCRC(buffer.ReadBuffer(), LI_CRC))
  ------------------
  |  Branch (160:9): [True: 41.4k, False: 0]
  ------------------
  161|  41.4k|    {
  162|  41.4k|        return ValidateHeaderParameters();
  163|  41.4k|    }
  164|      0|    else
  165|      0|    {
  166|      0|        ++statistics.numHeaderCrcError;
  167|      0|        SIMPLE_LOG_BLOCK(logger, flags::WARN, "CRC failure in header");
  ------------------
  |  |   42|      0|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   43|      0|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  168|      0|        return false;
  169|      0|    }
  170|  41.4k|}
_ZN8opendnp315LinkLayerParser12ValidateBodyEv:
  173|  37.8k|{
  174|  37.8k|    uint32_t len = header.GetLength() - LPDU_MIN_LENGTH;
  175|  37.8k|    if (LinkFrame::ValidateBodyCRC(buffer.ReadBuffer() + LPDU_HEADER_SIZE, len))
  ------------------
  |  Branch (175:9): [True: 37.8k, False: 0]
  ------------------
  176|  37.8k|    {
  177|  37.8k|        FORMAT_LOG_BLOCK(logger, flags::LINK_RX, "Function: %s Dest: %u Source: %u Length: %u",
  ------------------
  |  |   54|  37.8k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 37.8k]
  |  |  ------------------
  |  |   55|  37.8k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  178|  37.8k|                         LinkFunctionSpec::to_human_string(header.GetFuncEnum()), header.GetDest(), header.GetSrc(),
  179|  37.8k|                         header.GetLength());
  180|       |
  181|  37.8k|        FORMAT_HEX_BLOCK(logger, flags::LINK_RX_HEX, buffer.ReadBuffer().take(frameSize), 10, 18);
  ------------------
  |  |   70|  37.8k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (70:9): [True: 0, False: 37.8k]
  |  |  ------------------
  |  |   71|  37.8k|    {                                                                                                                  \
  |  |   72|      0|        opendnp3::HexLogging::log(logger, levels, buffer, ' ', firstSize, otherSize);                                  \
  |  |   73|      0|    }
  ------------------
  182|       |
  183|  37.8k|        return true;
  184|  37.8k|    }
  185|       |
  186|      0|    ++this->statistics.numBodyCrcError;
  187|      0|    SIMPLE_LOG_BLOCK(logger, flags::ERR, "CRC failure in body");
  ------------------
  |  |   42|      0|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   43|      0|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  188|      0|    return false;
  189|  37.8k|}
_ZN8opendnp315LinkLayerParser24ValidateHeaderParametersEv:
  192|  41.4k|{
  193|  41.4k|    if (!header.ValidLength())
  ------------------
  |  Branch (193:9): [True: 105, False: 41.3k]
  ------------------
  194|    105|    {
  195|    105|        ++statistics.numBadLength;
  196|    105|        FORMAT_LOG_BLOCK(logger, flags::ERR, "LENGTH out of range [5,255]: %i", header.GetLength());
  ------------------
  |  |   54|    105|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 105]
  |  |  ------------------
  |  |   55|    105|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  197|    105|        return false;
  198|    105|    }
  199|       |
  200|       |    // Now make sure that the function code is known and that the FCV is appropriate
  201|  41.3k|    if (!this->ValidateFunctionCode())
  ------------------
  |  Branch (201:9): [True: 1.26k, False: 40.0k]
  ------------------
  202|  1.26k|    {
  203|  1.26k|        return false;
  204|  1.26k|    }
  205|       |
  206|  40.0k|    uint8_t user_data_length = header.GetLength() - LPDU_MIN_LENGTH;
  207|  40.0k|    frameSize = LinkFrame::CalcFrameSize(user_data_length);
  208|  40.0k|    LinkFunction func = header.GetFuncEnum();
  209|       |
  210|  40.0k|    const bool has_payload = user_data_length > 0;
  211|  40.0k|    const bool should_have_payload
  212|  40.0k|        = (func == LinkFunction::PRI_CONFIRMED_USER_DATA || func == LinkFunction::PRI_UNCONFIRMED_USER_DATA);
  ------------------
  |  Branch (212:12): [True: 1.52k, False: 38.5k]
  |  Branch (212:61): [True: 36.9k, False: 1.59k]
  ------------------
  213|       |
  214|       |    // make sure that the presence/absence of user data matches the function code
  215|  40.0k|    if (should_have_payload && !has_payload)
  ------------------
  |  Branch (215:9): [True: 38.4k, False: 1.59k]
  |  Branch (215:32): [True: 790, False: 37.6k]
  ------------------
  216|    790|    {
  217|    790|        ++statistics.numBadLength;
  218|    790|        FORMAT_LOG_BLOCK(logger, flags::ERR, "User data with no payload. FUNCTION: %s",
  ------------------
  |  |   54|    790|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 790]
  |  |  ------------------
  |  |   55|    790|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  219|    790|                         LinkFunctionSpec::to_human_string(func));
  220|    790|        return false;
  221|    790|    }
  222|       |
  223|  39.2k|    if (!should_have_payload && has_payload)
  ------------------
  |  Branch (223:9): [True: 1.59k, False: 37.6k]
  |  Branch (223:33): [True: 1.35k, False: 236]
  ------------------
  224|  1.35k|    {
  225|  1.35k|        ++statistics.numBadLength;
  226|  1.35k|        FORMAT_LOG_BLOCK(logger, flags::ERR, "Unexpected LENGTH in frame: %i with FUNCTION: %s", user_data_length,
  ------------------
  |  |   54|  1.35k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 1.35k]
  |  |  ------------------
  |  |   55|  1.35k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  227|  1.35k|                         LinkFunctionSpec::to_human_string(func));
  228|  1.35k|        return false;
  229|  1.35k|    }
  230|       |
  231|       |    // calculate the total frame size
  232|  37.9k|    frameSize = LinkFrame::CalcFrameSize(user_data_length);
  233|       |
  234|  37.9k|    return true;
  235|  39.2k|}
_ZN8opendnp315LinkLayerParser9FailFrameEv:
  238|  3.51k|{
  239|       |    // All you have to do is advance the reader by one, when the resync happens the data will disappear
  240|  3.51k|    buffer.AdvanceRead(1);
  241|  3.51k|}
_ZN8opendnp315LinkLayerParser20ValidateFunctionCodeEv:
  244|  41.3k|{
  245|       |    // Now make sure that the function code is known and that the FCV is appropriate
  246|  41.3k|    if (header.IsPriToSec())
  ------------------
  |  Branch (246:9): [True: 39.4k, False: 1.86k]
  ------------------
  247|  39.4k|    {
  248|  39.4k|        bool fcv_set = false;
  249|       |
  250|  39.4k|        switch (header.GetFuncEnum())
  251|  39.4k|        {
  252|  1.52k|        case (LinkFunction::PRI_CONFIRMED_USER_DATA):
  ------------------
  |  Branch (252:9): [True: 1.52k, False: 37.9k]
  ------------------
  253|  1.80k|        case (LinkFunction::PRI_TEST_LINK_STATES):
  ------------------
  |  Branch (253:9): [True: 274, False: 39.1k]
  ------------------
  254|  1.80k|            fcv_set = true;
  255|  1.80k|            break;
  256|    123|        case (LinkFunction::PRI_REQUEST_LINK_STATUS):
  ------------------
  |  Branch (256:9): [True: 123, False: 39.3k]
  ------------------
  257|    249|        case (LinkFunction::PRI_RESET_LINK_STATES):
  ------------------
  |  Branch (257:9): [True: 126, False: 39.3k]
  ------------------
  258|  37.3k|        case (LinkFunction::PRI_UNCONFIRMED_USER_DATA):
  ------------------
  |  Branch (258:9): [True: 37.1k, False: 2.32k]
  ------------------
  259|  37.3k|            break;
  260|    278|        default:
  ------------------
  |  Branch (260:9): [True: 278, False: 39.1k]
  ------------------
  261|    278|        {
  262|    278|            ++statistics.numBadFunctionCode;
  263|    278|            FORMAT_LOG_BLOCK(logger, flags::WARN, "Unknown PriToSec FUNCTION: %s",
  ------------------
  |  |   54|    278|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 278]
  |  |  ------------------
  |  |   55|    278|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  264|    278|                             LinkFunctionSpec::to_human_string(header.GetFuncEnum()));
  265|    278|            return false;
  266|    249|        }
  267|  39.4k|        }
  268|       |
  269|       |        // now check the fcv
  270|  39.1k|        if (fcv_set != header.IsFcvDfcSet())
  ------------------
  |  Branch (270:13): [True: 212, False: 38.9k]
  ------------------
  271|    212|        {
  272|    212|            ++statistics.numBadFCV;
  273|    212|            FORMAT_LOG_BLOCK(logger, flags::WARN, "Bad FCV for FUNCTION: %s",
  ------------------
  |  |   54|    212|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 212]
  |  |  ------------------
  |  |   55|    212|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  274|    212|                             LinkFunctionSpec::to_human_string(header.GetFuncEnum()));
  275|    212|            return false;
  276|    212|        }
  277|       |
  278|       |        // if fcv isn't expected to be set, fcb can be either 1 or 0, doesn't matter
  279|  39.1k|    }
  280|  1.86k|    else // SecToPri - just validate the function codes and that FCB is 0
  281|  1.86k|    {
  282|  1.86k|        switch (header.GetFuncEnum())
  283|  1.86k|        {
  284|    355|        case (LinkFunction::SEC_ACK):
  ------------------
  |  Branch (284:9): [True: 355, False: 1.51k]
  ------------------
  285|    837|        case (LinkFunction::SEC_NACK):
  ------------------
  |  Branch (285:9): [True: 482, False: 1.38k]
  ------------------
  286|  1.18k|        case (LinkFunction::SEC_LINK_STATUS):
  ------------------
  |  Branch (286:9): [True: 348, False: 1.51k]
  ------------------
  287|  1.47k|        case (LinkFunction::SEC_NOT_SUPPORTED):
  ------------------
  |  Branch (287:9): [True: 285, False: 1.58k]
  ------------------
  288|  1.47k|            break;
  289|    397|        default:
  ------------------
  |  Branch (289:9): [True: 397, False: 1.47k]
  ------------------
  290|    397|        {
  291|    397|            ++statistics.numBadFunctionCode;
  292|    397|            FORMAT_LOG_BLOCK(logger, flags::ERR, "Unknown SecToPri FUNCTION: %s",
  ------------------
  |  |   54|    397|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 397]
  |  |  ------------------
  |  |   55|    397|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  293|    397|                             LinkFunctionSpec::to_human_string(header.GetFuncEnum()));
  294|    397|            return false;
  295|  1.18k|        }
  296|  1.86k|        }
  297|       |
  298|       |        // now check the fcb, it should always be zero
  299|  1.47k|        if (header.IsFcbSet())
  ------------------
  |  Branch (299:13): [True: 375, False: 1.09k]
  ------------------
  300|    375|        {
  301|    375|            ++statistics.numBadFCB;
  302|    375|            FORMAT_LOG_BLOCK(logger, flags::ERR, "FCB set for SecToPri FUNCTION: %s",
  ------------------
  |  |   54|    375|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 375]
  |  |  ------------------
  |  |   55|    375|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  303|    375|                             LinkFunctionSpec::to_human_string(header.GetFuncEnum()));
  304|    375|            return false;
  305|    375|        }
  306|  1.47k|    }
  307|       |
  308|  40.0k|    return true; // valid!
  309|  41.3k|}

_ZN8opendnp315ShiftableBufferC2EPhm:
   30|  6.68k|    : pBuffer(pBuffer_), M_SIZE(size), writePos(0), readPos(0)
   31|  6.68k|{
   32|  6.68k|}
_ZN8opendnp315ShiftableBuffer5ShiftEv:
   35|  11.1k|{
   36|  11.1k|    auto numRead = this->NumBytesRead();
   37|       |
   38|       |    // copy all unread data to the front of the buffer
   39|  11.1k|    memmove(pBuffer, pBuffer + readPos, numRead);
   40|       |
   41|  11.1k|    readPos = 0;
   42|  11.1k|    writePos = numRead;
   43|  11.1k|}
_ZN8opendnp315ShiftableBuffer11AdvanceReadEm:
   52|   101k|{
   53|   101k|    assert(numBytes <= this->NumBytesRead());
  ------------------
  |  Branch (53:5): [True: 101k, False: 0]
  ------------------
   54|   101k|    readPos += numBytes;
   55|   101k|}
_ZN8opendnp315ShiftableBuffer12AdvanceWriteEm:
   58|  11.1k|{
   59|  11.1k|    assert(aNumBytes <= this->NumWriteBytes());
  ------------------
  |  Branch (59:5): [True: 11.1k, False: 0]
  ------------------
   60|  11.1k|    writePos += aNumBytes;
   61|  11.1k|}
_ZN8opendnp315ShiftableBuffer4SyncERm:
   64|  41.6k|{
   65|   101k|    while (this->NumBytesRead() > 1) // at least 2 bytes
  ------------------
  |  Branch (65:12): [True: 101k, False: 220]
  ------------------
   66|   101k|    {
   67|   101k|        if (this->ReadBuffer()[0] == 0x05 && this->ReadBuffer()[1] == 0x64)
  ------------------
  |  Branch (67:13): [True: 43.6k, False: 57.7k]
  |  Branch (67:13): [True: 41.4k, False: 59.9k]
  |  Branch (67:46): [True: 41.4k, False: 2.15k]
  ------------------
   68|  41.4k|        {
   69|  41.4k|            return true;
   70|  41.4k|        }
   71|       |
   72|  59.9k|        this->AdvanceRead(1); // skip the first byte
   73|  59.9k|        ++skipCount;
   74|  59.9k|    }
   75|       |
   76|    220|    return false;
   77|  41.6k|}

_ZNK8opendnp315ShiftableBuffer12NumBytesReadEv:
   41|   649k|    {
   42|   649k|        return writePos - readPos;
   43|   649k|    }
_ZNK8opendnp315ShiftableBuffer10ReadBufferEv:
   47|   303k|    {
   48|   303k|        return ser4cpp::rseq_t(pBuffer + readPos, NumBytesRead());
   49|   303k|    }
_ZNK8opendnp315ShiftableBuffer13NumWriteBytesEv:
   65|  22.3k|    {
   66|  22.3k|        return M_SIZE - writePos;
   67|  22.3k|    }
_ZNK8opendnp315ShiftableBuffer9WriteBuffEv:
   71|  11.1k|    {
   72|  11.1k|        return pBuffer + writePos;
   73|  11.1k|    }

_ZN8opendnp315TransportHeaderC2Eh:
   27|  37.5k|    : fir((byte & FIR_MASK) != 0), fin((byte & FIN_MASK) != 0), seq((byte & SEQ_MASK))
   28|  37.5k|{
   29|  37.5k|}

_ZN8opendnp311TransportRxC2ERKNS_6LoggerEj:
   36|  6.68k|    : logger(logger), rxBuffer(maxRxFragSize), numBytesRead(0)
   37|  6.68k|{
   38|  6.68k|}
_ZN8opendnp311TransportRx12GetAvailableEv:
   51|  37.1k|{
   52|  37.1k|    return rxBuffer.as_wslice().skip(numBytesRead);
   53|  37.1k|}
_ZN8opendnp311TransportRx14ProcessReceiveERKNS_7MessageE:
   56|  37.5k|{
   57|  37.5k|    ++statistics.numTransportRx;
   58|       |
   59|  37.5k|    if (segment.payload.is_empty())
  ------------------
  |  Branch (59:9): [True: 0, False: 37.5k]
  ------------------
   60|      0|    {
   61|      0|        FORMAT_LOG_BLOCK(logger, flags::WARN, "Received tpdu with no header");
  ------------------
  |  |   54|      0|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   62|      0|        ++statistics.numTransportErrorRx;
   63|      0|        return Message();
   64|      0|    }
   65|       |
   66|  37.5k|    const TransportHeader header(segment.payload[0]);
   67|       |
   68|  37.5k|    const auto payload = segment.payload.skip(1);
   69|       |
   70|  37.5k|    FORMAT_LOG_BLOCK(logger, flags::TRANSPORT_RX, "FIR: %d FIN: %d SEQ: %u LEN: %zu", header.fir, header.fin,
  ------------------
  |  |   54|  37.5k|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 37.5k]
  |  |  ------------------
  |  |   55|  37.5k|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   71|  37.5k|                     header.seq, payload.length());
   72|       |
   73|  37.5k|    if (header.fir && this->numBytesRead > 0)
  ------------------
  |  Branch (73:9): [True: 35.3k, False: 2.21k]
  |  Branch (73:23): [True: 304, False: 35.0k]
  ------------------
   74|    304|    {
   75|    304|        ++statistics.numTransportDiscard;
   76|    304|        SIMPLE_LOG_BLOCK(logger, flags::WARN, "FIR received mid-fragment, discarding previous bytes");
  ------------------
  |  |   42|    304|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 304]
  |  |  ------------------
  |  |   43|    304|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   77|    304|        this->numBytesRead = 0;
   78|       |        // continue processing
   79|    304|    }
   80|       |
   81|       |    // there are special checks we must perform if it isn't the first packet
   82|  37.5k|    if (!header.fir)
  ------------------
  |  Branch (82:9): [True: 2.21k, False: 35.3k]
  ------------------
   83|  2.21k|    {
   84|  2.21k|        if (this->numBytesRead == 0)
  ------------------
  |  Branch (84:13): [True: 384, False: 1.83k]
  ------------------
   85|    384|        {
   86|    384|            ++statistics.numTransportIgnore;
   87|    384|            SIMPLE_LOG_BLOCK(logger, flags::WARN, "non-FIR packet with 0 prior bytes");
  ------------------
  |  |   42|    384|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 384]
  |  |  ------------------
  |  |   43|    384|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
   88|    384|            return Message(); // drop the data
   89|    384|        }
   90|       |
   91|  1.83k|        if (header.seq != this->expectedSeq)
  ------------------
  |  Branch (91:13): [True: 92, False: 1.74k]
  ------------------
   92|     92|        {
   93|     92|            ++statistics.numTransportIgnore;
   94|     92|            FORMAT_LOG_BLOCK(logger, flags::WARN, "Received segment w/ seq: %u, expected: %u", header.seq,
  ------------------
  |  |   54|     92|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 92]
  |  |  ------------------
  |  |   55|     92|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
   95|     92|                             this->expectedSeq.Get());
   96|     92|            return Message(); // drop the data
   97|     92|        }
   98|       |
   99|  1.74k|        if (segment.addresses != this->lastAddresses)
  ------------------
  |  Branch (99:13): [True: 0, False: 1.74k]
  ------------------
  100|      0|        {
  101|      0|            ++statistics.numTransportIgnore;
  102|      0|            FORMAT_LOG_BLOCK(logger, flags::WARN,
  ------------------
  |  |   54|      0|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (54:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   55|      0|    {                                                                                                                  \
  |  |   56|      0|        char message_buffer_some_name_no_conflict[opendnp3::max_log_entry_size];                                       \
  |  |   57|      0|        SAFE_STRING_FORMAT(message_buffer_some_name_no_conflict, opendnp3::max_log_entry_size, format, ##__VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   31|      0|#define SAFE_STRING_FORMAT(dest, size, format, ...) snprintf(dest, size, format, ##__VA_ARGS__)
  |  |  ------------------
  |  |   58|      0|        logger.log(levels, LOCATION, message_buffer_some_name_no_conflict);                                            \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   59|      0|    }
  ------------------
  103|      0|                             "Bad addressing: last { src: %u, dest: %u } received { src: %u, dest: %u}",
  104|      0|                             this->lastAddresses.source, this->lastAddresses.destination, segment.addresses.source,
  105|      0|                             segment.addresses.destination);
  106|      0|            return Message(); // drop the data
  107|      0|        }
  108|  1.74k|    }
  109|       |
  110|  37.1k|    auto available = this->GetAvailable();
  111|       |
  112|  37.1k|    if (payload.length() > available.length())
  ------------------
  |  Branch (112:9): [True: 0, False: 37.1k]
  ------------------
  113|      0|    {
  114|       |        // transport buffer overflow
  115|      0|        ++statistics.numTransportBufferOverflow;
  116|      0|        SIMPLE_LOG_BLOCK(logger, flags::WARN, "Exceeded the buffer size before a complete fragment was read");
  ------------------
  |  |   42|      0|    if (logger.is_enabled(levels))                                                                                     \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   43|      0|    {                                                                                                                  \
  |  |   44|      0|        logger.log(levels, LOCATION, message);                                                                         \
  |  |  ------------------
  |  |  |  |   27|       |#define LOCATION __FILE__ "(" TOSTRING(__LINE__) ")"
  |  |  ------------------
  |  |   45|      0|    }
  ------------------
  117|      0|        this->numBytesRead = 0;
  118|      0|        return Message();
  119|      0|    }
  120|       |
  121|  37.1k|    available.copy_from(payload);
  122|       |
  123|  37.1k|    this->numBytesRead += payload.length();
  124|  37.1k|    this->lastAddresses = segment.addresses;
  125|  37.1k|    this->expectedSeq = header.seq;
  126|  37.1k|    this->expectedSeq.Increment();
  127|       |
  128|  37.1k|    if (header.fin)
  ------------------
  |  Branch (128:9): [True: 34.9k, False: 2.14k]
  ------------------
  129|  34.9k|    {
  130|  34.9k|        const auto ret = rxBuffer.as_rslice().take(numBytesRead);
  131|  34.9k|        this->numBytesRead = 0;
  132|  34.9k|        return Message(segment.addresses, ret);
  133|  34.9k|    }
  134|       |
  135|  2.14k|    return Message();
  136|  37.1k|}

LLVMFuzzerTestOneInput:
   27|  6.68k|{
   28|  6.68k|    Buffer buffer(Data, Size);
   29|  6.68k|    Logger logger(ConsoleLogger::Create(), ModuleId(), "decoder", levels::NOTHING);
   30|  6.68k|    IDecoderCallbacks callback;
   31|  6.68k|    Decoder decoder(callback, logger);
   32|       |
   33|  6.68k|    decoder.DecodeLPDU(buffer);
   34|       |
   35|  6.68k|    return 0;
   36|  6.68k|}

