// File: /workspace/github_cpp_makefile_star2_O3/AndrewAlbert[P]Compiler-Theory/SourceCode/codeGenerator.cpp
// Function: codeGenerator::evalExpr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, int, int, int)
string codeGenerator::evalExpr( string op, int size_left, int size_right, int type_left, int type_right ){
	if( !ShouldGenerate() ) return "";
	string lhs, rhs, result;
	int i, type_result;
	bool checkBool = false;
	// Ensure sizes are at least 1 so that loops will execute for scalars
	if( size_left == 0 ) size_left++;
	if( size_right == 0 ) size_right++;
	
	/* Invalidate OUT/INOUT arguments since an expresion such as <Name> * 2 has occurred
	 * there is no return value now and so there is no location to put an OUT argument */
	if( checkArguments() ) invalidateArgument();
	
	//Select int registers or float registers to put the result in
	if( type_left != type_right ){
		if( ( type_left == TYPE_FLOAT ) || ( type_right == TYPE_FLOAT ) ){ 
			type_result = TYPE_FLOAT;
		}
		else if( ( type_left == TYPE_BOOL ) || ( type_right == TYPE_BOOL ) ){
			type_result = TYPE_BOOL;
			if( (type_left == TYPE_INTEGER ) || (type_right == TYPE_INTEGER) ) checkBool = true;
		}
		else type_result = TYPE_INTEGER;
	}
	else type_result = type_left;

	// Convert operations for bitwise or boolean comparison to the correct C operator
	if(op.compare("&") == 0){ 
		if( (type_left == TYPE_BOOL) || (type_right == TYPE_BOOL) ){
			op = "&&";
			// add runtime check for integer/bool
		}
		else op = "&";
	}
	else if(op.compare("|") == 0){ 
		if( (type_left == TYPE_BOOL) || (type_right == TYPE_BOOL) ){
			op = "||";
			// add runtime check for integer/bool
		}
		else op = "|";
	}
	else if(op.compare("NOT") == 0){
		if( (type_left == TYPE_BOOL) || (type_right == TYPE_BOOL) ){
			op = "!";
			// add runtime check for integer/bool
		}
		else op = "~";
	}

	// Push the LHS and RHS operands to their respective stacks and then result to exprStack
	if( ( size_left > 1 ) && ( size_right > 1) ){
		// If LHS and RHS are both arrays ( same size checked by parser )
		for( i = 0; i < size_right; i++ ){
			rhs = popStack('E', type_right);
			pushStack(rhs, 'R', type_right);
		}
		for( i = 0; i < size_left; i++ ){
			lhs = popStack('E', type_left);
			pushStack(lhs, 'L', type_left);
		}
		for( i = 0; i < size_left; i++ ){
			rhs = popStack('R', type_right);
			lhs = popStack('L', type_left);
			result = newRegister(type_result);
			pushStack( result, 'E', type_result );
			if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
			fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
		}
	}
	else if( size_left > 1 ){
		// If LHS is an array and RHS is a single value
		rhs = popStack('E', type_right);
		for( i = 0; i < size_left; i++ ){
			lhs = popStack('E', type_left);
			pushStack(lhs, 'L', type_left);
		}
		for( i = 0; i < size_left; i++ ){
			lhs = popStack('L', type_left);
			result = newRegister(type_result);
			pushStack( result, 'E', type_result );
			if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
			fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
		}
	}
	else if( size_right > 1 ){
		// If LHS is a single value and RHS is an array
		for( i = 0; i < size_right; i++ ){
			rhs = popStack('R', type_right);
			pushStack(rhs, 'R', type_right);
		}
		lhs = popStack('E', type_left);
		for( i = 0; i < size_right; i++ ){
			rhs = popStack('R', type_right);
			result = newRegister(type_result);
			pushStack( result, 'E', type_result );
			if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
			fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
		}
	}
	else{
		// If LHS and RHS are both single values
		rhs = popStack('E', type_right);
		lhs = popStack('E', type_left);
		result = newRegister(type_result);
		pushStack( result, 'E', type_result );
		if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
		fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
	}
	return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movl %r9d, 0x30(%rsp)
movq %rdi, %rbx
cmpb $0x0, 0x330(%rsi)
je 0x11e87
movl %r8d, %r13d
movl %ecx, %r12d
movq %rdx, %r14
movq %rsi, %r15
movl 0x1d0(%rsp), %esi
leaq 0x80(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x60(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x10(%rbx), %rbp
movq %rbp, (%rbx)
movq %rax, 0x8(%rbx)
movq %rbx, 0x40(%rsp)
movb %al, 0x10(%rbx)
cmpl $0x1, %r12d
adcl $0x0, %r12d
cmpl $0x1, %r8d
adcl $0x0, %r13d
cmpb $0x1, 0x2b6(%r15)
jne 0x11e71
cmpb $0x0, 0x2b7(%r15)
jne 0x11e71
movb $0x1, 0x2b7(%r15)
movl 0x30(%rsp), %edx
cmpl %esi, %edx
jne 0x11ea5
movl $0x0, 0xc(%rsp)
movl %edx, 0x8(%rsp)
jmp 0x11f02
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x8ac8(%rip), %rdx      # 0x1a95d
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x3c42
jmp 0x129ce
movl $0x10b, %ecx            # imm = 0x10B
cmpl %ecx, %edx
sete %al
movl $0x10b, 0x8(%rsp)       # imm = 0x10B
cmpl %ecx, %esi
sete %cl
orb %al, %cl
jne 0x11efa
movl $0x10c, %ecx            # imm = 0x10C
cmpl %ecx, %edx
setne %al
movl $0x10c, 0x8(%rsp)       # imm = 0x10C
cmpl %ecx, %esi
setne %cl
testb %cl, %al
jne 0x11ef2
movl $0x10a, %eax            # imm = 0x10A
cmpl %eax, %edx
sete %cl
cmpl %eax, %esi
sete %al
orb %cl, %al
movl %eax, 0xc(%rsp)
jmp 0x11f02
movl $0x10a, 0x8(%rsp)       # imm = 0x10A
movl $0x0, 0xc(%rsp)
leaq 0x8ee8(%rip), %rbx      # 0x1adf1
movq %r14, %rdi
movq %rbx, %rsi
callq 0x20a0
testl %eax, %eax
je 0x11f73
leaq 0x8ed5(%rip), %rbx      # 0x1adf4
movq %r14, %rdi
movq %rbx, %rsi
callq 0x20a0
testl %eax, %eax
je 0x11f94
leaq 0x71bf(%rip), %rsi      # 0x190f4
movq %r14, %rdi
callq 0x20a0
testl %eax, %eax
jne 0x11fcf
movl $0x10c, %eax            # imm = 0x10C
cmpl %eax, 0x1d0(%rsp)
leaq 0x8a34(%rip), %rcx      # 0x1a98c
leaq 0x8e97(%rip), %rbx      # 0x1adf6
cmoveq %rcx, %rbx
cmpl %eax, 0x30(%rsp)
cmoveq %rcx, %rbx
movl $0x1, %r8d
jmp 0x11fbe
movl $0x10c, %eax            # imm = 0x10C
cmpl %eax, 0x30(%rsp)
sete %cl
cmpl %eax, 0x1d0(%rsp)
sete %al
orb %cl, %al
leaq 0x8e5e(%rip), %rcx      # 0x1adf0
jmp 0x11fb3
movl $0x10c, %eax            # imm = 0x10C
cmpl %eax, 0x30(%rsp)
sete %cl
cmpl %eax, 0x1d0(%rsp)
sete %al
orb %cl, %al
leaq 0x8e40(%rip), %rcx      # 0x1adf3
cmovneq %rcx, %rbx
movzbl %al, %r8d
incq %r8
movq 0x8(%r14), %rdx
movq %r14, %rdi
xorl %esi, %esi
movq %rbx, %rcx
callq 0x22e0
cmpl $0x2, %r12d
setl %al
cmpl $0x2, %r13d
setl %cl
orb %al, %cl
jne 0x1230c
movq %r14, 0x90(%rsp)
movq %rbp, 0x48(%rsp)
leaq 0x188(%rsp), %rbp
leaq 0x180(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbx
leaq 0x178(%rsp), %r14
movq %rbx, %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11a5e
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x12053
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, 0x178(%rsp)
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x12087
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x17610
movq 0x178(%rsp), %rdi
cmpq %rbp, %rdi
je 0x120a4
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x2200
decl %r13d
jne 0x12013
leaq 0x168(%rsp), %r14
leaq 0x1d0(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbx
leaq 0x158(%rsp), %rbp
movl %r12d, %r13d
movq %rbx, %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11a5e
leaq 0x70(%rsp), %rdi
movq %rbx, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1210e
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r14, 0x158(%rsp)
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x12142
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0x17610
movq 0x158(%rsp), %rdi
cmpq %r14, %rdi
je 0x1215f
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x2200
decl %r13d
jne 0x120d1
leaq 0x148(%rsp), %rbx
leaq 0x130(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbp
leaq 0x138(%rsp), %r14
movq 0x40(%rsp), %r13
movq %rbp, %rdi
movq %r15, %rsi
movl $0x52, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11a5e
leaq 0x50(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x121ce
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, %rdi
movq %r15, %rsi
movl $0x4c, %edx
movl 0x30(%rsp), %ecx
callq 0x11a5e
leaq 0x70(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1220b
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12baa
movq %r13, %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x12241
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbx, 0x138(%rsp)
movq (%r13), %rsi
movq 0x8(%r13), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x1228d
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x17610
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x12286
incl 0x124(%r15)
jmp 0x1228d
incl 0x120(%r15)
movq 0x138(%rsp), %rdi
cmpq %rbx, %rdi
je 0x122aa
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
je 0x122d0
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x8b2f(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq (%r13), %rdx
movq 0x70(%rsp), %rcx
movq 0x90(%rsp), %rax
movq (%rax), %r8
movq 0x50(%rsp), %r9
leaq 0x8b1d(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
decl %r12d
jne 0x1218e
jmp 0x1298b
cmpl $0x2, %r12d
jl 0x12586
movq %r14, 0x90(%rsp)
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x1d0(%rsp), %ecx
movq %rbp, 0x48(%rsp)
callq 0x11a5e
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %r14
movq %r14, %rsi
callq 0x2270
movq (%r14), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x12368
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x128(%rsp), %r14
leaq 0x1d0(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbp
leaq 0x118(%rsp), %r13
movl %r12d, %ebx
movq %rbp, %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11a5e
leaq 0x70(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x123c9
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r14, 0x118(%rsp)
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x123fd
movq 0x38(%rsp), %rdi
movq %r13, %rsi
callq 0x17610
movq 0x118(%rsp), %rdi
cmpq %r14, %rdi
je 0x1241a
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x2200
decl %ebx
jne 0x1238c
leaq 0x108(%rsp), %r13
leaq 0x130(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbp
leaq 0xf8(%rsp), %r14
leaq 0x20(%rsp), %rbx
movq %rbp, %rdi
movq %r15, %rsi
movl $0x4c, %edx
movl 0x30(%rsp), %ecx
callq 0x11a5e
leaq 0x70(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12480
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12baa
movq 0x40(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x124b3
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r13, 0xf8(%rsp)
movq 0x40(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x12503
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x17610
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x124fc
incl 0x124(%r15)
jmp 0x12503
incl 0x120(%r15)
movq 0xf8(%rsp), %rdi
cmpq %r13, %rdi
je 0x12520
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
je 0x12546
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x88b9(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq 0x40(%rsp), %rax
movq (%rax), %rdx
movq 0x70(%rsp), %rcx
movq 0x90(%rsp), %rax
movq (%rax), %r8
movq 0x50(%rsp), %r9
leaq 0x88a3(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
decl %r12d
jne 0x12448
jmp 0x1298b
cmpl $0x2, %r13d
jl 0x12800
movq %r14, 0x90(%rsp)
movq %rbp, 0x48(%rsp)
leaq 0xe8(%rsp), %rbx
leaq 0x180(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %r12
leaq 0xd8(%rsp), %rbp
movl %r13d, %r14d
movq %r12, %rdi
movq %r15, %rsi
movl $0x52, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11a5e
leaq 0x50(%rsp), %rdi
movq %r12, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x12601
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbx, 0xd8(%rsp)
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x12635
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0x17610
movq 0xd8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12652
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x2200
decl %r14d
jne 0x125c1
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11a5e
leaq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %r12
movq %r12, %rsi
callq 0x2270
movq (%r12), %rdi
leaq 0x20(%rsp), %rbx
cmpq %rbx, %rdi
je 0x1269e
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0xc8(%rsp), %r12
leaq 0x130(%r15), %rax
movq %rax, 0x30(%rsp)
leaq 0x10(%rsp), %r14
leaq 0xb8(%rsp), %rbp
movq %r14, %rdi
movq %r15, %rsi
movl $0x52, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11a5e
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x126fa
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r14, %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12baa
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x1272d
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r12, 0xb8(%rsp)
movq 0x40(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x1277d
movq 0x30(%rsp), %rdi
movq %rbp, %rsi
callq 0x17610
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x12776
incl 0x124(%r15)
jmp 0x1277d
incl 0x120(%r15)
movq 0xb8(%rsp), %rdi
cmpq %r12, %rdi
je 0x1279a
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
je 0x127c0
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x863f(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq 0x40(%rsp), %rax
movq (%rax), %rdx
movq 0x70(%rsp), %rcx
movq 0x90(%rsp), %rax
movq (%rax), %r8
movq 0x50(%rsp), %r9
leaq 0x8629(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
decl %r13d
jne 0x126bf
jmp 0x1298b
movq %r14, %r13
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11a5e
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rbx
movq %rbx, %rsi
callq 0x2270
movq (%rbx), %rdi
leaq 0x20(%rsp), %r14
cmpq %r14, %rdi
movq 0x40(%rsp), %r12
je 0x1284d
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11a5e
leaq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %rbx
movq %rbx, %rsi
callq 0x2270
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x1288a
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12baa
leaq 0x10(%rsp), %rbx
movq %r12, %rdi
movq %rbx, %rsi
callq 0x2270
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x128c0
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0xa8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq 0x98(%rsp), %rdi
callq 0x3bac
cmpb $0x1, 0x330(%r15)
jne 0x1291d
leaq 0x130(%r15), %rdi
leaq 0x98(%rsp), %rsi
callq 0x17610
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x12916
incl 0x124(%r15)
jmp 0x1291d
incl 0x120(%r15)
movq 0x98(%rsp), %rdi
cmpq %rbx, %rdi
je 0x1293a
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
movq 0x40(%rsp), %rbx
je 0x12965
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x849a(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq (%rbx), %rdx
movq 0x70(%rsp), %rcx
movq (%r13), %r8
movq 0x50(%rsp), %r9
leaq 0x8490(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x129a7
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
movq 0x40(%rsp), %rbx
je 0x129ce
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbx, %rax
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbp, 0x48(%rsp)
movq %rax, %r15
movq 0x98(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12b27
movq 0xa8(%rsp), %rsi
jmp 0x12b0c
jmp 0x12b24
jmp 0x12a19
jmp 0x12a19
jmp 0x12a19
jmp 0x12b24
movq %rbp, 0x48(%rsp)
jmp 0x12b24
movq %rax, %r15
movq 0xb8(%rsp), %rdi
cmpq %r12, %rdi
je 0x12b27
movq 0xc8(%rsp), %rsi
jmp 0x12b0c
movq %rax, %r15
movq 0xd8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12b27
movq 0xe8(%rsp), %rsi
jmp 0x12b0c
jmp 0x12b24
jmp 0x12b24
jmp 0x12b24
movq %rax, %r15
movq 0xf8(%rsp), %rdi
cmpq %r13, %rdi
je 0x12b27
movq 0x108(%rsp), %rsi
jmp 0x12b0c
jmp 0x12b24
jmp 0x12b24
movq %rax, %r15
movq 0x118(%rsp), %rdi
cmpq %r14, %rdi
je 0x12b27
movq 0x128(%rsp), %rsi
jmp 0x12b0c
movq %rax, %r15
movq 0x138(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12b27
movq 0x148(%rsp), %rsi
jmp 0x12b0c
jmp 0x12b24
jmp 0x12b24
jmp 0x12b24
movq %rax, %r15
movq 0x158(%rsp), %rdi
cmpq %r14, %rdi
je 0x12b27
movq 0x168(%rsp), %rsi
jmp 0x12b0c
jmp 0x12b24
jmp 0x12b24
movq %rax, %r15
movq 0x178(%rsp), %rdi
cmpq %rbp, %rdi
je 0x12b27
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x12b27
jmp 0x12b24
jmp 0x12b24
jmp 0x12b24
jmp 0x12b24
jmp 0x12b24
jmp 0x12b24
jmp 0x12b24
movq %rax, %r15
movq 0x40(%rsp), %rax
movq (%rax), %rdi
movq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x12b44
movq (%rax), %rsi
incq %rsi
callq 0x2200
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x12b60
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x12b82
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r15, %rdi
callq 0x2330