// File: /workspace/github_cpp_makefile_star2_O1/YSRKEN[P]Shioi/I401/main.cpp
// Function: Board::NegaMax(Stone, unsigned long, int, int)
int NegaMax(const Stone turn, const size_t depth, int /*alpha*/, int beta) {
		if (FindGorenMove(turn).second) return beta;
		int max_score = -kScoreInf2;
		if (depth == 0) {
			// Find enemy's Shioi(Pre-search)
			if (turn == Stone::Black) {
				auto range = GetRange();
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						// Judge valid move
						bool cho_ren_flg = false;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) {
								cho_ren_flg = true;
								break;
							}
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (cho_ren_flg || sum_4_strong + sum_4_normal >= 2 || sum_3 >= 2) continue;
						if (sum_4_strong == 1) return beta;
						int score;
						/* // Find enemy's Shioi
						board_[p] = turn;
						auto result = FindShioiMove(EnemyTurn(turn), kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							score = -kScoreInf;
						}
						else {*/
							// Normal Score
							score = CalcScore(p, turn);
						//}
						if (max_score < score) {
							max_score = score;
							if (max_score >= beta) {
								return beta;
							}
						}
					}
				}
			}
			else {
				auto range = GetRange();
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) return beta;
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (sum_4_strong >= 1 || sum_4_normal >= 2) return beta;
						int score;
						/*// Find enemy's Shioi
						board_[p] = turn;
						auto result = FindShioiMove(EnemyTurn(turn), kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							score = -kScoreInf;
						}
						else {*/
							// Normal Score
							score = CalcScore(p, turn);
						//}
						if (max_score < score) {
							max_score = score;
							if (max_score >= beta) {
								return beta;
							}
						}
					}
				}
			}
			return max_score;
		}
		else {
			vector<Score> next_move2;
			auto range = GetRange();
			if (turn == Stone::Black) {
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						// Judge valid move
						bool cho_ren_flg = false;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) {
								cho_ren_flg = true;
								break;
							}
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (cho_ren_flg || sum_4_strong + sum_4_normal >= 2 || sum_3 >= 2) continue;
						if (sum_4_strong == 1) return kScoreInf;
						/*// Find enemy's Shioi
						board_[p] = Stone::Black;
						auto result = FindShioiMove(Stone::White, kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							next_move2.emplace_back(p, -kScoreInf);
						}
						else {*/
							// Normal Score
							next_move2.emplace_back(p, kTenGenDist[p]);
						//}
					}
				}
			}
			else {
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) return kScoreInf;
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (sum_4_strong >= 1 || sum_4_normal >= 2) return kScoreInf;
						/*// Find enemy's Shioi
						board_[p] = Stone::White;
						auto result = FindShioiMove(Stone::Black, kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							next_move2.emplace_back(p, -kScoreInf);
						}
						else {*/
							// Normal Score
							next_move2.emplace_back(p, kTenGenDist[p]);
						//}
					}
				}
			}
			std::sort(next_move2.begin(), next_move2.end(), [](const Score &a, const Score &b) {return a.second > b.second; });
			for (auto &it : next_move2) {
				board_[it.first] = turn;
				auto score = -NegaMax(EnemyTurn(turn), depth - 1, -kScoreInf2, kScoreInf2) + CalcScore(it.first, turn);
				board_[it.first] = Stone::None;
				if (max_score < score) {
					max_score = score;
					if (max_score >= beta) {
						return beta;
					}
				}
			}
			return max_score;
		}
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x168, %rsp            # imm = 0x168
movl %r8d, %ebx
movq %rdx, %r14
movq %rdi, 0x8(%rsp)
movl %esi, 0x38(%rsp)
callq 0x49f8
testb $0x1, %dl
jne 0xab7b
testq %r14, %r14
movl %ebx, 0x3c(%rsp)
je 0xa448
movq %r14, 0x60(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
callq 0x7f28
movq 0x8(%rbx), %rcx
movq 0x18(%rbx), %rax
cmpq %rax, %rcx
sete %dl
cmpb $0x1, 0x38(%rsp)
movq %rax, 0x68(%rsp)
jne 0xa496
cmpq %rax, %rcx
je 0xa64d
movq 0x8(%rsp), %rax
addq $0x3928, %rax           # imm = 0x3928
movq %rax, 0x58(%rsp)
leaq 0xc8(%rsp), %r13
movb %dl, 0x4(%rsp)
movq 0x90(%rsp), %rbx
movq 0xa0(%rsp), %r14
cmpq %r14, %rbx
movq %rcx, 0x48(%rsp)
jne 0xa2cc
movl $0x12, %r12d
cmpl $0x12, %r12d
je 0xa2b5
testl %r12d, %r12d
jne 0xa63d
movq 0x48(%rsp), %rcx
incq %rcx
cmpq 0x68(%rsp), %rcx
sete %dl
jne 0xa282
jmp 0xa64d
leaq (%rcx,%rcx,4), %rax
leaq (%rax,%rax,2), %r15
movq 0x8(%rsp), %rsi
movq %r14, 0x40(%rsp)
movq %r15, 0x20(%rsp)
leaq (%rbx,%r15), %rax
movq %rax, 0x50(%rsp)
movl $0x13, %r12d
cmpb $0x0, (%rsi,%rax)
jne 0xa3bd
movq %rbx, 0x28(%rsp)
xorl %r15d, %r15d
movq $0x0, 0x10(%rsp)
xorl %r12d, %r12d
xorl %r14d, %r14d
movq $0x0, 0x30(%rsp)
movq 0x50(%rsp), %rdx
movzbl %r15b, %ebx
movq %r13, %rdi
movl %ebx, %ecx
callq 0x6f68
movq %r13, %rdi
callq 0x70a3
movl %eax, %ebp
testb %al, %al
je 0xa346
movb $0x1, %al
movq %rax, 0x30(%rsp)
jmp 0xa385
movq 0x50(%rsp), %rcx
leaq 0xb0(%rsp), %rdi
movq 0x8(%rsp), %rsi
movq %r13, %rdx
movl %ebx, %r8d
callq 0x7248
addq 0xc0(%rsp), %r14
addq 0xb8(%rsp), %r12
movq 0x10(%rsp), %rax
addq 0xb0(%rsp), %rax
movq %rax, 0x10(%rsp)
cmpb $0x3, %r15b
leal 0x1(%r15), %eax
setae %cl
orb %bpl, %cl
movl %eax, %r15d
movq 0x8(%rsp), %rsi
je 0xa31c
testb $0x1, 0x30(%rsp)
je 0xa3dd
movq 0x28(%rsp), %rbx
movq 0x40(%rsp), %r14
movq 0x20(%rsp), %r15
movl $0x13, %r12d
cmpl $0x13, %r12d
je 0xa3cc
testl %r12d, %r12d
jne 0xa2a6
incq %rbx
cmpq %r14, %rbx
jne 0xa2e3
jmp 0xa2a0
addq %r14, %r12
cmpq $0x1, %r12
movq 0x20(%rsp), %r15
ja 0xa439
movq %r14, %rax
cmpq $0x1, 0x10(%rsp)
movq 0x28(%rsp), %rbx
movq 0x40(%rsp), %r14
movl $0x13, %r12d
ja 0xa3bd
movl $0x1, %r12d
cmpq $0x1, %rax
je 0xa3bd
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
leaq (%rcx,%rax,8), %rdx
xorl %r12d, %r12d
leaq 0x70(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0xa1b2
movq 0x8(%rsp), %rsi
jmp 0xa3bd
movq 0x28(%rsp), %rbx
movq 0x40(%rsp), %r14
jmp 0xa3b7
cmpb $0x1, 0x38(%rsp)
movq 0x8(%rsp), %rsi
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
jne 0xa618
callq 0x7f28
movq 0x8(%rbx), %rcx
movq 0x18(%rbx), %rdx
movq %rcx, 0x58(%rsp)
movq %rdx, 0x88(%rsp)
cmpq %rdx, %rcx
sete %al
jne 0xa767
movl $0xfffffc17, 0x4(%rsp)  # imm = 0xFFFFFC17
jmp 0xab93
cmpq %rax, %rcx
je 0xa64d
movq 0x8(%rsp), %rax
addq $0x3928, %rax           # imm = 0x3928
movq %rax, 0x40(%rsp)
movb %dl, 0x4(%rsp)
movq 0x90(%rsp), %r15
movq 0xa0(%rsp), %r12
cmpq %r12, %r15
movq %rcx, 0x48(%rsp)
je 0xa5f2
leaq (%rcx,%rcx,4), %rax
leaq (%rax,%rax,2), %rax
movq %rax, 0x10(%rsp)
movq 0x8(%rsp), %rsi
movq %r12, 0x28(%rsp)
movq 0x10(%rsp), %rax
addq %r15, %rax
movq %rax, 0x50(%rsp)
movl $0x1a, %ebx
cmpb $0x0, (%rsi,%rax)
jne 0xa5dd
movq %r15, 0x30(%rsp)
xorl %r15d, %r15d
xorl %r12d, %r12d
xorl %r13d, %r13d
xorl %r14d, %r14d
movq 0x50(%rsp), %rdx
movzbl %r12b, %ebp
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
movl %ebp, %ecx
callq 0x6f68
movq %rbx, %rdi
callq 0x70a3
movl %eax, %ebx
testb %al, %al
jne 0xa570
movq 0x50(%rsp), %rcx
leaq 0xb0(%rsp), %rdi
movq 0x8(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
movl %ebp, %r8d
callq 0x7248
addq 0xc0(%rsp), %r14
addq 0xb8(%rsp), %r13
movq 0x8(%rsp), %rsi
testb %bl, %bl
jne 0xa594
cmpb $0x3, %r12b
leal 0x1(%r12), %eax
setae %r15b
movl %eax, %r12d
cmpb $0x4, %al
jne 0xa515
movl $0x1b, %ebx
jmp 0xa599
movl $0x1, %ebx
testb $0x1, %r15b
movq 0x30(%rsp), %r15
movq 0x28(%rsp), %r12
je 0xa5dd
movl $0x1, %ebx
testq %r14, %r14
jne 0xa5dd
cmpq $0x1, %r13
ja 0xa5dd
movq 0x50(%rsp), %rax
movq 0x40(%rsp), %rcx
leaq (%rcx,%rax,8), %rdx
xorl %ebx, %ebx
leaq 0x70(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0xa1b2
movq 0x8(%rsp), %rsi
cmpl $0x1a, %ebx
je 0xa5e6
testl %ebx, %ebx
jne 0xa5f7
incq %r15
cmpq %r12, %r15
jne 0xa4e8
movl $0x19, %ebx
cmpl $0x19, %ebx
je 0xa600
testl %ebx, %ebx
jne 0xa63d
movq 0x48(%rsp), %rcx
incq %rcx
cmpq 0x68(%rsp), %rcx
sete %dl
jne 0xa4af
jmp 0xa64d
callq 0x7f28
movq 0x8(%rbx), %rax
movq 0x18(%rbx), %rcx
cmpq %rcx, %rax
jne 0xa96b
movl $0xfffffc17, 0x4(%rsp)  # imm = 0xFFFFFC17
movb $0x1, %al
jmp 0xab73
movl $0x3e8, %ebx            # imm = 0x3E8
testb $0x1, 0x4(%rsp)
je 0xa744
movq 0x70(%rsp), %rbx
movq 0x78(%rsp), %r15
cmpq %r15, %rbx
je 0xa689
movq %r15, %rax
subq %rbx, %rax
sarq $0x4, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0xb38b
movq %rbx, %rdi
movq %r15, %rsi
callq 0xb48f
movq 0x70(%rsp), %r14
movq 0x78(%rsp), %rax
movq %rax, 0x10(%rsp)
cmpq %rax, %r14
je 0xa73a
movl 0x38(%rsp), %ecx
cmpb $0x1, %cl
sete %al
incb %al
decq 0x60(%rsp)
movl $0xfffffc17, %ebx       # imm = 0xFFFFFC17
movl $0x3e8, %r12d           # imm = 0x3E8
movzbl %al, %eax
movl %eax, 0x30(%rsp)
movzbl %cl, %r13d
movq 0x8(%rsp), %r15
movl %ebx, %ebp
movq (%r14), %rax
movl 0x38(%rsp), %ecx
movb %cl, (%r15,%rax)
movq %r15, %rdi
movl 0x30(%rsp), %esi
movq 0x60(%rsp), %rdx
movl $0xfffffc17, %ecx       # imm = 0xFFFFFC17
movl $0x3e9, %r8d            # imm = 0x3E9
callq 0xa1da
movl %eax, %ebx
movq (%r14), %rsi
movq %r15, %rdi
movl %r13d, %edx
callq 0x9faa
subl %ebx, %eax
movq (%r14), %rcx
movb $0x0, (%r15,%rcx)
cmpl %eax, %ebp
setge %cl
movl 0x3c(%rsp), %esi
cmpl %esi, %eax
setl %dl
orb %cl, %dl
cmovel %esi, %r12d
je 0xa741
movl %ebp, %ebx
cmpl %eax, %ebp
cmovlel %eax, %ebx
addq $0x10, %r14
cmpq 0x10(%rsp), %r14
jne 0xa6cd
jmp 0xa744
movl $0xfffffc17, %ebx       # imm = 0xFFFFFC17
jmp 0xa744
movl %r12d, %ebx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0xab7b
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x21f0
jmp 0xab7b
movl $0xfffffc17, 0x4(%rsp)  # imm = 0xFFFFFC17
leaq 0xc8(%rsp), %r13
movq 0x8(%rsp), %rsi
movb %al, 0x1f(%rsp)
movq 0x90(%rsp), %r14
movq 0xa0(%rsp), %r15
movb $0x1, %al
cmpq %r15, %r14
je 0xa940
movq 0x58(%rsp), %rax
leaq (%rax,%rax,4), %rax
leaq (%rax,%rax,2), %r12
movq %r15, 0x68(%rsp)
movq %r12, 0x60(%rsp)
leaq (%r14,%r12), %rbp
movl $0x5, %edx
cmpb $0x0, (%rsi,%rbp)
jne 0xa920
movq %r14, 0x48(%rsp)
movl %ebx, 0x20(%rsp)
movq $0x0, 0x40(%rsp)
movq $0x0, 0x10(%rsp)
movq $0x0, 0x30(%rsp)
movq $0x0, 0x28(%rsp)
xorl %r14d, %r14d
movzbl %r14b, %r15d
movq %r13, %rdi
movq %rbp, %rdx
movq %rsi, %r12
movl %r15d, %ecx
callq 0x6f68
movq %r13, %rdi
callq 0x70a3
movl %eax, %ebx
testb %al, %al
je 0xa821
movb $0x1, %al
movq %rax, 0x40(%rsp)
jmp 0xa867
leaq 0x70(%rsp), %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %rbp, %rcx
movl %r15d, %r8d
callq 0x7248
movq 0x10(%rsp), %rax
addq 0x80(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x30(%rsp), %rax
addq 0x78(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x28(%rsp), %rax
addq 0x70(%rsp), %rax
movq %rax, 0x28(%rsp)
cmpb $0x3, %r14b
leal 0x1(%r14), %eax
setb %cl
xorb $0x1, %bl
movl %eax, %r14d
testb %bl, %cl
movq 0x8(%rsp), %rsi
jne 0xa7f5
testb $0x1, 0x40(%rsp)
je 0xa8a6
movl 0x20(%rsp), %ebx
movq 0x48(%rsp), %r14
movq 0x68(%rsp), %r15
movq 0x60(%rsp), %r12
movl $0x5, %edx
jmp 0xa920
movq 0x10(%rsp), %rax
movq 0x30(%rsp), %rcx
addq %rax, %rcx
cmpq $0x1, %rcx
movq 0x48(%rsp), %r14
movq 0x68(%rsp), %r15
movq 0x60(%rsp), %r12
movl $0x5, %edx
ja 0xa91c
cmpq $0x1, 0x28(%rsp)
movl 0x3c(%rsp), %ebx
ja 0xa91c
movl $0x1, %edx
cmpq $0x1, %rax
je 0xa920
movzbl 0x38(%rsp), %edx
movq %rsi, %rdi
movq %rbp, %rsi
callq 0x9faa
xorl %edx, %edx
cmpl %eax, 0x4(%rsp)
jge 0xa917
xorl %edx, %edx
cmpl %ebx, %eax
setge %dl
movl 0x20(%rsp), %ecx
cmovgel %ebx, %ecx
movl %ecx, %ebx
movl %eax, 0x4(%rsp)
movq 0x8(%rsp), %rsi
jmp 0xa920
movq 0x8(%rsp), %rsi
movl 0x20(%rsp), %ebx
cmpl $0x5, %edx
je 0xa929
testl %edx, %edx
jne 0xa93a
incq %r14
cmpq %r15, %r14
jne 0xa7b2
movl $0x4, %edx
testb $0x3, %dl
sete %al
testb %al, %al
je 0xab8f
movq 0x58(%rsp), %rcx
incq %rcx
movq %rcx, 0x58(%rsp)
cmpq 0x88(%rsp), %rcx
sete %al
jne 0xa77c
jmp 0xab93
movl $0xfffffc17, 0x4(%rsp)  # imm = 0xFFFFFC17
leaq 0xc8(%rsp), %r12
movq %rcx, 0x88(%rsp)
movq 0x90(%rsp), %r14
movq 0xa0(%rsp), %r15
movl $0xb, %ebp
cmpq %r15, %r14
je 0xab4d
movq %rax, 0x58(%rsp)
leaq (%rax,%rax,4), %rax
leaq (%rax,%rax,2), %r13
movq %r15, 0x68(%rsp)
movq %r13, 0x60(%rsp)
leaq (%r14,%r13), %r8
movl $0xc, %ecx
movq 0x8(%rsp), %rax
cmpb $0x0, (%rax,%r8)
jne 0xab1b
movq %r14, 0x48(%rsp)
movl %ebx, 0x20(%rsp)
movq $0x0, 0x30(%rsp)
movq $0x0, 0x10(%rsp)
movq $0x0, 0x28(%rsp)
xorl %r14d, %r14d
movq %r8, 0x40(%rsp)
movzbl %r14b, %r15d
movq %r12, %rdi
movq %r12, %rbp
movq 0x8(%rsp), %r12
movq %r12, %rsi
movq %r8, %rdx
movl %r15d, %ecx
movq %r8, %r13
callq 0x6f68
movq %rbp, %rdi
callq 0x70a3
movl %eax, %ebx
testb %al, %al
je 0xaa35
movl 0x3c(%rsp), %eax
movl %eax, 0x20(%rsp)
jmp 0xaa6c
leaq 0x70(%rsp), %rdi
movq %r12, %rsi
movq %rbp, %rdx
movq %r13, %rcx
movl %r15d, %r8d
callq 0x7248
movq 0x10(%rsp), %rax
addq 0x80(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x28(%rsp), %rax
addq 0x78(%rsp), %rax
movq %rax, 0x28(%rsp)
movq %rbp, %r12
testb %bl, %bl
movq 0x40(%rsp), %r8
jne 0xaa9a
cmpb $0x3, %r14b
leal 0x1(%r14), %eax
setae %cl
movq %rcx, 0x30(%rsp)
movl %eax, %r14d
cmpb $0x4, %al
jne 0xa9fd
movl $0xd, %ecx
jmp 0xaa9f
movl $0x1, %ecx
movl 0x20(%rsp), %ebx
testb $0x1, 0x30(%rsp)
je 0xab07
movl $0x1, %ecx
cmpq $0x0, 0x10(%rsp)
movl $0xb, %ebp
movq 0x48(%rsp), %r14
movq 0x68(%rsp), %r15
movq 0x60(%rsp), %r13
jne 0xab32
cmpq $0x1, 0x28(%rsp)
movl 0x3c(%rsp), %ebx
ja 0xab1b
movzbl 0x38(%rsp), %edx
movq 0x8(%rsp), %rdi
movq %r8, %rsi
callq 0x9faa
xorl %ecx, %ecx
cmpl %eax, 0x4(%rsp)
jge 0xab38
xorl %ecx, %ecx
cmpl %ebx, %eax
setge %cl
movl 0x20(%rsp), %edx
cmovgel %ebx, %edx
movl %edx, %ebx
movl %eax, 0x4(%rsp)
jmp 0xab1b
movl $0xb, %ebp
movq 0x48(%rsp), %r14
movq 0x68(%rsp), %r15
movq 0x60(%rsp), %r13
cmpl $0xc, %ecx
je 0xab24
testl %ecx, %ecx
jne 0xab3e
incq %r14
cmpq %r15, %r14
jne 0xa9b8
jmp 0xab40
movl 0x3c(%rsp), %ebx
jmp 0xab1b
movl 0x20(%rsp), %ebx
jmp 0xab1b
movl %ecx, %ebp
movq 0x58(%rsp), %rax
movq 0x88(%rsp), %rcx
cmpl $0xb, %ebp
movl $0x0, %edx
cmovel %edx, %ebp
testl %ebp, %ebp
jne 0xab6d
incq %rax
cmpq %rcx, %rax
jne 0xa983
movl $0x9, %ebp
cmpl $0x9, %ebp
sete %al
testb %al, %al
je 0xab7b
movl 0x4(%rsp), %ebx
movl %ebx, %eax
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0xab77
jmp 0xab7b
jmp 0xaba7
jmp 0xaba7
jmp 0xaba7
jmp 0xaba7
jmp 0xaba7
jmp 0xaba7
jmp 0xaba7
movq %rax, %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0xabc4
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x21f0
movq %rbx, %rdi
callq 0x2330