// File: /workspace/github_cpp_makefile_star2_O1/angelapwen[P]text-based-game/game.cpp
// Function: Game::startGame()
void Game::startGame() {
	welcomeMenu();

	characterChoice(); // Choose appropriate character
	satchelChoice(); // Construct appropriate satchel

	string weapon; // Weapon picked up every round
	bool exit = false; // Set bool flag to false until player chosoes to exit

	cout <<
	     "********************************************************************************"
	     << endl;
	// If character is Miss Scarlet, add revolver to Satchel
	if (character == 's') {
		cout << "Hello, Miss Scarlet.";
		satchel->addWeapon("revolver");
	}

	// If character is Colonel Mustard, increment Satchel capacity
	else if (character == 'm') {
		cout << "Hello, Colonel Mustard." << endl;
		satchel->addCapacity();
	}

	// If character is Mrs. White, turn switch on corner access
	else if (character == 'w') {
		cout << "Hello, Mrs. White." << endl;
		cout << "Mr. Boddy wouldn't report his own maid to the police for being"
			 " on his Estate." << endl;
	}

	// If character is Mr. Green, display room with escape door
	else if (character == 'g') {
		cout << "Hello, Mr. Green." << endl;
		cout << "Thank you for your generous donation to Hydra." << endl;
		cout << "The room you must commit the murder in is the " << murderRoom
		     << "." << endl;
	}

	// If character is Mrs. Peacock, multiply the number of total moves
	else if (character == 'p') {
		cout << "Hello, Mrs. Peacock." << endl;
		maxMoves *= 1.25;
		cout << "Your new number of maximum moves in the estate is " <<
		     maxMoves << "." << endl;
	}

	else {
		cout << "Welcome, Professor Plum." << endl;
		current->setCornerAccess('y');
		cout << "You will be able to access the corner passageways throughout "
		        "the game." << endl;
	}

	cout << "The Boddy Estate butler greets you at the entrance." << endl;
	cout << "\nPress enter to begin searching the Estate for weapons." << endl;
	getchar();

	// Repeat these steps while the murder has not been committed, the user
	// has not elected to exit, step count is below max, and random
	// discovery event has not occurred
	while (moves < maxMoves && !murder && !exit && !discovery) {
		// Increment and print the step number
		moves++;

		cout <<
		     "********************************************************************************"
		     << endl;
		cout << "You are on Move #" << moves << "." << endl;

		// Move player to correct place and print board
		updateMap();
		map->printBoard();
		map->printKey();

		// Check if player has enough weapons and is in the appropriate room
		if ((satchel->getNumUniqueWeapons()) > 3 &&
		    current->getName() == murderRoom) {
			current->roomWelcome();
			commitMurder();
		}

		// If murder has not been committed, move forward with room action
		if (!murder) {
			current->roomWelcome();

			// Chance 1 in 9 that character drops their satchel
			int emptyChance = (rand() % 9) + 1;
			switch (emptyChance) {
				case 1: {
					satchel->clearContents();
					break;
				}
				default:
					break;
			}

			// Store the weapon picked up (if any) from action method
			weapon = current->action();

			// Add weapon (if applicable) to satchel
			if (weapon != "none") {
				satchel->addWeapon(weapon);
			}

			// Check again if player has enough weapons and is in the correct room
			if ((satchel->getNumUniqueWeapons()) > 3 && current->getName() ==
			                                            murderRoom) {
				commitMurder();
			}
		}

		// If murder has not been committed at this stage, chance in 1 of 30
		// that player is discovered by Boddy before moving.
		if (!murder) {
			int discoveryChance = (rand() % 30) + 1;

			switch (discoveryChance) {
				case 1: {
					// Turn discovery on if character is not Mrs. White
					if (character != 'w') {
						discovery = true;
					}
					break;
				}
				default:
					break;
			}

			// If discovery did not occur, move character to next room
			if (!discovery) {
				cout << "\nIt is time to move to another room." << endl;

				// If character is Plum, set corner access on
				if (character == 'o') {
					current->setCornerAccess('y');
				}
					// Else if character is not Mrs. White but has wrench, set corner
					// access on
				else if (satchel->getWrench()) {
					cout
							<< "\nHello from Hydra. We noticed that you have a wrench in";
					cout << " your satchel. While you\nhave a wrench, you may access "
							   "the secret corner passageways in the Boddy Estate."
							<< endl << endl;
					current->setCornerAccess('y');
				}
					// Else turn corner access off
				else {
					current->setCornerAccess('n');
				}

				// Display options for the user to move and get user choice
				char move = current->makeMove();

				// Depending on char returned, point current to new room or exit
				switch (move) {
					case 't':
						current = current->getTop();
						break;
					case 'b':
						current = current->getBottom();
						break;
					case 'l':
						current = current->getLeft();
						break;
					case 'r':
						current = current->getRight();
						break;
					case 'c':
						current = current->getCorner();
						break;
					case 'e':
						exit = true;
						break;
					default:
						break;
				}
			}
		}
	}

	cout <<
	     "\n********************************************************************************"
	     << endl;

	// If murder has been committed, display congratulations
	if (murder) {
		cout << "Congratulations, professor! You have completed your mission in "
			  << moves << " moves." << endl;
		cout << "We have activated a secret escape in the " << murderRoom <<
					"." << endl;
		cout << "Open the door and step in to your freedom." << endl;
		cout << "\n\nYour next mission will be:" << endl;
		cout << "DEFEND YOUR INNOCENCE. FRAME ANOTHER GUEST FOR MR. BODDY'S "
		        "MURDER." << endl;
		cout << "The others will be here soon..." << endl;
		cout << "\n\nRemember: Cut off a limb, and two more shall take its "
		        "place." << endl;
	}

	// Else if user reached max number of moves, display exit message
	else if (moves >= maxMoves) {
		cout << "Unfortunately, you exceeded the total number of moves to "
		        "complete your mission." << endl;
		cout << "We have removed you from Mr. Boddy's estate." << endl;
		cout << "\nNot everyone is meant for the greatness of HYDRA." << endl;
		cout << "The Hydra selection process is a dangerous one." << endl;
		cout << "Those who do not successfully complete it are liabilities to "
		        "our organization." << endl;
		cout << "Perhaps you may serve Hydra in your next life." << endl;
		cout << "\n\n\nDo you have any last words before we begin?" << endl;
	}

	// Else player has been discovered, display exit message
	else if (discovery) {
		cout << "Before you decide on your next move, Mr. Boddy walks into the " <<
		     current->getName() << "." << endl;
		cout << "You have been discovered after " << moves << " move(s)!!" <<
		     endl;
		cout << "\nMR. BODDY: \"You aren't supposed to be in here.\"" << endl;
		cout << "MR. BODDY: \"Are you trying to steal my things??\"" << endl;
		cout << "MR. BODDY: \"I expected better from you. I'd better call the "
		        "police. \"" << endl;
		cout << "\nThe police have escorted you from Mr. Boddy's estate." << endl;
		cout << "They do not find any evidence of stolen items on you and you "
			 "are released." << endl;
		cout << "\nYou have failed to complete your mission." << endl;
		cout << "Not everyone is meant for the greatness of HYDRA." << endl;
		cout << "The HYDRA selection process is a dangerous one." << endl;
		cout << "Those who do not successfully complete it are liabilities to "
		        "our organization." << endl;
		cout << "Perhaps you may serve Hydra in your next life." << endl;
		cout << "\n\n\nDo you have any last words before we begin?" << endl;
	}

	// Else if user has elected to exit, display exit message
	else {
		cout << "You have chosen to use the Emergency Exit after " << moves <<
		     " move(s)." << endl;
		cout << "You decided to leave your mission incomplete." << endl;
		cout << "\nNot everyone is meant for the greatness of HYDRA." << endl;
		cout << "The HYDRA selection process is a dangerous one." << endl;
		cout << "Those who do not successfully complete it are liabilities to "
		        "our organization." << endl;
		cout << "Perhaps you may serve Hydra in your next life." << endl;
		cout << "\n\n\nDo you have any last words before we begin?" << endl;
	}
	cout <<
	     "********************************************************************************"
	     << endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rdi, %rbx
callq 0x5696
movq %rbx, %rdi
callq 0x5ce6
movq %rbx, %rdi
callq 0x65a6
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
movq 0x10b1c(%rip), %r14     # 0x14fd0
leaq 0x9657(%rip), %rsi      # 0xdb12
movl $0x50, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x10aea(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movzbl 0x8a(%rbx), %eax
cmpl $0x6f, %eax
jle 0x4588
cmpl $0x70, %eax
je 0x45ee
cmpl $0x77, %eax
je 0x469f
cmpl $0x73, %eax
jne 0x47de
movq 0x10aab(%rip), %rdi     # 0x14fd0
leaq 0x92f5(%rip), %rsi      # 0xd821
movl $0x14, %edx
callq 0x21c0
movq 0x8(%rbx), %r14
leaq 0x78(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x9002(%rip), %rsi      # 0xd54c
leaq 0x9003(%rip), %rdx      # 0xd554
leaq 0x68(%rsp), %rdi
callq 0x7b9a
movq (%r14), %rax
leaq 0x68(%rsp), %rsi
movq %r14, %rdi
callq *(%rax)
movq 0x68(%rsp), %rdi
cmpq %r15, %rdi
je 0x4874
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x21a0
jmp 0x4874
cmpl $0x67, %eax
je 0x46f6
cmpl $0x6d, %eax
jne 0x47de
movq 0x10a2f(%rip), %r14     # 0x14fd0
leaq 0x928e(%rip), %rsi      # 0xd836
movl $0x17, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x109fd(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x8(%rbx), %rdi
callq 0xa00a
jmp 0x4874
movq 0x109db(%rip), %r14     # 0x14fd0
leaq 0x9323(%rip), %rsi      # 0xd91f
movl $0x14, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x109a9(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
cvtsi2sdl 0x14(%rbx), %xmm0
mulsd 0x9067(%rip), %xmm0     # 0xd6a8
cvttsd2si %xmm0, %eax
movl %eax, 0x14(%rbx)
movq 0x10981(%rip), %rdi     # 0x14fd0
leaq 0x92de(%rip), %rsi      # 0xd934
movl $0x32, %edx
callq 0x21c0
movl 0x14(%rbx), %esi
movq 0x10966(%rip), %rdi     # 0x14fd0
callq 0x2260
movq %rax, %r14
leaq 0x99fb(%rip), %rsi      # 0xe074
movl $0x1, %edx
movq %rax, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
jmp 0x4861
movq 0x1092a(%rip), %r14     # 0x14fd0
leaq 0x91a1(%rip), %rsi      # 0xd84e
movl $0x12, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x108f8(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x4d, %edx
leaq 0x9170(%rip), %rsi      # 0xd861
jmp 0x483e
movq 0x108d3(%rip), %r14     # 0x14fd0
leaq 0x91ab(%rip), %rsi      # 0xd8af
movl $0x11, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x108a1(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x1088d(%rip), %r14     # 0x14fd0
leaq 0x9177(%rip), %rsi      # 0xd8c1
movl $0x2e, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x1085b(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x10847(%rip), %rdi     # 0x14fd0
leaq 0x9160(%rip), %rsi      # 0xd8f0
movl $0x2e, %edx
callq 0x21c0
movq 0x68(%rbx), %rsi
movq 0x70(%rbx), %rdx
movq 0x10827(%rip), %rdi     # 0x14fd0
callq 0x21c0
movq %rax, %r14
leaq 0x98bc(%rip), %rsi      # 0xe074
movl $0x1, %edx
movq %rax, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
jmp 0x4861
movq 0x107eb(%rip), %r14     # 0x14fd0
leaq 0x917b(%rip), %rsi      # 0xd967
movl $0x18, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x107b9(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x18(%rbx), %rdi
movl $0x79, %esi
callq 0xa498
movl $0x46, %edx
leaq 0x9142(%rip), %rsi      # 0xd980
movq 0x1078b(%rip), %r14     # 0x14fd0
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x10755(%rip), %r14     # 0x14fd0
leaq 0x9145(%rip), %rsi      # 0xd9c7
movl $0x33, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x10723(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x1070f(%rip), %r14     # 0x14fd0
leaq 0x9133(%rip), %rsi      # 0xd9fb
movl $0x37, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x106dd(%rip), %r14     # 0x14fd0
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
callq 0x21f0
movl 0x10(%rbx), %eax
cmpl 0x14(%rbx), %eax
jge 0x4d97
xorl %r13d, %r13d
leaq 0x28(%rsp), %r15
cmpb $0x0, 0x88(%rbx)
jne 0x4d97
testb $0x1, %r13b
jne 0x4d97
cmpb $0x0, 0x89(%rbx)
jne 0x4d97
incl %eax
movl %eax, 0x10(%rbx)
movl $0x50, %edx
movq %r14, %rdi
leaq 0x91be(%rip), %rsi      # 0xdb12
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x11, %edx
movq %r14, %rdi
leaq 0x90a4(%rip), %rsi      # 0xda33
callq 0x21c0
movl 0x10(%rbx), %esi
movq %r14, %rdi
callq 0x2260
movq %rax, %r12
movl $0x1, %edx
movq %rax, %rdi
leaq 0x96c3(%rip), %rsi      # 0xe074
callq 0x21c0
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rbx, %rdi
callq 0x6c2c
movq (%rbx), %rdi
callq 0x8c1e
movq (%rbx), %rdi
callq 0x8ccc
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movl %eax, %r12d
cmpl $0x4, %eax
jl 0x4a49
movq 0x18(%rbx), %rsi
leaq 0xa8(%rsp), %rdi
callq 0xa474
movq 0xb0(%rsp), %rdx
cmpq 0x70(%rbx), %rdx
jne 0x4a49
testq %rdx, %rdx
je 0x4d4d
movq 0x68(%rbx), %rsi
movq 0xa8(%rsp), %rdi
callq 0x21b0
testl %eax, %eax
sete %bpl
jmp 0x4a4b
xorl %ebp, %ebp
cmpl $0x4, %r12d
jl 0x4a76
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x4a76
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x21a0
testb %bpl, %bpl
movq %r15, %r12
je 0x4a8f
movq 0x18(%rbx), %rdi
callq 0xa3fc
movq %rbx, %rdi
callq 0x6efa
cmpb $0x0, 0x88(%rbx)
jne 0x4bec
movq 0x18(%rbx), %rdi
callq 0xa3fc
callq 0x2050
imull $0x38e38e39, %eax, %eax # imm = 0x38E38E39
addl $0xe38e38e, %eax        # imm = 0xE38E38E
cmpl $0x1c71c71c, %eax       # imm = 0x1C71C71C
ja 0x4ac6
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x18(%rbx), %rsi
movq (%rsi), %rax
movq %r12, %rdi
callq *(%rax)
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq 0x21d0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x4afb
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21a0
leaq 0x8(%rsp), %rdi
leaq 0x8f3e(%rip), %rsi      # 0xda45
callq 0x2070
testl %eax, %eax
je 0x4b5f
movq 0x8(%rbx), %r12
leaq 0x58(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x48(%rsp), %rdi
callq 0x31c8
movq (%r12), %rax
movq %r12, %rdi
leaq 0x48(%rsp), %rsi
callq *(%rax)
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x4b5f
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movl %eax, %r12d
cmpl $0x4, %eax
jl 0x4bb2
movq 0x18(%rbx), %rsi
leaq 0x88(%rsp), %rdi
callq 0xa474
movq 0x90(%rsp), %rdx
cmpq 0x70(%rbx), %rdx
jne 0x4bb2
testq %rdx, %rdx
je 0x4d55
movq 0x68(%rbx), %rsi
movq 0x88(%rsp), %rdi
callq 0x21b0
testl %eax, %eax
sete %bpl
jmp 0x4bb4
xorl %ebp, %ebp
cmpl $0x4, %r12d
jl 0x4bdf
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x4bdf
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x21a0
testb %bpl, %bpl
je 0x4bec
movq %rbx, %rdi
callq 0x6efa
cmpb $0x0, 0x88(%rbx)
jne 0x4d8b
callq 0x2050
imull $0xeeeeeeef, %eax, %eax # imm = 0xEEEEEEEF
movl $0x8888888, %ecx        # imm = 0x8888888
addl %ecx, %eax
rorl %eax
cmpl %ecx, %eax
ja 0x4c21
cmpb $0x77, 0x8a(%rbx)
je 0x4c21
movb $0x1, 0x89(%rbx)
cmpb $0x0, 0x89(%rbx)
jne 0x4d8b
movl $0x24, %edx
movq %r14, %rdi
leaq 0x8e0d(%rip), %rsi      # 0xda4a
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movb $0x79, %cl
cmpb $0x6f, 0x8a(%rbx)
je 0x4d02
movq 0x8(%rbx), %rdi
callq 0xa006
movb $0x6e, %cl
testb %al, %al
je 0x4d02
movl $0x37, %edx
movq %r14, %rdi
leaq 0x8dd9(%rip), %rsi      # 0xda6f
callq 0x21c0
movl $0x69, %edx
movq %r14, %rdi
leaq 0x8dfd(%rip), %rsi      # 0xdaa7
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movb $0x79, %cl
movq 0x18(%rbx), %rdi
movzbl %cl, %esi
callq 0xa498
movq 0x18(%rbx), %rdi
callq 0xa4a2
movzbl %al, %eax
cmpl $0x6b, %eax
jg 0x4d33
cmpl $0x62, %eax
je 0x4d5d
cmpl $0x63, %eax
je 0x4d73
cmpl $0x65, %eax
jne 0x4d8b
movb $0x1, %r13b
jmp 0x4d8b
cmpl $0x6c, %eax
je 0x4d68
cmpl $0x72, %eax
je 0x4d7e
cmpl $0x74, %eax
jne 0x4d8b
movq 0x18(%rbx), %rdi
callq 0xac18
jmp 0x4d87
movb $0x1, %bpl
jmp 0x4a4b
movb $0x1, %bpl
jmp 0x4bb4
movq 0x18(%rbx), %rdi
callq 0xac22
jmp 0x4d87
movq 0x18(%rbx), %rdi
callq 0xac2c
jmp 0x4d87
movq 0x18(%rbx), %rdi
callq 0xac40
jmp 0x4d87
movq 0x18(%rbx), %rdi
callq 0xac36
movq %rax, 0x18(%rbx)
movl 0x10(%rbx), %eax
cmpl 0x14(%rbx), %eax
jl 0x491c
movq 0x10232(%rip), %r14     # 0x14fd0
leaq 0x8d6c(%rip), %rsi      # 0xdb11
movl $0x51, %edx
movq %r14, %rdi
leaq 0x18(%rsp), %r12
callq 0x21c0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x101fb(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
cmpb $0x1, 0x88(%rbx)
jne 0x4fe7
movq 0x101da(%rip), %rdi     # 0x14fd0
leaq 0x8d66(%rip), %rsi      # 0xdb63
movl $0x3f, %edx
callq 0x21c0
movl 0x10(%rbx), %esi
movq 0x101bf(%rip), %rdi     # 0x14fd0
callq 0x2260
movq %rax, %r14
leaq 0x8d83(%rip), %rsi      # 0xdba3
movl $0x7, %edx
movq %rax, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x10175(%rip), %rdi     # 0x14fd0
leaq 0x8d49(%rip), %rsi      # 0xdbab
movl $0x29, %edx
callq 0x21c0
movq 0x68(%rbx), %rsi
movq 0x70(%rbx), %rdx
movq 0x10155(%rip), %rdi     # 0x14fd0
callq 0x21c0
movq %rax, %rbx
leaq 0x91ea(%rip), %rsi      # 0xe074
movl $0x1, %edx
movq %rax, %rdi
callq 0x21c0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x1010b(%rip), %rbx     # 0x14fd0
leaq 0x8d09(%rip), %rsi      # 0xdbd5
movl $0x2a, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x100d9(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x100c5(%rip), %rbx     # 0x14fd0
leaq 0x8cee(%rip), %rsi      # 0xdc00
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x10093(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x1007f(%rip), %rbx     # 0x14fd0
leaq 0x8cc5(%rip), %rsi      # 0xdc1d
movl $0x42, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x1004d(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x10039(%rip), %rbx     # 0x14fd0
leaq 0x8cc2(%rip), %rsi      # 0xdc60
movl $0x1f, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x10007(%rip), %rdi     # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x3e, %edx
leaq 0x8c9e(%rip), %rsi      # 0xdc80
jmp 0x555c
movl 0x10(%rbx), %eax
cmpl 0x14(%rbx), %eax
jge 0x52af
cmpb $0x1, 0x89(%rbx)
jne 0x538d
movq 0xffc9(%rip), %rdi      # 0x14fd0
leaq 0x8e3e(%rip), %rsi      # 0xde4c
movl $0x3e, %edx
callq 0x21c0
movq 0x18(%rbx), %rsi
leaq 0x28(%rsp), %rdi
callq 0xa474
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0xff99(%rip), %rdi      # 0x14fd0
callq 0x21c0
movq %rax, %r14
leaq 0x902e(%rip), %rsi      # 0xe074
movl $0x1, %edx
movq %rax, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5095
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0xff34(%rip), %rdi      # 0x14fd0
leaq 0x8de8(%rip), %rsi      # 0xde8b
movl $0x1f, %edx
callq 0x21c0
movl 0x10(%rbx), %esi
movq 0xff19(%rip), %rdi      # 0x14fd0
callq 0x2260
movq %rax, %rbx
leaq 0x8de5(%rip), %rsi      # 0xdeab
movl $0xa, %edx
movq %rax, %rdi
callq 0x21c0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfecf(%rip), %rbx      # 0x14fd0
leaq 0x8dae(%rip), %rsi      # 0xdeb6
movl $0x30, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfe9d(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfe89(%rip), %rbx      # 0x14fd0
leaq 0x8d99(%rip), %rsi      # 0xdee7
movl $0x30, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfe57(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfe43(%rip), %rbx      # 0x14fd0
leaq 0x8d84(%rip), %rsi      # 0xdf18
movl $0x45, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfe11(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfdfd(%rip), %rbx      # 0x14fd0
leaq 0x8d84(%rip), %rsi      # 0xdf5e
movl $0x36, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfdcb(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfdb7(%rip), %rbx      # 0x14fd0
leaq 0x8d75(%rip), %rsi      # 0xdf95
movl $0x4a, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfd85(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfd71(%rip), %rbx      # 0x14fd0
leaq 0x8d7a(%rip), %rsi      # 0xdfe0
movl $0x2a, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfd3f(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x31, %edx
leaq 0x8a93(%rip), %rsi      # 0xdd3d
jmp 0x5444
movq 0xfd1a(%rip), %rbx      # 0x14fd0
leaq 0x8a02(%rip), %rsi      # 0xdcbf
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfce8(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfcd4(%rip), %rbx      # 0x14fd0
leaq 0x8a0c(%rip), %rsi      # 0xdd0f
movl $0x2c, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfca2(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfc8e(%rip), %rbx      # 0x14fd0
leaq 0x89f3(%rip), %rsi      # 0xdd3c
movl $0x32, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfc5c(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x89e7(%rip), %rsi      # 0xdd6f
jmp 0x5485
movq 0xfc3c(%rip), %rdi      # 0x14fd0
leaq 0x8ca0(%rip), %rsi      # 0xe03b
movl $0x30, %edx
callq 0x21c0
movl 0x10(%rbx), %esi
movq 0xfc21(%rip), %rdi      # 0x14fd0
callq 0x2260
movq %rax, %rbx
leaq 0x8cae(%rip), %rsi      # 0xe06c
movl $0x9, %edx
movq %rax, %rdi
callq 0x21c0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfbd7(%rip), %rbx      # 0x14fd0
leaq 0x8c76(%rip), %rsi      # 0xe076
movl $0x2d, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfba5(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x32, %edx
leaq 0x88f8(%rip), %rsi      # 0xdd3c
movq 0xfb85(%rip), %rbx      # 0x14fd0
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfb5f(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x8b86(%rip), %rsi      # 0xe00b
movq 0xfb44(%rip), %rbx      # 0x14fd0
movl $0x2f, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfb19(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfb05(%rip), %rbx      # 0x14fd0
leaq 0x88cd(%rip), %rsi      # 0xdd9f
movl $0x4e, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfad3(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfabf(%rip), %rbx      # 0x14fd0
leaq 0x88d6(%rip), %rsi      # 0xddee
movl $0x2e, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfa8d(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x2e, %edx
leaq 0x88c1(%rip), %rsi      # 0xde1d
movq 0xfa6d(%rip), %rbx      # 0x14fd0
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfa47(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0xfa33(%rip), %rbx      # 0x14fd0
leaq 0x856e(%rip), %rsi      # 0xdb12
movl $0x50, %edx
movq %rbx, %rdi
callq 0x21c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0xfa01(%rip), %rdi      # 0x14fd0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x55f3
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21a0
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x566a
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r15, %rdi
je 0x5677
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x21a0
jmp 0x5677
jmp 0x5674
movq %rax, %rbx
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x566d
movq 0x38(%rsp), %rsi
jmp 0x5656
jmp 0x566a
movq %rax, %rbx
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x566d
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x21a0
jmp 0x566d
jmp 0x566a
jmp 0x566a
jmp 0x566a
jmp 0x566a
jmp 0x566a
movq %rax, %rbx
leaq 0x18(%rsp), %r12
jmp 0x5677
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x568e
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21a0
movq %rbx, %rdi
callq 0x2270