// File: saumya-prakash[P]AssemblerEmulator/Assembler.cpp
// Function: Assembler::analyze(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
void Assembler::analyze(string& s)
{
    string::size_type ind = s.find(':');

    if(ind!=string::npos)       // : found -> label found
    {
        string tmp1(s.begin(), s.begin()+ind);      // label name
        string tmp2(s.begin()+ind+1, s.end());     // get after the label part

        struct label l(tmp1, -1);

        istringstream iss(tmp2);

        string t1;
        iss>>t1;

        if(t1=="SET")   // get the value/label specified with SET -> may need to process in pass-2
        {   
            int flag = 0;
            string less, more;

            if(l.name.empty())      // invalid label name -> no need to process SET
            {
                errors.insert({line_cnt, Error(1)});           // generate invalid_label error
                flag = 1;
            }
            
            iss>>less;
            if(less.empty())           // too few operands
            {
                errors.insert({line_cnt, Error(9)});
                return;     // nothing to be done now
            }

            t1 = less;

            if(valid_number(t1)==false)             // not a valid numer following SET
            {
                errors.insert({line_cnt, Error(8)});   // generate Number expected error
                flag = 1;
            }

            string num = t1;
            
            iss>>more;
            if(!more.empty())     // more operands found
            {    
                errors.insert({line_cnt, Error(6)});    // generate too many opearands error
                flag = 1;
            }

            if(flag==0)     // no error -> safe to process SET
            {
                int a = str_to_int(num);

                l.addr = a;
                l.line_no = line_cnt;

                insert_into_symtab(l);  // will take care of insertion, error-detection

                struct line aux(s, line_cnt, pc);
                aux.encoding = a;       // encoded form of opearnd of SET
                aux_lines.push_back(aux);
            }


            return;     // ANALYSIS COMPLETE HERE
        }

        else if(t1=="data")     // data directive -> process it
        {
            if(l.name.empty())      // invalid label name
                errors.insert({line_cnt, Error(1)});    // invalid label name error
            
            int flag = 0;
            string less, more;

            iss>>less;
            if(less.empty())       // too few operands
            {
                errors.insert({line_cnt, Error(9)});
                return;     // nothing to be done now
            }

            t1 = less;
            if(valid_number(t1)==false)
            {
                errors.insert({line_cnt, Error(8)});   // generate Number expected error
                flag = 1;
            }

            string num = t1;

            iss>>more;
            if(!more.empty())
            {
                errors.insert({line_cnt, Error(6)});    // generate too many opearands error
                flag = 1;
            }

            if(flag==0)
            {
                int value = str_to_int(num);

                data_to_reserve[data_addr] = value;
                l.addr = data_addr;
                l.line_no = line_cnt;

                insert_into_symtab(l);
                
                struct line aux(s, line_cnt, data_addr);
                aux.encoding = value;
                aux_lines.push_back(aux);

                data_addr++;     // incrementing by 1 as it is a word-addressable machine
            }

            return ;    // ANALYSIS COMPLETE HERE
        }

        else    // label followed by a statement -> modify line and leave it for pass-2
        {
            int flag = 0;

            if(l.name.empty())
            {
                errors.insert({line_cnt, Error(1)});    // invalid label name error
                flag = 1;
            }

            l.addr = pc;
            l.line_no = line_cnt;


            if(flag==0)
            { 
                insert_into_symtab(l);

                struct line aux(l.name+":", line_cnt, pc);
                aux_lines.push_back(aux);
            }


            if(!t1.empty())     // some mnemonic should be there after label -> otherwise no need to increment PC and insert line to linked list
            {
                struct line ll(tmp2, line_cnt, pc);
                pc++;
                lines.push_back(ll);
            }

       
            return;     // ANALYSIS COMPLETE HERE
        }
    }


    else        // not a labeled statement
    {
        istringstream iss(s);
        string t1;

        iss>>t1;

        if(t1=="SET")   // no label, so processing SET is not at all required
        {
            warnings.insert({line_cnt, Warning(2)});

            string less, more;
            int flag = 0;

            iss>>less;
            if(less.empty())
            {
                errors.insert({line_cnt, Error(9)});
                return;     // nothing to be done now
            }

            t1 = less;
            if(valid_number(t1)==false)
            {
                errors.insert({line_cnt, Error(8)});   // generate Number expected error
                flag = 1;
            }

            iss>>more;
            if(!more.empty())   // more operands than required
            {
                errors.insert({line_cnt, Error(6)});
                flag = 1;
            }

            if(flag==0)
            {
                int a = str_to_int(t1);

                struct line aux(s, line_cnt, pc);
                aux.encoding = a;
                aux_lines.push_back(aux);
            }

            return ;    // ANALYSIS DONE HERE
        }

        else if(t1=="data")
        {
            string less, more;
            int flag = 0;

            iss>>less;
            if(less.empty())
            {
                errors.insert({line_cnt, Error(9)});
                return;     // nothing to do now
            }

            t1 = less;
            if(valid_number(t1)==false)
            {
                errors.insert({line_cnt, Error(8)});   // generate Number expected error
                flag = 1;
            }

            iss>>more;
            if(!more.empty())       // too many operands
            {
                errors.insert({line_cnt, Error(6)});
                flag = 1;
            }

            if(flag==0)     // okay to reserve memory
            {
                int a = str_to_int(t1);

                data_to_reserve[data_addr] = a;
                struct line aux(s, line_cnt, data_addr);
                aux.encoding = a;
                aux_lines.push_back(aux);

                data_addr++;
            }

            return;     // ANALYSIS COMPLETE HERE
        }

        else        // some simple statement - mnemonic followed by operands (0 or more)
        {
            struct line ll(s, line_cnt, pc);
            pc++;

            lines.push_back(ll);

            return ;
        }
    }

    return ;
}

// Assembly:
subq $0xf18, %rsp            # imm = 0xF18
movq %rdi, 0xf10(%rsp)
movq %rsi, 0xf08(%rsp)
movq 0xf10(%rsp), %rax
movq %rax, 0x210(%rsp)
movq 0xf08(%rsp), %rdi
movl $0x3a, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x33b0
movq %rax, 0xf00(%rsp)
cmpq $-0x1, 0xf00(%rsp)
je 0x8592
movq 0xf08(%rsp), %rdi
callq 0x3220
movq %rax, 0xed8(%rsp)
movq 0xf08(%rsp), %rdi
callq 0x3220
movq %rax, 0xec8(%rsp)
movq 0xf00(%rsp), %rsi
leaq 0xec8(%rsp), %rdi
callq 0xc460
movq %rax, 0xed0(%rsp)
leaq 0xec7(%rsp), %rdi
movq %rdi, 0x208(%rsp)
callq 0x34a0
movq 0x208(%rsp), %rcx
movq 0xed8(%rsp), %rsi
movq 0xed0(%rsp), %rdx
leaq 0xee0(%rsp), %rdi
callq 0xc3d0
jmp 0x71f7
leaq 0xec7(%rsp), %rdi
callq 0x32f0
movq 0xf08(%rsp), %rdi
callq 0x3220
movq %rax, 0xe78(%rsp)
movq 0xf00(%rsp), %rsi
leaq 0xe78(%rsp), %rdi
callq 0xc460
movq %rax, 0xe80(%rsp)
leaq 0xe80(%rsp), %rdi
movl $0x1, %esi
callq 0xc460
movq %rax, 0xe88(%rsp)
movq 0xf08(%rsp), %rdi
callq 0x3150
movq %rax, 0xe70(%rsp)
leaq 0xe6f(%rsp), %rdi
movq %rdi, 0x200(%rsp)
callq 0x34a0
movq 0x200(%rsp), %rcx
movq 0xe88(%rsp), %rsi
movq 0xe70(%rsp), %rdx
leaq 0xe90(%rsp), %rdi
callq 0xc3d0
jmp 0x72a1
leaq 0xe6f(%rsp), %rdi
callq 0x32f0
leaq 0xe18(%rsp), %rdi
leaq 0xee0(%rsp), %rsi
callq 0x3110
jmp 0x72c5
leaq 0xe38(%rsp), %rdi
leaq 0xe18(%rsp), %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0xc4a0
jmp 0x72e1
leaq 0xe18(%rsp), %rdi
callq 0x3180
leaq 0xc98(%rsp), %rdi
leaq 0xe90(%rsp), %rsi
movl $0x8, %edx
callq 0x3480
jmp 0x730a
leaq 0xc78(%rsp), %rdi
movq %rdi, 0x1f8(%rsp)
callq 0x33e0
movq 0x1f8(%rsp), %rsi
leaq 0xc98(%rsp), %rdi
callq 0x33a0
jmp 0x7336
leaq 0xce8f(%rip), %rsi      # 0x141cc
leaq 0xc78(%rsp), %rdi
callq 0xc4f0
movb %al, 0x1f7(%rsp)
jmp 0x7353
movb 0x1f7(%rsp), %al
testb $0x1, %al
jne 0x7363
jmp 0x7ac5
movl $0x0, 0xc74(%rsp)
leaq 0xc50(%rsp), %rdi
callq 0x33e0
leaq 0xc30(%rsp), %rdi
callq 0x33e0
leaq 0xe38(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x739e
jmp 0x7571
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x1e0(%rsp)
addq $0x98, %rax
movq %rax, 0x1e8(%rsp)
leaq 0xbe8(%rsp), %rdi
movl $0x1, %esi
callq 0xc550
jmp 0x73da
movq 0x1e8(%rsp), %rsi
leaq 0xc08(%rsp), %rdi
leaq 0xbe8(%rsp), %rdx
callq 0xc590
jmp 0x73f9
movq 0x1e0(%rsp), %rdi
leaq 0xc08(%rsp), %rsi
callq 0xc520
movq %rax, 0x1d8(%rsp)
jmp 0x7418
movq 0x1d8(%rsp), %rax
movq %rax, 0xbe0(%rsp)
leaq 0xc08(%rsp), %rdi
callq 0x5cb0
leaq 0xbe8(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xc74(%rsp)
jmp 0x7571
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xec7(%rsp), %rdi
callq 0x32f0
jmp 0x9281
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xe6f(%rsp), %rdi
callq 0x32f0
jmp 0x8580
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8573
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xe18(%rsp), %rdi
callq 0x3180
jmp 0x8573
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8566
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x854c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7aa6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x755f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xc08(%rsp), %rdi
callq 0x5cb0
leaq 0xbe8(%rsp), %rdi
callq 0x5cd0
jmp 0x7aa6
leaq 0xc98(%rsp), %rdi
leaq 0xc50(%rsp), %rsi
callq 0x33a0
jmp 0x7588
leaq 0xc50(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x759e
jmp 0x769b
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x1c8(%rsp)
addq $0x98, %rax
movq %rax, 0x1d0(%rsp)
leaq 0xb98(%rsp), %rdi
movl $0x9, %esi
callq 0xc550
jmp 0x75da
movq 0x1d0(%rsp), %rsi
leaq 0xbb8(%rsp), %rdi
leaq 0xb98(%rsp), %rdx
callq 0xc590
jmp 0x75f9
movq 0x1c8(%rsp), %rdi
leaq 0xbb8(%rsp), %rsi
callq 0xc520
movq %rax, 0x1c0(%rsp)
jmp 0x7618
movq 0x1c0(%rsp), %rax
movq %rax, 0xb90(%rsp)
leaq 0xbb8(%rsp), %rdi
callq 0x5cb0
leaq 0xb98(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xb8c(%rsp)
jmp 0x7a87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7689
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xbb8(%rsp), %rdi
callq 0x5cb0
leaq 0xb98(%rsp), %rdi
callq 0x5cd0
jmp 0x7aa6
leaq 0xc78(%rsp), %rdi
leaq 0xc50(%rsp), %rsi
callq 0x3040
jmp 0x76b2
movq 0x210(%rsp), %rdi
leaq 0xc78(%rsp), %rsi
callq 0x6060
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x77cf
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x1b0(%rsp)
addq $0x98, %rax
movq %rax, 0x1b8(%rsp)
leaq 0xb40(%rsp), %rdi
movl $0x8, %esi
callq 0xc550
jmp 0x7711
movq 0x1b8(%rsp), %rsi
leaq 0xb60(%rsp), %rdi
leaq 0xb40(%rsp), %rdx
callq 0xc590
jmp 0x7730
movq 0x1b0(%rsp), %rdi
leaq 0xb60(%rsp), %rsi
callq 0xc520
movq %rax, 0x1a8(%rsp)
jmp 0x774f
movq 0x1a8(%rsp), %rax
movq %rax, 0xb38(%rsp)
leaq 0xb60(%rsp), %rdi
callq 0x5cb0
leaq 0xb40(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xc74(%rsp)
jmp 0x77cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x77bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xb60(%rsp), %rdi
callq 0x5cb0
leaq 0xb40(%rsp), %rdi
callq 0x5cd0
jmp 0x7aa6
leaq 0xb18(%rsp), %rdi
leaq 0xc78(%rsp), %rsi
callq 0x3110
jmp 0x77e6
leaq 0xc98(%rsp), %rdi
leaq 0xc30(%rsp), %rsi
callq 0x33a0
jmp 0x77fd
leaq 0xc30(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x7925
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x198(%rsp)
addq $0x98, %rax
movq %rax, 0x1a0(%rsp)
leaq 0xad0(%rsp), %rdi
movl $0x6, %esi
callq 0xc550
jmp 0x784e
movq 0x1a0(%rsp), %rsi
leaq 0xaf0(%rsp), %rdi
leaq 0xad0(%rsp), %rdx
callq 0xc590
jmp 0x786d
movq 0x198(%rsp), %rdi
leaq 0xaf0(%rsp), %rsi
callq 0xc520
movq %rax, 0x190(%rsp)
jmp 0x788c
movq 0x190(%rsp), %rax
movq %rax, 0xac8(%rsp)
leaq 0xaf0(%rsp), %rdi
callq 0x5cb0
leaq 0xad0(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xc74(%rsp)
jmp 0x7925
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7a78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7913
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xaf0(%rsp), %rdi
callq 0x5cb0
leaq 0xad0(%rsp), %rdi
callq 0x5cd0
jmp 0x7a78
cmpl $0x0, 0xc74(%rsp)
jne 0x7a5e
movq 0x210(%rsp), %rdi
leaq 0xb18(%rsp), %rsi
callq 0x62b0
movl %eax, 0x18c(%rsp)
jmp 0x7951
movq 0x210(%rsp), %rdi
movl 0x18c(%rsp), %eax
movl %eax, 0xac4(%rsp)
movl 0xac4(%rsp), %eax
movl %eax, 0xe58(%rsp)
movl 0x98(%rdi), %eax
movl %eax, 0xe60(%rsp)
leaq 0xe38(%rsp), %rsi
callq 0x9290
jmp 0x7991
movq 0xf08(%rsp), %rsi
leaq 0xa70(%rsp), %rdi
callq 0x3110
jmp 0x79a8
movq 0x210(%rsp), %rax
movl 0x90(%rax), %ecx
movl 0x98(%rax), %edx
leaq 0xa90(%rsp), %rdi
leaq 0xa70(%rsp), %rsi
callq 0xc5d0
jmp 0x79d3
leaq 0xa70(%rsp), %rdi
callq 0x3180
movq 0x210(%rsp), %rdi
movl 0xac4(%rsp), %eax
movl %eax, 0xab8(%rsp)
addq $0x78, %rdi
leaq 0xa90(%rsp), %rsi
callq 0xc620
jmp 0x7a09
leaq 0xa90(%rsp), %rdi
callq 0x5090
jmp 0x7a5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xa70(%rsp), %rdi
callq 0x3180
jmp 0x7a78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xa90(%rsp), %rdi
callq 0x5090
jmp 0x7a78
movl $0x1, 0xb8c(%rsp)
leaq 0xb18(%rsp), %rdi
callq 0x3180
jmp 0x7a87
leaq 0xb18(%rsp), %rdi
callq 0x3180
jmp 0x7aa6
leaq 0xc30(%rsp), %rdi
callq 0x3180
leaq 0xc50(%rsp), %rdi
callq 0x3180
jmp 0x8506
leaq 0xc30(%rsp), %rdi
callq 0x3180
leaq 0xc50(%rsp), %rdi
callq 0x3180
jmp 0x854c
leaq 0xc704(%rip), %rsi      # 0x141d0
leaq 0xc78(%rsp), %rdi
callq 0xc4f0
movb %al, 0x18b(%rsp)
jmp 0x7ae2
movb 0x18b(%rsp), %al
testb $0x1, %al
jne 0x7af2
jmp 0x81eb
leaq 0xe38(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x7b08
jmp 0x7bf7
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x178(%rsp)
addq $0x98, %rax
movq %rax, 0x180(%rsp)
leaq 0xa28(%rsp), %rdi
movl $0x1, %esi
callq 0xc550
jmp 0x7b44
movq 0x180(%rsp), %rsi
leaq 0xa48(%rsp), %rdi
leaq 0xa28(%rsp), %rdx
callq 0xc590
jmp 0x7b63
movq 0x178(%rsp), %rdi
leaq 0xa48(%rsp), %rsi
callq 0xc520
movq %rax, 0x170(%rsp)
jmp 0x7b82
movq 0x170(%rsp), %rax
movq %rax, 0xa20(%rsp)
leaq 0xa48(%rsp), %rdi
callq 0x5cb0
leaq 0xa28(%rsp), %rdi
callq 0x5cd0
jmp 0x7bf7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7be5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0xa48(%rsp), %rdi
callq 0x5cb0
leaq 0xa28(%rsp), %rdi
callq 0x5cd0
jmp 0x854c
movl $0x0, 0xa1c(%rsp)
leaq 0x9f8(%rsp), %rdi
movq %rdi, 0x168(%rsp)
callq 0x33e0
leaq 0x9d8(%rsp), %rdi
callq 0x33e0
movq 0x168(%rsp), %rsi
leaq 0xc98(%rsp), %rdi
callq 0x33a0
jmp 0x7c3b
leaq 0x9f8(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x7c51
jmp 0x7d67
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x158(%rsp)
addq $0x98, %rax
movq %rax, 0x160(%rsp)
leaq 0x990(%rsp), %rdi
movl $0x9, %esi
callq 0xc550
jmp 0x7c8d
movq 0x160(%rsp), %rsi
leaq 0x9b0(%rsp), %rdi
leaq 0x990(%rsp), %rdx
callq 0xc590
jmp 0x7cac
movq 0x158(%rsp), %rdi
leaq 0x9b0(%rsp), %rsi
callq 0xc520
movq %rax, 0x150(%rsp)
jmp 0x7ccb
movq 0x150(%rsp), %rax
movq %rax, 0x988(%rsp)
leaq 0x9b0(%rsp), %rdi
callq 0x5cb0
leaq 0x990(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xb8c(%rsp)
jmp 0x81ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x81cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7d55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x9b0(%rsp), %rdi
callq 0x5cb0
leaq 0x990(%rsp), %rdi
callq 0x5cd0
jmp 0x81cc
leaq 0xc78(%rsp), %rdi
leaq 0x9f8(%rsp), %rsi
callq 0x3040
jmp 0x7d7e
movq 0x210(%rsp), %rdi
leaq 0xc78(%rsp), %rsi
callq 0x6060
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x7e9b
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x140(%rsp)
addq $0x98, %rax
movq %rax, 0x148(%rsp)
leaq 0x940(%rsp), %rdi
movl $0x8, %esi
callq 0xc550
jmp 0x7ddd
movq 0x148(%rsp), %rsi
leaq 0x960(%rsp), %rdi
leaq 0x940(%rsp), %rdx
callq 0xc590
jmp 0x7dfc
movq 0x140(%rsp), %rdi
leaq 0x960(%rsp), %rsi
callq 0xc520
movq %rax, 0x138(%rsp)
jmp 0x7e1b
movq 0x138(%rsp), %rax
movq %rax, 0x938(%rsp)
leaq 0x960(%rsp), %rdi
callq 0x5cb0
leaq 0x940(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xa1c(%rsp)
jmp 0x7e9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7e89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x960(%rsp), %rdi
callq 0x5cb0
leaq 0x940(%rsp), %rdi
callq 0x5cd0
jmp 0x81cc
leaq 0x918(%rsp), %rdi
leaq 0xc78(%rsp), %rsi
callq 0x3110
jmp 0x7eb2
leaq 0xc98(%rsp), %rdi
leaq 0x9d8(%rsp), %rsi
callq 0x33a0
jmp 0x7ec9
leaq 0x9d8(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x7ff1
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x128(%rsp)
addq $0x98, %rax
movq %rax, 0x130(%rsp)
leaq 0x8d0(%rsp), %rdi
movl $0x6, %esi
callq 0xc550
jmp 0x7f1a
movq 0x130(%rsp), %rsi
leaq 0x8f0(%rsp), %rdi
leaq 0x8d0(%rsp), %rdx
callq 0xc590
jmp 0x7f39
movq 0x128(%rsp), %rdi
leaq 0x8f0(%rsp), %rsi
callq 0xc520
movq %rax, 0x120(%rsp)
jmp 0x7f58
movq 0x120(%rsp), %rax
movq %rax, 0x8c8(%rsp)
leaq 0x8f0(%rsp), %rdi
callq 0x5cb0
leaq 0x8d0(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xa1c(%rsp)
jmp 0x7ff1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x819e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x7fdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x8f0(%rsp), %rdi
callq 0x5cb0
leaq 0x8d0(%rsp), %rdi
callq 0x5cd0
jmp 0x819e
cmpl $0x0, 0xa1c(%rsp)
jne 0x8184
movq 0x210(%rsp), %rdi
leaq 0x918(%rsp), %rsi
callq 0x62b0
movl %eax, 0x11c(%rsp)
jmp 0x801d
movq 0x210(%rsp), %rsi
movl 0x11c(%rsp), %eax
movl %eax, 0x8c4(%rsp)
movl 0x8c4(%rsp), %eax
movl %eax, 0x10c(%rsp)
movq %rsi, %rdi
addq $0x30, %rdi
addq $0x94, %rsi
callq 0xc660
movq %rax, 0x110(%rsp)
jmp 0x805e
movq 0x210(%rsp), %rdi
movq 0x110(%rsp), %rax
movl 0x10c(%rsp), %ecx
movl %ecx, (%rax)
movl 0x94(%rdi), %eax
movl %eax, 0xe58(%rsp)
movl 0x98(%rdi), %eax
movl %eax, 0xe60(%rsp)
leaq 0xe38(%rsp), %rsi
callq 0x9290
jmp 0x80a0
movq 0xf08(%rsp), %rsi
leaq 0x870(%rsp), %rdi
callq 0x3110
jmp 0x80b7
movq 0x210(%rsp), %rax
movl 0x94(%rax), %ecx
movl 0x98(%rax), %edx
leaq 0x890(%rsp), %rdi
leaq 0x870(%rsp), %rsi
callq 0xc5d0
jmp 0x80e2
leaq 0x870(%rsp), %rdi
callq 0x3180
movq 0x210(%rsp), %rdi
movl 0x8c4(%rsp), %eax
movl %eax, 0x8b8(%rsp)
addq $0x78, %rdi
leaq 0x890(%rsp), %rsi
callq 0xc620
jmp 0x8118
movq 0x210(%rsp), %rax
movl 0x94(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x94(%rax)
leaq 0x890(%rsp), %rdi
callq 0x5090
jmp 0x8184
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x870(%rsp), %rdi
callq 0x3180
jmp 0x819e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x890(%rsp), %rdi
callq 0x5090
jmp 0x819e
movl $0x1, 0xb8c(%rsp)
leaq 0x918(%rsp), %rdi
callq 0x3180
jmp 0x81ad
leaq 0x918(%rsp), %rdi
callq 0x3180
jmp 0x81cc
leaq 0x9d8(%rsp), %rdi
callq 0x3180
leaq 0x9f8(%rsp), %rdi
callq 0x3180
jmp 0x8506
leaq 0x9d8(%rsp), %rdi
callq 0x3180
leaq 0x9f8(%rsp), %rdi
callq 0x3180
jmp 0x854c
movl $0x0, 0x86c(%rsp)
leaq 0xe38(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x820c
jmp 0x8306
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0xf8(%rsp)
addq $0x98, %rax
movq %rax, 0x100(%rsp)
leaq 0x820(%rsp), %rdi
movl $0x1, %esi
callq 0xc550
jmp 0x8248
movq 0x100(%rsp), %rsi
leaq 0x840(%rsp), %rdi
leaq 0x820(%rsp), %rdx
callq 0xc590
jmp 0x8267
movq 0xf8(%rsp), %rdi
leaq 0x840(%rsp), %rsi
callq 0xc520
movq %rax, 0xf0(%rsp)
jmp 0x8286
movq 0xf0(%rsp), %rax
movq %rax, 0x818(%rsp)
leaq 0x840(%rsp), %rdi
callq 0x5cb0
leaq 0x820(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0x86c(%rsp)
jmp 0x8306
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x82f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x840(%rsp), %rdi
callq 0x5cb0
leaq 0x820(%rsp), %rdi
callq 0x5cd0
jmp 0x854c
movq 0x210(%rsp), %rax
movl 0x90(%rax), %ecx
movl %ecx, 0xe58(%rsp)
movl 0x98(%rax), %eax
movl %eax, 0xe60(%rsp)
cmpl $0x0, 0x86c(%rsp)
jne 0x8419
movq 0x210(%rsp), %rdi
leaq 0xe38(%rsp), %rsi
callq 0x9290
jmp 0x834d
leaq 0xbe81(%rip), %rdx      # 0x141d5
leaq 0x7c8(%rsp), %rdi
leaq 0xe38(%rsp), %rsi
callq 0xc750
jmp 0x836b
movq 0x210(%rsp), %rax
movl 0x90(%rax), %ecx
movl 0x98(%rax), %edx
leaq 0x7e8(%rsp), %rdi
leaq 0x7c8(%rsp), %rsi
callq 0xc5d0
jmp 0x8396
leaq 0x7c8(%rsp), %rdi
callq 0x3180
movq 0x210(%rsp), %rdi
addq $0x78, %rdi
leaq 0x7e8(%rsp), %rsi
callq 0xc620
jmp 0x83be
leaq 0x7e8(%rsp), %rdi
callq 0x5090
jmp 0x8419
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x7c8(%rsp), %rdi
callq 0x3180
jmp 0x854c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x7e8(%rsp), %rdi
callq 0x5090
jmp 0x854c
leaq 0xc78(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x84fb
leaq 0x778(%rsp), %rdi
leaq 0xe90(%rsp), %rsi
callq 0x3110
jmp 0x8445
movq 0x210(%rsp), %rax
movl 0x90(%rax), %ecx
movl 0x98(%rax), %edx
leaq 0x798(%rsp), %rdi
leaq 0x778(%rsp), %rsi
callq 0xc5d0
jmp 0x8470
leaq 0x778(%rsp), %rdi
callq 0x3180
movq 0x210(%rsp), %rdi
movl 0x90(%rdi), %eax
incl %eax
movl %eax, 0x90(%rdi)
addq $0x60, %rdi
leaq 0x798(%rsp), %rsi
callq 0xc620
jmp 0x84a6
leaq 0x798(%rsp), %rdi
callq 0x5090
jmp 0x84fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x778(%rsp), %rdi
callq 0x3180
jmp 0x854c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x798(%rsp), %rdi
callq 0x5090
jmp 0x854c
movl $0x1, 0xb8c(%rsp)
leaq 0xc78(%rsp), %rdi
callq 0x3180
leaq 0xc98(%rsp), %rdi
callq 0x3140
leaq 0xe38(%rsp), %rdi
callq 0x5670
leaq 0xe90(%rsp), %rdi
callq 0x3180
leaq 0xee0(%rsp), %rdi
callq 0x3180
jmp 0x9279
leaq 0xc78(%rsp), %rdi
callq 0x3180
leaq 0xc98(%rsp), %rdi
callq 0x3140
leaq 0xe38(%rsp), %rdi
callq 0x5670
leaq 0xe90(%rsp), %rdi
callq 0x3180
leaq 0xee0(%rsp), %rdi
callq 0x3180
jmp 0x9281
movq 0xf08(%rsp), %rsi
leaq 0x5f8(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
movl $0x8, %edx
callq 0x3480
leaq 0x5d8(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x33e0
movq 0xe0(%rsp), %rdi
movq 0xe8(%rsp), %rsi
callq 0x33a0
jmp 0x85e0
leaq 0xbbe5(%rip), %rsi      # 0x141cc
leaq 0x5d8(%rsp), %rdi
callq 0xc4f0
movb %al, 0xdf(%rsp)
jmp 0x85fd
movb 0xdf(%rsp), %al
testb $0x1, %al
jne 0x860d
jmp 0x8c1b
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xf8, %rcx
movq %rcx, 0xc8(%rsp)
addq $0x98, %rax
movq %rax, 0xd0(%rsp)
leaq 0x590(%rsp), %rdi
movl $0x2, %esi
callq 0xc810
jmp 0x8649
movq 0xd0(%rsp), %rsi
leaq 0x5b0(%rsp), %rdi
leaq 0x590(%rsp), %rdx
callq 0xc850
jmp 0x8668
movq 0xc8(%rsp), %rdi
leaq 0x5b0(%rsp), %rsi
callq 0xc7e0
movq %rax, 0xc0(%rsp)
jmp 0x8687
movq 0xc0(%rsp), %rax
movq %rax, 0x588(%rsp)
leaq 0x5b0(%rsp), %rdi
callq 0x5990
leaq 0x590(%rsp), %rdi
callq 0x59b0
leaq 0x568(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x33e0
leaq 0x548(%rsp), %rdi
callq 0x33e0
movq 0xb8(%rsp), %rsi
movl $0x0, 0x544(%rsp)
leaq 0x5f8(%rsp), %rdi
callq 0x33a0
jmp 0x86f5
leaq 0x568(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x870b
jmp 0x8883
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0xa8(%rsp)
addq $0x98, %rax
movq %rax, 0xb0(%rsp)
leaq 0x4f8(%rsp), %rdi
movl $0x9, %esi
callq 0xc550
jmp 0x8747
movq 0xb0(%rsp), %rsi
leaq 0x518(%rsp), %rdi
leaq 0x4f8(%rsp), %rdx
callq 0xc590
jmp 0x8766
movq 0xa8(%rsp), %rdi
leaq 0x518(%rsp), %rsi
callq 0xc520
movq %rax, 0xa0(%rsp)
jmp 0x8785
movq 0xa0(%rsp), %rax
movq %rax, 0x4f0(%rsp)
leaq 0x518(%rsp), %rdi
callq 0x5cb0
leaq 0x4f8(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xb8c(%rsp)
jmp 0x8bdd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x925d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x880f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x5b0(%rsp), %rdi
callq 0x5990
leaq 0x590(%rsp), %rdi
callq 0x59b0
jmp 0x925d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8bfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8871
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x518(%rsp), %rdi
callq 0x5cb0
leaq 0x4f8(%rsp), %rdi
callq 0x5cd0
jmp 0x8bfc
leaq 0x5d8(%rsp), %rdi
leaq 0x568(%rsp), %rsi
callq 0x3040
jmp 0x889a
movq 0x210(%rsp), %rdi
leaq 0x5d8(%rsp), %rsi
callq 0x6060
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x89b7
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x90(%rsp)
addq $0x98, %rax
movq %rax, 0x98(%rsp)
leaq 0x4a8(%rsp), %rdi
movl $0x8, %esi
callq 0xc550
jmp 0x88f9
movq 0x98(%rsp), %rsi
leaq 0x4c8(%rsp), %rdi
leaq 0x4a8(%rsp), %rdx
callq 0xc590
jmp 0x8918
movq 0x90(%rsp), %rdi
leaq 0x4c8(%rsp), %rsi
callq 0xc520
movq %rax, 0x88(%rsp)
jmp 0x8937
movq 0x88(%rsp), %rax
movq %rax, 0x4a0(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x5cb0
leaq 0x4a8(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0x544(%rsp)
jmp 0x89b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x89a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x5cb0
leaq 0x4a8(%rsp), %rdi
callq 0x5cd0
jmp 0x8bfc
leaq 0x5f8(%rsp), %rdi
leaq 0x548(%rsp), %rsi
callq 0x33a0
jmp 0x89ce
leaq 0x548(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x8ad1
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x78(%rsp)
addq $0x98, %rax
movq %rax, 0x80(%rsp)
leaq 0x458(%rsp), %rdi
movl $0x6, %esi
callq 0xc550
jmp 0x8a1c
movq 0x80(%rsp), %rsi
leaq 0x478(%rsp), %rdi
leaq 0x458(%rsp), %rdx
callq 0xc590
jmp 0x8a3b
movq 0x78(%rsp), %rdi
leaq 0x478(%rsp), %rsi
callq 0xc520
movq %rax, 0x70(%rsp)
jmp 0x8a54
movq 0x70(%rsp), %rax
movq %rax, 0x450(%rsp)
leaq 0x478(%rsp), %rdi
callq 0x5cb0
leaq 0x458(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0x544(%rsp)
jmp 0x8ad1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8abf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x478(%rsp), %rdi
callq 0x5cb0
leaq 0x458(%rsp), %rdi
callq 0x5cd0
jmp 0x8bfc
cmpl $0x0, 0x544(%rsp)
jne 0x8bd2
movq 0x210(%rsp), %rdi
leaq 0x5d8(%rsp), %rsi
callq 0x62b0
movl %eax, 0x6c(%rsp)
jmp 0x8afa
movl 0x6c(%rsp), %eax
movl %eax, 0x44c(%rsp)
movq 0xf08(%rsp), %rsi
leaq 0x3f8(%rsp), %rdi
callq 0x3110
jmp 0x8b1c
movq 0x210(%rsp), %rax
movl 0x90(%rax), %ecx
movl 0x98(%rax), %edx
leaq 0x418(%rsp), %rdi
leaq 0x3f8(%rsp), %rsi
callq 0xc5d0
jmp 0x8b47
leaq 0x3f8(%rsp), %rdi
callq 0x3180
movq 0x210(%rsp), %rdi
movl 0x44c(%rsp), %eax
movl %eax, 0x440(%rsp)
addq $0x78, %rdi
leaq 0x418(%rsp), %rsi
callq 0xc620
jmp 0x8b7d
leaq 0x418(%rsp), %rdi
callq 0x5090
jmp 0x8bd2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x3f8(%rsp), %rdi
callq 0x3180
jmp 0x8bfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x418(%rsp), %rdi
callq 0x5090
jmp 0x8bfc
movl $0x1, 0xb8c(%rsp)
leaq 0x548(%rsp), %rdi
callq 0x3180
leaq 0x568(%rsp), %rdi
callq 0x3180
jmp 0x9241
leaq 0x548(%rsp), %rdi
callq 0x3180
leaq 0x568(%rsp), %rdi
callq 0x3180
jmp 0x925d
leaq 0xb5ae(%rip), %rsi      # 0x141d0
leaq 0x5d8(%rsp), %rdi
callq 0xc4f0
movb %al, 0x6b(%rsp)
jmp 0x8c35
movb 0x6b(%rsp), %al
testb $0x1, %al
jne 0x8c42
jmp 0x9169
leaq 0x3d8(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x33e0
leaq 0x3b8(%rsp), %rdi
callq 0x33e0
movq 0x60(%rsp), %rsi
movl $0x0, 0x3b4(%rsp)
leaq 0x5f8(%rsp), %rdi
callq 0x33a0
jmp 0x8c80
leaq 0x3d8(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x8c96
jmp 0x8d9a
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x50(%rsp)
addq $0x98, %rax
movq %rax, 0x58(%rsp)
leaq 0x368(%rsp), %rdi
movl $0x9, %esi
callq 0xc550
jmp 0x8ccc
movq 0x58(%rsp), %rsi
leaq 0x388(%rsp), %rdi
leaq 0x368(%rsp), %rdx
callq 0xc590
jmp 0x8ce8
movq 0x50(%rsp), %rdi
leaq 0x388(%rsp), %rsi
callq 0xc520
movq %rax, 0x48(%rsp)
jmp 0x8d01
movq 0x48(%rsp), %rax
movq %rax, 0x360(%rsp)
leaq 0x388(%rsp), %rdi
callq 0x5cb0
leaq 0x368(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0xb8c(%rsp)
jmp 0x912b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x914a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8d88
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x388(%rsp), %rdi
callq 0x5cb0
leaq 0x368(%rsp), %rdi
callq 0x5cd0
jmp 0x914a
leaq 0x5d8(%rsp), %rdi
leaq 0x3d8(%rsp), %rsi
callq 0x3040
jmp 0x8db1
movq 0x210(%rsp), %rdi
leaq 0x5d8(%rsp), %rsi
callq 0x6060
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x8ebc
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x38(%rsp)
addq $0x98, %rax
movq %rax, 0x40(%rsp)
leaq 0x318(%rsp), %rdi
movl $0x8, %esi
callq 0xc550
jmp 0x8e0a
movq 0x40(%rsp), %rsi
leaq 0x338(%rsp), %rdi
leaq 0x318(%rsp), %rdx
callq 0xc590
jmp 0x8e26
movq 0x38(%rsp), %rdi
leaq 0x338(%rsp), %rsi
callq 0xc520
movq %rax, 0x30(%rsp)
jmp 0x8e3f
movq 0x30(%rsp), %rax
movq %rax, 0x310(%rsp)
leaq 0x338(%rsp), %rdi
callq 0x5cb0
leaq 0x318(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0x3b4(%rsp)
jmp 0x8ebc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8eaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x338(%rsp), %rdi
callq 0x5cb0
leaq 0x318(%rsp), %rdi
callq 0x5cd0
jmp 0x914a
leaq 0x5f8(%rsp), %rdi
leaq 0x3b8(%rsp), %rsi
callq 0x33a0
jmp 0x8ed3
leaq 0x3b8(%rsp), %rdi
callq 0x3460
testb $0x1, %al
jne 0x8fd0
movq 0x210(%rsp), %rax
movq %rax, %rcx
addq $0xc8, %rcx
movq %rcx, 0x20(%rsp)
addq $0x98, %rax
movq %rax, 0x28(%rsp)
leaq 0x2c8(%rsp), %rdi
movl $0x6, %esi
callq 0xc550
jmp 0x8f1e
movq 0x28(%rsp), %rsi
leaq 0x2e8(%rsp), %rdi
leaq 0x2c8(%rsp), %rdx
callq 0xc590
jmp 0x8f3a
movq 0x20(%rsp), %rdi
leaq 0x2e8(%rsp), %rsi
callq 0xc520
movq %rax, 0x18(%rsp)
jmp 0x8f53
movq 0x18(%rsp), %rax
movq %rax, 0x2c0(%rsp)
leaq 0x2e8(%rsp), %rdi
callq 0x5cb0
leaq 0x2c8(%rsp), %rdi
callq 0x5cd0
movl $0x1, 0x3b4(%rsp)
jmp 0x8fd0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
jmp 0x8fbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x2e8(%rsp), %rdi
callq 0x5cb0
leaq 0x2c8(%rsp), %rdi
callq 0x5cd0
jmp 0x914a
cmpl $0x0, 0x3b4(%rsp)
jne 0x9120
movq 0x210(%rsp), %rdi
leaq 0x5d8(%rsp), %rsi
callq 0x62b0
movl %eax, 0x14(%rsp)
jmp 0x8ff9
movq 0x210(%rsp), %rsi
movl 0x14(%rsp), %eax
movl %eax, 0x2bc(%rsp)
movl 0x2bc(%rsp), %eax
movl %eax, 0x4(%rsp)
movq %rsi, %rdi
addq $0x30, %rdi
addq $0x94, %rsi
callq 0xc660
movq %rax, 0x8(%rsp)
jmp 0x9031
movq 0x8(%rsp), %rax
movl 0x4(%rsp), %ecx
movl %ecx, (%rax)
movq 0xf08(%rsp), %rsi
leaq 0x268(%rsp), %rdi
callq 0x3110
jmp 0x9053
movq 0x210(%rsp), %rax
movl 0x94(%rax), %ecx
movl 0x98(%rax), %edx
leaq 0x288(%rsp), %rdi
leaq 0x268(%rsp), %rsi
callq 0xc5d0
jmp 0x907e
leaq 0x268(%rsp), %rdi
callq 0x3180
movq 0x210(%rsp), %rdi
movl 0x2bc(%rsp), %eax
movl %eax, 0x2b0(%rsp)
addq $0x78, %rdi
leaq 0x288(%rsp), %rsi
callq 0xc620
jmp 0x90b4
movq 0x210(%rsp), %rax
movl 0x94(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x94(%rax)
leaq 0x288(%rsp), %rdi
callq 0x5090
jmp 0x9120
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x268(%rsp), %rdi
callq 0x3180
jmp 0x914a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x5090
jmp 0x914a
movl $0x1, 0xb8c(%rsp)
leaq 0x3b8(%rsp), %rdi
callq 0x3180
leaq 0x3d8(%rsp), %rdi
callq 0x3180
jmp 0x9241
leaq 0x3b8(%rsp), %rdi
callq 0x3180
leaq 0x3d8(%rsp), %rdi
callq 0x3180
jmp 0x925d
movq 0xf08(%rsp), %rsi
leaq 0x218(%rsp), %rdi
callq 0x3110
jmp 0x9180
movq 0x210(%rsp), %rax
movl 0x90(%rax), %ecx
movl 0x98(%rax), %edx
leaq 0x238(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0xc5d0
jmp 0x91ab
leaq 0x218(%rsp), %rdi
callq 0x3180
movq 0x210(%rsp), %rdi
movl 0x90(%rdi), %eax
incl %eax
movl %eax, 0x90(%rdi)
addq $0x60, %rdi
leaq 0x238(%rsp), %rsi
callq 0xc620
jmp 0x91e1
movl $0x1, 0xb8c(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x5090
jmp 0x9241
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x218(%rsp), %rdi
callq 0x3180
jmp 0x925d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xeb8(%rsp)
movl %eax, 0xeb4(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x5090
jmp 0x925d
leaq 0x5d8(%rsp), %rdi
callq 0x3180
leaq 0x5f8(%rsp), %rdi
callq 0x3140
jmp 0x9279
leaq 0x5d8(%rsp), %rdi
callq 0x3180
leaq 0x5f8(%rsp), %rdi
callq 0x3140
jmp 0x9281
addq $0xf18, %rsp            # imm = 0xF18
retq
movq 0xeb8(%rsp), %rdi
callq 0x3490
nop