// File: /workspace/github_cpp_makefile_star2_O3/AraKhachatryan[P]GraphAlgo/main.cpp
// Function: main
int main()
{
	// Printing a headline in terminal, used namespace termianl for text colors
	std::cout << std::endl;
	std::cout << "~~~~~~~~~~~~~~~ "
			  << terminal::TEXT_BOLD << terminal::TEXTCOLOR_BLUE
			  << "GraphAlgo: Algorithms library for planar graphs."
			  << terminal::RESET_ALL
			  << "~~~~~~~~~~~~~~~" << std::endl;
	
	// Initialize an empty graph object
	GraphAlgo::graph g;

	// Build a graph via adding edges
	g.add_edge(1, 2);
	g.add_edge(1, 4);	
	g.add_edge(2, 4);
	g.add_edge(2, 5);
	g.add_edge(3, 4);
	g.add_edge(3, 6);
	g.add_edge(3, 12);
	g.add_edge(3, 13);
	g.add_edge(4, 6);
	g.add_edge(4, 7);
	g.add_edge(5, 7);
	g.add_edge(6, 11);
	g.add_edge(6, 12);
	g.add_edge(7, 10);
	g.add_edge(7, 11);
	g.add_edge(8, 10);
	g.add_edge(8, 16);
	g.add_edge(9, 10);
	g.add_edge(9, 11);
	g.add_edge(9, 15);
	g.add_edge(10, 16);
	g.add_edge(11, 14);
	g.add_edge(12, 13);
	g.add_edge(14, 15);
	g.add_edge(15, 16);
	
	
	// Drawing a graph on terminal for visualisation
	draw_graph( graph_data );
	
	
	std::cout << "Printing graph as adjacency-list:" << std::endl;
	g.print_neighborhood();
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DFS Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	// making dfs object and starting the algorithm from vertex 1 in graph g
	GraphAlgo::dfs depth_first(g, 1);
	
	GraphAlgo::graph g_out_dfs;
	g_out_dfs = depth_first();
	
	
	std::cout << "Executing DFS algorithm on initial graph with start vertex 1" << std::endl;
	// Drawing a graph on terminal for DFS Algorithm visualisation
	draw_graph( graph_data_dfs );	
	
	
	std::cout << "Print DFS algorithm output as adjacency-list:" << std::endl;
	g_out_dfs.print_neighborhood();
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~ Connectivity Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	GraphAlgo::graph g_con = g;   // copy intitial graph		
	g_con.remove_vertex(7);       // remove vertex for disconecting a graph
	g_con.remove_edge(6, 11);     // remove edge for disconecting a graph
	
	std::cout << "Vertex 7 and edge (6, 11) removed from initial graph.";
	std::cout << std::endl;
//	g_con.print_neighborhood();
	
	
	// Drawing a graph on terminal for Connectivity visualisation
	draw_graph( graph_data_connectivity );	
	
	
	// making connectivity object and starting the algorithm
	GraphAlgo::connectivity con(g_con);
	
	if( !con.is_connected() )
	{
		std::cout << "Graph is not connected." << std::endl;
	} else {
		std::cout << "Graph not connected." << std::endl;
	}
	
	GraphAlgo::graphs con_out;
	con_out = con();
	
	std::cout << "Printing disconected graph's conected components:";
	std::cout << std::endl;
	
	GraphAlgo::graphs::const_iterator c_it = con_out.begin();
	for( ; c_it != con_out.end(); ++c_it) 
	{	
		std::cout << "+++++++++++++++++++++++" << std::endl;
		c_it->print_neighborhood();
	}
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~ BiConnectivity Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	 
	GraphAlgo::graph g_bicon = g;  // copy intitial graph
	g_bicon.remove_edge(6, 11);    // for making graph not biconected
	
	std::cout << "From initial graph is removed edge(6, 11)." << std::endl;
//	g_bicon.print_neighborhood();
	
	
	// Drawing a graph on terminal for BiConnectivity visualisation
	draw_graph( graph_data_biconnectivity );	
	
	
	// making biconnectivity object and starting the algorithm
	GraphAlgo::biconnectivity bicon( g_bicon );
	
	if ( !bicon.is_biconnected() ) 
	{
		std::cout << "Graph is not bicoconnected." << std::endl;
		// Print cutvertices
		bicon.print_cutvertices();
	} else {
		std::cout << "Graph is bicoconnected." << std::endl;
	}
	
	GraphAlgo::graphs bicon_out;
	bicon_out = bicon();
	
	std::cout << "Printing graph's biconected components:" << std::endl;
	GraphAlgo::graphs::const_iterator b_it = bicon_out.begin();
	for( ; b_it != bicon_out.end(); ++b_it) 
	{
		std::cout << "+++++++++++++++++++++++" << std::endl;
		b_it->print_neighborhood();
	}
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dijkstra's Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	// making dijkstra object from initial graph g
	GraphAlgo::dijkstra dijk(g);
	
	// 
	dijk.set_edge_weight(1, 2, 1);
	dijk.set_edge_weight(1, 4, 5);	
	dijk.set_edge_weight(2, 4, 3);
	dijk.set_edge_weight(2, 5, 2);
	dijk.set_edge_weight(3, 4, 4);
	dijk.set_edge_weight(3, 6, 2);
	dijk.set_edge_weight(3, 12, 3);
	dijk.set_edge_weight(3, 13, 1);
	dijk.set_edge_weight(4, 6, 6);
	dijk.set_edge_weight(4, 7, 3);
	dijk.set_edge_weight(5, 7, 1);
	dijk.set_edge_weight(6, 11, 5);
	dijk.set_edge_weight(6, 12, 1);
	dijk.set_edge_weight(7, 10, 2);
	dijk.set_edge_weight(7, 11, 9);
	dijk.set_edge_weight(8, 10, 1);
	dijk.set_edge_weight(8, 16, 1);
	dijk.set_edge_weight(9, 10, 3);
	dijk.set_edge_weight(9, 11, 4);
	dijk.set_edge_weight(9, 15, 2);
	dijk.set_edge_weight(10, 16, 3);
	dijk.set_edge_weight(11, 14, 1);
	dijk.set_edge_weight(12, 13, 2);
	dijk.set_edge_weight(14, 15, 1);
	dijk.set_edge_weight(15, 16, 2);
	
	
	// Drawing a graph on terminal for Dijkstra's Algorithm visualisation
	draw_graph( graph_data_dijkstra);	
	

	dijk.shortest_paths_from(1);
	dijk.get_shortest_path_to(14);
	dijk.print_path();
	std::cout << std::endl;
	
	// another shortest path: from 1 to 9
	dijk.get_shortest_path_to(9);
	dijk.print_path();
	std::cout << std::endl;

	// another shortest path: from 13 to 8
	dijk.shortest_paths_from(13);
	dijk.get_shortest_path_to(8);
	dijk.print_path();


	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	
	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x760, %rsp            # imm = 0x760
movq 0x8309(%rip), %r14      # 0x11fd8
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x381b(%rip), %rsi      # 0xd518
movl $0x10, %edx
movq %r14, %rdi
callq 0x2180
leaq 0x3bec(%rip), %rbx      # 0xd8fd
movl $0x2, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2180
movq %r14, %rdi
movl $0x1, %esi
callq 0x21f0
movq %rax, %r15
leaq 0x3bc8(%rip), %r14      # 0xd900
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x2180
movl $0x2, %edx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x2180
movq %r15, %rdi
movl $0x22, %esi
callq 0x21f0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x2180
leaq 0x37aa(%rip), %rsi      # 0xd529
movl $0x30, %edx
movq %r15, %rdi
callq 0x2180
movl $0x2, %edx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x2180
movq %r15, %rdi
xorl %esi, %esi
callq 0x21f0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x2180
leaq 0x39b4(%rip), %rsi      # 0xd774
movl $0xf, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x48(%rsp), %rbx
movq %rbx, %rdi
callq 0x8b12
leaq 0x288(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x2, (%rdx)
movq %rbx, %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x5, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0xa, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0xb, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0xc, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0xe, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x288(%rsp), %rsi
movl $0xf, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8464
leaq 0x7f74(%rip), %rdi      # 0x12130
callq 0xb37e
movq 0x7e10(%rip), %rbx      # 0x11fd8
leaq 0x338b(%rip), %rsi      # 0xd55a
movl $0x21, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7dde(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x48(%rsp), %rdi
callq 0x8be6
leaq 0x288(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xa245
callq 0x2040
cmpl $0x4, (%rax)
je 0xa22b
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7d75(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x7d37(%rip), %rbx      # 0x11fd8
leaq 0x32d4(%rip), %rsi      # 0xd57c
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7d05(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x288(%rsp), %rdx
movl $0x1, (%rdx)
leaq 0x628(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x5f4e
leaq 0x520(%rsp), %rdi
callq 0x8b12
leaq 0x628(%rsp), %rdi
callq 0x5e98
leaq 0x520(%rsp), %rdi
movq %rax, %rsi
callq 0x8b78
movq 0x7c7d(%rip), %rbx      # 0x11fd8
leaq 0x326a(%rip), %rsi      # 0xd5cc
movl $0x3c, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7c4b(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x7da7(%rip), %rdi      # 0x12148
callq 0xb37e
movq 0x7c2b(%rip), %rbx      # 0x11fd8
leaq 0x3255(%rip), %rsi      # 0xd609
movl $0x2d, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7bf9(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x520(%rsp), %rdi
callq 0x8be6
leaq 0x288(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xa42d
callq 0x2040
cmpl $0x4, (%rax)
je 0xa413
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7b8d(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x7b4f(%rip), %rbx      # 0x11fd8
leaq 0x31a7(%rip), %rsi      # 0xd637
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7b1d(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x460(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x8a40
leaq 0x460(%rsp), %rdi
movl $0x7, %esi
callq 0x7f48
leaq 0x460(%rsp), %rdi
movl $0x6, %esi
movl $0xb, %edx
callq 0x800a
movq 0x7aa4(%rip), %rbx      # 0x11fd8
leaq 0x314c(%rip), %rsi      # 0xd687
movl $0x35, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7a72(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x7be6(%rip), %rdi      # 0x12160
callq 0xb37e
leaq 0x580(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0x5d60
leaq 0x580(%rsp), %rdi
callq 0x5d20
leaq 0x312d(%rip), %rcx      # 0xd6d5
leaq 0x310e(%rip), %rsi      # 0xd6bd
testb %al, %al
cmovneq %rcx, %rsi
xorb $0x1, %al
movzbl %al, %eax
leaq (%rax,%rax,2), %rdx
addq $0x14, %rdx
movq 0x7a0f(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x79e9(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
leaq 0x580(%rsp), %rdi
callq 0x5e04
leaq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0xb566
movq 0x79aa(%rip), %rbx      # 0x11fd8
leaq 0x30b5(%rip), %rsi      # 0xd6ea
movl $0x31, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7978(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x30(%rsp), %r14
cmpq 0x38(%rsp), %r14
je 0xa6cd
leaq 0x3099(%rip), %r15      # 0xd71c
movl $0x17, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %r14, %rdi
callq 0x8be6
addq $0x60, %r14
cmpq 0x38(%rsp), %r14
jne 0xa683
leaq 0x288(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xa6fe
callq 0x2040
cmpl $0x4, (%rax)
je 0xa6e4
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x78bc(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x787e(%rip), %rbx      # 0x11fd8
leaq 0x2fd3(%rip), %rsi      # 0xd734
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x784c(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x4c0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x8a40
leaq 0x4c0(%rsp), %rdi
movl $0x6, %esi
movl $0xb, %edx
callq 0x800a
movq 0x77e5(%rip), %rbx      # 0x11fd8
leaq 0x2f8a(%rip), %rsi      # 0xd784
movl $0x2a, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x77b3(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x793f(%rip), %rdi      # 0x12178
callq 0xb37e
leaq 0x288(%rsp), %rdi
leaq 0x4c0(%rsp), %rsi
callq 0x489a
leaq 0x288(%rsp), %rdi
callq 0x440c
testb %al, %al
je 0xa8ac
movq 0x776d(%rip), %rbx      # 0x11fd8
leaq 0x2f59(%rip), %rsi      # 0xd7cb
movl $0x17, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x773b(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
jmp 0xa8ff
movq 0x7725(%rip), %rbx      # 0x11fd8
leaq 0x2ef5(%rip), %rsi      # 0xd7af
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x76f3(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x288(%rsp), %rdi
callq 0x4422
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x4bd2
leaq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0xb566
movq 0x76a7(%rip), %rbx      # 0x11fd8
leaq 0x2eab(%rip), %rsi      # 0xd7e3
movl $0x27, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7675(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x10(%rsp), %r14
cmpq 0x18(%rsp), %r14
je 0xa9d0
leaq 0x2d96(%rip), %r15      # 0xd71c
movl $0x17, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %r14, %rdi
callq 0x8be6
addq $0x60, %r14
cmpq 0x18(%rsp), %r14
jne 0xa986
leaq 0xa8(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xaa01
callq 0x2040
cmpl $0x4, (%rax)
je 0xa9e7
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x75b9(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x757b(%rip), %rbx      # 0x11fd8
leaq 0x2da7(%rip), %rsi      # 0xd80b
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7549(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x6dee
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x2, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x29df(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x29bc(%rip), %xmm0     # 0xd4e8
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2999(%rip), %xmm0     # 0xd4f0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2976(%rip), %xmm0     # 0xd4f8
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2953(%rip), %xmm0     # 0xd500
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2920(%rip), %xmm0     # 0xd4f8
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x28ed(%rip), %xmm0     # 0xd4f0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x28b2(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x28af(%rip), %xmm0     # 0xd508
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x286c(%rip), %xmm0     # 0xd4f0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x5, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2831(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x280e(%rip), %xmm0     # 0xd4e8
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x27db(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x27c8(%rip), %xmm0     # 0xd4f8
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x27b5(%rip), %xmm0     # 0xd510
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x275a(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x272f(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2714(%rip), %xmm0     # 0xd4f0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x26f9(%rip), %xmm0     # 0xd500
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x26c6(%rip), %xmm0     # 0xd4f8
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2693(%rip), %xmm0     # 0xd4f0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0xb, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2658(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0xc, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2645(%rip), %xmm0     # 0xd4f8
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0xe, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2602(%rip), %xmm0     # 0xd4e0
callq 0x6912
leaq 0x8(%rsp), %rsi
movl $0xf, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x25ef(%rip), %xmm0     # 0xd4f8
callq 0x6912
leaq 0x727b(%rip), %rdi      # 0x12190
callq 0xb37e
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0x6d5a
leaq 0x8(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0x270(%rsp), %r14
leaq 0xa8(%rsp), %rsi
movq %r14, %rdi
callq 0x6838
movq 0x270(%rsp), %rdi
cmpq %r14, %rdi
je 0xaf77
movq (%rdi), %r15
movl $0x18, %esi
callq 0x2160
movq %r15, %rdi
cmpq %r14, %r15
jne 0xaf62
leaq 0xa8(%rsp), %rdi
callq 0x665c
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7036(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x8(%rsp), %rdx
movl $0x9, (%rdx)
leaq 0x258(%rsp), %r14
leaq 0xa8(%rsp), %rsi
movq %r14, %rdi
callq 0x6838
movq 0x258(%rsp), %rdi
cmpq %r14, %rdi
je 0xaff7
movq (%rdi), %r15
movl $0x18, %esi
callq 0x2160
movq %r15, %rdi
cmpq %r14, %r15
jne 0xafe2
leaq 0xa8(%rsp), %rdi
callq 0x665c
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6fb6(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x8(%rsp), %rsi
movl $0xd, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0x6d5a
leaq 0x8(%rsp), %rdx
movl $0x8, (%rdx)
leaq 0x240(%rsp), %r14
leaq 0xa8(%rsp), %rsi
movq %r14, %rdi
callq 0x6838
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0xb08f
movq (%rdi), %r15
movl $0x18, %esi
callq 0x2160
movq %r15, %rdi
cmpq %r14, %r15
jne 0xb07a
leaq 0xa8(%rsp), %rdi
callq 0x665c
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6f1e(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x6ee0(%rip), %rbx      # 0x11fd8
leaq 0x275c(%rip), %rsi      # 0xd85b
movl $0x50, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6eae(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
callq 0x70f8
leaq 0x10(%rsp), %rdi
callq 0x4cd2
leaq 0x288(%rsp), %rdi
callq 0x4b54
leaq 0x4c0(%rsp), %rdi
callq 0x8b3e
leaq 0x30(%rsp), %rdi
callq 0x4cd2
leaq 0x580(%rsp), %rdi
callq 0x5de4
leaq 0x460(%rsp), %rdi
callq 0x8b3e
leaq 0x520(%rsp), %rdi
callq 0x8b3e
leaq 0x628(%rsp), %rdi
callq 0x616a
leaq 0x48(%rsp), %rdi
callq 0x8b3e
xorl %eax, %eax
addq $0x760, %rsp            # imm = 0x760
popq %rbx
popq %r14
popq %r15
retq
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb2eb
jmp 0xb302
jmp 0xb2cb
jmp 0xb32b
jmp 0xb2d2
jmp 0xb2fd
movq %rax, %rbx
jmp 0xb35f
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
jmp 0xb2e3
movq %rax, %rbx
jmp 0xb338
movq %rax, %rbx
jmp 0xb30f
jmp 0xb302
movq %rax, %rbx
jmp 0xb31c
jmp 0xb32b
movq %rax, %rbx
jmp 0xb345
jmp 0xb302
jmp 0xb32b
jmp 0xb302
jmp 0xb32b
jmp 0xb2fd
jmp 0xb2e3
movq %rax, %rbx
jmp 0xb36c
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x70f8
jmp 0xb305
movq %rax, %rbx
jmp 0xb352
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x4cd2
leaq 0x288(%rsp), %rdi
callq 0x4b54
leaq 0x4c0(%rsp), %rdi
callq 0x8b3e
jmp 0xb32e
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x4cd2
leaq 0x580(%rsp), %rdi
callq 0x5de4
leaq 0x460(%rsp), %rdi
callq 0x8b3e
leaq 0x520(%rsp), %rdi
callq 0x8b3e
leaq 0x628(%rsp), %rdi
callq 0x616a
leaq 0x48(%rsp), %rdi
callq 0x8b3e
movq %rbx, %rdi
callq 0x2200