// File: /workspace/github_cpp_makefile_star2_O3/Konano[P]UselessDatabase/./json.hpp
// Function: nlohmann::detail::serializer<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>>::dump(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, bool, bool, unsigned int, unsigned int)
void dump(const BasicJsonType& val, const bool pretty_print,
              const bool ensure_ascii,
              const unsigned int indent_step,
              const unsigned int current_indent = 0)
    {
        switch (val.m_type)
        {
            case value_t::object:
            {
                if (val.m_value.object->empty())
                {
                    o->write_characters("{}", 2);
                    return;
                }

                if (pretty_print)
                {
                    o->write_characters("{\n", 2);

                    // variable to hold indentation for recursive calls
                    const auto new_indent = current_indent + indent_step;
                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
                    {
                        indent_string.resize(indent_string.size() * 2, ' ');
                    }

                    // first n-1 elements
                    auto i = val.m_value.object->cbegin();
                    for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
                    {
                        o->write_characters(indent_string.c_str(), new_indent);
                        o->write_character('\"');
                        dump_escaped(i->first, ensure_ascii);
                        o->write_characters("\": ", 3);
                        dump(i->second, true, ensure_ascii, indent_step, new_indent);
                        o->write_characters(",\n", 2);
                    }

                    // last element
                    assert(i != val.m_value.object->cend());
                    assert(std::next(i) == val.m_value.object->cend());
                    o->write_characters(indent_string.c_str(), new_indent);
                    o->write_character('\"');
                    dump_escaped(i->first, ensure_ascii);
                    o->write_characters("\": ", 3);
                    dump(i->second, true, ensure_ascii, indent_step, new_indent);

                    o->write_character('\n');
                    o->write_characters(indent_string.c_str(), current_indent);
                    o->write_character('}');
                }
                else
                {
                    o->write_character('{');

                    // first n-1 elements
                    auto i = val.m_value.object->cbegin();
                    for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
                    {
                        o->write_character('\"');
                        dump_escaped(i->first, ensure_ascii);
                        o->write_characters("\":", 2);
                        dump(i->second, false, ensure_ascii, indent_step, current_indent);
                        o->write_character(',');
                    }

                    // last element
                    assert(i != val.m_value.object->cend());
                    assert(std::next(i) == val.m_value.object->cend());
                    o->write_character('\"');
                    dump_escaped(i->first, ensure_ascii);
                    o->write_characters("\":", 2);
                    dump(i->second, false, ensure_ascii, indent_step, current_indent);

                    o->write_character('}');
                }

                return;
            }

            case value_t::array:
            {
                if (val.m_value.array->empty())
                {
                    o->write_characters("[]", 2);
                    return;
                }

                if (pretty_print)
                {
                    o->write_characters("[\n", 2);

                    // variable to hold indentation for recursive calls
                    const auto new_indent = current_indent + indent_step;
                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
                    {
                        indent_string.resize(indent_string.size() * 2, ' ');
                    }

                    // first n-1 elements
                    for (auto i = val.m_value.array->cbegin();
                            i != val.m_value.array->cend() - 1; ++i)
                    {
                        o->write_characters(indent_string.c_str(), new_indent);
                        dump(*i, true, ensure_ascii, indent_step, new_indent);
                        o->write_characters(",\n", 2);
                    }

                    // last element
                    assert(not val.m_value.array->empty());
                    o->write_characters(indent_string.c_str(), new_indent);
                    dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);

                    o->write_character('\n');
                    o->write_characters(indent_string.c_str(), current_indent);
                    o->write_character(']');
                }
                else
                {
                    o->write_character('[');

                    // first n-1 elements
                    for (auto i = val.m_value.array->cbegin();
                            i != val.m_value.array->cend() - 1; ++i)
                    {
                        dump(*i, false, ensure_ascii, indent_step, current_indent);
                        o->write_character(',');
                    }

                    // last element
                    assert(not val.m_value.array->empty());
                    dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);

                    o->write_character(']');
                }

                return;
            }

            case value_t::string:
            {
                o->write_character('\"');
                dump_escaped(*val.m_value.string, ensure_ascii);
                o->write_character('\"');
                return;
            }

            case value_t::boolean:
            {
                if (val.m_value.boolean)
                {
                    o->write_characters("true", 4);
                }
                else
                {
                    o->write_characters("false", 5);
                }
                return;
            }

            case value_t::number_integer:
            {
                dump_integer(val.m_value.number_integer);
                return;
            }

            case value_t::number_unsigned:
            {
                dump_integer(val.m_value.number_unsigned);
                return;
            }

            case value_t::number_float:
            {
                dump_float(val.m_value.number_float);
                return;
            }

            case value_t::discarded:
            {
                o->write_characters("<discarded>", 11);
                return;
            }

            case value_t::null:
            {
                o->write_characters("null", 4);
                return;
            }

            default:            // LCOV_EXCL_LINE
                assert(false);  // LCOV_EXCL_LINE
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movzbl (%rsi), %eax
cmpq $0x8, %rax
ja 0xb0fb
movl %r9d, %ebp
movl %r8d, %r13d
movl %ecx, %r15d
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x31609(%rip), %rcx     # 0x3c0f4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x31e2a(%rip), %rsi     # 0x3c92f
jmp 0xab24
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
cmpb $0x1, 0x8(%r12)
jne 0xaecf
leaq 0x31df4(%rip), %rsi     # 0x3c918
movl $0x4, %edx
jmp 0xaefa
movq 0x8(%r12), %rcx
movq (%rcx), %rsi
movq (%rbx), %rdi
movq (%rdi), %rax
cmpq 0x8(%rcx), %rsi
je 0xaedd
testb %dl, %dl
je 0xaf0a
leaq 0x31da1(%rip), %rsi     # 0x3c8f6
movl $0x2, %edx
callq *0x8(%rax)
movq %r13, 0x8(%rsp)
addl %ebp, %r13d
movq 0x268(%rbx), %rsi
cmpq %r13, %rsi
jb 0xb0c9
movq 0x8(%r12), %rax
movq (%rax), %r14
movq 0x8(%rax), %rax
leaq -0x10(%rax), %rcx
cmpq %rcx, %r14
je 0xac00
movq %rbp, 0x10(%rsp)
movl %r15d, 0x4(%rsp)
movzbl %r15b, %ebp
movq 0x8(%rsp), %r15
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r13, %rdx
callq *0x8(%rax)
movq %rbx, %rdi
movq %r14, %rsi
movl $0x1, %edx
movl %ebp, %ecx
movl %r15d, %r8d
movl %r13d, %r9d
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2, %edx
leaq 0x31bfd(%rip), %rsi     # 0x3c7d7
callq *0x8(%rax)
addq $0x10, %r14
movq 0x8(%r12), %rcx
movq 0x8(%rcx), %rax
leaq -0x10(%rax), %rdx
cmpq %rdx, %r14
jne 0xab9d
movq (%rcx), %r14
movl 0x4(%rsp), %r15d
movq 0x10(%rsp), %rbp
cmpq %rax, %r14
je 0xb11a
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r13, %rdx
callq *0x8(%rax)
movq 0x8(%r12), %rax
movq 0x8(%rax), %rsi
addq $-0x10, %rsi
movzbl %r15b, %ecx
movq %rbx, %rdi
movl $0x1, %edx
movq 0x8(%rsp), %r8
movl %r13d, %r9d
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0xa, %esi
callq *(%rax)
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movl %ebp, %edx
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0xaf93
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
movq 0x8(%r12), %rsi
movzbl %r15b, %edx
movq %rbx, %rdi
callq 0xb28a
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
movl $0x22, %esi
jmp 0xb0b9
movsd 0x8(%r12), %xmm0
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xbaf2
movq 0x8(%r12), %rax
cmpq $0x0, 0x28(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
je 0xaeea
testb %dl, %dl
movq %rbp, 0x10(%rsp)
movq %r13, 0x8(%rsp)
movl %r15d, 0x4(%rsp)
je 0xafa6
leaq 0x31ae8(%rip), %rsi     # 0x3c7d0
movl $0x2, %edx
callq *0x8(%rax)
leal (%rbp,%r13), %eax
movq 0x268(%rbx), %rsi
movq %rax, 0x20(%rsp)
cmpq %rax, %rsi
jb 0xb0e2
movq 0x8(%r12), %r15
movq 0x18(%r15), %rbp
cmpq $0x1, 0x28(%r15)
je 0xadcc
xorl %r13d, %r13d
movzbl 0x4(%rsp), %eax
movl %eax, 0x1c(%rsp)
movq 0x20(%rsp), %r14
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r14, %rdx
callq *0x8(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%rbp), %rsi
movq %rbx, %rdi
movl 0x1c(%rsp), %r15d
movl %r15d, %edx
callq 0xb28a
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x3, %edx
leaq 0x31a5e(%rip), %rsi     # 0x3c7d3
callq *0x8(%rax)
leaq 0x40(%rbp), %rsi
movq %rbx, %rdi
movl $0x1, %edx
movl %r15d, %ecx
movq 0x8(%rsp), %r8
movl %r14d, %r9d
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2, %edx
leaq 0x31a31(%rip), %rsi     # 0x3c7d7
callq *0x8(%rax)
incq %r13
movq %rbp, %rdi
callq 0x5450
movq %rax, %rbp
movq 0x8(%r12), %r15
movq 0x28(%r15), %rax
decq %rax
cmpq %rax, %r13
jb 0xad2f
addq $0x8, %r15
cmpq %r15, %rbp
je 0xb139
movq %rbp, %rdi
callq 0x5450
cmpq %r15, %rax
movq 0x8(%rsp), %r15
movq 0x20(%rsp), %r12
jne 0xb196
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r12, %rdx
callq *0x8(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%rbp), %rsi
movzbl 0x4(%rsp), %r14d
movq %rbx, %rdi
movl %r14d, %edx
callq 0xb28a
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x3199d(%rip), %rsi     # 0x3c7d3
movl $0x3, %edx
callq *0x8(%rax)
addq $0x40, %rbp
movq %rbx, %rdi
movq %rbp, %rsi
movl $0x1, %edx
movl %r14d, %ecx
movl %r15d, %r8d
movl %r12d, %r9d
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0xa, %esi
callq *(%rax)
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movl 0x10(%rsp), %edx
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0xb0ab
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xb81e
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xb9c8
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x31a5b(%rip), %rsi     # 0x3c923
movl $0xb, %edx
jmp 0xaefa
leaq 0x31a47(%rip), %rsi     # 0x3c91d
movl $0x5, %edx
jmp 0xaefa
movq 0x8(%rax), %rax
leaq 0x31a0b(%rip), %rsi     # 0x3c8f3
jmp 0xaef5
movq 0x8(%rax), %rax
leaq 0x318d8(%rip), %rsi     # 0x3c7cd
movl $0x2, %edx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
movl $0x5b, %esi
callq *(%rax)
movq 0x8(%r12), %rax
movq (%rax), %r14
movq 0x8(%rax), %rax
leaq -0x10(%rax), %rsi
cmpq %rsi, %r14
je 0xaf76
movl %r15d, %eax
movq %rbp, %r15
movl %eax, 0x4(%rsp)
movzbl %al, %ebp
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
movl %ebp, %ecx
movl %r13d, %r8d
movl %r15d, %r9d
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2c, %esi
callq *(%rax)
addq $0x10, %r14
movq 0x8(%r12), %rcx
movq 0x8(%rcx), %rax
leaq -0x10(%rax), %rsi
cmpq %rsi, %r14
jne 0xaf33
movq (%rcx), %r14
movq %r15, %rbp
movl 0x4(%rsp), %r15d
cmpq %rax, %r14
je 0xb158
movzbl %r15b, %ecx
movq %rbx, %rdi
xorl %edx, %edx
movl %r13d, %r8d
movl %ebp, %r9d
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
movl $0x5d, %esi
jmp 0xb0b9
movl $0x7b, %esi
callq *(%rax)
movq 0x8(%r12), %r15
movq 0x18(%r15), %r13
cmpq $0x1, 0x28(%r15)
je 0xb03b
xorl %r14d, %r14d
movzbl 0x4(%rsp), %ebp
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%r13), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0xb28a
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2, %edx
leaq 0x318fe(%rip), %rsi     # 0x3c8f0
callq *0x8(%rax)
leaq 0x40(%r13), %rsi
movq %rbx, %rdi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movq 0x10(%rsp), %r9
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2c, %esi
callq *(%rax)
incq %r14
movq %r13, %rdi
callq 0x5450
movq %rax, %r13
movq 0x8(%r12), %r15
movq 0x28(%r15), %rax
decq %rax
cmpq %rax, %r14
jb 0xafc5
addq $0x8, %r15
cmpq %r15, %r13
je 0xb177
movq %r13, %rdi
callq 0x5450
cmpq %r15, %rax
jne 0xb1b5
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%r13), %rsi
movzbl 0x4(%rsp), %ebp
movq %rbx, %rdi
movl %ebp, %edx
callq 0xb28a
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x3186a(%rip), %rsi     # 0x3c8f0
movl $0x2, %edx
callq *0x8(%rax)
addq $0x40, %r13
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movq 0x10(%rsp), %r9
callq 0xaaba
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
movl $0x7d, %esi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
leaq 0x260(%rbx), %rdi
addq %rsi, %rsi
movl $0x20, %edx
callq 0x5150
jmp 0xab75
leaq 0x260(%rbx), %rdi
addq %rsi, %rsi
movl $0x20, %edx
callq 0x5150
jmp 0xad0a
leaq 0x3181b(%rip), %rdi     # 0x3c91d
leaq 0x316f1(%rip), %rsi     # 0x3c7fa
leaq 0x316f5(%rip), %rcx     # 0x3c805
movl $0x36cc, %edx           # imm = 0x36CC
callq 0x5280
leaq 0x317d8(%rip), %rdi     # 0x3c8f9
leaq 0x316d2(%rip), %rsi     # 0x3c7fa
leaq 0x316d6(%rip), %rcx     # 0x3c805
movl $0x367a, %edx           # imm = 0x367A
callq 0x5280
leaq 0x3169a(%rip), %rdi     # 0x3c7da
leaq 0x316b3(%rip), %rsi     # 0x3c7fa
leaq 0x316b7(%rip), %rcx     # 0x3c805
movl $0x3634, %edx           # imm = 0x3634
callq 0x5280
leaq 0x3179a(%rip), %rdi     # 0x3c8f9
leaq 0x31694(%rip), %rsi     # 0x3c7fa
leaq 0x31698(%rip), %rcx     # 0x3c805
movl $0x368f, %edx           # imm = 0x368F
callq 0x5280
leaq 0x3165c(%rip), %rdi     # 0x3c7da
leaq 0x31675(%rip), %rsi     # 0x3c7fa
leaq 0x31679(%rip), %rcx     # 0x3c805
movl $0x3650, %edx           # imm = 0x3650
callq 0x5280
leaq 0x31728(%rip), %rdi     # 0x3c8c5
leaq 0x31656(%rip), %rsi     # 0x3c7fa
leaq 0x3165a(%rip), %rcx     # 0x3c805
movl $0x3635, %edx           # imm = 0x3635
callq 0x5280
leaq 0x31709(%rip), %rdi     # 0x3c8c5
leaq 0x31637(%rip), %rsi     # 0x3c7fa
leaq 0x3163b(%rip), %rcx     # 0x3c805
movl $0x3651, %edx           # imm = 0x3651
callq 0x5280