// File: /workspace/github_c_makefile_star2_O0/miniupnp[P]hfsplustools/src/hfscommon.c
// Function: hfs_find_in_node
static
int hfs_find_in_node(unsigned char * catalog, unsigned char * p,
                     uint32_t parent_id, const char * name,
                     struct find_infos * infos)
{
	uint8_t kind;
#if 0
	uint32_t fLink, bLink;
	int height;
#endif
	uint16_t rec, num_records;
	uint32_t previous_node_number = 0;
	/* struct BTNodeDescriptor {
	 *  UInt32    fLink;	// next node
	 *  UInt32    bLink;	// previous node
	 *  SInt8     kind;
	 *  UInt8     height;
	 *  UInt16    numRecords;
	 *  UInt16    reserved;
	 * };
	 */
#if 0
	fLink = readu32(p);
	bLink = readu32(p+4);
	height = p[9];
#endif
	kind = p[8];
	num_records = readu16(p+10);
#if 0
	printf("Node %lu next=%u previous=%u kind=%d height=%d numRecords=%hu\n",
	       (unsigned long)(p - catalog) / catalog_node_size, fLink, bLink,
	       (int)kind, (int)height, num_records);
#endif
	p += 14;
	switch(kind) {
	case 0:	/* index */
		for(rec = 0; rec < num_records; rec++) {
			/* record */
			char str[256];
			uint16_t key_length = readu16(p);
			uint32_t cur_parent_id = readu32(p + 2);
			uint32_t node_number = readu32(p + key_length + 2);
			hfs_uni_to_str(str, sizeof(str), p + 6);
			/* Catalog file keys are compared first by parentID and
			 * then by nodeName. The parentID is compared as an
			 * unsigned 32-bit integer.
			 * For case-sensitive HFSX volumes, the characters in nodeName
			 * are compared as a sequence of unsigned 16-bit integers.
			 * For case-insensitive HFSX volumes and HFS Plus volumes,
			 * the nodeName must be compared in a case-insensitive way,
			 * as described in the Case-Insensitive String Comparison
			 * Algorithm section. */
			if(parent_id == cur_parent_id) {
				int comp = strcasecmp(str, name);
				/* https://developer.apple.com/library/archive/technotes/tn/tn1150.html#StringComparisonAlgorithm */
				if((name == NULL) || (0==comp)) {
					/* this one */
					p = catalog + node_number * catalog_node_size;
					return hfs_find_in_node(catalog, p, parent_id, name, infos);
				} else if(comp > 0) {
					/* previous one ! */
					p = catalog + previous_node_number * catalog_node_size;
					return hfs_find_in_node(catalog, p, parent_id, name, infos);
				}
			} else if(cur_parent_id > parent_id) {
				/* previous one ! */
				p = catalog + previous_node_number * catalog_node_size;
				return hfs_find_in_node(catalog, p, parent_id, name, infos);
			}
			p += key_length + 2 + 4;
			previous_node_number = node_number;
		}
		p = catalog + previous_node_number * catalog_node_size;
		return hfs_find_in_node(catalog, p, parent_id, name, infos);
	case 255:	/* LEAF */
		printf("LEAF %u records\n", num_records);
		for(rec = 0; rec < num_records; rec++) {
			char str[256];
			uint16_t record_type;
			uint16_t key_length = readu16(p);
			unsigned char * q;
			uint32_t valence;
			uint32_t folder_id;
			uint32_t cur_parent_id = readu32(p + 2);
			/* For file and folder records, this is the folder containing
			 * the file or folder represented by the record. For thread
			 * records, this is the CNID of the file or folder itself. */
			uint16_t HFSflags;
			char fileTypeCreator[9];
			int i;
			uint32_t block;
			hfs_uni_to_str(str, sizeof(str), p + 6);
			q = p + 2 + key_length;
			record_type = readu16(q);
			printf("%3d record type=%u parentId=%u \"%s\"",
			       rec, record_type, cur_parent_id, str);
			putchar('\n');
			//hexdump(q + 2, 32, 0);
			switch(record_type) {
			case 1: /* folder record */
				/* flags = readu16(q + 2); */
				valence = readu32(q + 4);
				folder_id = readu32(q + 8);
				HFSflags = readu16(q+56);
				//UInt32              createDate;
				//UInt32              contentModDate;
				//UInt32              attributeModDate;
				//UInt32              accessDate;
				//UInt32              backupDate;
				//HFSPlusBSDInfo      permissions;
				//FolderInfo          userInfo;
				//ExtendedFolderInfo  finderInfo;
				//UInt32              textEncoding;
				//UInt32              reserved;
				printf("    valence=%u folder_id=%u\n", valence, folder_id);
				printf("    folderinfo : (%u,%u)-(%u,%u) %04X",
					readu16(q+48), readu16(q+50),
					readu16(q+52), readu16(q+54),
					HFSflags);
				if(HFSflags & 0x0400) printf(" Custom Icon");
				if(HFSflags & 0x4000) printf(" Invisible");
				putchar('\n');
				if(cur_parent_id == parent_id &&
				   (name == NULL || 0 == strcasecmp(name, str))) {
					printf("FOUND FOLDER\n");
					infos->folder_id = folder_id;
					infos->p = q;
					return 1;
				}
				p = q + 88;
				break;
			case 2: /* file record */
				//file_id = readu32(q + 8);
				HFSflags = readu16(q+56);
				//UInt32              createDate;
				//UInt32              contentModDate;
				//UInt32              attributeModDate;
				//UInt32              accessDate;
				//UInt32              backupDate;
				//HFSPlusBSDInfo      permissions;
				//FileInfo            userInfo; // offset 48
				//ExtendedFileInfo    finderInfo;
				//UInt32              textEncoding;
				//UInt32              reserved2;
				//HFSPlusForkData     dataFork;  80 bytes
				//HFSPlusForkData     resourceFork; 80 bytes
				for(i=0; i<8; i++) {
					if(q[48+i] > ' ')
						fileTypeCreator[i] = q[48+i];
					else
						fileTypeCreator[i] = ' ';
				}
				fileTypeCreator[8] = '\0';
				printf("    fileinfo \"%s\" (%d,%d) %04X", fileTypeCreator, reads16(q+58), reads16(q+60), HFSflags);
				if(HFSflags & 0x0400) printf(" Custom Icon");
				if(HFSflags & 0x4000) printf(" Invisible");
				putchar('\n');
				printf("    dataFork size=%u blocks=%u extents:", readu32(q+88+4), readu32(q+88+12));
				for(i = 0; i < 8; i++) {
					block = readu32(q+88+16+i*8);
					printf(" (0x%06x, %u)", block, readu32(q+88+16+i*8+4));
					if(block == 0) break;
				}
				putchar('\n');
				printf("    resourceFork size=%u blocks=%u extents:", readu32(q+168+4), readu32(q+168+12));
				for(i = 0; i < 8; i++) {
					block = readu32(q+168+16+i*8);
					printf(" (0x%06x, %u)", block, readu32(q+168+16+i*8+4));
					if(block == 0) break;
				}
				putchar('\n');
				if(cur_parent_id == parent_id &&
				   (name == NULL || 0 == strcasecmp(name, str))) {
					printf("FOUND FILE\n");
					infos->p = q;
					return 1;
				}
				p = q + 248;
				break;
			case 3:	/* folder thread record */
			case 4:	/* file thread record */
				{
					uint16_t len;
					cur_parent_id = readu32(q + 4);
					len = readu16(q + 8);
					printf("parent_id=%u len=%u\n", cur_parent_id, len);
					p = q + 10 + len * 2;
				}
				break;
			default:
				printf("unknown\n");
				return 0;
			}
		}
		break;
	default:
		printf("unrecognized kind %u\n", kind);
	}
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2c0, %rsp            # imm = 0x2C0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movl $0x0, -0x3c(%rbp)
movq -0x18(%rbp), %rax
movb 0x8(%rax), %al
movb %al, -0x31(%rbp)
movq -0x18(%rbp), %rdi
addq $0xa, %rdi
callq 0x1ab0
movw %ax, -0x36(%rbp)
movq -0x18(%rbp), %rax
addq $0xe, %rax
movq %rax, -0x18(%rbp)
movzbl -0x31(%rbp), %eax
movl %eax, -0x288(%rbp)
testl %eax, %eax
je 0x2942
jmp 0x292c
movl -0x288(%rbp), %eax
subl $0xff, %eax
je 0x2b17
jmp 0x31e0
movw $0x0, -0x34(%rbp)
movzwl -0x34(%rbp), %eax
movzwl -0x36(%rbp), %ecx
cmpl %ecx, %eax
jge 0x2ae0
movq -0x18(%rbp), %rdi
callq 0x1ab0
movw %ax, -0x142(%rbp)
movq -0x18(%rbp), %rdi
addq $0x2, %rdi
callq 0x1af0
movl %eax, -0x148(%rbp)
movq -0x18(%rbp), %rdi
movzwl -0x142(%rbp), %eax
cltq
addq %rax, %rdi
addq $0x2, %rdi
callq 0x1af0
movl %eax, -0x14c(%rbp)
leaq -0x140(%rbp), %rdi
movq -0x18(%rbp), %rdx
addq $0x6, %rdx
movl $0x100, %esi            # imm = 0x100
callq 0x3ab0
movl -0x1c(%rbp), %eax
cmpl -0x148(%rbp), %eax
jne 0x2a67
leaq -0x140(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x1050
movl %eax, -0x150(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x29e9
xorl %eax, %eax
cmpl -0x150(%rbp), %eax
jne 0x2a23
movq -0x10(%rbp), %rax
movl -0x14c(%rbp), %ecx
imull 0x46e2(%rip), %ecx      # 0x70dc
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %edx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
callq 0x28d0
movl %eax, -0x4(%rbp)
jmp 0x31f9
cmpl $0x0, -0x150(%rbp)
jle 0x2a63
movq -0x10(%rbp), %rax
movl -0x3c(%rbp), %ecx
imull 0x46a2(%rip), %ecx      # 0x70dc
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %edx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
callq 0x28d0
movl %eax, -0x4(%rbp)
jmp 0x31f9
jmp 0x2a65
jmp 0x2aab
movl -0x148(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jbe 0x2aa9
movq -0x10(%rbp), %rax
movl -0x3c(%rbp), %ecx
imull 0x465c(%rip), %ecx      # 0x70dc
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %edx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
callq 0x28d0
movl %eax, -0x4(%rbp)
jmp 0x31f9
jmp 0x2aab
movzwl -0x142(%rbp), %ecx
addl $0x2, %ecx
addl $0x4, %ecx
movq -0x18(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movl -0x14c(%rbp), %eax
movl %eax, -0x3c(%rbp)
movw -0x34(%rbp), %ax
addw $0x1, %ax
movw %ax, -0x34(%rbp)
jmp 0x2948
movq -0x10(%rbp), %rax
movl -0x3c(%rbp), %ecx
imull 0x45ee(%rip), %ecx      # 0x70dc
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %edx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
callq 0x28d0
movl %eax, -0x4(%rbp)
jmp 0x31f9
movzwl -0x36(%rbp), %esi
leaq 0x1f71(%rip), %rdi      # 0x4a93
movb $0x0, %al
callq 0x1080
movw $0x0, -0x34(%rbp)
movzwl -0x34(%rbp), %eax
movzwl -0x36(%rbp), %ecx
cmpl %ecx, %eax
jge 0x31de
movq -0x18(%rbp), %rdi
callq 0x1ab0
movw %ax, -0x254(%rbp)
movq -0x18(%rbp), %rdi
addq $0x2, %rdi
callq 0x1af0
movl %eax, -0x26c(%rbp)
movq -0x18(%rbp), %rdx
addq $0x6, %rdx
leaq -0x250(%rbp), %rdi
movq %rdi, -0x298(%rbp)
movl $0x100, %esi            # imm = 0x100
callq 0x3ab0
movq -0x18(%rbp), %rax
movzwl -0x254(%rbp), %ecx
leaq 0x2(%rax,%rcx), %rax
movq %rax, -0x260(%rbp)
movq -0x260(%rbp), %rdi
callq 0x1ab0
movq -0x298(%rbp), %r8
movw %ax, -0x252(%rbp)
movzwl -0x34(%rbp), %esi
movzwl -0x252(%rbp), %edx
movl -0x26c(%rbp), %ecx
leaq 0x1ed9(%rip), %rdi      # 0x4aa4
xorl %eax, %eax
callq 0x1080
movl $0xa, %edi
callq 0x1040
movzwl -0x252(%rbp), %eax
movl %eax, -0x28c(%rbp)
subl $0x1, %eax
je 0x2c18
jmp 0x2bf0
movl -0x28c(%rbp), %eax
subl $0x2, %eax
je 0x2db7
jmp 0x2c01
movl -0x28c(%rbp), %eax
addl $-0x3, %eax
subl $0x2, %eax
jb 0x314c
jmp 0x31b4
movq -0x260(%rbp), %rdi
addq $0x4, %rdi
callq 0x1af0
movl %eax, -0x264(%rbp)
movq -0x260(%rbp), %rdi
addq $0x8, %rdi
callq 0x1af0
movl %eax, -0x268(%rbp)
movq -0x260(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ab0
movw %ax, -0x26e(%rbp)
movl -0x264(%rbp), %esi
movl -0x268(%rbp), %edx
leaq 0x1e5a(%rip), %rdi      # 0x4ac8
movb $0x0, %al
callq 0x1080
movq -0x260(%rbp), %rdi
addq $0x30, %rdi
callq 0x1ab0
movzwl %ax, %eax
movl %eax, -0x2a4(%rbp)
movq -0x260(%rbp), %rdi
addq $0x32, %rdi
callq 0x1ab0
movzwl %ax, %eax
movl %eax, -0x2a0(%rbp)
movq -0x260(%rbp), %rdi
addq $0x34, %rdi
callq 0x1ab0
movzwl %ax, %eax
movl %eax, -0x29c(%rbp)
movq -0x260(%rbp), %rdi
addq $0x36, %rdi
callq 0x1ab0
movl -0x2a4(%rbp), %esi
movl -0x2a0(%rbp), %edx
movl -0x29c(%rbp), %ecx
movzwl %ax, %r8d
movzwl -0x26e(%rbp), %r9d
leaq 0x1df0(%rip), %rdi      # 0x4ae5
movb $0x0, %al
callq 0x1080
movzwl -0x26e(%rbp), %eax
andl $0x400, %eax            # imm = 0x400
cmpl $0x0, %eax
je 0x2d1b
leaq 0x1df7(%rip), %rdi      # 0x4b0b
movb $0x0, %al
callq 0x1080
movzwl -0x26e(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x2d3a
leaq 0x1de5(%rip), %rdi      # 0x4b18
movb $0x0, %al
callq 0x1080
movl $0xa, %edi
callq 0x1040
movl -0x26c(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jne 0x2da3
cmpq $0x0, -0x28(%rbp)
je 0x2d6e
movq -0x28(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x1050
movl %eax, %ecx
xorl %eax, %eax
cmpl %ecx, %eax
jne 0x2da3
leaq 0x1dae(%rip), %rdi      # 0x4b23
movb $0x0, %al
callq 0x1080
movl -0x268(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x260(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, (%rax)
movl $0x1, -0x4(%rbp)
jmp 0x31f9
movq -0x260(%rbp), %rax
addq $0x58, %rax
movq %rax, -0x18(%rbp)
jmp 0x31cb
movq -0x260(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ab0
movw %ax, -0x26e(%rbp)
movl $0x0, -0x27c(%rbp)
cmpl $0x8, -0x27c(%rbp)
jge 0x2e45
movq -0x260(%rbp), %rax
movl -0x27c(%rbp), %ecx
addl $0x30, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x20, %eax
jle 0x2e23
movq -0x260(%rbp), %rax
movl -0x27c(%rbp), %ecx
addl $0x30, %ecx
movslq %ecx, %rcx
movb (%rax,%rcx), %cl
movslq -0x27c(%rbp), %rax
movb %cl, -0x277(%rbp,%rax)
jmp 0x2e32
movslq -0x27c(%rbp), %rax
movb $0x20, -0x277(%rbp,%rax)
jmp 0x2e34
movl -0x27c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x27c(%rbp)
jmp 0x2dd8
movb $0x0, -0x26f(%rbp)
leaq -0x277(%rbp), %rax
movq %rax, -0x2b0(%rbp)
movq -0x260(%rbp), %rdi
addq $0x3a, %rdi
callq 0x1ad0
cwtl
movl %eax, -0x2a8(%rbp)
movq -0x260(%rbp), %rdi
addq $0x3c, %rdi
callq 0x1ad0
movq -0x2b0(%rbp), %rsi
movl -0x2a8(%rbp), %edx
movswl %ax, %ecx
movzwl -0x26e(%rbp), %r8d
leaq 0x1c91(%rip), %rdi      # 0x4b31
movb $0x0, %al
callq 0x1080
movzwl -0x26e(%rbp), %eax
andl $0x400, %eax            # imm = 0x400
cmpl $0x0, %eax
je 0x2ec6
leaq 0x1c4c(%rip), %rdi      # 0x4b0b
movb $0x0, %al
callq 0x1080
movzwl -0x26e(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x2ee5
leaq 0x1c3a(%rip), %rdi      # 0x4b18
movb $0x0, %al
callq 0x1080
movl $0xa, %edi
callq 0x1040
movq -0x260(%rbp), %rdi
addq $0x58, %rdi
addq $0x4, %rdi
callq 0x1af0
movl %eax, -0x2b4(%rbp)
movq -0x260(%rbp), %rdi
addq $0x58, %rdi
addq $0xc, %rdi
callq 0x1af0
movl -0x2b4(%rbp), %esi
movl %eax, %edx
leaq 0x1c24(%rip), %rdi      # 0x4b50
movb $0x0, %al
callq 0x1080
movl $0x0, -0x27c(%rbp)
cmpl $0x8, -0x27c(%rbp)
jge 0x2fdb
movq -0x260(%rbp), %rdi
addq $0x58, %rdi
addq $0x10, %rdi
movl -0x27c(%rbp), %eax
shll $0x3, %eax
cltq
addq %rax, %rdi
callq 0x1af0
movl %eax, -0x280(%rbp)
movl -0x280(%rbp), %eax
movl %eax, -0x2b8(%rbp)
movq -0x260(%rbp), %rdi
addq $0x58, %rdi
addq $0x10, %rdi
movl -0x27c(%rbp), %eax
shll $0x3, %eax
cltq
addq %rax, %rdi
addq $0x4, %rdi
callq 0x1af0
movl -0x2b8(%rbp), %esi
movl %eax, %edx
leaq 0x1bc5(%rip), %rdi      # 0x4b78
movb $0x0, %al
callq 0x1080
cmpl $0x0, -0x280(%rbp)
jne 0x2fc5
jmp 0x2fdb
jmp 0x2fc7
movl -0x27c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x27c(%rbp)
jmp 0x2f3d
movl $0xa, %edi
callq 0x1040
movq -0x260(%rbp), %rdi
addq $0xa8, %rdi
addq $0x4, %rdi
callq 0x1af0
movl %eax, -0x2bc(%rbp)
movq -0x260(%rbp), %rdi
addq $0xa8, %rdi
addq $0xc, %rdi
callq 0x1af0
movl -0x2bc(%rbp), %esi
movl %eax, %edx
leaq 0x1b5e(%rip), %rdi      # 0x4b86
movb $0x0, %al
callq 0x1080
movl $0x0, -0x27c(%rbp)
cmpl $0x8, -0x27c(%rbp)
jge 0x30dd
movq -0x260(%rbp), %rdi
addq $0xa8, %rdi
addq $0x10, %rdi
movl -0x27c(%rbp), %eax
shll $0x3, %eax
cltq
addq %rax, %rdi
callq 0x1af0
movl %eax, -0x280(%rbp)
movl -0x280(%rbp), %eax
movl %eax, -0x2c0(%rbp)
movq -0x260(%rbp), %rdi
addq $0xa8, %rdi
addq $0x10, %rdi
movl -0x27c(%rbp), %eax
shll $0x3, %eax
cltq
addq %rax, %rdi
addq $0x4, %rdi
callq 0x1af0
movl -0x2c0(%rbp), %esi
movl %eax, %edx
leaq 0x1ac3(%rip), %rdi      # 0x4b78
movb $0x0, %al
callq 0x1080
cmpl $0x0, -0x280(%rbp)
jne 0x30c7
jmp 0x30dd
jmp 0x30c9
movl -0x27c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x27c(%rbp)
jmp 0x3039
movl $0xa, %edi
callq 0x1040
movl -0x26c(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jne 0x3139
cmpq $0x0, -0x28(%rbp)
je 0x3111
movq -0x28(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x1050
movl %eax, %ecx
xorl %eax, %eax
cmpl %ecx, %eax
jne 0x3139
leaq 0x1a9a(%rip), %rdi      # 0x4bb2
movb $0x0, %al
callq 0x1080
movq -0x260(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, (%rax)
movl $0x1, -0x4(%rbp)
jmp 0x31f9
movq -0x260(%rbp), %rax
addq $0xf8, %rax
movq %rax, -0x18(%rbp)
jmp 0x31cb
movq -0x260(%rbp), %rdi
addq $0x4, %rdi
callq 0x1af0
movl %eax, -0x26c(%rbp)
movq -0x260(%rbp), %rdi
addq $0x8, %rdi
callq 0x1ab0
movw %ax, -0x282(%rbp)
movl -0x26c(%rbp), %esi
movzwl -0x282(%rbp), %edx
leaq 0x1a31(%rip), %rdi      # 0x4bbe
movb $0x0, %al
callq 0x1080
movq -0x260(%rbp), %rax
addq $0xa, %rax
movzwl -0x282(%rbp), %ecx
shll %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
jmp 0x31cb
leaq 0x1a18(%rip), %rdi      # 0x4bd3
movb $0x0, %al
callq 0x1080
movl $0x0, -0x4(%rbp)
jmp 0x31f9
jmp 0x31cd
movw -0x34(%rbp), %ax
addw $0x1, %ax
movw %ax, -0x34(%rbp)
jmp 0x2b2f
jmp 0x31f2
movzbl -0x31(%rbp), %esi
leaq 0x19f1(%rip), %rdi      # 0x4bdc
movb $0x0, %al
callq 0x1080
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x2c0, %rsp            # imm = 0x2C0
popq %rbp
retq
nopw %cs:(%rax,%rax)