// File: /workspace/github_cpp_makefile_star2_O2/andrakis[P]alisp/eval_simple.cpp
// Function: ALisp::Eval::Simple::eval(ALisp::Cell const&, ALisp::Cell const&)
Cell eval(const Cell &_x, const Cell &_env) {
				Cell x = _x;
				Cell env = _env;
			recurse:
				switch (x.type()) {
					case CellType::Atom:
						return env.env()->get(x.atomId());
					case CellType::String:
					case CellType::Integer:
					case CellType::Float:
						return x;
				}
				if (x.empty()) return Nil;

				const Cell sym = x.head();
				if (sym.type() == CellType::Atom) {
					const AtomType id = sym.atomId();
					if (id == _quote) {				// (quote exp)
						return x.index(1);
					} else if (id == _if) {			// (if test conseq [alt])
						const Cell test = x.index(1);
						const Cell conseq = x.index(2);
						const Cell alt = x.index(3); // default: Nil
						const Cell result = eval(test, env);
						x = (result == False) ? alt : conseq;
						goto recurse;
					} else if (id == _define) {		// (define var exp) - create new variable
						AtomType newid = x.index(1).atomId();
						x = eval(x.index(2), env);
						env.env()->create(newid, x);
						return x;
					} else if (id == _set) {		// (set! var exp) - update existing variable
						AtomType newid = x.index(1).atomId();
						x = eval(x.index(2), env);
						env.env()->set(newid, x);
						return x;
					} else if (id == _lambda) {		// (lambda (var*) exp)
						LambdaCell lambda;
						lambda.lambda_ptr(env);
						lambda.lambda_args(x.index(1));
						lambda.lambda_body(x.index(2));
						return lambda;
					} else if (id == _macro) {		// (macro (var*) exp)
						MacroCell macro;
						macro.lambda_ptr(env);
						macro.lambda_args(x.index(1));
						macro.lambda_body(x.index(2));
						return macro;
					} else if (id == _begin) {		// (begin exp*)
						auto it = x.cbegin() + 1;
						for (; it != x.cend() - 1; ++it) {
							eval(*it, env);
						}
						x = *it;
						goto recurse;
					}
				}

				// (proc exp*)
				const Cell proc = eval(x.index(0), env);
				ListType exps;
				if (proc.type() == CellType::Macro) {
					const Cell tail = x.tail();
					exps = ListType(tail.cbegin(), tail.cend());
				}  else {
					// (map (tail x) (lambda (y) (eval y env)))
					for (auto it = x.cbegin() + 1; it != x.cend(); ++it)
						exps.push_back(eval(*it, env));
				}
				switch (proc.type()) {
					case CellType::Lambda: {
						EnvironmentType env_shared = std::make_shared<Environment>(proc.lambda_args(), exps, proc.lambda_ptr().env());
						env = EnvironmentCell(env_shared); // swap environments
						x = proc.lambda_body();
						goto recurse;
					}
					case CellType::Macro: {
						EnvironmentType env_shared = std::make_shared<Environment>(proc.lambda_args(), exps, proc.lambda_ptr().env());
						EnvironmentCell env2(env_shared); // short life
						x = eval(proc.lambda_body(), env2);
						// env2 should deallocate here
						goto recurse;
					}
					case CellType::Proc:
						return proc.proc()(exps);
					case CellType::ProcEnv:
						return proc.proc_env()(exps, env.env());
					default:
						throw Exception("Not an executable cell");
				}
			}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xe8, %rsp
movq %rdx, %rbx
movq %rdi, 0x28(%rsp)
movq %rsp, %rdi
callq 0x90a4
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x90a4
movq %rsp, %rbp
leaq 0x30(%rsp), %r12
leaq 0x58(%rsp), %r14
leaq 0x60(%rsp), %r15
movq (%rsp), %rax
testq %rax, %rax
je 0x12d31
movl 0x8(%rax), %ecx
leal -0x2(%rcx), %edx
cmpl $0x3, %edx
jb 0x13571
cmpl $0x1, %ecx
je 0x13593
movq %rbp, %rdi
callq 0xd650
testb %al, %al
jne 0x13580
leaq 0x88(%rsp), %rdi
movq %rbp, %rsi
callq 0xd5e4
movq 0x88(%rsp), %rax
testq %rax, %rax
je 0x13193
cmpl $0x1, 0x8(%rax)
jne 0x13193
leaq 0x88(%rsp), %rdi
callq 0x973e
leaq 0x18cc8(%rip), %rcx     # 0x2ba48
cmpq (%rcx), %rax
jne 0x12d9a
movq 0x28(%rsp), %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0xd6b0
jmp 0x13128
leaq 0x18c9f(%rip), %rcx     # 0x2ba40
cmpq (%rcx), %rax
jne 0x12e53
movq %r12, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0xd6b0
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x2
popq %rdx
callq 0xd6b0
leaq 0x18(%rsp), %rdi
movq %rbp, %rsi
pushq $0x3
popq %rdx
callq 0xd6b0
movq %r14, %rdi
movq %r12, %rsi
leaq 0x8(%rsp), %rdx
callq 0x12cd0
movq %r14, %rdi
leaq 0x18c48(%rip), %rsi     # 0x2ba38
callq 0x9426
testb %al, %al
movq %r15, %rsi
leaq 0x18(%rsp), %rax
cmovneq %rax, %rsi
movq %rbp, %rdi
callq 0x97ea
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x12e1b
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x12e2b
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x12e3b
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x12e4b
movq (%rdi), %rax
callq *0x10(%rax)
movb $0x1, %r14b
jmp 0x1353e
leaq 0x18bf6(%rip), %rcx     # 0x2ba50
cmpq (%rcx), %rax
jne 0x12f42
movq %r12, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0xd6b0
movq %r12, %rdi
callq 0x973e
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x12e8c
movq (%rdi), %rax
callq *0x10(%rax)
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x2
popq %rdx
callq 0xd6b0
movq %r12, %rdi
movq %r15, %rsi
leaq 0x8(%rsp), %rdx
callq 0x12cd0
movq 0x30(%rsp), %rax
andq $0x0, 0x30(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
je 0x12ed8
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x12ed8
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x30(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x12eee
movq (%rdi), %rax
callq *0x10(%rax)
movq %r12, %rdi
leaq 0x8(%rsp), %rsi
callq 0x90d0
movq 0x30(%rsp), %r14
leaq 0x80(%rsp), %r13
movq %r13, %rdi
movq %rbp, %rsi
callq 0x90a4
movq %r14, %rdi
movq %rbx, %rsi
movq %r13, %rdx
callq 0x9714
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x12f34
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x80(%rsp)
jmp 0x13023
leaq 0x18b0f(%rip), %rcx     # 0x2ba58
cmpq (%rcx), %rax
jne 0x13043
movq %r12, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0xd6b0
movq %r12, %rdi
callq 0x973e
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x12f7b
movq (%rdi), %rax
callq *0x10(%rax)
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x2
popq %rdx
callq 0xd6b0
movq %r12, %rdi
movq %r15, %rsi
leaq 0x8(%rsp), %rdx
callq 0x12cd0
movq 0x30(%rsp), %rax
andq $0x0, 0x30(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
je 0x12fc7
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x12fc7
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x30(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x12fdd
movq (%rdi), %rax
callq *0x10(%rax)
movq %r12, %rdi
leaq 0x8(%rsp), %rsi
callq 0x90d0
movq 0x30(%rsp), %r14
leaq 0x78(%rsp), %r13
movq %r13, %rdi
movq %rbp, %rsi
callq 0x90a4
movq %r14, %rdi
movq %rbx, %rsi
movq %r13, %rdx
callq 0x13998
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x1301d
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x78(%rsp)
leaq 0x38(%rsp), %rdi
callq 0x9680
movq (%rsp), %rax
movq 0x28(%rsp), %rcx
movq %rax, (%rcx)
andq $0x0, (%rsp)
jmp 0x13128
leaq 0x18a16(%rip), %rcx     # 0x2ba60
cmpq (%rcx), %rax
jne 0x130a8
movq %r12, %rdi
callq 0x13aa0
movq %r12, %rdi
leaq 0x8(%rsp), %rsi
callq 0xd71c
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0xd6b0
movq %r12, %rdi
movq %r15, %rsi
callq 0xd76e
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x1308d
movq (%rdi), %rax
callq *0x10(%rax)
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x2
popq %rdx
callq 0xd6b0
movq %r12, %rdi
movq %r15, %rsi
callq 0xd7c0
jmp 0x1310b
leaq 0x189b9(%rip), %rcx     # 0x2ba68
cmpq (%rcx), %rax
jne 0x13130
movq %r12, %rdi
callq 0x13ac0
movq %r12, %rdi
leaq 0x8(%rsp), %rsi
callq 0xd71c
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0xd6b0
movq %r12, %rdi
movq %r15, %rsi
callq 0xd76e
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x130f2
movq (%rdi), %rax
callq *0x10(%rax)
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x2
popq %rdx
callq 0xd6b0
movq %r12, %rdi
movq %r15, %rsi
callq 0xd7c0
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x1311b
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x30(%rsp), %rax
movq 0x28(%rsp), %rcx
movq %rax, (%rcx)
xorl %r14d, %r14d
jmp 0x1353e
leaq 0x18939(%rip), %rcx     # 0x2ba70
cmpq (%rcx), %rax
jne 0x13193
movq %rbp, %rdi
callq 0xb6b4
movq %rax, %rbx
addq $0x8, %rbx
movq %rbp, %rdi
callq 0xb762
addq $-0x8, %rax
cmpq %rax, %rbx
je 0x13561
leaq 0x90(%rsp), %rdi
movq %rbx, %rsi
leaq 0x8(%rsp), %rdx
callq 0x12cd0
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x13188
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x90(%rsp)
jmp 0x13147
movq %r12, %rdi
movq %rbp, %rsi
xorl %edx, %edx
callq 0xd6b0
movq %r14, %rdi
movq %r12, %rsi
leaq 0x8(%rsp), %rdx
callq 0x12cd0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x131c0
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x40(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq 0x58(%rsp), %rax
testq %rax, %rax
je 0x13367
cmpl $0x7, 0x8(%rax)
jne 0x13367
leaq 0x18(%rsp), %r13
movq %r13, %rdi
movq %rbp, %rsi
callq 0xd61a
movq %r13, %rdi
callq 0xb6b4
movq %rax, %rbx
movq %r13, %rdi
callq 0xb762
movq %r15, %rdi
movq %rbx, %rsi
movq %rax, %rdx
leaq 0x10(%rsp), %rcx
callq 0xb3c4
movq %r12, %rdi
movq %r15, %rsi
callq 0x14b1a
movq %r15, %rdi
callq 0x944e
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x1323f
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x58(%rsp), %rax
testq %rax, %rax
je 0x135ff
movl 0x8(%rax), %eax
addl $-0x6, %eax
cmpl $0x3, %eax
ja 0x135ff
leaq 0xa4ed(%rip), %rcx      # 0x1d750
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0xd738
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xd6e6
leaq 0x18(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x90d0
movq %r15, %rdi
leaq 0x10(%rsp), %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x13ae0
leaq 0x20(%rsp), %rdi
callq 0x9680
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x132c6
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x132d6
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0xb8(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x9dd0
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x9084
movq 0x18(%rsp), %rax
andq $0x0, 0x18(%rsp)
movq 0x8(%rsp), %rdi
movq %rax, 0x8(%rsp)
testq %rdi, %rdi
je 0x13326
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x13326
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x18(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x9680
leaq 0x18(%rsp), %rdi
movq %r14, %rsi
callq 0xd78a
movq 0x18(%rsp), %rax
andq $0x0, 0x18(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
jne 0x13503
jmp 0x13519
movq %rbp, %rdi
callq 0xb6b4
movq %rax, %rbx
addq $0x8, %rbx
movq %rbp, %rdi
callq 0xb762
cmpq %rax, %rbx
je 0x1323f
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x8(%rsp), %rdx
callq 0x12cd0
movq %r12, %rdi
movq %r15, %rsi
callq 0x94ca
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x13372
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x13372
movq %r14, %rdi
callq 0x13b04
movq 0x28(%rsp), %rdi
movq %r12, %rsi
callq *%rax
jmp 0x13404
movq %r14, %rdi
callq 0x13bb0
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x90d0
movq 0x28(%rsp), %rdi
movq %r12, %rsi
leaq 0x98(%rsp), %rdx
callq *%rbx
leaq 0xa0(%rsp), %rdi
callq 0x9680
xorl %r14d, %r14d
jmp 0x13526
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0xd738
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xd6e6
leaq 0x18(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x90d0
movq %r15, %rdi
leaq 0x10(%rsp), %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x13ae0
leaq 0x20(%rsp), %rdi
callq 0x9680
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x13466
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x13476
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0xa8(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x9dd0
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x9084
leaq 0xb0(%rsp), %rdi
callq 0x9680
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xd78a
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
leaq 0x18(%rsp), %rdx
callq 0x12cd0
movq 0x10(%rsp), %rax
andq $0x0, 0x10(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
je 0x134f3
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x134f3
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x10(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x13509
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x13519
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x68(%rsp), %rdi
callq 0x9680
movb $0x1, %r14b
movq %r12, %rdi
callq 0x944e
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x1353e
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x13551
movq (%rdi), %rax
callq *0x10(%rax)
testb %r14b, %r14b
leaq 0x58(%rsp), %r14
jne 0x12d10
jmp 0x135c9
movb $0x1, %r14b
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x97ea
jmp 0x1353e
movq 0x28(%rsp), %rcx
movq %rax, (%rcx)
andq $0x0, (%rsp)
jmp 0x135c9
leaq 0x184a1(%rip), %rsi     # 0x2ba28
movq 0x28(%rsp), %rdi
callq 0x90a4
jmp 0x135c9
leaq 0x30(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x90d0
movq 0x30(%rsp), %rbx
movq %rsp, %rdi
callq 0x973e
movq 0x28(%rsp), %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x138f8
leaq 0x38(%rsp), %rdi
callq 0x9680
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x135d9
movq (%rdi), %rax
callq *0x10(%rax)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x135e8
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x28(%rsp), %rax
addq $0xe8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x28
popq %rdi
callq 0x71b0
movq %rax, %r14
leaq 0xa150(%rip), %rsi      # 0x1d761
leaq 0xc8(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x7150
movb $0x1, %bpl
leaq 0xc8(%rsp), %rsi
movq %r14, %rdi
callq 0x9794
xorl %ebp, %ebp
leaq 0x16861(%rip), %rsi     # 0x29ea0
leaq -0x9e7c(%rip), %rdx     # 0x97ca
movq %r14, %rdi
callq 0x75d0
jmp 0x13872
jmp 0x13872
jmp 0x13741
jmp 0x13879
jmp 0x13741
jmp 0x13879
jmp 0x13879
jmp 0x13872
jmp 0x13741
jmp 0x13879
jmp 0x13741
jmp 0x13879
jmp 0x13879
jmp 0x13872
movq %rax, %rbx
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x136a7
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x78(%rsp)
jmp 0x136f5
jmp 0x136f2
jmp 0x13872
jmp 0x13709
jmp 0x13872
jmp 0x13879
jmp 0x13872
jmp 0x13885
jmp 0x13885
movq %rax, %rbx
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x136e7
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x80(%rsp)
jmp 0x136f5
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x9680
jmp 0x138be
jmp 0x13872
movq %rax, %rbx
movq 0x60(%rsp), %rdi
jmp 0x138b3
jmp 0x13872
jmp 0x13879
jmp 0x13872
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x9680
jmp 0x138d1
jmp 0x13872
movq %rax, %rbx
jmp 0x13770
movq %rax, %rbx
jmp 0x13780
jmp 0x13879
jmp 0x13872
jmp 0x13872
movq %rax, %rbx
jmp 0x138e1
movq %rax, %rbx
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x13770
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x13780
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x1387c
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x1387c
movq %rax, %rbx
jmp 0x137f0
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
jmp 0x137eb
jmp 0x137ff
jmp 0x1380e
jmp 0x13823
jmp 0x138a1
movq %rax, %rbx
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x137ce
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x137ce
movq %rax, %rbx
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x137f0
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x137f0
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x9680
leaq 0x68(%rsp), %rdi
callq 0x9680
jmp 0x138a4
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x9680
jmp 0x13811
movq %rax, %rbx
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x13826
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x13826
movq %rax, %rbx
movq 0x10(%rsp), %rdi
jmp 0x13894
jmp 0x138a1
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
jmp 0x137f5
jmp 0x13864
jmp 0x138a1
movq %rax, %rbx
leaq 0xc8(%rsp), %rdi
callq 0x7688
testb %bpl, %bpl
jne 0x1385a
jmp 0x138a4
movq %rax, %rbx
movq %r14, %rdi
callq 0x7250
jmp 0x138a4
movq %rax, %rbx
movq 0x18(%rsp), %rdi
jmp 0x13894
jmp 0x13872
jmp 0x138a1
movq %rax, %rbx
jmp 0x138be
jmp 0x138a1
movq %rax, %rbx
movq 0x30(%rsp), %rdi
jmp 0x138b3
jmp 0x13885
movq %rax, %rbx
jmp 0x138d1
jmp 0x138a1
movq %rax, %rbx
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x138a4
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x138a4
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x944e
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x138be
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x138d1
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x138e1
movq (%rdi), %rax
callq *0x10(%rax)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x138f0
movq (%rdi), %rax
callq *0x10(%rax)
movq %rbx, %rdi
callq 0x7600