// File: CobaltXII[P]cxcc/./semantic/semantic_analyzer.hpp
// Function: semantic_analyzer_t::validate_statement(statement_t*, symbol_table_t&)
bool validate_statement(statement_t* statement, symbol_table_t& symbols) {
		if (statement->type == st_compound) {
			compound_statement_t stmt = statement->compound_stmt;
			// A compound statement is invalid if any of it's child statements
			// are invalid.
			symbol_table_t new_symbols(&symbols);
			for (int i = 0; i < stmt.statements.size(); i++) {
				if (!validate_statement(stmt.statements[i], new_symbols)) {
					return false;
				}
			}
		} else if (statement->type == st_conditional) {
			conditional_statement_t stmt = statement->conditional_stmt;
			// A conditional statement is invalid if it's condition is
			// invalid.
			if (!validate_expression(stmt.condition, symbols)) {
				return false;
			}
			// A conditional statement is invalid if it's condition cannot be
			// converted to int.
			type_t condition_type = expression_type(stmt.condition, symbols);
			if (!can_convert(condition_type, {0})) {
				die("cannot convert expression of type '" + prettyprint_type(condition_type) + "' to 'int'", stmt.condition);
				return false;
			}
			// A conditional statement is invalid if it's body statement is
			// invalid.
			symbol_table_t new_symbols(&symbols);
			if (!validate_statement(stmt.body, new_symbols)) {
				return false;
			}
		} else if (statement->type == st_while) {
			while_statement_t stmt = statement->while_stmt;
			// A while statement is invalid if it's condition is invalid.
			if (!validate_expression(stmt.condition, symbols)) {
				return false;
			}
			// A while statement is invalid if it's condition cannot be
			// converted to int.
			type_t condition_type = expression_type(stmt.condition, symbols);
			if (!can_convert(condition_type, {0})) {
				die("cannot convert expression of type '" + prettyprint_type(condition_type) + "' to 'int'", stmt.condition);
				return false;
			}
			// A while statement is invalid if it's body statement is invalid.
			symbol_table_t new_symbols(&symbols);
			new_symbols.in_loop = true;
			if (!validate_statement(stmt.body, new_symbols)) {
				return false;
			}
		} else if (statement->type == st_return) {
			return_statement_t stmt = statement->return_stmt;
			// A return statement is invalid if it's value's type cannot be
			// converted to the type of the return value of the function.
			type_t value_type = expression_type(stmt.value, symbols);
			type_t return_type = symbols.fetch("__return__").type;
			if (!can_convert(value_type, return_type)) {
				die("no conversion from value of type '" + prettyprint_type(value_type) + "' to function return type '" + prettyprint_type(return_type) + "'", stmt.value);
			}
			// A return statement is invalid if it's value is invalid.
			if (!validate_expression(stmt.value, symbols)) {
				return false;
			}
		} else if (statement->type == st_variable_declaration) {
			variable_declaration_statement_t stmt = statement->variable_declaration_stmt;
			// A variable declaration statement is invalid if it's identifier
			// is a reserved identifier.
			if (is_reserved(stmt.identifier)) {
				die("cannot declare variable with reserved identifier '" + stmt.identifier + "'");
				return false;
			}
			// A variable declaration statement is invalid if it's initializer
			// is invalid.
			if (stmt.initializer) {
				if (!validate_expression(stmt.initializer, symbols)) {
					return false;
				}
			}
			// A variable declaration statement is invalid if the type of it's
			// initializer cannot be converted to it's declared type.
			if (stmt.initializer) {
				type_t initializer_type = expression_type(stmt.initializer, symbols);
				if (!can_convert(initializer_type, stmt.type)) {
					die("no conversion from initializer value of type '" + prettyprint_type(initializer_type) + "' to variable type '" + prettyprint_type(stmt.type) + "'", stmt.initializer);
					return false;
				}
			}
			// A variable declaration statement is invalid if a variable under
			// the same identifier has already been declared in the current
			// scope.
			if (symbols.exists_locally(stmt.identifier)) {
				die("redefinition of '" + stmt.identifier + "'");
				return false;
			}
			// Add the variable to the current scope.
			symbols.add_symbol(symbol_t(stmt.type, stmt.identifier));
		} else if (statement->type == st_expression) {
			expression_statement_t stmt = statement->expression_stmt;
			// An expression statement is invalid if it's expression is
			// invalid.
			if (!validate_expression(stmt.expression, symbols)) {
				return false;
			}
		} else if (statement->type == st_break ||
				   statement->type == st_continue) {
			// A break or continue statement is invalid if it is encountered
			// outside of a loop.
			if (!symbols.in_loop) {
				if (statement->type == st_break) {
					die("break statement not within loop", statement->lineno, statement->colno);
				} else {
					die("continue statement not within loop", statement->lineno, statement->colno);
				}
				return false;
			}
		}
		return true;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x9b0, %rsp            # imm = 0x9B0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x840(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x1c29b
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
leaq -0x38(%rbp), %rdi
callq 0x1d5f0
movq -0x20(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x191a0
jmp 0x1c19f
movl $0x0, -0x88(%rbp)
movslq -0x88(%rbp), %rax
movq %rax, -0x848(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x10c30
movq %rax, %rcx
movq -0x848(%rbp), %rax
cmpq %rcx, %rax
jae 0x1c25b
movslq -0x88(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x1c130
movq -0x840(%rbp), %rdi
movq (%rax), %rsi
leaq -0x78(%rbp), %rdx
callq 0x1c150
movb %al, -0x849(%rbp)
jmp 0x1c1fe
movb -0x849(%rbp), %al
testb $0x1, %al
jne 0x1c245
jmp 0x1c20a
movb $0x0, -0x1(%rbp)
movl $0x1, -0x8c(%rbp)
jmp 0x1c265
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1c28d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x19c10
jmp 0x1c28d
jmp 0x1c247
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x1c1a9
movl $0x0, -0x8c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x19c10
leaq -0x38(%rbp), %rdi
callq 0x110f0
movl -0x8c(%rbp), %eax
testl %eax, %eax
je 0x1c288
jmp 0x1c283
jmp 0x1d5d4
jmp 0x1d5d0
leaq -0x38(%rbp), %rdi
callq 0x110f0
jmp 0x1d5e2
movq -0x18(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x1c5a7
movq -0x18(%rbp), %rax
movups 0x20(%rax), %xmm0
movaps %xmm0, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x860(%rbp)
movq -0x20(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
movq %rdi, -0x858(%rbp)
callq 0x1fd20
movq -0x840(%rbp), %rdi
movq -0x860(%rbp), %rsi
movq -0x858(%rbp), %rdx
callq 0x1d620
movb %al, -0x84a(%rbp)
jmp 0x1c2fe
movb -0x84a(%rbp), %al
xorb $-0x1, %al
movb %al, -0x861(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x19c10
movb -0x861(%rbp), %al
testb $0x1, %al
jne 0x1c324
jmp 0x1c34d
movb $0x0, -0x1(%rbp)
jmp 0x1d5d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
movq -0xa0(%rbp), %rax
movq %rax, -0x880(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x128(%rbp), %rdi
movq %rdi, -0x878(%rbp)
callq 0x1fd20
movq -0x840(%rbp), %rdi
movq -0x880(%rbp), %rsi
movq -0x878(%rbp), %rdx
callq 0x1fd90
movq %rax, -0x870(%rbp)
jmp 0x1c395
movq -0x870(%rbp), %rax
movq %rax, -0xe8(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x19c10
movq -0xe8(%rbp), %rax
movq %rax, -0x130(%rbp)
movq $0x0, -0x138(%rbp)
movq -0x130(%rbp), %rdi
movq -0x138(%rbp), %rsi
callq 0x6270
testb $0x1, %al
jne 0x1c506
movq -0xe8(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x1a0(%rbp), %rsi
leaq -0x198(%rbp), %rdi
movq %rdi, -0x888(%rbp)
callq 0x6290
movq -0x888(%rbp), %rdx
leaq 0xc2d3(%rip), %rsi      # 0x286ec
leaq -0x178(%rbp), %rdi
callq 0x6fc0
jmp 0x1c427
leaq 0xc2e2(%rip), %rdx      # 0x28710
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x7160
jmp 0x1c443
movq -0x840(%rbp), %rdi
movq -0xa0(%rbp), %rdx
leaq -0x158(%rbp), %rsi
callq 0x20780
jmp 0x1c45f
leaq -0x158(%rbp), %rdi
callq 0x31c0
leaq -0x178(%rbp), %rdi
callq 0x31c0
leaq -0x198(%rbp), %rdi
callq 0x31c0
movb $0x0, -0x1(%rbp)
jmp 0x1d5d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1c4f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1c4e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x31c0
leaq -0x178(%rbp), %rdi
callq 0x31c0
leaq -0x198(%rbp), %rdi
callq 0x31c0
jmp 0x1d5e2
movq -0x20(%rbp), %rsi
leaq -0x1e0(%rbp), %rdi
movq %rdi, -0x898(%rbp)
callq 0x191a0
movq -0x840(%rbp), %rdi
movq -0x898(%rbp), %rdx
movq -0x98(%rbp), %rsi
callq 0x1c150
movb %al, -0x889(%rbp)
jmp 0x1c53f
movb -0x889(%rbp), %al
testb $0x1, %al
jne 0x1c57b
jmp 0x1c54b
movb $0x0, -0x1(%rbp)
movl $0x1, -0x8c(%rbp)
jmp 0x1c585
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
movl $0x0, -0x8c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x19c10
movl -0x8c(%rbp), %eax
testl %eax, %eax
je 0x1c5a2
jmp 0x1c59d
jmp 0x1d5d4
jmp 0x1d5ce
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x1c8ba
movq -0x18(%rbp), %rax
movups 0x30(%rax), %xmm0
movaps %xmm0, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rax
movq %rax, -0x8b0(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x230(%rbp), %rdi
movq %rdi, -0x8a8(%rbp)
callq 0x1fd20
movq -0x840(%rbp), %rdi
movq -0x8b0(%rbp), %rsi
movq -0x8a8(%rbp), %rdx
callq 0x1d620
movb %al, -0x899(%rbp)
jmp 0x1c60a
movb -0x899(%rbp), %al
xorb $-0x1, %al
movb %al, -0x8b1(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x19c10
movb -0x8b1(%rbp), %al
testb $0x1, %al
jne 0x1c630
jmp 0x1c659
movb $0x0, -0x1(%rbp)
jmp 0x1d5d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
movq -0x1f0(%rbp), %rax
movq %rax, -0x8d0(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x278(%rbp), %rdi
movq %rdi, -0x8c8(%rbp)
callq 0x1fd20
movq -0x840(%rbp), %rdi
movq -0x8d0(%rbp), %rsi
movq -0x8c8(%rbp), %rdx
callq 0x1fd90
movq %rax, -0x8c0(%rbp)
jmp 0x1c6a1
movq -0x8c0(%rbp), %rax
movq %rax, -0x238(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x19c10
movq -0x238(%rbp), %rax
movq %rax, -0x280(%rbp)
movq $0x0, -0x288(%rbp)
movq -0x280(%rbp), %rdi
movq -0x288(%rbp), %rsi
callq 0x6270
testb $0x1, %al
jne 0x1c812
movq -0x238(%rbp), %rax
movq %rax, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rsi
leaq -0x2e8(%rbp), %rdi
movq %rdi, -0x8d8(%rbp)
callq 0x6290
movq -0x8d8(%rbp), %rdx
leaq 0xbfc7(%rip), %rsi      # 0x286ec
leaq -0x2c8(%rbp), %rdi
callq 0x6fc0
jmp 0x1c733
leaq 0xbfd6(%rip), %rdx      # 0x28710
leaq -0x2a8(%rbp), %rdi
leaq -0x2c8(%rbp), %rsi
callq 0x7160
jmp 0x1c74f
movq -0x840(%rbp), %rdi
movq -0x1f0(%rbp), %rdx
leaq -0x2a8(%rbp), %rsi
callq 0x20780
jmp 0x1c76b
leaq -0x2a8(%rbp), %rdi
callq 0x31c0
leaq -0x2c8(%rbp), %rdi
callq 0x31c0
leaq -0x2e8(%rbp), %rdi
callq 0x31c0
movb $0x0, -0x1(%rbp)
jmp 0x1d5d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1c801
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1c7f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x31c0
leaq -0x2c8(%rbp), %rdi
callq 0x31c0
leaq -0x2e8(%rbp), %rdi
callq 0x31c0
jmp 0x1d5e2
movq -0x20(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movq %rdi, -0x8e8(%rbp)
callq 0x191a0
movq -0x840(%rbp), %rdi
movq -0x8e8(%rbp), %rdx
movb $0x1, -0x310(%rbp)
movq -0x1e8(%rbp), %rsi
callq 0x1c150
movb %al, -0x8d9(%rbp)
jmp 0x1c852
movb -0x8d9(%rbp), %al
testb $0x1, %al
jne 0x1c88e
jmp 0x1c85e
movb $0x0, -0x1(%rbp)
movl $0x1, -0x8c(%rbp)
jmp 0x1c898
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
movl $0x0, -0x8c(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x19c10
movl -0x8c(%rbp), %eax
testl %eax, %eax
je 0x1c8b5
jmp 0x1c8b0
jmp 0x1d5d4
jmp 0x1d5cc
movq -0x18(%rbp), %rax
cmpl $0x3, (%rax)
jne 0x1ccbe
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x338(%rbp)
movq -0x338(%rbp), %rax
movq %rax, -0x900(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x380(%rbp), %rdi
movq %rdi, -0x8f8(%rbp)
callq 0x1fd20
movq -0x840(%rbp), %rdi
movq -0x900(%rbp), %rsi
movq -0x8f8(%rbp), %rdx
callq 0x1fd90
movq %rax, -0x8f0(%rbp)
jmp 0x1c91e
movq -0x8f0(%rbp), %rax
movq %rax, -0x340(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x19c10
movq -0x20(%rbp), %rax
movq %rax, -0x910(%rbp)
leaq -0x3a9(%rbp), %rdi
movq %rdi, -0x908(%rbp)
callq 0x34d0
movq -0x908(%rbp), %rdx
leaq 0xbd63(%rip), %rsi      # 0x286c7
leaq -0x3a8(%rbp), %rdi
callq 0x6d70
jmp 0x1c972
movq -0x910(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x20800
movq %rax, -0x918(%rbp)
jmp 0x1c98e
movq -0x918(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x388(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0x31c0
leaq -0x3a9(%rbp), %rdi
callq 0x3320
movq -0x340(%rbp), %rax
movq %rax, -0x3b8(%rbp)
movq -0x388(%rbp), %rax
movq %rax, -0x3c0(%rbp)
movq -0x3b8(%rbp), %rdi
movq -0x3c0(%rbp), %rsi
callq 0x6270
testb $0x1, %al
jne 0x1cc23
movq -0x340(%rbp), %rax
movq %rax, -0x468(%rbp)
movq -0x468(%rbp), %rsi
leaq -0x460(%rbp), %rdi
movq %rdi, -0x920(%rbp)
callq 0x6290
movq -0x920(%rbp), %rdx
leaq 0xbcf7(%rip), %rsi      # 0x2871b
leaq -0x440(%rbp), %rdi
callq 0x6fc0
jmp 0x1ca32
leaq 0xbd05(%rip), %rdx      # 0x2873e
leaq -0x420(%rbp), %rdi
leaq -0x440(%rbp), %rsi
callq 0x7160
jmp 0x1ca4e
movq -0x388(%rbp), %rax
movq %rax, -0x490(%rbp)
movq -0x490(%rbp), %rsi
leaq -0x488(%rbp), %rdi
callq 0x6290
jmp 0x1ca71
leaq -0x400(%rbp), %rdi
leaq -0x420(%rbp), %rsi
leaq -0x488(%rbp), %rdx
callq 0x20910
jmp 0x1ca8d
leaq 0xbec2(%rip), %rdx      # 0x28956
leaq -0x3e0(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x7160
jmp 0x1caa9
movq -0x840(%rbp), %rdi
movq -0x338(%rbp), %rdx
leaq -0x3e0(%rbp), %rsi
callq 0x20780
jmp 0x1cac5
leaq -0x3e0(%rbp), %rdi
callq 0x31c0
leaq -0x400(%rbp), %rdi
callq 0x31c0
leaq -0x488(%rbp), %rdi
callq 0x31c0
leaq -0x420(%rbp), %rdi
callq 0x31c0
leaq -0x440(%rbp), %rdi
callq 0x31c0
leaq -0x460(%rbp), %rdi
callq 0x31c0
jmp 0x1cc23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1cb5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0x31c0
leaq -0x3a9(%rbp), %rdi
callq 0x3320
jmp 0x1d5e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1cc12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1cc06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1cbfa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1cbee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1cbe2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x31c0
leaq -0x400(%rbp), %rdi
callq 0x31c0
leaq -0x488(%rbp), %rdi
callq 0x31c0
leaq -0x420(%rbp), %rdi
callq 0x31c0
leaq -0x440(%rbp), %rdi
callq 0x31c0
leaq -0x460(%rbp), %rdi
callq 0x31c0
jmp 0x1d5e2
movq -0x338(%rbp), %rax
movq %rax, -0x938(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x4d0(%rbp), %rdi
movq %rdi, -0x930(%rbp)
callq 0x1fd20
movq -0x840(%rbp), %rdi
movq -0x938(%rbp), %rsi
movq -0x930(%rbp), %rdx
callq 0x1d620
movb %al, -0x921(%rbp)
jmp 0x1cc6a
movb -0x921(%rbp), %al
xorb $-0x1, %al
movb %al, -0x939(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x19c10
movb -0x939(%rbp), %al
testb $0x1, %al
jne 0x1cc90
jmp 0x1ccb9
movb $0x0, -0x1(%rbp)
jmp 0x1d5d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
jmp 0x1d5ca
movq -0x18(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x1d37a
movq -0x18(%rbp), %rsi
addq $0x48, %rsi
leaq -0x500(%rbp), %rdi
callq 0x209e0
leaq -0x4f8(%rbp), %rsi
leaq -0x520(%rbp), %rdi
callq 0x3130
jmp 0x1ccf4
movq -0x840(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x20a30
movb %al, -0x93a(%rbp)
jmp 0x1cd0f
leaq -0x520(%rbp), %rdi
callq 0x31c0
movb -0x93a(%rbp), %al
testb $0x1, %al
jne 0x1cd2a
jmp 0x1ce13
leaq -0x4f8(%rbp), %rdx
leaq 0xba22(%rip), %rsi      # 0x2875a
leaq -0x560(%rbp), %rdi
callq 0xeda0
jmp 0x1cd46
leaq 0xbc09(%rip), %rdx      # 0x28956
leaq -0x540(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0x7160
jmp 0x1cd62
movq -0x840(%rbp), %rdi
leaq -0x540(%rbp), %rsi
callq 0x20a90
jmp 0x1cd77
leaq -0x540(%rbp), %rdi
callq 0x31c0
leaq -0x560(%rbp), %rdi
callq 0x31c0
movb $0x0, -0x1(%rbp)
movl $0x1, -0x8c(%rbp)
jmp 0x1d30f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d369
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x31c0
jmp 0x1d369
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1ce02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x31c0
leaq -0x560(%rbp), %rdi
callq 0x31c0
jmp 0x1d369
cmpq $0x0, -0x4d8(%rbp)
je 0x1cebe
movq -0x4d8(%rbp), %rax
movq %rax, -0x948(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x5a0(%rbp), %rdi
callq 0x1fd20
jmp 0x1ce41
movq -0x948(%rbp), %rsi
movq -0x840(%rbp), %rdi
leaq -0x5a0(%rbp), %rdx
callq 0x1d620
movb %al, -0x949(%rbp)
jmp 0x1ce63
movb -0x949(%rbp), %al
xorb $-0x1, %al
movb %al, -0x94a(%rbp)
leaq -0x5a0(%rbp), %rdi
callq 0x19c10
movb -0x94a(%rbp), %al
testb $0x1, %al
jne 0x1ce89
jmp 0x1cebc
movb $0x0, -0x1(%rbp)
movl $0x1, -0x8c(%rbp)
jmp 0x1d30f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x5a0(%rbp), %rdi
callq 0x19c10
jmp 0x1d369
jmp 0x1cebe
cmpq $0x0, -0x4d8(%rbp)
je 0x1d163
movq -0x4d8(%rbp), %rax
movq %rax, -0x958(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x5e8(%rbp), %rdi
callq 0x1fd20
jmp 0x1ceec
movq -0x958(%rbp), %rsi
movq -0x840(%rbp), %rdi
leaq -0x5e8(%rbp), %rdx
callq 0x1fd90
movq %rax, -0x960(%rbp)
jmp 0x1cf0f
movq -0x960(%rbp), %rax
movq %rax, -0x5a8(%rbp)
leaq -0x5e8(%rbp), %rdi
callq 0x19c10
movq -0x5a8(%rbp), %rax
movq %rax, -0x5f0(%rbp)
movq -0x500(%rbp), %rax
movq %rax, -0x5f8(%rbp)
movq -0x5f0(%rbp), %rdi
movq -0x5f8(%rbp), %rsi
callq 0x6270
testb $0x1, %al
jne 0x1d161
movq -0x5a8(%rbp), %rax
movq %rax, -0x6a0(%rbp)
movq -0x6a0(%rbp), %rsi
leaq -0x698(%rbp), %rdi
callq 0x6290
jmp 0x1cf83
leaq 0xb803(%rip), %rsi      # 0x2878d
leaq -0x678(%rbp), %rdi
leaq -0x698(%rbp), %rdx
callq 0x6fc0
jmp 0x1cf9f
leaq 0xb816(%rip), %rdx      # 0x287bc
leaq -0x658(%rbp), %rdi
leaq -0x678(%rbp), %rsi
callq 0x7160
jmp 0x1cfbb
movq -0x500(%rbp), %rax
movq %rax, -0x6c8(%rbp)
movq -0x6c8(%rbp), %rsi
leaq -0x6c0(%rbp), %rdi
callq 0x6290
jmp 0x1cfde
leaq -0x638(%rbp), %rdi
leaq -0x658(%rbp), %rsi
leaq -0x6c0(%rbp), %rdx
callq 0x20910
jmp 0x1cffa
leaq 0xb955(%rip), %rdx      # 0x28956
leaq -0x618(%rbp), %rdi
leaq -0x638(%rbp), %rsi
callq 0x7160
jmp 0x1d016
movq -0x840(%rbp), %rdi
movq -0x4d8(%rbp), %rdx
leaq -0x618(%rbp), %rsi
callq 0x20780
jmp 0x1d032
leaq -0x618(%rbp), %rdi
callq 0x31c0
leaq -0x638(%rbp), %rdi
callq 0x31c0
leaq -0x6c0(%rbp), %rdi
callq 0x31c0
leaq -0x658(%rbp), %rdi
callq 0x31c0
leaq -0x678(%rbp), %rdi
callq 0x31c0
leaq -0x698(%rbp), %rdi
callq 0x31c0
movb $0x0, -0x1(%rbp)
movl $0x1, -0x8c(%rbp)
jmp 0x1d30f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x5e8(%rbp), %rdi
callq 0x19c10
jmp 0x1d369
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d150
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d144
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d138
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d12c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d120
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x618(%rbp), %rdi
callq 0x31c0
leaq -0x638(%rbp), %rdi
callq 0x31c0
leaq -0x6c0(%rbp), %rdi
callq 0x31c0
leaq -0x658(%rbp), %rdi
callq 0x31c0
leaq -0x678(%rbp), %rdi
callq 0x31c0
leaq -0x698(%rbp), %rdi
callq 0x31c0
jmp 0x1d369
jmp 0x1d163
movq -0x20(%rbp), %rax
movq %rax, -0x968(%rbp)
leaq -0x4f8(%rbp), %rsi
leaq -0x6e8(%rbp), %rdi
callq 0x3130
jmp 0x1d183
movq -0x968(%rbp), %rdi
leaq -0x6e8(%rbp), %rsi
callq 0x20ad0
movb %al, -0x969(%rbp)
jmp 0x1d19e
leaq -0x6e8(%rbp), %rdi
callq 0x31c0
movb -0x969(%rbp), %al
testb $0x1, %al
jne 0x1d1b9
jmp 0x1d28e
leaq -0x4f8(%rbp), %rdx
leaq 0xb60a(%rip), %rsi      # 0x287d1
leaq -0x728(%rbp), %rdi
callq 0xeda0
jmp 0x1d1d5
leaq 0xb77a(%rip), %rdx      # 0x28956
leaq -0x708(%rbp), %rdi
leaq -0x728(%rbp), %rsi
callq 0x7160
jmp 0x1d1f1
movq -0x840(%rbp), %rdi
leaq -0x708(%rbp), %rsi
callq 0x20a90
jmp 0x1d206
leaq -0x708(%rbp), %rdi
callq 0x31c0
leaq -0x728(%rbp), %rdi
callq 0x31c0
movb $0x0, -0x1(%rbp)
movl $0x1, -0x8c(%rbp)
jmp 0x1d30f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x31c0
jmp 0x1d369
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d27d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x708(%rbp), %rdi
callq 0x31c0
leaq -0x728(%rbp), %rdi
callq 0x31c0
jmp 0x1d369
movq -0x20(%rbp), %rax
movq %rax, -0x978(%rbp)
movq -0x500(%rbp), %rax
movq %rax, -0x780(%rbp)
leaq -0x4f8(%rbp), %rsi
leaq -0x7a0(%rbp), %rdi
callq 0x3130
jmp 0x1d2bc
movq -0x780(%rbp), %rsi
leaq -0x778(%rbp), %rdi
leaq -0x7a0(%rbp), %rdx
callq 0x1c0a0
jmp 0x1d2d8
movq -0x978(%rbp), %rdi
leaq -0x778(%rbp), %rsi
callq 0x19230
jmp 0x1d2ed
leaq -0x778(%rbp), %rdi
callq 0x193b0
leaq -0x7a0(%rbp), %rdi
callq 0x31c0
movl $0x0, -0x8c(%rbp)
leaq -0x500(%rbp), %rdi
callq 0x112c0
movl -0x8c(%rbp), %eax
testl %eax, %eax
je 0x1d32c
jmp 0x1d327
jmp 0x1d5d4
jmp 0x1d5c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d35d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x778(%rbp), %rdi
callq 0x193b0
leaq -0x7a0(%rbp), %rdi
callq 0x31c0
leaq -0x500(%rbp), %rdi
callq 0x112c0
jmp 0x1d5e2
movq -0x18(%rbp), %rax
cmpl $0x6, (%rax)
jne 0x1d431
movq -0x18(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x7a8(%rbp)
movq -0x7a8(%rbp), %rax
movq %rax, -0x990(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x7e8(%rbp), %rdi
movq %rdi, -0x988(%rbp)
callq 0x1fd20
movq -0x840(%rbp), %rdi
movq -0x990(%rbp), %rsi
movq -0x988(%rbp), %rdx
callq 0x1d620
movb %al, -0x979(%rbp)
jmp 0x1d3dd
movb -0x979(%rbp), %al
xorb $-0x1, %al
movb %al, -0x991(%rbp)
leaq -0x7e8(%rbp), %rdi
callq 0x19c10
movb -0x991(%rbp), %al
testb $0x1, %al
jne 0x1d403
jmp 0x1d42c
movb $0x0, -0x1(%rbp)
jmp 0x1d5d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x7e8(%rbp), %rdi
callq 0x19c10
jmp 0x1d5e2
jmp 0x1d5c6
movq -0x18(%rbp), %rax
cmpl $0x7, (%rax)
je 0x1d447
movq -0x18(%rbp), %rax
cmpl $0x8, (%rax)
jne 0x1d5c4
movq -0x20(%rbp), %rax
testb $0x1, 0x20(%rax)
jne 0x1d5c2
movq -0x18(%rbp), %rax
cmpl $0x7, (%rax)
jne 0x1d512
leaq -0x809(%rbp), %rdi
movq %rdi, -0x9a0(%rbp)
callq 0x34d0
movq -0x9a0(%rbp), %rdx
leaq 0xb360(%rip), %rsi      # 0x287e3
leaq -0x808(%rbp), %rdi
callq 0x6d70
jmp 0x1d491
movq -0x840(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x80(%rax), %rdx
movq 0x88(%rax), %rcx
leaq -0x808(%rbp), %rsi
callq 0x1bac0
jmp 0x1d4b8
leaq -0x808(%rbp), %rdi
callq 0x31c0
leaq -0x809(%rbp), %rdi
callq 0x3320
jmp 0x1d5bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d501
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x808(%rbp), %rdi
callq 0x31c0
leaq -0x809(%rbp), %rdi
callq 0x3320
jmp 0x1d5e2
leaq -0x831(%rbp), %rdi
movq %rdi, -0x9a8(%rbp)
callq 0x34d0
movq -0x9a8(%rbp), %rdx
leaq 0xb2d0(%rip), %rsi      # 0x28803
leaq -0x830(%rbp), %rdi
callq 0x6d70
jmp 0x1d541
movq -0x840(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x80(%rax), %rdx
movq 0x88(%rax), %rcx
leaq -0x830(%rbp), %rsi
callq 0x1bac0
jmp 0x1d568
leaq -0x830(%rbp), %rdi
callq 0x31c0
leaq -0x831(%rbp), %rdi
callq 0x3320
jmp 0x1d5bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x1d5ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x830(%rbp), %rdi
callq 0x31c0
leaq -0x831(%rbp), %rdi
callq 0x3320
jmp 0x1d5e2
movb $0x0, -0x1(%rbp)
jmp 0x1d5d4
jmp 0x1d5c4
jmp 0x1d5c6
jmp 0x1d5c8
jmp 0x1d5ca
jmp 0x1d5cc
jmp 0x1d5ce
jmp 0x1d5d0
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x9b0, %rsp            # imm = 0x9B0
popq %rbp
retq
movq -0x80(%rbp), %rdi
callq 0x34c0
nopl (%rax,%rax)