// File: codeandkey[P]neocortex/src/position.cpp
// Function: neocortex::Position::evaluate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*)
int Position::evaluate(std::string* dbg) {
	int phase;
	int development;
	int center_control;
	int material_mg;
	int material_eg;
	int king_safety;
	int king_first_rank;
	int pawns_protecting_king;
	int passed_pawns;
	int passed_pawn_adv;
	int edge_knights;
	int open_file_r;
	int open_file_q;
	int p_iso_pawns;
	int p_bck_pawns;
	int p_dbl_pawns;
	int pawn_chain;

	int white_king_sq = bb::getlsb(board.get_color_occ(piece::WHITE) & board.get_piece_occ(piece::KING));
	int black_king_sq = bb::getlsb(board.get_color_occ(piece::BLACK) & board.get_piece_occ(piece::KING));

	bitboard wkattacks = attacks::king(white_king_sq);
	bitboard bkattacks = attacks::king(black_king_sq);

	++eval_counter;

	/* Start evaluation */
	int score = 0;

	/* Compute game phase */
	phase = eval::PHASE_TOTAL;

	for (int t = 0; t < 5; ++t) {
		phase -= bb::popcount(board.get_piece_occ(t)) * eval::PHASE_VALS[t];
	}

	phase = (phase * 256) / eval::PHASE_TOTAL;

	/* Compute material values */
	material_mg = (board.material_mg() * (256 - phase)) / 256;
	material_eg = (board.material_eg() * phase) / 256;

	score += material_mg;
	score += material_eg;

	/* Compute center square control */
	static const int center_squares[4] = { 27, 28, 35, 36 };
	center_control = 0;

	for (int i = 0; i < 4; ++i) {
		center_control += board.guard_value(center_squares[i]);
	}

	center_control *= eval::CENTER_CONTROL;
	score += center_control;

	/* Compute king safety */
	king_safety = 0;

	bitboard white_ksq = wkattacks;
	bitboard black_ksq = bkattacks;

	while (white_ksq) {
		int ksq = bb::poplsb(white_ksq);
		int gv = board.guard_value(ksq);

		/* don't incentivize overprotecting the king */
		if (gv > 0) {
			gv = 0;
		}

		king_safety += gv;
	}

	while (black_ksq) {
		int ksq = bb::poplsb(black_ksq);
		int gv = board.guard_value(ksq);

		/* don't incentivize overprotecting the king */
		if (gv < 0) {
			gv = 0;
		}

		king_safety += gv;
	}

	king_safety *= eval::KING_SAFETY;
	score += king_safety;

	/* Evaluate development */
	development = 0;

	bitboard minor_pieces = board.get_piece_occ(piece::KNIGHT) | board.get_piece_occ(piece::BISHOP);

	static const bitboard white_dev_ranks = RANK_3 | RANK_4 | RANK_5;
	static const bitboard black_dev_ranks = RANK_4 | RANK_5 | RANK_6;

	development += bb::popcount(minor_pieces & board.get_color_occ(piece::WHITE) & white_dev_ranks);
	development -= bb::popcount(minor_pieces & board.get_color_occ(piece::BLACK) & black_dev_ranks);

	development *= eval::DEVELOPMENT;
	score += development;

	/* Penalty for edge knights */
	edge_knights = 0;

	bitboard edge_knights_mask = board.get_piece_occ(piece::KNIGHT) & (FILE_A | FILE_H);

	edge_knights += bb::popcount(edge_knights_mask & board.get_color_occ(piece::WHITE));
	edge_knights -= bb::popcount(edge_knights_mask & board.get_color_occ(piece::BLACK));

	edge_knights *= eval::EDGE_KNIGHTS;
	score += edge_knights;

	/* Find passed pawns */
	bitboard passers[2];

	passers[piece::WHITE] = board.passedpawns(piece::WHITE);
	passers[piece::BLACK] = board.passedpawns(piece::BLACK);

	/* Apply passed pawn bonus */
	passed_pawns = 0;

	passed_pawns += bb::popcount(passers[piece::WHITE]);
	passed_pawns -= bb::popcount(passers[piece::BLACK]);

	passed_pawns *= eval::PASSED_PAWNS;
	score += passed_pawns;

	/* Apply bonus for king on first rank in MG */
	king_first_rank = 0;
	pawns_protecting_king = 0;

	bitboard wkmask = bb::mask(white_king_sq);
	bitboard bkmask = bb::mask(black_king_sq);

	if (wkmask & RANK_1) {
		king_first_rank += 1;
		pawns_protecting_king += bb::popcount(wkattacks & board.get_piece_occ(piece::PAWN) & RANK_2);
	}

	if (bkmask & RANK_8) {
		king_first_rank -= 1;
		pawns_protecting_king -= bb::popcount(bkattacks & board.get_piece_occ(piece::PAWN) & RANK_7);
	}

	pawns_protecting_king *= eval::PAWNS_PROT_KING_MG;
	pawns_protecting_king *= (256 - phase);
	pawns_protecting_king /= 256;

	king_first_rank *= eval::FIRST_RANK_KING_MG;
	king_first_rank *= (256 - phase);
	king_first_rank /= 256;

	score += king_first_rank;
	score += pawns_protecting_king;

	/* Apply advance bonus for passed pawns */
	bitboard tmp_passers;
	passed_pawn_adv = 0;

	tmp_passers = passers[piece::WHITE];
	while (tmp_passers) {
		int p = bb::poplsb(tmp_passers);
		passed_pawn_adv += square::rank(p);
	}

	tmp_passers = passers[piece::BLACK];
	while (tmp_passers) {
		int p = bb::poplsb(tmp_passers);
		passed_pawn_adv -= (7 - square::rank(p));
	}

	passed_pawn_adv *= eval::ADV_PASSEDPAWN;
	score += passed_pawn_adv;

	/* Apply file bonuses and penalties */
	open_file_r = 0;
	open_file_q = 0;
	p_dbl_pawns = 0;

	for (int f = 0; f < 8; ++f) {
		bitboard file = bb::file(f);
		bitboard file_pawns = board.get_piece_occ(piece::PAWN) & file;

		if (!file_pawns) {
			// Open file

			bitboard frooks = file & board.get_piece_occ(piece::ROOK);
			bitboard fqueens = file & board.get_piece_occ(piece::QUEEN);

			open_file_r += bb::popcount(frooks & board.get_color_occ(piece::WHITE));
			open_file_q += bb::popcount(fqueens & board.get_color_occ(piece::WHITE));
			open_file_r -= bb::popcount(frooks & board.get_color_occ(piece::BLACK));
			open_file_q -= bb::popcount(fqueens & board.get_color_occ(piece::BLACK));
		}

		int n_white_pawns = bb::popcount(file_pawns & board.get_color_occ(piece::WHITE));
		int n_black_pawns = bb::popcount(file_pawns & board.get_color_occ(piece::BLACK));

		if (n_white_pawns > 1) {
			p_dbl_pawns += (n_white_pawns - 1);
		}

		if (n_black_pawns > 1) {
			p_dbl_pawns -= (n_black_pawns - 1);
		}
	}

	open_file_r *= eval::OPEN_FILE_ROOK;
	open_file_q *= eval::OPEN_FILE_QUEEN;

	score += open_file_r + open_file_q;

	p_dbl_pawns *= eval::DOUBLED_PAWNS;
	score += p_dbl_pawns;

	/* Apply bonus for chained pawns */
	bitboard w_pawns = board.get_piece_occ(piece::PAWN) & board.get_color_occ(piece::WHITE);
	bitboard b_pawns = board.get_piece_occ(piece::PAWN) & board.get_color_occ(piece::BLACK);

	pawn_chain = 0;

	pawn_chain += bb::popcount((bb::shift(w_pawns & ~FILE_A, NORTHWEST) | bb::shift(w_pawns & ~FILE_H, NORTHEAST)) & w_pawns);
	pawn_chain -= bb::popcount((bb::shift(b_pawns & ~FILE_A, SOUTHWEST) | bb::shift(b_pawns & ~FILE_H, SOUTHEAST)) & b_pawns);

	pawn_chain *= eval::PAWN_CHAIN;
	score += pawn_chain;

	/* Apply penalty for isolated pawns */
	p_iso_pawns = 0;

	p_iso_pawns += bb::popcount(board.isolated_pawns(piece::WHITE));
	p_iso_pawns -= bb::popcount(board.isolated_pawns(piece::BLACK));

	p_iso_pawns *= eval::ISOLATED_PAWNS;
	score += p_iso_pawns;

	/* Apply penalty for backward pawns */
	p_bck_pawns = 0;

	p_bck_pawns += bb::popcount(board.backward_pawns(piece::WHITE));
	p_bck_pawns -= bb::popcount(board.backward_pawns(piece::BLACK));

	p_bck_pawns *= eval::BACKWARD_PAWNS;
	score += p_bck_pawns;

	/* Write debug if needed */
	if (dbg) {
		std::string output;

		output +=              "+-----------------------------+\n";
		output +=              "|   evaluation debug (WPOV)   |\n";
		output +=              "|-------------+------+--------|\n";
		output += util::format("| material_mg | %13d |\n", material_mg);
		output += util::format("| material_eg | %13d |\n", material_eg);
		output += util::format("| ctr_control | %13d |\n", center_control);
		output += util::format("| development | %13d |\n", development);
		output += util::format("| king_safety | %13d |\n", king_safety);
		output += util::format("| adv_passed  | %13d |\n", passed_pawn_adv);
		output += util::format("| edge_knghts | %13d |\n", edge_knights);
		output += util::format("| pawn_prot_k | %13d |\n", pawns_protecting_king);
		output += util::format("| first_r_kng | %13d |\n", king_first_rank);
		output += util::format("| passed_pns  | %13d |\n", passed_pawns);
		output += util::format("| open_file_r | %13d |\n", open_file_r);
		output += util::format("| open_file_q | %13d |\n", open_file_q);
		output += util::format("| p_iso_pawns | %13d |\n", p_iso_pawns);
		output += util::format("| p_bck_pawns | %13d |\n", p_bck_pawns);
		output += util::format("| p_dbl_pawns | %13d |\n", p_dbl_pawns);
		output += util::format("| pawn_chain  | %13d |\n", pawn_chain);
		output += util::format("| phase       | %13d |\n", phase);
		output += util::format("| (total)     | %13d |\n", score);
		output +=              "+-------------+------+--------+\n";

		*dbg = output;
	}

	/* Flip eval if BTM */
	if (color_to_move == piece::BLACK) {
		score *= -1;
	}

	return score + eval::TEMPO_BONUS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7b0, %rsp            # imm = 0x7B0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x668(%rbp)
xorl %esi, %esi
callq 0x14e30
movq -0x668(%rbp), %rdi
movq %rax, -0x678(%rbp)
movl $0x5, %esi
callq 0x14e50
movq -0x678(%rbp), %rdi
andq %rax, %rdi
callq 0x9030
movq -0x668(%rbp), %rdi
movl %eax, -0x58(%rbp)
movl $0x1, %esi
callq 0x14e30
movq -0x668(%rbp), %rdi
movq %rax, -0x670(%rbp)
movl $0x5, %esi
callq 0x14e50
movq -0x670(%rbp), %rdi
andq %rax, %rdi
callq 0x9030
movl %eax, -0x5c(%rbp)
movl -0x58(%rbp), %edi
callq 0x8f50
movq %rax, -0x68(%rbp)
movl -0x5c(%rbp), %edi
callq 0x8f50
movq %rax, %rcx
movq -0x668(%rbp), %rax
movq %rcx, -0x70(%rbp)
movl 0x174(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x174(%rax)
movl $0x0, -0x74(%rbp)
leaq 0x144b7(%rip), %rax     # 0x26980
movl (%rax), %eax
movl %eax, -0x14(%rbp)
movl $0x0, -0x78(%rbp)
cmpl $0x5, -0x78(%rbp)
jge 0x12516
movq -0x668(%rbp), %rdi
movl -0x78(%rbp), %esi
callq 0x14e50
movq %rax, %rdi
callq 0x14ed0
movl %eax, %ecx
movslq -0x78(%rbp), %rdx
leaq 0x14431(%rip), %rax     # 0x26930
imull (%rax,%rdx,4), %ecx
movl -0x14(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x14(%rbp)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x124d5
movq -0x668(%rbp), %rdi
movl -0x14(%rbp), %eax
shll $0x8, %eax
leaq 0x14456(%rip), %rcx     # 0x26980
cltd
idivl (%rcx)
movl %eax, -0x14(%rbp)
callq 0x14f70
movq -0x668(%rbp), %rdi
movl $0x100, %ecx            # imm = 0x100
subl -0x14(%rbp), %ecx
imull %ecx, %eax
movl $0x100, %ecx            # imm = 0x100
cltd
idivl %ecx
movl %eax, -0x20(%rbp)
callq 0x14f90
imull -0x14(%rbp), %eax
movl $0x100, %ecx            # imm = 0x100
cltd
idivl %ecx
movl %eax, -0x24(%rbp)
movl -0x20(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x24(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x1c(%rbp)
movl $0x0, -0x7c(%rbp)
cmpl $0x4, -0x7c(%rbp)
jge 0x125b7
movq -0x668(%rbp), %rdi
movslq -0x7c(%rbp), %rcx
leaq 0x147d2(%rip), %rax     # 0x26d70
movl (%rax,%rcx,4), %esi
callq 0x84d0
addl -0x1c(%rbp), %eax
movl %eax, -0x1c(%rbp)
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
jmp 0x12586
movl -0x1c(%rbp), %eax
shll $0x0, %eax
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x28(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x88(%rbp)
je 0x1263b
leaq -0x88(%rbp), %rdi
callq 0x8f70
movq -0x668(%rbp), %rdi
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %esi
callq 0x84d0
movl %eax, -0x98(%rbp)
cmpl $0x0, -0x98(%rbp)
jle 0x1262d
movl $0x0, -0x98(%rbp)
movl -0x98(%rbp), %eax
addl -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
jmp 0x125e6
jmp 0x1263d
cmpq $0x0, -0x90(%rbp)
je 0x12692
leaq -0x90(%rbp), %rdi
callq 0x8f70
movq -0x668(%rbp), %rdi
movl %eax, -0x9c(%rbp)
movl -0x9c(%rbp), %esi
callq 0x84d0
movl %eax, -0xa0(%rbp)
cmpl $0x0, -0xa0(%rbp)
jge 0x12684
movl $0x0, -0xa0(%rbp)
movl -0xa0(%rbp), %eax
addl -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
jmp 0x1263d
movq -0x668(%rbp), %rdi
imull $0x7, -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x18(%rbp)
movl $0x2, %esi
callq 0x14e50
movq -0x668(%rbp), %rdi
movq %rax, -0x6a0(%rbp)
movl $0x1, %esi
callq 0x14e50
movq -0x668(%rbp), %rdi
movq %rax, %rcx
movq -0x6a0(%rbp), %rax
orq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x698(%rbp)
xorl %esi, %esi
callq 0x14e30
movq -0x698(%rbp), %rdi
andq %rax, %rdi
movabsq $0xffffff0000, %rax     # imm = 0xFFFFFF0000
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
addl -0x18(%rbp), %eax
movl %eax, -0x18(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x690(%rbp)
movl $0x1, %esi
callq 0x14e30
movq -0x690(%rbp), %rdi
andq %rax, %rdi
movabsq $0xffffff000000, %rax   # imm = 0xFFFFFF000000
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
movl %eax, %ecx
movl -0x18(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x18(%rbp)
imull $0xf, -0x18(%rbp), %eax
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x3c(%rbp)
movl $0x2, %esi
callq 0x14e50
movq -0x668(%rbp), %rdi
movabsq $-0x7e7e7e7e7e7e7e7f, %rcx # imm = 0x8181818181818181
andq %rcx, %rax
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0x688(%rbp)
xorl %esi, %esi
callq 0x14e30
movq -0x688(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
addl -0x3c(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0x680(%rbp)
movl $0x1, %esi
callq 0x14e30
movq -0x680(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
movl %eax, %ecx
movl -0x3c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x3c(%rbp)
imull $-0x3, -0x3c(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
xorl %esi, %esi
callq 0x8870
movq -0x668(%rbp), %rdi
movq %rax, -0xc0(%rbp)
movl $0x1, %esi
callq 0x8870
movq %rax, -0xb8(%rbp)
movl $0x0, -0x34(%rbp)
movq -0xc0(%rbp), %rdi
callq 0x14ed0
addl -0x34(%rbp), %eax
movl %eax, -0x34(%rbp)
movq -0xb8(%rbp), %rdi
callq 0x14ed0
movl %eax, %ecx
movl -0x34(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x34(%rbp)
imull $0xb, -0x34(%rbp), %eax
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x2c(%rbp)
movl $0x0, -0x30(%rbp)
movl -0x58(%rbp), %edi
callq 0x6bd0
movq %rax, -0xc8(%rbp)
movl -0x5c(%rbp), %edi
callq 0x6bd0
movq %rax, -0xd0(%rbp)
movq -0xc8(%rbp), %rax
andq $0xff, %rax
cmpq $0x0, %rax
je 0x12907
movq -0x668(%rbp), %rdi
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x6a8(%rbp)
xorl %esi, %esi
callq 0x14e50
movq -0x6a8(%rbp), %rdi
andq %rax, %rdi
andq $0xff00, %rdi           # imm = 0xFF00
callq 0x14ed0
addl -0x30(%rbp), %eax
movl %eax, -0x30(%rbp)
movabsq $-0x100000000000000, %rax # imm = 0xFF00000000000000
andq -0xd0(%rbp), %rax
cmpq $0x0, %rax
je 0x12966
movq -0x668(%rbp), %rdi
movl -0x2c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x2c(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x6b0(%rbp)
xorl %esi, %esi
callq 0x14e50
movq -0x6b0(%rbp), %rdi
andq %rax, %rdi
movabsq $0xff000000000000, %rax # imm = 0xFF000000000000
andq %rax, %rdi
callq 0x14ed0
movl %eax, %ecx
movl -0x30(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x30(%rbp)
movl -0x30(%rbp), %eax
shll %eax
movl %eax, -0x30(%rbp)
movl $0x100, %eax            # imm = 0x100
subl -0x14(%rbp), %eax
imull -0x30(%rbp), %eax
movl %eax, -0x30(%rbp)
movl -0x30(%rbp), %eax
movl $0x100, %ecx            # imm = 0x100
cltd
idivl %ecx
movl %eax, -0x30(%rbp)
imull $0x7, -0x2c(%rbp), %eax
movl %eax, -0x2c(%rbp)
movl $0x100, %eax            # imm = 0x100
subl -0x14(%rbp), %eax
imull -0x2c(%rbp), %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movl $0x100, %ecx            # imm = 0x100
cltd
idivl %ecx
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x30(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x38(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0xd8(%rbp)
cmpq $0x0, -0xd8(%rbp)
je 0x12a05
leaq -0xd8(%rbp), %rdi
callq 0x8f70
movl %eax, -0xdc(%rbp)
movl -0xdc(%rbp), %edi
callq 0x6b30
addl -0x38(%rbp), %eax
movl %eax, -0x38(%rbp)
jmp 0x129d6
movq -0xb8(%rbp), %rax
movq %rax, -0xd8(%rbp)
cmpq $0x0, -0xd8(%rbp)
je 0x12a4b
leaq -0xd8(%rbp), %rdi
callq 0x8f70
movl %eax, -0xe0(%rbp)
movl -0xe0(%rbp), %edi
callq 0x6b30
movl $0x7, %ecx
subl %eax, %ecx
movl -0x38(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x38(%rbp)
jmp 0x12a13
movl -0x38(%rbp), %eax
shll $0x3, %eax
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movl $0x0, -0x50(%rbp)
movl $0x0, -0xe4(%rbp)
cmpl $0x8, -0xe4(%rbp)
jge 0x12caa
movl -0xe4(%rbp), %edi
callq 0x73e0
movq -0x668(%rbp), %rdi
movq %rax, -0xf0(%rbp)
xorl %esi, %esi
callq 0x14e50
andq -0xf0(%rbp), %rax
movq %rax, -0xf8(%rbp)
cmpq $0x0, -0xf8(%rbp)
jne 0x12bfd
movq -0x668(%rbp), %rdi
movq -0xf0(%rbp), %rax
movq %rax, -0x6e0(%rbp)
movl $0x3, %esi
callq 0x14e50
movq -0x668(%rbp), %rdi
movq %rax, %rcx
movq -0x6e0(%rbp), %rax
andq %rcx, %rax
movq %rax, -0x100(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x6d8(%rbp)
movl $0x4, %esi
callq 0x14e50
movq -0x668(%rbp), %rdi
movq %rax, %rcx
movq -0x6d8(%rbp), %rax
andq %rcx, %rax
movq %rax, -0x108(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0x6d0(%rbp)
xorl %esi, %esi
callq 0x14e30
movq -0x6d0(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
addl -0x40(%rbp), %eax
movl %eax, -0x40(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x6c8(%rbp)
xorl %esi, %esi
callq 0x14e30
movq -0x6c8(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
addl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0x6c0(%rbp)
movl $0x1, %esi
callq 0x14e30
movq -0x6c0(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
movl %eax, %ecx
movl -0x40(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x40(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x6b8(%rbp)
movl $0x1, %esi
callq 0x14e30
movq -0x6b8(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movl %eax, %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x668(%rbp), %rdi
movq -0xf8(%rbp), %rax
movq %rax, -0x6f0(%rbp)
xorl %esi, %esi
callq 0x14e30
movq -0x6f0(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
movl %eax, -0x10c(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x6e8(%rbp)
movl $0x1, %esi
callq 0x14e30
movq -0x6e8(%rbp), %rdi
andq %rax, %rdi
callq 0x14ed0
movl %eax, -0x110(%rbp)
cmpl $0x1, -0x10c(%rbp)
jle 0x12c7a
movl -0x10c(%rbp), %eax
subl $0x1, %eax
addl -0x50(%rbp), %eax
movl %eax, -0x50(%rbp)
cmpl $0x1, -0x110(%rbp)
jle 0x12c94
movl -0x110(%rbp), %ecx
subl $0x1, %ecx
movl -0x50(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x50(%rbp)
jmp 0x12c96
movl -0xe4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xe4(%rbp)
jmp 0x12a7c
movq -0x668(%rbp), %rdi
movl -0x40(%rbp), %eax
shll $0x3, %eax
movl %eax, -0x40(%rbp)
movl -0x44(%rbp), %eax
shll $0x2, %eax
movl %eax, -0x44(%rbp)
movl -0x40(%rbp), %eax
addl -0x44(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
imull $-0x6, -0x50(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
xorl %esi, %esi
callq 0x14e50
movq -0x668(%rbp), %rdi
movq %rax, -0x710(%rbp)
xorl %esi, %esi
callq 0x14e30
movq -0x668(%rbp), %rdi
movq %rax, %rcx
movq -0x710(%rbp), %rax
andq %rcx, %rax
movq %rax, -0x118(%rbp)
xorl %esi, %esi
callq 0x14e50
movq -0x668(%rbp), %rdi
movq %rax, -0x708(%rbp)
movl $0x1, %esi
callq 0x14e30
movq %rax, %rcx
movq -0x708(%rbp), %rax
andq %rcx, %rax
movq %rax, -0x120(%rbp)
movl $0x0, -0x54(%rbp)
movabsq $-0x101010101010102, %rdi # imm = 0xFEFEFEFEFEFEFEFE
andq -0x118(%rbp), %rdi
movl $0x7, %esi
callq 0x6ca0
movq %rax, -0x700(%rbp)
movabsq $0x7f7f7f7f7f7f7f7f, %rdi # imm = 0x7F7F7F7F7F7F7F7F
andq -0x118(%rbp), %rdi
movl $0x9, %esi
callq 0x6ca0
movq -0x700(%rbp), %rdi
orq %rax, %rdi
andq -0x118(%rbp), %rdi
callq 0x14ed0
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movabsq $-0x101010101010102, %rdi # imm = 0xFEFEFEFEFEFEFEFE
andq -0x120(%rbp), %rdi
movl $0xfffffff7, %esi       # imm = 0xFFFFFFF7
callq 0x6ca0
movq %rax, -0x6f8(%rbp)
movabsq $0x7f7f7f7f7f7f7f7f, %rdi # imm = 0x7F7F7F7F7F7F7F7F
andq -0x120(%rbp), %rdi
movl $0xfffffff9, %esi       # imm = 0xFFFFFFF9
callq 0x6ca0
movq -0x6f8(%rbp), %rdi
orq %rax, %rdi
andq -0x120(%rbp), %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
movl %eax, %ecx
movl -0x54(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
shll %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x48(%rbp)
xorl %esi, %esi
callq 0x86f0
movq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
addl -0x48(%rbp), %eax
movl %eax, -0x48(%rbp)
movl $0x1, %esi
callq 0x86f0
movq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
movl %eax, %ecx
movl -0x48(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x48(%rbp)
imull $-0x8, -0x48(%rbp), %eax
movl %eax, -0x48(%rbp)
movl -0x48(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl $0x0, -0x4c(%rbp)
xorl %esi, %esi
callq 0x8760
movq %rax, %rdi
callq 0x14ed0
movq -0x668(%rbp), %rdi
addl -0x4c(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl $0x1, %esi
callq 0x8760
movq %rax, %rdi
callq 0x14ed0
movl %eax, %ecx
movl -0x4c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x4c(%rbp)
imull $-0x8, -0x4c(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
addl -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x13f6b
leaq -0x140(%rbp), %rdi
movq %rdi, -0x718(%rbp)
callq 0x5540
movq -0x718(%rbp), %rdi
leaq 0x14c26(%rip), %rsi     # 0x27b15
callq 0x53f0
jmp 0x12ef6
leaq 0x14c39(%rip), %rsi     # 0x27b36
leaq -0x140(%rbp), %rdi
callq 0x53f0
jmp 0x12f0b
leaq 0x14c45(%rip), %rsi     # 0x27b57
leaq -0x140(%rbp), %rdi
callq 0x53f0
jmp 0x12f20
leaq -0x191(%rbp), %rdi
movq %rdi, -0x720(%rbp)
callq 0x56d0
movq -0x720(%rbp), %rdx
leaq 0x14c37(%rip), %rsi     # 0x27b78
leaq -0x190(%rbp), %rdi
callq 0x89b0
jmp 0x12f4f
movl -0x20(%rbp), %edx
leaq -0x170(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0xa2f0
jmp 0x12f67
leaq -0x140(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x54f0
jmp 0x12f7c
leaq -0x170(%rbp), %rdi
callq 0x5230
leaq -0x190(%rbp), %rdi
callq 0x5230
leaq -0x191(%rbp), %rdi
callq 0x5480
leaq -0x1d9(%rbp), %rdi
movq %rdi, -0x728(%rbp)
callq 0x56d0
movq -0x728(%rbp), %rdx
leaq 0x14bcf(%rip), %rsi     # 0x27b90
leaq -0x1d8(%rbp), %rdi
callq 0x89b0
jmp 0x12fcf
movl -0x24(%rbp), %edx
leaq -0x1b8(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0xa2f0
jmp 0x12fe7
leaq -0x140(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x54f0
jmp 0x12ffc
leaq -0x1b8(%rbp), %rdi
callq 0x5230
leaq -0x1d8(%rbp), %rdi
callq 0x5230
leaq -0x1d9(%rbp), %rdi
callq 0x5480
leaq -0x221(%rbp), %rdi
movq %rdi, -0x730(%rbp)
callq 0x56d0
movq -0x730(%rbp), %rdx
leaq 0x14b67(%rip), %rsi     # 0x27ba8
leaq -0x220(%rbp), %rdi
callq 0x89b0
jmp 0x1304f
movl -0x1c(%rbp), %edx
leaq -0x200(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0xa2f0
jmp 0x13067
leaq -0x140(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x54f0
jmp 0x1307c
leaq -0x200(%rbp), %rdi
callq 0x5230
leaq -0x220(%rbp), %rdi
callq 0x5230
leaq -0x221(%rbp), %rdi
callq 0x5480
leaq -0x269(%rbp), %rdi
movq %rdi, -0x738(%rbp)
callq 0x56d0
movq -0x738(%rbp), %rdx
leaq 0x14aff(%rip), %rsi     # 0x27bc0
leaq -0x268(%rbp), %rdi
callq 0x89b0
jmp 0x130cf
movl -0x18(%rbp), %edx
leaq -0x248(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0xa2f0
jmp 0x130e7
leaq -0x140(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x54f0
jmp 0x130fc
leaq -0x248(%rbp), %rdi
callq 0x5230
leaq -0x268(%rbp), %rdi
callq 0x5230
leaq -0x269(%rbp), %rdi
callq 0x5480
leaq -0x2b1(%rbp), %rdi
movq %rdi, -0x740(%rbp)
callq 0x56d0
movq -0x740(%rbp), %rdx
leaq 0x14a97(%rip), %rsi     # 0x27bd8
leaq -0x2b0(%rbp), %rdi
callq 0x89b0
jmp 0x1314f
movl -0x28(%rbp), %edx
leaq -0x290(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0xa2f0
jmp 0x13167
leaq -0x140(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x54f0
jmp 0x1317c
leaq -0x290(%rbp), %rdi
callq 0x5230
leaq -0x2b0(%rbp), %rdi
callq 0x5230
leaq -0x2b1(%rbp), %rdi
callq 0x5480
leaq -0x2f9(%rbp), %rdi
movq %rdi, -0x748(%rbp)
callq 0x56d0
movq -0x748(%rbp), %rdx
leaq 0x14a2f(%rip), %rsi     # 0x27bf0
leaq -0x2f8(%rbp), %rdi
callq 0x89b0
jmp 0x131cf
movl -0x38(%rbp), %edx
leaq -0x2d8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xa2f0
jmp 0x131e7
leaq -0x140(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x54f0
jmp 0x131fc
leaq -0x2d8(%rbp), %rdi
callq 0x5230
leaq -0x2f8(%rbp), %rdi
callq 0x5230
leaq -0x2f9(%rbp), %rdi
callq 0x5480
leaq -0x341(%rbp), %rdi
movq %rdi, -0x750(%rbp)
callq 0x56d0
movq -0x750(%rbp), %rdx
leaq 0x149c7(%rip), %rsi     # 0x27c08
leaq -0x340(%rbp), %rdi
callq 0x89b0
jmp 0x1324f
movl -0x3c(%rbp), %edx
leaq -0x320(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0xa2f0
jmp 0x13267
leaq -0x140(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x54f0
jmp 0x1327c
leaq -0x320(%rbp), %rdi
callq 0x5230
leaq -0x340(%rbp), %rdi
callq 0x5230
leaq -0x341(%rbp), %rdi
callq 0x5480
leaq -0x389(%rbp), %rdi
movq %rdi, -0x758(%rbp)
callq 0x56d0
movq -0x758(%rbp), %rdx
leaq 0x1495f(%rip), %rsi     # 0x27c20
leaq -0x388(%rbp), %rdi
callq 0x89b0
jmp 0x132cf
movl -0x30(%rbp), %edx
leaq -0x368(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0xa2f0
jmp 0x132e7
leaq -0x140(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x54f0
jmp 0x132fc
leaq -0x368(%rbp), %rdi
callq 0x5230
leaq -0x388(%rbp), %rdi
callq 0x5230
leaq -0x389(%rbp), %rdi
callq 0x5480
leaq -0x3d1(%rbp), %rdi
movq %rdi, -0x760(%rbp)
callq 0x56d0
movq -0x760(%rbp), %rdx
leaq 0x148f7(%rip), %rsi     # 0x27c38
leaq -0x3d0(%rbp), %rdi
callq 0x89b0
jmp 0x1334f
movl -0x2c(%rbp), %edx
leaq -0x3b0(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xa2f0
jmp 0x13367
leaq -0x140(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x54f0
jmp 0x1337c
leaq -0x3b0(%rbp), %rdi
callq 0x5230
leaq -0x3d0(%rbp), %rdi
callq 0x5230
leaq -0x3d1(%rbp), %rdi
callq 0x5480
leaq -0x419(%rbp), %rdi
movq %rdi, -0x768(%rbp)
callq 0x56d0
movq -0x768(%rbp), %rdx
leaq 0x1488f(%rip), %rsi     # 0x27c50
leaq -0x418(%rbp), %rdi
callq 0x89b0
jmp 0x133cf
movl -0x34(%rbp), %edx
leaq -0x3f8(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0xa2f0
jmp 0x133e7
leaq -0x140(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x54f0
jmp 0x133fc
leaq -0x3f8(%rbp), %rdi
callq 0x5230
leaq -0x418(%rbp), %rdi
callq 0x5230
leaq -0x419(%rbp), %rdi
callq 0x5480
leaq -0x461(%rbp), %rdi
movq %rdi, -0x770(%rbp)
callq 0x56d0
movq -0x770(%rbp), %rdx
leaq 0x14827(%rip), %rsi     # 0x27c68
leaq -0x460(%rbp), %rdi
callq 0x89b0
jmp 0x1344f
movl -0x40(%rbp), %edx
leaq -0x440(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0xa2f0
jmp 0x13467
leaq -0x140(%rbp), %rdi
leaq -0x440(%rbp), %rsi
callq 0x54f0
jmp 0x1347c
leaq -0x440(%rbp), %rdi
callq 0x5230
leaq -0x460(%rbp), %rdi
callq 0x5230
leaq -0x461(%rbp), %rdi
callq 0x5480
leaq -0x4a9(%rbp), %rdi
movq %rdi, -0x778(%rbp)
callq 0x56d0
movq -0x778(%rbp), %rdx
leaq 0x147bf(%rip), %rsi     # 0x27c80
leaq -0x4a8(%rbp), %rdi
callq 0x89b0
jmp 0x134cf
movl -0x44(%rbp), %edx
leaq -0x488(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0xa2f0
jmp 0x134e7
leaq -0x140(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x54f0
jmp 0x134fc
leaq -0x488(%rbp), %rdi
callq 0x5230
leaq -0x4a8(%rbp), %rdi
callq 0x5230
leaq -0x4a9(%rbp), %rdi
callq 0x5480
leaq -0x4f1(%rbp), %rdi
movq %rdi, -0x780(%rbp)
callq 0x56d0
movq -0x780(%rbp), %rdx
leaq 0x14757(%rip), %rsi     # 0x27c98
leaq -0x4f0(%rbp), %rdi
callq 0x89b0
jmp 0x1354f
movl -0x48(%rbp), %edx
leaq -0x4d0(%rbp), %rdi
leaq -0x4f0(%rbp), %rsi
callq 0xa2f0
jmp 0x13567
leaq -0x140(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
callq 0x54f0
jmp 0x1357c
leaq -0x4d0(%rbp), %rdi
callq 0x5230
leaq -0x4f0(%rbp), %rdi
callq 0x5230
leaq -0x4f1(%rbp), %rdi
callq 0x5480
leaq -0x539(%rbp), %rdi
movq %rdi, -0x788(%rbp)
callq 0x56d0
movq -0x788(%rbp), %rdx
leaq 0x146ef(%rip), %rsi     # 0x27cb0
leaq -0x538(%rbp), %rdi
callq 0x89b0
jmp 0x135cf
movl -0x4c(%rbp), %edx
leaq -0x518(%rbp), %rdi
leaq -0x538(%rbp), %rsi
callq 0xa2f0
jmp 0x135e7
leaq -0x140(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x54f0
jmp 0x135fc
leaq -0x518(%rbp), %rdi
callq 0x5230
leaq -0x538(%rbp), %rdi
callq 0x5230
leaq -0x539(%rbp), %rdi
callq 0x5480
leaq -0x581(%rbp), %rdi
movq %rdi, -0x790(%rbp)
callq 0x56d0
movq -0x790(%rbp), %rdx
leaq 0x14687(%rip), %rsi     # 0x27cc8
leaq -0x580(%rbp), %rdi
callq 0x89b0
jmp 0x1364f
movl -0x50(%rbp), %edx
leaq -0x560(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0xa2f0
jmp 0x13667
leaq -0x140(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0x54f0
jmp 0x1367c
leaq -0x560(%rbp), %rdi
callq 0x5230
leaq -0x580(%rbp), %rdi
callq 0x5230
leaq -0x581(%rbp), %rdi
callq 0x5480
leaq -0x5c9(%rbp), %rdi
movq %rdi, -0x798(%rbp)
callq 0x56d0
movq -0x798(%rbp), %rdx
leaq 0x1461f(%rip), %rsi     # 0x27ce0
leaq -0x5c8(%rbp), %rdi
callq 0x89b0
jmp 0x136cf
movl -0x54(%rbp), %edx
leaq -0x5a8(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0xa2f0
jmp 0x136e7
leaq -0x140(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x54f0
jmp 0x136fc
leaq -0x5a8(%rbp), %rdi
callq 0x5230
leaq -0x5c8(%rbp), %rdi
callq 0x5230
leaq -0x5c9(%rbp), %rdi
callq 0x5480
leaq -0x611(%rbp), %rdi
movq %rdi, -0x7a0(%rbp)
callq 0x56d0
movq -0x7a0(%rbp), %rdx
leaq 0x145b7(%rip), %rsi     # 0x27cf8
leaq -0x610(%rbp), %rdi
callq 0x89b0
jmp 0x1374f
movl -0x14(%rbp), %edx
leaq -0x5f0(%rbp), %rdi
leaq -0x610(%rbp), %rsi
callq 0xa2f0
jmp 0x13767
leaq -0x140(%rbp), %rdi
leaq -0x5f0(%rbp), %rsi
callq 0x54f0
jmp 0x1377c
leaq -0x5f0(%rbp), %rdi
callq 0x5230
leaq -0x610(%rbp), %rdi
callq 0x5230
leaq -0x611(%rbp), %rdi
callq 0x5480
leaq -0x659(%rbp), %rdi
movq %rdi, -0x7a8(%rbp)
callq 0x56d0
movq -0x7a8(%rbp), %rdx
leaq 0x1454f(%rip), %rsi     # 0x27d10
leaq -0x658(%rbp), %rdi
callq 0x89b0
jmp 0x137cf
movl -0x74(%rbp), %edx
leaq -0x638(%rbp), %rdi
leaq -0x658(%rbp), %rsi
callq 0xa2f0
jmp 0x137e7
leaq -0x140(%rbp), %rdi
leaq -0x638(%rbp), %rsi
callq 0x54f0
jmp 0x137fc
leaq -0x638(%rbp), %rdi
callq 0x5230
leaq -0x658(%rbp), %rdi
callq 0x5230
leaq -0x659(%rbp), %rdi
callq 0x5480
leaq 0x14501(%rip), %rsi     # 0x27d28
leaq -0x140(%rbp), %rdi
callq 0x53f0
jmp 0x13835
movq -0x10(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x5050
jmp 0x13847
leaq -0x140(%rbp), %rdi
callq 0x5230
jmp 0x13f6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x138c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x138b5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x5230
leaq -0x190(%rbp), %rdi
callq 0x5230
leaq -0x191(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13924
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13918
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0x5230
leaq -0x1d8(%rbp), %rdi
callq 0x5230
leaq -0x1d9(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13987
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x1397b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x5230
leaq -0x220(%rbp), %rdi
callq 0x5230
leaq -0x221(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x139ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x139de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x5230
leaq -0x268(%rbp), %rdi
callq 0x5230
leaq -0x269(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13a4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13a41
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x5230
leaq -0x2b0(%rbp), %rdi
callq 0x5230
leaq -0x2b1(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13ab0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13aa4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x5230
leaq -0x2f8(%rbp), %rdi
callq 0x5230
leaq -0x2f9(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13b13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13b07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x5230
leaq -0x340(%rbp), %rdi
callq 0x5230
leaq -0x341(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13b76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13b6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x5230
leaq -0x388(%rbp), %rdi
callq 0x5230
leaq -0x389(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13bd9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13bcd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x3b0(%rbp), %rdi
callq 0x5230
leaq -0x3d0(%rbp), %rdi
callq 0x5230
leaq -0x3d1(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13c3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13c30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x5230
leaq -0x418(%rbp), %rdi
callq 0x5230
leaq -0x419(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13c9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13c93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x5230
leaq -0x460(%rbp), %rdi
callq 0x5230
leaq -0x461(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13d02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13cf6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x5230
leaq -0x4a8(%rbp), %rdi
callq 0x5230
leaq -0x4a9(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13d65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13d59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x5230
leaq -0x4f0(%rbp), %rdi
callq 0x5230
leaq -0x4f1(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13dc8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13dbc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x518(%rbp), %rdi
callq 0x5230
leaq -0x538(%rbp), %rdi
callq 0x5230
leaq -0x539(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13e2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13e1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x5230
leaq -0x580(%rbp), %rdi
callq 0x5230
leaq -0x581(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13e8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13e82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x5a8(%rbp), %rdi
callq 0x5230
leaq -0x5c8(%rbp), %rdi
callq 0x5230
leaq -0x5c9(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13ef1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13ee5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x5f0(%rbp), %rdi
callq 0x5230
leaq -0x610(%rbp), %rdi
callq 0x5230
leaq -0x611(%rbp), %rdi
callq 0x5480
jmp 0x13f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13f51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
jmp 0x13f45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x148(%rbp)
movl %eax, -0x14c(%rbp)
leaq -0x638(%rbp), %rdi
callq 0x5230
leaq -0x658(%rbp), %rdi
callq 0x5230
leaq -0x659(%rbp), %rdi
callq 0x5480
leaq -0x140(%rbp), %rdi
callq 0x5230
jmp 0x13f91
movq -0x668(%rbp), %rax
cmpl $0x1, 0x170(%rax)
jne 0x13f82
imull $-0x1, -0x74(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %eax
addl $0x4, %eax
addq $0x7b0, %rsp            # imm = 0x7B0
popq %rbp
retq
movq -0x148(%rbp), %rdi
callq 0x56c0
nopl (%rax)