// File: /workspace/github_cpp_makefile_star2_O3/kipa00[P]AplusB-mc/compiler/analyze.cpp
// Function: analyze(world const&, int, int, int, std::vector<int, std::allocator<int>>&)
int analyze(const world &w, int x, int y, int z, vector<int> &result) {
	byte this_block = w.getXYZ(x, y, z);
	if ((this_block & BLOCK_ONLY) == REDSTONE_WIRE) {
		vector<int> side;
		for (int i=0; i<wide_len; ++i) {
			const int nx = x + wide_dx[i], ny = y + wide_dy[i], nz = z + wide_dz[i];
			byte fetched = w.getXYZ(nx, ny, nz);
			if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
				if (wide_dy[i] == 0 && abs(wide_dx[i]) + abs(wide_dz[i]) <= 1) {
					side.push_back(pack(nx, ny, nz));
				} else if (wide_dy[i] == 1 && !is_opaque(w.getXYZ(x, y + 1, z))) {
					side.push_back(pack(nx, ny, nz));
				} else if (wide_dy[i] == -1 && !is_opaque(w.getXYZ(nx, ny + 1, nz))) {
					side.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
				if (
					abs(nx - x) + abs(ny - y) + abs(nz - z) <= 1 // direct connection
					|| (is_opaque(w.getXYZ(nx, ny + 1, nz)) && abs(nx - x) + abs(ny + 1 - y) + abs(nz - z) <= 1) // indirect connection
				) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return
						(xx == x && yy == y && zz == z) // direct connection
						|| (is_opaque(w.getXYZ(xx, yy, zz)) && abs(xx - x) + abs(yy - y) + abs(zz - z) <= 1); // indirect connection
					})
				) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == LEVER) {
				if (
					abs(nx - x) + abs(ny - y) + abs(nz - z) <= 1 // direct connection
					|| test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
						return is_opaque(w.getXYZ(xx, yy, zz)) && abs(xx - x) + abs(yy - y) + abs(zz - z) <= 1;
					})
				) {
					result.push_back(pack(nx, ny, nz));
				}
			}
		}
		result.push_back(-1);
		for (const int &x : side) {
			result.push_back(x);
		}
		return 1;
	} else if ((this_block & BLOCK_ONLY) == REDSTONE_TORCH || (this_block & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
		int bx = x, by = y, bz = z;
		if ((this_block & BLOCK_ONLY) == REDSTONE_TORCH) --by;
		else switch (this_block & 3) {
			case EAST: --bx; break;
			case WEST: ++bx; break;
			case SOUTH: --bz; break;
			case NORTH: ++bz; break;
		}
		for (int i=0; i<wide_len; ++i) {
			const int nx = x + wide_dx[i], ny = y + wide_dy[i], nz = z + wide_dz[i];
			byte fetched = w.getXYZ(nx, ny, nz);
			if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
				if (redstone_into(w, nx, ny, nz, bx, by, bz)) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
				if (nx == bx && ny == by - 1 && nz == bz) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return bx == xx && by == yy && bz == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == LEVER) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return bx == xx && by == yy && bz == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			}
		}
		return 2;
	} else if (is_repeater(this_block)) {
		test_facing(w, x, y, z, [&] (const world &w, int bx, int by, int bz) {
			byte facing = w.getXYZ(bx, by, bz);
			if (is_opaque(facing)) {
				for (int i=0; i<narrow_len; ++i) {
					const int nx = bx + narrow_dx[i], ny = by + narrow_dy[i], nz = bz + narrow_dz[i];
					byte fetched = w.getXYZ(nx, ny, nz);
					if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
						if (redstone_into(w, nx, ny, nz, bx, by, bz)) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
						if (ny - by == -1) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == LEVER) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					}
				}
			} else switch (facing & BLOCK_ONLY) {
				case REDSTONE_WIRE:
				case REDSTONE_TORCH:
				case REDSTONE_WALL_TORCH:
				case LEVER:
					result.push_back(pack(bx, by, bz));
					break;
				default:
					if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if ((facing & 3) == (this_block & 3)) {
							result.push_back(pack(bx, by, bz));
						}
					}
					break;
			}
			result.push_back(-1);
			int dsx = -1, dex = 1, dsz = -1, dez = 1;
			if (z == bz) {
				dsx = dex = 0;
			} else {
				dsz = dez = 0;
			}
			for (int dx = dsx; dx <= dex; dx += 2) {
				for (int dz = dsz; dz <= dez; dz += 2) {
					if (is_repeater(w.getXYZ(x + dx, y, z + dz)) && test_opposite_facing(w, x + dx, y, z + dz, [=] (const world &w, int bx, int by, int bz) {
						return bx == x && by == y && bz == z;
					})) {
						result.push_back(pack(x + dx, y, z + dz));
					}
				}
			}
			return true;
		});
		return 3 + ((this_block >> 3) & 3);
	} else if ((this_block & BLOCK_ONLY) == COMPARATOR) {
		test_facing(w, x, y, z, [&] (const world &w, int bx, int by, int bz) {
			byte facing = w.getXYZ(bx, by, bz);
			if (is_opaque(facing)) {
				for (int i=0; i<narrow_len; ++i) {
					const int nx = bx + narrow_dx[i], ny = by + narrow_dy[i], nz = bz + narrow_dz[i];
					byte fetched = w.getXYZ(nx, ny, nz);
					if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
						if (redstone_into(w, nx, ny, nz, bx, by, bz)) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
						if (ny - by == -1) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					} else if ((fetched & BLOCK_ONLY) == LEVER) {
						if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
							return bx == xx && by == yy && bz == zz;
						})) {
							result.push_back(pack(nx, ny, nz));
						}
					}
				}
			} else switch (facing & BLOCK_ONLY) {
				case REDSTONE_WIRE:
				case REDSTONE_TORCH:
				case REDSTONE_WALL_TORCH:
				case LEVER:
					result.push_back(pack(bx, by, bz));
					break;
				default:
					if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if ((facing & 3) == (this_block & 3)) {
							result.push_back(pack(bx, by, bz));
						}
					}
					break;
			}
			result.push_back(-1);
			int dsx = -1, dex = 1, dsz = -1, dez = 1;
			if (z == bz) {
				dsx = dex = 0;
			} else {
				dsz = dez = 0;
			}
			for (int dx = dsx; dx <= dex; dx += 2) {
				for (int dz = dsz; dz <= dez; dz += 2) {
					byte facing = w.getXYZ(x + dx, y, z + dz);
					if ((facing & BLOCK_ONLY) == REDSTONE_WIRE) {
						result.push_back(pack(x + dx, y, z + dz));
					} else if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, x + dx, y, z + dz, [=] (const world &w, int bx, int by, int bz) {
							return bx == x && by == y && bz == z;
						})) {
							result.push_back(pack(x + dx, y, z + dz));
						}
					}
				}
			}
			return true;
		});
		return 7 + (this_block & SUBTRACT ? 1 : 0);
	} else if ((this_block & BLOCK_ONLY) == LEVER) {
		return 9;
	} else if ((this_block & BLOCK_ONLY) == REDSTONE_LAMP) {
		for (int i=0; i<narrow_len; ++i) {
			const int nx = x + narrow_dx[i], ny = y + narrow_dy[i], nz = z + narrow_dz[i];
			byte fetched = w.getXYZ(nx, ny, nz);
			if (is_opaque(fetched)) {
				for (int j=0; j<narrow_len; ++j) {
					const int bx = nx + narrow_dx[j], by = ny + narrow_dy[j], bz = nz + narrow_dz[j];
					byte facing = w.getXYZ(bx, by, bz);
					if ((facing & BLOCK_ONLY) == REDSTONE_WIRE) {
						if (redstone_into(w, bx, by, bz, nx, ny, nz)) {
							result.push_back(pack(bx, by, bz));
						}
					} else if ((facing & BLOCK_ONLY) == REDSTONE_TORCH || (facing & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
						if (by - ny == -1) {
							result.push_back(pack(bx, by, bz));
						}
					} else if (is_repeater(facing) || (facing & BLOCK_ONLY) == COMPARATOR) {
						if (test_opposite_facing(w, bx, by, bz, [=] (const world &w, int xx, int yy, int zz) {
							return nx == xx && ny == yy && nz == zz;
						})) {
							result.push_back(pack(bx, by, bz));
						}
					} else if ((facing & BLOCK_ONLY) == LEVER) {
						if (test_opposite_facing(w, bx, by, bz, [=] (const world &w, int xx, int yy, int zz) {
							return nx == xx && ny == yy && nz == zz;
						})) {
							result.push_back(pack(bx, by, bz));
						}
					}
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_WIRE) {
				if (redstone_into(w, nx, ny, nz, x, y, z)) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == REDSTONE_TORCH || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
				if (ny - y <= 0 || (fetched & BLOCK_ONLY) == REDSTONE_WALL_TORCH) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if (is_repeater(fetched) || (fetched & BLOCK_ONLY) == COMPARATOR) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return x == xx && y == yy && z == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			} else if ((fetched & BLOCK_ONLY) == LEVER) {
				if (test_opposite_facing(w, nx, ny, nz, [=] (const world &w, int xx, int yy, int zz) {
					return x == xx && y == yy && z == zz;
				})) {
					result.push_back(pack(nx, ny, nz));
				}
			}
		}
		return 10;
	}
	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movq %r8, 0x30(%rsp)
movl %edx, %r14d
movl %esi, %r12d
movl %esi, 0x24(%rsp)
movl %edx, 0xc(%rsp)
movl %ecx, 0x20(%rsp)
movq %rdi, 0x28(%rsp)
movl %ecx, 0x10(%rsp)
callq 0x51ec
movb %al, 0xb(%rsp)
movl %eax, %ebp
andb $-0x10, %bpl
cmpb $0x60, %bpl
je 0x5d1f
movzbl %bpl, %ebx
cmpl $0x50, %ebx
je 0x5d1f
cmpl $0x40, %ebx
jne 0x6005
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rax
movaps %xmm0, (%rax)
movq $0x0, 0x10(%rax)
xorl %eax, %eax
movq $0x0, 0x10(%rsp)
leaq 0x2fa5(%rip), %rcx      # 0x8740
movl (%rax,%rcx), %ebx
movl 0x24(%rsp), %r12d
leaq 0x2ff6(%rip), %rcx      # 0x87a0
movl (%rax,%rcx), %r15d
addl 0xc(%rsp), %r15d
addl %ebx, %r12d
movq %rax, 0x38(%rsp)
leaq 0x303e(%rip), %rcx      # 0x8800
movl (%rax,%rcx), %r13d
movl 0x20(%rsp), %ebp
addl %r13d, %ebp
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r15d, %edx
movl %ebp, %ecx
callq 0x51ec
movl %eax, %r14d
andb $-0x10, %r14b
cmpb $0x60, %r14b
je 0x5897
movzbl %r14b, %ecx
cmpl $0x50, %ecx
je 0x5897
cmpl $0x40, %ecx
jne 0x5986
movl $0xb83c1d, %eax         # imm = 0xB83C1D
movq 0x10(%rsp), %rcx
btq %rcx, %rax
jae 0x5a8d
movl %ebx, %eax
negl %eax
cmovsl %ebx, %eax
movl %r13d, %ecx
negl %ecx
cmovsl %r13d, %ecx
addl %eax, %ecx
cmpl $0x1, %ecx
ja 0x5a8d
movl %r15d, %eax
shrl $0x4, %eax
andl $0xf, %r15d
movl %ebp, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r12d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %ebp
shll $0x8, %ebp
shll $0x4, %r12d
movzbl %r12b, %eax
orl %r15d, %eax
orl %ebp, %eax
orl %edx, %eax
movl %eax, 0x1c(%rsp)
movq 0x48(%rsp), %rsi
cmpq 0x50(%rsp), %rsi
jne 0x5cde
leaq 0x40(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x7956
jmp 0x5ce9
movl %r12d, %eax
subl 0x24(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movl %r15d, %eax
subl 0xc(%rsp), %eax
movl %eax, %edx
negl %edx
cmovsl %eax, %edx
addl %ecx, %edx
movl %ebp, %eax
subl 0x20(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
addl %edx, %ecx
cmpl $0x2, %ecx
jae 0x5929
movl %r15d, %eax
shrl $0x4, %eax
andl $0xf, %r15d
movl %ebp, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r12d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %ebp
shll $0x8, %ebp
shll $0x4, %r12d
movzbl %r12b, %eax
orl %r15d, %eax
orl %ebp, %eax
orl %edx, %eax
movl %eax, 0x1c(%rsp)
movq 0x30(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x5c88
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x5ce9
leal 0x1(%r15), %ebx
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %ebx, %edx
movl %ebp, %ecx
callq 0x51ec
movzbl %al, %edi
callq 0x7c5a
testb %al, %al
je 0x5ce9
movl %r12d, %eax
subl 0x24(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
subl 0xc(%rsp), %ebx
movl %ebx, %eax
negl %eax
cmovsl %ebx, %eax
movl %ebp, %edx
subl 0x20(%rsp), %edx
movl %edx, %esi
negl %esi
cmovsl %edx, %esi
addl %ecx, %esi
addl %eax, %esi
cmpl $0x1, %esi
jbe 0x58c9
jmp 0x5ce9
movzbl %al, %edi
callq 0x7c4f
cmpb $0x70, %r14b
setne %cl
xorb $0x1, %al
testb %al, %cl
jne 0x5b5e
movl 0x24(%rsp), %eax
movl 0xc(%rsp), %ecx
movl 0x20(%rsp), %edx
movq $0x0, 0x150(%rsp)
movl %eax, 0x148(%rsp)
movl %ecx, 0x14c(%rsp)
movl %edx, 0x150(%rsp)
leaq 0xf57(%rip), %rax       # 0x692a
movq %rax, 0x160(%rsp)
leaq 0xfc4(%rip), %rax       # 0x69a6
movq %rax, 0x158(%rsp)
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r15d, %edx
movl %ebp, %ecx
leaq 0x148(%rsp), %r8
callq 0x535e
movl %eax, %ebx
movq 0x158(%rsp), %rax
testq %rax, %rax
je 0x5a25
leaq 0x148(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %bl, %bl
je 0x5ce9
movl %r15d, %eax
shrl $0x4, %eax
andl $0xf, %r15d
movl %ebp, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r12d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %ebp
shll $0x8, %ebp
shll $0x4, %r12d
movzbl %r12b, %eax
orl %r15d, %eax
orl %ebp, %eax
orl %edx, %eax
movl %eax, 0x1c(%rsp)
movq 0x30(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
jne 0x591a
leaq 0x1c(%rsp), %rdx
callq 0x7956
jmp 0x5ce9
movl $0x41c020, %eax         # imm = 0x41C020
movq 0x10(%rsp), %rcx
btq %rcx, %rax
jae 0x5ac5
movl 0x24(%rsp), %esi
movl 0xc(%rsp), %edx
incl %edx
movl 0x20(%rsp), %ecx
movq 0x28(%rsp), %rdi
callq 0x51ec
movzbl %al, %edi
callq 0x7c5a
testb %al, %al
je 0x5c94
movl $0x40382, %eax          # imm = 0x40382
movq 0x10(%rsp), %rcx
btq %rcx, %rax
jae 0x5ce9
leal 0x1(%r15), %edx
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %ebp, %ecx
callq 0x51ec
movzbl %al, %edi
callq 0x7c5a
testb %al, %al
jne 0x5ce9
movl %r15d, %eax
shrl $0x4, %eax
andl $0xf, %r15d
movl %ebp, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r12d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %ebp
shll $0x8, %ebp
shll $0x4, %r12d
movzbl %r12b, %eax
orl %r15d, %eax
orl %ebp, %eax
orl %edx, %eax
movl %eax, 0x1c(%rsp)
movq 0x48(%rsp), %rsi
cmpq 0x50(%rsp), %rsi
jne 0x5cde
leaq 0x40(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x7956
jmp 0x5ce9
cmpb $-0x50, %r14b
jne 0x5ce9
movl 0x24(%rsp), %eax
movl %r12d, %ecx
subl %eax, %ecx
movl %ecx, %edx
negl %edx
cmovsl %ecx, %edx
movl 0xc(%rsp), %ecx
movl %r15d, %esi
subl %ecx, %esi
movl %esi, %edi
negl %edi
cmovsl %esi, %edi
addl %edx, %edi
movl 0x20(%rsp), %edx
movl %ebp, %esi
subl %edx, %esi
movl %esi, %r8d
negl %r8d
cmovsl %esi, %r8d
addl %edi, %r8d
cmpl $0x2, %r8d
jb 0x5c2b
movq $0x0, 0x130(%rsp)
movl %eax, 0x128(%rsp)
movl %ecx, 0x12c(%rsp)
movl %edx, 0x130(%rsp)
leaq 0xe01(%rip), %rax       # 0x69d2
movq %rax, 0x140(%rsp)
leaq 0xe5a(%rip), %rax       # 0x6a3a
movq %rax, 0x138(%rsp)
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r15d, %edx
movl %ebp, %ecx
leaq 0x128(%rsp), %r8
callq 0x535e
movl %eax, %ebx
movq 0x138(%rsp), %rax
testq %rax, %rax
je 0x5c23
leaq 0x128(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %bl, %bl
je 0x5ce9
movl %r15d, %eax
shrl $0x4, %eax
andl $0xf, %r15d
movl %ebp, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r12d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %ebp
shll $0x8, %ebp
shll $0x4, %r12d
movzbl %r12b, %eax
orl %r15d, %eax
orl %ebp, %eax
orl %edx, %eax
movl %eax, 0x1c(%rsp)
movq 0x30(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
jne 0x591a
leaq 0x1c(%rsp), %rdx
callq 0x7956
jmp 0x5ce9
leaq 0x1c(%rsp), %rdx
callq 0x7956
jmp 0x5ce9
movl %r15d, %eax
shrl $0x4, %eax
andl $0xf, %r15d
movl %ebp, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r12d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %ebp
shll $0x8, %ebp
shll $0x4, %r12d
movzbl %r12b, %eax
orl %r15d, %eax
orl %ebp, %eax
orl %edx, %eax
movl %eax, 0x1c(%rsp)
movq 0x48(%rsp), %rsi
cmpq 0x50(%rsp), %rsi
je 0x5d0e
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x48(%rsp)
movq 0x10(%rsp), %rdx
incq %rdx
movq 0x38(%rsp), %rax
addq $0x4, %rax
movq %rdx, 0x10(%rsp)
cmpq $0x19, %rdx
jne 0x5794
jmp 0x60ba
leaq 0x40(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x7956
jmp 0x5ce9
movzbl %al, %eax
movl %eax, %ecx
andl $-0x10, %ecx
cmpl $0x50, %ecx
jne 0x5fea
decl %r14d
movq %r14, 0x58(%rsp)
leal -0x1(%r14), %ecx
movl %ecx, %eax
shrl $0x4, %eax
movl %ecx, 0x38(%rsp)
andl $0xf, %ecx
movl 0x10(%rsp), %edi
movl %edi, %edx
shll $0x5, %edx
andl $0xffe00, %edx          # imm = 0xFFE00
movl %r12d, %esi
andl $0xffff0, %esi          # imm = 0xFFFF0
orl %edx, %esi
orl %eax, %esi
shll $0xc, %esi
movl %edi, %eax
andl $0xf, %eax
shll $0x8, %eax
movl %r12d, %edx
shll $0x4, %edx
movzbl %dl, %edx
orl %ecx, %edx
orl %eax, %edx
orl %esi, %edx
movl %edx, 0x64(%rsp)
xorl %ebp, %ebp
leaq 0x29b5(%rip), %rax      # 0x8740
movl (%rbp,%rax), %r13d
addl 0x24(%rsp), %r13d
leaq 0x2a04(%rip), %rax      # 0x87a0
movl (%rbp,%rax), %r14d
addl 0xc(%rsp), %r14d
leaq 0x2a53(%rip), %rax      # 0x8800
movl (%rbp,%rax), %ebx
addl 0x20(%rsp), %ebx
movq 0x28(%rsp), %rdi
movl %r13d, %esi
movl %r14d, %edx
movl %ebx, %ecx
callq 0x51ec
movl %eax, %r15d
andb $-0x10, %r15b
cmpb $0x60, %r15b
je 0x5e10
movzbl %r15b, %ecx
cmpl $0x50, %ecx
je 0x5e10
cmpl $0x40, %ecx
jne 0x5e37
movl 0x10(%rsp), %eax
movl %eax, (%rsp)
movq 0x28(%rsp), %rdi
movl %r13d, %esi
movl %r14d, %edx
movl %ebx, %ecx
movl %r12d, %r8d
movq 0x58(%rsp), %r9
callq 0x53b8
testb %al, %al
jne 0x5f72
jmp 0x5fd5
cmpl %r12d, %r13d
jne 0x5fd5
cmpl 0x38(%rsp), %r14d
jne 0x5fd5
cmpl 0x10(%rsp), %ebx
jne 0x5fd5
movl 0x64(%rsp), %eax
jmp 0x5fac
movzbl %al, %edi
callq 0x7c4f
xorb $0x1, %al
cmpb $0x70, %r15b
setne %cl
testb %al, %cl
jne 0x5ede
movq $0x0, 0x110(%rsp)
movl %r12d, 0x108(%rsp)
movq 0x58(%rsp), %rax
movl %eax, 0x10c(%rsp)
movl 0x10(%rsp), %eax
movl %eax, 0x110(%rsp)
leaq 0xbe4(%rip), %rax       # 0x6a66
movq %rax, 0x120(%rsp)
leaq 0xbef(%rip), %rax       # 0x6a80
movq %rax, 0x118(%rsp)
movq 0x28(%rsp), %rdi
movl %r13d, %esi
movl %r14d, %edx
movl %ebx, %ecx
leaq 0x108(%rsp), %r8
callq 0x535e
movl %eax, %r15d
movq 0x118(%rsp), %rax
testq %rax, %rax
je 0x5f6d
leaq 0x108(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x5f6d
cmpb $-0x50, %r15b
jne 0x5fd5
movq $0x0, 0xf0(%rsp)
movl %r12d, 0xe8(%rsp)
movq 0x58(%rsp), %rax
movl %eax, 0xec(%rsp)
movl 0x10(%rsp), %eax
movl %eax, 0xf0(%rsp)
leaq 0xb92(%rip), %rax       # 0x6aac
movq %rax, 0x100(%rsp)
leaq 0xb9d(%rip), %rax       # 0x6ac6
movq %rax, 0xf8(%rsp)
movq 0x28(%rsp), %rdi
movl %r13d, %esi
movl %r14d, %edx
movl %ebx, %ecx
leaq 0xe8(%rsp), %r8
callq 0x535e
movl %eax, %r15d
movq 0xf8(%rsp), %rax
testq %rax, %rax
je 0x5f6d
leaq 0xe8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %r15b, %r15b
je 0x5fd5
movl %r14d, %eax
shrl $0x4, %eax
andl $0xf, %r14d
movl %ebx, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r13d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %ebx
shll $0x8, %ebx
shll $0x4, %r13d
movzbl %r13b, %eax
orl %r14d, %eax
orl %ebx, %eax
orl %edx, %eax
movl %eax, 0x40(%rsp)
movq 0x30(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x5fcb
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x5fd5
leaq 0x40(%rsp), %rdx
callq 0x7956
addq $0x4, %rbp
cmpq $0x64, %rbp
jne 0x5d84
movb $0x2, %al
jmp 0x6613
andl $0x3, %eax
leaq 0x271c(%rip), %rcx      # 0x8710
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
decl %r12d
jmp 0x5d33
movzbl %al, %edi
callq 0x7c4f
testb %al, %al
je 0x60e8
leaq 0x188(%rsp), %rbx
movq $0x0, 0x8(%rbx)
movl $0x28, %edi
callq 0x2140
movq 0x30(%rsp), %rcx
movq %rcx, (%rax)
leaq 0xb(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x20(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x24(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0xc(%rsp), %rcx
movq %rcx, 0x20(%rax)
movq %rax, (%rbx)
leaq 0xa8d(%rip), %rax       # 0x6af2
movq %rax, 0x18(%rbx)
leaq 0xfbe(%rip), %rax       # 0x702e
movq %rax, 0x10(%rbx)
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r14d, %edx
movl 0x10(%rsp), %ecx
movq %rbx, %r8
callq 0x5304
movq 0x198(%rsp), %rax
testq %rax, %rax
je 0x60aa
leaq 0x188(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movb 0xb(%rsp), %al
shrb $0x3, %al
andb $0x3, %al
addb $0x3, %al
jmp 0x6613
movl $0xffffffff, 0x1c(%rsp) # imm = 0xFFFFFFFF
movq 0x30(%rsp), %r15
movq 0x8(%r15), %rsi
cmpq 0x10(%r15), %rsi
je 0x65af
movl $0xffffffff, (%rsi)     # imm = 0xFFFFFFFF
addq $0x4, %rsi
movq %rsi, 0x8(%r15)
jmp 0x65bc
cmpb $0x70, %bpl
je 0x6646
cmpl $0xb0, %ebx
je 0x6642
cmpl $0xa0, %ebx
jne 0x66ed
xorl %r15d, %r15d
leaq 0x274c(%rip), %rax      # 0x8860
movl (%rax,%r15,4), %esi
addl 0x24(%rsp), %esi
leaq 0x275d(%rip), %rax      # 0x8880
movl (%rax,%r15,4), %edx
addl 0xc(%rsp), %edx
leaq 0x276e(%rip), %rax      # 0x88a0
movl (%rax,%r15,4), %ecx
addl 0x20(%rsp), %ecx
movq 0x28(%rsp), %rdi
movl %esi, 0x38(%rsp)
movl %edx, %ebp
movl %ecx, 0x10(%rsp)
callq 0x51ec
movl %eax, %ebx
movzbl %al, %r14d
movl %r14d, %edi
callq 0x7c5a
testb %al, %al
movq %r15, 0x58(%rsp)
je 0x63b1
xorl %r15d, %r15d
leaq 0x26ed(%rip), %rax      # 0x8860
movl (%r15,%rax), %ebx
addl 0x38(%rsp), %ebx
leaq 0x26fe(%rip), %rax      # 0x8880
movl (%r15,%rax), %r14d
addl %ebp, %r14d
leaq 0x2710(%rip), %rax      # 0x88a0
movl (%r15,%rax), %r12d
addl 0x10(%rsp), %r12d
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %r14d, %edx
movl %r12d, %ecx
callq 0x51ec
movl %eax, %r13d
andb $-0x10, %r13b
cmpb $0x60, %r13b
je 0x61f4
movzbl %r13b, %ecx
cmpl $0x50, %ecx
je 0x61f4
cmpl $0x40, %ecx
jne 0x6203
movl 0x10(%rsp), %eax
movl %eax, (%rsp)
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %r14d, %edx
movl %r12d, %ecx
movl 0x38(%rsp), %r8d
movl %ebp, %r9d
callq 0x53b8
testb %al, %al
jne 0x633a
jmp 0x639e
cmpq $0x4, %r15
je 0x633a
jmp 0x639e
movzbl %al, %edi
callq 0x7c4f
xorb $0x1, %al
cmpb $0x70, %r13b
setne %cl
testb %al, %cl
jne 0x62a8
movq $0x0, 0xd0(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0xc8(%rsp)
movl %ebp, 0xcc(%rsp)
movl 0x10(%rsp), %eax
movl %eax, 0xd0(%rsp)
leaq 0x15be(%rip), %rax      # 0x780a
movq %rax, 0xe0(%rsp)
leaq 0x15c9(%rip), %rax      # 0x7824
movq %rax, 0xd8(%rsp)
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %r14d, %edx
movl %r12d, %ecx
leaq 0xc8(%rsp), %r8
callq 0x535e
movl %eax, %r13d
movq 0xd8(%rsp), %rax
testq %rax, %rax
je 0x6335
leaq 0xc8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6335
cmpb $-0x50, %r13b
jne 0x639e
movq $0x0, 0xb0(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0xa8(%rsp)
movl %ebp, 0xac(%rsp)
movl 0x10(%rsp), %eax
movl %eax, 0xb0(%rsp)
leaq 0x156e(%rip), %rax      # 0x7850
movq %rax, 0xc0(%rsp)
leaq 0x1579(%rip), %rax      # 0x786a
movq %rax, 0xb8(%rsp)
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %r14d, %edx
movl %r12d, %ecx
leaq 0xa8(%rsp), %r8
callq 0x535e
movl %eax, %r13d
movq 0xb8(%rsp), %rax
testq %rax, %rax
je 0x6335
leaq 0xa8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %r13b, %r13b
je 0x639e
movl %r14d, %eax
shrl $0x4, %eax
andl $0xf, %r14d
movl %r12d, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %ebx, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %r12d
shll $0x8, %r12d
shll $0x4, %ebx
movzbl %bl, %eax
orl %r14d, %eax
orl %r12d, %eax
orl %edx, %eax
movl %eax, 0x40(%rsp)
movq 0x30(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6394
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x639e
leaq 0x40(%rsp), %rdx
callq 0x7956
addq $0x4, %r15
cmpq $0x18, %r15
jne 0x616c
jmp 0x6599
andb $-0x10, %bl
cmpb $0x60, %bl
je 0x63f8
movzbl %bl, %eax
cmpl $0x50, %eax
je 0x63f8
cmpl $0x40, %eax
jne 0x6410
movl 0x24(%rsp), %r8d
movl 0xc(%rsp), %r9d
movl 0x20(%rsp), %eax
movl %eax, (%rsp)
movq 0x28(%rsp), %rdi
movl 0x38(%rsp), %esi
movl %ebp, %edx
movl 0x10(%rsp), %ecx
callq 0x53b8
testb %al, %al
jne 0x6533
jmp 0x6599
cmpb $0x60, %bl
je 0x6533
cmpl 0xc(%rsp), %ebp
jg 0x6599
jmp 0x6533
movl %r14d, %edi
callq 0x7c4f
xorb $0x1, %al
cmpb $0x70, %bl
setne %cl
testb %al, %cl
jne 0x64b6
movl 0x24(%rsp), %eax
movl 0xc(%rsp), %ecx
movl 0x20(%rsp), %edx
movq $0x0, 0x90(%rsp)
movl %eax, 0x88(%rsp)
movl %ecx, 0x8c(%rsp)
movl %edx, 0x90(%rsp)
leaq 0x143a(%rip), %rax      # 0x7896
movq %rax, 0xa0(%rsp)
leaq 0x1445(%rip), %rax      # 0x78b0
movq %rax, 0x98(%rsp)
movq 0x28(%rsp), %rdi
movl 0x38(%rsp), %esi
movl %ebp, %edx
movl 0x10(%rsp), %ecx
leaq 0x88(%rsp), %r8
callq 0x535e
movl %eax, %ebx
movq 0x98(%rsp), %rax
testq %rax, %rax
je 0x652f
leaq 0x88(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x652f
cmpb $-0x50, %bl
jne 0x6599
movl 0x24(%rsp), %eax
movl 0xc(%rsp), %ecx
movl 0x20(%rsp), %edx
movq $0x0, 0x70(%rsp)
movl %eax, 0x68(%rsp)
movl %ecx, 0x6c(%rsp)
movl %edx, 0x70(%rsp)
leaq 0x13f5(%rip), %rax      # 0x78dc
movq %rax, 0x80(%rsp)
leaq 0x1400(%rip), %rax      # 0x78f6
movq %rax, 0x78(%rsp)
movq 0x28(%rsp), %rdi
movl 0x38(%rsp), %esi
movl %ebp, %edx
movl 0x10(%rsp), %ecx
leaq 0x68(%rsp), %r8
callq 0x535e
movl %eax, %ebx
movq 0x78(%rsp), %rax
testq %rax, %rax
je 0x652f
leaq 0x68(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %bl, %bl
je 0x6599
movl %ebp, %eax
shrl $0x4, %eax
andl $0xf, %ebp
movl 0x10(%rsp), %esi
movl %esi, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl 0x38(%rsp), %edi
movl %edi, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %esi
shll $0x8, %esi
shll $0x4, %edi
movzbl %dil, %eax
orl %ebp, %eax
orl %esi, %eax
orl %edx, %eax
movl %eax, 0x40(%rsp)
movq 0x30(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x658f
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x6599
leaq 0x40(%rsp), %rdx
callq 0x7956
movq 0x58(%rsp), %r15
incq %r15
movb $0xa, %al
cmpq $0x6, %r15
jne 0x610d
jmp 0x6613
leaq 0x1c(%rsp), %rdx
movq %r15, %rdi
callq 0x7956
movq 0x40(%rsp), %rbx
movq 0x48(%rsp), %r14
cmpq %r14, %rbx
je 0x65fc
movq 0x8(%r15), %rsi
cmpq 0x10(%r15), %rsi
je 0x65e3
movl (%rbx), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%r15)
jmp 0x65ee
movq %r15, %rdi
movq %rbx, %rdx
callq 0x3470
addq $0x4, %rbx
cmpq %r14, %rbx
jne 0x65cb
movq 0x40(%rsp), %rbx
testq %rbx, %rbx
je 0x6611
movq 0x50(%rsp), %rsi
subq %rbx, %rsi
movq %rbx, %rdi
callq 0x2150
movb $0x1, %al
movzbl %al, %eax
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
decl 0x10(%rsp)
jmp 0x5d33
incl %r12d
jmp 0x5d33
incl 0x10(%rsp)
jmp 0x5d33
movb $0x9, %al
jmp 0x6613
leaq 0x168(%rsp), %rbx
movq $0x0, 0x8(%rbx)
movl $0x28, %edi
callq 0x2140
movq 0x30(%rsp), %rcx
movq %rcx, (%rax)
leaq 0xb(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x20(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x24(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0xc(%rsp), %rcx
movq %rcx, 0x20(%rax)
movq %rax, (%rbx)
leaq 0xad8(%rip), %rax       # 0x716e
movq %rax, 0x18(%rbx)
leaq 0x1029(%rip), %rax      # 0x76ca
movq %rax, 0x10(%rbx)
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r14d, %edx
movl 0x10(%rsp), %ecx
movq %rbx, %r8
callq 0x5304
movq 0x178(%rsp), %rax
testq %rax, %rax
je 0x66db
leaq 0x168(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movzbl 0xb(%rsp), %ecx
xorl %eax, %eax
btl $0x3, %ecx
adcb $0x7, %al
jmp 0x6613
xorl %eax, %eax
jmp 0x6613
jmp 0x6900
jmp 0x6900
movq %rax, %rbx
movq 0x178(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0x168(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
jmp 0x6900
movq %rax, %rbx
movq 0x78(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0x68(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
jmp 0x6900
jmp 0x6900
movq %rax, %rbx
movq 0x98(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0x88(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
jmp 0x6900
jmp 0x6900
jmp 0x6908
jmp 0x6908
movq %rax, %rbx
movq 0x198(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0x188(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
jmp 0x6900
jmp 0x6908
jmp 0x6908
jmp 0x6900
jmp 0x6908
jmp 0x6908
movq %rax, %rbx
movq 0x138(%rsp), %rax
testq %rax, %rax
je 0x690b
leaq 0x128(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x690b
jmp 0x6900
jmp 0x6900
jmp 0x6900
jmp 0x6900
jmp 0x6908
movq %rax, %rbx
movq 0xb8(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0xa8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
jmp 0x6900
movq %rax, %rbx
movq 0x158(%rsp), %rax
testq %rax, %rax
je 0x690b
leaq 0x148(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x690b
jmp 0x6900
movq %rax, %rbx
movq 0xf8(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0xe8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
jmp 0x6900
jmp 0x6900
jmp 0x6900
jmp 0x6908
movq %rax, %rbx
movq 0xd8(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0xc8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
jmp 0x6900
movq %rax, %rbx
movq 0x118(%rsp), %rax
testq %rax, %rax
je 0x6922
leaq 0x108(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6922
movq %rax, %rdi
callq 0x33cf
movq %rax, %rbx
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x6922
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2150
movq %rbx, %rdi
callq 0x2220