// File: eniac[P]Mantis/src/compile/compile_p4.cpp
// Function: generatePackingTablesForIng(std::vector<AstNode*, std::allocator<AstNode*>>*, std::vector<std::pair<std::vector<std::pair<ReactionArgNode*, int>, std::allocator<std::pair<ReactionArgNode*, int>>>, int>, std::allocator<std::pair<std::vector<std::pair<ReactionArgNode*, int>, std::allocator<std::pair<ReactionArgNode*, int>>>, int>>> const&, bool)
static vector<MblRefNode*> generatePackingTablesForIng(vector<AstNode*>* newNodes,
                                          const vector<ReactionArgBin>& bins, bool forIng) {
    vector<MblRefNode*> reactionArgRefs;

    string p4rArgHdrType;
    string p4rArgHdrName;
    string p4rPackTableNameBase;
    string p4rPackActionNameBase;
    string p4rPackFlcNameBase;
    string p4rPackFlNameBase;
    if(forIng) {
        p4rArgHdrType = std::string(kP4rIngArghdrType);
        p4rArgHdrName = std::string(kP4rIngArghdrName);
        p4rPackTableNameBase = "__tiPack";
        p4rPackActionNameBase = "__aiPack";
        p4rPackFlcNameBase = "__flci_packedArgs_reg";
        p4rPackFlNameBase = "__fli_packedArgs_reg";
    } else {
        p4rArgHdrType = std::string(kP4rEgrArghdrType);
        p4rArgHdrName = std::string(kP4rEgrArghdrName);
        p4rPackTableNameBase = "__tePack";
        p4rPackActionNameBase = "__aePack";
        p4rPackFlcNameBase = "__flce_packedArgs_reg";
        p4rPackFlNameBase = "__fle_packedArgs_reg";
    }

    // Generate packed fields
    ostringstream oss_fld;
    oss_fld << "header_type " << p4rArgHdrType << " {\n"
            << "  fields {\n";
    for (int i = 0; i < bins.size(); ++i) {
        oss_fld << "  reg" << i << " : " << bins[i].second << ";\n";
    }
    oss_fld << " }\n"
            << "}\n\n"
            << "metadata " << p4rArgHdrType << " "
                           << p4rArgHdrName << ";\n\n";
    auto packedMetaNode = new UnanchoredNode(
            new string(oss_fld.str()), new string("metadata"),
            new string(p4rArgHdrType));
    newNodes->push_back(packedMetaNode);

    // Synthesize table/action for each pack
    for (int i = 0; i < bins.size(); ++i) {
        // Generate packing table
        auto tiPackName = new NameNode(new string(p4rPackTableNameBase+std::to_string(i)));
        auto tiPackReads = new TableReadStmtsNode();
        auto tiPackActions = new TableActionStmtsNode();
        tiPackActions->push_back(
                new TableActionStmtNode(new NameNode(new string(p4rPackActionNameBase+std::to_string(i)))));
        auto tiPackTable = new TableNode(tiPackName, tiPackReads, tiPackActions,
                                        "  default_action : "+p4rPackActionNameBase+std::to_string(i)+"();\nsize:1;", "");
        newNodes->push_back(tiPackTable);

        // Generate packing action
        auto aiPackName = new NameNode(new string(p4rPackActionNameBase+std::to_string(i)));
        auto aiPackParams = new ActionParamsNode();
        auto aiPackStmts = new ActionStmtsNode(); 

        // Actual size of the reg (<= 32)
        int regsize = 0;
        // Generate field list node
        ostringstream oss_fl;
        oss_fl << "field_list " << p4rPackFlNameBase << i << "{\n";
        for (int j = 0; j < bins[i].first.size(); ++j) {

            AstNode* arg = bins[i].first[j].first->arg_;
            int width = bins[i].first[j].second;
            regsize += width;

            if (typeContains(arg, "FieldNode")) {
                oss_fl << arg->toString() << ";\n";
            } else if (typeContains(arg, "MblRefNode")) {
                oss_fl << arg->toString() << ";\n";
                // Mark this ref for future processing
                // Currently not supporting field list and hash duplication
                reactionArgRefs.push_back(dynamic_cast<MblRefNode*>(arg));
            } else {
                assert(false);
            }            

        }
        // Close field_list
        oss_fl << "\n}\n\n";
        newNodes->push_back(
            new UnanchoredNode(
                new string(oss_fl.str()), new string("field_list"),
                new string("field_list"+std::to_string(i)))
        );  

        // Generate field_list_calculation
        ostringstream oss_flc;
        oss_flc << "field_list_calculation " << p4rPackFlcNameBase << i << " {\n"
                << "  input {\n"
                << "    " << p4rPackFlNameBase << i << ";\n"
                << "  }\n"
                << "  algorithm : identity;\n"
                << "  output_width : " << regsize << ";\n"
                << "}\n\n";

        newNodes->push_back(
            new UnanchoredNode(
                new string(oss_flc.str()), new string("field_list_calc"),
                new string(p4rPackFlcNameBase+std::to_string(i)))
        ); 

        // Example: modify_field_with_hash_based_offset(dst, 0, __flce_packedArgs_reg0, 4294967296);
        // Note: alternative approach using (modify - shift_left - add_to_field) would not fit into a single action due to data plane constraints
        auto aiPackStmtName = new NameNode(new string("modify_field_with_hash_based_offset"));
        auto aiPackStmtArgs = new ArgsNode();
        // dst
        ostringstream oss_postfix;
        oss_postfix << "reg" << i;
        BodyWordNode* targetBodyWord = new BodyWordNode(
            BodyWordNode::FIELD,
                new FieldNode(
                    new NameNode(new string(p4rArgHdrName)),
                    new NameNode(new string(oss_postfix.str()))));
        aiPackStmtArgs->push_back(targetBodyWord);
        // base
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::INTEGER,
                    new IntegerNode(new string(to_string(0))))); 
        // __calc_packedArgs_regx
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::STRING,
                    new StrNode(new string(p4rPackFlcNameBase+std::to_string(i)))));             
        // size (power of 2)           
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::INTEGER,
                    new IntegerNode(new string(to_string((long long)(pow(2, regsize))))))); 

        aiPackStmts->push_back(
                new ActionStmtNode(aiPackStmtName, aiPackStmtArgs, ActionStmtNode::NAME_ARGLIST, NULL, NULL));        
        
        auto aiPackAction = new ActionNode(aiPackName, aiPackParams, aiPackStmts);
        auto aiPackActionWrapper = new InputNode(NULL, aiPackAction);
        newNodes->push_back(aiPackActionWrapper);
    }
    
    return reactionArgRefs;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xdb0, %rsp            # imm = 0xDB0
movq %rdi, -0xa40(%rbp)
movb %cl, %al
movq %rdi, %rcx
movq %rcx, -0xa38(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
movb $0x0, -0x1a(%rbp)
callq 0xcc990
leaq -0x40(%rbp), %rdi
callq 0xaa7f0
leaq -0x60(%rbp), %rdi
callq 0xaa7f0
leaq -0x80(%rbp), %rdi
callq 0xaa7f0
leaq -0xa0(%rbp), %rdi
callq 0xaa7f0
leaq -0xc0(%rbp), %rdi
callq 0xaa7f0
leaq -0xe0(%rbp), %rdi
callq 0xaa7f0
testb $0x1, -0x19(%rbp)
je 0x120480
leaq -0x101(%rbp), %rdi
movq %rdi, -0xa48(%rbp)
callq 0xaaa70
movq -0xa48(%rbp), %rdx
leaq 0x1dfd8(%rip), %rsi     # 0x13e30a
leaq -0x100(%rbp), %rdi
callq 0xaa7d0
jmp 0x120340
leaq -0x40(%rbp), %rdi
leaq -0x100(%rbp), %rsi
movq %rsi, -0xa58(%rbp)
callq 0xaa6d0
movq -0xa58(%rbp), %rdi
callq 0xaabe8
leaq -0x101(%rbp), %rdi
callq 0xaa5f0
leaq -0x139(%rbp), %rdi
movq %rdi, -0xa50(%rbp)
callq 0xaaa70
movq -0xa50(%rbp), %rdx
leaq 0x1df8c(%rip), %rsi     # 0x13e31c
leaq -0x138(%rbp), %rdi
callq 0xaa7d0
jmp 0x12039e
leaq -0x60(%rbp), %rdi
leaq -0x138(%rbp), %rsi
movq %rsi, -0xa60(%rbp)
callq 0xaa6d0
movq -0xa60(%rbp), %rdi
callq 0xaabe8
leaq -0x139(%rbp), %rdi
callq 0xaa5f0
leaq 0x1db66(%rip), %rsi     # 0x13df3a
leaq -0x80(%rbp), %rdi
callq 0xaa7c0
jmp 0x1203df
leaq 0x1df46(%rip), %rsi     # 0x13e32c
leaq -0xa0(%rbp), %rdi
callq 0xaa7c0
jmp 0x1203f4
leaq 0x1df3a(%rip), %rsi     # 0x13e335
leaq -0xc0(%rbp), %rdi
callq 0xaa7c0
jmp 0x120409
leaq 0x1df3b(%rip), %rsi     # 0x13e34b
leaq -0xe0(%rbp), %rdi
callq 0xaa7c0
jmp 0x12041e
jmp 0x1205d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x101(%rbp), %rdi
callq 0xaa5f0
jmp 0x12241b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x139(%rbp), %rdi
callq 0xaa5f0
jmp 0x12241b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12241b
leaq -0x161(%rbp), %rdi
movq %rdi, -0xa68(%rbp)
callq 0xaaa70
movq -0xa68(%rbp), %rdx
leaq 0x1debf(%rip), %rsi     # 0x13e360
leaq -0x160(%rbp), %rdi
callq 0xaa7d0
jmp 0x1204af
leaq -0x40(%rbp), %rdi
leaq -0x160(%rbp), %rsi
movq %rsi, -0xa78(%rbp)
callq 0xaa6d0
movq -0xa78(%rbp), %rdi
callq 0xaabe8
leaq -0x161(%rbp), %rdi
callq 0xaa5f0
leaq -0x189(%rbp), %rdi
movq %rdi, -0xa70(%rbp)
callq 0xaaa70
movq -0xa70(%rbp), %rdx
leaq 0x1de73(%rip), %rsi     # 0x13e372
leaq -0x188(%rbp), %rdi
callq 0xaa7d0
jmp 0x12050d
leaq -0x60(%rbp), %rdi
leaq -0x188(%rbp), %rsi
movq %rsi, -0xa80(%rbp)
callq 0xaa6d0
movq -0xa80(%rbp), %rdi
callq 0xaabe8
leaq -0x189(%rbp), %rdi
callq 0xaa5f0
leaq 0x1da24(%rip), %rsi     # 0x13df67
leaq -0x80(%rbp), %rdi
callq 0xaa7c0
jmp 0x12054e
leaq 0x1de2d(%rip), %rsi     # 0x13e382
leaq -0xa0(%rbp), %rdi
callq 0xaa7c0
jmp 0x120563
leaq 0x1de21(%rip), %rsi     # 0x13e38b
leaq -0xc0(%rbp), %rdi
callq 0xaa7c0
jmp 0x120578
leaq 0x1de22(%rip), %rsi     # 0x13e3a1
leaq -0xe0(%rbp), %rdi
callq 0xaa7c0
jmp 0x12058d
jmp 0x1205d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x161(%rbp), %rdi
callq 0xaa5f0
jmp 0x12241b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x189(%rbp), %rdi
callq 0xaa5f0
jmp 0x12241b
leaq -0x308(%rbp), %rdi
callq 0xaa7b0
jmp 0x1205e3
leaq 0x1980b(%rip), %rsi     # 0x139df5
leaq -0x308(%rbp), %rdi
callq 0xaa540
movq %rax, -0xa88(%rbp)
jmp 0x1205ff
movq -0xa88(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xa90(%rbp)
jmp 0x120618
movq -0xa90(%rbp), %rdi
leaq 0x1d971(%rip), %rsi     # 0x13df97
callq 0xaa540
movq %rax, -0xa98(%rbp)
jmp 0x120634
movq -0xa98(%rbp), %rdi
leaq 0x197c0(%rip), %rsi     # 0x139e02
callq 0xaa540
jmp 0x120649
movl $0x0, -0x30c(%rbp)
movslq -0x30c(%rbp), %rax
movq %rax, -0xaa0(%rbp)
movq -0x18(%rbp), %rdi
callq 0xd1800
movq %rax, %rcx
movq -0xaa0(%rbp), %rax
cmpq %rcx, %rax
jae 0x12073a
leaq 0x1dd32(%rip), %rsi     # 0x13e3b6
leaq -0x308(%rbp), %rdi
callq 0xaa540
movq %rax, -0xaa8(%rbp)
jmp 0x120699
movq -0xaa8(%rbp), %rdi
movl -0x30c(%rbp), %esi
callq 0xaaa20
movq %rax, -0xab0(%rbp)
jmp 0x1206b4
movq -0xab0(%rbp), %rdi
leaq 0x1da42(%rip), %rsi     # 0x13e104
callq 0xaa540
movq %rax, -0xab8(%rbp)
jmp 0x1206d0
movq -0x18(%rbp), %rdi
movslq -0x30c(%rbp), %rsi
callq 0x129df0
movq -0xab8(%rbp), %rdi
movl 0x18(%rax), %esi
callq 0xaaa20
movq %rax, -0xac0(%rbp)
jmp 0x1206f8
movq -0xac0(%rbp), %rdi
leaq 0x1972f(%rip), %rsi     # 0x139e35
callq 0xaa540
jmp 0x12070d
jmp 0x12070f
movl -0x30c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30c(%rbp)
jmp 0x120653
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12240f
leaq 0x1af3e(%rip), %rsi     # 0x13b67f
leaq -0x308(%rbp), %rdi
callq 0xaa540
movq %rax, -0xac8(%rbp)
jmp 0x120756
movq -0xac8(%rbp), %rdi
leaq 0x1dcf1(%rip), %rsi     # 0x13e455
callq 0xaa540
movq %rax, -0xad0(%rbp)
jmp 0x120772
movq -0xad0(%rbp), %rdi
leaq 0x19696(%rip), %rsi     # 0x139e16
callq 0xaa540
movq %rax, -0xad8(%rbp)
jmp 0x12078e
movq -0xad8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xae0(%rbp)
jmp 0x1207a7
movq -0xae0(%rbp), %rdi
leaq 0x1bb84(%rip), %rsi     # 0x13c339
callq 0xaa540
movq %rax, -0xae8(%rbp)
jmp 0x1207c3
movq -0xae8(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xaf0(%rbp)
jmp 0x1207dc
movq -0xaf0(%rbp), %rdi
leaq 0x1acb2(%rip), %rsi     # 0x13b49c
callq 0xaa540
jmp 0x1207f1
movl $0x58, %edi
callq 0xaa560
movq %rax, -0xaf8(%rbp)
jmp 0x120804
movb $0x1, -0x31b(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xb00(%rbp)
jmp 0x12081e
movq -0xb00(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0xaa580
jmp 0x120833
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xb08(%rbp)
jmp 0x120846
movb $0x1, -0x31a(%rbp)
leaq -0x319(%rbp), %rdi
movq %rdi, -0xb10(%rbp)
callq 0xaaa70
movq -0xb08(%rbp), %rdi
movq -0xb10(%rbp), %rdx
leaq 0x1d893(%rip), %rsi     # 0x13e108
callq 0xaa7d0
jmp 0x12087c
movb $0x0, -0x31a(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xb18(%rbp)
jmp 0x120896
movq -0xb18(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xaa290
jmp 0x1208a8
movq -0xb18(%rbp), %rcx
movq -0xb08(%rbp), %rdx
movq -0xb00(%rbp), %rsi
movq -0xaf8(%rbp), %rdi
callq 0xcaee0
jmp 0x1208cb
movb $0x0, -0x31b(%rbp)
leaq -0x319(%rbp), %rdi
callq 0xaa5f0
movq -0xaf8(%rbp), %rax
movq %rax, -0x318(%rbp)
movq -0x10(%rbp), %rdi
movq -0x318(%rbp), %rax
movq %rax, -0x328(%rbp)
leaq -0x328(%rbp), %rsi
callq 0xb2540
jmp 0x12090c
movl $0x0, -0x32c(%rbp)
movslq -0x32c(%rbp), %rax
movq %rax, -0xb20(%rbp)
movq -0x18(%rbp), %rdi
callq 0xd1800
movq %rax, %rcx
movq -0xb20(%rbp), %rax
cmpq %rcx, %rax
jae 0x1223b8
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xb28(%rbp)
jmp 0x120953
movb $0x1, -0x35a(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xb30(%rbp)
jmp 0x12096d
movb $0x1, -0x359(%rbp)
movl -0x32c(%rbp), %esi
leaq -0x358(%rbp), %rdi
callq 0xc0780
jmp 0x120988
movq -0xb30(%rbp), %rdi
leaq -0x80(%rbp), %rsi
leaq -0x358(%rbp), %rdx
callq 0x129e10
jmp 0x1209a1
movq -0xb30(%rbp), %rsi
movq -0xb28(%rbp), %rdi
movb $0x0, -0x359(%rbp)
callq 0xb26f0
jmp 0x1209bd
movb $0x0, -0x35a(%rbp)
leaq -0x358(%rbp), %rdi
callq 0xaabe8
movq -0xb28(%rbp), %rax
movq %rax, -0x338(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xb38(%rbp)
jmp 0x1209f1
movq -0xb38(%rbp), %rdi
callq 0xbcc00
jmp 0x1209ff
movq -0xb38(%rbp), %rax
movq %rax, -0x368(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xb40(%rbp)
jmp 0x120a20
movq -0xb40(%rbp), %rdi
callq 0xbd000
jmp 0x120a2e
movq -0xb40(%rbp), %rax
movq %rax, -0x370(%rbp)
movq -0x370(%rbp), %rax
movq %rax, -0xb50(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xb48(%rbp)
jmp 0x120a5d
movb $0x1, -0x393(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xb58(%rbp)
jmp 0x120a77
movb $0x1, -0x392(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xb60(%rbp)
jmp 0x120a91
movb $0x1, -0x391(%rbp)
movl -0x32c(%rbp), %esi
leaq -0x390(%rbp), %rdi
callq 0xc0780
jmp 0x120aac
movq -0xb60(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
leaq -0x390(%rbp), %rdx
callq 0x129e10
jmp 0x120ac8
movq -0xb60(%rbp), %rsi
movq -0xb58(%rbp), %rdi
movb $0x0, -0x391(%rbp)
callq 0xb26f0
jmp 0x120ae4
movq -0xb58(%rbp), %rsi
movq -0xb48(%rbp), %rdi
movb $0x0, -0x392(%rbp)
callq 0xbcdf0
jmp 0x120b00
movq -0xb48(%rbp), %rsi
movq -0xb50(%rbp), %rdi
movb $0x0, -0x393(%rbp)
callq 0xb25b0
jmp 0x120b1c
leaq -0x390(%rbp), %rdi
callq 0xaabe8
movl $0x98, %edi
callq 0xaa560
movq %rax, -0xb68(%rbp)
jmp 0x120b3b
movb $0x1, -0x442(%rbp)
movq -0x338(%rbp), %rax
movq %rax, -0xb80(%rbp)
movq -0x368(%rbp), %rax
movq %rax, -0xb78(%rbp)
movq -0x370(%rbp), %rax
movq %rax, -0xb70(%rbp)
leaq 0x1d849(%rip), %rsi     # 0x13e3bc
leaq -0x400(%rbp), %rdi
leaq -0xa0(%rbp), %rdx
callq 0xe3710
jmp 0x120b88
movl -0x32c(%rbp), %esi
leaq -0x420(%rbp), %rdi
callq 0xc0780
jmp 0x120b9c
leaq -0x3e0(%rbp), %rdi
leaq -0x400(%rbp), %rsi
leaq -0x420(%rbp), %rdx
callq 0xb2200
jmp 0x120bb8
leaq 0x1d811(%rip), %rdx     # 0x13e3d0
leaq -0x3c0(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0xccc30
jmp 0x120bd4
leaq -0x441(%rbp), %rdi
movq %rdi, -0xb88(%rbp)
callq 0xaaa70
movq -0xb88(%rbp), %rdx
leaq 0x1afae(%rip), %rsi     # 0x13bba3
leaq -0x440(%rbp), %rdi
callq 0xaa7d0
jmp 0x120c03
movq -0xb70(%rbp), %rcx
movq -0xb78(%rbp), %rdx
movq -0xb80(%rbp), %rsi
movq -0xb68(%rbp), %rdi
leaq -0x3c0(%rbp), %r8
leaq -0x440(%rbp), %r9
callq 0xbd1f0
jmp 0x120c34
movb $0x0, -0x442(%rbp)
leaq -0x440(%rbp), %rdi
callq 0xaabe8
leaq -0x441(%rbp), %rdi
callq 0xaa5f0
leaq -0x3c0(%rbp), %rdi
callq 0xaabe8
leaq -0x3e0(%rbp), %rdi
callq 0xaabe8
leaq -0x420(%rbp), %rdi
callq 0xaabe8
leaq -0x400(%rbp), %rdi
callq 0xaabe8
movq -0xb68(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movq -0x10(%rbp), %rdi
movq -0x3a0(%rbp), %rax
movq %rax, -0x450(%rbp)
leaq -0x450(%rbp), %rsi
callq 0xb2540
jmp 0x120cb1
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xb90(%rbp)
jmp 0x120cc4
movb $0x1, -0x47a(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xb98(%rbp)
jmp 0x120cde
movb $0x1, -0x479(%rbp)
movl -0x32c(%rbp), %esi
leaq -0x478(%rbp), %rdi
callq 0xc0780
jmp 0x120cf9
movq -0xb98(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
leaq -0x478(%rbp), %rdx
callq 0x129e10
jmp 0x120d15
movq -0xb98(%rbp), %rsi
movq -0xb90(%rbp), %rdi
movb $0x0, -0x479(%rbp)
callq 0xb26f0
jmp 0x120d31
movb $0x0, -0x47a(%rbp)
leaq -0x478(%rbp), %rdi
callq 0xaabe8
movq -0xb90(%rbp), %rax
movq %rax, -0x458(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xba0(%rbp)
jmp 0x120d65
movq -0xba0(%rbp), %rdi
callq 0xbee50
jmp 0x120d73
movq -0xba0(%rbp), %rax
movq %rax, -0x488(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xba8(%rbp)
jmp 0x120d94
movq -0xba8(%rbp), %rdi
callq 0xbf730
jmp 0x120da2
movq -0xba8(%rbp), %rax
movq %rax, -0x490(%rbp)
movl $0x0, -0x494(%rbp)
leaq -0x610(%rbp), %rdi
callq 0xaa7b0
jmp 0x120dc8
leaq 0x1d60d(%rip), %rsi     # 0x13e3dc
leaq -0x610(%rbp), %rdi
callq 0xaa540
movq %rax, -0xbb0(%rbp)
jmp 0x120de4
movq -0xbb0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xbb8(%rbp)
jmp 0x120e00
movq -0xbb8(%rbp), %rdi
movl -0x32c(%rbp), %esi
callq 0xaaa20
movq %rax, -0xbc0(%rbp)
jmp 0x120e1b
movq -0xbc0(%rbp), %rdi
leaq 0x1d16f(%rip), %rsi     # 0x13df98
callq 0xaa540
jmp 0x120e30
movl $0x0, -0x614(%rbp)
movslq -0x614(%rbp), %rax
movq %rax, -0xbc8(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x32c(%rbp), %rsi
callq 0x129df0
movq %rax, %rdi
callq 0xd1dd0
movq %rax, %rcx
movq -0xbc8(%rbp), %rax
cmpq %rcx, %rax
jae 0x12148f
movq -0x18(%rbp), %rdi
movslq -0x32c(%rbp), %rsi
callq 0x129df0
movq %rax, %rdi
movslq -0x614(%rbp), %rsi
callq 0x129e60
movq (%rax), %rax
movq 0x40(%rax), %rax
movq %rax, -0x620(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x32c(%rbp), %rsi
callq 0x129df0
movq %rax, %rdi
movslq -0x614(%rbp), %rsi
callq 0x129e60
movl 0x8(%rax), %eax
movl %eax, -0x624(%rbp)
movl -0x624(%rbp), %ecx
movl -0x494(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x494(%rbp)
movq -0x620(%rbp), %rdi
leaq 0x1b312(%rip), %rsi     # 0x13c1fc
callq 0x12c730
movb %al, -0xbc9(%rbp)
jmp 0x120ef7
movb -0xbc9(%rbp), %al
testb $0x1, %al
jne 0x120f06
jmp 0x12134b
movq -0x620(%rbp), %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x648(%rbp), %rdi
callq *%rax
jmp 0x120f1e
leaq -0x610(%rbp), %rdi
leaq -0x648(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xbd8(%rbp)
jmp 0x120f3a
movq -0xbd8(%rbp), %rdi
leaq 0x18eed(%rip), %rsi     # 0x139e35
callq 0xaa540
jmp 0x120f4f
leaq -0x648(%rbp), %rdi
callq 0xaabe8
jmp 0x121479
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x120feb
movq -0xb00(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x120feb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x120fc6
movq -0xb18(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
leaq -0x319(%rbp), %rdi
callq 0xaa5f0
testb $0x1, -0x31a(%rbp)
jne 0x120fdd
jmp 0x120fe9
movq -0xb08(%rbp), %rdi
callq 0xaa4e0
jmp 0x120feb
testb $0x1, -0x31b(%rbp)
jne 0x120ff6
jmp 0x121002
movq -0xaf8(%rbp), %rdi
callq 0xaa4e0
jmp 0x12240f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121066
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12104d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x358(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0x359(%rbp)
jne 0x121058
jmp 0x121064
movq -0xb30(%rbp), %rdi
callq 0xaa4e0
jmp 0x121066
testb $0x1, -0x35a(%rbp)
jne 0x121071
jmp 0x12107d
movq -0xb28(%rbp), %rdi
callq 0xaa4e0
jmp 0x12240f
movq -0xb38(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x12240f
movq -0xb40(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x12240f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121154
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12113b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121122
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x390(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0x391(%rbp)
jne 0x12112d
jmp 0x121139
movq -0xb60(%rbp), %rdi
callq 0xaa4e0
jmp 0x12113b
testb $0x1, -0x392(%rbp)
jne 0x121146
jmp 0x121152
movq -0xb58(%rbp), %rdi
callq 0xaa4e0
jmp 0x121154
testb $0x1, -0x393(%rbp)
jne 0x12115f
jmp 0x12116b
movq -0xb48(%rbp), %rdi
callq 0xaa4e0
jmp 0x12240f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121234
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121228
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12121c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121210
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1211f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x440(%rbp), %rdi
callq 0xaabe8
leaq -0x441(%rbp), %rdi
callq 0xaa5f0
leaq -0x3c0(%rbp), %rdi
callq 0xaabe8
leaq -0x3e0(%rbp), %rdi
callq 0xaabe8
leaq -0x420(%rbp), %rdi
callq 0xaabe8
leaq -0x400(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0x442(%rbp)
jne 0x12123f
jmp 0x12124b
movq -0xb68(%rbp), %rdi
callq 0xaa4e0
jmp 0x12240f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1212af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121296
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x478(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0x479(%rbp)
jne 0x1212a1
jmp 0x1212ad
movq -0xb98(%rbp), %rdi
callq 0xaa4e0
jmp 0x1212af
testb $0x1, -0x47a(%rbp)
jne 0x1212ba
jmp 0x1212c6
movq -0xb90(%rbp), %rdi
callq 0xaa4e0
jmp 0x12240f
movq -0xba0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x12240f
movq -0xba8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x12240f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1223aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x648(%rbp), %rdi
callq 0xaabe8
jmp 0x1223aa
movq -0x620(%rbp), %rdi
leaq 0x18ac7(%rip), %rsi     # 0x139e20
callq 0x12c730
movb %al, -0xbd9(%rbp)
jmp 0x121366
movb -0xbd9(%rbp), %al
testb $0x1, %al
jne 0x121375
jmp 0x121458
movq -0x620(%rbp), %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x668(%rbp), %rdi
callq *%rax
jmp 0x12138d
leaq -0x610(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xbe8(%rbp)
jmp 0x1213a9
movq -0xbe8(%rbp), %rdi
leaq 0x18a7e(%rip), %rsi     # 0x139e35
callq 0xaa540
jmp 0x1213be
leaq -0x668(%rbp), %rdi
callq 0xaabe8
movq -0x620(%rbp), %rax
movq %rax, -0xbf0(%rbp)
cmpq $0x0, %rax
je 0x121428
movq -0xbf0(%rbp), %rdi
leaq 0x511f4(%rip), %rsi     # 0x1725e0
leaq 0x52035(%rip), %rdx     # 0x173428
xorl %eax, %eax
movl %eax, %ecx
callq 0xaa660
movq %rax, -0xbf8(%rbp)
jmp 0x121433
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x668(%rbp), %rdi
callq 0xaabe8
jmp 0x1223aa
xorl %eax, %eax
movq %rax, -0xbf8(%rbp)
jmp 0x121433
movq -0xa40(%rbp), %rdi
movq -0xbf8(%rbp), %rax
movq %rax, -0x670(%rbp)
leaq -0x670(%rbp), %rsi
callq 0x129e80
jmp 0x121456
jmp 0x121477
leaq 0x188e5(%rip), %rdi     # 0x139d44
leaq 0x1c8f1(%rip), %rsi     # 0x13dd57
movl $0x3fa, %edx            # imm = 0x3FA
leaq 0x1cf76(%rip), %rcx     # 0x13e3e8
callq 0xaa3d0
jmp 0x121479
jmp 0x12147b
movl -0x614(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x614(%rbp)
jmp 0x120e3a
leaq 0x1cfbe(%rip), %rsi     # 0x13e454
leaq -0x610(%rbp), %rdi
callq 0xaa540
jmp 0x1214a4
movq -0x10(%rbp), %rax
movq %rax, -0xc08(%rbp)
movl $0x58, %edi
callq 0xaa560
movq %rax, -0xc00(%rbp)
jmp 0x1214c2
movb $0x1, -0x6a2(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xc10(%rbp)
jmp 0x1214dc
movq -0xc10(%rbp), %rdi
leaq -0x610(%rbp), %rsi
callq 0xaa580
jmp 0x1214f1
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xc18(%rbp)
jmp 0x121504
movb $0x1, -0x67a(%rbp)
leaq -0x679(%rbp), %rdi
movq %rdi, -0xc20(%rbp)
callq 0xaaa70
movq -0xc18(%rbp), %rdi
movq -0xc20(%rbp), %rdx
leaq 0x1cf26(%rip), %rsi     # 0x13e459
callq 0xaa7d0
jmp 0x12153a
movb $0x0, -0x67a(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xc28(%rbp)
jmp 0x121554
movb $0x1, -0x6a1(%rbp)
movl -0x32c(%rbp), %esi
leaq -0x6a0(%rbp), %rdi
callq 0xc0780
jmp 0x12156f
movq -0xc28(%rbp), %rdi
leaq 0x1cedc(%rip), %rsi     # 0x13e459
leaq -0x6a0(%rbp), %rdx
callq 0xccc80
jmp 0x12158b
movq -0xc28(%rbp), %rcx
movq -0xc18(%rbp), %rdx
movq -0xc10(%rbp), %rsi
movq -0xc00(%rbp), %rdi
movb $0x0, -0x6a1(%rbp)
callq 0xcaee0
jmp 0x1215b5
movq -0xc08(%rbp), %rdi
movq -0xc00(%rbp), %rax
movb $0x0, -0x6a2(%rbp)
movq %rax, -0x678(%rbp)
leaq -0x678(%rbp), %rsi
callq 0xb2540
jmp 0x1215df
leaq -0x6a0(%rbp), %rdi
callq 0xaabe8
leaq -0x679(%rbp), %rdi
callq 0xaa5f0
leaq -0x820(%rbp), %rdi
callq 0xaa7b0
jmp 0x121605
leaq 0x1ce58(%rip), %rsi     # 0x13e464
leaq -0x820(%rbp), %rdi
callq 0xaa540
movq %rax, -0xc30(%rbp)
jmp 0x121621
movq -0xc30(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xc38(%rbp)
jmp 0x12163d
movq -0xc38(%rbp), %rdi
movl -0x32c(%rbp), %esi
callq 0xaaa20
movq %rax, -0xc40(%rbp)
jmp 0x121658
movq -0xc40(%rbp), %rdi
leaq 0x1c931(%rip), %rsi     # 0x13df97
callq 0xaa540
movq %rax, -0xc48(%rbp)
jmp 0x121674
movq -0xc48(%rbp), %rdi
leaq 0x1cdfa(%rip), %rsi     # 0x13e47c
callq 0xaa540
movq %rax, -0xc50(%rbp)
jmp 0x121690
movq -0xc50(%rbp), %rdi
leaq 0x18720(%rip), %rsi     # 0x139dbe
callq 0xaa540
movq %rax, -0xc58(%rbp)
jmp 0x1216ac
movq -0xc58(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0xc60(%rbp)
jmp 0x1216c8
movq -0xc60(%rbp), %rdi
movl -0x32c(%rbp), %esi
callq 0xaaa20
movq %rax, -0xc68(%rbp)
jmp 0x1216e3
movq -0xc68(%rbp), %rdi
leaq 0x18744(%rip), %rsi     # 0x139e35
callq 0xaa540
movq %rax, -0xc70(%rbp)
jmp 0x1216ff
movq -0xc70(%rbp), %rdi
leaq 0x19f71(%rip), %rsi     # 0x13b67e
callq 0xaa540
movq %rax, -0xc78(%rbp)
jmp 0x12171b
movq -0xc78(%rbp), %rdi
leaq 0x1cd5e(%rip), %rsi     # 0x13e487
callq 0xaa540
movq %rax, -0xc80(%rbp)
jmp 0x121737
movq -0xc80(%rbp), %rdi
leaq 0x1cd5b(%rip), %rsi     # 0x13e4a0
callq 0xaa540
movq %rax, -0xc88(%rbp)
jmp 0x121753
movq -0xc88(%rbp), %rdi
movl -0x494(%rbp), %esi
callq 0xaaa20
movq %rax, -0xc90(%rbp)
jmp 0x12176e
movq -0xc90(%rbp), %rdi
leaq 0x186b9(%rip), %rsi     # 0x139e35
callq 0xaa540
movq %rax, -0xc98(%rbp)
jmp 0x12178a
movq -0xc98(%rbp), %rdi
leaq 0x1ccbd(%rip), %rsi     # 0x13e455
callq 0xaa540
jmp 0x12179f
movq -0x10(%rbp), %rax
movq %rax, -0xca8(%rbp)
movl $0x58, %edi
callq 0xaa560
movq %rax, -0xca0(%rbp)
jmp 0x1217bd
movb $0x1, -0x852(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xcb0(%rbp)
jmp 0x1217d7
movq -0xcb0(%rbp), %rdi
leaq -0x820(%rbp), %rsi
callq 0xaa580
jmp 0x1217ec
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xcb8(%rbp)
jmp 0x1217ff
movb $0x1, -0x82a(%rbp)
leaq -0x829(%rbp), %rdi
movq %rdi, -0xcc0(%rbp)
callq 0xaaa70
movq -0xcb8(%rbp), %rdi
movq -0xcc0(%rbp), %rdx
leaq 0x1cc84(%rip), %rsi     # 0x13e4b2
callq 0xaa7d0
jmp 0x121835
movb $0x0, -0x82a(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xcc8(%rbp)
jmp 0x12184f
movb $0x1, -0x851(%rbp)
movl -0x32c(%rbp), %esi
leaq -0x850(%rbp), %rdi
callq 0xc0780
jmp 0x12186a
movq -0xcc8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
leaq -0x850(%rbp), %rdx
callq 0x129e10
jmp 0x121886
movq -0xcc8(%rbp), %rcx
movq -0xcb8(%rbp), %rdx
movq -0xcb0(%rbp), %rsi
movq -0xca0(%rbp), %rdi
movb $0x0, -0x851(%rbp)
callq 0xcaee0
jmp 0x1218b0
movq -0xca8(%rbp), %rdi
movq -0xca0(%rbp), %rax
movb $0x0, -0x852(%rbp)
movq %rax, -0x828(%rbp)
leaq -0x828(%rbp), %rsi
callq 0xb2540
jmp 0x1218da
leaq -0x850(%rbp), %rdi
callq 0xaabe8
leaq -0x829(%rbp), %rdi
callq 0xaa5f0
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xcd0(%rbp)
jmp 0x121905
movb $0x1, -0x863(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xcd8(%rbp)
jmp 0x12191f
movb $0x1, -0x862(%rbp)
leaq -0x861(%rbp), %rdi
movq %rdi, -0xce0(%rbp)
callq 0xaaa70
movq -0xcd8(%rbp), %rdi
movq -0xce0(%rbp), %rdx
leaq 0x1cb74(%rip), %rsi     # 0x13e4c2
callq 0xaa7d0
jmp 0x121955
movq -0xcd8(%rbp), %rsi
movq -0xcd0(%rbp), %rdi
movb $0x0, -0x862(%rbp)
callq 0xb26f0
jmp 0x121971
movb $0x0, -0x863(%rbp)
leaq -0x861(%rbp), %rdi
callq 0xaa5f0
movq -0xcd0(%rbp), %rax
movq %rax, -0x860(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xce8(%rbp)
jmp 0x1219a5
movq -0xce8(%rbp), %rdi
callq 0xbe9b0
jmp 0x1219b3
movq -0xce8(%rbp), %rax
movq %rax, -0x870(%rbp)
leaq -0x9e8(%rbp), %rdi
callq 0xaa7b0
jmp 0x1219cf
leaq 0x1c9e2(%rip), %rsi     # 0x13e3b8
leaq -0x9e8(%rbp), %rdi
callq 0xaa540
movq %rax, -0xcf0(%rbp)
jmp 0x1219eb
movq -0xcf0(%rbp), %rdi
movl -0x32c(%rbp), %esi
callq 0xaaa20
jmp 0x1219ff
movl $0x50, %edi
callq 0xaa560
movq %rax, -0xcf8(%rbp)
jmp 0x121a12
movl $0x50, %edi
callq 0xaa560
movq %rax, -0xd00(%rbp)
jmp 0x121a25
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xd08(%rbp)
jmp 0x121a38
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xd10(%rbp)
jmp 0x121a4b
movq -0xd10(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xaa290
jmp 0x121a5d
movq -0xd10(%rbp), %rsi
movq -0xd08(%rbp), %rdi
callq 0xb26f0
jmp 0x121a72
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xd18(%rbp)
jmp 0x121a85
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xd20(%rbp)
jmp 0x121a98
movq -0xd20(%rbp), %rdi
leaq -0x9e8(%rbp), %rsi
callq 0xaa580
jmp 0x121aad
movq -0xd20(%rbp), %rsi
movq -0xd18(%rbp), %rdi
callq 0xb26f0
jmp 0x121ac2
movq -0xd18(%rbp), %rdx
movq -0xd08(%rbp), %rsi
movq -0xd00(%rbp), %rdi
callq 0xc89b0
jmp 0x121ade
movq -0xd00(%rbp), %rdx
movq -0xcf8(%rbp), %rdi
movl $0x2, %esi
callq 0xba4d0
jmp 0x121af8
movq -0xcf8(%rbp), %rax
movq %rax, -0x9f0(%rbp)
movq -0x870(%rbp), %rdi
movq -0x9f0(%rbp), %rsi
callq 0xb26b0
jmp 0x121b1b
movq -0x870(%rbp), %rax
movq %rax, -0xd30(%rbp)
movl $0x50, %edi
callq 0xaa560
movq %rax, -0xd28(%rbp)
jmp 0x121b3c
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xd38(%rbp)
jmp 0x121b4f
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xd40(%rbp)
jmp 0x121b62
movq -0xd40(%rbp), %rdi
xorl %esi, %esi
callq 0xc0780
jmp 0x121b72
movq -0xd40(%rbp), %rsi
movq -0xd38(%rbp), %rdi
callq 0xb29b0
jmp 0x121b87
movq -0xd38(%rbp), %rdx
movq -0xd28(%rbp), %rdi
movl $0x4, %esi
callq 0xba4d0
jmp 0x121ba1
movq -0xd28(%rbp), %rsi
movq -0xd30(%rbp), %rdi
callq 0xb26b0
jmp 0x121bb6
movq -0x870(%rbp), %rax
movq %rax, -0xd50(%rbp)
movl $0x50, %edi
callq 0xaa560
movq %rax, -0xd48(%rbp)
jmp 0x121bd7
movb $0x1, -0xa13(%rbp)
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xd58(%rbp)
jmp 0x121bf1
movb $0x1, -0xa12(%rbp)
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xd60(%rbp)
jmp 0x121c0b
movb $0x1, -0xa11(%rbp)
movl -0x32c(%rbp), %esi
leaq -0xa10(%rbp), %rdi
callq 0xc0780
jmp 0x121c26
movq -0xd60(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
leaq -0xa10(%rbp), %rdx
callq 0x129e10
jmp 0x121c42
movq -0xd60(%rbp), %rsi
movq -0xd58(%rbp), %rdi
movb $0x0, -0xa11(%rbp)
callq 0xb2890
jmp 0x121c5e
movq -0xd58(%rbp), %rdx
movq -0xd48(%rbp), %rdi
movb $0x0, -0xa12(%rbp)
movl $0x3, %esi
callq 0xba4d0
jmp 0x121c7f
movq -0xd48(%rbp), %rsi
movq -0xd50(%rbp), %rdi
movb $0x0, -0xa13(%rbp)
callq 0xb26b0
jmp 0x121c9b
leaq -0xa10(%rbp), %rdi
callq 0xaabe8
movq -0x870(%rbp), %rax
movq %rax, -0xd70(%rbp)
movl $0x50, %edi
callq 0xaa560
movq %rax, -0xd68(%rbp)
jmp 0x121cc8
movl $0x48, %edi
callq 0xaa560
movq %rax, -0xd78(%rbp)
jmp 0x121cdb
movl $0x20, %edi
callq 0xaa560
movq %rax, -0xd80(%rbp)
jmp 0x121cee
movl -0x494(%rbp), %esi
movl $0x2, %edi
callq 0x129fe0
movsd %xmm0, -0xd88(%rbp)
jmp 0x121d08
movq -0xd80(%rbp), %rdi
movsd -0xd88(%rbp), %xmm0
cvttsd2si %xmm0, %rsi
callq 0x129eb0
jmp 0x121d23
movq -0xd80(%rbp), %rsi
movq -0xd78(%rbp), %rdi
callq 0xb29b0
jmp 0x121d38
movq -0xd78(%rbp), %rdx
movq -0xd68(%rbp), %rdi
movl $0x4, %esi
callq 0xba4d0
jmp 0x121d52
movq -0xd68(%rbp), %rsi
movq -0xd70(%rbp), %rdi
callq 0xb26b0
jmp 0x121d67
movq -0x490(%rbp), %rax
movq %rax, -0xd98(%rbp)
movl $0x60, %edi
callq 0xaa560
movq %rax, -0xd90(%rbp)
jmp 0x121d88
movq -0xd90(%rbp), %rdi
movq -0x860(%rbp), %rsi
movq -0x870(%rbp), %rdx
xorl %ecx, %ecx
movl %ecx, %r9d
movq %r9, %r8
callq 0xbf140
jmp 0x121dac
movq -0xd90(%rbp), %rsi
movq -0xd98(%rbp), %rdi
callq 0xb2670
jmp 0x121dc1
movl $0x58, %edi
callq 0xaa560
movq %rax, -0xda0(%rbp)
jmp 0x121dd4
movq -0xda0(%rbp), %rdi
movq -0x458(%rbp), %rsi
movq -0x488(%rbp), %rdx
movq -0x490(%rbp), %rcx
callq 0xbf9f0
jmp 0x121df7
movq -0xda0(%rbp), %rax
movq %rax, -0xa20(%rbp)
movl $0x50, %edi
callq 0xaa560
movq %rax, -0xda8(%rbp)
jmp 0x121e18
movq -0xda8(%rbp), %rdi
movq -0xa20(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0xb2350
jmp 0x121e31
movq -0xda8(%rbp), %rax
movq %rax, -0xa28(%rbp)
movq -0x10(%rbp), %rdi
movq -0xa28(%rbp), %rax
movq %rax, -0xa30(%rbp)
leaq -0xa30(%rbp), %rsi
callq 0xb2540
jmp 0x121e5f
leaq -0x9e8(%rbp), %rdi
callq 0xaa130
leaq -0x820(%rbp), %rdi
callq 0xaa130
leaq -0x610(%rbp), %rdi
callq 0xaa130
movl -0x32c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x32c(%rbp)
jmp 0x120916
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121f55
movq -0xc10(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x121f55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121f30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x121f17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x6a0(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0x6a1(%rbp)
jne 0x121f22
jmp 0x121f2e
movq -0xc28(%rbp), %rdi
callq 0xaa4e0
jmp 0x121f30
leaq -0x679(%rbp), %rdi
callq 0xaa5f0
testb $0x1, -0x67a(%rbp)
jne 0x121f47
jmp 0x121f53
movq -0xc18(%rbp), %rdi
callq 0xaa4e0
jmp 0x121f55
testb $0x1, -0x6a2(%rbp)
jne 0x121f60
jmp 0x121f6c
movq -0xc00(%rbp), %rdi
callq 0xaa4e0
jmp 0x1223aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12239e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x122046
movq -0xcb0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x122046
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x122021
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x122008
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x850(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0x851(%rbp)
jne 0x122013
jmp 0x12201f
movq -0xcc8(%rbp), %rdi
callq 0xaa4e0
jmp 0x122021
leaq -0x829(%rbp), %rdi
callq 0xaa5f0
testb $0x1, -0x82a(%rbp)
jne 0x122038
jmp 0x122044
movq -0xcb8(%rbp), %rdi
callq 0xaa4e0
jmp 0x122046
testb $0x1, -0x852(%rbp)
jne 0x122051
jmp 0x12205d
movq -0xca0(%rbp), %rdi
callq 0xaa4e0
jmp 0x12239e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1220ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x861(%rbp), %rdi
callq 0xaa5f0
testb $0x1, -0x862(%rbp)
jne 0x12209f
jmp 0x1220ab
movq -0xcd8(%rbp), %rdi
callq 0xaa4e0
jmp 0x1220ad
testb $0x1, -0x863(%rbp)
jne 0x1220b8
jmp 0x1220c4
movq -0xcd0(%rbp), %rdi
callq 0xaa4e0
jmp 0x12239e
movq -0xce8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x12239e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x122392
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1221b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1221ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x122160
movq -0xd10(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
movq -0xd08(%rbp), %rdi
callq 0xaa4e0
jmp 0x1221ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1221a0
movq -0xd20(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
movq -0xd18(%rbp), %rdi
callq 0xaa4e0
movq -0xd00(%rbp), %rdi
callq 0xaa4e0
movq -0xcf8(%rbp), %rdi
callq 0xaa4e0
jmp 0x122392
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12221b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12220f
movq -0xd40(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
movq -0xd38(%rbp), %rdi
callq 0xaa4e0
movq -0xd28(%rbp), %rdi
callq 0xaa4e0
jmp 0x122392
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x1222b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12229f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x122286
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0xa10(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0xa11(%rbp)
jne 0x122291
jmp 0x12229d
movq -0xd60(%rbp), %rdi
callq 0xaa4e0
jmp 0x12229f
testb $0x1, -0xa12(%rbp)
jne 0x1222aa
jmp 0x1222b6
movq -0xd58(%rbp), %rdi
callq 0xaa4e0
jmp 0x1222b8
testb $0x1, -0xa13(%rbp)
jne 0x1222c3
jmp 0x1222cf
movq -0xd48(%rbp), %rdi
callq 0xaa4e0
jmp 0x122392
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x122326
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x12231a
movq -0xd80(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
movq -0xd78(%rbp), %rdi
callq 0xaa4e0
movq -0xd68(%rbp), %rdi
callq 0xaa4e0
jmp 0x122392
movq -0xd90(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x122392
movq -0xda0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
jmp 0x122392
movq -0xda8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
callq 0xaa4e0
leaq -0x9e8(%rbp), %rdi
callq 0xaa130
leaq -0x820(%rbp), %rdi
callq 0xaa130
leaq -0x610(%rbp), %rdi
callq 0xaa130
jmp 0x12240f
movb $0x1, -0x1a(%rbp)
leaq -0x308(%rbp), %rdi
callq 0xaa130
leaq -0xe0(%rbp), %rdi
callq 0xaabe8
leaq -0xc0(%rbp), %rdi
callq 0xaabe8
leaq -0xa0(%rbp), %rdi
callq 0xaabe8
leaq -0x80(%rbp), %rdi
callq 0xaabe8
leaq -0x60(%rbp), %rdi
callq 0xaabe8
leaq -0x40(%rbp), %rdi
callq 0xaabe8
testb $0x1, -0x1a(%rbp)
jne 0x122474
jmp 0x122468
leaq -0x308(%rbp), %rdi
callq 0xaa130
leaq -0xe0(%rbp), %rdi
callq 0xaabe8
leaq -0xc0(%rbp), %rdi
callq 0xaabe8
leaq -0xa0(%rbp), %rdi
callq 0xaabe8
leaq -0x80(%rbp), %rdi
callq 0xaabe8
leaq -0x60(%rbp), %rdi
callq 0xaabe8
leaq -0x40(%rbp), %rdi
callq 0xaabe8
movq -0xa40(%rbp), %rdi
callq 0xccb00
jmp 0x122484
movq -0xa40(%rbp), %rdi
callq 0xccb00
movq -0xa38(%rbp), %rax
addq $0xdb0, %rsp            # imm = 0xDB0
popq %rbp
retq
movq -0x110(%rbp), %rdi
callq 0xaaa60