// File: /workspace/github_cpp_makefile_star2_O1/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, %r14
movl %esi, 0x14(%rsp)
movl %edx, 0x10(%rsp)
movl %ecx, 0x18(%rsp)
movq %rdi, 0x28(%rsp)
callq 0x5254
movb %al, 0xf(%rsp)
movl %eax, %ecx
andb $-0x10, %cl
cmpb $0x60, %cl
movq %r14, 0x30(%rsp)
je 0x5d8c
movzbl %cl, %ecx
cmpl $0x50, %ecx
je 0x5d8c
cmpl $0x40, %ecx
jne 0x6045
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rax
movaps %xmm0, (%rax)
movq $0x0, 0x10(%rax)
xorl %eax, %eax
movq $0x0, 0x20(%rsp)
leaq 0x2f5a(%rip), %rcx      # 0x8750
movl (%rax,%rcx), %ebx
movl 0x14(%rsp), %r12d
leaq 0x2fab(%rip), %rcx      # 0x87b0
movl (%rax,%rcx), %r15d
addl 0x10(%rsp), %r15d
addl %ebx, %r12d
movq %rax, 0x38(%rsp)
leaq 0x2ff3(%rip), %rcx      # 0x8810
movl (%rax,%rcx), %r13d
movl 0x18(%rsp), %ebp
addl %r13d, %ebp
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r15d, %edx
movl %ebp, %ecx
callq 0x5254
movl %eax, %r14d
andb $-0x10, %r14b
cmpb $0x60, %r14b
je 0x58f2
movzbl %r14b, %ecx
cmpl $0x50, %ecx
je 0x58f2
cmpl $0x40, %ecx
jne 0x59e1
movl $0xb83c1d, %eax         # imm = 0xB83C1D
movq 0x20(%rsp), %rcx
btq %rcx, %rax
jae 0x5aef
movl %ebx, %eax
negl %eax
cmovsl %ebx, %eax
movl %r13d, %ecx
negl %ecx
cmovsl %r13d, %ecx
addl %eax, %ecx
cmpl $0x1, %ecx
ja 0x5aef
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 0x5d4b
leaq 0x40(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x79fc
jmp 0x5d56
movl %r12d, %eax
subl 0x14(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movl %r15d, %eax
subl 0x10(%rsp), %eax
movl %eax, %edx
negl %edx
cmovsl %eax, %edx
addl %ecx, %edx
movl %ebp, %eax
subl 0x18(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
addl %edx, %ecx
cmpl $0x2, %ecx
jae 0x5984
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 0x5cf5
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x5d56
leal 0x1(%r15), %ebx
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %ebx, %edx
movl %ebp, %ecx
callq 0x5254
movzbl %al, %edi
callq 0x7cfe
testb %al, %al
je 0x5d56
movl %r12d, %eax
subl 0x14(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
subl 0x10(%rsp), %ebx
movl %ebx, %eax
negl %eax
cmovsl %ebx, %eax
movl %ebp, %edx
subl 0x18(%rsp), %edx
movl %edx, %esi
negl %esi
cmovsl %edx, %esi
addl %ecx, %esi
addl %eax, %esi
cmpl $0x1, %esi
jbe 0x5924
jmp 0x5d56
movzbl %al, %edi
callq 0x7cf3
cmpb $0x70, %r14b
setne %cl
xorb $0x1, %al
testb %al, %cl
jne 0x5bc0
movl 0x14(%rsp), %eax
movl 0x10(%rsp), %ecx
movl 0x18(%rsp), %edx
xorps %xmm0, %xmm0
movaps %xmm0, 0x140(%rsp)
movaps %xmm0, 0x150(%rsp)
movl %eax, 0x140(%rsp)
movl %ecx, 0x144(%rsp)
movl %edx, 0x148(%rsp)
leaq 0xf65(%rip), %rax       # 0x699a
movq %rax, 0x158(%rsp)
leaq 0xfd2(%rip), %rax       # 0x6a16
movq %rax, 0x150(%rsp)
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r15d, %edx
movl %ebp, %ecx
leaq 0x140(%rsp), %r8
callq 0x53c6
movl %eax, %ebx
movq 0x150(%rsp), %rax
testq %rax, %rax
je 0x5a87
leaq 0x140(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %bl, %bl
je 0x5d56
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 0x5975
leaq 0x1c(%rsp), %rdx
callq 0x79fc
jmp 0x5d56
movl $0x41c020, %eax         # imm = 0x41C020
movq 0x20(%rsp), %rcx
btq %rcx, %rax
jae 0x5b27
movl 0x14(%rsp), %esi
movl 0x10(%rsp), %edx
incl %edx
movl 0x18(%rsp), %ecx
movq 0x28(%rsp), %rdi
callq 0x5254
movzbl %al, %edi
callq 0x7cfe
testb %al, %al
je 0x5d01
movl $0x40382, %eax          # imm = 0x40382
movq 0x20(%rsp), %rcx
btq %rcx, %rax
jae 0x5d56
leal 0x1(%r15), %edx
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %ebp, %ecx
callq 0x5254
movzbl %al, %edi
callq 0x7cfe
testb %al, %al
jne 0x5d56
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 0x5d4b
leaq 0x40(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x79fc
jmp 0x5d56
cmpb $-0x50, %r14b
jne 0x5d56
movl 0x14(%rsp), %eax
movl %r12d, %ecx
subl %eax, %ecx
movl %ecx, %edx
negl %edx
cmovsl %ecx, %edx
movl 0x10(%rsp), %ecx
movl %r15d, %esi
subl %ecx, %esi
movl %esi, %edi
negl %edi
cmovsl %esi, %edi
addl %edx, %edi
movl 0x18(%rsp), %edx
movl %ebp, %esi
subl %edx, %esi
movl %esi, %r13d
negl %r13d
cmovsl %esi, %r13d
addl %edi, %r13d
movb $0x1, %bl
cmpl $0x2, %r13d
jb 0x5c6b
xorps %xmm0, %xmm0
movaps %xmm0, 0x120(%rsp)
movaps %xmm0, 0x130(%rsp)
movl %eax, 0x120(%rsp)
movl %ecx, 0x124(%rsp)
movl %edx, 0x128(%rsp)
leaq 0xe0a(%rip), %rax       # 0x6a42
movq %rax, 0x138(%rsp)
leaq 0xe63(%rip), %rax       # 0x6aaa
movq %rax, 0x130(%rsp)
movq 0x28(%rsp), %rdi
movl %r12d, %esi
movl %r15d, %edx
movl %ebp, %ecx
leaq 0x120(%rsp), %r8
callq 0x53c6
movl %eax, %ebx
cmpl $0x2, %r13d
jb 0x5c90
movq 0x130(%rsp), %rax
testq %rax, %rax
je 0x5c90
leaq 0x120(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %bl, %bl
je 0x5d56
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 0x5975
leaq 0x1c(%rsp), %rdx
callq 0x79fc
jmp 0x5d56
leaq 0x1c(%rsp), %rdx
callq 0x79fc
jmp 0x5d56
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 0x5d7b
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x48(%rsp)
movq 0x20(%rsp), %rdx
incq %rdx
movq 0x38(%rsp), %rax
addq $0x4, %rax
movq %rdx, 0x20(%rsp)
cmpq $0x19, %rdx
jne 0x57ef
jmp 0x6108
leaq 0x40(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x79fc
jmp 0x5d56
movl 0x14(%rsp), %ebp
movl 0x10(%rsp), %edx
movl 0x18(%rsp), %ecx
movl %ecx, 0x20(%rsp)
movzbl %al, %eax
movl %eax, %ecx
andl $-0x10, %ecx
cmpl $0x50, %ecx
jne 0x602b
decl %edx
movq %rdx, 0x58(%rsp)
leal -0x1(%rdx), %eax
movl %eax, 0x38(%rsp)
xorl %r14d, %r14d
leaq 0x298b(%rip), %rax      # 0x8750
movl (%r14,%rax), %r15d
addl 0x14(%rsp), %r15d
leaq 0x29db(%rip), %rax      # 0x87b0
movl (%r14,%rax), %r13d
addl 0x10(%rsp), %r13d
leaq 0x2a2b(%rip), %rax      # 0x8810
movl (%r14,%rax), %r12d
addl 0x18(%rsp), %r12d
movq 0x28(%rsp), %rdi
movl %r15d, %esi
movl %r13d, %edx
movl %r12d, %ecx
callq 0x5254
movl %eax, %ebx
andb $-0x10, %bl
cmpb $0x60, %bl
je 0x5e47
movzbl %bl, %ecx
cmpl $0x50, %ecx
je 0x5e47
cmpl $0x40, %ecx
jne 0x5e6b
movl 0x20(%rsp), %eax
movl %eax, (%rsp)
movq 0x28(%rsp), %rdi
movl %r15d, %esi
movl %r13d, %edx
movl %r12d, %ecx
movl %ebp, %r8d
movq 0x58(%rsp), %r9
callq 0x5420
testb %al, %al
jne 0x5faf
jmp 0x6016
cmpl %ebp, %r15d
jne 0x6016
cmpl 0x38(%rsp), %r13d
jne 0x6016
cmpl 0x20(%rsp), %r12d
je 0x5faf
jmp 0x6016
movzbl %al, %edi
callq 0x7cf3
xorb $0x1, %al
cmpb $0x70, %bl
setne %cl
testb %al, %cl
jne 0x5f17
xorps %xmm0, %xmm0
movaps %xmm0, 0x100(%rsp)
movaps %xmm0, 0x110(%rsp)
movl %ebp, 0x100(%rsp)
movq 0x58(%rsp), %rax
movl %eax, 0x104(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0x108(%rsp)
leaq 0xc1b(%rip), %rax       # 0x6ad6
movq %rax, 0x118(%rsp)
leaq 0xc26(%rip), %rax       # 0x6af0
movq %rax, 0x110(%rsp)
movq 0x28(%rsp), %rdi
movl %r15d, %esi
movl %r13d, %edx
movl %r12d, %ecx
leaq 0x100(%rsp), %r8
callq 0x53c6
movl %eax, %ebx
movq 0x110(%rsp), %rax
testq %rax, %rax
je 0x5fab
leaq 0x100(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x5fab
cmpb $-0x50, %bl
jne 0x6016
xorps %xmm0, %xmm0
movaps %xmm0, 0xe0(%rsp)
movaps %xmm0, 0xf0(%rsp)
movl %ebp, 0xe0(%rsp)
movq 0x58(%rsp), %rax
movl %eax, 0xe4(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0xe8(%rsp)
leaq 0xbc4(%rip), %rax       # 0x6b1c
movq %rax, 0xf8(%rsp)
leaq 0xbcf(%rip), %rax       # 0x6b36
movq %rax, 0xf0(%rsp)
movq 0x28(%rsp), %rdi
movl %r15d, %esi
movl %r13d, %edx
movl %r12d, %ecx
leaq 0xe0(%rsp), %r8
callq 0x53c6
movl %eax, %ebx
movq 0xf0(%rsp), %rax
testq %rax, %rax
je 0x5fab
leaq 0xe0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %bl, %bl
je 0x6016
movl %r13d, %eax
shrl $0x4, %eax
andl $0xf, %r13d
movl %r12d, %ecx
shll $0x5, %ecx
andl $0xffe00, %ecx          # imm = 0xFFE00
movl %r15d, %edx
andl $0xffff0, %edx          # imm = 0xFFFF0
orl %eax, %edx
orl %ecx, %edx
shll $0xc, %edx
andl $0xf, %r12d
shll $0x8, %r12d
shll $0x4, %r15d
movzbl %r15b, %eax
orl %r13d, %eax
orl %r12d, %eax
orl %edx, %eax
movl %eax, 0x40(%rsp)
movq 0x30(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x600c
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x6016
leaq 0x40(%rsp), %rdx
callq 0x79fc
addq $0x4, %r14
cmpq $0x64, %r14
jne 0x5dbe
movb $0x2, %al
jmp 0x6676
andl $0x3, %eax
leaq 0x26eb(%rip), %rcx      # 0x8720
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
decl %ebp
jmp 0x5daf
movzbl %al, %edi
callq 0x7cf3
testb %al, %al
je 0x6136
leaq 0x14(%rsp), %rax
movl (%rax), %ebx
leaq 0x10(%rsp), %rax
movl (%rax), %ebp
leaq 0x18(%rsp), %r12
movl (%r12), %r13d
xorps %xmm0, %xmm0
leaq 0x180(%rsp), %r15
movaps %xmm0, (%r15)
movaps %xmm0, 0x10(%r15)
movl $0x28, %edi
callq 0x2140
movq %r14, (%rax)
leaq 0xf(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq %r12, 0x10(%rax)
leaq 0x14(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x10(%rsp), %rcx
movq %rcx, 0x20(%rax)
movq %rax, (%r15)
leaq 0xaac(%rip), %rax       # 0x6b62
movq %rax, 0x18(%r15)
leaq 0x1001(%rip), %rax      # 0x70c2
movq %rax, 0x10(%r15)
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %ebp, %edx
movl %r13d, %ecx
movq %r15, %r8
callq 0x536c
movq 0x190(%rsp), %rax
testq %rax, %rax
je 0x60f8
leaq 0x180(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movb 0xf(%rsp), %al
shrb $0x3, %al
andb $0x3, %al
addb $0x3, %al
jmp 0x6676
movl $0xffffffff, 0x1c(%rsp) # imm = 0xFFFFFFFF
movq 0x30(%rsp), %r15
movq 0x8(%r15), %rsi
cmpq 0x10(%r15), %rsi
je 0x6618
movl $0xffffffff, (%rsi)     # imm = 0xFFFFFFFF
addq $0x4, %rsi
movq %rsi, 0x8(%r15)
jmp 0x6625
movzbl 0xf(%rsp), %eax
andl $-0x10, %eax
cmpl $0x70, %eax
je 0x66a8
cmpl $0xb0, %eax
je 0x66a4
cmpl $0xa0, %eax
jne 0x675d
xorl %r15d, %r15d
leaq 0x2709(%rip), %rax      # 0x8870
movl (%rax,%r15,4), %esi
addl 0x14(%rsp), %esi
leaq 0x271a(%rip), %rax      # 0x8890
movl (%rax,%r15,4), %edx
addl 0x10(%rsp), %edx
leaq 0x272b(%rip), %rax      # 0x88b0
movl (%rax,%r15,4), %ecx
addl 0x18(%rsp), %ecx
movq 0x28(%rsp), %rdi
movl %esi, 0x38(%rsp)
movl %edx, %ebp
movl %ecx, 0x20(%rsp)
callq 0x5254
movl %eax, %ebx
movzbl %al, %r14d
movl %r14d, %edi
callq 0x7cfe
testb %al, %al
movq %r15, 0x58(%rsp)
je 0x6412
xorl %r15d, %r15d
leaq 0x26aa(%rip), %rax      # 0x8870
movl (%r15,%rax), %ebx
addl 0x38(%rsp), %ebx
leaq 0x26bb(%rip), %rax      # 0x8890
movl (%r15,%rax), %r14d
addl %ebp, %r14d
leaq 0x26cd(%rip), %rax      # 0x88b0
movl (%r15,%rax), %r12d
addl 0x20(%rsp), %r12d
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %r14d, %edx
movl %r12d, %ecx
callq 0x5254
movl %eax, %r13d
andb $-0x10, %r13b
cmpb $0x60, %r13b
je 0x6247
movzbl %r13b, %ecx
cmpl $0x50, %ecx
je 0x6247
cmpl $0x40, %ecx
jne 0x6256
movl 0x20(%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 0x5420
testb %al, %al
jne 0x639b
jmp 0x63ff
cmpq $0x4, %r15
je 0x639b
jmp 0x63ff
movzbl %al, %edi
callq 0x7cf3
xorb $0x1, %al
cmpb $0x70, %r13b
setne %cl
testb %al, %cl
jne 0x6302
xorps %xmm0, %xmm0
movaps %xmm0, 0xc0(%rsp)
movaps %xmm0, 0xd0(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0xc0(%rsp)
movl %ebp, 0xc4(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0xc8(%rsp)
leaq 0x160a(%rip), %rax      # 0x78b0
movq %rax, 0xd8(%rsp)
leaq 0x1615(%rip), %rax      # 0x78ca
movq %rax, 0xd0(%rsp)
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %r14d, %edx
movl %r12d, %ecx
leaq 0xc0(%rsp), %r8
callq 0x53c6
movl %eax, %r13d
movq 0xd0(%rsp), %rax
testq %rax, %rax
je 0x6396
leaq 0xc0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6396
cmpb $-0x50, %r13b
jne 0x63ff
xorps %xmm0, %xmm0
movaps %xmm0, 0xa0(%rsp)
movaps %xmm0, 0xb0(%rsp)
movl 0x38(%rsp), %eax
movl %eax, 0xa0(%rsp)
movl %ebp, 0xa4(%rsp)
movl 0x20(%rsp), %eax
movl %eax, 0xa8(%rsp)
leaq 0x15b3(%rip), %rax      # 0x78f6
movq %rax, 0xb8(%rsp)
leaq 0x15be(%rip), %rax      # 0x7910
movq %rax, 0xb0(%rsp)
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %r14d, %edx
movl %r12d, %ecx
leaq 0xa0(%rsp), %r8
callq 0x53c6
movl %eax, %r13d
movq 0xb0(%rsp), %rax
testq %rax, %rax
je 0x6396
leaq 0xa0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %r13b, %r13b
je 0x63ff
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 0x63f5
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x63ff
leaq 0x40(%rsp), %rdx
callq 0x79fc
addq $0x4, %r15
cmpq $0x18, %r15
jne 0x61bf
jmp 0x6602
andb $-0x10, %bl
cmpb $0x60, %bl
je 0x6459
movzbl %bl, %eax
cmpl $0x50, %eax
je 0x6459
cmpl $0x40, %eax
jne 0x6471
movl 0x14(%rsp), %r8d
movl 0x10(%rsp), %r9d
movl 0x18(%rsp), %eax
movl %eax, (%rsp)
movq 0x28(%rsp), %rdi
movl 0x38(%rsp), %esi
movl %ebp, %edx
movl 0x20(%rsp), %ecx
callq 0x5420
testb %al, %al
jne 0x659c
jmp 0x6602
cmpb $0x60, %bl
je 0x659c
cmpl 0x10(%rsp), %ebp
jg 0x6602
jmp 0x659c
movl %r14d, %edi
callq 0x7cf3
xorb $0x1, %al
cmpb $0x70, %bl
setne %cl
testb %al, %cl
jne 0x651e
movl 0x14(%rsp), %eax
movl 0x10(%rsp), %ecx
movl 0x18(%rsp), %edx
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
movaps %xmm0, 0x90(%rsp)
movl %eax, 0x80(%rsp)
movl %ecx, 0x84(%rsp)
movl %edx, 0x88(%rsp)
leaq 0x1478(%rip), %rax      # 0x793c
movq %rax, 0x98(%rsp)
leaq 0x1483(%rip), %rax      # 0x7956
movq %rax, 0x90(%rsp)
movq 0x28(%rsp), %rdi
movl 0x38(%rsp), %esi
movl %ebp, %edx
movl 0x20(%rsp), %ecx
leaq 0x80(%rsp), %r8
callq 0x53c6
movl %eax, %ebx
movq 0x90(%rsp), %rax
testq %rax, %rax
je 0x6598
leaq 0x80(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6598
cmpb $-0x50, %bl
jne 0x6602
movl 0x14(%rsp), %eax
movl 0x10(%rsp), %ecx
movl 0x18(%rsp), %edx
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x70(%rsp)
movl %eax, 0x60(%rsp)
movl %ecx, 0x64(%rsp)
movl %edx, 0x68(%rsp)
leaq 0x142f(%rip), %rax      # 0x7982
movq %rax, 0x78(%rsp)
leaq 0x143d(%rip), %rax      # 0x799c
movq %rax, 0x70(%rsp)
movq 0x28(%rsp), %rdi
movl 0x38(%rsp), %esi
movl %ebp, %edx
movl 0x20(%rsp), %ecx
leaq 0x60(%rsp), %r8
callq 0x53c6
movl %eax, %ebx
movq 0x70(%rsp), %rax
testq %rax, %rax
je 0x6598
leaq 0x60(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
testb %bl, %bl
je 0x6602
movl %ebp, %eax
shrl $0x4, %eax
andl $0xf, %ebp
movl 0x20(%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 0x65f8
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x6602
leaq 0x40(%rsp), %rdx
callq 0x79fc
movq 0x58(%rsp), %r15
incq %r15
movb $0xa, %al
cmpq $0x6, %r15
jne 0x6160
jmp 0x6676
leaq 0x1c(%rsp), %rdx
movq %r15, %rdi
callq 0x79fc
movq 0x40(%rsp), %rbx
movq 0x48(%rsp), %r14
cmpq %r14, %rbx
je 0x665d
movq 0x8(%r15), %rsi
cmpq 0x10(%r15), %rsi
je 0x664c
movl (%rbx), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%r15)
jmp 0x6657
movq %r15, %rdi
movq %rbx, %rdx
callq 0x34c4
addq $0x4, %rbx
jmp 0x662f
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x6674
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
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 0x20(%rsp)
jmp 0x5daf
incl %ebp
jmp 0x5daf
incl 0x20(%rsp)
jmp 0x5daf
movb $0x9, %al
jmp 0x6676
leaq 0x14(%rsp), %rax
movl (%rax), %ebx
leaq 0x10(%rsp), %rax
movl (%rax), %ebp
leaq 0x18(%rsp), %r12
movl (%r12), %r13d
xorps %xmm0, %xmm0
leaq 0x160(%rsp), %r15
movaps %xmm0, (%r15)
movaps %xmm0, 0x10(%r15)
movl $0x28, %edi
callq 0x2140
movq %r14, (%rax)
leaq 0xf(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq %r12, 0x10(%rax)
leaq 0x14(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x10(%rsp), %rcx
movq %rcx, 0x20(%rax)
movq %rax, (%r15)
leaq 0xafd(%rip), %rax       # 0x7206
movq %rax, 0x18(%r15)
leaq 0x1058(%rip), %rax      # 0x776c
movq %rax, 0x10(%r15)
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl %ebp, %edx
movl %r13d, %ecx
movq %r15, %r8
callq 0x536c
movq 0x170(%rsp), %rax
testq %rax, %rax
je 0x674b
leaq 0x160(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movzbl 0xf(%rsp), %ecx
xorl %eax, %eax
btl $0x3, %ecx
adcb $0x7, %al
jmp 0x6676
xorl %eax, %eax
jmp 0x6676
jmp 0x6970
jmp 0x6970
movq %rax, %rbx
movq 0x170(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0x160(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
jmp 0x6970
movq %rax, %rbx
movq 0x70(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0x60(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
jmp 0x6970
jmp 0x6970
movq %rax, %rbx
movq 0x90(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0x80(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
jmp 0x6970
jmp 0x6970
jmp 0x6978
jmp 0x6978
jmp 0x6978
movq %rax, %rbx
movq 0x190(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0x180(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
jmp 0x6970
jmp 0x6978
jmp 0x6970
jmp 0x6978
jmp 0x6978
movq %rax, %rbx
movq 0x130(%rsp), %rax
testq %rax, %rax
je 0x697b
leaq 0x120(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x697b
jmp 0x6970
jmp 0x6970
jmp 0x6970
jmp 0x6970
jmp 0x6978
movq %rax, %rbx
movq 0xb0(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0xa0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
jmp 0x6970
movq %rax, %rbx
movq 0x150(%rsp), %rax
testq %rax, %rax
je 0x697b
leaq 0x140(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x697b
jmp 0x6970
movq %rax, %rbx
movq 0xf0(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0xe0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
jmp 0x6970
jmp 0x6970
jmp 0x6970
jmp 0x6978
movq %rax, %rbx
movq 0xd0(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0xc0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
jmp 0x6970
movq %rax, %rbx
movq 0x110(%rsp), %rax
testq %rax, %rax
je 0x6992
leaq 0x100(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0x6992
movq %rax, %rdi
callq 0x3429
movq %rax, %rbx
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x6992
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2150
movq %rbx, %rdi
callq 0x2220