// File: SNUCSE-CTA[P]GI/src/refine.cpp
// Function: Refinement::refine(Coloring*, Graph*, Graph*)
bool Refinement::refine(Coloring* coloring, Graph* aG1, Graph* aG2)
{
	#ifdef DEBUG
	cout << __PRETTY_FUNCTION__ << endl;
	#endif

	auto deg = [aG1, aG2](const int32_t& u) -> int32_t {
		return (u < aG1->numNode) ? aG1->d[u] : aG2->d[u - aG1->numNode];
	};

	auto adj = [aG1, aG2](const int32_t& u, const int32_t& i) -> int32_t {
		return (u < aG1->numNode) ? aG1->e[u][i] : (aG2->e[u - aG1->numNode][i] + aG1->numNode);
	};

	const int32_t numNode = aG1->numNode + aG2->numNode;

	int32_t* inStack = global_memory->getLLArray(numNode);
	int32_t* stackCand = global_memory->getLLArray(numNode);

	memset(inStack, 0, sizeof(int32_t) * numNode);
	memset(stackCand, 0, sizeof(int32_t) * numNode);

	int32_t numStackCand = 0;
	int32_t numVisitCell = 0;
	int32_t numSplitCell = 0;
	int32_t numSplitCount = 0;

	// Push all cells of the coloring into the stack.
	stackSize = 0;
	for (int32_t i = 0; i < numNode; i += coloring->cellSize[i]) {
		cellStack[stackSize] = i;
		++stackSize;
		inStack[i] = 1;
	}

	while (stackSize > 0) {
		if (coloring->numCell == numNode)
			break;

		if (global_mark > INFINITY) {
			memset(markCell, 0, sizeof(int32_t) * numNode);
			memset(markNode, 0, sizeof(int32_t) * numNode);
			global_mark = 0;
		}
		++global_mark;

		int32_t weightend = 0;
		int32_t idx = selectFromStack(coloring);
		int32_t currCell = cellStack[idx];
		int32_t currEnd = currCell + coloring->cellSize[currCell];

		cellStack[idx] = cellStack[stackSize - 1];
		--stackSize;
		inStack[currCell] = 0;

		// The first node.
		int32_t currNode = coloring->perm[currCell];
		int32_t currDegree = deg(currNode);
		do {
			int32_t start = currCell;
			int32_t end = currEnd;
			weightend = deg(currNode);

			if (coloring->cellSize[start] == 1) {
				return false;
			} else if (coloring->cellSize[start] == 2) {
				bool u_in_G1 = (coloring->perm[start] < aG1->numNode);
				bool v_in_G1 = (coloring->perm[start+1] < aG1->numNode);
				if ((u_in_G1 && v_in_G1) || (!u_in_G1 && !v_in_G1)) {
					return false;
				}

				numVisitCell = 0;
				for (int32_t i = 0; i < 2; ++i) {
					currNode = coloring->perm[start+i];
					for (int32_t j = 0; j < deg(currNode); ++j) {
						int32_t neigh = adj(currNode, j);
						int32_t c = coloring->color[coloring->inv[neigh]];
						if (coloring->cellSize[c] > 1) {
							if (markCell[c] != global_mark) {
								visitCell[numVisitCell++] = c;
								markCell[c] = global_mark;
								visitNode[c] = neigh;
								numVisitNode[c] = 1;
							} else {
								visitNode[c + numVisitNode[c]] = neigh;
								++numVisitNode[c];
							}
						}
					}
				}
				++global_mark;

				// Find cells that needs to be split.
				numSplitCell = 0;
				for (int32_t idx = 0; idx < numVisitCell; ++idx) {
					int32_t c = visitCell[idx];
					if (numVisitNode[c] < coloring->cellSize[c]) {
						splitCell[numSplitCell++] = c;
					}
				}

				if (numSplitCell > 0) {
					sort(splitCell, splitCell+numSplitCell);

					for (int32_t idx = 0; idx < numSplitCell; ++idx) {
						int32_t sc = splitCell[idx];

						coloring->cellSize[sc] -= numVisitNode[sc];

						int32_t newCell = sc + coloring->cellSize[sc];
						coloring->cellSize[newCell] = numVisitNode[sc];

						++coloring->numCell;

						if (inStack[sc] == 1) {
							cellStack[stackSize] = newCell;
							++stackSize;
							inStack[newCell] = 1;
						} else {
							if (coloring->cellSize[newCell] < coloring->cellSize[sc]) {
								cellStack[stackSize] = newCell;
								++stackSize;
								inStack[newCell] = 1;
							} else {
								cellStack[stackSize] = sc;
								++stackSize;
								inStack[sc] = 1;
							}
						}

						for (int32_t i = 0; i < numVisitNode[sc]; ++i) {
							int32_t node = visitNode[sc+i];

							int32_t newPos = newCell + i;
							int32_t oldPos = coloring->inv[node];

							coloring->perm[oldPos] = coloring->perm[newPos];
							coloring->perm[newPos] = node;
							coloring->inv[node] = newPos;
							coloring->inv[coloring->perm[oldPos]] = oldPos;
							coloring->color[newPos] = newCell;
						}
					}
				}
			} else { // if cellSize[start] > 2
				if (coloring->cellSize[start] != numNode) {
					numVisitCell = 0;
					for (int32_t i = start; i < end; ++i) {
						currNode = coloring->perm[i];
						for (int32_t j = 0; j < deg(currNode); ++j) {
							int32_t neigh = adj(currNode, j);

							if (markNode[neigh] == global_mark) {
								++neighCount[neigh];
							} else {
								int32_t c = coloring->color[coloring->inv[neigh]];
								if (coloring->cellSize[c] > 1) {
									markNode[neigh] = global_mark;
									neighCount[neigh] = 1;

									if (markCell[c] != global_mark) {
										visitCell[numVisitCell++] = c;
										markCell[c] = global_mark;
										visitNode[c] = neigh;
										numVisitNode[c] = 1;
									} else {
										visitNode[c + numVisitNode[c]++] = neigh;
									}
								} //if (cellSize[c] > 1)
							} //if-else (markNode[neigh])
						} //for (j)
					} //for (i)
				} //if
				++global_mark;

				// Find cells that need to be split.
				numSplitCell = 0;
				for (int32_t idx = 0; idx < numVisitCell; ++idx) {
					int32_t c = visitCell[idx];

					if (numVisitNode[c] < coloring->cellSize[c]) {
						splitCell[numSplitCell++] = c;
					} else {
						int32_t count = neighCount[coloring->perm[c]];
						for (int32_t i = c+1; i < c+coloring->cellSize[c]; ++i) {
							if (neighCount[coloring->perm[i]] != count) {
								splitCell[numSplitCell++] = c;
								break;
							}
						}
					}
				}

				if (numSplitCell > 0) {
					sort(splitCell, splitCell+numSplitCell);

					for (int32_t idx = 0; idx < numSplitCell; ++idx) {
						int32_t sc = splitCell[idx];

						int32_t scEnd = sc + coloring->cellSize[sc];
						numSplitCount = 0;
						if (numVisitNode[sc] < coloring->cellSize[sc]) {
							splitCount[numSplitCount] = 0;
							++numSplitCount;
							splitPos[0] = coloring->cellSize[sc] - numVisitNode[sc];
						}

						int32_t thisEnd = sc + numVisitNode[sc];
						for (int32_t i = sc; i < thisEnd; ++i) {
							int32_t count = neighCount[visitNode[i]];

							if (markCell[count] != global_mark) {
								markCell[count] = global_mark;
								splitCount[numSplitCount] = count;
								++numSplitCount;
								splitPos[count] = 1;
							} else {
								++splitPos[count];
							}
						}
						++global_mark;

						sort(splitCount, splitCount+numSplitCount);

						stackCand[0] = sc;
						numStackCand = 1;

						int32_t newCell = sc;
						for (int32_t k = 0; k < numSplitCount; ++k) {
							int32_t size = splitPos[splitCount[k]];
							coloring->cellSize[newCell] = size;
							splitPos[splitCount[k]] = newCell;

							newCell += size;
							if (newCell < scEnd) {
								// Push new cells into the stack.
								// Note that the first new cell is not pushed.
								stackCand[numStackCand] = newCell;
								++numStackCand;
								++coloring->numCell;
							}
						}

						if (inStack[sc]) {
							for (int32_t k = 1; k < numStackCand; ++k) {
								cellStack[stackSize] = stackCand[k];
								inStack[stackCand[k]] = 1;
								++stackSize;
							}
						} else {
							int32_t maxCell = sc;
							int32_t maxCellSize = coloring->cellSize[sc];
							for (int32_t k = 1; k < numStackCand; ++k) {
								if (coloring->cellSize[stackCand[k]] > maxCellSize) {
									maxCell = stackCand[k];
									maxCellSize = coloring->cellSize[maxCell];
								}
							}

							for (int32_t k = 0; k < numStackCand; ++k) {
								if (stackCand[k] != maxCell) {
									cellStack[stackSize] = stackCand[k];
									inStack[stackCand[k]] = 1;
									++stackSize;
								}
							}
						}

						for (int32_t i = sc; i < thisEnd; ++i) {
							int32_t node = visitNode[i];

							int32_t newPos = splitPos[neighCount[node]]++;
							int32_t oldPos = coloring->inv[node];

							coloring->perm[oldPos] = coloring->perm[newPos];
							coloring->perm[newPos] = node;
							coloring->inv[node] = newPos;
							coloring->inv[coloring->perm[oldPos]] = oldPos;
							neighCount[node] = 0;
						}

						newCell = scEnd - numVisitNode[sc];
						int32_t nc = newCell;
						int32_t ncEnd = newCell + coloring->cellSize[newCell] - 1;
						do {
							coloring->color[nc] = newCell;
							if (nc == ncEnd) {
								newCell = nc + 1;
								if (newCell < numNode) {
									ncEnd = newCell + coloring->cellSize[newCell] - 1;
								}
							}
							++nc;
						} while (nc < scEnd);
					}
				}
			} //if-else (cellSize[start])
		} while (weightend < currDegree);
	}

	return checkColoring(coloring);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x20(%rbp), %rcx
movq %rcx, -0x38(%rbp)
movq -0x28(%rbp), %rcx
movq %rcx, -0x30(%rbp)
movq -0x20(%rbp), %rcx
movq %rcx, -0x48(%rbp)
movq -0x28(%rbp), %rcx
movq %rcx, -0x40(%rbp)
movq -0x20(%rbp), %rcx
movl 0xc(%rcx), %ecx
movq -0x28(%rbp), %rdx
addl 0xc(%rdx), %ecx
movl %ecx, -0x4c(%rbp)
movq 0x68(%rax), %rdi
movl -0x4c(%rbp), %esi
callq 0x77d0
movq %rax, %rcx
movq -0x148(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq 0x68(%rax), %rdi
movl -0x4c(%rbp), %esi
callq 0x77d0
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rdi
movslq -0x4c(%rbp), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x3110
movq -0x60(%rbp), %rdi
movslq -0x4c(%rbp), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x3110
movq -0x148(%rbp), %rax
movl $0x0, -0x64(%rbp)
movl $0x0, -0x68(%rbp)
movl $0x0, -0x6c(%rbp)
movl $0x0, -0x70(%rbp)
movl $0x0, 0x28(%rax)
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x4c(%rbp), %eax
jge 0x15444
movq -0x148(%rbp), %rax
movl -0x74(%rbp), %esi
movq 0x20(%rax), %rcx
movslq 0x28(%rax), %rdx
movl %esi, (%rcx,%rdx,4)
movl 0x28(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x28(%rax)
movq -0x58(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
jmp 0x153f8
jmp 0x15446
movq -0x148(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jle 0x165cb
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
cmpl -0x4c(%rbp), %eax
jne 0x15468
jmp 0x165cb
movq -0x148(%rbp), %rax
cmpl $0x77359400, 0x80(%rax) # imm = 0x77359400
jle 0x154c0
movq -0x148(%rbp), %rax
movq 0x70(%rax), %rdi
movslq -0x4c(%rbp), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x3110
movq -0x148(%rbp), %rax
movq 0x78(%rax), %rdi
movslq -0x4c(%rbp), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x3110
movq -0x148(%rbp), %rax
movl $0x0, 0x80(%rax)
movq -0x148(%rbp), %rdi
movl 0x80(%rdi), %eax
addl $0x1, %eax
movl %eax, 0x80(%rdi)
movl $0x0, -0x78(%rbp)
movq -0x18(%rbp), %rsi
callq 0x16760
movl %eax, %ecx
movq -0x148(%rbp), %rax
movl %ecx, -0x7c(%rbp)
movq 0x20(%rax), %rcx
movslq -0x7c(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0x80(%rbp)
movl -0x80(%rbp), %ecx
movq -0x18(%rbp), %rdx
movq 0x20(%rdx), %rdx
movslq -0x80(%rbp), %rsi
addl (%rdx,%rsi,4), %ecx
movl %ecx, -0x84(%rbp)
movq 0x20(%rax), %rcx
movl 0x28(%rax), %edx
subl $0x1, %edx
movslq %edx, %rdx
movl (%rcx,%rdx,4), %esi
movq 0x20(%rax), %rcx
movslq -0x7c(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl 0x28(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x28(%rax)
movq -0x58(%rbp), %rax
movslq -0x80(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x80(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x88(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x16810
movl %eax, -0x8c(%rbp)
movl -0x80(%rbp), %eax
movl %eax, -0x90(%rbp)
movl -0x84(%rbp), %eax
movl %eax, -0x94(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x16810
movl %eax, -0x78(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x90(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
jne 0x155bc
movb $0x0, -0x1(%rbp)
jmp 0x165e0
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x90(%rbp), %rcx
cmpl $0x2, (%rax,%rcx,4)
jne 0x15b89
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x90(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x20(%rbp), %rcx
cmpl 0xc(%rcx), %eax
setl %al
andb $0x1, %al
movb %al, -0x95(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movl -0x90(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movq -0x20(%rbp), %rcx
cmpl 0xc(%rcx), %eax
setl %al
andb $0x1, %al
movb %al, -0x96(%rbp)
testb $0x1, -0x95(%rbp)
je 0x15634
testb $0x1, -0x96(%rbp)
jne 0x15646
testb $0x1, -0x95(%rbp)
jne 0x1564f
testb $0x1, -0x96(%rbp)
jne 0x1564f
movb $0x0, -0x1(%rbp)
jmp 0x165e0
movl $0x0, -0x68(%rbp)
movl $0x0, -0x9c(%rbp)
cmpl $0x2, -0x9c(%rbp)
jge 0x15806
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movl -0x90(%rbp), %ecx
addl -0x9c(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x88(%rbp)
movl $0x0, -0xa0(%rbp)
movl -0xa0(%rbp), %eax
movl %eax, -0x14c(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x16810
movl %eax, %ecx
movl -0x14c(%rbp), %eax
cmpl %ecx, %eax
jge 0x157f0
leaq -0x48(%rbp), %rdi
leaq -0x88(%rbp), %rsi
leaq -0xa0(%rbp), %rdx
callq 0x16880
movl %eax, -0xa4(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movslq -0xa4(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xa8(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xa8(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
jle 0x157da
movq -0x148(%rbp), %rcx
movq 0x70(%rcx), %rax
movslq -0xa8(%rbp), %rdx
movl (%rax,%rdx,4), %eax
cmpl 0x80(%rcx), %eax
je 0x15798
movq -0x148(%rbp), %rax
movl -0xa8(%rbp), %esi
movq 0x38(%rax), %rcx
movl -0x68(%rbp), %edx
movl %edx, %edi
addl $0x1, %edi
movl %edi, -0x68(%rbp)
movslq %edx, %rdx
movl %esi, (%rcx,%rdx,4)
movl 0x80(%rax), %esi
movq 0x70(%rax), %rcx
movslq -0xa8(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl -0xa4(%rbp), %esi
movq 0x40(%rax), %rcx
movslq -0xa8(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movq 0x48(%rax), %rax
movslq -0xa8(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
jmp 0x157d8
movq -0x148(%rbp), %rax
movl -0xa4(%rbp), %esi
movq 0x40(%rax), %rcx
movl -0xa8(%rbp), %edx
movq 0x48(%rax), %rdi
movslq -0xa8(%rbp), %r8
addl (%rdi,%r8,4), %edx
movslq %edx, %rdx
movl %esi, (%rcx,%rdx,4)
movq 0x48(%rax), %rax
movslq -0xa8(%rbp), %rcx
movl (%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, (%rax,%rcx,4)
jmp 0x157da
jmp 0x157dc
movl -0xa0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa0(%rbp)
jmp 0x15697
jmp 0x157f2
movl -0x9c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9c(%rbp)
jmp 0x15660
movq -0x148(%rbp), %rax
movl 0x80(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x80(%rax)
movl $0x0, -0x6c(%rbp)
movl $0x0, -0xac(%rbp)
movl -0xac(%rbp), %eax
cmpl -0x68(%rbp), %eax
jge 0x158aa
movq -0x148(%rbp), %rax
movq 0x38(%rax), %rcx
movslq -0xac(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0xb0(%rbp)
movq 0x48(%rax), %rax
movslq -0xb0(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0xb0(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jge 0x15897
movq -0x148(%rbp), %rax
movl -0xb0(%rbp), %edx
movq 0x50(%rax), %rax
movl -0x6c(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x6c(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x15899
movl -0xac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac(%rbp)
jmp 0x1582d
cmpl $0x0, -0x6c(%rbp)
jle 0x15b84
movq -0x148(%rbp), %rax
movq 0x50(%rax), %rdi
movq 0x50(%rax), %rsi
movslq -0x6c(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x10940
movl $0x0, -0xb4(%rbp)
movl -0xb4(%rbp), %eax
cmpl -0x6c(%rbp), %eax
jge 0x15b82
movq -0x148(%rbp), %rax
movq 0x50(%rax), %rcx
movslq -0xb4(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0xb8(%rbp)
movq 0x48(%rax), %rcx
movslq -0xb8(%rbp), %rdx
movl (%rcx,%rdx,4), %edi
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0xb8(%rbp), %rdx
movl (%rcx,%rdx,4), %esi
subl %edi, %esi
movl %esi, (%rcx,%rdx,4)
movl -0xb8(%rbp), %ecx
movq -0x18(%rbp), %rdx
movq 0x20(%rdx), %rdx
movslq -0xb8(%rbp), %rsi
addl (%rdx,%rsi,4), %ecx
movl %ecx, -0xbc(%rbp)
movq 0x48(%rax), %rax
movslq -0xb8(%rbp), %rcx
movl (%rax,%rcx,4), %edx
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xbc(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x4(%rax)
movq -0x58(%rbp), %rax
movslq -0xb8(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
jne 0x159c0
movq -0x148(%rbp), %rax
movl -0xbc(%rbp), %esi
movq 0x20(%rax), %rcx
movslq 0x28(%rax), %rdx
movl %esi, (%rcx,%rdx,4)
movl 0x28(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x28(%rax)
movq -0x58(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
jmp 0x15a50
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xbc(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0xb8(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jge 0x15a1b
movq -0x148(%rbp), %rax
movl -0xbc(%rbp), %esi
movq 0x20(%rax), %rcx
movslq 0x28(%rax), %rdx
movl %esi, (%rcx,%rdx,4)
movl 0x28(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x28(%rax)
movq -0x58(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
jmp 0x15a4e
movq -0x148(%rbp), %rax
movl -0xb8(%rbp), %esi
movq 0x20(%rax), %rcx
movslq 0x28(%rax), %rdx
movl %esi, (%rcx,%rdx,4)
movl 0x28(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x28(%rax)
movq -0x58(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
jmp 0x15a50
movl $0x0, -0xc0(%rbp)
movq -0x148(%rbp), %rcx
movl -0xc0(%rbp), %eax
movq 0x48(%rcx), %rcx
movslq -0xb8(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jge 0x15b6c
movq -0x148(%rbp), %rax
movq 0x40(%rax), %rax
movl -0xb8(%rbp), %ecx
addl -0xc0(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xc4(%rbp)
movl -0xbc(%rbp), %eax
addl -0xc0(%rbp), %eax
movl %eax, -0xc8(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movslq -0xc4(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xcc(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0xc8(%rbp), %rcx
movl (%rax,%rcx,4), %edx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0xcc(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0xc4(%rbp), %edx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0xc8(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0xc8(%rbp), %edx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movslq -0xc4(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0xcc(%rbp), %edx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movslq -0xcc(%rbp), %rsi
movslq (%rcx,%rsi,4), %rcx
movl %edx, (%rax,%rcx,4)
movl -0xbc(%rbp), %edx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0xc8(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0xc0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc0(%rbp)
jmp 0x15a5a
jmp 0x15b6e
movl -0xb4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb4(%rbp)
jmp 0x158dd
jmp 0x15b84
jmp 0x165b3
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x90(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x4c(%rbp), %eax
je 0x15dba
movl $0x0, -0x68(%rbp)
movl -0x90(%rbp), %eax
movl %eax, -0xd0(%rbp)
movl -0xd0(%rbp), %eax
cmpl -0x94(%rbp), %eax
jge 0x15db8
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0xd0(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x88(%rbp)
movl $0x0, -0xd4(%rbp)
movl -0xd4(%rbp), %eax
movl %eax, -0x150(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x16810
movl %eax, %ecx
movl -0x150(%rbp), %eax
cmpl %ecx, %eax
jge 0x15da2
leaq -0x48(%rbp), %rdi
leaq -0x88(%rbp), %rsi
leaq -0xd4(%rbp), %rdx
callq 0x16880
movq -0x148(%rbp), %rcx
movl %eax, -0xd8(%rbp)
movq 0x78(%rcx), %rax
movslq -0xd8(%rbp), %rdx
movl (%rax,%rdx,4), %eax
cmpl 0x80(%rcx), %eax
jne 0x15c71
movq -0x148(%rbp), %rax
movq 0x30(%rax), %rax
movslq -0xd8(%rbp), %rcx
movl (%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, (%rax,%rcx,4)
jmp 0x15d8c
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movslq -0xd8(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xdc(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xdc(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
jle 0x15d8a
movq -0x148(%rbp), %rcx
movl 0x80(%rcx), %esi
movq 0x78(%rcx), %rax
movslq -0xd8(%rbp), %rdx
movl %esi, (%rax,%rdx,4)
movq 0x30(%rcx), %rax
movslq -0xd8(%rbp), %rdx
movl $0x1, (%rax,%rdx,4)
movq 0x70(%rcx), %rax
movslq -0xdc(%rbp), %rdx
movl (%rax,%rdx,4), %eax
cmpl 0x80(%rcx), %eax
je 0x15d4f
movq -0x148(%rbp), %rax
movl -0xdc(%rbp), %esi
movq 0x38(%rax), %rcx
movl -0x68(%rbp), %edx
movl %edx, %edi
addl $0x1, %edi
movl %edi, -0x68(%rbp)
movslq %edx, %rdx
movl %esi, (%rcx,%rdx,4)
movl 0x80(%rax), %esi
movq 0x70(%rax), %rcx
movslq -0xdc(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl -0xd8(%rbp), %esi
movq 0x40(%rax), %rcx
movslq -0xdc(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movq 0x48(%rax), %rax
movslq -0xdc(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
jmp 0x15d88
movq -0x148(%rbp), %rsi
movl -0xd8(%rbp), %edx
movq 0x40(%rsi), %rax
movl -0xdc(%rbp), %ecx
movq 0x48(%rsi), %rdi
movslq -0xdc(%rbp), %r8
movl (%rdi,%r8,4), %esi
movl %esi, %r9d
addl $0x1, %r9d
movl %r9d, (%rdi,%r8,4)
addl %esi, %ecx
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x15d8a
jmp 0x15d8c
jmp 0x15d8e
movl -0xd4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xd4(%rbp)
jmp 0x15beb
jmp 0x15da4
movl -0xd0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xd0(%rbp)
jmp 0x15bb7
jmp 0x15dba
movq -0x148(%rbp), %rax
movl 0x80(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x80(%rax)
movl $0x0, -0x6c(%rbp)
movl $0x0, -0xe0(%rbp)
movl -0xe0(%rbp), %eax
cmpl -0x68(%rbp), %eax
jge 0x15f27
movq -0x148(%rbp), %rax
movq 0x38(%rax), %rcx
movslq -0xe0(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0xe4(%rbp)
movq 0x48(%rax), %rax
movslq -0xe4(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0xe4(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jge 0x15e54
movq -0x148(%rbp), %rax
movl -0xe4(%rbp), %edx
movq 0x50(%rax), %rax
movl -0x6c(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x6c(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x15f11
movq -0x148(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movslq -0xe4(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xe8(%rbp)
movl -0xe4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xec(%rbp)
movl -0xec(%rbp), %eax
movl -0xe4(%rbp), %ecx
movq -0x18(%rbp), %rdx
movq 0x20(%rdx), %rdx
movslq -0xe4(%rbp), %rsi
addl (%rdx,%rsi,4), %ecx
cmpl %ecx, %eax
jge 0x15f0f
movq -0x148(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movslq -0xec(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0xe8(%rbp), %eax
je 0x15ef9
movq -0x148(%rbp), %rax
movl -0xe4(%rbp), %edx
movq 0x50(%rax), %rax
movl -0x6c(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x6c(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x15f0f
jmp 0x15efb
movl -0xec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xec(%rbp)
jmp 0x15e8a
jmp 0x15f11
jmp 0x15f13
movl -0xe0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xe0(%rbp)
jmp 0x15de1
cmpl $0x0, -0x6c(%rbp)
jle 0x165b1
movq -0x148(%rbp), %rax
movq 0x50(%rax), %rdi
movq 0x50(%rax), %rsi
movslq -0x6c(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x10940
movl $0x0, -0xf0(%rbp)
movl -0xf0(%rbp), %eax
cmpl -0x6c(%rbp), %eax
jge 0x165af
movq -0x148(%rbp), %rax
movq 0x50(%rax), %rcx
movslq -0xf0(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0xf4(%rbp)
movl -0xf4(%rbp), %ecx
movq -0x18(%rbp), %rdx
movq 0x20(%rdx), %rdx
movslq -0xf4(%rbp), %rsi
addl (%rdx,%rsi,4), %ecx
movl %ecx, -0xf8(%rbp)
movl $0x0, -0x70(%rbp)
movq 0x48(%rax), %rax
movslq -0xf4(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0xf4(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jge 0x16010
movq -0x148(%rbp), %rax
movq 0x58(%rax), %rcx
movslq -0x70(%rbp), %rdx
movl $0x0, (%rcx,%rdx,4)
movl -0x70(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x70(%rbp)
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0xf4(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movq 0x48(%rax), %rdx
movslq -0xf4(%rbp), %rsi
subl (%rdx,%rsi,4), %ecx
movq 0x60(%rax), %rax
movl %ecx, (%rax)
movq -0x148(%rbp), %rcx
movl -0xf4(%rbp), %eax
movq 0x48(%rcx), %rcx
movslq -0xf4(%rbp), %rdx
addl (%rcx,%rdx,4), %eax
movl %eax, -0xfc(%rbp)
movl -0xf4(%rbp), %eax
movl %eax, -0x100(%rbp)
movl -0x100(%rbp), %eax
cmpl -0xfc(%rbp), %eax
jge 0x16102
movq -0x148(%rbp), %rcx
movq 0x30(%rcx), %rax
movq 0x40(%rcx), %rdx
movslq -0x100(%rbp), %rsi
movslq (%rdx,%rsi,4), %rdx
movl (%rax,%rdx,4), %eax
movl %eax, -0x104(%rbp)
movq 0x70(%rcx), %rax
movslq -0x104(%rbp), %rdx
movl (%rax,%rdx,4), %eax
cmpl 0x80(%rcx), %eax
je 0x160d1
movq -0x148(%rbp), %rax
movl 0x80(%rax), %esi
movq 0x70(%rax), %rcx
movslq -0x104(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl -0x104(%rbp), %esi
movq 0x58(%rax), %rcx
movslq -0x70(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl -0x70(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x70(%rbp)
movq 0x60(%rax), %rax
movslq -0x104(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
jmp 0x160ec
movq -0x148(%rbp), %rax
movq 0x60(%rax), %rax
movslq -0x104(%rbp), %rcx
movl (%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, (%rax,%rcx,4)
jmp 0x160ee
movl -0x100(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x100(%rbp)
jmp 0x1603d
movq -0x148(%rbp), %rax
movl 0x80(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x80(%rax)
movq 0x58(%rax), %rdi
movq 0x58(%rax), %rsi
movslq -0x70(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x10940
movl -0xf4(%rbp), %ecx
movq -0x60(%rbp), %rax
movl %ecx, (%rax)
movl $0x1, -0x64(%rbp)
movl -0xf4(%rbp), %eax
movl %eax, -0x108(%rbp)
movl $0x0, -0x10c(%rbp)
movl -0x10c(%rbp), %eax
cmpl -0x70(%rbp), %eax
jge 0x1621c
movq -0x148(%rbp), %rcx
movq 0x60(%rcx), %rax
movq 0x58(%rcx), %rdx
movslq -0x10c(%rbp), %rsi
movslq (%rdx,%rsi,4), %rdx
movl (%rax,%rdx,4), %eax
movl %eax, -0x110(%rbp)
movl -0x110(%rbp), %esi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x108(%rbp), %rdx
movl %esi, (%rax,%rdx,4)
movl -0x108(%rbp), %edx
movq 0x60(%rcx), %rax
movq 0x58(%rcx), %rcx
movslq -0x10c(%rbp), %rsi
movslq (%rcx,%rsi,4), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x110(%rbp), %eax
addl -0x108(%rbp), %eax
movl %eax, -0x108(%rbp)
movl -0x108(%rbp), %eax
cmpl -0xf8(%rbp), %eax
jge 0x16206
movl -0x108(%rbp), %edx
movq -0x60(%rbp), %rax
movslq -0x64(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x4(%rax)
jmp 0x16208
movl -0x10c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10c(%rbp)
jmp 0x16159
movq -0x58(%rbp), %rax
movslq -0xf4(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x1629b
movl $0x1, -0x114(%rbp)
movl -0x114(%rbp), %eax
cmpl -0x64(%rbp), %eax
jge 0x16296
movq -0x148(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq -0x114(%rbp), %rdx
movl (%rcx,%rdx,4), %esi
movq 0x20(%rax), %rcx
movslq 0x28(%rax), %rdx
movl %esi, (%rcx,%rdx,4)
movq -0x58(%rbp), %rcx
movq -0x60(%rbp), %rdx
movslq -0x114(%rbp), %rsi
movslq (%rdx,%rsi,4), %rdx
movl $0x1, (%rcx,%rdx,4)
movl 0x28(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x28(%rax)
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
jmp 0x16237
jmp 0x163b8
movl -0xf4(%rbp), %eax
movl %eax, -0x118(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xf4(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x11c(%rbp)
movl $0x1, -0x120(%rbp)
movl -0x120(%rbp), %eax
cmpl -0x64(%rbp), %eax
jge 0x16335
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x60(%rbp), %rcx
movslq -0x120(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x11c(%rbp), %eax
jle 0x16322
movq -0x60(%rbp), %rax
movslq -0x120(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x118(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x118(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x11c(%rbp)
jmp 0x16324
movl -0x120(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x120(%rbp)
jmp 0x162c9
movl $0x0, -0x124(%rbp)
movl -0x124(%rbp), %eax
cmpl -0x64(%rbp), %eax
jge 0x163b6
movq -0x60(%rbp), %rax
movslq -0x124(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x118(%rbp), %eax
je 0x163a3
movq -0x148(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq -0x124(%rbp), %rdx
movl (%rcx,%rdx,4), %esi
movq 0x20(%rax), %rcx
movslq 0x28(%rax), %rdx
movl %esi, (%rcx,%rdx,4)
movq -0x58(%rbp), %rcx
movq -0x60(%rbp), %rdx
movslq -0x124(%rbp), %rsi
movslq (%rdx,%rsi,4), %rdx
movl $0x1, (%rcx,%rdx,4)
movl 0x28(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x28(%rax)
jmp 0x163a5
movl -0x124(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x124(%rbp)
jmp 0x1633f
jmp 0x163b8
movl -0xf4(%rbp), %eax
movl %eax, -0x128(%rbp)
movl -0x128(%rbp), %eax
cmpl -0xfc(%rbp), %eax
jge 0x164cb
movq -0x148(%rbp), %rax
movq 0x40(%rax), %rcx
movslq -0x128(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0x12c(%rbp)
movq 0x60(%rax), %rdx
movq 0x30(%rax), %rcx
movslq -0x12c(%rbp), %rsi
movslq (%rcx,%rsi,4), %rsi
movl (%rdx,%rsi,4), %ecx
movl %ecx, %edi
addl $0x1, %edi
movl %edi, (%rdx,%rsi,4)
movl %ecx, -0x130(%rbp)
movq -0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movslq -0x12c(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movl %ecx, -0x134(%rbp)
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movslq -0x130(%rbp), %rdx
movl (%rcx,%rdx,4), %esi
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movslq -0x134(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl -0x12c(%rbp), %esi
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movslq -0x130(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl -0x130(%rbp), %esi
movq -0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movslq -0x12c(%rbp), %rdx
movl %esi, (%rcx,%rdx,4)
movl -0x134(%rbp), %esi
movq -0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x18(%rbp), %rdx
movq 0x10(%rdx), %rdx
movslq -0x134(%rbp), %rdi
movslq (%rdx,%rdi,4), %rdx
movl %esi, (%rcx,%rdx,4)
movq 0x30(%rax), %rax
movslq -0x12c(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl -0x128(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
jmp 0x163c4
movq -0x148(%rbp), %rcx
movl -0xf8(%rbp), %eax
movq 0x48(%rcx), %rcx
movslq -0xf4(%rbp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, -0x108(%rbp)
movl -0x108(%rbp), %eax
movl %eax, -0x138(%rbp)
movl -0x108(%rbp), %eax
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0x108(%rbp), %rdx
addl (%rcx,%rdx,4), %eax
subl $0x1, %eax
movl %eax, -0x13c(%rbp)
movl -0x108(%rbp), %edx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x138(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x138(%rbp), %eax
cmpl -0x13c(%rbp), %eax
jne 0x1657c
movl -0x138(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x108(%rbp)
movl -0x108(%rbp), %eax
cmpl -0x4c(%rbp), %eax
jge 0x1657a
movl -0x108(%rbp), %eax
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movslq -0x108(%rbp), %rdx
addl (%rcx,%rdx,4), %eax
subl $0x1, %eax
movl %eax, -0x13c(%rbp)
jmp 0x1657c
movl -0x138(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x138(%rbp)
movl -0x138(%rbp), %eax
cmpl -0xf8(%rbp), %eax
jl 0x16519
jmp 0x1659b
movl -0xf0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf0(%rbp)
jmp 0x15f5a
jmp 0x165b1
jmp 0x165b3
jmp 0x165b5
jmp 0x165b7
movl -0x78(%rbp), %eax
cmpl -0x8c(%rbp), %eax
jl 0x15576
jmp 0x15446
movq -0x148(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x16630
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
nop