// File: /workspace/github_cpp_makefile_star2_O3/benjibc[P]json-universal-container/jsonUnitTest.cpp
// Function: main
int main()
{
    JSON data;
    populate(data);
    int ID = (int)data["id"];
    assert(((int)data["id"]) == ID);
    assert(((string)data["person"][0]["name"]) == "Benny");
    assert(((int)data["secondID"]) == 1);
    std::cout << data.json_encode() << std::endl;
    JSON decoded;
    JSONDecode(data.json_encode(), decoded);
    std::cout << decoded.json_encode() << std::endl;
    std::string test_data = "{ \"glossary\": { \"title\": \"example glossary\","
		"\"GlossDiv\": { \"title\": \"S\", \"GlossList\": { \"GlossEntry\": {"
        "\"ID\": \"SGML\",\"SortAs\": \"SGML\","
	    "\"GlossTerm\": \"Standard Generalized Markup Language\","
        "\"Acronym\": \"SGML\",\"Abbrev\": \"ISO 8879:1986\","
        "\"GlossDef\": {\"para\": \"A meta-markup language, "
        "used to create markup languages such as DocBook.\","
        "\"GlossSeeAlso\": [\"GML\", \"XML\"]},\"GlossSee\": \"markup\""
        "} } } } }";
    JSON decoded2;
    JSONDecode(test_data, decoded2);
    std::cout << decoded2.json_encode() << std::endl;
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xd0, %rsp
leaq 0x60(%rsp), %rdi
movl $0x0, 0x28(%rdi)
callq 0x3721
leaq 0x6763(%rip), %rsi      # 0xa2bb
leaq 0x60(%rsp), %rdi
callq 0x44d0
movl 0x28(%rax), %ecx
cmpl $0x5, %ecx
je 0x3b79
cmpl $0x4, %ecx
jne 0x3f87
cvttsd2si (%rax), %ebx
jmp 0x3b7c
movzbl (%rax), %ebx
leaq 0x6738(%rip), %rsi      # 0xa2bb
leaq 0x60(%rsp), %rdi
callq 0x44d0
movl 0x28(%rax), %ecx
cmpl $0x5, %ecx
je 0x3ba4
cmpl $0x4, %ecx
jne 0x3feb
cvttsd2si (%rax), %eax
jmp 0x3ba7
movzbl (%rax), %eax
cmpl %ebx, %eax
jne 0x3ed8
leaq 0x56a2(%rip), %rsi      # 0x9258
leaq 0x60(%rsp), %rdi
callq 0x44d0
movq %rax, %rdi
xorl %esi, %esi
callq 0x472a
leaq 0x567c(%rip), %rsi      # 0x924d
movq %rax, %rdi
callq 0x44d0
cmpl $0x1, 0x28(%rax)
jne 0x3ef7
movq (%rax), %rsi
leaq 0x30(%rsp), %rdi
movq %rsp, %rdx
callq 0x20b0
leaq 0x5658(%rip), %rsi      # 0x9252
leaq 0x30(%rsp), %rdi
callq 0x2080
testl %eax, %eax
jne 0x3f49
leaq 0x40(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x3c1f
callq 0x2170
leaq 0x561e(%rip), %rsi      # 0x9244
leaq 0x60(%rsp), %rdi
callq 0x44d0
movl 0x28(%rax), %ecx
cmpl $0x5, %ecx
je 0x3c47
cmpl $0x4, %ecx
jne 0x404f
cvttsd2si (%rax), %eax
jmp 0x3c4a
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x3f68
movq %rsp, %rdi
leaq 0x60(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4824
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq 0xa364(%rip), %rdi      # 0xdfd8
callq 0x21d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x10(%rsp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0x3cb6
callq 0x2170
movl $0x0, 0x28(%rsp)
leaq 0x30(%rsp), %rdi
leaq 0x60(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4824
leaq 0x30(%rsp), %rdi
movq %rsp, %rsi
xorl %edx, %edx
callq 0x250f
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x3cef
callq 0x2170
leaq 0x30(%rsp), %rdi
movq %rsp, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4824
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0xa2c7(%rip), %rdi      # 0xdfd8
callq 0x21d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x3d4f
callq 0x2170
leaq 0xc0(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x5582(%rip), %rsi      # 0x92e5
leaq 0x56fc(%rip), %rdx      # 0x9466
leaq 0xb0(%rsp), %rdi
callq 0x81be
leaq 0x30(%rsp), %rsi
movl $0x0, 0x28(%rsi)
leaq 0xb0(%rsp), %rdi
xorl %edx, %edx
callq 0x250f
leaq 0x90(%rsp), %rdi
leaq 0x30(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4824
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
movq 0xa219(%rip), %rdi      # 0xdfd8
callq 0x21d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e04
callq 0x2170
movl 0x58(%rsp), %eax
cmpl $0x3, %eax
je 0x3e34
cmpl $0x2, %eax
je 0x3e28
cmpl $0x1, %eax
jne 0x3e3e
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x3e3e
callq 0x2170
jmp 0x3e3e
leaq 0x30(%rsp), %rdi
callq 0x798c
jmp 0x3e3e
leaq 0x30(%rsp), %rdi
callq 0x447c
movq 0xb0(%rsp), %rdi
cmpq %r12, %rdi
je 0x3e50
callq 0x2170
movl 0x28(%rsp), %eax
cmpl $0x3, %eax
je 0x3e7d
cmpl $0x2, %eax
je 0x3e73
cmpl $0x1, %eax
jne 0x3e85
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x3e85
callq 0x2170
jmp 0x3e85
movq %rsp, %rdi
callq 0x798c
jmp 0x3e85
movq %rsp, %rdi
callq 0x447c
movl 0x88(%rsp), %eax
cmpl $0x3, %eax
je 0x3ebc
cmpl $0x2, %eax
je 0x3eb0
cmpl $0x1, %eax
jne 0x3ec6
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3ec6
callq 0x2170
jmp 0x3ec6
leaq 0x60(%rsp), %rdi
callq 0x798c
jmp 0x3ec6
leaq 0x60(%rsp), %rdi
callq 0x447c
xorl %eax, %eax
addq $0xd0, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5386(%rip), %rdi      # 0x9265
leaq 0x5397(%rip), %rsi      # 0x927d
leaq 0x53a1(%rip), %rcx      # 0x928e
movl $0x1d, %edx
callq 0x20f0
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x6338(%rip), %rsi      # 0xa24c
leaq 0x6342(%rip), %rdx      # 0xa25d
movq %rsp, %rdi
callq 0x81be
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x697a
xorl %ebp, %ebp
leaq 0x9d1e(%rip), %rsi      # 0xdc58
leaq 0x2a83(%rip), %rdx      # 0x69c4
movq %r14, %rdi
callq 0x2230
leaq 0x5349(%rip), %rdi      # 0x9299
leaq 0x5326(%rip), %rsi      # 0x927d
leaq 0x5330(%rip), %rcx      # 0x928e
movl $0x1e, %edx
callq 0x20f0
leaq 0x5359(%rip), %rdi      # 0x92c8
leaq 0x5307(%rip), %rsi      # 0x927d
leaq 0x5311(%rip), %rcx      # 0x928e
movl $0x1f, %edx
callq 0x20f0
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
movabsq $0x69206e6120746f4e, %rax # imm = 0x69206E6120746F4E
movq %rax, (%r15)
movabsq $0x6570797420746e69, %rax # imm = 0x6570797420746E69
movq %rax, 0x7(%r15)
movq $0xf, -0x8(%r15)
movb $0x0, 0xf(%r15)
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x697a
xorl %ebp, %ebp
leaq 0x9c7c(%rip), %rsi      # 0xdc58
leaq 0x29e1(%rip), %rdx      # 0x69c4
movq %r14, %rdi
callq 0x2230
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
movabsq $0x69206e6120746f4e, %rax # imm = 0x69206E6120746F4E
movq %rax, (%r15)
movabsq $0x6570797420746e69, %rax # imm = 0x6570797420746E69
movq %rax, 0x7(%r15)
movq $0xf, -0x8(%r15)
movb $0x0, 0xf(%r15)
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x697a
xorl %ebp, %ebp
leaq 0x9c18(%rip), %rsi      # 0xdc58
leaq 0x297d(%rip), %rdx      # 0x69c4
movq %r14, %rdi
callq 0x2230
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
movabsq $0x69206e6120746f4e, %rax # imm = 0x69206E6120746F4E
movq %rax, (%r15)
movabsq $0x6570797420746e69, %rax # imm = 0x6570797420746E69
movq %rax, 0x7(%r15)
movq $0xf, -0x8(%r15)
movb $0x0, 0xf(%r15)
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x697a
xorl %ebp, %ebp
leaq 0x9bb4(%rip), %rsi      # 0xdc58
leaq 0x2919(%rip), %rdx      # 0x69c4
movq %r14, %rdi
callq 0x2230
jmp 0x40b7
jmp 0x40b7
movq %rax, %rdi
callq 0x696f
jmp 0x40ca
jmp 0x40ca
movq %rax, %rbx
jmp 0x40e4
jmp 0x40ca
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x40db
callq 0x2170
testb %bpl, %bpl
je 0x4172
movq %r14, %rdi
callq 0x2120
jmp 0x4172
jmp 0x40f3
movq %rax, %rbx
jmp 0x4122
jmp 0x40fe
jmp 0x40fe
jmp 0x4148
movq %rax, %rbx
jmp 0x413e
jmp 0x416f
jmp 0x416f
jmp 0x416f
movq %rax, %rbx
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4122
callq 0x2170
leaq 0x30(%rsp), %rdi
callq 0x4334
movq 0xb0(%rsp), %rdi
cmpq %r12, %rdi
je 0x413e
callq 0x2170
movq %rsp, %rdi
callq 0x4334
jmp 0x4172
movq %rax, %rbx
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
jne 0x4139
jmp 0x413e
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4172
callq 0x2170
jmp 0x4172
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x4334
movq %rbx, %rdi
callq 0x2240