LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mscompress.c
// Function: detect_fmt_internal
static int detect_fmt_internal(deark *c)
{
	u8 buf[8];

	de_read(buf, 0, sizeof(buf));
	if(!de_memcmp(buf, "\x53\x5a\x44\x44\x88\xf0\x27\x33", 8))
		return FMT_SZDD;
	if(!de_memcmp(buf, "\x4b\x57\x41\x4a\x88\xf0\x27\xd1", 8))
		return FMT_KWAJ;
	if(!de_memcmp(buf, "SZ \x88\xf0\x27\x33", 7))
		return FMT_SZ;
	return 0;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
leaq 0x8(%rsp), %rbx
movl $0x8, %ecx
movq %rbx, %rsi
xorl %edx, %edx
callq 0xee8d4
movabsq $0x3327f08844445a53, %rax # imm = 0x3327F08844445A53
cmpq %rax, (%rbx)
je 0x9a589
movabsq $-0x2ed80f77b5bea8b5, %rax # imm = 0xD127F0884A41574B
cmpq %rax, 0x8(%rsp)
je 0x9a590
movl $0x88205a53, %eax       # imm = 0x88205A53
xorl 0x8(%rsp), %eax
movl $0x3327f088, %ecx       # imm = 0x3327F088
xorl 0xb(%rsp), %ecx
xorl %edx, %edx
orl %eax, %ecx
sete %dl
leal (%rdx,%rdx,2), %eax
jmp 0x9a595
movl $0x1, %eax
jmp 0x9a595
movl $0x2, %eax
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mscompress.c
// Function: get_cmpr_meth_name
static const char *get_cmpr_meth_name(UI n)
{
	char *name = NULL;

	switch(n) {
	case CMPR_NONE: name="uncompressed"; break;
	case CMPR_XOR: name="XOR"; break;
	case CMPR_LZSS16: case CMPR_LZSS18: name="LZSS"; break;
	case CMPR_LZHUFF: name="LZ+Huffman"; break;
	case CMPR_MSZIP: name="MSZIP"; break;
	}
	return name?name:"?";
}

// Assembly:
cmpl $0x4, %edi
ja 0x9a5ba
movl %edi, %eax
leaq 0x96b27(%rip), %rcx     # 0x1310d0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0xafdcf(%rip), %rax     # 0x14a388
retq
cmpl $0x10000, %edi          # imm = 0x10000
jne 0x9a5ca
leaq 0x8bb9f(%rip), %rax     # 0x126168
retq
leaq 0x91b80(%rip), %rax     # 0x12c151
retq
leaq 0x7ede9(%rip), %rax     # 0x1193c2
retq
leaq 0x8e744(%rip), %rax     # 0x128d25
retq
leaq 0x96c54(%rip), %rax     # 0x13123d
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mscompress.c
// Function: XOR_cbfn
static int XOR_cbfn(struct de_bufferedreadctx *brctx, const u8 *buf,
	i64 buf_len)
{
	i64 k;
	dbuf *f = (dbuf*)brctx->userdata;

	for(k=0; k<buf_len; k++) {
		dbuf_writebyte(f, buf[k] ^ (u8)0xff);
	}
	return 1;
}

// Assembly:
testq %rdx, %rdx
jle 0x9a629
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq (%rdi), %r15
xorl %r12d, %r12d
movzbl (%r14,%r12), %esi
xorl $0xff, %esi
movq %r15, %rdi
callq 0xf0bd6
incq %r12
cmpq %r12, %rbx
jne 0x9a603
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
movl $0x1, %eax
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mscompress.c
// Function: mslzh_lz77buf_writebytecb
static void mslzh_lz77buf_writebytecb(struct de_lz77buffer *rb, u8 n)
{
	struct mslzh_context *lzhctx = (struct mslzh_context*)rb->userdata;

	if(mslzh_have_enough_output(lzhctx)) return;
	dbuf_writebyte(lzhctx->dcmpro->f, n);
	lzhctx->nbytes_written++;
}

// Assembly:
pushq %rbx
movq (%rdi), %rbx
movq 0x8(%rbx), %rax
cmpb $0x0, 0x8(%rax)
je 0x9a647
movq 0x10(%rbx), %rcx
cmpq 0x10(%rax), %rcx
jge 0x9a657
movq (%rax), %rdi
movzbl %sil, %esi
callq 0xf0bd6
incq 0x10(%rbx)
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mscompress.c
// Function: mslzh_getnextcode
static MSLZH_VALUE_TYPE mslzh_getnextcode(struct mslzh_context *lzhctx,
	struct mslzh_tree *htr)
{
	fmtutil_huffman_valtype val = 0;
	int ret;

	fmtutil_huffman_reset_cursor(htr->fmtuht->cursor); // Should be unnecessary

	ret = fmtutil_huffman_read_next_value(htr->fmtuht->bk, &lzhctx->bitrd, &val, NULL);
	if(!ret) return 0;
	return (MSLZH_VALUE_TYPE)val;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
leaq 0xc(%rsp), %r15
movl $0x0, (%r15)
movq 0x10(%rsi), %rax
movq (%rax), %rdi
callq 0x1044ba
movq 0x10(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %r14
movq %r14, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x1046f3
testl %eax, %eax
je 0x9a6a1
movl 0xc(%rsp), %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mscompress.c
// Function: read_sz_p
static int read_sz_p(dbuf *f, i64 maxlen, de_ucstring *s, de_encoding enc, i64 *ppos)
{
	i64 startpos = *ppos;
	i64 foundpos;
	i64 len;
	int ret;

	ret = dbuf_search_byte(f, 0x00, startpos, maxlen, &foundpos);
	if(!ret) return 0;
	len = foundpos - startpos; // length w/o NUL
	dbuf_read_to_ucstring(f, startpos, len, s, 0, enc);
	*ppos = foundpos+1;
	return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %r12
movq (%rcx), %r15
xorl %r13d, %r13d
movq %rsp, %r8
movl $0x50, %ecx
xorl %esi, %esi
movq %r15, %rdx
callq 0xefa77
testl %eax, %eax
je 0x9a708
movq (%rsp), %rdx
subq %r15, %rdx
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rcx
xorl %r8d, %r8d
movl %ebp, %r9d
callq 0xefbd7
movq (%rsp), %rax
incq %rax
movq %rax, (%rbx)
movl $0x1, %r13d
movl %r13d, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mac-arch.c
// Function: de_module_tome
void de_module_tome(deark *c, struct deark_module_info *mi)
{
	mi->id = "tome";
	mi->desc = "Tome";
	mi->run_fn = de_run_tome;
	mi->identify_fn = de_identify_tome;
	mi->flags |= DE_MODFLAG_NONWORKING;
}

// Assembly:
leaq 0x96d54(%rip), %rax     # 0x131477
movq %rax, (%rsi)
leaq 0x96d4f(%rip), %rax     # 0x13147c
movq %rax, 0x8(%rsi)
leaq 0x14(%rip), %rax        # 0x9a74c
movq %rax, 0x18(%rsi)
leaq 0x68a(%rip), %rax       # 0x9adcd
movq %rax, 0x20(%rsi)
orb $0x2, 0x30(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mac-arch.c
// Function: destroy_tome_md
static void destroy_tome_md(deark *c, struct tome_md *md)
{
	if(!md) return;
	de_advfile_destroy(md->advf);
	de_destroy_stringreaderdata(c, md->fname);
	de_free(c, md);
}

// Assembly:
testq %rsi, %rsi
je 0x9ae20
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movq 0x30(%rsi), %rdi
callq 0xfc4de
movq 0x38(%rbx), %rsi
movq %r14, %rdi
callq 0xefaca
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xe8be2
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mac-arch.c
// Function: tome_read_timestamp
static void tome_read_timestamp(deark *c, struct tome_ctx *d, struct tome_md *md,
	i64 pos, UI tzi, const char *name)
{
	i64 n;
	struct de_timestamp ts;
	char timestamp_buf[64];

	n = dbuf_getu32be(c->infile, pos);
	de_mac_time_to_timestamp(n, &ts);
	de_timestamp_to_string(&ts, timestamp_buf, sizeof(timestamp_buf), 0);
	de_dbg(c, "%s time: %"U64_FMT" (%s)", name, n, timestamp_buf);
	md->advf->mainfork.fi->timestamp[tzi] = ts;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %r8, %r15
movl %ecx, 0xc(%rsp)
movq %rsi, %r14
movq %rdi, %r13
movq 0x18(%rdi), %rdi
movq %rdx, %rsi
callq 0xeed0d
movq %rax, %rbp
leaq 0x10(%rsp), %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0xea8ff
leaq 0x20(%rsp), %rbx
movl $0x40, %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %ecx, %ecx
callq 0xeaf46
leaq 0x966f8(%rip), %rsi     # 0x131571
movq %r13, %rdi
movq %r15, %rdx
movq %rbp, %rcx
movq %rbx, %r8
xorl %eax, %eax
callq 0xe8617
movq 0x30(%r14), %rax
movq 0x20(%rax), %rax
movl 0xc(%rsp), %ecx
shlq $0x4, %rcx
movups (%r12), %xmm0
movups %xmm0, 0x18(%rax,%rcx)
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mac-arch.c
// Function: tome_writelistener
static void tome_writelistener(dbuf *f, void *userdata, const u8 *buf, i64 buf_len)
{
	struct tome_fork_data *fdata = (struct tome_fork_data*)userdata;
	struct tome_md *md = fdata->md;
	i64 i;

	for(i=0; i<buf_len; i++) {
		md->frk[fdata->forknum].checksum_calc = (u32)buf[i] ^
			((u32)(md->frk[fdata->forknum].checksum_calc >> 0x18) +
				(u32)(md->frk[fdata->forknum].checksum_calc <<8));
	}
}

// Assembly:
testq %rcx, %rcx
jle 0x9aee6
movq (%rsi), %rax
movl 0x8(%rsi), %esi
imulq $0x38, %rsi, %rsi
addq %rsi, %rax
addq $0xd4, %rax
movl (%rax), %esi
xorl %edi, %edi
movzbl (%rdx,%rdi), %r8d
roll $0x8, %esi
xorl %r8d, %esi
movl %esi, (%rax)
incq %rdi
cmpq %rdi, %rcx
jne 0x9aed1
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/mac-arch.c
// Function: tome_advfile_cbfn
static int tome_advfile_cbfn(deark *c, struct de_advfile *advf,
	struct de_advfile_cbparams *afp)
{
	UI forknum;
	struct tome_md *md = (struct tome_md*)advf->userdata;

	if(afp->whattodo == DE_ADVFILE_WRITEMAIN) {
		forknum = 0;
	}
	else if(afp->whattodo == DE_ADVFILE_WRITERSRC) {
		forknum = 1;
	}
	else {
		return 0;
	}

	if(md->frk[forknum].is_compressed) {
		tome_decompress_fork(md, forknum, afp->outf);
	}
	else {
		tome_copy_fork(md, forknum, afp->outf);
	}
	return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq 0x8(%rsi), %rbp
movl (%rdx), %ecx
xorl %eax, %eax
cmpl $0x1, %ecx
je 0x9af13
cmpl $0x2, %ecx
jne 0x9b068
movl $0x1, %eax
leaq 0xc0(%rbp), %r15
movl %eax, %r13d
imulq $0x38, %r13, %r12
cmpb $0x0, 0xcc(%rbp,%r12)
movq 0x8(%rdx), %r14
je 0x9aff2
movq (%rbp), %rbx
leaq 0x4(%rsp), %rsi
movq %rbx, %rdi
callq 0xe8a1c
leaq 0x28(%rsp), %rsi
leaq 0x10(%rsp), %rdx
leaq 0x48(%rsp), %rcx
movq %rbx, %rdi
callq 0xfa1dc
imull $0x3e8, 0x10(%rbp), %eax # imm = 0x3E8
orl %r13d, %eax
leaq 0x28(%rsp), %rsi
movl %eax, 0x18(%rsi)
movq 0x18(%rbx), %rax
movq %rax, (%rsi)
leaq (%r15,%r12), %r13
movups 0x20(%r15,%r12), %xmm0
movups %xmm0, 0x8(%rsi)
leaq 0x10(%rsp), %rdx
movq %r14, (%rdx)
movb $0x1, 0x8(%rdx)
movq 0x18(%r15,%r12), %rax
movq %rax, 0x10(%rdx)
movq %rbx, %rdi
leaq 0x48(%rsp), %r14
movq %r14, %rcx
xorl %r8d, %r8d
callq 0x101930
cmpl $0x0, (%r14)
je 0x9b052
movq 0x38(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xf70f6
movq %rax, %r14
addq $0x30, %r13
leaq 0x48(%rsp), %rsi
movq %rbx, %rdi
callq 0xfa1a4
leaq 0x79c3c(%rip), %rsi     # 0x114c19
movq %rbx, %rdi
movq %r14, %rdx
movq %r13, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0xe9295
jmp 0x9b057
leaq (%r15,%r12), %rax
movq %rax, 0x8(%rsp)
movq 0x18(%r15,%r12), %rbx
testq %rbx, %rbx
jle 0x9b047
movq 0x8(%rsp), %rax
movq 0x20(%rax), %r13
leaq 0x4(%r13), %r15
movl $0x10000, %esi          # imm = 0x10000
movq %rbx, %rdi
callq 0xe9c3b
movq %rax, %r12
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0xef481
addq %r12, %r13
addq $0x4, %r13
subq %r12, %rbx
jg 0x9b00e
movq 0x8(%rsp), %rax
movb $0x1, 0xd(%rax)
jmp 0x9b063
movb $0x1, 0xd(%r13)
movl 0x4(%rsp), %esi
movq %rbx, %rdi
callq 0xe8a25
movl $0x1, %eax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/msp.c
// Function: de_module_msp
void de_module_msp(deark *c, struct deark_module_info *mi)
{
	mi->id = "msp";
	mi->desc = "Microsoft Paint image";
	mi->run_fn = de_run_msp;
	mi->identify_fn = de_identify_msp;
}

// Assembly:
leaq 0x9651d(%rip), %rax     # 0x1315a0
movq %rax, (%rsi)
leaq 0x96517(%rip), %rax     # 0x1315a4
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b0a8
movq %rax, 0x18(%rsi)
leaq 0x377(%rip), %rax       # 0x9b41a
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/msp.c
// Function: de_identify_msp
static int de_identify_msp(deark *c)
{
	u8 b[4];
	de_read(b, 0, 4);

	if(b[0]==0x44 && b[1]==0x61 && b[2]==0x6e && b[3]==0x4d)
		return 100;
	if(b[0]==0x4c && b[1]==0x69 && b[2]==0x6e && b[3]==0x53)
		return 100;
	return 0;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x18, %rsp
movq 0x18(%rdi), %rdi
xorl %r14d, %r14d
leaq 0x14(%rsp), %rbx
movl $0x4, %ecx
movq %rbx, %rsi
xorl %edx, %edx
callq 0xee8d4
movd (%rbx), %xmm0
movd %xmm0, %eax
cmpl $0x4d6e6144, %eax       # imm = 0x4D6E6144
je 0x9b495
movdqa 0x9613d(%rip), %xmm1    # 0x131590
punpcklbw %xmm1, %xmm1    # xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
pshuflw $0x55, %xmm0, %xmm2     # xmm2 = xmm0[1,1,1,1,4,5,6,7]
pcmpeqb %xmm1, %xmm2
movdqa %xmm0, (%rsp)
movb (%rsp), %cl
movb 0x1(%rsp), %dl
xorb $0x4c, %cl
xorb $0x69, %dl
pextrw $0x2, %xmm2, %esi
cmpb $0x53, 0x3(%rsp)
movl $0x64, %eax
cmovnel %r14d, %eax
testb $0x1, %sil
cmovel %r14d, %eax
orb %cl, %dl
cmovnel %r14d, %eax
jmp 0x9b49a
movl $0x64, %eax
addq $0x18, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_module_nol
void de_module_nol(deark *c, struct deark_module_info *mi)
{
	mi->id = "nol";
	mi->desc = "Nokia Operator Logo";
	mi->run_fn = de_run_nol;
	mi->identify_fn = de_identify_nol;
}

// Assembly:
leaq 0x9617b(%rip), %rax     # 0x131626
movq %rax, (%rsi)
leaq 0x96175(%rip), %rax     # 0x13162a
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b4d0
movq %rax, 0x18(%rsi)
leaq 0x7f(%rip), %rax        # 0x9b54a
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_run_nol
static void de_run_nol(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;

	d = de_malloc(c, sizeof(lctx));

	d->w = de_getu16le(10);
	d->h = de_getu16le(12);
	de_dbg_dimensions(c, d->w, d->h);
	if(!de_good_image_dimensions(c, d->w, d->h)) goto done;

	nol_ngg_read_bitmap(c, d, 20);
done:
	de_free(c, d);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl $0x18, %esi
callq 0xe8b2b
movq %rax, %r14
movq 0x18(%rbx), %rdi
movl $0xa, %esi
callq 0xeebc8
movq %rax, (%r14)
movq 0x18(%rbx), %rdi
movl $0xc, %esi
callq 0xeebc8
movq %rax, 0x8(%r14)
movq (%r14), %rsi
movq %rbx, %rdi
movq %rax, %rdx
callq 0xe8f88
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rbx, %rdi
callq 0xf1db1
testl %eax, %eax
je 0x9b538
movl $0x14, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9b9e2
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xe8be2
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_module_ngg
void de_module_ngg(deark *c, struct deark_module_info *mi)
{
	mi->id = "ngg";
	mi->desc = "Nokia Group Graphic";
	mi->run_fn = de_run_ngg;
	mi->identify_fn = de_identify_ngg;
}

// Assembly:
leaq 0x960c7(%rip), %rax     # 0x13163e
movq %rax, (%rsi)
leaq 0x960c1(%rip), %rax     # 0x131642
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b59c
movq %rax, 0x18(%rsi)
leaq 0x7f(%rip), %rax        # 0x9b616
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_run_ngg
static void de_run_ngg(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;

	d = de_malloc(c, sizeof(lctx));

	d->w = de_getu16le(6);
	d->h = de_getu16le(8);
	de_dbg_dimensions(c, d->w, d->h);
	if(!de_good_image_dimensions(c, d->w, d->h)) goto done;

	nol_ngg_read_bitmap(c, d, 16);
done:
	de_free(c, d);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl $0x18, %esi
callq 0xe8b2b
movq %rax, %r14
movq 0x18(%rbx), %rdi
movl $0x6, %esi
callq 0xeebc8
movq %rax, (%r14)
movq 0x18(%rbx), %rdi
movl $0x8, %esi
callq 0xeebc8
movq %rax, 0x8(%r14)
movq (%r14), %rsi
movq %rbx, %rdi
movq %rax, %rdx
callq 0xe8f88
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rbx, %rdi
callq 0xf1db1
testl %eax, %eax
je 0x9b604
movl $0x10, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9b9e2
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xe8be2
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_module_npm
void de_module_npm(deark *c, struct deark_module_info *mi)
{
	mi->id = "npm";
	mi->desc = "Nokia Picture Message";
	mi->run_fn = de_run_npm;
	mi->identify_fn = de_identify_npm;
}

// Assembly:
leaq 0x96013(%rip), %rax     # 0x131656
movq %rax, (%rsi)
leaq 0x9600d(%rip), %rax     # 0x13165a
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b668
movq %rax, 0x18(%rsi)
leaq 0x141(%rip), %rax       # 0x9b7a4
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_run_npm
static void de_run_npm(deark *c, de_module_params *mparams)
{
	i64 txt_len;
	i64 pos;
	lctx *d = NULL;
	de_ucstring *s = NULL;

	d = de_malloc(c, sizeof(lctx));

	pos = 4;
	txt_len = (i64)de_getbyte_p(&pos);
	de_dbg(c, "text length: %d", (int)txt_len);
	if(txt_len>0) {
		s = ucstring_create(c);
		dbuf_read_to_ucstring(c->infile, pos, txt_len, s, 0, DE_ENCODING_ASCII);
		de_dbg(c, "text: \"%s\"", ucstring_getpsz_d(s));
		pos += txt_len;
	}
	pos += 1;

	d->w = (i64)de_getbyte_p(&pos);
	d->h = (i64)de_getbyte_p(&pos);
	de_dbg_dimensions(c, d->w, d->h);

	pos += 3;
	npm_nlm_read_bitmap(c, d, pos);

	ucstring_destroy(s);
	de_free(c, d);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
movl $0x18, %esi
callq 0xe8b2b
movq %rax, %r14
leaq 0x8(%rsp), %rsi
movq $0x4, (%rsi)
movq 0x18(%rbx), %rdi
callq 0xeeb4b
movzbl %al, %r12d
leaq 0x7e089(%rip), %rsi     # 0x11972e
movq %rbx, %rdi
movl %r12d, %edx
xorl %eax, %eax
callq 0xe8617
testb %r12b, %r12b
je 0x9b702
movq %rbx, %rdi
callq 0xf6410
movq %rax, %r15
movq 0x18(%rbx), %rdi
movq 0x8(%rsp), %rsi
movq %r12, %rdx
movq %rax, %rcx
xorl %r8d, %r8d
movl $0x1, %r9d
callq 0xefbd7
movq %r15, %rdi
callq 0xf70f6
leaq 0x9f9b6(%rip), %rsi     # 0x13b0a4
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0xe8617
addq 0x8(%rsp), %r12
jmp 0x9b70a
movq 0x8(%rsp), %r12
xorl %r15d, %r15d
incq %r12
leaq 0x8(%rsp), %r13
movq %r12, (%r13)
movq 0x18(%rbx), %rdi
movq %r13, %rsi
callq 0xeeb4b
movzbl %al, %eax
movq %rax, (%r14)
movq 0x18(%rbx), %rdi
movq %r13, %rsi
callq 0xeeb4b
movzbl %al, %edx
movq %rdx, 0x8(%r14)
movq (%r14), %rsi
movq %rbx, %rdi
callq 0xe8f88
movq (%r13), %rsi
addq $0x3, %rsi
movq %rsi, (%r13)
movq 0x18(%rbx), %rdi
movq (%r14), %rdx
movq 0x8(%r14), %rcx
leaq 0x7(%rdx), %rax
leaq 0xe(%rdx), %r8
testq %rax, %rax
cmovnsq %rax, %r8
sarq $0x3, %r8
movl $0x1, %r9d
pushq $0x0
pushq $0x0
callq 0xf2b5b
addq $0x10, %rsp
movq %r15, %rdi
callq 0xf6753
movq %rbx, %rdi
movq %r14, %rsi
callq 0xe8be2
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_module_nlm
void de_module_nlm(deark *c, struct deark_module_info *mi)
{
	mi->id = "nlm";
	mi->desc = "Nokia Logo Manager bitmap";
	mi->run_fn = de_run_nlm;
	mi->identify_fn = de_identify_nlm;
}

// Assembly:
leaq 0x95e9f(%rip), %rax     # 0x131670
movq %rax, (%rsi)
leaq 0x95e99(%rip), %rax     # 0x131674
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b7f6
movq %rax, 0x18(%rsi)
leaq 0xd2(%rip), %rax        # 0x9b8c3
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_run_nlm
static void de_run_nlm(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;
	u8 imgtype;
	const char *s;

	d = de_malloc(c, sizeof(lctx));

	imgtype = de_getbyte(5);
	switch(imgtype) {
	case 0: s="Operator logo"; break;
	case 1: s="Caller logo"; break;
	case 2: s="Startup logo"; break;
	case 3: s="Picture image logo"; break;
	default: s="unknown";
	}
	de_dbg(c, "image type: %d (%s)", (int)imgtype, s);

	d->w = (i64)de_getbyte(7);
	d->h = (i64)de_getbyte(8);
	de_dbg_dimensions(c, d->w, d->h);

	npm_nlm_read_bitmap(c, d, 10);

	de_free(c, d);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl $0x18, %esi
callq 0xe8b2b
movq %rax, %r14
movq 0x18(%rbx), %rdi
movl $0x5, %esi
callq 0xeead3
movzbl %al, %edx
cmpb $0x3, %al
ja 0x9b82f
leaq 0x95f1e(%rip), %rax     # 0x131744
movslq (%rax,%rdx,4), %rcx
addq %rax, %rcx
jmp 0x9b836
leaq 0x76c66(%rip), %rcx     # 0x11249c
leaq 0x95eae(%rip), %rsi     # 0x1316eb
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe8617
movq 0x18(%rbx), %rdi
movl $0x7, %esi
callq 0xeead3
movzbl %al, %eax
movq %rax, (%r14)
movq 0x18(%rbx), %rdi
movl $0x8, %esi
callq 0xeead3
movzbl %al, %edx
movq %rdx, 0x8(%r14)
movq (%r14), %rsi
movq %rbx, %rdi
callq 0xe8f88
movq 0x18(%rbx), %rdi
movq (%r14), %rdx
movq 0x8(%r14), %rcx
leaq 0x7(%rdx), %rax
leaq 0xe(%rdx), %r8
testq %rax, %rax
cmovnsq %rax, %r8
sarq $0x3, %r8
movl $0xa, %esi
movl $0x1, %r9d
pushq $0x0
pushq $0x0
callq 0xf2b5b
addq $0x10, %rsp
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xe8be2
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_module_nsl
void de_module_nsl(deark *c, struct deark_module_info *mi)
{
	mi->id = "nsl";
	mi->desc = "Nokia Startup Logo";
	mi->run_fn = de_run_nsl;
	mi->identify_fn = de_identify_nsl;
}

// Assembly:
leaq 0x95d9e(%rip), %rax     # 0x13168e
movq %rax, (%rsi)
leaq 0x95d98(%rip), %rax     # 0x131692
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9b915
movq %rax, 0x18(%rsi)
leaq 0x6a(%rip), %rax        # 0x9b97a
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_run_nsl
static void de_run_nsl(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;
	struct de_iffctx *ictx = NULL;

	d = de_malloc(c, sizeof(lctx));
	ictx = fmtutil_create_iff_decoder(c);

	ictx->userdata = (void*)d;
	ictx->handle_chunk_fn = my_nsl_chunk_handler;
	ictx->f = c->infile;
	ictx->sizeof_len = 2;

	fmtutil_read_iff_format(ictx, 0, c->infile->len);

	fmtutil_destroy_iff_decoder(ictx);
	de_free(c, d);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movl $0x18, %esi
callq 0xe8b2b
movq %rax, %r14
movq %rbx, %rdi
callq 0x1075c0
movq %rax, %r15
movq %r14, 0x10(%rax)
leaq 0x144(%rip), %rax       # 0x9ba84
movq %rax, 0x20(%r15)
movq 0x18(%rbx), %rax
movq %rax, 0x18(%r15)
movq $0x2, 0x50(%r15)
movq 0x18(%rax), %rdx
movq %r15, %rdi
xorl %esi, %esi
callq 0x1075e4
movq %r15, %rdi
callq 0x1075d3
movq %rbx, %rdi
movq %r14, %rsi
popq %rbx
popq %r14
popq %r15
jmp 0xe8be2
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: de_identify_nsl
static int de_identify_nsl(deark *c)
{
	i64 x;

	// NSL uses a variant of IFF, which is not so easy to identify.
	// (TODO: Write an IFF format detector.)

	if(dbuf_memcmp(c->infile, 0, "FORM", 4)) return 0;

	x = de_getu16be(4);
	if(x+6 != c->infile->len) return 0;

	if(de_input_file_has_ext(c, "nsl")) {
		return 100;
	}
	return 10;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
movq 0x18(%rdi), %rdi
leaq 0x7fa67(%rip), %rdx     # 0x11b3f3
xorl %ebx, %ebx
movl $0x4, %ecx
xorl %esi, %esi
callq 0xefc85
testl %eax, %eax
jne 0x9b9d8
movq 0x18(%r14), %rdi
movl $0x4, %esi
callq 0xeeb67
addq $0x6, %rax
movq 0x18(%r14), %rcx
cmpq 0x18(%rcx), %rax
jne 0x9b9d8
leaq 0x95ccd(%rip), %rsi     # 0x13168e
movq %r14, %rdi
callq 0xea491
testl %eax, %eax
movl $0xa, %eax
movl $0x64, %ebx
cmovel %eax, %ebx
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: nol_ngg_read_bitmap
static void nol_ngg_read_bitmap(deark *c, lctx *d, i64 pos)
{
	de_bitmap *img = NULL;
	i64 i, j;
	u8 n;

	img = de_bitmap_create(c, d->w, d->h, 1);

	for(j=0; j<d->h; j++) {
		for(i=0; i<d->w; i++) {
			n = de_getbyte(pos);
			pos++;
			de_bitmap_setpixel_gray(img, i, j, n=='0' ? 255 : 0);
		}
	}

	de_bitmap_write_to_file(img, NULL, DE_CREATEFLAG_IS_BWIMG);
	de_bitmap_destroy(img);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rsi), %rsi
movq 0x8(%r14), %rdx
movl $0x1, %ecx
callq 0xf266a
movq %rax, %r12
movq 0x8(%r14), %rcx
testq %rcx, %rcx
jle 0x9ba5f
movq (%r14), %rax
xorl %r13d, %r13d
testq %rax, %rax
jle 0x9ba57
xorl %ebp, %ebp
leaq (%rbx,%rbp), %rsi
movq 0x18(%r15), %rdi
callq 0xeead3
cmpb $0x30, %al
sete %al
negb %al
movzbl %al, %ecx
movq %r12, %rdi
movq %rbp, %rsi
movq %r13, %rdx
callq 0xf2405
incq %rbp
movq (%r14), %rax
cmpq %rax, %rbp
jl 0x9ba20
movq 0x8(%r14), %rcx
addq %rbp, %rbx
incq %r13
cmpq %rcx, %r13
jl 0x9ba19
movq %r12, %rdi
xorl %esi, %esi
movl $0x8, %edx
callq 0xf22dc
movq %r12, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xf228d
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/nokia.c
// Function: my_nsl_chunk_handler
static int my_nsl_chunk_handler(struct de_iffctx *ictx)
{
	deark *c = ictx->c;
	lctx *d = (lctx*)ictx->userdata;

	if(ictx->chunkctx->chunk4cc.id == CODE_FORM) {
		ictx->is_raw_container = 1;
		return 1;
	}

	switch(ictx->chunkctx->chunk4cc.id) {
	case CODE_NSLD:
		if(ictx->level==1 && !d->done_flag) {
			nsl_read_bitmap(c, d, ictx->chunkctx->dpos, ictx->chunkctx->dlen);
		}
		ictx->handled = 1;
		break;
	}

	return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %r14
movq 0x128(%rdi), %rax
movl 0x4(%rax), %ecx
cmpl $0x464f524d, %ecx       # imm = 0x464F524D
je 0x9bbe3
cmpl $0x4e534c44, %ecx       # imm = 0x4E534C44
jne 0x9bbf1
movl $0x130, %r12d           # imm = 0x130
cmpl $0x1, 0x64(%r14)
jne 0x9bbe9
movq 0x10(%r14), %rcx
cmpl $0x0, 0x10(%rcx)
jne 0x9bbe9
movq (%r14), %rbp
movq 0x40(%rax), %rdx
movq 0x48(%rax), %r13
leaq 0x95c1c(%rip), %rsi     # 0x131704
movq %rcx, (%rsp)
movq %rbp, %rdi
movq %rdx, %rbx
movl %r13d, %ecx
xorl %eax, %eax
callq 0xe8617
movq (%rsp), %rax
movl $0x1, 0x10(%rax)
cmpq $0x1f8, %r13            # imm = 0x1F8
jne 0x9bc05
movq %r14, 0x10(%rsp)
movq $0x54, (%rax)
movq $0x30, 0x8(%rax)
movl $0x54, %esi
movl $0x30, %edx
movq %rbp, %rdi
movl $0x1, %ecx
callq 0xf266a
movq (%rsp), %rcx
movq %rax, 0x8(%rsp)
movq 0x8(%rcx), %rax
testq %rax, %rax
jle 0x9bbc2
movq %rbp, %rdx
movq (%rcx), %rsi
xorl %r12d, %r12d
testq %rsi, %rsi
jle 0x9bbba
movq %r12, %r13
shrq $0x3, %r13
movl %r12d, %ecx
andb $0x7, %cl
movb $0x1, %r14b
shlb %cl, %r14b
xorl %ebp, %ebp
imulq %r13, %rsi
movq %rdx, %r15
movq 0x18(%rdx), %rdi
addq %rbx, %rsi
addq %rbp, %rsi
callq 0xeead3
testb %r14b, %al
jne 0x9bba4
movq 0x8(%rsp), %rdi
movq %rbp, %rsi
movq %r12, %rdx
movl $0xff, %ecx
callq 0xf2405
incq %rbp
movq (%rsp), %rax
movq (%rax), %rsi
cmpq %rsi, %rbp
movq %r15, %rdx
jl 0x9bb74
movq 0x8(%rax), %rax
incq %r12
cmpq %rax, %r12
jl 0x9bb5a
movq 0x8(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
movl $0x8, %edx
callq 0xf22dc
movq 0x10(%rsp), %r14
movl $0x130, %r12d           # imm = 0x130
jmp 0x9bc1b
movl $0x138, %r12d           # imm = 0x138
movl $0x1, (%r14,%r12)
movl $0x1, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x95b0d(%rip), %rsi     # 0x131719
xorl %ebx, %ebx
movq %rbp, %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0xe9295
movq %rbx, %rdi
callq 0xf228d
jmp 0x9bbe9
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: de_module_os2bmp
void de_module_os2bmp(deark *c, struct deark_module_info *mi)
{
	mi->id = "os2bmp";
	mi->desc = "OS/2 icon (.ICO), cursor (.PTR), bitmap array";
	mi->run_fn = de_run_os2bmp;
	mi->identify_fn = de_identify_os2bmp;
}

// Assembly:
leaq 0x95c09(%rip), %rax     # 0x131838
movq %rax, (%rsi)
leaq 0x95c06(%rip), %rax     # 0x13183f
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9bc54
movq %rax, 0x18(%rsi)
leaq 0x7b4(%rip), %rax       # 0x9c403
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: de_identify_os2bmp_internal
static enum fmtcode de_identify_os2bmp_internal(deark *c)
{
	enum fmtcode fmt;
	u8 b[16];

	de_read(b, 0, 16);

	fmt = bytes_to_fmtcode(b[0], b[1]);
	if(fmt==DE_OS2FMT_BA) {
		enum fmtcode ba_fmt;

		// A Bitmap Array file can contain a mixture of different image types,
		// but for the purposes of identifying the file type, we only look at
		// the first one. This is not ideal, but it really doesn't matter.
		ba_fmt = bytes_to_fmtcode(b[14], b[15]);
		if(ba_fmt==DE_OS2FMT_IC) return DE_OS2FMT_BA_IC;
		if(ba_fmt==DE_OS2FMT_PT) return DE_OS2FMT_BA_PT;
		if(ba_fmt==DE_OS2FMT_CI) return DE_OS2FMT_BA_CI;
		if(ba_fmt==DE_OS2FMT_CP) return DE_OS2FMT_BA_CP;
		if(ba_fmt==DE_OS2FMT_BM) return DE_OS2FMT_BA_BM;
		return DE_OS2FMT_BA;
	}
	if(fmt==DE_OS2FMT_IC) return DE_OS2FMT_IC;
	if(fmt==DE_OS2FMT_PT) return DE_OS2FMT_PT;
	if(fmt==DE_OS2FMT_CI) return DE_OS2FMT_CI;
	if(fmt==DE_OS2FMT_CP) return DE_OS2FMT_CP;
	return DE_OS2FMT_UNKNOWN;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
movq %rsp, %rbx
movl $0x10, %ecx
movq %rbx, %rsi
xorl %edx, %edx
callq 0xee8d4
movzbl (%rbx), %edi
movzbl 0x1(%rbx), %esi
callq 0x9c493
cmpl $0xa, %eax
ja 0x9c48f
movl $0x550, %ecx            # imm = 0x550
btl %eax, %ecx
jae 0x9c45e
addq $0x10, %rsp
popq %rbx
retq
cmpl $0x1, %eax
jne 0x9c48f
movzbl 0xe(%rsp), %edi
movzbl 0xf(%rsp), %esi
callq 0x9c493
movl %eax, %ecx
addl $-0x2, %ecx
movl $0x1, %eax
cmpl $0x9, %ecx
jae 0x9c458
movl %ecx, %eax
leaq 0x9538a(%rip), %rcx     # 0x131814
movl (%rcx,%rax,4), %eax
jmp 0x9c458
xorl %eax, %eax
jmp 0x9c458
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: bytes_to_fmtcode
static enum fmtcode bytes_to_fmtcode(u8 b0, u8 b1)
{
	if(b0=='C' && b1=='I') {
		return DE_OS2FMT_CI;
	}
	else if(b0=='C' && b1=='P') {
		return DE_OS2FMT_CP;
	}
	else if(b0=='I' && b1=='C') {
		return DE_OS2FMT_IC;
	}
	else if(b0=='P' && b1=='T') {
		return DE_OS2FMT_PT;
	}
	else if(b0=='B' && b1=='M') {
		return DE_OS2FMT_BM;
	}
	else if(b0=='B' && b1=='A') {
		return DE_OS2FMT_BA;
	}
	return DE_OS2FMT_UNKNOWN;
}

// Assembly:
movl %edi, %ecx
xorb $0x43, %cl
movl %esi, %edx
xorb $0x49, %dl
movl $0x8, %eax
orb %cl, %dl
je 0x9c4f9
movl %esi, %edx
xorb $0x50, %dl
movl $0xa, %eax
orb %dl, %cl
je 0x9c4f9
movl %edi, %ecx
xorb $0x49, %cl
movl %esi, %edx
xorb $0x43, %dl
movl $0x4, %eax
orb %cl, %dl
je 0x9c4f9
movl %edi, %ecx
xorb $0x50, %cl
movl %esi, %edx
xorb $0x54, %dl
movl $0x6, %eax
orb %cl, %dl
je 0x9c4f9
xorb $0x42, %dil
movl %esi, %ecx
xorb $0x4d, %cl
movl $0x2, %eax
orb %dil, %cl
je 0x9c4f9
xorb $0x41, %sil
xorl %eax, %eax
orb %sil, %dil
sete %al
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: do_free_srcbmp
static void do_free_srcbmp(deark *c, struct srcbitmap *srcbmp)
{
	if(!srcbmp) return;
	if(srcbmp->img) {
		de_bitmap_destroy(srcbmp->img);
	}
	de_free(c, srcbmp);
}

// Assembly:
testq %rsi, %rsi
je 0x9c528
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movq (%rsi), %rdi
testq %rdi, %rdi
je 0x9c516
callq 0xf228d
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xe8be2
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: do_bitmap_header
static int do_bitmap_header(deark *c, struct os2icoctx *d, struct srcbitmap *srcbmp,
	i64 pos, const char *bitmapname)
{
	i64 pal_start;
	int saved_indent_level;
	int retval = 0;

	de_dbg_indent_save(c, &saved_indent_level);
	de_dbg(c, "%s %s bitmap header at %"I64_FMT, d->fmtname, bitmapname, pos);
	de_dbg_indent(c, 1);

	if(!get_bitmap_info(c, srcbmp, d->fmt, d->fmtname, pos))
		goto done;

	// read palette
	if (srcbmp->bi.pal_entries > 0) {
		pal_start = pos+14+srcbmp->bi.infohdrsize;
		de_dbg(c, "palette at %d", (int)pal_start);
		de_dbg_indent(c, 1);
		de_read_palette_rgb(c->infile, pal_start, srcbmp->bi.pal_entries, srcbmp->bi.bytes_per_pal_entry,
			srcbmp->pal, 256, DE_GETRGBFLAG_BGR);
		de_dbg_indent(c, -1);
	}

	if(srcbmp->bi.size_of_headers_and_pal<26) {
		de_err(c, "Bad %s image", d->fmtname);
		goto done;
	}

	retval = 1;

done:
	de_dbg_indent_restore(c, saved_indent_level);
	return retval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r8, %r13
movq %rcx, %r12
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x14(%rsp), %rsi
callq 0xe8a1c
movq (%r14), %rdx
leaq 0x953bf(%rip), %rsi     # 0x131919
xorl %ebp, %ebp
movq %rbx, %rdi
movq %r13, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0xe8617
movq %rbx, %rdi
movl $0x1, %esi
callq 0xe8a15
movl 0x8(%r14), %edx
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rcx
callq 0x9c93b
testl %eax, %eax
je 0x9c620
cmpq $0x0, 0x58(%r15)
jle 0x9c5fb
movq 0x20(%r15), %rax
addq %rax, %r12
addq $0xe, %r12
leaq 0x93ebd(%rip), %rsi     # 0x130469
movq %rbx, %rdi
movl %r12d, %edx
xorl %eax, %eax
callq 0xe8617
movq %rbx, %rdi
movl $0x1, %esi
callq 0xe8a15
movq 0x18(%rbx), %rdi
movq 0x50(%r15), %rcx
movq 0x58(%r15), %rdx
leaq 0xb8(%r15), %r8
movl $0x1, (%rsp)
movl $0x100, %r9d            # imm = 0x100
movq %r12, %rsi
callq 0xf2c4e
movq %rbx, %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0xe8a15
movl $0x1, %ebp
cmpq $0x19, 0x90(%r15)
jg 0x9c620
movq (%r14), %rdx
leaq 0x95320(%rip), %rsi     # 0x131934
xorl %ebp, %ebp
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe9295
movl 0x14(%rsp), %esi
movq %rbx, %rdi
callq 0xe8a25
movl %ebp, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: do_read_bitmap
static int do_read_bitmap(deark *c, struct srcbitmap *srcbmp, int mask_mode, const char *bitmapname)
{
	int retval = 0;

	if(!srcbmp) goto done;
	if(srcbmp->img) goto done;

	if(mask_mode && srcbmp->bi.bitcount!=1) {
		mask_mode = 0;
	}

	srcbmp->img = de_bitmap_create(c, srcbmp->bi.width, srcbmp->bi.height, mask_mode?1:4);

	de_dbg(c, "%s pixel data at %"I64_FMT, bitmapname, srcbmp->bi.bitsoffset);

	if(mask_mode) {
		de_convert_image_bilevel(c->infile, srcbmp->bi.bitsoffset, srcbmp->bi.rowspan,
			srcbmp->img, 0);
	}
	else if(srcbmp->bi.bitcount<=8) {
		de_convert_image_paletted(c->infile, srcbmp->bi.bitsoffset, srcbmp->bi.bitcount,
			srcbmp->bi.rowspan, srcbmp->pal, srcbmp->img, 0);
	}
	else if(srcbmp->bi.bitcount==24) {
		de_convert_image_rgb(c->infile, srcbmp->bi.bitsoffset, srcbmp->bi.rowspan, 3,
			srcbmp->img, DE_GETRGBFLAG_BGR);
	}
	else {
		goto done;
	}

	retval = 1;
done:
	return retval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
xorl %ebp, %ebp
testq %rsi, %rsi
je 0x9c704
movq %rsi, %rbx
cmpq $0x0, (%rsi)
jne 0x9c704
movq %rcx, %r15
movq %rdi, %r14
testl %edx, %edx
je 0x9c67f
xorl %r12d, %r12d
cmpq $0x1, 0x38(%rbx)
setne %r12b
leal (%r12,%r12,2), %ecx
incl %ecx
jmp 0x9c687
movl $0x4, %ecx
movb $0x1, %r12b
movq 0x28(%rbx), %rsi
movq 0x30(%rbx), %rdx
movq %r14, %rdi
callq 0xf266a
movq %rax, (%rbx)
movq 0x18(%rbx), %rcx
leaq 0x952d5(%rip), %rsi     # 0x13197a
movq %r14, %rdi
movq %r15, %rdx
xorl %eax, %eax
callq 0xe8617
testb %r12b, %r12b
je 0x9c6e8
movq 0x38(%rbx), %rdx
cmpq $0x8, %rdx
jg 0x9c713
movq 0x18(%r14), %rdi
movq (%rbx), %r9
movq 0x18(%rbx), %rsi
movq 0x68(%rbx), %rcx
addq $0xb8, %rbx
movl $0x0, (%rsp)
movq %rbx, %r8
callq 0xf2f79
jmp 0x9c6ff
movq 0x18(%r14), %rdi
movq (%rbx), %rcx
movq 0x18(%rbx), %rsi
movq 0x68(%rbx), %rdx
xorl %r8d, %r8d
callq 0xf2a40
movl $0x1, %ebp
movl %ebp, %eax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
xorl %ebp, %ebp
cmpq $0x18, %rdx
jne 0x9c704
movq 0x18(%r14), %rdi
movq (%rbx), %r8
movq 0x18(%rbx), %rsi
movq 0x68(%rbx), %rdx
movl $0x1, %ebp
movl $0x3, %ecx
movl $0x1, %r9d
callq 0xf3279
jmp 0x9c704
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: do_write_final_image
static void do_write_final_image(deark *c, struct os2icoctx *d, de_bitmap *img)
{
	de_finfo *fi = NULL;

	fi = de_finfo_create(c);
	if(d->srcbmp) {
		if(d->srcbmp->has_hotspot) {
			fi->has_hotspot = 1;
			fi->hotspot_x = d->srcbmp->bi.hotspot_x;
			fi->hotspot_y = (int)img->height - 1 - d->srcbmp->bi.hotspot_y;
		}
	}
	else if(d->maskbmp) {
		if(d->maskbmp->has_hotspot) {
			fi->has_hotspot = 1;
			fi->hotspot_x = d->maskbmp->bi.hotspot_x;
			fi->hotspot_y = (int)img->height - 1 - d->maskbmp->bi.hotspot_y;
		}
	}

	de_bitmap_write_to_file_finfo(img, fi, DE_CREATEFLAG_OPT_IMAGE | DE_CREATEFLAG_FLIP_IMAGE);

	de_finfo_destroy(c, fi);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %rbx
callq 0xea504
movq %rax, %r15
movq 0x10(%r12), %rax
testq %rax, %rax
jne 0x9c8ed
movq 0x18(%r12), %rax
testq %rax, %rax
je 0x9c915
cmpb $0x0, 0xa8(%rax)
je 0x9c915
movb $0x1, 0xe(%r15)
movl 0xc(%rax), %ecx
movl %ecx, 0x98(%r15)
movl 0x10(%rax), %eax
notl %eax
addl 0x10(%r14), %eax
movl %eax, 0x9c(%r15)
movq %r14, %rdi
movq %r15, %rsi
movl $0x6, %edx
callq 0xf22d0
movq %rbx, %rdi
movq %r15, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xea50e
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: get_bitmap_info
static int get_bitmap_info(deark *c, struct srcbitmap *srcbmp, enum fmtcode fmt,
	const char *fmtname, i64 pos)
{
	int retval = 0;
	unsigned int flags;

	flags = DE_BMPINFO_HAS_FILEHEADER;
	if(fmt==DE_OS2FMT_CP || fmt==DE_OS2FMT_PT) {
		srcbmp->has_hotspot = 1;
		flags |= DE_BMPINFO_HAS_HOTSPOT;
	}
	if(!fmtutil_get_bmpinfo(c, c->infile, &srcbmp->bi, pos, c->infile->len - pos, flags)) {
		de_err(c, "Invalid or unsupported bitmap");
		goto done;
	}

	if(srcbmp->bi.is_compressed) {
		if(srcbmp->bi.sizeImage_field) {
			srcbmp->bitssize = srcbmp->bi.sizeImage_field;
		}
		else {
			de_err(c, "Cannot determine bits size");
			goto done;
		}
	}
	else {
		srcbmp->bitssize = srcbmp->bi.rowspan * srcbmp->bi.height;
	}

	retval = 1;
done:
	return retval;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
cmpl $0xa, %edx
je 0x9c955
movl $0x1, %r9d
cmpl $0x6, %edx
jne 0x9c963
movb $0x1, 0xa8(%r14)
movl $0x5, %r9d
movq 0x18(%rbx), %rsi
leaq 0x8(%r14), %rdx
movq 0x18(%rsi), %r8
subq %rcx, %r8
movq %rbx, %rdi
callq 0xf7425
testl %eax, %eax
je 0x9c99a
cmpl $0x0, 0xa0(%r14)
je 0x9c9af
movq 0x48(%r14), %rax
testq %rax, %rax
jne 0x9c9b8
leaq 0x94fc7(%rip), %rsi     # 0x13195f
jmp 0x9c9a1
leaq 0x94fa0(%rip), %rsi     # 0x131941
xorl %ebp, %ebp
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe9295
jmp 0x9c9c4
movq 0x30(%r14), %rax
imulq 0x68(%r14), %rax
movq %rax, 0xb0(%r14)
movl $0x1, %ebp
movl %ebp, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2bmp.c
// Function: do_extract_one_image
static void do_extract_one_image(deark *c, i64 pos, enum fmtcode fmt,
	const char *fmtname, const char *ext)
{
	struct srcbitmap *srcbmp = NULL;
	dbuf *f = NULL;

	de_dbg(c, "%s image at %d", fmtname, (int)pos);
	de_dbg_indent(c, 1);

	srcbmp = de_malloc(c, sizeof(struct srcbitmap));

	if(!get_bitmap_info(c, srcbmp, fmt, fmtname, pos))
		goto done;

	f = dbuf_create_output_file(c, ext, NULL, 0);

	// First 10 bytes of the FILEHEADER can be copied unchanged.
	dbuf_copy(c->infile, pos, 10, f);

	// The "bits offset" is probably the only thing we need to adjust.
	dbuf_writeu32le(f, srcbmp->bi.size_of_headers_and_pal);

	// Copy the infoheader & palette
	dbuf_copy(c->infile, pos+14, srcbmp->bi.size_of_headers_and_pal-14, f);

	// Copy the bitmap
	if(srcbmp->bi.bitsoffset+srcbmp->bitssize > c->infile->len) goto done;
	dbuf_copy(c->infile, srcbmp->bi.bitsoffset, srcbmp->bitssize, f);

done:
	de_dbg_indent(c, -1);
	dbuf_close(f);
	do_free_srcbmp(c, srcbmp);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r13
movl %edx, %ebp
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x95043(%rip), %rsi     # 0x131a2b
xorl %r14d, %r14d
movq %rcx, %rdx
movl %r12d, %ecx
xorl %eax, %eax
callq 0xe8617
movq %rbx, %rdi
movl $0x1, %esi
callq 0xe8a15
movl $0x4b8, %esi            # imm = 0x4B8
movq %rbx, %rdi
callq 0xe8b2b
movq %rax, %r15
movq %rbx, %rdi
movq %rax, %rsi
movl %ebp, %edx
movq %r12, %rcx
callq 0x9c93b
testl %eax, %eax
je 0x9ca9d
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0xefda1
movq %rax, %r14
movq 0x18(%rbx), %rdi
movl $0xa, %edx
movq %r12, %rsi
movq %rax, %rcx
callq 0xef481
movq 0x90(%r15), %rsi
movq %r14, %rdi
callq 0xf1042
movq 0x18(%rbx), %rdi
addq $0xe, %r12
movq 0x90(%r15), %rdx
addq $-0xe, %rdx
movq %r12, %rsi
movq %r14, %rcx
callq 0xef481
movq 0x18(%r15), %rsi
movq 0xb0(%r15), %rdx
leaq (%rdx,%rsi), %rax
movq 0x18(%rbx), %rdi
cmpq 0x18(%rdi), %rax
jg 0x9ca9d
movq %r14, %rcx
callq 0xef481
movq %rbx, %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0xe8a15
movq %r14, %rdi
callq 0xf052b
movq %rbx, %rdi
movq %r15, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x9c4fa
nop
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/ole1.c
// Function: de_module_ole1
void de_module_ole1(deark *c, struct deark_module_info *mi)
{
	mi->id = "ole1";
	mi->desc = "OLE1.0 objects";
	mi->run_fn = de_run_ole1;
	mi->identify_fn = NULL;
	mi->flags |= DE_MODFLAG_HIDDEN;
}

// Assembly:
leaq 0x7ccaf(%rip), %rax     # 0x119782
movq %rax, (%rsi)
leaq 0x94f6b(%rip), %rax     # 0x131a48
movq %rax, 0x8(%rsi)
leaq 0x11(%rip), %rax        # 0x9caf9
movq %rax, 0x18(%rsi)
movq $0x0, 0x20(%rsi)
orb $0x1, 0x30(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/ole1.c
// Function: calc_skip_presentation_obj
static int calc_skip_presentation_obj(deark *c, lctx *d)
{
	UI format;
	int retval = 0;
	int ret;
	i64 n;

	if(!calc_chkver(c, d)) goto done;

	format = (UI)de_getu32le_p(&d->pos_for_calc_size);
	if(format==0) {
		retval = 1;
		goto done;
	}

	ret = calc_chkstring(c, d);
	if(ret) {
		d->pos_for_calc_size += 8; // width, height
		n = de_getu32le_p(&d->pos_for_calc_size);
		d->pos_for_calc_size += n; // Presentation data
	}
	else {
		n = de_getu32le_p(&d->pos_for_calc_size);
		if(n==0) {
			n = de_getu32le_p(&d->pos_for_calc_size);
			d->pos_for_calc_size += n; // Clipboard format name
		}
		n = de_getu32le_p(&d->pos_for_calc_size);
		d->pos_for_calc_size += n; // Presentation data
	}
	retval = 1;

done:
	return retval;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movq 0x18(%rdi), %rdi
addq $0x10, %rbx
movq %rbx, %rsi
callq 0xeed83
andl $0xff0000ff, %eax       # imm = 0xFF0000FF
xorl %ebp, %ebp
cmpl $0x1, %eax
jne 0x9deec
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xeed83
movl $0x1, %ebp
testl %eax, %eax
je 0x9deec
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xeed83
movq %rax, %r15
cmpq $0xf, %rax
jg 0x9deac
movq 0x18(%r14), %rdi
movq (%rbx), %rsi
movq %r15, %rdx
movq %r15, %rcx
movl $0x1, %r8d
movl $0x5, %r9d
callq 0xef87c
movq %rax, %r12
movq 0x8(%rax), %r13
leaq 0xa2c78(%rip), %rsi     # 0x140add
movq %r13, %rdi
callq 0x181a0
testl %eax, %eax
je 0x9de97
leaq 0xac8ac(%rip), %rsi     # 0x14a724
movq %r13, %rdi
callq 0x181a0
testl %eax, %eax
je 0x9de97
leaq 0xac8a3(%rip), %rsi     # 0x14a72e
movq %r13, %rdi
callq 0x181a0
testl %eax, %eax
jne 0x9deaf
addq %r15, (%rbx)
movq %r14, %rdi
movq %r12, %rsi
callq 0xefaca
movl $0x8, %eax
jmp 0x9deda
xorl %r12d, %r12d
addq %r15, (%rbx)
movq %r14, %rdi
movq %r12, %rsi
callq 0xefaca
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xeed83
testq %rax, %rax
jne 0x9dedd
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xeed83
addq %rax, (%rbx)
movq 0x18(%r14), %rdi
movq %rbx, %rsi
callq 0xeed83
addq %rax, (%rbx)
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2pack.c
// Function: de_module_os2pack
void de_module_os2pack(deark *c, struct deark_module_info *mi)
{
	mi->id = "os2pack";
	mi->desc = "OS/2 PACK archive";
	mi->run_fn = de_run_os2pack;
	mi->identify_fn = de_identify_os2pack;
}

// Assembly:
leaq 0x93ed9(%rip), %rax     # 0x131de0
movq %rax, (%rsi)
leaq 0x93ed7(%rip), %rax     # 0x131de8
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9df2c
movq %rax, 0x18(%rsi)
leaq 0xf(%rip), %rax         # 0x9df36
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2pack.c
// Function: de_module_os2pack2
void de_module_os2pack2(deark *c, struct deark_module_info *mi)
{
	mi->id = "os2pack2";
	mi->desc = "OS/2 PACK2 archive";
	mi->run_fn = de_run_os2pack2;
	mi->flags |= DE_MODFLAG_WARNPARSEONLY;
	mi->identify_fn = de_identify_os2pack2;
}

// Assembly:
leaq 0x93e84(%rip), %rax     # 0x131dfa
movq %rax, (%rsi)
leaq 0x93e83(%rip), %rax     # 0x131e03
movq %rax, 0x8(%rsi)
leaq 0x14(%rip), %rax        # 0x9df9f
movq %rax, 0x18(%rsi)
orb $0x20, 0x30(%rsi)
leaq 0xc(%rip), %rax         # 0x9dfa6
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/os2pack.c
// Function: os2pack2_read_cmpr_method
static void os2pack2_read_cmpr_method(deark *c, i64 pos, i64 len)
{
	struct de_fourcc cmpr4cc;

	if(len<8) return;
	dbuf_read_fourcc(c->infile, pos+4, &cmpr4cc, 4, 0x0);
	de_dbg(c, "cmpr meth: '%s'", cmpr4cc.id_dbgstr); // Usually "fT19"
}

// Assembly:
cmpq $0x8, %rdx
jl 0x9e79b
pushq %rbx
subq $0x30, %rsp
movq %rdi, %rbx
movq 0x18(%rdi), %rdi
addq $0x4, %rsi
movq %rsp, %rdx
movl $0x4, %ecx
xorl %r8d, %r8d
callq 0xf1762
leaq 0x10(%rsp), %rdx
leaq 0x93759(%rip), %rsi     # 0x131ee5
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe8617
addq $0x30, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/officeart.c
// Function: de_module_officeart
void de_module_officeart(deark *c, struct deark_module_info *mi)
{
	mi->id = "officeart";
	mi->desc = "Office Art data";
	mi->run_fn = de_run_officeart;
	mi->flags |= DE_MODFLAG_HIDDEN;
}

// Assembly:
leaq 0x7b898(%rip), %rax     # 0x11a05f
movq %rax, (%rsi)
leaq 0x9379b(%rip), %rax     # 0x131f6c
movq %rax, 0x8(%rsi)
leaq 0x9(%rip), %rax         # 0x9e7e5
movq %rax, 0x18(%rsi)
orb $0x1, 0x30(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/lbr.c
// Function: de_module_lbr
void de_module_lbr(deark *c, struct deark_module_info *mi)
{
	mi->id = "lbr";
	mi->desc = "LBR archive";
	mi->run_fn = de_run_lbr;
	mi->identify_fn = de_identify_lbr;
}

// Assembly:
leaq 0x93360(%rip), %rax     # 0x1320a3
movq %rax, (%rsi)
leaq 0x9335a(%rip), %rax     # 0x1320a7
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9ed68
movq %rax, 0x18(%rsi)
leaq 0x99(%rip), %rax        # 0x9edfc
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/lbr.c
// Function: de_run_lbr
static void de_run_lbr(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;
	i64 pos = 0;

	d = de_malloc(c, sizeof(lctx));
	d->input_encoding = de_get_input_encoding(c, NULL, DE_ENCODING_ASCII);

	d->crco = de_crcobj_create(c, DE_CRCOBJ_CRC16_XMODEM);

	// Read directory
	if(!do_entry(c, d, pos, 1)) goto done;
	pos += LBR_DIRENT_SIZE;

	// Read member files
	while(pos+LBR_DIRENT_SIZE <= c->infile->len &&
		pos+LBR_DIRENT_SIZE <= d->dir_len_in_bytes)
	{
		if(!do_entry(c, d, pos, 0)) goto done;
		pos += LBR_DIRENT_SIZE;
	}

done:
	if(d) {
		de_crcobj_destroy(d->crco);
		de_free(c, d);
	}
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movl $0x18, %esi
callq 0xe8b2b
movq %rax, %r14
movq %rbx, %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0xeb220
movl %eax, (%r14)
movq %rbx, %rdi
movl $0x20, %esi
callq 0xeb499
movq %rax, 0x10(%r14)
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
movl $0x1, %ecx
callq 0xa035c
testl %eax, %eax
je 0x9ede3
movl $0x20, %edx
leaq 0x20(%rdx), %r15
movq 0x18(%rbx), %rax
cmpq 0x18(%rax), %r15
jg 0x9ede3
cmpq 0x8(%r14), %r15
jg 0x9ede3
movq %rbx, %rdi
movq %r14, %rsi
xorl %ecx, %ecx
callq 0xa035c
movq %r15, %rdx
testl %eax, %eax
jne 0x9edbb
movq 0x10(%r14), %rdi
callq 0xeb858
movq %rbx, %rdi
movq %r14, %rsi
popq %rbx
popq %r14
popq %r15
jmp 0xe8be2
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/lbr.c
// Function: de_module_squeeze
void de_module_squeeze(deark *c, struct deark_module_info *mi)
{
	mi->id = "squeeze";
	mi->desc = "Squeeze (CP/M)";
	mi->run_fn = de_run_squeeze;
	mi->identify_fn = de_identify_squeeze;
}

// Assembly:
leaq 0xabd28(%rip), %rax     # 0x14ab51
movq %rax, (%rsi)
leaq 0x93280(%rip), %rax     # 0x1320b3
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9ee4e
movq %rax, 0x18(%rsi)
leaq 0x602(%rip), %rax       # 0x9f44b
movq %rax, 0x20(%rsi)
retq
// File: /workspace/github_c_makefile_star2_O3/jsummers[P]deark/modules/lbr.c
// Function: de_module_crunch
void de_module_crunch(deark *c, struct deark_module_info *mi)
{
	mi->id = "crunch";
	mi->desc = "Crunch (CP/M)";
	mi->run_fn = de_run_crunch;
	mi->identify_fn = de_identify_crunch;
}

// Assembly:
leaq 0x92c44(%rip), %rax     # 0x1320c2
movq %rax, (%rsi)
leaq 0x92c41(%rip), %rax     # 0x1320c9
movq %rax, 0x8(%rsi)
leaq 0x10(%rip), %rax        # 0x9f4a3
movq %rax, 0x18(%rsi)
leaq 0x3e4(%rip), %rax       # 0x9f882
movq %rax, 0x20(%rsi)
retq