// File: /workspace/github_cpp_makefile_star2_O2/andrakis[P]alisp/ALisp.cpp
// Function: main
int main(int argc, char **argv) {
	MainState.readFrom(argc, argv);

	ErrorCode error_code;
	switch (error_code = alisp_init()) {
		case ErrorCode::NONE:
			// All good
			break;
		default:
			std::cerr << "alisp_init() returned " << error_code << std::endl;
			return 1;
	}

	auto after_startup = Atoms::Count();
	if (MainState.debug)
		std::cerr << "(dbg) " << after_startup << " atoms created at startup." << std::endl;

	EnvironmentCell ec(std::make_shared<Environment>());
	Stdlib::add_stdlib(ec);
	// Set argv in our environment
	ec.env()->create(Atoms::Declare("argv"), ListCell(MainState.args));
	auto after_stdlib = Atoms::Count();
	if (MainState.debug)
		std::cerr << "(dbg) " << (after_stdlib - after_startup) << " atoms created at add_stdlib." << std::endl;

	if (MainState.help) {
		MainState.did_anything = true;
		show_help();
		return 1;
	} else if (MainState.tests) {
		MainState.did_anything = true;
		test();
	}
	
	if (MainState.has_file()) {
		MainState.did_anything = true;
		try {
			// Find the full path to the file
			Cell full_path = invoke_lib(file_path, StringCell(MainState.file));
			if (invoke_lib(file_exists, full_path) == False) {
				std::cerr << "Failed to open " << full_path << std::endl;
				return 2;
			}
			// Read the file
			Cell read = invoke_lib(file_read, full_path);
			// Parse the read file
			auto parse_call = Timekeeping::timeCallbackResult<Cell>([&read] () {
				return Parser::read(read.str());
			});
			Cell parsed = std::get<1>(parse_call);
			if (MainState.timing)
				std::cerr << "(tmg) Parsing took " << std::get<0>(parse_call) << Timekeeping::time_type() << std::endl;
			auto after_parsing = Atoms::Count();
			if (MainState.debug)
				std::cerr << "(dbg) " << (after_parsing - after_stdlib) << " atoms created during parsing." << std::endl;
			// Execute the code
			auto eval_call = Timekeeping::timeCallbackResult<Cell>([&parsed, &ec] () {
				return Eval::Simple::eval(parsed, ec);
			});
			if (MainState.timing)
				std::cerr << "(tmg) Execution took " << std::get<0>(eval_call) << Timekeeping::time_type() << std::endl;
			if (MainState.debug) {
				std::cerr << "(dbg) Final result: " << std::get<1>(eval_call) << std::endl;
				std::cerr << "(dbg) Final atom count: " << Atoms::Count() << std::endl;
			}
		} catch (Exception &e) {
			std::cerr << "Exception: " << e.what() << std::endl;
			return 3;
		} catch (...) {
			std::cerr << "Unknown error occurred, exception details may follow" << std::endl;
			throw;
		}
	}

	if (MainState.interactive) {
		MainState.did_anything = true;
		REPL::REPL(ec);
	}
	auto clear_time = Timekeeping::timeCall([&ec] () {
		// Clear environment
		ec.env()->clear();
		// Also clear REPL
		REPL::shutdown_repl();
	});
	if (MainState.timing)
		std::cerr << "(tmg) Cleanup took " << clear_time << Timekeeping::time_type() << std::endl;

	if (MainState.did_anything == false) {
		show_help();
		return 1;
	}

	if (debugger_attached()) {
		std::cerr << "(debugger attached) Press enter to exit";
		while (std::cin.get() != '\n') /* Nothing */;
	}
	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movq %rsi, 0x88(%rsp)
movl %edi, 0xa4(%rsp)
movb $0x1, %r14b
pushq $0x1
popq %r13
leaq 0x18(%rsp), %rbx
leaq 0x8(%rsp), %r15
cmpl 0xa4(%rsp), %r13d
jge 0x863e
movq 0x88(%rsp), %rax
movq (%rax,%r13,8), %r12
movb (%r12), %bpl
movb $0x1, %al
cmpb $0x2d, %bpl
jne 0x84dc
cmpb $0x2d, 0x1(%r12)
jne 0x84dc
cmpb $0x0, 0x2(%r12)
setne %al
andb %al, %r14b
cmpb $0x1, %r14b
jne 0x853d
movq %r12, %rdi
leaq 0x13dd9(%rip), %rsi     # 0x1c2c8
callq 0x74b0
testl %eax, %eax
je 0x8531
cmpb $0x2d, %bpl
jne 0x85ab
movzbl 0x1(%r12), %eax
cmpl $0x54, %eax
je 0x859f
cmpl $0x64, %eax
je 0x8569
cmpl $0x74, %eax
je 0x858e
cmpl $0x69, %eax
je 0x857d
cmpl $0x68, %eax
jne 0x85ab
cmpb $0x0, 0x2(%r12)
jne 0x85ab
movb $0x1, 0x232cc(%rip)     # 0x2b804
jmp 0x8605
movq %rbx, %rdi
movq %r12, %rsi
leaq 0x38(%rsp), %rdx
callq 0x7150
movq %r15, %rdi
movq %rbx, %rsi
callq 0x1549c
leaq 0x232c9(%rip), %rdi     # 0x2b828
movq %r15, %rsi
callq 0x94ca
jmp 0x85e7
cmpb $0x0, 0x2(%r12)
jne 0x85ab
movb $0x1, 0x2328b(%rip)     # 0x2b803
jmp 0x8605
cmpb $0x0, 0x2(%r12)
jne 0x85ab
movb $0x1, 0x23274(%rip)     # 0x2b800
jmp 0x8605
cmpb $0x0, 0x2(%r12)
jne 0x85ab
movb $0x1, 0x23264(%rip)     # 0x2b801
jmp 0x8605
cmpb $0x0, 0x2(%r12)
je 0x8635
callq 0x9056
testb %al, %al
je 0x860d
movq 0x88(%rsp), %rax
movq (%rax,%r13,8), %rsi
movq %rbx, %rdi
leaq 0x38(%rsp), %rdx
callq 0x7150
movq %r15, %rdi
movq %rbx, %rsi
callq 0x1549c
leaq 0x23249(%rip), %rdi     # 0x2b828
movq %r15, %rsi
callq 0x94ca
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x85f7
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x8(%rsp)
movq %rbx, %rdi
callq 0x7688
incq %r13
jmp 0x84a5
movq 0x88(%rsp), %rax
movq (%rax,%r13,8), %rsi
movq %rbx, %rdi
movq %r15, %rdx
callq 0x7150
leaq 0x231dd(%rip), %rdi     # 0x2b808
movq %rbx, %rsi
callq 0x73e0
jmp 0x85fd
movb $0x1, 0x231c6(%rip)     # 0x2b802
jmp 0x8605
callq 0x12a64
testl %eax, %eax
je 0x8676
movl %eax, %ebx
movq 0x229a0(%rip), %rdi     # 0x2aff0
leaq 0x13b39(%rip), %rsi     # 0x1c190
callq 0x72d0
movq %rax, %rdi
movl %ebx, %esi
callq 0x75e0
movq %rax, %rdi
callq 0x71a0
pushq $0x1
popq %rbp
jmp 0x8cfd
callq 0xc61c
movq %rax, %rbx
cmpb $0x1, 0x2317e(%rip)     # 0x2b803
jne 0x86bc
movq 0x22962(%rip), %rdi     # 0x2aff0
leaq 0x13b12(%rip), %rsi     # 0x1c1a7
callq 0x72d0
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7220
leaq 0x13b02(%rip), %rsi     # 0x1c1ae
movq %rax, %rdi
callq 0x72d0
movq %rax, %rdi
callq 0x71a0
leaq 0xa8(%rsp), %r14
movq %r14, %rdi
callq 0x9069
leaq 0x48(%rsp), %rdi
movq %r14, %rsi
callq 0x9084
leaq 0xb0(%rsp), %rdi
callq 0x9680
leaq 0x78(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x90a4
leaq 0x78(%rsp), %rdi
callq 0x16a34
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x870f
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x78(%rsp)
leaq 0x18(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x90d0
movq 0x18(%rsp), %r14
leaq 0x13a99(%rip), %rsi     # 0x1c1c9
leaq 0x8(%rsp), %rdi
callq 0xca36
leaq 0x230e7(%rip), %rsi     # 0x2b828
leaq 0x38(%rsp), %rdi
callq 0x92aa
movq 0x38(%rsp), %rax
leaq 0x80(%rsp), %rdx
movq %rax, (%rdx)
andq $0x0, 0x38(%rsp)
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0x90fa
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x8781
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x80(%rsp)
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x879a
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x87aa
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x20(%rsp), %rdi
callq 0x9680
callq 0xc61c
movq %rax, %r14
cmpb $0x1, 0x23040(%rip)     # 0x2b803
jne 0x87fd
movq 0x22824(%rip), %rdi     # 0x2aff0
leaq 0x139d4(%rip), %rsi     # 0x1c1a7
callq 0x72d0
movq %r14, %rsi
subq %rbx, %rsi
movq %rax, %rdi
callq 0x7220
leaq 0x139e1(%rip), %rsi     # 0x1c1ce
movq %rax, %rdi
callq 0x72d0
movq %rax, %rdi
callq 0x71a0
cmpb $0x1, 0x23000(%rip)     # 0x2b804
jne 0x8817
movb $0x1, 0x23033(%rip)     # 0x2b840
callq 0x836e
jmp 0x8cea
cmpb $0x1, 0x22fe4(%rip)     # 0x2b802
jne 0x882c
movb $0x1, 0x23019(%rip)     # 0x2b840
callq 0x1b014
callq 0x9056
testb %al, %al
je 0x8c03
movb $0x1, 0x23000(%rip)     # 0x2b840
leaq 0x22fc1(%rip), %rsi     # 0x2b808
leaq 0xb8(%rsp), %rdi
callq 0x7490
leaq 0x68(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x9368
leaq 0x10676(%rip), %rsi     # 0x18ee3
leaq 0x70(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x92ca
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x888c
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x68(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0x7688
leaq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x90a4
leaq 0x10575(%rip), %rsi     # 0x18e2a
leaq 0x18(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x9388
leaq 0x2316d(%rip), %rsi     # 0x2ba38
leaq 0x18(%rsp), %rdi
callq 0x9426
movl %eax, %ebx
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x88e7
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x18(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x88fd
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x60(%rsp)
testb %bl, %bl
je 0x8937
movq 0x226e2(%rip), %rdi     # 0x2aff0
leaq 0x138d7(%rip), %rsi     # 0x1c1ec
callq 0x72d0
leaq 0x70(%rsp), %rsi
movq %rax, %rdi
callq 0xd7dc
movq %rax, %rdi
callq 0x71a0
pushq $0x2
popq %rbp
jmp 0x8beb
leaq 0x58(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x90a4
leaq 0x10808(%rip), %rsi     # 0x19155
leaq 0x98(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x9388
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x896f
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x58(%rsp)
callq 0x7070
movq %rax, %r15
leaq 0x18(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x975c
leaq 0x38(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x1549c
leaq 0x18(%rsp), %rdi
callq 0x7688
callq 0x7070
movq %rax, %r12
leaq 0x8(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x90a4
subq %r15, %r12
movl $0xf4240, %ecx          # imm = 0xF4240
movq %r12, %rax
cqto
idivq %rcx
movq %rax, 0x10(%rsp)
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x89e4
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x90(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x90a4
cmpb $0x1, 0x22e04(%rip)     # 0x2b801
jne 0x8a4b
movq 0x225ea(%rip), %rdi     # 0x2aff0
leaq 0x137ef(%rip), %rsi     # 0x1c1fc
callq 0x72d0
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x72c0
movq %rax, %r15
leaq 0x18(%rsp), %rdi
callq 0x82ee
leaq 0x18(%rsp), %rsi
movq %r15, %rdi
callq 0x72b0
movq %rax, %rdi
callq 0x71a0
leaq 0x18(%rsp), %rdi
callq 0x7688
callq 0xc61c
cmpb $0x1, 0x22dac(%rip)     # 0x2b803
jne 0x8a94
movq %rax, %r15
movq 0x2258d(%rip), %rdi     # 0x2aff0
leaq 0x1373d(%rip), %rsi     # 0x1c1a7
callq 0x72d0
subq %r14, %r15
movq %rax, %rdi
movq %r15, %rsi
callq 0x7220
leaq 0x1378c(%rip), %rsi     # 0x1c210
movq %rax, %rdi
callq 0x72d0
movq %rax, %rdi
callq 0x71a0
callq 0x7070
movq %rax, %r14
leaq 0x18(%rsp), %rdi
leaq 0x90(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0x12cd0
callq 0x7070
movq %rax, %r15
leaq 0x38(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x90a4
subq %r14, %r15
movl $0xf4240, %ecx          # imm = 0xF4240
movq %r15, %rax
cqto
idivq %rcx
movq %rax, 0x40(%rsp)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x8aef
movq (%rdi), %rax
callq *0x10(%rax)
cmpb $0x1, 0x22d0b(%rip)     # 0x2b801
jne 0x8b44
movq 0x224f1(%rip), %rdi     # 0x2aff0
leaq 0x13729(%rip), %rsi     # 0x1c22f
callq 0x72d0
movq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x72c0
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x82ee
leaq 0x18(%rsp), %rsi
movq %r14, %rdi
callq 0x72b0
movq %rax, %rdi
callq 0x71a0
leaq 0x18(%rsp), %rdi
callq 0x7688
cmpb $0x1, 0x22cb8(%rip)     # 0x2b803
jne 0x8ba3
movq 0x2249c(%rip), %rdi     # 0x2aff0
leaq 0x136ea(%rip), %rsi     # 0x1c245
callq 0x72d0
leaq 0x38(%rsp), %rsi
movq %rax, %rdi
callq 0xd7dc
movq %rax, %rdi
callq 0x71a0
movq 0x22474(%rip), %rdi     # 0x2aff0
leaq 0x136d7(%rip), %rsi     # 0x1c25a
callq 0x72d0
movq %rax, %r14
callq 0xc61c
movq %r14, %rdi
movq %rax, %rsi
callq 0x7220
movq %rax, %rdi
callq 0x71a0
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x8bb3
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x8bc6
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x8bd6
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x8be9
movq (%rdi), %rax
callq *0x10(%rax)
xorl %ebp, %ebp
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x8bfb
movq (%rdi), %rax
callq *0x10(%rax)
testb %bl, %bl
jne 0x8ced
cmpb $0x1, 0x22bf6(%rip)     # 0x2b800
jne 0x8c42
movb $0x1, 0x22c2d(%rip)     # 0x2b840
leaq 0x50(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x90a4
leaq 0x50(%rsp), %rdi
callq 0x16409
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x8c3c
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x50(%rsp)
callq 0x7070
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x90d0
movq 0x18(%rsp), %rdi
callq 0xc604
leaq 0x20(%rsp), %rdi
callq 0x9680
callq 0x163ec
callq 0x7070
subq %rbx, %rax
movl $0xf4240, %ecx          # imm = 0xF4240
cqto
idivq %rcx
cmpb $0x1, 0x22b76(%rip)     # 0x2b801
jne 0x8cda
movq %rax, %rbx
movq 0x22359(%rip), %rdi     # 0x2aff0
leaq 0x13616(%rip), %rsi     # 0x1c2b4
callq 0x72d0
movq %rax, %rdi
movq %rbx, %rsi
callq 0x72c0
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x82ee
leaq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq 0x72b0
movq %rax, %rdi
callq 0x71a0
leaq 0x18(%rsp), %rdi
callq 0x7688
xorl %ebp, %ebp
cmpb $0x0, 0x22b5d(%rip)     # 0x2b840
jne 0x8ced
callq 0x836e
pushq $0x1
popq %rbp
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x8cfd
movq (%rdi), %rax
callq *0x10(%rax)
movl %ebp, %eax
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x8e8c
jmp 0x8e65
movq %rdx, %rbx
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x7688
jmp 0x8e92
movq %rdx, %rbx
movq %rax, %r14
movq 0x18(%rsp), %rdi
jmp 0x8e97
jmp 0x8e65
movq %rdx, %rbx
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x7688
jmp 0x8ea2
jmp 0x8e65
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8eb5
movq %rdx, %rbx
movq %rax, %r14
movq 0x38(%rsp), %rdi
jmp 0x8eba
movq %rdx, %rbx
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x7688
jmp 0x8ec5
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8ec5
movq %rdx, %rbx
movq %rax, %r14
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x8db0
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x58(%rsp)
jmp 0x8ed8
jmp 0x8e84
jmp 0x9005
movq %rax, %rbx
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x8dd8
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x50(%rsp)
jmp 0x9008
movq %rdx, %rbx
movq %rax, %r14
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x8df9
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x18(%rsp)
jmp 0x8e07
movq %rdx, %rbx
movq %rax, %r14
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x8e17
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x60(%rsp)
jmp 0x8ed8
jmp 0x8e84
movq %rdx, %rbx
movq %rax, %r14
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x8e3a
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x68(%rsp)
jmp 0x8e48
movq %rdx, %rbx
movq %rax, %r14
leaq 0xb8(%rsp), %rdi
callq 0x7688
jmp 0x8ee8
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8ee8
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8ea2
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x7688
jmp 0x9008
jmp 0x8fc3
movq %rdx, %rbx
movq %rax, %r14
jmp 0x8ed8
movq %rdx, %rbx
movq %rax, %r14
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x8ea2
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x8eb5
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x8ec5
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x8ed8
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x8ee8
movq (%rdi), %rax
callq *0x10(%rax)
movq %r14, %rdi
callq 0x7160
cmpl $0x2, %ebx
jne 0x8f36
movq %rax, %r14
movq 0x220f1(%rip), %rdi     # 0x2aff0
leaq 0x133a2(%rip), %rsi     # 0x1c2a8
callq 0x72d0
movq %rax, %rbx
movq (%r14), %rax
movq %r14, %rdi
callq *0x10(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x72d0
movq %rax, %rdi
callq 0x71a0
callq 0x75b0
pushq $0x3
jmp 0x8cec
movq 0x220b3(%rip), %rdi     # 0x2aff0
leaq 0x1332f(%rip), %rsi     # 0x1c273
callq 0x72d0
movq %rax, %rdi
callq 0x71a0
callq 0x74f0
movq %rax, %rbx
callq 0x75b0
jmp 0x9008
jmp 0x9005
movq %rax, %rbx
callq 0x75b0
jmp 0x9008
movq %rax, %rdi
callq 0x9442
movq %rax, %rbx
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x8f93
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x80(%rsp)
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x8fb1
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x8fb1
movq %rax, %rbx
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x8fc6
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x8fc6
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x9680
jmp 0x9008
jmp 0x9005
movq %rax, %rbx
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x8fe7
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x78(%rsp)
jmp 0x9008
jmp 0x9005
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x9680
jmp 0x904d
jmp 0x9005
movq %rax, %rbx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x904d
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x904d
jmp 0x9025
jmp 0x9020
jmp 0x904a
movq %rax, %rbx
jmp 0x903e
movq %rax, %rbx
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x9038
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x8(%rsp)
leaq 0x18(%rsp), %rdi
callq 0x7688
jmp 0x904d
movq %rax, %rbx
movq %rbx, %rdi
callq 0x7600
nop