// File: monikakushwaha28[P]Fiduccia_Matthesys-using-c-/Fiduccia_Mattheyses_v1.0.cpp
// Function: main
int main(int argc, char** argv)
{
	if (argc < 2)
	{
		cout << "missing argument: " << endl;
		cout << "Please provide files in correct format." << endl;
		return 0;
	}
	else if (argc == 2)
	{
		string aux_f, auxline;
		vector<string> aux_val;
		aux_f = argv[1];
		const char* aux_fi = argv[1];
		string node_f;
		string net_f;
		bool is_node = false, is_net = false;
		if (aux_f == "design.aux");
		{
			aux_file.open(aux_fi);
			while (getline(aux_file, auxline))
			{
				aux_val = split(auxline, ' ');
				for (int au = 0; au < aux_val.size(); au++)
				{
					if (aux_val[au] == "design.nodes")
					{
						node_f = aux_val[au];
						is_node = true;
					}
					if (aux_val[au] == "design.nets")
					{
						net_f = aux_val[au];
						is_net = true;
					}
					if (is_node && is_net)
					{
						break;
					}
				}
			}
		}
		if (is_node && is_net)
		{
			//Fetching Data from Nodes file;
			node_file.open(node_f.c_str());
			while (getline(node_file, nodeline))
			{
				sep_node = split(nodeline, ' ');
				node_type = sep_node[1];
				sep_node2 = split(sep_node[0], '_');
				istringstream(sep_node2[1]) >> instance;
				free_nodes.push_back(instance);

				if (node_type == "FDRE") weight = 5;
				else if (node_type == "LUT6") weight = 7;
				else if (node_type == "LUT5") weight = 6;
				else if (node_type == "LUT4") weight = 5;
				else if (node_type == "LUT3") weight = 4;
				else if (node_type == "LUT2") weight = 3;
				else if (node_type == "LUT1") weight = 2;
				else if (node_type == "CARRY8") weight = 34;
				else if (node_type == "DSP48E") weight = 429;
				else if (node_type == "RAMB36E2") weight = 379;
				else if (node_type == "BUFGCE") weight = 3;
				else if (node_type == "IBUF") weight = 2;
				else if (node_type == "OBUF") weight = 2;

				if ((part_count % 2) == 0) {
					node_map[instance].push_back(weight);
					node_map[instance].push_back(1);
					wp1 = wp1 + weight;
				}
				else if ((part_count % 2) != 0) {
					node_map[instance].push_back(weight);
					node_map[instance].push_back(-1);
					wpn1 = wpn1 + weight;
				}
				node_map[instance].push_back(0); //pushing back fix;
				part_count++;
			}
			node_file.close();

			//writing into files
			if (part_count == 3336)
			{
				output_f.open("Sain_Kushwaha_output_FPGA-example1_rc1.txt");
				output_f << "Benchmark Name : FPGA-example1" << endl;
				is_benc = true;
			}
			else if (part_count == 542239)
			{
				output_f.open("Sain_Kushwaha_output_FPGA-example2_rc1.txt");
				output_f << "Benchmark Name : FPGA-example2" << endl;
				is_benc = true;
			}
			else if (part_count == 427800)
			{
				output_f.open("Sain_Kushwaha_output_FPGA-example3_rc1.txt");
				output_f << "Benchmark Name : FPGA-example3" << endl;
				is_benc = true;
			}
			else if (part_count == 844184)
			{
				output_f.open("Sain_Kushwaha_output_FPGA-example4_rc1.txt");
				output_f << "Benchmark Name : FPGA-example4" << endl;
				is_benc = true;
			}

			net_file.open(net_f.c_str());
			while (getline(net_file, netline))
			{
				count1 = 0;
				countn1 = 0;
				if (netline.substr(0, 3) == "net")
				{
					int a = 0;
					while (netline.substr(a + 4, 1) != " ")
					{
						a = a++;
					}
					netname = netline.substr(4, a);   //NET is HERE.
					getline(net_file, net_nodeline);

					while (net_nodeline.substr(0, 6) != "endnet")
					{
						int b = 0;
						while (net_nodeline.substr(b + 1, 1) != " ")
						{
							b = b++;
						}
						sep_node = split(net_nodeline.substr(1, b), '_');  //NODE is HERE.
						istringstream(sep_node[1]) >> nodename;
						node_net_map[nodename].push_back(netname);
						net_node_map[netname].push_back(nodename);

						if (node_map[nodename][1] == 1)
						{
							count1 = count1 + 1;
						}
						else
						{
							countn1 = countn1 + 1;
						}

						getline(net_file, net_nodeline);
					}
					net_card[netname].push_back(count1);
					net_card[netname].push_back(countn1);
				}
			}
			net_file.close();

			//Removing Duplicates
			for (net_nodeiter iter = node_net_map.begin(); iter != node_net_map.end(); iter++)
			{
				node_net_map[iter->first].erase(unique(node_net_map[iter->first].begin(), node_net_map[iter->first].end()), node_net_map[iter->first].end());
			}

			//Initial Gain Bucket Calculation
			for (int i = 0; i < free_nodes.size(); i++)
			{
				int current_node = free_nodes[i];
				gain = 0;
				for (int var = 0; var < node_net_map[current_node].size(); var++)
				{
					current_net = node_net_map[current_node].at(var);
					net_count1 = net_card[current_net].at(0);
					net_countn1 = net_card[current_net].at(1);
					current_part = node_map[current_node].at(1);
					if (current_part == 1)
					{
						if (net_count1 == 1)
						{
							gain = gain + 1;
						}
						else if (net_countn1 == 0)
						{
							gain = gain - 1;
						}
					}
					else
					{
						if (net_count1 == 0)
						{
							gain = gain - 1;
						}
						else if (net_countn1 == 1)
						{
							gain = gain + 1;
						}
					}
				}
				gain_bucket[gain].push_back(current_node);
				node_map[current_node].push_back(gain);
			}


			//Initial Cutset 
			for (netcarditer a = net_card.begin(); a != net_card.end(); a++)
			{
				if ((net_card[a->first][0] != 0) && (net_card[a->first][1] != 0))
				{
					cutset = cutset + 1;
					initial_cutset = cutset;
				}
			}

			for (fg = 1; fg < 9; fg++)
			{
				cutset = cutset_cal(cutset);
			}
		}
	}

	end:int stop_s = clock(); //Timing of code ends here

	int time_ms = (stop_s - start_s) / double(CLOCKS_PER_SEC) * 1000;
	int time_hours = (time_ms) / (1000 * 60 * 60);
	int time_minutes = (time_ms - time_hours * (60 * 60 * 1000)) / (1000 * 60);
	int time_seconds = (time_ms - time_minutes * (1000 * 60)) / (1000);
	cout << "Execution Time:" << endl;
	cout << "HH: " << time_hours << " MM: " << time_minutes << " SS: " << time_seconds << endl; //Printing out total execution time.
	cout << "Execution Time: " << time_ms << endl;

	if (is_benc)
	{
		output_f << "Execution Time: " << " HH: " << time_hours << " MM: " << time_minutes << " SS: " << time_seconds << endl;
		output_f << "Starting Cut: " << initial_cutset << endl;
		output_f << "Final Cut: " << cutset << endl;
		output_f << "Percentage Change: " << (((initial_cutset - cutset) / initial_cutset) * 100) << "%" << endl;
		output_f << "Ratio Cut: " << (wp1 / wpn1) << endl;
	}

	output_f.close();
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7c0, %rsp            # imm = 0x7C0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x2, -0x8(%rbp)
jge 0x502f
movq 0x10fea(%rip), %rdi     # 0x15fd0
leaq 0xa04b(%rip), %rsi      # 0xf038
callq 0x21e0
movq %rax, %rdi
movq 0x10fbc(%rip), %rsi     # 0x15fb8
callq 0x2230
movq 0x10fc8(%rip), %rdi     # 0x15fd0
leaq 0xa03c(%rip), %rsi      # 0xf04b
callq 0x21e0
movq %rax, %rdi
movq 0x10f9a(%rip), %rsi     # 0x15fb8
callq 0x2230
movl $0x0, -0x4(%rbp)
jmp 0x693e
cmpl $0x2, -0x8(%rbp)
jne 0x6659
leaq -0x30(%rbp), %rdi
movq %rdi, -0x608(%rbp)
callq 0x22a0
leaq -0x50(%rbp), %rdi
callq 0x22a0
leaq -0x68(%rbp), %rdi
callq 0x6960
movq -0x608(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x2290
jmp 0x5071
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x80(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x22a0
leaq -0xc0(%rbp), %rdi
callq 0x22a0
movb $0x0, -0xc1(%rbp)
movb $0x0, -0xc2(%rbp)
leaq 0x9fc9(%rip), %rsi      # 0xf073
leaq -0x30(%rbp), %rdi
callq 0x7550
movb %al, -0x609(%rbp)
jmp 0x50bb
movb -0x609(%rbp), %al
testb $0x1, %al
jne 0x50c7
jmp 0x50eb
jmp 0x50eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x6639
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x6621
movq -0x80(%rbp), %rsi
leaq 0x11502(%rip), %rdi     # 0x165f8
movl $0x8, %edx
callq 0x2160
jmp 0x5102
jmp 0x5104
leaq 0x114ed(%rip), %rdi     # 0x165f8
leaq -0x50(%rbp), %rsi
callq 0x2070
movq %rax, -0x618(%rbp)
jmp 0x511d
movq -0x618(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2270
movb %al, -0x619(%rbp)
jmp 0x513b
movb -0x619(%rbp), %al
testb $0x1, %al
jne 0x514a
jmp 0x52d6
leaq -0x100(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x20e0
jmp 0x515c
leaq -0xe0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
movl $0x20, %edx
callq 0x2930
jmp 0x5176
leaq -0x68(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x7580
leaq -0xe0(%rbp), %rdi
callq 0x6980
leaq -0x100(%rbp), %rdi
callq 0x2378
movl $0x0, -0x104(%rbp)
movslq -0x104(%rbp), %rax
movq %rax, -0x628(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x7190
movq %rax, %rcx
movq -0x628(%rbp), %rax
cmpq %rcx, %rax
jae 0x52d1
movslq -0x104(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0x7230
movq %rax, %rdi
leaq 0x9e92(%rip), %rsi      # 0xf07e
callq 0x7550
movb %al, -0x629(%rbp)
jmp 0x51f9
movb -0x629(%rbp), %al
testb $0x1, %al
jne 0x5205
jmp 0x524c
movslq -0x104(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0x7230
movq %rax, %rsi
leaq -0xa0(%rbp), %rdi
callq 0x2040
jmp 0x5226
movb $0x1, -0xc1(%rbp)
jmp 0x524c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x2378
jmp 0x6621
movslq -0x104(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0x7230
movq %rax, %rdi
leaq 0x9e25(%rip), %rsi      # 0xf08b
callq 0x7550
movb %al, -0x62a(%rbp)
jmp 0x5273
movb -0x62a(%rbp), %al
testb $0x1, %al
jne 0x527f
jmp 0x52a7
movslq -0x104(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0x7230
movq %rax, %rsi
leaq -0xc0(%rbp), %rdi
callq 0x2040
jmp 0x52a0
movb $0x1, -0xc2(%rbp)
testb $0x1, -0xc1(%rbp)
je 0x52bb
testb $0x1, -0xc2(%rbp)
je 0x52bb
jmp 0x52d1
jmp 0x52bd
movl -0x104(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x104(%rbp)
jmp 0x51a8
jmp 0x5104
testb $0x1, -0xc1(%rbp)
je 0x65ec
testb $0x1, -0xc2(%rbp)
je 0x65ec
leaq -0xa0(%rbp), %rdi
callq 0x20d0
movq %rax, %rsi
leaq 0x10ee2(%rip), %rdi     # 0x161e8
movl $0x8, %edx
callq 0x2160
jmp 0x5312
jmp 0x5314
leaq 0x10ecd(%rip), %rdi     # 0x161e8
leaq 0x116de(%rip), %rsi     # 0x16a00
callq 0x2070
movq %rax, -0x638(%rbp)
jmp 0x5330
movq -0x638(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2270
movb %al, -0x639(%rbp)
jmp 0x534e
movb -0x639(%rbp), %al
testb $0x1, %al
jne 0x535d
jmp 0x596e
leaq 0x1169c(%rip), %rsi     # 0x16a00
leaq -0x140(%rbp), %rdi
callq 0x20e0
jmp 0x5372
leaq -0x120(%rbp), %rdi
leaq -0x140(%rbp), %rsi
movl $0x20, %edx
callq 0x2930
jmp 0x538c
leaq 0x11815(%rip), %rdi     # 0x16ba8
movq %rdi, -0x648(%rbp)
leaq -0x120(%rbp), %rsi
movq %rsi, -0x650(%rbp)
callq 0x7580
movq -0x650(%rbp), %rdi
callq 0x6980
leaq -0x140(%rbp), %rdi
callq 0x2378
movq -0x648(%rbp), %rdi
movl $0x1, %esi
callq 0x7230
movq %rax, %rsi
leaq 0x11640(%rip), %rdi     # 0x16a20
callq 0x2040
jmp 0x53e7
leaq 0x117ba(%rip), %rdi     # 0x16ba8
xorl %eax, %eax
movl %eax, %esi
callq 0x7230
movq %rax, %rsi
leaq -0x178(%rbp), %rdi
callq 0x20e0
jmp 0x5408
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rsi
movl $0x5f, %edx
callq 0x2930
jmp 0x5422
leaq 0x11797(%rip), %rdi     # 0x16bc0
movq %rdi, -0x658(%rbp)
leaq -0x158(%rbp), %rsi
movq %rsi, -0x660(%rbp)
callq 0x7580
movq -0x660(%rbp), %rdi
callq 0x6980
leaq -0x178(%rbp), %rdi
callq 0x2378
movq -0x658(%rbp), %rdi
movl $0x1, %esi
callq 0x7230
movq %rax, %rsi
leaq -0x2f8(%rbp), %rdi
movl $0x8, %edx
callq 0x2320
jmp 0x5482
leaq 0x11677(%rip), %rsi     # 0x16b00
leaq -0x2f8(%rbp), %rdi
callq 0x75b0
jmp 0x5497
leaq -0x2f8(%rbp), %rdi
callq 0x2100
leaq 0x1181e(%rip), %rdi     # 0x16cc8
leaq 0x1164f(%rip), %rsi     # 0x16b00
callq 0x6fc0
jmp 0x54b8
leaq 0x11561(%rip), %rdi     # 0x16a20
leaq 0x9bd1(%rip), %rsi      # 0xf097
callq 0x7550
movb %al, -0x661(%rbp)
jmp 0x54d3
movb -0x661(%rbp), %al
testb $0x1, %al
jne 0x54df
jmp 0x5545
movl $0x5, 0x1161b(%rip)     # 0x16b04
jmp 0x57da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x2378
jmp 0x6621
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x2378
jmp 0x6621
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x2100
jmp 0x6621
leaq 0x114d4(%rip), %rdi     # 0x16a20
leaq 0x9b49(%rip), %rsi      # 0xf09c
callq 0x7550
movb %al, -0x662(%rbp)
jmp 0x5560
movb -0x662(%rbp), %al
testb $0x1, %al
jne 0x556c
jmp 0x557b
movl $0x7, 0x1158e(%rip)     # 0x16b04
jmp 0x57d8
leaq 0x1149e(%rip), %rdi     # 0x16a20
leaq 0x9b18(%rip), %rsi      # 0xf0a1
callq 0x7550
movb %al, -0x663(%rbp)
jmp 0x5596
movb -0x663(%rbp), %al
testb $0x1, %al
jne 0x55a2
jmp 0x55b1
movl $0x6, 0x11558(%rip)     # 0x16b04
jmp 0x57d6
leaq 0x11468(%rip), %rdi     # 0x16a20
leaq 0x9ae7(%rip), %rsi      # 0xf0a6
callq 0x7550
movb %al, -0x664(%rbp)
jmp 0x55cc
movb -0x664(%rbp), %al
testb $0x1, %al
jne 0x55d8
jmp 0x55e7
movl $0x5, 0x11522(%rip)     # 0x16b04
jmp 0x57d4
leaq 0x11432(%rip), %rdi     # 0x16a20
leaq 0x9ab6(%rip), %rsi      # 0xf0ab
callq 0x7550
movb %al, -0x665(%rbp)
jmp 0x5602
movb -0x665(%rbp), %al
testb $0x1, %al
jne 0x560e
jmp 0x561d
movl $0x4, 0x114ec(%rip)     # 0x16b04
jmp 0x57d2
leaq 0x113fc(%rip), %rdi     # 0x16a20
leaq 0x9a85(%rip), %rsi      # 0xf0b0
callq 0x7550
movb %al, -0x666(%rbp)
jmp 0x5638
movb -0x666(%rbp), %al
testb $0x1, %al
jne 0x5644
jmp 0x5653
movl $0x3, 0x114b6(%rip)     # 0x16b04
jmp 0x57d0
leaq 0x113c6(%rip), %rdi     # 0x16a20
leaq 0x9a54(%rip), %rsi      # 0xf0b5
callq 0x7550
movb %al, -0x667(%rbp)
jmp 0x566e
movb -0x667(%rbp), %al
testb $0x1, %al
jne 0x567a
jmp 0x5689
movl $0x2, 0x11480(%rip)     # 0x16b04
jmp 0x57ce
leaq 0x11390(%rip), %rdi     # 0x16a20
leaq 0x9a23(%rip), %rsi      # 0xf0ba
callq 0x7550
movb %al, -0x668(%rbp)
jmp 0x56a4
movb -0x668(%rbp), %al
testb $0x1, %al
jne 0x56b0
jmp 0x56bf
movl $0x22, 0x1144a(%rip)    # 0x16b04
jmp 0x57cc
leaq 0x1135a(%rip), %rdi     # 0x16a20
leaq 0x99f4(%rip), %rsi      # 0xf0c1
callq 0x7550
movb %al, -0x669(%rbp)
jmp 0x56da
movb -0x669(%rbp), %al
testb $0x1, %al
jne 0x56e6
jmp 0x56f5
movl $0x1ad, 0x11414(%rip)   # imm = 0x1AD
jmp 0x57ca
leaq 0x11324(%rip), %rdi     # 0x16a20
leaq 0x99c5(%rip), %rsi      # 0xf0c8
callq 0x7550
movb %al, -0x66a(%rbp)
jmp 0x5710
movb -0x66a(%rbp), %al
testb $0x1, %al
jne 0x571c
jmp 0x572b
movl $0x17b, 0x113de(%rip)   # imm = 0x17B
jmp 0x57c8
leaq 0x112ee(%rip), %rdi     # 0x16a20
leaq 0x9998(%rip), %rsi      # 0xf0d1
callq 0x7550
movb %al, -0x66b(%rbp)
jmp 0x5746
movb -0x66b(%rbp), %al
testb $0x1, %al
jne 0x5752
jmp 0x575e
movl $0x3, 0x113a8(%rip)     # 0x16b04
jmp 0x57c6
leaq 0x112bb(%rip), %rdi     # 0x16a20
leaq 0x996c(%rip), %rsi      # 0xf0d8
callq 0x7550
movb %al, -0x66c(%rbp)
jmp 0x5779
movb -0x66c(%rbp), %al
testb $0x1, %al
jne 0x5785
jmp 0x5791
movl $0x2, 0x11375(%rip)     # 0x16b04
jmp 0x57c4
leaq 0x11288(%rip), %rdi     # 0x16a20
leaq 0x993e(%rip), %rsi      # 0xf0dd
callq 0x7550
movb %al, -0x66d(%rbp)
jmp 0x57ac
movb -0x66d(%rbp), %al
testb $0x1, %al
jne 0x57b8
jmp 0x57c2
movl $0x2, 0x11342(%rip)     # 0x16b04
jmp 0x57c4
jmp 0x57c6
jmp 0x57c8
jmp 0x57ca
jmp 0x57cc
jmp 0x57ce
jmp 0x57d0
jmp 0x57d2
jmp 0x57d4
jmp 0x57d6
jmp 0x57d8
jmp 0x57da
movl 0x11328(%rip), %eax     # 0x16b08
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x587e
leaq 0x113e0(%rip), %rdi     # 0x16bd8
leaq 0x11301(%rip), %rsi     # 0x16b00
callq 0x6cc0
movq %rax, -0x678(%rbp)
jmp 0x580d
movq -0x678(%rbp), %rdi
leaq 0x112e9(%rip), %rsi     # 0x16b04
callq 0x6fc0
jmp 0x5822
leaq 0x113af(%rip), %rdi     # 0x16bd8
leaq 0x112d0(%rip), %rsi     # 0x16b00
callq 0x6cc0
movq %rax, -0x680(%rbp)
jmp 0x583e
movq -0x680(%rbp), %rdi
movl $0x1, -0x2fc(%rbp)
leaq -0x2fc(%rbp), %rsi
callq 0x75e0
jmp 0x585d
movss 0x112c3(%rip), %xmm0    # 0x16b28
cvtsi2ssl 0x11297(%rip), %xmm1 # 0x16b04
addss %xmm1, %xmm0
movss %xmm0, 0x112af(%rip)    # 0x16b28
jmp 0x591f
movl 0x11284(%rip), %eax     # 0x16b08
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
je 0x591d
leaq 0x1133c(%rip), %rdi     # 0x16bd8
leaq 0x1125d(%rip), %rsi     # 0x16b00
callq 0x6cc0
movq %rax, -0x688(%rbp)
jmp 0x58b1
movq -0x688(%rbp), %rdi
leaq 0x11245(%rip), %rsi     # 0x16b04
callq 0x6fc0
jmp 0x58c6
leaq 0x1130b(%rip), %rdi     # 0x16bd8
leaq 0x1122c(%rip), %rsi     # 0x16b00
callq 0x6cc0
movq %rax, -0x690(%rbp)
jmp 0x58e2
movq -0x690(%rbp), %rdi
movl $0xffffffff, -0x300(%rbp) # imm = 0xFFFFFFFF
leaq -0x300(%rbp), %rsi
callq 0x75e0
jmp 0x5901
movss 0x11223(%rip), %xmm0    # 0x16b2c
cvtsi2ssl 0x111f3(%rip), %xmm1 # 0x16b04
addss %xmm1, %xmm0
movss %xmm0, 0x1120f(%rip)    # 0x16b2c
jmp 0x591f
leaq 0x112b2(%rip), %rdi     # 0x16bd8
leaq 0x111d3(%rip), %rsi     # 0x16b00
callq 0x6cc0
movq %rax, -0x698(%rbp)
jmp 0x593b
movq -0x698(%rbp), %rdi
movl $0x0, -0x304(%rbp)
leaq -0x304(%rbp), %rsi
callq 0x75e0
jmp 0x595a
movl 0x111a8(%rip), %eax     # 0x16b08
addl $0x1, %eax
movl %eax, 0x1119f(%rip)     # 0x16b08
jmp 0x5314
leaq 0x10873(%rip), %rdi     # 0x161e8
callq 0x2080
jmp 0x597c
cmpl $0xd08, 0x11182(%rip)   # imm = 0xD08
jne 0x59df
leaq 0x10e71(%rip), %rdi     # 0x16800
leaq 0x974c(%rip), %rsi      # 0xf0e2
movl $0x10, %edx
callq 0x2050
jmp 0x59a2
leaq 0x10e57(%rip), %rdi     # 0x16800
leaq 0x975d(%rip), %rsi      # 0xf10d
callq 0x21e0
movq %rax, -0x6a0(%rbp)
jmp 0x59be
movq -0x6a0(%rbp), %rdi
movq 0x105ec(%rip), %rsi     # 0x15fb8
callq 0x2230
jmp 0x59d3
movb $0x1, 0x111cc(%rip)     # 0x16ba6
jmp 0x5b06
cmpl $0x8461f, 0x1111f(%rip) # imm = 0x8461F
jne 0x5a42
leaq 0x10e0e(%rip), %rdi     # 0x16800
leaq 0x9733(%rip), %rsi      # 0xf12c
movl $0x10, %edx
callq 0x2050
jmp 0x5a05
leaq 0x10df4(%rip), %rdi     # 0x16800
leaq 0x9744(%rip), %rsi      # 0xf157
callq 0x21e0
movq %rax, -0x6a8(%rbp)
jmp 0x5a21
movq -0x6a8(%rbp), %rdi
movq 0x10589(%rip), %rsi     # 0x15fb8
callq 0x2230
jmp 0x5a36
movb $0x1, 0x11169(%rip)     # 0x16ba6
jmp 0x5b04
cmpl $0x68718, 0x110bc(%rip) # imm = 0x68718
jne 0x5aa2
leaq 0x10dab(%rip), %rdi     # 0x16800
leaq 0x971a(%rip), %rsi      # 0xf176
movl $0x10, %edx
callq 0x2050
jmp 0x5a68
leaq 0x10d91(%rip), %rdi     # 0x16800
leaq 0x972b(%rip), %rsi      # 0xf1a1
callq 0x21e0
movq %rax, -0x6b0(%rbp)
jmp 0x5a84
movq -0x6b0(%rbp), %rdi
movq 0x10526(%rip), %rsi     # 0x15fb8
callq 0x2230
jmp 0x5a99
movb $0x1, 0x11106(%rip)     # 0x16ba6
jmp 0x5b02
cmpl $0xce198, 0x1105c(%rip) # imm = 0xCE198
jne 0x5b00
leaq 0x10d4b(%rip), %rdi     # 0x16800
leaq 0x9704(%rip), %rsi      # 0xf1c0
movl $0x10, %edx
callq 0x2050
jmp 0x5ac8
leaq 0x10d31(%rip), %rdi     # 0x16800
leaq 0x9715(%rip), %rsi      # 0xf1eb
callq 0x21e0
movq %rax, -0x6b8(%rbp)
jmp 0x5ae4
movq -0x6b8(%rbp), %rdi
movq 0x104c6(%rip), %rsi     # 0x15fb8
callq 0x2230
jmp 0x5af9
movb $0x1, 0x110a6(%rip)     # 0x16ba6
jmp 0x5b02
jmp 0x5b04
jmp 0x5b06
leaq -0xc0(%rbp), %rdi
callq 0x20d0
movq %rax, %rsi
leaq 0x108d4(%rip), %rdi     # 0x163f0
movl $0x8, %edx
callq 0x2160
jmp 0x5b28
jmp 0x5b2a
leaq 0x108bf(%rip), %rdi     # 0x163f0
leaq 0x10f08(%rip), %rsi     # 0x16a40
callq 0x2070
movq %rax, -0x6c0(%rbp)
jmp 0x5b46
movq -0x6c0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2270
movb %al, -0x6c1(%rbp)
jmp 0x5b64
movb -0x6c1(%rbp), %al
testb $0x1, %al
jne 0x5b73
jmp 0x6025
movl $0x0, 0x10f93(%rip)     # 0x16b10
movl $0x0, 0x10f8d(%rip)     # 0x16b14
leaq 0x10eb2(%rip), %rsi     # 0x16a40
xorl %eax, %eax
movl %eax, %edx
leaq -0x328(%rbp), %rdi
movl $0x3, %ecx
callq 0x2210
jmp 0x5ba5
leaq 0x9661(%rip), %rsi      # 0xf20d
leaq -0x328(%rbp), %rdi
callq 0x7550
movb %al, -0x6c2(%rbp)
jmp 0x5bc0
leaq -0x328(%rbp), %rdi
callq 0x2378
movb -0x6c2(%rbp), %al
testb $0x1, %al
jne 0x5bdb
jmp 0x6020
movl $0x0, -0x32c(%rbp)
movl -0x32c(%rbp), %eax
addl $0x4, %eax
movslq %eax, %rdx
leaq 0x10e48(%rip), %rsi     # 0x16a40
leaq -0x350(%rbp), %rdi
movl $0x1, %ecx
callq 0x2210
jmp 0x5c0b
leaq 0x9630(%rip), %rsi      # 0xf242
leaq -0x350(%rbp), %rdi
callq 0x7610
movb %al, -0x6c3(%rbp)
jmp 0x5c26
leaq -0x350(%rbp), %rdi
callq 0x2378
movb -0x6c3(%rbp), %al
testb $0x1, %al
jne 0x5c3e
jmp 0x5c91
movl -0x32c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x32c(%rbp)
movl %eax, -0x32c(%rbp)
jmp 0x5be5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x328(%rbp), %rdi
callq 0x2378
jmp 0x6621
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x350(%rbp), %rdi
callq 0x2378
jmp 0x6621
movslq -0x32c(%rbp), %rcx
leaq 0x10da1(%rip), %rsi     # 0x16a40
leaq -0x370(%rbp), %rdi
movl $0x4, %edx
callq 0x2210
jmp 0x5cb2
leaq 0x10dc7(%rip), %rdi     # 0x16a80
leaq -0x370(%rbp), %rsi
movq %rsi, -0x6d0(%rbp)
callq 0x2260
movq -0x6d0(%rbp), %rdi
callq 0x2378
leaq 0x10711(%rip), %rdi     # 0x163f0
leaq 0x10d7a(%rip), %rsi     # 0x16a60
callq 0x2070
jmp 0x5ced
jmp 0x5cef
leaq 0x10d6a(%rip), %rsi     # 0x16a60
xorl %eax, %eax
movl %eax, %edx
leaq -0x390(%rbp), %rdi
movl $0x6, %ecx
callq 0x2210
jmp 0x5d0d
leaq 0x94f6(%rip), %rsi      # 0xf20a
leaq -0x390(%rbp), %rdi
callq 0x7610
movb %al, -0x6d1(%rbp)
jmp 0x5d28
leaq -0x390(%rbp), %rdi
callq 0x2378
movb -0x6d1(%rbp), %al
testb $0x1, %al
jne 0x5d43
jmp 0x5fbc
movl $0x0, -0x394(%rbp)
movl -0x394(%rbp), %eax
incl %eax
movslq %eax, %rdx
leaq 0x10d01(%rip), %rsi     # 0x16a60
leaq -0x3b8(%rbp), %rdi
movl $0x1, %ecx
callq 0x2210
jmp 0x5d72
leaq 0x94c9(%rip), %rsi      # 0xf242
leaq -0x3b8(%rbp), %rdi
callq 0x7610
movb %al, -0x6d2(%rbp)
jmp 0x5d8d
leaq -0x3b8(%rbp), %rdi
callq 0x2378
movb -0x6d2(%rbp), %al
testb $0x1, %al
jne 0x5da5
jmp 0x5df8
movl -0x394(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x394(%rbp)
movl %eax, -0x394(%rbp)
jmp 0x5d4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x2378
jmp 0x6621
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x3b8(%rbp), %rdi
callq 0x2378
jmp 0x6621
movslq -0x394(%rbp), %rcx
leaq 0x10c5a(%rip), %rsi     # 0x16a60
leaq -0x3f0(%rbp), %rdi
movl $0x1, %edx
callq 0x2210
jmp 0x5e19
leaq -0x3d0(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
movl $0x5f, %edx
callq 0x2930
jmp 0x5e33
leaq 0x10d6e(%rip), %rdi     # 0x16ba8
movq %rdi, -0x6e0(%rbp)
leaq -0x3d0(%rbp), %rsi
movq %rsi, -0x6e8(%rbp)
callq 0x7580
movq -0x6e8(%rbp), %rdi
callq 0x6980
leaq -0x3f0(%rbp), %rdi
callq 0x2378
movq -0x6e0(%rbp), %rdi
movl $0x1, %esi
callq 0x7230
movq %rax, %rsi
leaq -0x570(%rbp), %rdi
movl $0x8, %edx
callq 0x2320
jmp 0x5e93
leaq 0x10c72(%rip), %rsi     # 0x16b0c
leaq -0x570(%rbp), %rdi
callq 0x75b0
jmp 0x5ea8
leaq -0x570(%rbp), %rdi
callq 0x2100
leaq 0x10d4d(%rip), %rdi     # 0x16c08
leaq 0x10c4a(%rip), %rsi     # 0x16b0c
callq 0x70b0
movq %rax, -0x6f0(%rbp)
jmp 0x5ed0
movq -0x6f0(%rbp), %rdi
leaq 0x10ba2(%rip), %rsi     # 0x16a80
callq 0x6b40
jmp 0x5ee5
leaq 0x10d4c(%rip), %rdi     # 0x16c38
leaq 0x10b8d(%rip), %rsi     # 0x16a80
callq 0x6ee0
movq %rax, -0x6f8(%rbp)
jmp 0x5f01
movq -0x6f8(%rbp), %rdi
leaq 0x10bfd(%rip), %rsi     # 0x16b0c
callq 0x6fc0
jmp 0x5f16
leaq 0x10cbb(%rip), %rdi     # 0x16bd8
leaq 0x10be8(%rip), %rsi     # 0x16b0c
callq 0x6cc0
movq %rax, -0x700(%rbp)
jmp 0x5f32
movq -0x700(%rbp), %rdi
movl $0x1, %esi
callq 0x6ca0
cmpl $0x1, (%rax)
jne 0x5f93
movl 0x10bc2(%rip), %eax     # 0x16b10
addl $0x1, %eax
movl %eax, 0x10bb9(%rip)     # 0x16b10
jmp 0x5fa2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x2378
jmp 0x6621
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x570(%rbp), %rdi
callq 0x2100
jmp 0x6621
movl 0x10b7b(%rip), %eax     # 0x16b14
addl $0x1, %eax
movl %eax, 0x10b72(%rip)     # 0x16b14
leaq 0x10447(%rip), %rdi     # 0x163f0
leaq 0x10ab0(%rip), %rsi     # 0x16a60
callq 0x2070
jmp 0x5fb7
jmp 0x5cef
leaq 0x10cd5(%rip), %rdi     # 0x16c98
leaq 0x10ab6(%rip), %rsi     # 0x16a80
callq 0x6ee0
movq %rax, -0x708(%rbp)
jmp 0x5fd8
movq -0x708(%rbp), %rdi
leaq 0x10b2a(%rip), %rsi     # 0x16b10
callq 0x6fc0
jmp 0x5fed
leaq 0x10ca4(%rip), %rdi     # 0x16c98
leaq 0x10a85(%rip), %rsi     # 0x16a80
callq 0x6ee0
movq %rax, -0x710(%rbp)
jmp 0x6009
movq -0x710(%rbp), %rdi
leaq 0x10afd(%rip), %rsi     # 0x16b14
callq 0x6fc0
jmp 0x601e
jmp 0x6020
jmp 0x5b2a
leaq 0x103c4(%rip), %rdi     # 0x163f0
callq 0x2080
jmp 0x6033
leaq 0x10bce(%rip), %rdi     # 0x16c08
callq 0x7640
movq %rax, -0x578(%rbp)
leaq 0x10bbb(%rip), %rdi     # 0x16c08
callq 0x76a0
movq %rax, -0x580(%rbp)
leaq -0x578(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x7670
testb $0x1, %al
jne 0x6075
jmp 0x61d9
leaq -0x578(%rbp), %rdi
callq 0x76d0
movq %rax, %rsi
leaq 0x10b7d(%rip), %rdi     # 0x16c08
callq 0x70b0
movq %rax, -0x718(%rbp)
jmp 0x6099
leaq -0x578(%rbp), %rdi
callq 0x76d0
movq %rax, %rsi
leaq 0x10b59(%rip), %rdi     # 0x16c08
callq 0x70b0
movq %rax, -0x720(%rbp)
jmp 0x60bd
movq -0x720(%rbp), %rdi
callq 0x77c0
movq %rax, -0x598(%rbp)
leaq -0x578(%rbp), %rdi
callq 0x76d0
movq %rax, %rsi
leaq 0x10b22(%rip), %rdi     # 0x16c08
callq 0x70b0
movq %rax, -0x728(%rbp)
jmp 0x60f4
movq -0x728(%rbp), %rdi
callq 0x77f0
movq %rax, -0x5a0(%rbp)
movq -0x598(%rbp), %rdi
movq -0x5a0(%rbp), %rsi
callq 0x7780
movq %rax, -0x730(%rbp)
jmp 0x6123
movq -0x730(%rbp), %rax
movq %rax, -0x590(%rbp)
leaq -0x588(%rbp), %rdi
leaq -0x590(%rbp), %rsi
callq 0x7820
leaq -0x578(%rbp), %rdi
callq 0x76d0
movq %rax, %rsi
leaq 0x10aae(%rip), %rdi     # 0x16c08
callq 0x70b0
movq %rax, -0x738(%rbp)
jmp 0x6168
movq -0x738(%rbp), %rdi
callq 0x77f0
movq %rax, -0x5b0(%rbp)
leaq -0x5a8(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x7820
movq -0x718(%rbp), %rdi
movq -0x588(%rbp), %rsi
movq -0x5a8(%rbp), %rdx
callq 0x76f0
movq %rax, -0x740(%rbp)
jmp 0x61b1
movq -0x740(%rbp), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x578(%rbp), %rdi
xorl %esi, %esi
callq 0x7860
movq %rax, -0x5c0(%rbp)
jmp 0x6046
movl $0x0, -0x5c4(%rbp)
movslq -0x5c4(%rbp), %rax
movq %rax, -0x748(%rbp)
leaq 0x10ad0(%rip), %rdi     # 0x16cc8
callq 0x6c80
movq %rax, %rcx
movq -0x748(%rbp), %rax
cmpq %rcx, %rax
jae 0x64a6
movslq -0x5c4(%rbp), %rsi
leaq 0x10aaa(%rip), %rdi     # 0x16cc8
callq 0x6ca0
movl (%rax), %eax
movl %eax, -0x5c8(%rbp)
movl $0x0, 0x10917(%rip)     # 0x16b4c
movl $0x0, -0x5cc(%rbp)
movslq -0x5cc(%rbp), %rax
movq %rax, -0x758(%rbp)
leaq 0x109b4(%rip), %rdi     # 0x16c08
leaq -0x5c8(%rbp), %rsi
callq 0x70b0
movq %rax, -0x750(%rbp)
jmp 0x6269
movq -0x750(%rbp), %rdi
callq 0x7190
movq %rax, %rcx
movq -0x758(%rbp), %rax
cmpq %rcx, %rax
jae 0x642e
leaq 0x10979(%rip), %rdi     # 0x16c08
leaq -0x5c8(%rbp), %rsi
callq 0x70b0
movq %rax, -0x760(%rbp)
jmp 0x62a4
movq -0x760(%rbp), %rdi
movslq -0x5cc(%rbp), %rsi
callq 0x71b0
movq %rax, -0x768(%rbp)
jmp 0x62c0
movq -0x768(%rbp), %rsi
leaq 0x107d2(%rip), %rdi     # 0x16aa0
callq 0x2040
jmp 0x62d5
leaq 0x109bc(%rip), %rdi     # 0x16c98
leaq 0x107bd(%rip), %rsi     # 0x16aa0
callq 0x6ee0
movq %rax, -0x770(%rbp)
jmp 0x62f1
movq -0x770(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7070
movq %rax, -0x778(%rbp)
jmp 0x630a
movq -0x778(%rbp), %rax
movl (%rax), %eax
movl %eax, 0x1082b(%rip)     # 0x16b44
leaq 0x10978(%rip), %rdi     # 0x16c98
leaq 0x10779(%rip), %rsi     # 0x16aa0
callq 0x6ee0
movq %rax, -0x780(%rbp)
jmp 0x6335
movq -0x780(%rbp), %rdi
movl $0x1, %esi
callq 0x7070
movq %rax, -0x788(%rbp)
jmp 0x634f
movq -0x788(%rbp), %rax
movl (%rax), %eax
movl %eax, 0x107ea(%rip)     # 0x16b48
leaq 0x10873(%rip), %rdi     # 0x16bd8
leaq -0x5c8(%rbp), %rsi
callq 0x6cc0
movq %rax, -0x790(%rbp)
jmp 0x637a
movq -0x790(%rbp), %rdi
movl $0x1, %esi
callq 0x7070
movq %rax, -0x798(%rbp)
jmp 0x6394
movq -0x798(%rbp), %rax
movl (%rax), %eax
movl %eax, 0x1079d(%rip)     # 0x16b40
cmpl $0x1, 0x10796(%rip)     # 0x16b40
jne 0x63e2
cmpl $0x1, 0x10791(%rip)     # 0x16b44
jne 0x63c6
movl 0x10791(%rip), %eax     # 0x16b4c
addl $0x1, %eax
movl %eax, 0x10788(%rip)     # 0x16b4c
jmp 0x63e0
cmpl $0x0, 0x1077b(%rip)     # 0x16b48
jne 0x63de
movl 0x10777(%rip), %eax     # 0x16b4c
subl $0x1, %eax
movl %eax, 0x1076e(%rip)     # 0x16b4c
jmp 0x63e0
jmp 0x6418
cmpl $0x0, 0x1075b(%rip)     # 0x16b44
jne 0x63fc
movl 0x1075b(%rip), %eax     # 0x16b4c
subl $0x1, %eax
movl %eax, 0x10752(%rip)     # 0x16b4c
jmp 0x6416
cmpl $0x1, 0x10745(%rip)     # 0x16b48
jne 0x6414
movl 0x10741(%rip), %eax     # 0x16b4c
addl $0x1, %eax
movl %eax, 0x10738(%rip)     # 0x16b4c
jmp 0x6416
jmp 0x6418
jmp 0x641a
movl -0x5cc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5cc(%rbp)
jmp 0x623f
leaq 0x10833(%rip), %rdi     # 0x16c68
leaq 0x10710(%rip), %rsi     # 0x16b4c
callq 0x6cc0
movq %rax, -0x7a0(%rbp)
jmp 0x644a
movq -0x7a0(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0x6fc0
jmp 0x645f
leaq 0x10772(%rip), %rdi     # 0x16bd8
leaq -0x5c8(%rbp), %rsi
callq 0x6cc0
movq %rax, -0x7a8(%rbp)
jmp 0x647b
movq -0x7a8(%rbp), %rdi
leaq 0x106c3(%rip), %rsi     # 0x16b4c
callq 0x6fc0
jmp 0x6490
jmp 0x6492
movl -0x5c4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c4(%rbp)
jmp 0x61e3
leaq 0x107eb(%rip), %rdi     # 0x16c98
callq 0x6c00
movq %rax, -0x5d8(%rbp)
leaq 0x107d8(%rip), %rdi     # 0x16c98
callq 0x6c50
movq %rax, -0x5e0(%rbp)
leaq -0x5d8(%rbp), %rdi
leaq -0x5e0(%rbp), %rsi
callq 0x6e90
testb $0x1, %al
jne 0x64e8
jmp 0x659f
leaq -0x5d8(%rbp), %rdi
callq 0x6ec0
movq %rax, %rsi
leaq 0x1079a(%rip), %rdi     # 0x16c98
callq 0x6ee0
movq %rax, -0x7b0(%rbp)
jmp 0x650c
movq -0x7b0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6ca0
cmpl $0x0, (%rax)
je 0x6583
leaq -0x5d8(%rbp), %rdi
callq 0x6ec0
movq %rax, %rsi
leaq 0x10761(%rip), %rdi     # 0x16c98
callq 0x6ee0
movq %rax, -0x7b8(%rbp)
jmp 0x6545
movq -0x7b8(%rbp), %rdi
movl $0x1, %esi
callq 0x6ca0
cmpl $0x0, (%rax)
je 0x6583
movss 0x8ac1(%rip), %xmm0     # 0xf024
addss 0x105b9(%rip), %xmm0    # 0x16b24
movss %xmm0, 0x105b1(%rip)    # 0x16b24
movss 0x105a9(%rip), %xmm0    # 0x16b24
movss %xmm0, 0x1059d(%rip)    # 0x16b20
jmp 0x6585
leaq -0x5d8(%rbp), %rdi
xorl %esi, %esi
callq 0x7030
movq %rax, -0x5e8(%rbp)
jmp 0x64b9
movl $0x1, 0xfc1f(%rip)      # 0x161c8
cmpl $0x9, 0xfc18(%rip)      # 0x161c8
jge 0x65ea
cvttss2si 0x1056a(%rip), %edi # 0x16b24
callq 0x49c0
movl %eax, -0x7bc(%rbp)
jmp 0x65c7
movl -0x7bc(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, 0x1054b(%rip)    # 0x16b24
movl 0xfbe9(%rip), %eax      # 0x161c8
addl $0x1, %eax
movl %eax, 0xfbe0(%rip)      # 0x161c8
jmp 0x65a9
jmp 0x65ec
leaq -0xc0(%rbp), %rdi
callq 0x2378
leaq -0xa0(%rbp), %rdi
callq 0x2378
leaq -0x68(%rbp), %rdi
callq 0x6980
leaq -0x50(%rbp), %rdi
callq 0x2378
leaq -0x30(%rbp), %rdi
callq 0x2378
jmp 0x6659
leaq -0xc0(%rbp), %rdi
callq 0x2378
leaq -0xa0(%rbp), %rdi
callq 0x2378
leaq -0x68(%rbp), %rdi
callq 0x6980
leaq -0x50(%rbp), %rdi
callq 0x2378
leaq -0x30(%rbp), %rdi
callq 0x2378
jmp 0x694a
jmp 0x665b
jmp 0x665d
callq 0x2170
movl %eax, -0x5ec(%rbp)
movl -0x5ec(%rbp), %eax
subl 0xfb70(%rip), %eax      # 0x161e4
cvtsi2sd %eax, %xmm0
movsd 0x8998(%rip), %xmm1     # 0xf018
divsd %xmm1, %xmm0
movsd 0x8984(%rip), %xmm1     # 0xf010
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x5f0(%rbp)
movl -0x5f0(%rbp), %eax
movl $0x36ee80, %ecx         # imm = 0x36EE80
cltd
idivl %ecx
movl %eax, -0x5f4(%rbp)
movl -0x5f0(%rbp), %eax
imull $0x36ee80, -0x5f4(%rbp), %ecx # imm = 0x36EE80
subl %ecx, %eax
movl $0xea60, %ecx           # imm = 0xEA60
cltd
idivl %ecx
movl %eax, -0x5f8(%rbp)
movl -0x5f0(%rbp), %eax
imull $0xea60, -0x5f8(%rbp), %ecx # imm = 0xEA60
subl %ecx, %eax
movl $0x3e8, %ecx            # imm = 0x3E8
cltd
idivl %ecx
movl %eax, -0x5fc(%rbp)
movq 0xf8db(%rip), %rdi      # 0x15fd0
leaq 0x8b15(%rip), %rsi      # 0xf211
callq 0x21e0
movq %rax, %rdi
movq 0xf8ad(%rip), %rsi      # 0x15fb8
callq 0x2230
movq 0xf8b9(%rip), %rdi      # 0x15fd0
leaq 0x8b21(%rip), %rsi      # 0xf23f
callq 0x21e0
movq %rax, %rdi
movl -0x5f4(%rbp), %esi
callq 0x2340
movq %rax, %rdi
leaq 0x8ae6(%rip), %rsi      # 0xf221
callq 0x21e0
movq %rax, %rdi
movl -0x5f8(%rbp), %esi
callq 0x2340
movq %rax, %rdi
leaq 0x8acf(%rip), %rsi      # 0xf227
callq 0x21e0
movq %rax, %rdi
movl -0x5fc(%rbp), %esi
callq 0x2340
movq %rax, %rdi
movq 0xf843(%rip), %rsi      # 0x15fb8
callq 0x2230
movq 0xf84f(%rip), %rdi      # 0x15fd0
leaq 0x8aa5(%rip), %rsi      # 0xf22d
callq 0x21e0
movq %rax, %rdi
movl -0x5f0(%rbp), %esi
callq 0x2340
movq %rax, %rdi
movq 0xf813(%rip), %rsi      # 0x15fb8
callq 0x2230
testb $0x1, 0x103f5(%rip)     # 0x16ba6
je 0x692b
leaq 0x10042(%rip), %rdi     # 0x16800
leaq 0x8a68(%rip), %rsi      # 0xf22d
callq 0x21e0
movq %rax, %rdi
leaq 0x8a6a(%rip), %rsi      # 0xf23e
callq 0x21e0
movq %rax, %rdi
movl -0x5f4(%rbp), %esi
callq 0x2340
movq %rax, %rdi
leaq 0x8a30(%rip), %rsi      # 0xf221
callq 0x21e0
movq %rax, %rdi
movl -0x5f8(%rbp), %esi
callq 0x2340
movq %rax, %rdi
leaq 0x8a19(%rip), %rsi      # 0xf227
callq 0x21e0
movq %rax, %rdi
movl -0x5fc(%rbp), %esi
callq 0x2340
movq %rax, %rdi
movq 0xf78d(%rip), %rsi      # 0x15fb8
callq 0x2230
leaq 0xffc9(%rip), %rdi      # 0x16800
leaq 0x8a06(%rip), %rsi      # 0xf244
callq 0x21e0
movq %rax, %rdi
movss 0x102d2(%rip), %xmm0    # 0x16b20
callq 0x21a0
movq %rax, %rdi
movq 0xf75b(%rip), %rsi      # 0x15fb8
callq 0x2230
leaq 0xff97(%rip), %rdi      # 0x16800
leaq 0x89e3(%rip), %rsi      # 0xf253
callq 0x21e0
movq %rax, %rdi
movss 0x102a4(%rip), %xmm0    # 0x16b24
callq 0x21a0
movq %rax, %rdi
movq 0xf729(%rip), %rsi      # 0x15fb8
callq 0x2230
leaq 0xff65(%rip), %rdi      # 0x16800
leaq 0x89bd(%rip), %rsi      # 0xf25f
callq 0x21e0
movq %rax, %rdi
movss 0x1026e(%rip), %xmm0    # 0x16b20
subss 0x1026a(%rip), %xmm0    # 0x16b24
divss 0x1025e(%rip), %xmm0    # 0x16b20
movss 0x8756(%rip), %xmm1     # 0xf020
mulss %xmm1, %xmm0
callq 0x21a0
movq %rax, %rdi
leaq 0x8996(%rip), %rsi      # 0xf273
callq 0x21e0
movq %rax, %rdi
movq 0xf6cc(%rip), %rsi      # 0x15fb8
callq 0x2230
leaq 0xff08(%rip), %rdi      # 0x16800
leaq 0x8976(%rip), %rsi      # 0xf275
callq 0x21e0
movq %rax, %rdi
movss 0x10219(%rip), %xmm0    # 0x16b28
divss 0x10215(%rip), %xmm0    # 0x16b2c
callq 0x21a0
movq %rax, %rdi
movq 0xf692(%rip), %rsi      # 0x15fb8
callq 0x2230
leaq 0xfece(%rip), %rdi      # 0x16800
callq 0x22b0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x7c0, %rsp            # imm = 0x7C0
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x2350
nopw %cs:(%rax,%rax)
nopl (%rax)