// File: /workspace/github_c_makefile_star2_O0/jkbenaim[P]psfrag/psfrag.c
// Function: cmd_depends
char *cmd_depends(int argc, char **argv)
{
	__label__ out_return, out_dbclose, out_unmap, out_droptable;
	struct MappedFile_s m;
	char *msg = NULL;
	int rc;
	int fragnum;
	char pcode[6];

	switch (argc) {
	case 0 ... 2:
		msg = "must specify a Pokemon Stadium rom";
		goto out_return;
		break;
	case 3:
		msg = "must specify a fragment number";
		goto out_return;
		break;
	default:
		break;
	}

	rc = DB_Init(&db, ":memory:");
	if (rc != SQLITE_OK) {
		msg = "DB_Init oopsed";
		goto out_return;
	}

	m = MappedFile_Open(argv[2], false);
	if (m.data == NULL) {
		msg = "couldn't open rom";
		goto out_dbclose;
	}

	if (m.size < (1048576 + 4096)) {
		msg = "rom too small";
		goto out_unmap;
	}

	get_pcode(pcode, m.data);

	rc = DB_FragSearch(db, m.data, m.size);
	if (rc != SQLITE_OK) {
		msg = "DB_FragSearch oopsed";
		goto out_unmap;
	}

	fragnum = atoi(argv[3]);
	int fragaddr = DB_GetAddrForNum(db, fragnum);
	if (fragaddr == -1) {
		msg = "no fragment by that number";
		goto out_unmap;
	}
	//parse_relocs(m.data + fragaddr);
	uint32_t *fragbytes = m.data + fragaddr;

	// start

	rc = sqlite3_exec(
		db,
		"create temp table relocs(reloc_id integer primary key, pcode, fragnum, far, type, addr, target_addr, target_frag);",
		NULL, NULL, NULL
	);
	if (rc != SQLITE_OK) {
		msg = "create temp table failed";
		goto out_unmap;
	};

	sqlite3_stmt *stmt = NULL;
	rc = sqlite3_prepare_v2(
		db,
		"insert into temp.relocs(pcode, fragnum, far, type, addr, target_addr, target_frag) values (?, ?, ?, ?, ?, ?, ?);",
		-1,
		&stmt,
		NULL
	);
	if (rc != SQLITE_OK) {
		msg = "prepare";
		goto out_droptable;
	}

	rc = DB_Begin(db);
	if (rc != SQLITE_OK) {
		msg = "begin transaction";
		goto out_droptable;
	}
	struct fragment_s frag;
	memcpy(&frag, fragbytes, sizeof(struct fragment_s));
	uint32_t *words = (uint32_t *)fragbytes;
	uint32_t *reloc_words = words;
	reloc_words += htonl(frag.offset_relocs) / sizeof(uint32_t);
	uint32_t num_relocs = htonl(reloc_words[0]);
	reloc_words++;
	printf("%d relocations.\n", num_relocs);
	for(int i = 0; i<num_relocs; i++) {
		uint32_t reloc = htonl(reloc_words[i]);
		bool foreign = reloc & 0x80000000;
		uint32_t type = reloc & 0x7F000000;
		uint32_t addr = reloc & 0x00FFFFFF;
		uint32_t target = htonl(words[addr>>2]);
		uint32_t loc = -1;
		uint32_t n;
		int loc_fragnum = -2;

		char *zType = NULL;

		switch (type) {
		case 0x02000000:
			zType = "ptr";
			loc = target;
			break;
		case 0x04000000:
			zType = "j";
			loc = (target & 0x03FFFFFF) << 2;
			loc |= 0x80000000;
			break;
		case 0x05000000:
			zType = "lui";
			loc = (target & 0x0000FFFF) << 16;
			loc |= 0x80000000;
			break;
		case 0x06000000:
			zType = "addiu";
			loc = (target & 0x0000FFFF);
			if (!foreign)
				loc += get_vma(&frag);
			break;
		default:
			zType = "unknown";
			loc = -1;
			break;
		}

		n = (loc & 0x0FF00000)>>20;
		loc_fragnum = n - 16;
// 		printf("%5d %08x %8x %08x\t%s\t%d\n",
// 			i,
// 			reloc,
// 			addr,
// 			loc,
// 			zType,
// 			loc_fragnum
// 		);
		if (loc_fragnum < 0) continue;
// "insert into temp.relocs(pcode, fragnum, far, type, addr, target_addr, target_frag) values (?, ?, ?, ?, ?, ?, ?);"
		rc = sqlite3_bind_text(stmt, 1, pcode, -1, SQLITE_TRANSIENT);
		if (rc != SQLITE_OK) {msg = "bind 1";}
		rc = sqlite3_bind_int64(stmt, 2, fragnum);
		if (rc != SQLITE_OK) {msg = "bind 2";}
		rc = sqlite3_bind_int64(stmt, 3, foreign);
		if (rc != SQLITE_OK) {msg = "bind 3";}
		rc = sqlite3_bind_text(stmt, 4, zType, -1, SQLITE_STATIC);
		if (rc != SQLITE_OK) {msg = "bind 4";}
		rc = sqlite3_bind_int64(stmt, 5, addr);
		if (rc != SQLITE_OK) {msg = "bind 5";}
		rc = sqlite3_bind_int64(stmt, 6, loc);
		if (rc != SQLITE_OK) {msg = "bind 6";}
		rc = sqlite3_bind_int64(stmt, 7, loc_fragnum);
		if (rc != SQLITE_OK) {msg = "bind 7";}

		rc = sqlite3_step(stmt);
		if (rc != SQLITE_DONE) {msg = "step";}

		rc = sqlite3_reset(stmt);
		if (rc != SQLITE_OK) {msg = "reset";}
	}

	DB_End(db);

	rc = sqlite3_finalize(stmt);
	if (rc != SQLITE_OK) {msg = "finalize1"; goto out_droptable;}

	rc = sqlite3_prepare(
		db,
		"select distinct target_frag from temp.relocs where target_frag != fragnum order by target_frag;",
		-1,
		&stmt,
		NULL
	);
	if (rc != SQLITE_OK) { msg = "prepare2"; goto out_droptable;}

	bool did_print_first = false;
	while (SQLITE_DONE != (rc=sqlite3_step(stmt))) switch (rc) {
	case SQLITE_BUSY:
		break;
	case SQLITE_ERROR:
		msg = "sqlite3_step returned SQLITE_ERROR";
		goto out_finalize;
		break;
	case SQLITE_MISUSE:
		msg = "sqlite3_step returned SQLITE_MISUSE";
		goto out_finalize;
		break;
	default:
		msg = "sqlite3_step returned some other error";
		goto out_finalize;
		break;
	case SQLITE_ROW:
		printf("%s%d", did_print_first?", ":"Depends on ",sqlite3_column_int(stmt, 0));
		did_print_first = true;
		break;
	}

	if (did_print_first) {
		printf(".\n");
	} else {
		printf("No dependencies.\n");
	}

out_finalize:
	rc = sqlite3_finalize(stmt);
	if (!msg)
		if (rc != SQLITE_OK) {msg = "finalize2"; goto out_droptable;}
out_droptable:
	rc = sqlite3_exec(
		db,
		"drop table temp.relocs;",
		NULL, NULL, NULL
	);
out_unmap:
	MappedFile_Close(m);
out_dbclose:
	DB_Close(db);
out_return:
	if (msg) {
		return msg;
	} else {
		return NULL;
	}

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movl %edi, -0xc(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x38(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0xe0(%rbp)
subl $0x3, %eax
jb 0x85d7
jmp 0x85ca
movl -0xe0(%rbp), %eax
subl $0x3, %eax
je 0x85e7
jmp 0x85f7
leaq 0xade33(%rip), %rax     # 0xb6411
movq %rax, -0x38(%rbp)
jmp 0x8db1
leaq 0xade67(%rip), %rax     # 0xb6455
movq %rax, -0x38(%rbp)
jmp 0x8db1
jmp 0x85f9
leaq 0xd4d18(%rip), %rdi     # 0xdd318
leaq 0xaddbd(%rip), %rsi     # 0xb63c4
callq 0x9aa0
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8625
leaq 0xaddb1(%rip), %rax     # 0xb63cd
movq %rax, -0x38(%rbp)
jmp 0x8db1
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
leaq -0x60(%rbp), %rdi
xorl %edx, %edx
callq 0xa410
movq -0x60(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x8667
leaq 0xadd7e(%rip), %rax     # 0xb63dc
movq %rax, -0x38(%rbp)
jmp 0x8da5
cmpq $0x101000, -0x28(%rbp)  # imm = 0x101000
jae 0x8681
leaq 0xadd76(%rip), %rax     # 0xb63ee
movq %rax, -0x38(%rbp)
jmp 0x8d83
leaq -0x46(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0xa540
movq 0xd4c83(%rip), %rdi     # 0xdd318
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0xa020
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x86bb
leaq 0xadd4a(%rip), %rax     # 0xb63fc
movq %rax, -0x38(%rbp)
jmp 0x8d83
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x82c0
movl %eax, -0x40(%rbp)
movq 0xd4c46(%rip), %rdi     # 0xdd318
movl -0x40(%rbp), %esi
callq 0x9f00
movl %eax, -0x64(%rbp)
cmpl $-0x1, -0x64(%rbp)
jne 0x86f3
leaq 0xadd8a(%rip), %rax     # 0xb6474
movq %rax, -0x38(%rbp)
jmp 0x8d83
movq -0x30(%rbp), %rax
movslq -0x64(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x70(%rbp)
movq 0xd4c0f(%rip), %rdi     # 0xdd318
leaq 0xade66(%rip), %rsi     # 0xb6576
xorl %eax, %eax
movl %eax, %r8d
movq %r8, %rdx
movq %r8, %rcx
callq 0x18400
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8739
leaq 0xadeb9(%rip), %rax     # 0xb65e9
movq %rax, -0x38(%rbp)
jmp 0x8d83
movq $0x0, -0x78(%rbp)
movq 0xd4bd0(%rip), %rdi     # 0xdd318
leaq 0xadeb3(%rip), %rsi     # 0xb6602
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
leaq -0x78(%rbp), %rcx
xorl %eax, %eax
movl %eax, %r8d
callq 0x18820
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x877b
leaq 0xae2f0(%rip), %rax     # 0xb6a62
movq %rax, -0x38(%rbp)
jmp 0x8d62
movq 0xd4b96(%rip), %rdi     # 0xdd318
callq 0x9b50
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x87a0
leaq 0xadedc(%rip), %rax     # 0xb6673
movq %rax, -0x38(%rbp)
jmp 0x8d62
movq -0x70(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x98(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x90(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x88(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x80(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl -0x84(%rbp), %edi
callq 0x8120
movl %eax, %eax
shrq $0x2, %rax
shlq $0x2, %rax
addq -0xa8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movl (%rax), %edi
callq 0x8120
movl %eax, -0xac(%rbp)
movq -0xa8(%rbp), %rax
addq $0x4, %rax
movq %rax, -0xa8(%rbp)
movl -0xac(%rbp), %esi
leaq 0xade4a(%rip), %rdi     # 0xb6685
movb $0x0, %al
callq 0x80d0
movl $0x0, -0xb0(%rbp)
movl -0xb0(%rbp), %eax
cmpl -0xac(%rbp), %eax
jae 0x8bcf
movq -0xa8(%rbp), %rax
movslq -0xb0(%rbp), %rcx
movl (%rax,%rcx,4), %edi
callq 0x8120
movl %eax, -0xb4(%rbp)
movl -0xb4(%rbp), %eax
shrl $0x1f, %eax
movb %al, -0xb5(%rbp)
movl -0xb4(%rbp), %eax
andl $0x7f000000, %eax       # imm = 0x7F000000
movl %eax, -0xbc(%rbp)
movl -0xb4(%rbp), %eax
andl $0xffffff, %eax         # imm = 0xFFFFFF
movl %eax, -0xc0(%rbp)
movq -0xa0(%rbp), %rax
movl -0xc0(%rbp), %ecx
andl $-0x4, %ecx
movl (%rax,%rcx), %edi
callq 0x8120
movl %eax, -0xc4(%rbp)
movl $0xffffffff, -0xc8(%rbp) # imm = 0xFFFFFFFF
movl $0xfffffffe, -0xd0(%rbp) # imm = 0xFFFFFFFE
movq $0x0, -0xd8(%rbp)
movl -0xbc(%rbp), %eax
movl %eax, -0xe4(%rbp)
subl $0x2000000, %eax        # imm = 0x2000000
je 0x8931
jmp 0x88fd
movl -0xe4(%rbp), %eax
subl $0x4000000, %eax        # imm = 0x4000000
je 0x8950
jmp 0x890c
movl -0xe4(%rbp), %eax
subl $0x5000000, %eax        # imm = 0x5000000
je 0x8988
jmp 0x891b
movl -0xe4(%rbp), %eax
subl $0x6000000, %eax        # imm = 0x6000000
je 0x89bd
jmp 0x89ff
leaq 0xadd5e(%rip), %rax     # 0xb6696
movq %rax, -0xd8(%rbp)
movl -0xc4(%rbp), %eax
movl %eax, -0xc8(%rbp)
jmp 0x8a17
leaq 0xadd43(%rip), %rax     # 0xb669a
movq %rax, -0xd8(%rbp)
movl -0xc4(%rbp), %eax
andl $0x3ffffff, %eax        # imm = 0x3FFFFFF
shll $0x2, %eax
movl %eax, -0xc8(%rbp)
movl -0xc8(%rbp), %eax
orl $0x80000000, %eax       # imm = 0x80000000
movl %eax, -0xc8(%rbp)
jmp 0x8a17
leaq 0xadd0d(%rip), %rax     # 0xb669c
movq %rax, -0xd8(%rbp)
movl -0xc4(%rbp), %eax
andl $0xffff, %eax           # imm = 0xFFFF
shll $0x10, %eax
movl %eax, -0xc8(%rbp)
movl -0xc8(%rbp), %eax
orl $0x80000000, %eax       # imm = 0x80000000
movl %eax, -0xc8(%rbp)
jmp 0x8a17
leaq 0xadcdc(%rip), %rax     # 0xb66a0
movq %rax, -0xd8(%rbp)
movl -0xc4(%rbp), %eax
andl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0xc8(%rbp)
testb $0x1, -0xb5(%rbp)
jne 0x89fd
leaq -0x98(%rbp), %rdi
callq 0xa290
addl -0xc8(%rbp), %eax
movl %eax, -0xc8(%rbp)
jmp 0x8a17
leaq 0xadca0(%rip), %rax     # 0xb66a6
movq %rax, -0xd8(%rbp)
movl $0xffffffff, -0xc8(%rbp) # imm = 0xFFFFFFFF
movl -0xc8(%rbp), %eax
andl $0xff00000, %eax        # imm = 0xFF00000
shrl $0x14, %eax
movl %eax, -0xcc(%rbp)
movl -0xcc(%rbp), %eax
subl $0x10, %eax
movl %eax, -0xd0(%rbp)
cmpl $0x0, -0xd0(%rbp)
jge 0x8a48
jmp 0x8bbb
movq -0x78(%rbp), %rdi
leaq -0x46(%rbp), %rdx
movl $0x1, %esi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq $-0x1, %r8
callq 0x154c0
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8a7a
leaq 0xadc38(%rip), %rax     # 0xb66ae
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
movslq -0x40(%rbp), %rdx
movl $0x2, %esi
callq 0x15360
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8aa0
leaq 0xadc19(%rip), %rax     # 0xb66b5
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
movb -0xb5(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, %edx
movl $0x3, %esi
callq 0x15360
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8acf
leaq 0xadbf1(%rip), %rax     # 0xb66bc
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
movq -0xd8(%rbp), %rdx
movl $0x4, %esi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
xorl %eax, %eax
movl %eax, %r8d
callq 0x154c0
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8b02
leaq 0xadbc5(%rip), %rax     # 0xb66c3
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
movl -0xc0(%rbp), %eax
movl %eax, %edx
movl $0x5, %esi
callq 0x15360
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8b2c
leaq 0xadba2(%rip), %rax     # 0xb66ca
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
movl -0xc8(%rbp), %eax
movl %eax, %edx
movl $0x6, %esi
callq 0x15360
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8b56
leaq 0xadb7f(%rip), %rax     # 0xb66d1
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
movslq -0xd0(%rbp), %rdx
movl $0x7, %esi
callq 0x15360
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8b7f
leaq 0xadb5d(%rip), %rax     # 0xb66d8
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
callq 0x14020
movl %eax, -0x3c(%rbp)
cmpl $0x65, -0x3c(%rbp)
je 0x8b9c
leaq 0xadebc(%rip), %rax     # 0xb6a54
movq %rax, -0x38(%rbp)
movq -0x78(%rbp), %rdi
callq 0x127e0
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8bb9
leaq 0xadb2a(%rip), %rax     # 0xb66df
movq %rax, -0x38(%rbp)
jmp 0x8bbb
movl -0xb0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0(%rbp)
jmp 0x884c
movq 0xd4742(%rip), %rdi     # 0xdd318
callq 0x9b80
movq -0x78(%rbp), %rdi
callq 0x12580
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8bfd
leaq 0xadaf1(%rip), %rax     # 0xb66e5
movq %rax, -0x38(%rbp)
jmp 0x8d62
movq 0xd4714(%rip), %rdi     # 0xdd318
leaq 0xadae4(%rip), %rsi     # 0xb66ef
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
leaq -0x78(%rbp), %rcx
xorl %eax, %eax
movl %eax, %r8d
callq 0x19220
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x8c37
leaq 0xadb21(%rip), %rax     # 0xb674f
movq %rax, -0x38(%rbp)
jmp 0x8d62
movb $0x0, -0xd9(%rbp)
movq -0x78(%rbp), %rdi
callq 0x14020
movl %eax, %ecx
movl %ecx, -0x3c(%rbp)
movl $0x65, %eax
cmpl %ecx, %eax
je 0x8d0f
movl -0x3c(%rbp), %eax
movl %eax, -0xe8(%rbp)
subl $0x1, %eax
je 0x8c92
jmp 0x8c69
movl -0xe8(%rbp), %eax
subl $0x5, %eax
je 0x8c90
jmp 0x8c76
movl -0xe8(%rbp), %eax
subl $0x15, %eax
je 0x8ca2
jmp 0x8c83
movl -0xe8(%rbp), %eax
subl $0x64, %eax
je 0x8cbf
jmp 0x8cb2
jmp 0x8d0a
leaq 0xad667(%rip), %rax     # 0xb6300
movq %rax, -0x38(%rbp)
jmp 0x8d38
leaq 0xad67a(%rip), %rax     # 0xb6323
movq %rax, -0x38(%rbp)
jmp 0x8d38
leaq 0xad68e(%rip), %rax     # 0xb6347
movq %rax, -0x38(%rbp)
jmp 0x8d38
movb -0xd9(%rbp), %dl
leaq 0xada94(%rip), %rax     # 0xb6760
leaq 0xada8a(%rip), %rcx     # 0xb675d
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, -0xf0(%rbp)
movq -0x78(%rbp), %rdi
xorl %esi, %esi
callq 0x14bf0
movq -0xf0(%rbp), %rsi
movl %eax, %edx
leaq 0xada5c(%rip), %rdi     # 0xb6758
movb $0x0, %al
callq 0x80d0
movb $0x1, -0xd9(%rbp)
jmp 0x8c3e
testb $0x1, -0xd9(%rbp)
je 0x8d28
leaq 0xada5c(%rip), %rdi     # 0xb677b
movb $0x0, %al
callq 0x80d0
jmp 0x8d36
leaq 0xada3d(%rip), %rdi     # 0xb676c
movb $0x0, %al
callq 0x80d0
jmp 0x8d38
movq -0x78(%rbp), %rdi
callq 0x12580
movl %eax, -0x3c(%rbp)
cmpq $0x0, -0x38(%rbp)
jne 0x8d60
cmpl $0x0, -0x3c(%rbp)
je 0x8d5e
leaq 0xada26(%rip), %rax     # 0xb677e
movq %rax, -0x38(%rbp)
jmp 0x8d62
jmp 0x8d60
jmp 0x8d62
movq 0xd45af(%rip), %rdi     # 0xdd318
leaq 0xada18(%rip), %rsi     # 0xb6788
xorl %eax, %eax
movl %eax, %r8d
movq %r8, %rdx
movq %r8, %rcx
callq 0x18400
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa510
movq 0xd456c(%rip), %rdi     # 0xdd318
callq 0x9b20
cmpq $0x0, -0x38(%rbp)
je 0x8dc2
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x8dca
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
nopw (%rax,%rax)