// File: /workspace/github_cpp_makefile_star2_O3/sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_factor[abi:cxx11](pl0_ast_factor const*)
pair<Value *, string> pl0_tac_factor(pl0_ast_factor const * factor) {
    cout << __func__;
    pair<Value *, string> ans;
    // variables used inner switch-case block.
    int d1, d2;
    constant val;
    variable var, array;
    Value *idx, *t;

    switch (factor->t) {
        case pl0_ast_factor::type_t::ID:
            d1 = valtb.depth(factor->ptr.id->id), d2 = vartb.depth(factor->ptr.id->id);
            if (d1 > d2) {
                // constant
                valtb.find(factor->ptr.id->id, true, val);
                ans = make_pair(new Value(val.val, val.dt), "integer");
            }
            else if (d2 > d1) {
                // variable
                vartb.find(factor->ptr.id->id, true, var);
                if (var.type.length() >= 5 && var.type.substr(0, 5) == "array") {
                    pl0_ast_error(factor->loc, string("use an array identifier ") + "\"" + var.name + "\"" + " as a factor.");
                }
                ans = make_pair(new Value(var.name, var.dt), var.dt);
            }
            else {
                // undeclared identifier
                pl0_ast_error(factor->loc, string("use of undeclared identifier ") + "\"" + factor->ptr.id->id + "\"");
                ans = make_pair(new Value(factor->ptr.id->id, "undefined"), "");
            }
            break;
        case pl0_ast_factor::type_t::UNSIGNED:
            ans = make_pair(new Value(factor->ptr.unsignedn->val, factor->ptr.unsignedn->dt == pl0_ast_constv::INT ? "integer" : "char"), "integer");
            break;
        case pl0_ast_factor::type_t::EXPR:
            ans = pl0_tac_expr(factor->ptr.expr);
            break;
        case pl0_ast_factor::type_t::CALL_FUNC:
            ans = pl0_tac_call_func(factor->ptr.call_func);
            break;
        case pl0_ast_factor::type_t::ARRAY_E:
            // validate array identifier.
            if (vartb.find(factor->arraye.first->id, true, array)) {
                if (array.len == -1) {
                    pl0_ast_error(factor->loc, "expected an array identifier.");
                }
            }
            else {
                pl0_ast_error(factor->loc, string("use of undeclared identifier ") + "\"" + factor->arraye.first->id + "\"");
                array.name = factor->arraye.first->id; // give it a default value, although it's wrong.
            }
            // validate array index.
            idx = pl0_tac_expr(factor->arraye.second).first;
            t = new Value(irb.maketmp()+"#"+array.name+"#"+idx->value()+"#", array.dt);
            irb.emit("=[]", t, new Value(array.name, array.dt), idx);
            ans = make_pair(t, array.type.substr(0, array.type.length()-5));
            break;
        default:
            pl0_ast_error(factor->loc, "undefined syntax");
            ans = make_pair(new Value("^^^^^", "undefined"), "");
            cout << "UNIMPLEMENT EXPRESSION" << endl;
            break;
    }
    return ans;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x438, %rsp            # imm = 0x438
movq %rsi, %r15
movq %rdi, %r14
movq 0x476e9(%rip), %rdi     # 0xb9fd8
leaq 0x20c19(%rip), %rsi     # 0x9350f
xorl %ebx, %ebx
xorl %edx, %edx
callq 0x52e0
movq %rbx, (%r14)
leaq 0x8(%r14), %rax
movq %rax, 0x50(%rsp)
leaq 0x18(%r14), %rbp
movq %rbp, 0x8(%r14)
movq %rbx, 0x10(%r14)
movb $0x0, 0x18(%r14)
leaq 0x3f0(%rsp), %rdi
callq 0x77362
leaq 0x388(%rsp), %rdi
callq 0x76996
leaq 0x320(%rsp), %rdi
callq 0x76996
movl 0x8(%r15), %eax
decl %eax
cmpl $0x4, %eax
ja 0x72be9
leaq 0x1ffb3(%rip), %rcx     # 0x9290c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbp, 0x48(%rsp)
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x48caa(%rip), %rdi     # 0xbb620
callq 0x773c6
movl %eax, %ebp
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x48c64(%rip), %rdi     # 0xbb5f0
callq 0x76b78
cmpl %eax, %ebp
jle 0x72dc3
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x48c78(%rip), %rdi     # 0xbb620
leaq 0x3f0(%rsp), %rcx
movl $0x1, %edx
callq 0x7753a
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
movl 0x410(%rsp), %ebp
leaq 0x310(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x418(%rsp), %rsi
movq 0x420(%rsp), %rdx
addq %rsi, %rdx
leaq 0x300(%rsp), %rdi
callq 0x351dc
movb $0x1, %r12b
leaq 0x300(%rsp), %rdx
movq %r15, %rdi
movl %ebp, %esi
callq 0x75d42
movq %r15, (%r14)
movq 0x10(%r14), %rdx
xorl %r12d, %r12d
leaq 0x1e6ef(%rip), %rcx     # 0x9110f
movl $0x7, %r8d
movq 0x50(%rsp), %rdi
xorl %esi, %esi
callq 0x5370
movq 0x300(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73acb
movq 0x310(%rsp), %rsi
jmp 0x73ac3
movq %rbp, 0x48(%rsp)
movq 0x18(%r15), %rsi
addq $0x8, %rsi
leaq 0x48b8c(%rip), %rdi     # 0xbb5f0
leaq 0x320(%rsp), %rcx
movl $0x1, %edx
callq 0x76ef2
testb %al, %al
je 0x72d60
cmpl $-0x1, 0x380(%rsp)
jne 0x7306e
movq (%r15), %r12
leaq 0x290(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x20164(%rip), %rsi     # 0x92c06
leaq 0x2017a(%rip), %rdx     # 0x92c23
leaq 0x280(%rsp), %rdi
callq 0x253d0
leaq 0x280(%rsp), %rsi
movq %r12, %rdi
callq 0x65f40
movq 0x280(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7306e
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7306e
movq 0x10(%r15), %rsi
movq %rsp, %rdi
callq 0x71f89
jmp 0x72b06
movq 0x10(%r15), %rsi
movq %rsp, %rdi
callq 0x741be
leaq 0x8(%rsp), %r15
movq -0x8(%r15), %rax
movq %rax, (%r14)
movq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x5310
movq (%r15), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x73acb
movq 0x18(%rsp), %rsi
jmp 0x73ac3
movq %rbp, 0x48(%rsp)
movl $0x48, %edi
callq 0x5250
movq %rax, %r12
movq 0x10(%r15), %rax
movl 0x8(%rax), %ebp
xorl %ecx, %ecx
cmpl $0x0, 0xc(%rax)
sete %cl
leaq 0x1e5ac(%rip), %rax     # 0x9110f
leaq 0x20661(%rip), %rsi     # 0x931cb
cmoveq %rax, %rsi
leaq 0x2b0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq (%rcx,%rcx,2), %rax
leaq (%rsi,%rax), %rdx
addq $0x4, %rdx
leaq 0x2a0(%rsp), %rdi
callq 0x253d0
movb $0x1, %r15b
leaq 0x2a0(%rsp), %rdx
movq %r12, %rdi
movl %ebp, %esi
callq 0x75d42
movq %r12, (%r14)
movq 0x10(%r14), %rdx
xorl %r15d, %r15d
leaq 0x1e556(%rip), %rcx     # 0x9110f
movl $0x7, %r8d
movq 0x50(%rsp), %rdi
xorl %esi, %esi
callq 0x5370
movq 0x2a0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73acb
movq 0x2b0(%rsp), %rsi
jmp 0x73ac3
movq (%r15), %r15
leaq 0x210(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x2002b(%rip), %rsi     # 0x92c2a
leaq 0x20034(%rip), %rdx     # 0x92c3a
leaq 0x200(%rsp), %rdi
movq %rbp, 0x48(%rsp)
callq 0x253d0
leaq 0x200(%rsp), %rsi
movq %r15, %rdi
callq 0x65f40
movq 0x200(%rsp), %rdi
cmpq %rbx, %rdi
je 0x72c45
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0xe8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x1ffd6(%rip), %rsi     # 0x92c3b
leaq 0x1ffd4(%rip), %rdx     # 0x92c40
leaq 0xd8(%rsp), %rdi
callq 0x253d0
leaq 0x1f0(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1ff70(%rip), %rsi     # 0x92bfc
leaq 0x1ff72(%rip), %rdx     # 0x92c05
leaq 0x1e0(%rsp), %rdi
callq 0x253d0
movb $0x1, %r12b
leaq 0xd8(%rsp), %rsi
leaq 0x1e0(%rsp), %rdx
movq %r15, %rdi
callq 0x7653e
movq %r15, (%r14)
movq 0x10(%r14), %rdx
xorl %r12d, %r12d
leaq 0x20843(%rip), %rcx     # 0x9350f
movq 0x50(%rsp), %rdi
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x5370
movq 0x1e0(%rsp), %rdi
cmpq %r13, %rdi
je 0x72cf8
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xd8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x72d15
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x472bc(%rip), %r15     # 0xb9fd8
leaq 0x1ff1e(%rip), %rsi     # 0x92c41
movl $0x16, %edx
movq %r15, %rdi
callq 0x52e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x5240
movsbl %al, %esi
movq 0x4728a(%rip), %rdi     # 0xb9fd8
callq 0x5030
movq %rax, %rdi
callq 0x5190
jmp 0x73acb
movq (%r15), %r12
leaq 0x68(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1fcc0(%rip), %rsi     # 0x92a33
leaq 0x1fcd6(%rip), %rdx     # 0x92a50
leaq 0x58(%rsp), %rdi
callq 0x253d0
leaq 0x20268(%rip), %rsi     # 0x92ff3
leaq 0x58(%rsp), %rdi
callq 0x5420
leaq 0x38(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x72f10
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x72f16
jge 0x72ead
movq 0x10(%r15), %rsi
addq $0x8, %rsi
leaq 0x48818(%rip), %rdi     # 0xbb5f0
leaq 0x388(%rsp), %rcx
movl $0x1, %edx
callq 0x76ef2
cmpq $0x5, 0x3d0(%rsp)
jb 0x739ae
leaq 0x3c8(%rsp), %rsi
movq %rsp, %rdi
movl $0x5, %ecx
xorl %edx, %edx
callq 0x52a0
leaq 0x1fc5b(%rip), %rsi     # 0x92a72
movq %rsp, %r12
movq %r12, %rdi
callq 0x50c0
movl %eax, %ebp
movq (%r12), %rdi
leaq 0x10(%rsp), %r13
cmpq %r13, %rdi
je 0x72e3f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
testl %ebp, %ebp
jne 0x739ae
movq (%r15), %r12
leaq 0x88(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1fd78(%rip), %rsi     # 0x92bd5
leaq 0x1fd89(%rip), %rdx     # 0x92bed
leaq 0x78(%rsp), %rdi
callq 0x253d0
leaq 0x2017e(%rip), %rsi     # 0x92ff3
leaq 0x78(%rsp), %rdi
callq 0x5420
leaq 0x68(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x737f1
movq %rdx, 0x58(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x68(%rsp)
jmp 0x737f8
movq (%r15), %r12
leaq 0x68(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1fb73(%rip), %rsi     # 0x92a33
leaq 0x1fb89(%rip), %rdx     # 0x92a50
leaq 0x58(%rsp), %rdi
callq 0x253d0
leaq 0x2011b(%rip), %rsi     # 0x92ff3
leaq 0x58(%rsp), %rdi
callq 0x5420
leaq 0x38(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x735d6
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x735dc
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x18(%r15), %rax
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
callq 0x50d0
leaq 0x10(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x72f69
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x72f70
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rsp, %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x20062(%rip), %rsi     # 0x92ff3
callq 0x5420
leaq 0x190(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x72fc6
movq %rdx, 0x180(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x190(%rsp)
jmp 0x72fcc
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x180(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
callq 0x65f40
movq 0x180(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73010
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x73026
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x73042
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
cmpq %r13, %rdi
je 0x73059
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x18(%r15), %rsi
addq $0x8, %rsi
leaq 0x320(%rsp), %rdi
callq 0x5150
movq 0x20(%r15), %rsi
movq %rsp, %rdi
callq 0x71f89
leaq 0x18(%rsp), %rax
movq -0x18(%rax), %rbx
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73099
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %rbp
leaq 0x484fb(%rip), %rsi     # 0xbb5a8
leaq 0x260(%rsp), %rdi
callq 0x632b2
leaq 0x88(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x260(%rsp), %rsi
movq 0x268(%rsp), %rdx
addq %rsi, %rdx
leaq 0x78(%rsp), %rdi
callq 0x351dc
leaq 0x1fb3a(%rip), %rsi     # 0x92c24
leaq 0x78(%rsp), %rdi
callq 0x5420
movq 0x320(%rsp), %rsi
movq 0x328(%rsp), %rdx
leaq 0x78(%rsp), %rdi
callq 0x50d0
leaq 0x68(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x73135
movq %rdx, 0x58(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x68(%rsp)
jmp 0x7313b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x58(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1fac6(%rip), %rsi     # 0x92c24
callq 0x5420
leaq 0x38(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7318b
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x73193
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, 0x30(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xb8(%rsp), %rdi
movq %rbx, %rsi
callq 0x776da
movq 0x28(%rsp), %rcx
movq 0x30(%rsp), %r8
movq 0xc0(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %r12, %rcx
je 0x731e0
movq 0x38(%rsp), %rdi
movq 0xb8(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x7320c
leaq 0xc8(%rsp), %r9
movl $0xf, %edi
cmpq %r9, %rsi
je 0x73207
movq 0xc8(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x73218
leaq 0x28(%rsp), %rdi
callq 0x50d0
jmp 0x73229
leaq 0xb8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x52c0
leaq 0x10(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x7324c
movq %rsi, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x73252
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x1f9ae(%rip), %rsi     # 0x92c24
movq %rsp, %rdi
callq 0x5420
movq %rbx, 0x178(%rsp)
leaq 0x148(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x732b6
movq %rdx, 0x138(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x148(%rsp)
jmp 0x732bc
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x140(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x250(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x340(%rsp), %rsi
movq 0x348(%rsp), %rdx
addq %rsi, %rdx
leaq 0x240(%rsp), %rdi
callq 0x351dc
leaq 0x138(%rsp), %rsi
leaq 0x240(%rsp), %rdx
movq %rbp, %rdi
callq 0x7653e
movq 0x240(%rsp), %rdi
cmpq %r15, %rdi
je 0x73338
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x138(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73355
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73370
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73391
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x733a8
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x733c4
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x733de
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x270(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x733ff
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x128(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1f814(%rip), %rsi     # 0x92c26
leaq 0x1f810(%rip), %rdx     # 0x92c29
leaq 0x118(%rsp), %rdi
callq 0x253d0
movl $0x48, %edi
callq 0x5250
movq %rax, %r13
leaq 0x108(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x320(%rsp), %rsi
movq 0x328(%rsp), %rdx
addq %rsi, %rdx
leaq 0xf8(%rsp), %rdi
callq 0x351dc
leaq 0x230(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x340(%rsp), %rsi
movq 0x348(%rsp), %rdx
addq %rsi, %rdx
leaq 0x220(%rsp), %rdi
callq 0x351dc
movb $0x1, %bl
leaq 0xf8(%rsp), %rsi
leaq 0x220(%rsp), %rdx
movq %r13, %rdi
callq 0x7653e
xorl %ebx, %ebx
leaq 0x480f9(%rip), %rdi     # 0xbb5a8
leaq 0x118(%rsp), %rsi
movq %rbp, %rdx
movq %r13, %rcx
movq 0x178(%rsp), %r8
callq 0x75c2c
movq 0x220(%rsp), %rdi
cmpq %r15, %rdi
je 0x734e7
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xf8(%rsp), %rdi
cmpq %r12, %rdi
leaq 0x18(%rsp), %r15
je 0x73509
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
leaq 0x38(%rsp), %rbx
je 0x73533
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x360(%rsp), %rsi
movq 0x8(%rsi), %rcx
addq $-0x5, %rcx
leaq 0x28(%rsp), %rdi
xorl %edx, %edx
callq 0x52a0
leaq 0x8(%rsp), %rsi
movq %rbp, -0x8(%rsi)
movq %r15, (%rsi)
movq 0x28(%rsp), %rax
cmpq %rbx, %rax
je 0x73576
movq %rax, 0x8(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x18(%rsp)
jmp 0x7357d
movups (%rbx), %xmm0
movups %xmm0, (%r15)
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
movq %rbx, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movb $0x0, 0x38(%rsp)
movq %rbp, (%r14)
movq 0x50(%rsp), %rdi
callq 0x5310
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x735be
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73acb
movq 0x38(%rsp), %rsi
jmp 0x73ac3
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x10(%r15), %rax
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
callq 0x50d0
leaq 0x10(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7362f
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x73636
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rsp, %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1f99c(%rip), %rsi     # 0x92ff3
callq 0x5420
leaq 0x1b0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7368c
movq %rdx, 0x1a0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1b0(%rsp)
jmp 0x73692
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x1a0(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
callq 0x65f40
movq 0x1a0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x736d6
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x736ec
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x73708
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
cmpq %r13, %rdi
je 0x7371f
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r12
movq 0x10(%r15), %rax
leaq 0x168(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq 0x158(%rsp), %rdi
callq 0x351dc
leaq 0x2d0(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1f495(%rip), %rsi     # 0x92bfc
leaq 0x1f497(%rip), %rdx     # 0x92c05
leaq 0x2c0(%rsp), %rdi
callq 0x253d0
movb $0x1, %r15b
leaq 0x158(%rsp), %rsi
leaq 0x2c0(%rsp), %rdx
movq %r12, %rdi
callq 0x7653e
movq %r12, (%r14)
movq 0x10(%r14), %rdx
xorl %r15d, %r15d
leaq 0x1fd68(%rip), %rcx     # 0x9350f
movq 0x50(%rsp), %rdi
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x5370
movq 0x2c0(%rsp), %rdi
cmpq %r13, %rdi
je 0x737d3
movq 0x2d0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x158(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73acb
movq 0x168(%rsp), %rsi
jmp 0x73ac3
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
movq 0x8(%rax), %rdx
leaq 0x58(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x388(%rsp), %rsi
movq 0x390(%rsp), %rdx
callq 0x50d0
leaq 0x38(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x73850
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x73857
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1f779(%rip), %rsi     # 0x92ff3
callq 0x5420
movq %r13, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x738a0
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x738a8
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
movq %rsp, %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1f325(%rip), %rsi     # 0x92bee
callq 0x5420
leaq 0x1d0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x738fe
movq %rdx, 0x1c0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1d0(%rsp)
jmp 0x73904
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x1c0(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
callq 0x65f40
movq 0x1c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73948
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x5260
movq (%rsp), %rdi
cmpq %r13, %rdi
leaq 0x88(%rsp), %r12
je 0x73966
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x28(%rsp), %rdi
cmpq %r15, %rdi
je 0x7397d
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x58(%rsp), %rdi
cmpq %rbp, %rdi
je 0x73994
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x78(%rsp), %rdi
cmpq %r12, %rdi
je 0x739ae
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %edi
callq 0x5250
movq %rax, %r15
leaq 0xa8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x388(%rsp), %rsi
movq 0x390(%rsp), %rdx
addq %rsi, %rdx
leaq 0x98(%rsp), %rdi
callq 0x351dc
leaq 0x2f0(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2e0(%rsp), %rdi
callq 0x351dc
movb $0x1, %bpl
leaq 0x98(%rsp), %rsi
leaq 0x2e0(%rsp), %rdx
movq %r15, %rdi
callq 0x7653e
leaq 0x8(%rsp), %r12
movq %r15, -0x8(%r12)
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rdx
addq %rsi, %rdx
xorl %ebp, %ebp
movq %r12, %rdi
callq 0x351dc
movq (%rsp), %rax
movq %rax, (%r14)
movq 0x50(%rsp), %rdi
movq %r12, %rsi
callq 0x5310
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73a89
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x2e0(%rsp), %rdi
cmpq %r13, %rdi
leaq 0xa8(%rsp), %rbx
je 0x73aae
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x98(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73acb
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x370(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73aec
movq 0x370(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x350(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73b0d
movq 0x350(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x330(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73b2e
movq 0x330(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x3d8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73b4f
movq 0x3d8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x3b8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73b70
movq 0x3b8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x398(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73b91
movq 0x398(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x428(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73bb2
movq 0x428(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x400(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73bd3
movq 0x400(%rsp), %rsi
incq %rsi
callq 0x5260
movq %r14, %rax
addq $0x438, %rsp            # imm = 0x438
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movq 0x1c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73c0d
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73c0d
movq %rax, %r14
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x73c28
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73c28
movq %rax, %r14
movq 0x28(%rsp), %rdi
cmpq %r15, %rdi
je 0x73c44
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73c44
movq %rax, %r14
movq 0x58(%rsp), %rdi
cmpq %rbp, %rdi
je 0x73c60
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73c60
movq %rax, %r14
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x74170
movq 0x88(%rsp), %rsi
jmp 0x740ca
jmp 0x7416d
jmp 0x7416d
movq %rax, %r14
movq 0x280(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74170
movq 0x290(%rsp), %rsi
jmp 0x740ca
jmp 0x7416d
movq %rax, %r14
movq 0x158(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74140
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x74140
jmp 0x7403d
jmp 0x7416d
movq %rax, %r14
movq 0x98(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74111
movq 0xa8(%rsp), %rsi
jmp 0x74002
movq %rax, %r14
movq 0x1a0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73e01
movq 0x1b0(%rsp), %rsi
jmp 0x73def
jmp 0x7400f
jmp 0x73dfe
jmp 0x7416d
jmp 0x73e1e
jmp 0x73e3f
jmp 0x7416d
movq %rax, %r14
movq 0x2c0(%rsp), %rdi
cmpq %r13, %rdi
je 0x73d66
movq 0x2d0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x158(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7413b
movq 0x168(%rsp), %rsi
jmp 0x74133
movq %rax, %r14
movq 0x2e0(%rsp), %rdi
cmpq %r13, %rdi
je 0x73da4
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x73dc9
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bpl, %bpl
jne 0x74111
jmp 0x74170
movq %rax, %r14
movq 0x180(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73e01
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73e01
jmp 0x7400f
movq %rax, %r14
movq (%rsp), %rdi
cmpq %rbp, %rdi
je 0x73e21
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73e21
jmp 0x7416d
movq %rax, %r14
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x73e42
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73e42
movq %rax, %r14
movq 0x58(%rsp), %rdi
cmpq %r13, %rdi
je 0x74170
movq 0x68(%rsp), %rsi
jmp 0x740ca
jmp 0x7416d
jmp 0x7416d
movq %rax, %r14
movq 0xf8(%rsp), %rdi
cmpq %r12, %rdi
je 0x7409c
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x7409c
movq %rax, %r14
jmp 0x7409c
movq %rax, %r14
jmp 0x740a9
jmp 0x7416d
movq %rax, %r14
movq 0x240(%rsp), %rdi
cmpq %r15, %rdi
je 0x73ec7
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73ec7
movq %rax, %r14
movq 0x138(%rsp), %rdi
cmpq %rbx, %rdi
je 0x73ee9
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73ee9
movq %rax, %r14
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73f09
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73f09
movq %rax, %r14
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73f2f
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73f2f
movq %rax, %r14
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x73f4b
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73f4b
movq %rax, %r14
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x73f6e
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73f6e
jmp 0x73f6b
movq %rax, %r14
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x73f8d
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x73f8d
movq %rax, %r14
leaq 0x270(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x73fae
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0x48, %esi
movq %rbp, %rdi
jmp 0x74148
movq %rax, %r14
jmp 0x73fae
movq %rax, %r14
movq 0x300(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7410c
movq 0x310(%rsp), %rsi
jmp 0x74104
jmp 0x7416d
movq %rax, %r14
movq 0xd8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74111
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x74111
movq %rax, %r14
jmp 0x74111
jmp 0x7416d
movq %rax, %r14
movq 0x200(%rsp), %rdi
cmpq %rbx, %rdi
je 0x74170
movq 0x210(%rsp), %rsi
jmp 0x740ca
movq %rax, %r14
jmp 0x74140
jmp 0x7416d
jmp 0x7416d
jmp 0x74051
movq %rbp, 0x48(%rsp)
jmp 0x7416d
movq %rax, %r14
movq 0x220(%rsp), %rdi
cmpq %r15, %rdi
je 0x7407b
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xf8(%rsp), %rdi
cmpq %r12, %rdi
je 0x74098
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x5260
testb %bl, %bl
je 0x740a9
movl $0x48, %esi
movq %r13, %rdi
callq 0x5260
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x74170
movq 0x128(%rsp), %rsi
incq %rsi
jmp 0x74148
movq %rax, %r14
movq 0x1e0(%rsp), %rdi
cmpq %r13, %rdi
je 0x740ef
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xd8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7410c
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r12b, %r12b
je 0x74170
movl $0x48, %esi
movq %r15, %rdi
jmp 0x74148
movq %rax, %r14
movq 0x2a0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7413b
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r15b, %r15b
je 0x74170
movl $0x48, %esi
movq %r12, %rdi
callq 0x5260
jmp 0x74170
movq %rbp, 0x48(%rsp)
movq %rax, %r14
jmp 0x7417d
movq %rbp, 0x48(%rsp)
movq %rax, %r14
jmp 0x7418a
movq %rbp, 0x48(%rsp)
movq %rax, %r14
jmp 0x74197
movq %rax, %r14
leaq 0x320(%rsp), %rdi
callq 0x764f0
leaq 0x388(%rsp), %rdi
callq 0x764f0
leaq 0x3f0(%rsp), %rdi
callq 0x764ba
movq 0x50(%rsp), %rax
movq (%rax), %rdi
cmpq 0x48(%rsp), %rdi
je 0x741b6
movq 0x48(%rsp), %rax
movq (%rax), %rsi
incq %rsi
callq 0x5260
movq %r14, %rdi
callq 0x53d0