// File: gioannides[P]Language_Processors/src/../include/ast/ast_node.hpp
// Function: DirectDeclarator::render_asm(std::basic_ofstream<char, std::char_traits<char>>&, Context&)
inline void DirectDeclarator::render_asm(std::ofstream& file,Context& contxt) {

			if(contxt.function  && round1_square2_closed3==1)
			{
				round1_square2_closed3=0;
			}
			if(round1_square2_closed3) 
			{
				

				if(round1_square2_closed3==1) //this is a  function declaration
				{
					round1_square2_closed3=0;
					contxt.function=true;	//we are in a function
					contxt.function_dec=true;	//we are declaring a function
					//contxt.funct_id=*(DirectDeclaratorPtr->IDENTIFIER);	
					DirectDeclaratorPtr->render_asm(file,contxt); //this will: contxt.funct_id=*IDENTIFIER
					round1_square2_closed3=0;
				}
				if(round1_square2_closed3==2)
				{
					if(ConstantExpRession!=NULL) //TODO: FINISH IT
					{
						contxt.LocalArray=true;
						ConstantExpRession->render_asm(file,contxt);
						contxt.LocalArray=false;
						if(contxt.ArraySize.size()){
							contxt.no_array_elements=contxt.ArraySize[contxt.ArraySize.size()-1];
							file << "\n#no_array_elements: " << contxt.no_array_elements << std::endl;
							contxt.ArraySize.pop_back();
							
						
						}
					}
					if(contxt.function && contxt.reading){
						contxt.totalStackArea+=(contxt.no_array_elements-1)*contxt.variable.word_size;
					}
					else{
						if(!contxt.reading){
						contxt.StackOffset += (contxt.no_array_elements-1)*contxt.variable.word_size;
						contxt.variable.offset = contxt.StackOffset-4;//contxt.variable.word_size;
						contxt.variable.offset = contxt.totalStackArea - contxt.variable.offset - 8; 
					}
				}
					DirectDeclaratorPtr->render_asm(file, contxt);
					
					if(!contxt.reading){
						round1_square2_closed3=0;				
					}
					//contxt.count_array_initializers=0;
					
				}
			}else if( DirectDeclaratorPtr != NULL) {
				//std::cout << "print this once" << std::endl; 
				DirectDeclaratorPtr->render_asm(file,contxt);
			}
			if( ParameterTypeLiSt != NULL) 
				{
					//std::cout << "go to parameter type list" << std::endl;
					ParameterTypeLiSt->render_asm(file,contxt);
				}
	
			if( IDENTIFIER != NULL && contxt.typedefs_){
				contxt.TypeDef.DummyName = *IDENTIFIER;
				return;

			}		
			
			
			if((!contxt.function && IDENTIFIER != NULL && !contxt.reading && !contxt.protect)) 			//if we are not in a function then this must be a global declaration
			{
				//std::cout << "it shouldn't be global!" << std::endl;
				contxt.variable.id = *IDENTIFIER;
				if( !contxt.initialized ) {				//if it is not initialized then set it to 0
					contxt.variable.value = 0;
				}
				contxt.variable.scope = "global";			//set the variable's scope as global to be saved in the bindings struct
				if(contxt.Variables.size()==0){
					contxt.Variables.push_back(contxt.variable);

				}
				else if(contxt.Variables.size()>0 && contxt.Variables[contxt.Variables.size()-1].id!=*IDENTIFIER)
				{	
					contxt.Variables.push_back(contxt.variable);
				}  
				//print_variables(contxt,file);
			}
			else if((contxt.function && IDENTIFIER != NULL && !contxt.reading)||contxt.parameter) //for parameters and local functions
			{		//if we are in a function and the identifier is not null and protect flag is off
				
				if( !contxt.protect && !contxt.parameter)// we only push the id of the functions that are defined 
				{				//then this is a function name we are reading					
					contxt.funct_id = *IDENTIFIER;		//obtain the scope we are currently in	
					contxt.Scopes.push_back(contxt.funct_id);
				}
				else
				{
					if(contxt.variable.StorageClass == "extern"){
						contxt.variable.scope = "global";
					}
					else{
						if(contxt.Scopes.size()>0){
							contxt.variable.scope = contxt.Scopes[contxt.Scopes.size()-1]; //assign the variable the scope it is in
						}
						
					}
					contxt.variable.id = *IDENTIFIER;	//if the portect flag is on then we are already inside the function , not reading the function name
					if( !contxt.initialized ) 
					{			//if the local declaration is not initialized, set it to 0
						contxt.variable.value = 0;
					}
					contxt.Variables.push_back(contxt.variable);
				}
			}
				int found_local = 0;	
				int good_index = 0;		//this will determine whether the variable wanted is a global or a local
				int i, j;				//must initialize the index i outside so it is accessible throughout here
				if(contxt.Variables.size()>0&&contxt.Scopes.size()>0)
				{
					for (j=contxt.Scopes.size()-1; j>=0; j--)
					{
						for(i=contxt.Variables.size()-1; i>=0; i--) {
							if(contxt.Variables[i].scope == contxt.Scopes[j] && IDENTIFIER!=NULL && *IDENTIFIER == contxt.Variables[i].id) 
							{
								good_index = i;
								contxt.good_i = good_index;
								found_local = 1;		//means that we found a local variable in the function of that name												good_index=i;
								i = -1;
								j = -1;						
							}
						}
					}
				}
				if(!found_local) 
				{
					for(i=0; i<contxt.Variables.size(); i++) 
					{
						if(contxt.Variables[i].scope == "global" && IDENTIFIER!=NULL && *IDENTIFIER == contxt.Variables[i].id) 
						{
							found_local=2;
							good_index = i;
							contxt.good_i = good_index;
							i = contxt.Variables.size();
						}
					}
				}   	
				if(contxt.lhs_of_assignment  && !contxt.reading && contxt.function){
					if(found_local==1) 
					{ //local
						if(contxt.initialized)
						{
							store_locals(contxt, file, good_index);
						}
						else 
						{
							if(contxt.Variables[good_index].word_size==1)
							{
								file << std::endl << "\tsb\t$0, " << contxt.Variables[good_index].offset << "($sp) #" << contxt.Variables[good_index].id << "\n";
							}
							else if( contxt.Variables[good_index].word_size==4 && !contxt.float_)
							{
								file << std::endl << "\tsw\t$0, " << contxt.Variables[good_index].offset << "($sp) #" << contxt.Variables[good_index].id << "\n"; 
							}
							else if( contxt.Variables[good_index].word_size==2 && !contxt.float_)
							{
								file << std::endl << "\tsh\t$0, " << contxt.Variables[good_index].offset << "($sp) #" << contxt.Variables[good_index].id << "\n"; 
							}
							else if( contxt.Variables[good_index].word_size==4 && contxt.float_)
							{
								file << std::endl << "\tswc1\t$0, " << contxt.Variables[good_index].offset << "($sp) #" << contxt.Variables[good_index].id << "\n"; 
							}
							
						}
					}
					else if(found_local==2) 
					{ //global
						store_globals(contxt, file, good_index);
					}	
								
					else
					{
						if(IDENTIFIER!=NULL){
							file << std::endl << "#VARIABLE : " << *IDENTIFIER << "NOT DECLARED!!!\n";
						}
					}
				}		
				

					

				
				
					
					/*else if( IDentifierList != NULL) {
						IDentifierList->render_asm(file);
					}*/

			

	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x29f71
movq -0x30(%rbp), %rax
cmpl $0x1, 0x30(%rax)
jne 0x29f71
movq -0x30(%rbp), %rax
movl $0x0, 0x30(%rax)
movq -0x30(%rbp), %rax
cmpl $0x0, 0x30(%rax)
je 0x2a174
movq -0x30(%rbp), %rax
cmpl $0x1, 0x30(%rax)
jne 0x29fc6
movq -0x30(%rbp), %rax
movl $0x0, 0x30(%rax)
movq -0x18(%rbp), %rcx
movb $0x1, 0x218(%rcx)
movq -0x18(%rbp), %rcx
movb $0x1, 0x13e7c(%rcx)
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x29f30
movq -0x30(%rbp), %rax
movl $0x0, 0x30(%rax)
movq -0x30(%rbp), %rax
cmpl $0x2, 0x30(%rax)
jne 0x2a172
movq -0x30(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2a090
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movb $0x1, 0x74(%rcx)
movq 0x8(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x11a20
movq -0x18(%rbp), %rax
movb $0x0, 0x74(%rax)
movq -0x18(%rbp), %rdi
addq $0x78, %rdi
callq 0x11a60
cmpq $0x0, %rax
je 0x2a08e
movq -0x18(%rbp), %rax
addq $0x78, %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rdi
addq $0x78, %rdi
callq 0x11a60
movq -0x38(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x11a80
movl (%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x13e8c(%rax)
movq -0x10(%rbp), %rdi
leaq 0x3a928(%rip), %rsi     # 0x64983
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x13e8c(%rax), %esi
callq 0x8730
movq %rax, %rdi
movq 0x5def4(%rip), %rsi     # 0x87f70
callq 0x8450
movq -0x18(%rbp), %rdi
addq $0x78, %rdi
callq 0x15e90
jmp 0x2a090
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x2a0d4
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
je 0x2a0d4
movq -0x18(%rbp), %rax
movl 0x13e8c(%rax), %ecx
subl $0x1, %ecx
movq -0x18(%rbp), %rax
imull 0x258(%rax), %ecx
movq -0x18(%rbp), %rax
addl 0x308(%rax), %ecx
movl %ecx, 0x308(%rax)
jmp 0x2a143
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x2a141
movq -0x18(%rbp), %rax
movl 0x13e8c(%rax), %ecx
subl $0x1, %ecx
movq -0x18(%rbp), %rax
imull 0x258(%rax), %ecx
movq -0x18(%rbp), %rax
addl 0x30c(%rax), %ecx
movl %ecx, 0x30c(%rax)
movq -0x18(%rbp), %rax
movl 0x30c(%rax), %ecx
subl $0x4, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x2a8(%rax)
movq -0x18(%rbp), %rax
movl 0x308(%rax), %ecx
movq -0x18(%rbp), %rax
subl 0x2a8(%rax), %ecx
subl $0x8, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x2a8(%rax)
jmp 0x2a143
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x29f30
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x2a170
movq -0x30(%rbp), %rax
movl $0x0, 0x30(%rax)
jmp 0x2a172
jmp 0x2a196
movq -0x30(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x2a194
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x29f30
jmp 0x2a196
movq -0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x2a1b6
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x2aac0
movq -0x30(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x2a1ef
movq -0x18(%rbp), %rax
testb $0x1, 0x1d0(%rax)
je 0x2a1ef
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rsi
movq -0x18(%rbp), %rdi
addq $0x188, %rdi            # imm = 0x188
addq $0x28, %rdi
callq 0x8060
jmp 0x2aab0
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
jne 0x2a337
movq -0x30(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x2a337
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x2a337
movq -0x18(%rbp), %rax
testb $0x1, 0x21a(%rax)
jne 0x2a337
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rsi
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x8, %rdi
callq 0x8060
movq -0x18(%rbp), %rax
testb $0x1, 0x217(%rax)
jne 0x2a269
movq -0x18(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x280(%rax)
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x30, %rdi
leaq 0x3a19e(%rip), %rsi     # 0x6441d
callq 0x8590
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
cmpq $0x0, %rax
jne 0x2a2b7
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movq -0x18(%rbp), %rsi
addq $0x258, %rsi            # imm = 0x258
callq 0x2ab20
jmp 0x2a332
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
cmpq $0x0, %rax
jbe 0x2a330
movq -0x18(%rbp), %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
movq -0x40(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0xfde0
movq %rax, %rdi
movq -0x30(%rbp), %rax
addq $0x8, %rdi
movq 0x38(%rax), %rsi
callq 0x2ab90
testb $0x1, %al
jne 0x2a315
jmp 0x2a330
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movq -0x18(%rbp), %rsi
addq $0x258, %rsi            # imm = 0x258
callq 0x2ab20
jmp 0x2a332
jmp 0x2a4b1
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x2a35c
movq -0x30(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x2a35c
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
je 0x2a36d
movq -0x18(%rbp), %rax
testb $0x1, 0x4a8(%rax)
je 0x2a4af
movq -0x18(%rbp), %rax
testb $0x1, 0x21a(%rax)
jne 0x2a3bf
movq -0x18(%rbp), %rax
testb $0x1, 0x4a8(%rax)
jne 0x2a3bf
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rsi
movq -0x18(%rbp), %rdi
addq $0x220, %rdi            # imm = 0x220
callq 0x8060
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
movq -0x18(%rbp), %rsi
addq $0x220, %rsi            # imm = 0x220
callq 0xc2e0
jmp 0x2a4ad
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x78, %rdi
leaq 0x3a00f(%rip), %rsi     # 0x643e4
callq 0x9e30
testb $0x1, %al
jne 0x2a3e0
jmp 0x2a3fd
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x30, %rdi
leaq 0x3a027(%rip), %rsi     # 0x6441d
callq 0x8590
jmp 0x2a45a
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
callq 0xbef0
cmpq $0x0, %rax
jbe 0x2a458
movq -0x18(%rbp), %rax
addq $0x460, %rax            # imm = 0x460
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
callq 0xbef0
movq -0x48(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0xbf10
movq %rax, %rsi
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x30, %rdi
callq 0x8060
jmp 0x2a45a
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rsi
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x8, %rdi
callq 0x8060
movq -0x18(%rbp), %rax
testb $0x1, 0x217(%rax)
jne 0x2a492
movq -0x18(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x280(%rax)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movq -0x18(%rbp), %rsi
addq $0x258, %rsi            # imm = 0x258
callq 0x2ab20
jmp 0x2a4af
jmp 0x2a4b1
movl $0x0, -0x1c(%rbp)
movl $0x0, -0x20(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
cmpq $0x0, %rax
jbe 0x2a602
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
callq 0xbef0
cmpq $0x0, %rax
jbe 0x2a602
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
callq 0xbef0
subq $0x1, %rax
movl %eax, -0x28(%rbp)
cmpl $0x0, -0x28(%rbp)
jl 0x2a600
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
subq $0x1, %rax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
jl 0x2a5f0
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x24(%rbp), %rsi
callq 0xfde0
addq $0x30, %rax
movq %rax, -0x50(%rbp)
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
movslq -0x28(%rbp), %rsi
callq 0xbf10
movq -0x50(%rbp), %rdi
movq %rax, %rsi
callq 0xfd50
testb $0x1, %al
jne 0x2a577
jmp 0x2a5e0
movq -0x30(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x2a5e0
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x24(%rbp), %rsi
callq 0xfde0
movq -0x58(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0xfd50
testb $0x1, %al
jne 0x2a5b8
jmp 0x2a5e0
movl -0x24(%rbp), %eax
movl %eax, -0x20(%rbp)
movl -0x20(%rbp), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x5b4(%rax)
movl $0x1, -0x1c(%rbp)
movl $0xffffffff, -0x24(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x28(%rbp) # imm = 0xFFFFFFFF
jmp 0x2a5e2
movl -0x24(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a52b
jmp 0x2a5f2
movl -0x28(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x2a50a
jmp 0x2a602
cmpl $0x0, -0x1c(%rbp)
jne 0x2a6e8
movl $0x0, -0x24(%rbp)
movslq -0x24(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
movq %rax, %rcx
movq -0x60(%rbp), %rax
cmpq %rcx, %rax
jae 0x2a6e6
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x24(%rbp), %rsi
callq 0xfde0
movq %rax, %rdi
addq $0x30, %rdi
leaq 0x39dc0(%rip), %rsi     # 0x6441d
callq 0x9e30
testb $0x1, %al
jne 0x2a668
jmp 0x2a6d6
movq -0x30(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x2a6d6
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x24(%rbp), %rsi
callq 0xfde0
movq -0x68(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0xfd50
testb $0x1, %al
jne 0x2a6a9
jmp 0x2a6d6
movl $0x2, -0x1c(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x20(%rbp)
movl -0x20(%rbp), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x5b4(%rax)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
movl %eax, -0x24(%rbp)
jmp 0x2a6d8
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a613
jmp 0x2a6e8
movq -0x18(%rbp), %rax
testb $0x1, 0x1d2(%rax)
je 0x2aab0
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x2aab0
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x2aab0
cmpl $0x1, -0x1c(%rbp)
jne 0x2aa49
movq -0x18(%rbp), %rax
testb $0x1, 0x217(%rax)
je 0x2a747
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x20(%rbp), %edx
callq 0x247d0
jmp 0x2aa47
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
cmpl $0x1, (%rax)
jne 0x2a7f2
movq -0x10(%rbp), %rdi
movq 0x5d801(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x3a21b(%rip), %rsi     # 0x64999
callq 0x8400
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0x78(%rbp), %rdi
movl 0x50(%rax), %esi
callq 0x8730
movq %rax, %rdi
leaq 0x3a013(%rip), %rsi     # 0x647c4
callq 0x8400
movq %rax, -0x70(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0x70(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x83c0
movq %rax, %rdi
leaq 0x3a1f3(%rip), %rsi     # 0x649db
callq 0x8400
jmp 0x2aa45
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
cmpl $0x4, (%rax)
jne 0x2a8b4
movq -0x18(%rbp), %rax
testb $0x1, 0x340(%rax)
jne 0x2a8b4
movq -0x10(%rbp), %rdi
movq 0x5d745(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x3a168(%rip), %rsi     # 0x649a2
callq 0x8400
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0x88(%rbp), %rdi
movl 0x50(%rax), %esi
callq 0x8730
movq %rax, %rdi
leaq 0x39f51(%rip), %rsi     # 0x647c4
callq 0x8400
movq %rax, -0x80(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0x80(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x83c0
movq %rax, %rdi
leaq 0x3a131(%rip), %rsi     # 0x649db
callq 0x8400
jmp 0x2aa43
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
cmpl $0x2, (%rax)
jne 0x2a97c
movq -0x18(%rbp), %rax
testb $0x1, 0x340(%rax)
jne 0x2a97c
movq -0x10(%rbp), %rdi
movq 0x5d683(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x3a0af(%rip), %rsi     # 0x649ab
callq 0x8400
movq %rax, -0x98(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0x98(%rbp), %rdi
movl 0x50(%rax), %esi
callq 0x8730
movq %rax, %rdi
leaq 0x39e8f(%rip), %rsi     # 0x647c4
callq 0x8400
movq %rax, -0x90(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0x90(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x83c0
movq %rax, %rdi
leaq 0x3a069(%rip), %rsi     # 0x649db
callq 0x8400
jmp 0x2aa41
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
cmpl $0x4, (%rax)
jne 0x2aa3f
movq -0x18(%rbp), %rax
testb $0x1, 0x340(%rax)
je 0x2aa3f
movq -0x10(%rbp), %rdi
movq 0x5d5bb(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x39ff0(%rip), %rsi     # 0x649b4
callq 0x8400
movq %rax, -0xa8(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0xa8(%rbp), %rdi
movl 0x50(%rax), %esi
callq 0x8730
movq %rax, %rdi
leaq 0x39dc7(%rip), %rsi     # 0x647c4
callq 0x8400
movq %rax, -0xa0(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x20(%rbp), %rsi
callq 0xfde0
movq -0xa0(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x83c0
movq %rax, %rdi
leaq 0x39fa1(%rip), %rsi     # 0x649db
callq 0x8400
jmp 0x2aa41
jmp 0x2aa43
jmp 0x2aa45
jmp 0x2aa47
jmp 0x2aaae
cmpl $0x2, -0x1c(%rbp)
jne 0x2aa61
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x20(%rbp), %edx
callq 0x256b0
jmp 0x2aaac
movq -0x30(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x2aaaa
movq -0x10(%rbp), %rdi
movq 0x5d4f9(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x39f39(%rip), %rsi     # 0x649bf
callq 0x8400
movq %rax, %rdi
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0x83c0
movq %rax, %rdi
leaq 0x39f27(%rip), %rsi     # 0x649cc
callq 0x8400
jmp 0x2aaac
jmp 0x2aaae
jmp 0x2aab0
addq $0xb0, %rsp
popq %rbp
retq
nopl (%rax)