// File: /workspace/github_cpp_makefile_star2_O2/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:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3c8, %rsp            # imm = 0x3C8
movq %rsi, %r14
movq %rdi, %rbx
pushq $0x3a
popq %rsi
movq %r14, %rdi
xorl %edx, %edx
callq 0x2260
cmpq $-0x1, %rax
je 0x3bdc
movq %rax, %r15
movq (%r14), %rsi
leaq (%rsi,%rax), %rdx
leaq 0xd8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0xc8(%rsp), %rdi
callq 0x66d0
movq (%r14), %rdx
leaq (%rdx,%r15), %rsi
incq %rsi
addq 0x8(%r14), %rdx
leaq 0xf8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0xe8(%rsp), %rdi
callq 0x66d0
leaq 0x228(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x2280
leaq 0x58(%rsp), %rdi
leaq 0x228(%rsp), %rsi
pushq $-0x1
popq %rdx
callq 0x5b6e
leaq 0x228(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
pushq $0x8
popq %rdx
callq 0x2300
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x248(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2240
leaq 0x47ad(%rip), %rsi      # 0x81cc
leaq 0x8(%rsp), %rdi
callq 0x5b93
leaq 0xb8(%rsp), %r13
testb %al, %al
je 0x3d94
movq %r13, 0xa8(%rsp)
andq $0x0, 0xb0(%rsp)
xorl %ebp, %ebp
leaq 0x118(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %bpl, 0xb8(%rsp)
movb %bpl, (%rax)
cmpq $0x0, 0x60(%rsp)
jne 0x3ac7
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rbp
movl %ebp, %esi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
leaq 0xc8(%rbx), %r15
leaq 0x28(%rsp), %r12
leaq 0x88(%rsp), %rdx
movq %r12, %rdi
callq 0x5bd0
movq %r15, %rdi
movq %r12, %rsi
callq 0x674a
leaq 0x30(%rsp), %rdi
callq 0x20e0
leaq 0x88(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x2240
cmpq $0x0, 0xb0(%rsp)
je 0x41d2
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x2110
leaq 0x8(%rsp), %rsi
callq 0x31f0
testb %al, %al
jne 0x3b63
leaq 0x88(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
leaq 0xc8(%rbx), %r15
leaq 0x28(%rsp), %r12
leaq 0x88(%rsp), %rdx
movq %r12, %rdi
callq 0x5bd0
movq %r15, %rdi
movq %r12, %rsi
callq 0x674a
pushq $0x1
popq %rbp
leaq 0x30(%rsp), %rdi
callq 0x20e0
leaq 0x88(%rsp), %rdi
callq 0x20e0
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2280
leaq 0x248(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x2240
cmpq $0x0, 0x110(%rsp)
je 0x4271
leaq 0x128(%rsp), %rdi
pushq $0x6
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
addq $0xc8, %rbx
leaq 0x28(%rsp), %r14
leaq 0x128(%rsp), %rdx
movq %r14, %rdi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
jmp 0x3f3b
leaq 0x248(%rsp), %r15
pushq $0x8
popq %rdx
movq %r15, %rdi
movq %r14, %rsi
callq 0x2300
leaq 0x38(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x28(%rsp), %rsi
movq %r15, %rdi
callq 0x2240
leaq 0x45b5(%rip), %rsi      # 0x81cc
leaq 0x28(%rsp), %rdi
callq 0x5b93
testb %al, %al
je 0x3f52
leaq 0xc8(%rsp), %rdi
pushq $0x2
popq %rsi
callq 0x5c94
leaq 0x98(%rbx), %r15
leaq 0xf8(%rbx), %r12
leaq 0x58(%rsp), %r13
leaq 0xc8(%rsp), %rdx
movq %r13, %rdi
movq %r15, %rsi
callq 0x5cc4
movq %r12, %rdi
movq %r13, %rsi
callq 0x6bea
leaq 0x60(%rsp), %rdi
callq 0x20e0
leaq 0xc8(%rsp), %rdi
callq 0x20e0
leaq 0xd8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0xf8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq 0x248(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x2240
cmpq $0x0, 0xd0(%rsp)
je 0x42f5
leaq 0x28(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x2110
leaq 0x28(%rsp), %rsi
callq 0x31f0
movl %eax, %ebp
testb %al, %al
jne 0x3d37
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x5ba0
leaq 0xc8(%rbx), %r12
leaq 0x58(%rsp), %r13
leaq 0x8(%rsp), %rdx
movq %r13, %rdi
movq %r15, %rsi
callq 0x5bd0
movq %r12, %rdi
movq %r13, %rsi
callq 0x674a
leaq 0x60(%rsp), %rdi
callq 0x20e0
leaq 0x8(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x2240
cmpq $0x0, 0xf0(%rsp)
je 0x4376
leaq 0x8(%rsp), %rdi
pushq $0x6
popq %rsi
callq 0x5ba0
addq $0xc8, %rbx
leaq 0x58(%rsp), %r14
leaq 0x8(%rsp), %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
jmp 0x4523
leaq 0x4435(%rip), %rsi      # 0x81d0
leaq 0x8(%rsp), %rdi
callq 0x5b93
movq 0x60(%rsp), %r12
testb %al, %al
je 0x4086
testq %r12, %r12
jne 0x3e0c
leaq 0xa8(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
leaq 0xc8(%rbx), %r15
leaq 0x28(%rsp), %r12
leaq 0xa8(%rsp), %rdx
movq %r12, %rdi
callq 0x5bd0
movq %r15, %rdi
movq %r12, %rsi
callq 0x674a
leaq 0x30(%rsp), %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rsi
movq %r13, (%rsi)
andq $0x0, 0x8(%rsi)
xorl %eax, %eax
movb %al, 0x10(%rsi)
leaq 0x118(%rsp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x248(%rsp), %rdi
callq 0x2240
cmpq $0x0, 0xb0(%rsp)
je 0x432e
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x2110
leaq 0x8(%rsp), %rsi
callq 0x31f0
movl %eax, %ebp
testb %al, %al
jne 0x3ec7
leaq 0x88(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
leaq 0xc8(%rbx), %r15
leaq 0x28(%rsp), %r12
leaq 0x88(%rsp), %rdx
movq %r12, %rdi
callq 0x5bd0
movq %r15, %rdi
movq %r12, %rsi
callq 0x674a
leaq 0x30(%rsp), %rdi
callq 0x20e0
leaq 0x88(%rsp), %rdi
callq 0x20e0
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2280
leaq 0x248(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x2240
cmpq $0x0, 0x110(%rsp)
je 0x43df
leaq 0x128(%rsp), %rdi
pushq $0x6
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
addq $0xc8, %rbx
leaq 0x28(%rsp), %r14
leaq 0x128(%rsp), %rdx
movq %r14, %rdi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
leaq 0x30(%rsp), %rdi
callq 0x20e0
leaq 0x128(%rsp), %rdi
jmp 0x4482
leaq 0x4277(%rip), %rsi      # 0x81d0
leaq 0x28(%rsp), %rdi
callq 0x5b93
testb %al, %al
je 0x4215
leaq 0xd8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0xf8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq 0x248(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x2240
cmpq $0x0, 0xd0(%rsp)
je 0x44eb
leaq 0x28(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x2110
leaq 0x28(%rsp), %rsi
callq 0x31f0
movl %eax, %ebp
testb %al, %al
jne 0x4025
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
leaq 0xc8(%rbx), %r15
leaq 0x58(%rsp), %r12
leaq 0x8(%rsp), %rdx
movq %r12, %rdi
callq 0x5bd0
movq %r15, %rdi
movq %r12, %rsi
callq 0x674a
leaq 0x60(%rsp), %rdi
callq 0x20e0
leaq 0x8(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x2240
cmpq $0x0, 0xf0(%rsp)
je 0x457a
leaq 0x8(%rsp), %rdi
pushq $0x6
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
addq $0xc8, %rbx
leaq 0x58(%rsp), %r14
leaq 0x8(%rsp), %rdx
movq %r14, %rdi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
jmp 0x4523
testq %r12, %r12
jne 0x40e0
leaq 0xa8(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
leaq 0xc8(%rbx), %r14
leaq 0x28(%rsp), %r15
leaq 0xa8(%rsp), %rdx
movq %r15, %rdi
callq 0x5bd0
movq %r14, %rdi
movq %r15, %rsi
callq 0x674a
leaq 0x30(%rsp), %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
callq 0x20e0
movl 0x90(%rbx), %eax
movl %eax, 0x78(%rsp)
movl 0x98(%rbx), %eax
movl %eax, 0x80(%rsp)
testq %r12, %r12
je 0x4165
leaq 0x58(%rsp), %rsi
movq %rbx, %rdi
callq 0x4884
leaq 0x40c5(%rip), %rdx      # 0x81d5
leaq 0x1c8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x5c5c
movl 0x90(%rbx), %ecx
movl 0x98(%rbx), %edx
leaq 0x28(%rsp), %rdi
leaq 0x1c8(%rsp), %rsi
callq 0x5be0
leaq 0x1c8(%rsp), %rdi
callq 0x20e0
leaq 0x78(%rbx), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5c02
leaq 0x28(%rsp), %rdi
callq 0x20e0
cmpq $0x0, 0x10(%rsp)
je 0x44ae
leaq 0x1a8(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x2280
movl 0x90(%rbx), %ecx
movl 0x98(%rbx), %edx
leaq 0x28(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x5be0
leaq 0x1a8(%rsp), %rdi
callq 0x20e0
incl 0x90(%rbx)
addq $0x60, %rbx
leaq 0x28(%rsp), %rsi
movq %rbx, %rdi
callq 0x5c02
leaq 0x28(%rsp), %rdi
jmp 0x44a9
leaq 0x88(%rsp), %rdi
pushq $0x9
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
addq $0xc8, %rbx
leaq 0x28(%rsp), %r14
leaq 0x88(%rsp), %rdx
movq %r14, %rdi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
jmp 0x436c
leaq 0x148(%rsp), %rdi
movq %r14, %rsi
callq 0x2280
movl 0x90(%rbx), %ecx
movl 0x98(%rbx), %edx
leaq 0x58(%rsp), %rdi
leaq 0x148(%rsp), %rsi
callq 0x5be0
leaq 0x148(%rsp), %rdi
callq 0x20e0
incl 0x90(%rbx)
addq $0x60, %rbx
leaq 0x58(%rsp), %rsi
movq %rbx, %rdi
callq 0x5c02
leaq 0x58(%rsp), %rdi
jmp 0x454c
testl %ebp, %ebp
jne 0x4487
leaq 0x88(%rsp), %rsi
callq 0x3288
movl %eax, %ebp
leaq 0x58(%rsp), %rsi
movl %eax, 0x20(%rsi)
movl 0x98(%rbx), %eax
movl %eax, 0x28(%rsi)
movq %rbx, %rdi
callq 0x4884
leaq 0x208(%rsp), %rdi
movq %r14, %rsi
callq 0x2280
movl 0x90(%rbx), %ecx
movl 0x98(%rbx), %edx
leaq 0x28(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0x5be0
leaq 0x208(%rsp), %rdi
callq 0x20e0
leaq 0x28(%rsp), %rsi
movl %ebp, 0x28(%rsi)
addq $0x78, %rbx
movq %rbx, %rdi
callq 0x5c02
jmp 0x447d
leaq 0x8(%rsp), %rdi
pushq $0x9
popq %rsi
callq 0x5ba0
addq $0xc8, %rbx
leaq 0x58(%rsp), %r14
leaq 0x8(%rsp), %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
jmp 0x4523
leaq 0x88(%rsp), %rdi
pushq $0x9
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
addq $0xc8, %rbx
leaq 0x28(%rsp), %r14
leaq 0x88(%rsp), %rdx
movq %r14, %rdi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
leaq 0x30(%rsp), %rdi
jmp 0x4482
testb %bpl, %bpl
je 0x4537
leaq 0x28(%rsp), %rsi
callq 0x3288
movl %eax, %ebp
leaq 0x188(%rsp), %rdi
movq %r14, %rsi
callq 0x2280
movl 0x90(%rbx), %ecx
movl 0x98(%rbx), %edx
leaq 0x58(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x5be0
leaq 0x188(%rsp), %rdi
callq 0x20e0
leaq 0x58(%rsp), %rsi
movl %ebp, 0x28(%rsi)
addq $0x78, %rbx
movq %rbx, %rdi
callq 0x5c02
jmp 0x45f2
testb %bpl, %bpl
je 0x4487
leaq 0x88(%rsp), %rsi
callq 0x3288
movl %eax, %ebp
leaq 0x30(%rbx), %rdi
leaq 0x94(%rbx), %r15
movq %r15, %rsi
callq 0x5c0e
movl %ebp, (%rax)
movl 0x94(%rbx), %eax
leaq 0x58(%rsp), %rsi
movl %eax, 0x20(%rsi)
movl 0x98(%rbx), %eax
movl %eax, 0x28(%rsi)
movq %rbx, %rdi
callq 0x4884
leaq 0x1e8(%rsp), %rdi
movq %r14, %rsi
callq 0x2280
movl 0x94(%rbx), %ecx
movl 0x98(%rbx), %edx
leaq 0x28(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x5be0
leaq 0x1e8(%rsp), %rdi
callq 0x20e0
leaq 0x28(%rsp), %rsi
movl %ebp, 0x28(%rsi)
addq $0x78, %rbx
movq %rbx, %rdi
callq 0x5c02
incl (%r15)
leaq 0x28(%rsp), %rdi
callq 0x20e0
leaq 0x88(%rsp), %rdi
callq 0x20e0
leaq 0x108(%rsp), %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
callq 0x20e0
leaq 0x8(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
callq 0x20f0
leaq 0x58(%rsp), %rdi
callq 0x20e0
leaq 0xe8(%rsp), %rdi
callq 0x20e0
leaq 0xc8(%rsp), %rdi
callq 0x20e0
jmp 0x4568
leaq 0x8(%rsp), %rdi
pushq $0x9
popq %rsi
callq 0x5ba0
leaq 0x98(%rbx), %rsi
addq $0xc8, %rbx
leaq 0x58(%rsp), %r14
leaq 0x8(%rsp), %rdx
movq %r14, %rdi
callq 0x5bd0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x674a
leaq 0x60(%rsp), %rdi
callq 0x20e0
leaq 0x8(%rsp), %rdi
callq 0x20e0
leaq 0xe8(%rsp), %rdi
callq 0x20e0
leaq 0xc8(%rsp), %rdi
callq 0x20e0
leaq 0x28(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
callq 0x20f0
addq $0x3c8, %rsp            # imm = 0x3C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
testb %bpl, %bpl
je 0x4537
leaq 0x28(%rsp), %rsi
callq 0x3288
movl %eax, %ebp
leaq 0x30(%rbx), %rdi
leaq 0x94(%rbx), %r15
movq %r15, %rsi
callq 0x5c0e
movl %ebp, (%rax)
leaq 0x168(%rsp), %rdi
movq %r14, %rsi
callq 0x2280
movl 0x94(%rbx), %ecx
movl 0x98(%rbx), %edx
leaq 0x58(%rsp), %rdi
leaq 0x168(%rsp), %rsi
callq 0x5be0
leaq 0x168(%rsp), %rdi
callq 0x20e0
leaq 0x58(%rsp), %rsi
movl %ebp, 0x28(%rsi)
addq $0x78, %rbx
movq %rbx, %rdi
callq 0x5c02
incl (%r15)
leaq 0x58(%rsp), %rdi
jmp 0x4532
jmp 0x462a
movq %rax, %rbx
leaq 0x168(%rsp), %rdi
jmp 0x46ee
jmp 0x47c8
jmp 0x4656
movq %rax, %rbx
leaq 0x1e8(%rsp), %rdi
jmp 0x4796
jmp 0x47ab
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
jmp 0x46ee
movq %rax, %rbx
leaq 0x188(%rsp), %rdi
jmp 0x46ee
jmp 0x47c8
jmp 0x47c8
jmp 0x47c8
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0x4796
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
jmp 0x4796
jmp 0x47ab
jmp 0x46dc
jmp 0x47c8
jmp 0x46dc
jmp 0x47c8
jmp 0x46dc
jmp 0x47c8
jmp 0x4775
jmp 0x47fe
jmp 0x47ab
jmp 0x47ab
jmp 0x4775
jmp 0x47fe
jmp 0x46ad
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
jmp 0x4809
jmp 0x481d
jmp 0x481d
jmp 0x46dc
jmp 0x47c8
jmp 0x4781
jmp 0x47ab
jmp 0x46dc
jmp 0x47c8
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x20e0
leaq 0x8(%rsp), %rdi
callq 0x20e0
jmp 0x47cb
jmp 0x47c8
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
jmp 0x47e0
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
jmp 0x47e0
jmp 0x47c3
jmp 0x4736
jmp 0x47ab
movq %rax, %rbx
leaq 0x1a8(%rsp), %rdi
jmp 0x4816
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0x4816
jmp 0x47fe
jmp 0x4775
jmp 0x481d
movq %rax, %rbx
leaq 0x1c8(%rsp), %rdi
jmp 0x4816
jmp 0x47fe
jmp 0x481d
jmp 0x481d
jmp 0x4775
jmp 0x47fe
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
jmp 0x4796
jmp 0x47fe
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x20e0
leaq 0x128(%rsp), %rdi
callq 0x20e0
jmp 0x47ae
jmp 0x47ab
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
jmp 0x47d3
jmp 0x47c3
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x20e0
jmp 0x4801
jmp 0x47fe
jmp 0x47c8
jmp 0x47fe
movq %rax, %rbx
jmp 0x47e5
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x20e0
leaq 0xc8(%rsp), %rdi
callq 0x20e0
leaq 0x28(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
callq 0x20f0
jmp 0x485b
movq %rax, %rbx
leaq 0x108(%rsp), %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
callq 0x20e0
jmp 0x4820
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20e0
leaq 0x248(%rsp), %rdi
callq 0x20f0
leaq 0x58(%rsp), %rdi
callq 0x20e0
leaq 0xe8(%rsp), %rdi
callq 0x20e0
leaq 0xc8(%rsp), %rdi
callq 0x20e0
movq %rbx, %rdi
callq 0x2310
movq %rax, %rbx
jmp 0x4837
movq %rax, %rbx
leaq 0x228(%rsp), %rdi
jmp 0x483c
movq %rax, %rbx
jmp 0x4841
movq %rax, %rbx
jmp 0x484e
movq %rax, %rbx
jmp 0x485b