// File: akshayrajput[P]ARMV8_Simulator/./LDR.cpp
// Function: LDR()
void LDR()
{
    int bit_see = (IR.getLowerData() & 0x01000000);    //24th bit to check post index, pre index, unsigned offset
    int instr_type = (IR.getLowerData() & 0x00400000) >> 22; //22nd bit to check for load/ store
    if(instr_type)      //load LDR immediate
    {
    	printf("[log] - LDR immediate\n");
        if(!bit_see)    //post-index or pre-index
        {
        	
            int size = (IR.getLowerData() & 0xc0000000) >> 30;
            int opc = (IR.getLowerData() & 0x00c00000) >> 22;
            int imm9 = (IR.getLowerData() & 0x001ff000) >> 12;
            int rn = (IR.getLowerData() & 0x000003e0) >> 5;
            int rt = (IR.getLowerData() & 0x0000001f);
            int eleventh_bit = (IR.getLowerData() & 0x00000800);
            
            if(!eleventh_bit)   //post index
            {
                printf("[log] - LDR immediate post index\n");
                if(size == 2)   //32 bit variant
                {
                	printf("[log] - LDR immediate post index 32\n");
                    int addr = R[rn].getLowerData();
                    int imm;
                    //signed extention
                    imm = signExtend(imm9,8);
                    
                    
                    int dat = (int)Memory[addr].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 1].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 2].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 3].getData();
                    
                    R[rt].setLowerData(dat);
                    
                    addr = addr + imm;
                    R[rn].setLowerData(addr);
                }
                
                else            //64 bit variant
                {
                	printf("[log] - LDR immediate post index 64\n");
                    uint64_t addr = R[rn].getData();
                    uint64_t imm;
                    //int bit = (imm9 & 0x00000100) >> 8;
                    //signed extention

                     imm = signExtend(imm9,8);
                    uint64_t dat = (int)Memory[addr].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 1].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 2].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 3].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 4].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 5].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 6].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 7].getData();
                    
                    R[rt].setData(dat);
                    
                    addr = addr + (uint64_t)imm;
                    R[rn].setData(addr);
                }
            }
            
            else                //preindex
            {
            	printf(" [log] - LDR immediate pre index\n");
                if(size == 2)   //32 bit registers
                {
                	printf("[log] - LDR immediate pre index 32\n");
                    int addr = R[rn].getLowerData();
                    int imm;
                    //signed extention
                    
                    imm = signExtend(imm9,8);
                    addr = addr + imm;
                    R[rn].setLowerData(addr);
                    int dat = (int)Memory[addr].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 1].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 2].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 3].getData();
                    
                    R[rt].setLowerData(dat);
  
                    
                }
                
                else        //64 bit registers
                {
                	printf("[log] - LDR immediate pre index 64\n");
                    uint64_t addr = R[rn].getData();
                    uint64_t imm;
                    //signed extention
                    imm = signExtend(imm9,8);
                    addr = addr + imm;
                    R[rn].setData(addr);
                    uint64_t dat = (int)Memory[addr].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 1].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 2].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 3].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 4].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 5].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 6].getData();
                    dat = dat << 8;
                    dat = dat | (int)Memory[addr + 7].getData();
                    
                    R[rt].setData(dat);
                    
                   
                }
            }
        }
        
        else    // unsigned offset
        {
        	printf("[log] - LDR immediate unsigned offset\n");
            int size = (IR.getLowerData() & 0xc0000000) >> 30;
            int opc = (IR.getLowerData() & 0x00c00000) >> 22;
            int imm12 = (IR.getLowerData() & 0x003ffc00) >> 10;
            int rn = (IR.getLowerData() & 0x000003e0) >> 5;
            int rt = (IR.getLowerData() & 0x0000001f);
            if(size == 2)   //32 bit variant
            {
            	printf("LDR immediate unsigned offset 32\n");
                int pimm = imm12 * 4;
                uint64_t addr = R[rn].getData();
                addr += (uint64_t)pimm;
                int dat = (int)Memory[addr].getData();
                dat = dat << 8;
                dat = dat | (int)Memory[addr + 1].getData();
                dat = dat << 8;
                dat = dat | (int)Memory[addr + 2].getData();
                dat = dat << 8;
                dat = dat | (int)Memory[addr + 3].getData();
                
                R[rt].setLowerData(dat);
            }
            
            else    //64 bit variant
            {
            	printf("[log] - LDR immediate unsigned offset 64\n");
                int pimm = imm12 * 8;
                uint64_t addr = R[rn].getData();
                addr += (uint64_t)pimm;
                uint64_t dat = (uint64_t)Memory[addr].getData();
                dat = dat << 8;
                dat = dat | (uint64_t)Memory[addr + 1].getData();
                dat = dat << 8;
                dat = dat | (uint64_t)Memory[addr + 2].getData();
                dat = dat << 8;
                dat = dat | (uint64_t)Memory[addr + 3].getData();
                 dat = dat << 8;
                dat = dat | (uint64_t)Memory[addr + 4].getData();
                 dat = dat << 8;
                dat = dat | (uint64_t)Memory[addr + 5].getData();
                 dat = dat << 8;
                dat = dat | (uint64_t)Memory[addr + 6].getData();
                 dat = dat << 8;
                dat = dat | (uint64_t)Memory[addr + 7].getData();
                
                R[rt].setData(dat);
            }
        }
    }
    
    else    //store STR immediate
    {
    	printf("[log] -STR immediate\n");
        if(!bit_see)    // post or pre index
        {
            int eleventh_bit = (IR.getLowerData() & 0x00000800) >> 11;
            if(!eleventh_bit)   //post index
            {
            	printf("[log] - STR immediate post index\n");
                int size = (IR.getLowerData() & 0xc0000000) >> 30;
                int opc = (IR.getLowerData() & 0x00c00000) >> 22;
                int imm9 = (IR.getLowerData() & 0x001ff000) >> 12;
                int rn = (IR.getLowerData() & 0x000003e0) >> 5;
                
                int rt = (IR.getLowerData() & 0x0000001f);
                uint64_t offset = signExtend(imm9,8);
                uint64_t addr = R[rn].getData();
                addr -= Memory[0].addr;
                if(size == 2)   //32 bit registers
                {
                	printf(" [log] - STR immediate post index 32\n");
                    int data = R[rt].getLowerData();
                    uint8_t dat = (data & 0xff000000)>>24;
                    Memory[addr].setData(dat);
                    dat = (data & 0x00ff0000)>>16;
                    Memory[addr + 1].setData(dat);
                    dat = (data & 0x0000ff00)>>8;
                    Memory[addr + 2].setData(dat);
                    dat = data & 0xff0000ff;
                    Memory[addr + 3].setData(dat);
                }
                
                else  //64 bit registers
                {
                	printf("[log] - STR immediate post index 64\n");
                    uint64_t data = R[rt].getData();
                    uint8_t dat;
                    dat = (data & 0xff00000000000000)>>56;
                    Memory[addr].setData(dat);
                    dat = (data & 0x00ff000000000000)>>48;
                    Memory[addr + 1].setData(dat);
                    dat = (data & 0x0000ff0000000000)>>40;
                    Memory[addr + 2].setData(dat);
                    dat = (data & 0x000000ff00000000)>>32;
                    Memory[addr + 3].setData(dat);
                    dat = (data & 0x00000000ff000000)>>24;
                    Memory[addr + 4].setData(dat);
                    dat = (data & 0xff00000000ff0000)>>16;
                    Memory[addr + 5].setData(dat);
                    dat = (data & 0x000000000000ff00)>>8;
                    Memory[addr + 6].setData(dat);
                    dat = data & 0x00000000000000ff;
                    Memory[addr + 7].setData(dat);
                }
                
                addr = addr + offset;
                R[rn].setData(addr);
            }
            
            else        //pre index
            {
            	printf("[log] - STR immediate pre index\n");
                int size = (IR.getLowerData() & 0xc0000000) >> 30;
                int opc = (IR.getLowerData() & 0x00c00000) >> 22;
                int imm9 = (IR.getLowerData() & 0x001ff000) >> 12;
                int rn = (IR.getLowerData() & 0x000003e0) >> 5;
                
                int rt = (IR.getLowerData() & 0x0000001f);
                uint64_t offset = signExtend(imm9,8);
                uint8_t addr = R[rn].getData();
                
                addr = addr + offset;
                addr -= Memory[0].addr;
                R[rn].setData(addr);
                if(size == 2)   //32 bit registers
                {
                	printf("[log] - STR immediate pre index 32\n");
                    int data = R[rt].getLowerData();
                    uint8_t dat = (data & 0xff000000)>>24;
                    Memory[addr].setData(dat);
                    dat = (data & 0x00ff0000)>>16;
                    Memory[addr + 1].setData(dat);
                    dat = (data & 0x0000ff00)>>8;
                    Memory[addr + 2].setData(dat);
                    dat = data & 0xff0000ff;
                    Memory[addr + 3].setData(dat);
                }
                
                else  //64 bit registers
                {
                	printf("[log] - STR immediate pre index 64\n");
                    uint64_t data = R[rt].getData();
                    uint8_t dat;
                    dat = (data & 0xff00000000000000)>>56;
                    Memory[addr].setData(dat);
                    dat = (data & 0x00ff000000000000)>>48;
                    Memory[addr + 1].setData(dat);
                    dat = (data & 0x0000ff0000000000)>>40;
                    Memory[addr + 2].setData(dat);
                    dat = (data & 0x000000ff00000000)>>32;
                    Memory[addr + 3].setData(dat);
                    dat = (data & 0x00000000ff000000)>>24;
                    Memory[addr + 4].setData(dat);
                    dat = (data & 0xff00000000ff0000)>>16;
                    Memory[addr + 5].setData(dat);
                    dat = (data & 0x000000000000ff00)>>8;
                    Memory[addr + 6].setData(dat);
                    dat = data & 0x00000000000000ff;
                    Memory[addr + 7].setData(dat);
                }
                
               
            }
        }
        
        else    //unsigned offset
        {
        	printf("[log] - STR immediate unsigned offset\n");
            int size = (IR.getLowerData() & 0xc0000000) >> 30;
            int opc = (IR.getLowerData() & 0x00c00000) >> 22;
            int imm12 = (IR.getLowerData() & 0x003ffc00) >> 10;
            int rn = (IR.getLowerData() & 0x000003e0) >> 5;
            int rt = (IR.getLowerData() & 0x0000001f);
            
            uint64_t addr = R[rn].getData();
            uint64_t offset = (0x0000000000000fff) & (uint64_t)imm12;
            addr += offset;
            addr -= Memory[0].addr;
            
            if(size == 2)   //32 bit registers
            {
            	printf("[log] - STR immediate unsigned offset 32\n");
                int data = R[rt].getLowerData();
                uint8_t dat = (data & 0xff000000)>>24;
                    Memory[addr].setData(dat);
                    dat = (data & 0x00ff0000)>>16;
                    Memory[addr + 1].setData(dat);
                    dat = (data & 0x0000ff00)>>8;
                    Memory[addr + 2].setData(dat);
                    dat = data & 0xff0000ff;
                    Memory[addr + 3].setData(dat);
            
                
            }
            
            else        //64 bit registers
            {
            	printf("[log] - STR immediate unsigned offset 64\n");
                uint64_t data = R[rt].getData();
                uint8_t dat;
                    dat = (data & 0xff00000000000000)>>56;
                    Memory[addr].setData(dat);
                    dat = (data & 0x00ff000000000000)>>48;
                    Memory[addr + 1].setData(dat);
                    dat = (data & 0x0000ff0000000000)>>40;
                    Memory[addr + 2].setData(dat);
                    dat = (data & 0x000000ff00000000)>>32;
                    Memory[addr + 3].setData(dat);
                    dat = (data & 0x00000000ff000000)>>24;
                    Memory[addr + 4].setData(dat);
                    dat = (data & 0xff00000000ff0000)>>16;
                    Memory[addr + 5].setData(dat);
                    dat = (data & 0x000000000000ff00)>>8;
                    Memory[addr + 6].setData(dat);
                    dat = data & 0x00000000000000ff;
                    Memory[addr + 7].setData(dat);
            }
            
        }
    }
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x230, %rsp            # imm = 0x230
leaq 0x16f7e(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1000000, %eax        # imm = 0x1000000
movl %eax, -0x4(%rbp)
leaq 0x16f6a(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x400000, %eax         # imm = 0x400000
shrl $0x16, %eax
movl %eax, -0x8(%rbp)
cmpl $0x0, -0x8(%rbp)
je 0x801f
leaq 0x45b4(%rip), %rdi      # 0xb84b
movb $0x0, %al
callq 0x1030
cmpl $0x0, -0x4(%rbp)
jne 0x7b38
leaq 0x16f31(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc0000000, %eax       # imm = 0xC0000000
shrl $0x1e, %eax
movl %eax, -0xc(%rbp)
leaq 0x16f1a(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc00000, %eax         # imm = 0xC00000
shrl $0x16, %eax
movl %eax, -0x10(%rbp)
leaq 0x16f03(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1ff000, %eax         # imm = 0x1FF000
shrl $0xc, %eax
movl %eax, -0x14(%rbp)
leaq 0x16eec(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3e0, %eax            # imm = 0x3E0
shrl $0x5, %eax
movl %eax, -0x18(%rbp)
leaq 0x16ed5(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f, %eax
movl %eax, -0x1c(%rbp)
leaq 0x16ec3(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x800, %eax            # imm = 0x800
movl %eax, -0x20(%rbp)
cmpl $0x0, -0x20(%rbp)
jne 0x7735
leaq 0x4527(%rip), %rdi      # 0xb862
movb $0x0, %al
callq 0x1030
cmpl $0x2, -0xc(%rbp)
jne 0x749b
leaq 0x4531(%rip), %rdi      # 0xb884
movb $0x0, %al
callq 0x1030
movslq -0x18(%rbp), %rax
leaq 0x6d7b(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x24(%rbp)
movslq -0x14(%rbp), %rdi
movl $0x8, %esi
callq 0x1350
movl %eax, -0x28(%rbp)
movslq -0x24(%rbp), %rax
leaq 0x6e50(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movzbl %al, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movl %eax, -0x160(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
cltq
leaq 0x6e1d(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x160(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movl %eax, -0x15c(%rbp)
movl -0x24(%rbp), %eax
addl $0x2, %eax
cltq
leaq 0x6de0(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x15c(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movl %eax, -0x158(%rbp)
movl -0x24(%rbp), %eax
addl $0x3, %eax
cltq
leaq 0x6da3(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x158(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x2c(%rbp)
movslq -0x1c(%rbp), %rax
leaq 0x6c7c(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movl -0x2c(%rbp), %esi
callq 0xa730
movl -0x24(%rbp), %eax
addl -0x28(%rbp), %eax
movl %eax, -0x24(%rbp)
movslq -0x18(%rbp), %rax
leaq 0x6c59(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movl -0x24(%rbp), %esi
callq 0xa730
jmp 0x7730
leaq 0x4407(%rip), %rdi      # 0xb8a9
movb $0x0, %al
callq 0x1030
movslq -0x18(%rbp), %rax
leaq 0x6c2c(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x38(%rbp)
movslq -0x14(%rbp), %rdi
movl $0x8, %esi
callq 0x1350
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
leaq 0x6cff(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movzbl %al, %eax
cltq
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x38(%rbp), %rax
addq $0x1, %rax
leaq 0x6cc4(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x198(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x38(%rbp), %rax
addq $0x2, %rax
leaq 0x6c7c(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x190(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x188(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
leaq 0x6c34(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x188(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x38(%rbp), %rax
addq $0x4, %rax
leaq 0x6bec(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x180(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x38(%rbp), %rax
addq $0x5, %rax
leaq 0x6ba4(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x178(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x38(%rbp), %rax
addq $0x6, %rax
leaq 0x6b5c(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x170(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x38(%rbp), %rax
addq $0x7, %rax
leaq 0x6b14(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x168(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x48(%rbp)
movslq -0x1c(%rbp), %rax
leaq 0x69e7(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0x48(%rbp), %rsi
callq 0xa710
movq -0x38(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x38(%rbp)
movslq -0x18(%rbp), %rax
leaq 0x69c0(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0x38(%rbp), %rsi
callq 0xa710
jmp 0x7b33
leaq 0x4192(%rip), %rdi      # 0xb8ce
movb $0x0, %al
callq 0x1030
cmpl $0x2, -0xc(%rbp)
jne 0x789c
leaq 0x419c(%rip), %rdi      # 0xb8f0
movb $0x0, %al
callq 0x1030
movslq -0x18(%rbp), %rax
leaq 0x697a(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x4c(%rbp)
movslq -0x14(%rbp), %rdi
movl $0x8, %esi
callq 0x1350
movl %eax, -0x50(%rbp)
movl -0x4c(%rbp), %eax
addl -0x50(%rbp), %eax
movl %eax, -0x4c(%rbp)
movslq -0x18(%rbp), %rax
leaq 0x6946(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movl -0x4c(%rbp), %esi
callq 0xa730
movslq -0x4c(%rbp), %rax
leaq 0x6a2c(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movzbl %al, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl %eax, -0x1a4(%rbp)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
cltq
leaq 0x69f9(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x1a4(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl %eax, -0x1a0(%rbp)
movl -0x4c(%rbp), %eax
addl $0x2, %eax
cltq
leaq 0x69bc(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x1a0(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl %eax, -0x19c(%rbp)
movl -0x4c(%rbp), %eax
addl $0x3, %eax
cltq
leaq 0x697f(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x19c(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x54(%rbp)
movslq -0x1c(%rbp), %rax
leaq 0x6858(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movl -0x54(%rbp), %esi
callq 0xa730
jmp 0x7b31
leaq 0x4071(%rip), %rdi      # 0xb914
movb $0x0, %al
callq 0x1030
movslq -0x18(%rbp), %rax
leaq 0x682b(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x60(%rbp)
movslq -0x14(%rbp), %rdi
movl $0x8, %esi
callq 0x1350
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
addq -0x68(%rbp), %rax
movq %rax, -0x60(%rbp)
movslq -0x18(%rbp), %rax
leaq 0x67f2(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0xa710
movq -0x60(%rbp), %rax
leaq 0x68d7(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movzbl %al, %eax
cltq
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movq -0x60(%rbp), %rax
addq $0x1, %rax
leaq 0x689c(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1e0(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq -0x60(%rbp), %rax
addq $0x2, %rax
leaq 0x6854(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1d8(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x60(%rbp), %rax
addq $0x3, %rax
leaq 0x680c(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1d0(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0x60(%rbp), %rax
addq $0x4, %rax
leaq 0x67c4(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1c8(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x60(%rbp), %rax
addq $0x5, %rax
leaq 0x677c(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1c0(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movq -0x60(%rbp), %rax
addq $0x6, %rax
leaq 0x6734(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1b8(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x60(%rbp), %rax
addq $0x7, %rax
leaq 0x66ec(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1b0(%rbp), %rax
movzbl %cl, %ecx
movslq %ecx, %rcx
orq %rcx, %rax
movq %rax, -0x70(%rbp)
movslq -0x1c(%rbp), %rax
leaq 0x65bf(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0xa710
jmp 0x7b33
jmp 0x801a
leaq 0x3df9(%rip), %rdi      # 0xb938
movb $0x0, %al
callq 0x1030
leaq 0x16693(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc0000000, %eax       # imm = 0xC0000000
shrl $0x1e, %eax
movl %eax, -0x74(%rbp)
leaq 0x1667c(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc00000, %eax         # imm = 0xC00000
shrl $0x16, %eax
movl %eax, -0x78(%rbp)
leaq 0x16665(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3ffc00, %eax         # imm = 0x3FFC00
shrl $0xa, %eax
movl %eax, -0x7c(%rbp)
leaq 0x1664e(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3e0, %eax            # imm = 0x3E0
shrl $0x5, %eax
movl %eax, -0x80(%rbp)
leaq 0x16637(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f, %eax
movl %eax, -0x84(%rbp)
cmpl $0x2, -0x74(%rbp)
jne 0x7d3a
leaq 0x3d97(%rip), %rdi      # 0xb95f
movb $0x0, %al
callq 0x1030
movl -0x7c(%rbp), %eax
shll $0x2, %eax
movl %eax, -0x88(%rbp)
movslq -0x80(%rbp), %rax
leaq 0x64fa(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x90(%rbp)
movslq -0x88(%rbp), %rax
addq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
leaq 0x65c4(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movzbl %al, %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
movl %eax, -0x1ec(%rbp)
movq -0x90(%rbp), %rax
addq $0x1, %rax
leaq 0x6582(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x1ec(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
movl %eax, -0x1e8(%rbp)
movq -0x90(%rbp), %rax
addq $0x2, %rax
leaq 0x6536(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x1e8(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
shll $0x8, %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
movl %eax, -0x1e4(%rbp)
movq -0x90(%rbp), %rax
addq $0x3, %rax
leaq 0x64ea(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movl -0x1e4(%rbp), %eax
movzbl %cl, %ecx
orl %ecx, %eax
movl %eax, -0x94(%rbp)
movslq -0x84(%rbp), %rax
leaq 0x63bd(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movl -0x94(%rbp), %esi
callq 0xa730
jmp 0x8018
leaq 0x3c40(%rip), %rdi      # 0xb981
movb $0x0, %al
callq 0x1030
movl -0x7c(%rbp), %eax
shll $0x3, %eax
movl %eax, -0x98(%rbp)
movslq -0x80(%rbp), %rax
leaq 0x6381(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0xa0(%rbp)
movslq -0x98(%rbp), %rax
addq -0xa0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
leaq 0x644b(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movzbl %al, %eax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x228(%rbp)
movq -0xa0(%rbp), %rax
addq $0x1, %rax
leaq 0x6403(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x228(%rbp), %rax
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x220(%rbp)
movq -0xa0(%rbp), %rax
addq $0x2, %rax
leaq 0x63af(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x220(%rbp), %rax
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0xa0(%rbp), %rax
addq $0x3, %rax
leaq 0x635b(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x218(%rbp), %rax
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x210(%rbp)
movq -0xa0(%rbp), %rax
addq $0x4, %rax
leaq 0x6307(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x210(%rbp), %rax
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x208(%rbp)
movq -0xa0(%rbp), %rax
addq $0x5, %rax
leaq 0x62b3(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x208(%rbp), %rax
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x200(%rbp)
movq -0xa0(%rbp), %rax
addq $0x6, %rax
leaq 0x625f(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x200(%rbp), %rax
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shlq $0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq -0xa0(%rbp), %rax
addq $0x7, %rax
leaq 0x620b(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
callq 0xa6a0
movb %al, %cl
movq -0x1f8(%rbp), %rax
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movslq -0x84(%rbp), %rax
leaq 0x60db(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0xa8(%rbp), %rsi
callq 0xa710
jmp 0x801a
jmp 0x8d3c
leaq 0x3985(%rip), %rdi      # 0xb9ab
movb $0x0, %al
callq 0x1030
cmpl $0x0, -0x4(%rbp)
jne 0x890f
leaq 0x161a2(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x800, %eax            # imm = 0x800
shrl $0xb, %eax
movl %eax, -0xac(%rbp)
cmpl $0x0, -0xac(%rbp)
jne 0x84b1
leaq 0x395c(%rip), %rdi      # 0xb9c1
movb $0x0, %al
callq 0x1030
leaq 0x1616d(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc0000000, %eax       # imm = 0xC0000000
shrl $0x1e, %eax
movl %eax, -0xb0(%rbp)
leaq 0x16153(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc00000, %eax         # imm = 0xC00000
shrl $0x16, %eax
movl %eax, -0xb4(%rbp)
leaq 0x16139(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1ff000, %eax         # imm = 0x1FF000
shrl $0xc, %eax
movl %eax, -0xb8(%rbp)
leaq 0x1611f(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3e0, %eax            # imm = 0x3E0
shrl $0x5, %eax
movl %eax, -0xbc(%rbp)
leaq 0x16105(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f, %eax
movl %eax, -0xc0(%rbp)
movslq -0xb8(%rbp), %rdi
movl $0x8, %esi
callq 0x1350
movq %rax, -0xc8(%rbp)
movslq -0xbc(%rbp), %rax
leaq 0x5fd1(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0xd0(%rbp)
movq 0x60b7(%rip), %rcx      # 0xe1e0
movq -0xd0(%rbp), %rax
subq %rcx, %rax
movq %rax, -0xd0(%rbp)
cmpl $0x2, -0xb0(%rbp)
jne 0x8257
leaq 0x3895(%rip), %rdi      # 0xb9e3
movb $0x0, %al
callq 0x1030
movslq -0xc0(%rbp), %rax
leaq 0x5f7d(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0xd4(%rbp)
movl -0xd4(%rbp), %eax
andl $0xff000000, %eax       # imm = 0xFF000000
shrl $0x18, %eax
movb %al, -0xd5(%rbp)
movq -0xd0(%rbp), %rax
leaq 0x6049(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xd5(%rbp), %esi
callq 0xa670
movl -0xd4(%rbp), %eax
andl $0xff0000, %eax         # imm = 0xFF0000
sarl $0x10, %eax
movb %al, -0xd5(%rbp)
movq -0xd0(%rbp), %rax
addq $0x1, %rax
leaq 0x6010(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xd5(%rbp), %esi
callq 0xa670
movl -0xd4(%rbp), %eax
andl $0xff00, %eax           # imm = 0xFF00
sarl $0x8, %eax
movb %al, -0xd5(%rbp)
movq -0xd0(%rbp), %rax
addq $0x2, %rax
leaq 0x5fd7(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xd5(%rbp), %esi
callq 0xa670
movl -0xd4(%rbp), %eax
andl $0xff0000ff, %eax       # imm = 0xFF0000FF
movb %al, -0xd5(%rbp)
movq -0xd0(%rbp), %rax
addq $0x3, %rax
leaq 0x5fa1(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xd5(%rbp), %esi
callq 0xa670
jmp 0x8476
leaq 0x37ab(%rip), %rdi      # 0xba09
movb $0x0, %al
callq 0x1030
movslq -0xc0(%rbp), %rax
leaq 0x5e6d(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0xe0(%rbp)
movabsq $-0x100000000000000, %rax # imm = 0xFF00000000000000
andq -0xe0(%rbp), %rax
shrq $0x38, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
leaq 0x5f31(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movabsq $0xff000000000000, %rax # imm = 0xFF000000000000
andq -0xe0(%rbp), %rax
shrq $0x30, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
addq $0x1, %rax
leaq 0x5ef1(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movabsq $0xff0000000000, %rax   # imm = 0xFF0000000000
andq -0xe0(%rbp), %rax
shrq $0x28, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
addq $0x2, %rax
leaq 0x5eb1(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movabsq $0xff00000000, %rax     # imm = 0xFF00000000
andq -0xe0(%rbp), %rax
shrq $0x20, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
addq $0x3, %rax
leaq 0x5e71(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movabsq $0xff000000, %rax       # imm = 0xFF000000
andq -0xe0(%rbp), %rax
shrq $0x18, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
addq $0x4, %rax
leaq 0x5e31(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movabsq $-0xffffffff010000, %rax # imm = 0xFF00000000FF0000
andq -0xe0(%rbp), %rax
shrq $0x10, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
addq $0x5, %rax
leaq 0x5df1(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movq -0xe0(%rbp), %rax
andq $0xff00, %rax           # imm = 0xFF00
shrq $0x8, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
addq $0x6, %rax
leaq 0x5db5(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movq -0xe0(%rbp), %rax
andq $0xff, %rax
movb %al, -0xe1(%rbp)
movq -0xd0(%rbp), %rax
addq $0x7, %rax
leaq 0x5d7d(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0xe1(%rbp), %esi
callq 0xa670
movq -0xd0(%rbp), %rax
addq -0xc8(%rbp), %rax
movq %rax, -0xd0(%rbp)
movslq -0xbc(%rbp), %rax
leaq 0x5c47(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0xd0(%rbp), %rsi
callq 0xa710
jmp 0x890a
leaq 0x3576(%rip), %rdi      # 0xba2e
movb $0x0, %al
callq 0x1030
leaq 0x15d1a(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc0000000, %eax       # imm = 0xC0000000
shrl $0x1e, %eax
movl %eax, -0xe8(%rbp)
leaq 0x15d00(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc00000, %eax         # imm = 0xC00000
shrl $0x16, %eax
movl %eax, -0xec(%rbp)
leaq 0x15ce6(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1ff000, %eax         # imm = 0x1FF000
shrl $0xc, %eax
movl %eax, -0xf0(%rbp)
leaq 0x15ccc(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3e0, %eax            # imm = 0x3E0
shrl $0x5, %eax
movl %eax, -0xf4(%rbp)
leaq 0x15cb2(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f, %eax
movl %eax, -0xf8(%rbp)
movslq -0xf0(%rbp), %rdi
movl $0x8, %esi
callq 0x1350
movq %rax, -0x100(%rbp)
movslq -0xf4(%rbp), %rax
leaq 0x5b7e(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movb %al, -0x101(%rbp)
movzbl -0x101(%rbp), %eax
addq -0x100(%rbp), %rax
movb %al, -0x101(%rbp)
movq 0x5c51(%rip), %rcx      # 0xe1e0
movzbl -0x101(%rbp), %eax
subq %rcx, %rax
movb %al, -0x101(%rbp)
movslq -0xf4(%rbp), %rax
leaq 0x5b33(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movzbl -0x101(%rbp), %eax
movl %eax, %esi
callq 0xa710
cmpl $0x2, -0xe8(%rbp)
jne 0x86e2
leaq 0x3479(%rip), %rdi      # 0xba4f
movb $0x0, %al
callq 0x1030
movslq -0xf8(%rbp), %rax
leaq 0x5af5(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x108(%rbp)
movl -0x108(%rbp), %eax
andl $0xff000000, %eax       # imm = 0xFF000000
shrl $0x18, %eax
movb %al, -0x109(%rbp)
movzbl -0x101(%rbp), %eax
leaq 0x5bc1(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x109(%rbp), %esi
callq 0xa670
movl -0x108(%rbp), %eax
andl $0xff0000, %eax         # imm = 0xFF0000
sarl $0x10, %eax
movb %al, -0x109(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x1, %eax
cltq
leaq 0x5b87(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x109(%rbp), %esi
callq 0xa670
movl -0x108(%rbp), %eax
andl $0xff00, %eax           # imm = 0xFF00
sarl $0x8, %eax
movb %al, -0x109(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x2, %eax
cltq
leaq 0x5b4d(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x109(%rbp), %esi
callq 0xa670
movl -0x108(%rbp), %eax
andl $0xff0000ff, %eax       # imm = 0xFF0000FF
movb %al, -0x109(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x3, %eax
cltq
leaq 0x5b16(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x109(%rbp), %esi
callq 0xa670
jmp 0x8908
leaq 0x338a(%rip), %rdi      # 0xba73
movb $0x0, %al
callq 0x1030
movslq -0xf8(%rbp), %rax
leaq 0x59e2(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x118(%rbp)
movabsq $-0x100000000000000, %rax # imm = 0xFF00000000000000
andq -0x118(%rbp), %rax
shrq $0x38, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
leaq 0x5aa6(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
movabsq $0xff000000000000, %rax # imm = 0xFF000000000000
andq -0x118(%rbp), %rax
shrq $0x30, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x1, %eax
cltq
leaq 0x5a65(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
movabsq $0xff0000000000, %rax   # imm = 0xFF0000000000
andq -0x118(%rbp), %rax
shrq $0x28, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x2, %eax
cltq
leaq 0x5a24(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
movabsq $0xff00000000, %rax     # imm = 0xFF00000000
andq -0x118(%rbp), %rax
shrq $0x20, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x3, %eax
cltq
leaq 0x59e3(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
movabsq $0xff000000, %rax       # imm = 0xFF000000
andq -0x118(%rbp), %rax
shrq $0x18, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x4, %eax
cltq
leaq 0x59a2(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
movabsq $-0xffffffff010000, %rax # imm = 0xFF00000000FF0000
andq -0x118(%rbp), %rax
shrq $0x10, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x5, %eax
cltq
leaq 0x5961(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
movq -0x118(%rbp), %rax
andq $0xff00, %rax           # imm = 0xFF00
shrq $0x8, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x6, %eax
cltq
leaq 0x5924(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
movq -0x118(%rbp), %rax
andq $0xff, %rax
movb %al, -0x119(%rbp)
movzbl -0x101(%rbp), %eax
addl $0x7, %eax
cltq
leaq 0x58eb(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x119(%rbp), %esi
callq 0xa670
jmp 0x890a
jmp 0x8d3a
leaq 0x3181(%rip), %rdi      # 0xba97
movb $0x0, %al
callq 0x1030
leaq 0x158bc(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc0000000, %eax       # imm = 0xC0000000
shrl $0x1e, %eax
movl %eax, -0x120(%rbp)
leaq 0x158a2(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc00000, %eax         # imm = 0xC00000
shrl $0x16, %eax
movl %eax, -0x124(%rbp)
leaq 0x15888(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3ffc00, %eax         # imm = 0x3FFC00
shrl $0xa, %eax
movl %eax, -0x128(%rbp)
leaq 0x1586e(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3e0, %eax            # imm = 0x3E0
shrl $0x5, %eax
movl %eax, -0x12c(%rbp)
leaq 0x15854(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f, %eax
movl %eax, -0x130(%rbp)
movslq -0x12c(%rbp), %rax
leaq 0x5738(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x138(%rbp)
movslq -0x128(%rbp), %rax
andq $0xfff, %rax            # imm = 0xFFF
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
addq -0x138(%rbp), %rax
movq %rax, -0x138(%rbp)
movq 0x57f5(%rip), %rcx      # 0xe1e0
movq -0x138(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x138(%rbp)
cmpl $0x2, -0x120(%rbp)
jne 0x8b19
leaq 0x30ae(%rip), %rdi      # 0xbabe
movb $0x0, %al
callq 0x1030
movslq -0x130(%rbp), %rax
leaq 0x56bb(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x144(%rbp)
movl -0x144(%rbp), %eax
andl $0xff000000, %eax       # imm = 0xFF000000
shrl $0x18, %eax
movb %al, -0x145(%rbp)
movq -0x138(%rbp), %rax
leaq 0x5787(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x145(%rbp), %esi
callq 0xa670
movl -0x144(%rbp), %eax
andl $0xff0000, %eax         # imm = 0xFF0000
sarl $0x10, %eax
movb %al, -0x145(%rbp)
movq -0x138(%rbp), %rax
addq $0x1, %rax
leaq 0x574e(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x145(%rbp), %esi
callq 0xa670
movl -0x144(%rbp), %eax
andl $0xff00, %eax           # imm = 0xFF00
sarl $0x8, %eax
movb %al, -0x145(%rbp)
movq -0x138(%rbp), %rax
addq $0x2, %rax
leaq 0x5715(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x145(%rbp), %esi
callq 0xa670
movl -0x144(%rbp), %eax
andl $0xff0000ff, %eax       # imm = 0xFF0000FF
movb %al, -0x145(%rbp)
movq -0x138(%rbp), %rax
addq $0x3, %rax
leaq 0x56df(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x145(%rbp), %esi
callq 0xa670
jmp 0x8d38
leaq 0x2fc8(%rip), %rdi      # 0xbae8
movb $0x0, %al
callq 0x1030
movslq -0x130(%rbp), %rax
leaq 0x55ab(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x150(%rbp)
movabsq $-0x100000000000000, %rax # imm = 0xFF00000000000000
andq -0x150(%rbp), %rax
shrq $0x38, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
leaq 0x566f(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
movabsq $0xff000000000000, %rax # imm = 0xFF000000000000
andq -0x150(%rbp), %rax
shrq $0x30, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
addq $0x1, %rax
leaq 0x562f(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
movabsq $0xff0000000000, %rax   # imm = 0xFF0000000000
andq -0x150(%rbp), %rax
shrq $0x28, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
addq $0x2, %rax
leaq 0x55ef(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
movabsq $0xff00000000, %rax     # imm = 0xFF00000000
andq -0x150(%rbp), %rax
shrq $0x20, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
addq $0x3, %rax
leaq 0x55af(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
movabsq $0xff000000, %rax       # imm = 0xFF000000
andq -0x150(%rbp), %rax
shrq $0x18, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
addq $0x4, %rax
leaq 0x556f(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
movabsq $-0xffffffff010000, %rax # imm = 0xFF00000000FF0000
andq -0x150(%rbp), %rax
shrq $0x10, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
addq $0x5, %rax
leaq 0x552f(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
movq -0x150(%rbp), %rax
andq $0xff00, %rax           # imm = 0xFF00
shrq $0x8, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
addq $0x6, %rax
leaq 0x54f3(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
movq -0x150(%rbp), %rax
andq $0xff, %rax
movb %al, -0x151(%rbp)
movq -0x138(%rbp), %rax
addq $0x7, %rax
leaq 0x54bb(%rip), %rdi      # 0xe1e0
shlq $0x4, %rax
addq %rax, %rdi
movzbl -0x151(%rbp), %esi
callq 0xa670
jmp 0x8d3a
jmp 0x8d3c
addq $0x230, %rsp            # imm = 0x230
popq %rbp
retq
nopw %cs:(%rax,%rax)