// File: MarkCBell[P]twister/./twister/kernel/manifold.cpp
// Function: initialise_manifold(manifold&, std::vector<annulus, std::allocator<annulus>>&, std::vector<rectangle, std::allocator<rectangle>>&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void initialise_manifold(manifold &M, 
	std::vector<annulus> &annuli,
	std::vector<rectangle> &rectangles,
	std::vector<std::string> &annulus_name,
	std::vector<std::string> &annulus_name_inverse,
	std::vector<std::string> &rectangle_name,
	std::vector<std::string> &rectangle_name_inverse,
	std::vector<std::string> &macro_name,
	std::vector<std::string> &macro,
	std::string surface_file_contents)
{
	// Check that we actually got the contents of a surface file.
	if (surface_file_contents.substr(0,24) != "# A Twister surface file")
		output_error("A surface file must start with \"# A Twister surface file\".");
	
	std::vector<std::string> surface_description;
	
	{
		size_t marker = 0;
		std::string parsed_line = "";
		surface_file_contents += "\n";  // We add one extra new line, just to make sure / our lives easier.
		for (std::string line = find_next_substring(surface_file_contents, "\n", marker); marker != 0; line = find_next_substring(surface_file_contents, "\n", marker))
		{
			size_t marker2 = 0;
			parsed_line += find_next_substring(line, comment, marker2);  // Remove comments.
			if ((count_substring(line, comment) != 0) && (parsed_line != ""))
			{
				std::string cleaned_line = remove_whitespace(parsed_line);  // Clean up the information that we got.
				if (cleaned_line != "") surface_description.push_back(cleaned_line);
				output_debugging("Parsed line: " + cleaned_line + "\n", 1);
				parsed_line = "";
			}
		}
	}
	
	if (surface_description.size() == 0) output_error("Empty surface description.");
	
	// Determine the number of cubes needed.
	// int num_cubes = atoi((char *) surface_description[0].c_str());
	
	// Determine the number of cubes needed by finding the largest cube number referenced.
	int num_cubes = 0;
	int size = int(surface_description.size());
	for (int i = 0; i < size; i++)
	{
		size_t marker = 0;
		std::string line = surface_description[i];
		
		// Get information about this line.
		std::string type = find_next_substring(line, delimiter, marker);
		if ((type == "annulus") || (type == "rectangle"))
		{
			std::string curve_name = find_next_substring(line, delimiter, marker);
			std::string curve_name_inverse = find_next_substring(line, delimiter, marker);
			
			int sq_num = count_substring(line, delimiter) - 2;  // How many squares there are in this curve.
			if (sq_num < 1) output_error("Invalid curve description.");
			
			// Build the chain.
			for (int j = 0; j < sq_num; j++)
			{
				std::string cube_description = find_next_substring(line, delimiter, marker);
				
				bool orientation = true;
				int number = extract_info(cube_description, orientation);
				if (number+1 >  num_cubes)
					num_cubes = number + 1;
			}
		}
	}
	
	if (num_cubes == 0) output_error("No cubes requested.");
	
	for (int i = 0; i < num_cubes; i++)
		M.cubes.push_back(new cube(M));
	
	// If the manifold we're in is a surface bundle, close
	// up the cube (top to bottom) to get a solid torus. 
	if (M.get_manifold_type() == bundle)
		for (int i = 0; i < num_cubes; i++)
			M.cubes[i]->closeup_cube();
	
	// For storing the information needed to calculate the boundary component
	// indices of the rectangle names.
	std::vector<int> first_number, last_number;  // The first / last cube number of the thickened rectangles.
	std::vector<bool> first_orientation, last_orientation;  // The first / last cube orientations of the thickened rectangles.
	
	std::vector<bool> glued_edges (4*num_cubes, false);
	std::vector<int> vertex_indices;
	vertex_indices.reserve(4*num_cubes);
	for (int i = 0; i < 4*num_cubes; i++)
		vertex_indices.push_back(i);
	
	// Read in each line.
	for (int i = 0; i < size; i++)
	{
		size_t marker = 0;
		std::string line = surface_description[i];
		
		// Get information about this line.
		std::string type = find_next_substring(line, delimiter, marker);
		
		// We extract lines labelled "macro" - these are for parsing shortcuts.
		if (type == "macro")
		{
			macro_name.push_back(find_next_substring(line, delimiter, marker));  // curve_name
			macro.push_back(find_next_substring(line, delimiter, marker));  
		}
		else if ((type == "annulus") || (type == "rectangle"))
		{
			std::string curve_name = find_next_substring(line, delimiter, marker);
			std::string curve_name_inverse = find_next_substring(line, delimiter, marker);
			
			std::vector<int> chain_indices;
			std::vector<cube*> chain_cubes;
			std::vector<bool> chain_upright;
			
			int sq_num = count_substring(line, delimiter) - 2;  // How many squares there are in this curve.
			if (sq_num < 1) output_error("Invalid curve description.");
			chain_cubes.reserve(sq_num);
			chain_upright.reserve(sq_num);
			
			// Build the chain.
			for (int j = 0; j < sq_num; j++)
			{
				std::string cube_description = find_next_substring(line, delimiter, marker);
				
				bool orientation = true;
				int number = extract_info(cube_description, orientation);
				if (number >= num_cubes) output_error(curve_name + " uses a cube that does not exist.");
				chain_indices.push_back(number);
				chain_cubes.push_back(M.cubes[number]);
				chain_upright.push_back(orientation);
			}
			
			// Glue up the edges / vertices as needed.
			for (int j = 0; j < ((type == "annulus") ? sq_num : sq_num-1); j++)
			{
				glued_edges[4*chain_indices[j] + ((chain_upright[j]) ? 1 : 0)] = true;
				glued_edges[4*chain_indices[(j+1) % sq_num] + ((chain_upright[(j+1) % sq_num]) ? 3 : 2)] = true;
				
				int a = vertex_indices[4*chain_indices[j] + ((chain_upright[j]) ? 1 : 0)];
				int b = vertex_indices[4*chain_indices[(j+1) % sq_num] + ((chain_upright[(j+1) % sq_num]) ? 0 : 3)];
				
				// Replace max(a,b) with min(a,b).
				for (int k = 0; k < 4*num_cubes; k++)
					if (vertex_indices[k] == ((a < b) ? b : a)) vertex_indices[k] = ((a < b) ? a : b);
				
				a = vertex_indices[4*chain_indices[j] + ((chain_upright[j]) ? 2 : 1)];
				b = vertex_indices[4*chain_indices[(j+1) % sq_num] + ((chain_upright[(j+1) % sq_num]) ? 3 : 2)];
				
				// Replace max(a,b) with min(a,b).
				for (int k = 0; k < 4*num_cubes; k++)
					if (vertex_indices[k] == ((a < b) ? b : a)) vertex_indices[k] = ((a < b) ? a : b);
			}
			
			// Store it according to its type.
			if (type == "annulus")
			{
				annulus_name.push_back(curve_name);
				annulus_name_inverse.push_back(curve_name_inverse);
				annuli.push_back(annulus(chain_cubes, chain_upright));
			}
			else if (type == "rectangle")
			{
				rectangle_name.push_back(curve_name);
				rectangle_name_inverse.push_back(curve_name_inverse);
				rectangles.push_back(rectangle(chain_cubes, chain_upright));
				
				// Push the first / last cube info onto the relevant lists.
				first_orientation.push_back(chain_upright[0]);
				first_number.push_back(chain_indices[0]);
				last_orientation.push_back(chain_upright[sq_num-1]);
				last_number.push_back(chain_indices[sq_num-1]);
			}
		}
		else
		{
			output_error("Invalid curve or macro description.");
		}
	}
	
	// Now we collate together all of the gluing information to determine the
	// boundary component index of each unglued edge.
	std::vector<int> boundary_index (4*num_cubes, -1);
	int boundary_components = 0;
	for (int i = 0; i < 4*num_cubes; i++)
	{
		if (glued_edges[i]) continue;
		if (boundary_index[i] != -1) continue;
		
		int start_index = vertex_indices[i];
		int current_index = start_index;
		do
		{
			for (int j = 0; j < 4*num_cubes; j++)
			{
				if (glued_edges[j]) continue;
				if (boundary_index[j] != -1) continue;
				if (vertex_indices[j] != current_index) continue;
				
				current_index = vertex_indices[j + ((j % 4 == 3) ? -3 : 1)];  // Move on to the next vertex
				boundary_index[j] = boundary_components;  // Remember to write down the boundary index for that component.
				break;
			}
		} while (current_index != start_index);
		boundary_components++;
	}
	
	// Create the needed marked points.
	for (int i = 0; i < boundary_components; i++)
		M.marked_points.push_back(half_twisted);
	
	// Set the front and back boundary component indices of each rectangle.
	for (int i = 0; i < int(rectangles.size()); i++)
	{
		rectangles[i].set_front(boundary_index[4*first_number[i] + ((first_orientation[i]) ? 3 : 2)]);
		rectangles[i].set_back(boundary_index[4*last_number[i] + ((last_orientation[i]) ? 1 : 0)]);
		rectangles[i].set_one_ended(rectangles[i].get_front() == rectangles[i].get_back());
	}
	
	// Collate all names together.
	std::vector<std::string> arc_names;
	arc_names.insert(arc_names.end(), annulus_name.begin(), annulus_name.end());
	arc_names.insert(arc_names.end(), annulus_name_inverse.begin(), annulus_name_inverse.end());
	arc_names.insert(arc_names.end(), rectangle_name.begin(), rectangle_name.end());
	arc_names.insert(arc_names.end(), rectangle_name_inverse.begin(), rectangle_name_inverse.end());
	arc_names.insert(arc_names.end(), macro_name.begin(), macro_name.end());
	
	// And check that they are a valid collection of names.
	check_valid_names(arc_names);
	
	return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf30, %rsp            # imm = 0xF30
movq %rsi, %rax
movq 0x28(%rbp), %rsi
movq %rsi, -0xc68(%rbp)
movq 0x20(%rbp), %r10
movq 0x18(%rbp), %r10
movq 0x10(%rbp), %r10
movq %rdi, -0x8(%rbp)
movq %rax, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x50(%rbp), %rdi
movq %rdi, -0xc60(%rbp)
movl $0x18, %ecx
callq 0x3320
movq -0xc60(%rbp), %rdi
leaq 0x21d0f(%rip), %rsi     # 0x27093
callq 0x8ba0
movb %al, -0xc51(%rbp)
jmp 0x5391
leaq -0x50(%rbp), %rdi
callq 0x35f8
movb -0xc51(%rbp), %al
testb $0x1, %al
jne 0x53a9
jmp 0x5445
leaq -0x81(%rbp), %rdi
movq %rdi, -0xc70(%rbp)
callq 0x3560
movq -0xc70(%rbp), %rdx
leaq 0x21ce2(%rip), %rsi     # 0x270ac
leaq -0x80(%rbp), %rdi
callq 0x4e10
jmp 0x53d5
leaq -0x80(%rbp), %rdi
callq 0x4d40
jmp 0x53e0
leaq -0x80(%rbp), %rdi
callq 0x35f8
leaq -0x81(%rbp), %rdi
callq 0x3360
jmp 0x5445
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x35f8
jmp 0x7f22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5434
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x35f8
leaq -0x81(%rbp), %rdi
callq 0x3360
jmp 0x7f22
leaq -0xa0(%rbp), %rdi
callq 0x8bd0
movq $0x0, -0xa8(%rbp)
leaq -0xc9(%rbp), %rdi
movq %rdi, -0xc78(%rbp)
callq 0x3560
movq -0xc78(%rbp), %rdx
leaq 0x21e75(%rip), %rsi     # 0x272f2
leaq -0xc8(%rbp), %rdi
callq 0x4e10
jmp 0x548b
leaq -0xc9(%rbp), %rdi
callq 0x3360
movq -0xc68(%rbp), %rdi
leaq 0x21bba(%rip), %rsi     # 0x2705f
callq 0x32d0
jmp 0x54ac
movq -0xc68(%rbp), %rsi
leaq -0x110(%rbp), %rdi
callq 0x3130
jmp 0x54c1
leaq -0x131(%rbp), %rdi
movq %rdi, -0xc80(%rbp)
callq 0x3560
movq -0xc80(%rbp), %rdx
leaq 0x21b7d(%rip), %rsi     # 0x2705f
leaq -0x130(%rbp), %rdi
callq 0x4e10
jmp 0x54f0
leaq -0xf0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
leaq -0x130(%rbp), %rdx
leaq -0xa8(%rbp), %rcx
callq 0x11c10
jmp 0x5513
leaq -0x130(%rbp), %rdi
callq 0x35f8
leaq -0x131(%rbp), %rdi
callq 0x3360
leaq -0x110(%rbp), %rdi
callq 0x35f8
cmpq $0x0, -0xa8(%rbp)
jne 0x55c7
leaq -0xf0(%rbp), %rdi
callq 0x35f8
jmp 0x5a13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xc9(%rbp), %rdi
callq 0x3360
jmp 0x7f16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5a8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x55aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x35f8
leaq -0x131(%rbp), %rdi
callq 0x3360
leaq -0x110(%rbp), %rdi
callq 0x35f8
jmp 0x5a8c
movq $0x0, -0x140(%rbp)
leaq -0x180(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x3130
jmp 0x55e7
leaq 0x2feaa(%rip), %rsi     # 0x35498
leaq -0x1a0(%rbp), %rdi
callq 0x3130
jmp 0x55fc
leaq -0x160(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x1a0(%rbp), %rdx
leaq -0x140(%rbp), %rcx
callq 0x11c10
jmp 0x561f
leaq -0xc8(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x33e0
jmp 0x5634
leaq -0x160(%rbp), %rdi
callq 0x35f8
leaq -0x1a0(%rbp), %rdi
callq 0x35f8
leaq -0x180(%rbp), %rdi
callq 0x35f8
leaq -0x1c0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x3130
jmp 0x566d
leaq 0x2fe24(%rip), %rsi     # 0x35498
leaq -0x1e0(%rbp), %rdi
callq 0x3130
jmp 0x5682
leaq -0x1c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x11bb0
movl %eax, -0xc84(%rbp)
jmp 0x569d
movl -0xc84(%rbp), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0xc85(%rbp)
je 0x56d9
leaq 0x21c3b(%rip), %rsi     # 0x272f2
leaq -0xc8(%rbp), %rdi
callq 0x8ba0
movb %al, -0xc86(%rbp)
jmp 0x56cb
movb -0xc86(%rbp), %al
movb %al, -0xc85(%rbp)
jmp 0x56d9
movb -0xc85(%rbp), %al
movb %al, -0xc87(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x35f8
leaq -0x1c0(%rbp), %rdi
callq 0x35f8
movb -0xc87(%rbp), %al
testb $0x1, %al
jne 0x570c
jmp 0x5916
leaq -0x220(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3130
jmp 0x5721
leaq -0x200(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x11d40
jmp 0x5736
leaq -0x220(%rbp), %rdi
callq 0x35f8
leaq 0x21ba9(%rip), %rsi     # 0x272f2
leaq -0x200(%rbp), %rdi
callq 0x8ba0
movb %al, -0xc88(%rbp)
jmp 0x575d
movb -0xc88(%rbp), %al
testb $0x1, %al
jne 0x576c
jmp 0x584d
leaq -0xa0(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x8bf0
jmp 0x5781
jmp 0x584d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5a05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x57d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x57cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x35f8
leaq -0x1a0(%rbp), %rdi
callq 0x35f8
leaq -0x180(%rbp), %rdi
callq 0x35f8
jmp 0x5a05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x580e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x35f8
leaq -0x1c0(%rbp), %rdi
callq 0x35f8
jmp 0x5a05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x35f8
jmp 0x5a05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5905
leaq 0x21893(%rip), %rsi     # 0x270e7
leaq -0x260(%rbp), %rdi
leaq -0x200(%rbp), %rdx
callq 0x4ec0
jmp 0x5869
leaq 0x217ef(%rip), %rdx     # 0x2705f
leaq -0x240(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x4fd0
jmp 0x5885
leaq -0x240(%rbp), %rdi
movl $0x1, %esi
callq 0x4c10
jmp 0x5898
leaq -0x240(%rbp), %rdi
callq 0x35f8
leaq -0x260(%rbp), %rdi
callq 0x35f8
leaq 0x21a3b(%rip), %rsi     # 0x272f2
leaq -0xc8(%rbp), %rdi
callq 0x3420
jmp 0x58c5
leaq -0x200(%rbp), %rdi
callq 0x35f8
jmp 0x5916
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x58f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x35f8
leaq -0x260(%rbp), %rdi
callq 0x35f8
leaq -0x200(%rbp), %rdi
callq 0x35f8
jmp 0x5a05
jmp 0x5918
movq -0xc68(%rbp), %rsi
leaq -0x2a0(%rbp), %rdi
callq 0x3130
jmp 0x592d
leaq -0x2c1(%rbp), %rdi
movq %rdi, -0xc90(%rbp)
callq 0x3560
movq -0xc90(%rbp), %rdx
leaq 0x21711(%rip), %rsi     # 0x2705f
leaq -0x2c0(%rbp), %rdi
callq 0x4e10
jmp 0x595c
leaq -0x280(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
leaq -0x2c0(%rbp), %rdx
leaq -0xa8(%rbp), %rcx
callq 0x11c10
jmp 0x597f
leaq -0xf0(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x33c0
leaq -0x280(%rbp), %rdi
callq 0x35f8
leaq -0x2c0(%rbp), %rdi
callq 0x35f8
leaq -0x2c1(%rbp), %rdi
callq 0x3360
leaq -0x2a0(%rbp), %rdi
callq 0x35f8
jmp 0x5537
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x59ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x35f8
leaq -0x2c1(%rbp), %rdi
callq 0x3360
leaq -0x2a0(%rbp), %rdi
callq 0x35f8
leaq -0xf0(%rbp), %rdi
callq 0x35f8
jmp 0x5a8c
leaq -0xc8(%rbp), %rdi
callq 0x35f8
leaq -0xa0(%rbp), %rdi
callq 0x8c60
cmpq $0x0, %rax
jne 0x5ad4
leaq -0x2e9(%rbp), %rdi
movq %rdi, -0xc98(%rbp)
callq 0x3560
movq -0xc98(%rbp), %rdx
leaq 0x2169f(%rip), %rsi     # 0x270f5
leaq -0x2e8(%rbp), %rdi
callq 0x4e10
jmp 0x5a64
leaq -0x2e8(%rbp), %rdi
callq 0x4d40
jmp 0x5a72
leaq -0x2e8(%rbp), %rdi
callq 0x35f8
leaq -0x2e9(%rbp), %rdi
callq 0x3360
jmp 0x5ad4
leaq -0xc8(%rbp), %rdi
callq 0x35f8
jmp 0x7f16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5ac3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x35f8
leaq -0x2e9(%rbp), %rdi
callq 0x3360
jmp 0x7f16
movl $0x0, -0x2f0(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x8c60
movl %eax, -0x2f4(%rbp)
movl $0x0, -0x2f8(%rbp)
movl -0x2f8(%rbp), %eax
cmpl -0x2f4(%rbp), %eax
jge 0x60fb
movq $0x0, -0x300(%rbp)
movslq -0x2f8(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x8c80
movq %rax, %rsi
leaq -0x320(%rbp), %rdi
callq 0x3130
jmp 0x5b3b
leaq -0x360(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x3130
jmp 0x5b50
leaq 0x2f921(%rip), %rsi     # 0x35478
leaq -0x380(%rbp), %rdi
callq 0x3130
jmp 0x5b65
leaq -0x340(%rbp), %rdi
leaq -0x360(%rbp), %rsi
leaq -0x380(%rbp), %rdx
leaq -0x300(%rbp), %rcx
callq 0x11c10
jmp 0x5b88
leaq -0x380(%rbp), %rdi
callq 0x35f8
leaq -0x360(%rbp), %rdi
callq 0x35f8
leaq 0x21569(%rip), %rsi     # 0x27110
leaq -0x340(%rbp), %rdi
callq 0x8ca0
movb %al, -0xc99(%rbp)
jmp 0x5bbb
movb -0xc99(%rbp), %al
testb $0x1, %al
jne 0x5bf1
jmp 0x5bc7
leaq 0x2154a(%rip), %rsi     # 0x27118
leaq -0x340(%rbp), %rdi
callq 0x8ca0
movb %al, -0xc9a(%rbp)
jmp 0x5be2
movb -0xc9a(%rbp), %al
testb $0x1, %al
jne 0x5bf1
jmp 0x60b2
leaq -0x3c0(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x3130
jmp 0x5c06
leaq 0x2f86b(%rip), %rsi     # 0x35478
leaq -0x3e0(%rbp), %rdi
callq 0x3130
jmp 0x5c1b
leaq -0x3a0(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
leaq -0x3e0(%rbp), %rdx
leaq -0x300(%rbp), %rcx
callq 0x11c10
jmp 0x5c3e
leaq -0x3e0(%rbp), %rdi
callq 0x35f8
leaq -0x3c0(%rbp), %rdi
callq 0x35f8
leaq -0x420(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x3130
jmp 0x5c6b
leaq 0x2f806(%rip), %rsi     # 0x35478
leaq -0x440(%rbp), %rdi
callq 0x3130
jmp 0x5c80
leaq -0x400(%rbp), %rdi
leaq -0x420(%rbp), %rsi
leaq -0x440(%rbp), %rdx
leaq -0x300(%rbp), %rcx
callq 0x11c10
jmp 0x5ca3
leaq -0x440(%rbp), %rdi
callq 0x35f8
leaq -0x420(%rbp), %rdi
callq 0x35f8
leaq -0x468(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x3130
jmp 0x5cd0
leaq 0x2f7a1(%rip), %rsi     # 0x35478
leaq -0x488(%rbp), %rdi
callq 0x3130
jmp 0x5ce5
leaq -0x468(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x11bb0
movl %eax, -0xca0(%rbp)
jmp 0x5d00
movl -0xca0(%rbp), %eax
subl $0x2, %eax
movl %eax, -0xca4(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x35f8
leaq -0x468(%rbp), %rdi
callq 0x35f8
movl -0xca4(%rbp), %eax
movl %eax, -0x444(%rbp)
cmpl $0x1, -0x444(%rbp)
jge 0x5f02
leaq -0x4a9(%rbp), %rdi
movq %rdi, -0xcb0(%rbp)
callq 0x3560
movq -0xcb0(%rbp), %rdx
leaq 0x213c1(%rip), %rsi     # 0x27122
leaq -0x4a8(%rbp), %rdi
callq 0x4e10
jmp 0x5d6f
leaq -0x4a8(%rbp), %rdi
callq 0x4d40
jmp 0x5d7d
leaq -0x4a8(%rbp), %rdi
callq 0x35f8
leaq -0x4a9(%rbp), %rdi
callq 0x3360
jmp 0x5f02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x7f16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x60ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5de2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x35f8
leaq -0x360(%rbp), %rdi
callq 0x35f8
jmp 0x60ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x60de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5e2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x35f8
leaq -0x3c0(%rbp), %rdi
callq 0x35f8
jmp 0x60de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x60a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5e72
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x35f8
leaq -0x420(%rbp), %rdi
callq 0x35f8
jmp 0x60a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x6098
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x35f8
leaq -0x468(%rbp), %rdi
callq 0x35f8
jmp 0x6098
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x5ef1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x35f8
leaq -0x4a9(%rbp), %rdi
callq 0x3360
jmp 0x6098
movl $0x0, -0x4b0(%rbp)
movl -0x4b0(%rbp), %eax
cmpl -0x444(%rbp), %eax
jge 0x607e
leaq -0x4f0(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x3130
jmp 0x5f33
leaq 0x2f53e(%rip), %rsi     # 0x35478
leaq -0x510(%rbp), %rdi
callq 0x3130
jmp 0x5f48
leaq -0x4d0(%rbp), %rdi
leaq -0x4f0(%rbp), %rsi
leaq -0x510(%rbp), %rdx
leaq -0x300(%rbp), %rcx
callq 0x11c10
jmp 0x5f6b
leaq -0x510(%rbp), %rdi
callq 0x35f8
leaq -0x4f0(%rbp), %rdi
callq 0x35f8
movb $0x1, -0x511(%rbp)
leaq -0x538(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
callq 0x3130
jmp 0x5f9f
leaq -0x538(%rbp), %rdi
leaq -0x511(%rbp), %rsi
callq 0x11ca0
movl %eax, -0xcb4(%rbp)
jmp 0x5fba
leaq -0x538(%rbp), %rdi
callq 0x35f8
movl -0xcb4(%rbp), %eax
movl %eax, -0x518(%rbp)
movl -0x518(%rbp), %eax
addl $0x1, %eax
cmpl -0x2f0(%rbp), %eax
jle 0x6050
movl -0x518(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f0(%rbp)
jmp 0x6050
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x601a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x510(%rbp), %rdi
callq 0x35f8
leaq -0x4f0(%rbp), %rdi
callq 0x35f8
jmp 0x6098
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x6070
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x538(%rbp), %rdi
callq 0x35f8
jmp 0x6070
leaq -0x4d0(%rbp), %rdi
callq 0x35f8
movl -0x4b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4b0(%rbp)
jmp 0x5f0c
leaq -0x4d0(%rbp), %rdi
callq 0x35f8
jmp 0x6098
leaq -0x400(%rbp), %rdi
callq 0x35f8
leaq -0x3a0(%rbp), %rdi
callq 0x35f8
jmp 0x60b2
leaq -0x400(%rbp), %rdi
callq 0x35f8
leaq -0x3a0(%rbp), %rdi
callq 0x35f8
jmp 0x60de
leaq -0x340(%rbp), %rdi
callq 0x35f8
leaq -0x320(%rbp), %rdi
callq 0x35f8
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x5afa
leaq -0x340(%rbp), %rdi
callq 0x35f8
leaq -0x320(%rbp), %rdi
callq 0x35f8
jmp 0x7f16
cmpl $0x0, -0x2f0(%rbp)
jne 0x6196
leaq -0x559(%rbp), %rdi
movq %rdi, -0xcc0(%rbp)
callq 0x3560
movq -0xcc0(%rbp), %rdx
leaq 0x21014(%rip), %rsi     # 0x2713d
leaq -0x558(%rbp), %rdi
callq 0x4e10
jmp 0x6137
leaq -0x558(%rbp), %rdi
callq 0x4d40
jmp 0x6145
leaq -0x558(%rbp), %rdi
callq 0x35f8
leaq -0x559(%rbp), %rdi
callq 0x3360
jmp 0x6196
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x6185
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x35f8
leaq -0x559(%rbp), %rdi
callq 0x3360
jmp 0x7f16
movl $0x0, -0x560(%rbp)
movl -0x560(%rbp), %eax
cmpl -0x2f0(%rbp), %eax
jge 0x6242
movq -0x8(%rbp), %rax
addq $0x40, %rax
movq %rax, -0xcd0(%rbp)
movl $0x40, %edi
callq 0x3300
movq %rax, -0xcc8(%rbp)
jmp 0x61d4
movq -0xcc8(%rbp), %rdi
movq -0x8(%rbp), %rsi
xorl %edx, %edx
movl %edx, %ecx
callq 0x179a0
jmp 0x61ea
movq -0xcd0(%rbp), %rdi
movq -0xcc8(%rbp), %rax
movq %rax, -0x568(%rbp)
leaq -0x568(%rbp), %rsi
callq 0x8cd0
jmp 0x620d
jmp 0x620f
movl -0x560(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x560(%rbp)
jmp 0x61a0
movq -0xcc8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
movl $0x40, %esi
callq 0x3310
jmp 0x7f16
movq -0x8(%rbp), %rdi
callq 0x8d00
movl %eax, -0xcd4(%rbp)
jmp 0x6253
movl -0xcd4(%rbp), %eax
cmpl $0x1, %eax
jne 0x62a9
movl $0x0, -0x56c(%rbp)
movl -0x56c(%rbp), %eax
cmpl -0x2f0(%rbp), %eax
jge 0x62a7
movq -0x8(%rbp), %rdi
addq $0x40, %rdi
movslq -0x56c(%rbp), %rsi
callq 0x8d20
movq (%rax), %rdi
callq 0x8d40
jmp 0x6294
jmp 0x6296
movl -0x56c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x56c(%rbp)
jmp 0x6268
jmp 0x62a9
leaq -0x588(%rbp), %rdi
callq 0x8de0
leaq -0x5a0(%rbp), %rdi
callq 0x8de0
leaq -0x5c8(%rbp), %rdi
callq 0x8e00
leaq -0x5f0(%rbp), %rdi
callq 0x8e00
movl -0x2f0(%rbp), %eax
shll $0x2, %eax
cltq
movq %rax, -0xce8(%rbp)
movb $0x0, -0x619(%rbp)
leaq -0x61a(%rbp), %rdi
movq %rdi, -0xce0(%rbp)
callq 0x8e20
movq -0xce8(%rbp), %rsi
movq -0xce0(%rbp), %rcx
leaq -0x618(%rbp), %rdi
leaq -0x619(%rbp), %rdx
callq 0x8e40
jmp 0x6328
leaq -0x61a(%rbp), %rdi
callq 0x8ec0
leaq -0x638(%rbp), %rdi
movq %rdi, -0xcf0(%rbp)
callq 0x8de0
movq -0xcf0(%rbp), %rdi
movl -0x2f0(%rbp), %eax
shll $0x2, %eax
movslq %eax, %rsi
callq 0x8ee0
jmp 0x6361
movl $0x0, -0x63c(%rbp)
movl -0x63c(%rbp), %eax
movl -0x2f0(%rbp), %ecx
shll $0x2, %ecx
cmpl %ecx, %eax
jge 0x63d4
leaq -0x638(%rbp), %rdi
leaq -0x63c(%rbp), %rsi
callq 0x8fe0
jmp 0x6393
jmp 0x6395
movl -0x63c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x63c(%rbp)
jmp 0x636b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x61a(%rbp), %rdi
callq 0x8ec0
jmp 0x7ee6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x7ece
movl $0x0, -0x640(%rbp)
movl -0x640(%rbp), %eax
cmpl -0x2f4(%rbp), %eax
jge 0x7659
movq $0x0, -0x648(%rbp)
movslq -0x640(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x8c80
movq %rax, %rsi
leaq -0x668(%rbp), %rdi
callq 0x3130
jmp 0x641f
leaq -0x6a8(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x3130
jmp 0x6434
leaq 0x2f03d(%rip), %rsi     # 0x35478
leaq -0x6c8(%rbp), %rdi
callq 0x3130
jmp 0x6449
leaq -0x688(%rbp), %rdi
leaq -0x6a8(%rbp), %rsi
leaq -0x6c8(%rbp), %rdx
leaq -0x648(%rbp), %rcx
callq 0x11c10
jmp 0x646c
leaq -0x6c8(%rbp), %rdi
callq 0x35f8
leaq -0x6a8(%rbp), %rdi
callq 0x35f8
leaq 0x20cc6(%rip), %rsi     # 0x27151
leaq -0x688(%rbp), %rdi
callq 0x8ca0
movb %al, -0xcf1(%rbp)
jmp 0x649f
movb -0xcf1(%rbp), %al
testb $0x1, %al
jne 0x64ae
jmp 0x66d0
movq 0x18(%rbp), %rax
movq %rax, -0xd00(%rbp)
leaq -0x708(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x3130
jmp 0x64ce
leaq 0x2efa3(%rip), %rsi     # 0x35478
leaq -0x728(%rbp), %rdi
callq 0x3130
jmp 0x64e3
leaq -0x6e8(%rbp), %rdi
leaq -0x708(%rbp), %rsi
leaq -0x728(%rbp), %rdx
leaq -0x648(%rbp), %rcx
callq 0x11c10
jmp 0x6506
movq -0xd00(%rbp), %rdi
leaq -0x6e8(%rbp), %rsi
callq 0x9050
jmp 0x651b
leaq -0x6e8(%rbp), %rdi
callq 0x35f8
leaq -0x728(%rbp), %rdi
callq 0x35f8
leaq -0x708(%rbp), %rdi
callq 0x35f8
movq 0x20(%rbp), %rax
movq %rax, -0xd08(%rbp)
leaq -0x768(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x3130
jmp 0x655f
leaq 0x2ef12(%rip), %rsi     # 0x35478
leaq -0x788(%rbp), %rdi
callq 0x3130
jmp 0x6574
leaq -0x748(%rbp), %rdi
leaq -0x768(%rbp), %rsi
leaq -0x788(%rbp), %rdx
leaq -0x648(%rbp), %rcx
callq 0x11c10
jmp 0x6597
movq -0xd08(%rbp), %rdi
leaq -0x748(%rbp), %rsi
callq 0x9050
jmp 0x65ac
leaq -0x748(%rbp), %rdi
callq 0x35f8
leaq -0x788(%rbp), %rdi
callq 0x35f8
leaq -0x768(%rbp), %rdi
callq 0x35f8
jmp 0x7610
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x7648
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x660c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x6c8(%rbp), %rdi
callq 0x35f8
leaq -0x6a8(%rbp), %rdi
callq 0x35f8
jmp 0x7648
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x763c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x666e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x6662
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x35f8
leaq -0x728(%rbp), %rdi
callq 0x35f8
leaq -0x708(%rbp), %rdi
callq 0x35f8
jmp 0x763c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x66bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x66b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x748(%rbp), %rdi
callq 0x35f8
leaq -0x788(%rbp), %rdi
callq 0x35f8
leaq -0x768(%rbp), %rdi
callq 0x35f8
jmp 0x763c
leaq 0x20a39(%rip), %rsi     # 0x27110
leaq -0x688(%rbp), %rdi
callq 0x8ca0
movb %al, -0xd09(%rbp)
jmp 0x66eb
movb -0xd09(%rbp), %al
testb $0x1, %al
jne 0x6721
jmp 0x66f7
leaq 0x20a1a(%rip), %rsi     # 0x27118
leaq -0x688(%rbp), %rdi
callq 0x8ca0
movb %al, -0xd0a(%rbp)
jmp 0x6712
movb -0xd0a(%rbp), %al
testb $0x1, %al
jne 0x6721
jmp 0x7583
leaq -0x7c8(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x3130
jmp 0x6736
leaq 0x2ed3b(%rip), %rsi     # 0x35478
leaq -0x7e8(%rbp), %rdi
callq 0x3130
jmp 0x674b
leaq -0x7a8(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
leaq -0x7e8(%rbp), %rdx
leaq -0x648(%rbp), %rcx
callq 0x11c10
jmp 0x676e
leaq -0x7e8(%rbp), %rdi
callq 0x35f8
leaq -0x7c8(%rbp), %rdi
callq 0x35f8
leaq -0x828(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x3130
jmp 0x679b
leaq 0x2ecd6(%rip), %rsi     # 0x35478
leaq -0x848(%rbp), %rdi
callq 0x3130
jmp 0x67b0
leaq -0x808(%rbp), %rdi
leaq -0x828(%rbp), %rsi
leaq -0x848(%rbp), %rdx
leaq -0x648(%rbp), %rcx
callq 0x11c10
jmp 0x67d3
leaq -0x848(%rbp), %rdi
callq 0x35f8
leaq -0x828(%rbp), %rdi
callq 0x35f8
leaq -0x860(%rbp), %rdi
callq 0x8de0
leaq -0x878(%rbp), %rdi
callq 0x9080
leaq -0x8a0(%rbp), %rdi
callq 0x8e00
leaq -0x8c8(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x3130
jmp 0x6824
leaq 0x2ec4d(%rip), %rsi     # 0x35478
leaq -0x8e8(%rbp), %rdi
callq 0x3130
jmp 0x6839
leaq -0x8c8(%rbp), %rdi
leaq -0x8e8(%rbp), %rsi
callq 0x11bb0
movl %eax, -0xd10(%rbp)
jmp 0x6854
movl -0xd10(%rbp), %eax
subl $0x2, %eax
movl %eax, -0xd14(%rbp)
leaq -0x8e8(%rbp), %rdi
callq 0x35f8
leaq -0x8c8(%rbp), %rdi
callq 0x35f8
movl -0xd14(%rbp), %eax
movl %eax, -0x8a4(%rbp)
cmpl $0x1, -0x8a4(%rbp)
jge 0x69ec
leaq -0x909(%rbp), %rdi
movq %rdi, -0xd20(%rbp)
callq 0x3560
movq -0xd20(%rbp), %rdx
leaq 0x2086d(%rip), %rsi     # 0x27122
leaq -0x908(%rbp), %rdi
callq 0x4e10
jmp 0x68c3
leaq -0x908(%rbp), %rdi
callq 0x4d40
jmp 0x68d1
leaq -0x908(%rbp), %rdi
callq 0x35f8
leaq -0x909(%rbp), %rdi
callq 0x3360
jmp 0x69ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x6914
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x7e8(%rbp), %rdi
callq 0x35f8
leaq -0x7c8(%rbp), %rdi
callq 0x35f8
jmp 0x763c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x7572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x695c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x848(%rbp), %rdi
callq 0x35f8
leaq -0x828(%rbp), %rdi
callq 0x35f8
jmp 0x7572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x7542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x69a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x8e8(%rbp), %rdi
callq 0x35f8
leaq -0x8c8(%rbp), %rdi
callq 0x35f8
jmp 0x7542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x69db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x908(%rbp), %rdi
callq 0x35f8
leaq -0x909(%rbp), %rdi
callq 0x3360
jmp 0x7542
movslq -0x8a4(%rbp), %rsi
leaq -0x878(%rbp), %rdi
callq 0x90a0
jmp 0x6a01
movslq -0x8a4(%rbp), %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x91a0
jmp 0x6a16
movl $0x0, -0x910(%rbp)
movl -0x910(%rbp), %eax
cmpl -0x8a4(%rbp), %eax
jge 0x6c32
leaq -0x950(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0x3130
jmp 0x6a47
leaq 0x2ea2a(%rip), %rsi     # 0x35478
leaq -0x970(%rbp), %rdi
callq 0x3130
jmp 0x6a5c
leaq -0x930(%rbp), %rdi
leaq -0x950(%rbp), %rsi
leaq -0x970(%rbp), %rdx
leaq -0x648(%rbp), %rcx
callq 0x11c10
jmp 0x6a7f
leaq -0x970(%rbp), %rdi
callq 0x35f8
leaq -0x950(%rbp), %rdi
callq 0x35f8
movb $0x1, -0x971(%rbp)
leaq -0x998(%rbp), %rdi
leaq -0x930(%rbp), %rsi
callq 0x3130
jmp 0x6ab3
leaq -0x998(%rbp), %rdi
leaq -0x971(%rbp), %rsi
callq 0x11ca0
movl %eax, -0xd24(%rbp)
jmp 0x6ace
leaq -0x998(%rbp), %rdi
callq 0x35f8
movl -0xd24(%rbp), %eax
movl %eax, -0x978(%rbp)
movl -0x978(%rbp), %eax
cmpl -0x2f0(%rbp), %eax
jl 0x6baf
leaq 0x20658(%rip), %rdx     # 0x27157
leaq -0x9b8(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x9200
jmp 0x6b14
leaq -0x9b8(%rbp), %rdi
callq 0x4d40
jmp 0x6b22
leaq -0x9b8(%rbp), %rdi
callq 0x35f8
jmp 0x6baf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x6b56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x970(%rbp), %rdi
callq 0x35f8
leaq -0x950(%rbp), %rdi
callq 0x35f8
jmp 0x7542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x6c21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x998(%rbp), %rdi
callq 0x35f8
jmp 0x6c21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x9b8(%rbp), %rdi
callq 0x35f8
jmp 0x6c21
leaq -0x860(%rbp), %rdi
leaq -0x978(%rbp), %rsi
callq 0x8fe0
jmp 0x6bc4
movq -0x8(%rbp), %rdi
addq $0x40, %rdi
movslq -0x978(%rbp), %rsi
callq 0x8d20
movq %rax, %rsi
leaq -0x878(%rbp), %rdi
callq 0x9280
jmp 0x6be9
movzbl -0x971(%rbp), %esi
andl $0x1, %esi
leaq -0x8a0(%rbp), %rdi
callq 0x92f0
jmp 0x6c01
leaq -0x930(%rbp), %rdi
callq 0x35f8
movl -0x910(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x910(%rbp)
jmp 0x6a20
leaq -0x930(%rbp), %rdi
callq 0x35f8
jmp 0x7542
movl $0x0, -0x9bc(%rbp)
movl -0x9bc(%rbp), %eax
movl %eax, -0xd2c(%rbp)
leaq 0x204c1(%rip), %rsi     # 0x27110
leaq -0x688(%rbp), %rdi
callq 0x8ca0
movb %al, -0xd25(%rbp)
jmp 0x6c63
movb -0xd25(%rbp), %al
testb $0x1, %al
jne 0x6c6f
jmp 0x6c7d
movl -0x8a4(%rbp), %eax
movl %eax, -0xd30(%rbp)
jmp 0x6c8c
movl -0x8a4(%rbp), %eax
subl $0x1, %eax
movl %eax, -0xd30(%rbp)
movl -0xd2c(%rbp), %eax
movl -0xd30(%rbp), %ecx
cmpl %ecx, %eax
jge 0x7293
movslq -0x9bc(%rbp), %rsi
leaq -0x860(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xd44(%rbp)
movslq -0x9bc(%rbp), %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xd40(%rbp)
movq %rax, -0xd38(%rbp)
jmp 0x6ce1
movq -0xd40(%rbp), %rax
movq -0xd38(%rbp), %rcx
movq %rcx, -0x9e0(%rbp)
movq %rax, -0x9d8(%rbp)
leaq -0x9e0(%rbp), %rdi
callq 0x9440
movb %al, %cl
movl -0xd44(%rbp), %eax
movzbl %cl, %ecx
addl %ecx, %eax
movslq %eax, %rsi
leaq -0x618(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xd58(%rbp)
movq %rax, -0xd50(%rbp)
jmp 0x6d35
movq -0xd58(%rbp), %rax
movq -0xd50(%rbp), %rcx
movq %rcx, -0x9d0(%rbp)
movq %rax, -0x9c8(%rbp)
leaq -0x9d0(%rbp), %rdi
movl $0x1, %esi
callq 0x9470
movl -0x9bc(%rbp), %eax
incl %eax
movl -0x8a4(%rbp), %ecx
cltd
idivl %ecx
movslq %edx, %rsi
leaq -0x860(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xd6c(%rbp)
movl -0x9bc(%rbp), %eax
incl %eax
movl -0x8a4(%rbp), %ecx
cltd
idivl %ecx
movslq %edx, %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xd68(%rbp)
movq %rax, -0xd60(%rbp)
jmp 0x6dbd
movq -0xd68(%rbp), %rax
movq -0xd60(%rbp), %rcx
movq %rcx, -0xa00(%rbp)
movq %rax, -0x9f8(%rbp)
leaq -0xa00(%rbp), %rdi
callq 0x9440
movl -0xd6c(%rbp), %ecx
movzbl %al, %edx
movl %ecx, %eax
movl %edx, %ecx
leal 0x2(%rax,%rcx), %eax
movslq %eax, %rsi
leaq -0x618(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xd80(%rbp)
movq %rax, -0xd78(%rbp)
jmp 0x6e15
movq -0xd80(%rbp), %rax
movq -0xd78(%rbp), %rcx
movq %rcx, -0x9f0(%rbp)
movq %rax, -0x9e8(%rbp)
leaq -0x9f0(%rbp), %rdi
movl $0x1, %esi
callq 0x9470
movslq -0x9bc(%rbp), %rsi
leaq -0x860(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xd94(%rbp)
movslq -0x9bc(%rbp), %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xd90(%rbp)
movq %rax, -0xd88(%rbp)
jmp 0x6e83
movq -0xd90(%rbp), %rax
movq -0xd88(%rbp), %rcx
movq %rcx, -0xa18(%rbp)
movq %rax, -0xa10(%rbp)
leaq -0xa18(%rbp), %rdi
callq 0x9440
movb %al, %cl
movl -0xd94(%rbp), %eax
movzbl %cl, %ecx
addl %ecx, %eax
movslq %eax, %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xa04(%rbp)
movl -0x9bc(%rbp), %eax
incl %eax
movl -0x8a4(%rbp), %ecx
cltd
idivl %ecx
movslq %edx, %rsi
leaq -0x860(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xdac(%rbp)
movl -0x9bc(%rbp), %eax
incl %eax
movl -0x8a4(%rbp), %ecx
cltd
idivl %ecx
movslq %edx, %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xda8(%rbp)
movq %rax, -0xda0(%rbp)
jmp 0x6f2a
movq -0xda8(%rbp), %rax
movq -0xda0(%rbp), %rcx
movq %rcx, -0xa30(%rbp)
movq %rax, -0xa28(%rbp)
leaq -0xa30(%rbp), %rdi
callq 0x9440
movb %al, %sil
movl -0xdac(%rbp), %eax
movl $0x3, %ecx
xorl %edx, %edx
testb $0x1, %sil
cmovnel %edx, %ecx
addl %ecx, %eax
movslq %eax, %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xa1c(%rbp)
movl $0x0, -0xa34(%rbp)
movl -0xa34(%rbp), %eax
movl -0x2f0(%rbp), %ecx
shll $0x2, %ecx
cmpl %ecx, %eax
jge 0x705b
movslq -0xa34(%rbp), %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xdb0(%rbp)
movl -0xa04(%rbp), %eax
cmpl -0xa1c(%rbp), %eax
jge 0x6fda
movl -0xa1c(%rbp), %eax
movl %eax, -0xdb4(%rbp)
jmp 0x6fe6
movl -0xa04(%rbp), %eax
movl %eax, -0xdb4(%rbp)
movl -0xdb0(%rbp), %eax
movl -0xdb4(%rbp), %ecx
cmpl %ecx, %eax
jne 0x7045
movl -0xa04(%rbp), %eax
cmpl -0xa1c(%rbp), %eax
jge 0x7012
movl -0xa04(%rbp), %eax
movl %eax, -0xdb8(%rbp)
jmp 0x701e
movl -0xa1c(%rbp), %eax
movl %eax, -0xdb8(%rbp)
movl -0xdb8(%rbp), %eax
movl %eax, -0xdbc(%rbp)
movslq -0xa34(%rbp), %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl -0xdbc(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x7047
movl -0xa34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa34(%rbp)
jmp 0x6f8c
movslq -0x9bc(%rbp), %rsi
leaq -0x860(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xdd4(%rbp)
movslq -0x9bc(%rbp), %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xdd0(%rbp)
movq %rax, -0xdc8(%rbp)
jmp 0x709c
movq -0xdd0(%rbp), %rax
movq -0xdc8(%rbp), %rcx
movq %rcx, -0xa48(%rbp)
movq %rax, -0xa40(%rbp)
leaq -0xa48(%rbp), %rdi
callq 0x9440
movb %al, %cl
movl -0xdd4(%rbp), %eax
movzbl %cl, %edx
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xa04(%rbp)
movl -0x9bc(%rbp), %eax
incl %eax
movl -0x8a4(%rbp), %ecx
cltd
idivl %ecx
movslq %edx, %rsi
leaq -0x860(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xdec(%rbp)
movl -0x9bc(%rbp), %eax
incl %eax
movl -0x8a4(%rbp), %ecx
cltd
idivl %ecx
movslq %edx, %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xde8(%rbp)
movq %rax, -0xde0(%rbp)
jmp 0x7149
movq -0xde8(%rbp), %rax
movq -0xde0(%rbp), %rcx
movq %rcx, -0xa58(%rbp)
movq %rax, -0xa50(%rbp)
leaq -0xa58(%rbp), %rdi
callq 0x9440
movb %al, %sil
movl -0xdec(%rbp), %eax
movl $0x2, %ecx
movl $0x3, %edx
testb $0x1, %sil
cmovnel %edx, %ecx
addl %ecx, %eax
movslq %eax, %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xa1c(%rbp)
movl $0x0, -0xa5c(%rbp)
movl -0xa5c(%rbp), %eax
movl -0x2f0(%rbp), %ecx
shll $0x2, %ecx
cmpl %ecx, %eax
jge 0x727d
movslq -0xa5c(%rbp), %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xdf0(%rbp)
movl -0xa04(%rbp), %eax
cmpl -0xa1c(%rbp), %eax
jge 0x71fc
movl -0xa1c(%rbp), %eax
movl %eax, -0xdf4(%rbp)
jmp 0x7208
movl -0xa04(%rbp), %eax
movl %eax, -0xdf4(%rbp)
movl -0xdf0(%rbp), %eax
movl -0xdf4(%rbp), %ecx
cmpl %ecx, %eax
jne 0x7267
movl -0xa04(%rbp), %eax
cmpl -0xa1c(%rbp), %eax
jge 0x7234
movl -0xa04(%rbp), %eax
movl %eax, -0xdf8(%rbp)
jmp 0x7240
movl -0xa1c(%rbp), %eax
movl %eax, -0xdf8(%rbp)
movl -0xdf8(%rbp), %eax
movl %eax, -0xdfc(%rbp)
movslq -0xa5c(%rbp), %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl -0xdfc(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x7269
movl -0xa5c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa5c(%rbp)
jmp 0x71ae
jmp 0x727f
movl -0x9bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9bc(%rbp)
jmp 0x6c3c
leaq 0x1fe76(%rip), %rsi     # 0x27110
leaq -0x688(%rbp), %rdi
callq 0x8ca0
movb %al, -0xdfd(%rbp)
jmp 0x72ae
movb -0xdfd(%rbp), %al
testb $0x1, %al
jne 0x72bd
jmp 0x734b
movq -0x20(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x8bf0
jmp 0x72cf
movq -0x28(%rbp), %rdi
leaq -0x808(%rbp), %rsi
callq 0x8bf0
jmp 0x72e1
movq -0x10(%rbp), %rax
movq %rax, -0xe08(%rbp)
leaq -0xa78(%rbp), %rdi
leaq -0x878(%rbp), %rsi
leaq -0x8a0(%rbp), %rdx
callq 0x19650
jmp 0x7308
movq -0xe08(%rbp), %rdi
leaq -0xa78(%rbp), %rsi
callq 0x94c0
jmp 0x731d
leaq -0xa78(%rbp), %rdi
callq 0x19970
jmp 0x7501
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xa78(%rbp), %rdi
callq 0x19970
jmp 0x7542
leaq 0x1fdc6(%rip), %rsi     # 0x27118
leaq -0x688(%rbp), %rdi
callq 0x8ca0
movb %al, -0xe09(%rbp)
jmp 0x7366
movb -0xe09(%rbp), %al
testb $0x1, %al
jne 0x7375
jmp 0x74ff
movq -0x30(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x8bf0
jmp 0x7387
movq 0x10(%rbp), %rdi
leaq -0x808(%rbp), %rsi
callq 0x8bf0
jmp 0x7399
movq -0x18(%rbp), %rax
movq %rax, -0xe18(%rbp)
leaq -0xaa0(%rbp), %rdi
leaq -0x878(%rbp), %rsi
leaq -0x8a0(%rbp), %rdx
callq 0x1bcc0
jmp 0x73c0
movq -0xe18(%rbp), %rdi
leaq -0xaa0(%rbp), %rsi
callq 0x94f0
jmp 0x73d5
leaq -0xaa0(%rbp), %rdi
callq 0x1bfd0
xorl %eax, %eax
movl %eax, %esi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xe28(%rbp)
movq %rax, -0xe20(%rbp)
jmp 0x7401
movq -0xe28(%rbp), %rax
movq -0xe20(%rbp), %rcx
movq %rcx, -0xab0(%rbp)
movq %rax, -0xaa8(%rbp)
leaq -0xab0(%rbp), %rdi
callq 0x9440
movzbl %al, %esi
leaq -0x5c8(%rbp), %rdi
callq 0x92f0
jmp 0x743a
xorl %eax, %eax
movl %eax, %esi
leaq -0x860(%rbp), %rdi
callq 0x9420
movq %rax, %rsi
leaq -0x588(%rbp), %rdi
callq 0x8fe0
jmp 0x745b
movl -0x8a4(%rbp), %eax
decl %eax
movslq %eax, %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xe38(%rbp)
movq %rax, -0xe30(%rbp)
jmp 0x7482
movq -0xe38(%rbp), %rax
movq -0xe30(%rbp), %rcx
movq %rcx, -0xac0(%rbp)
movq %rax, -0xab8(%rbp)
leaq -0xac0(%rbp), %rdi
callq 0x9440
movzbl %al, %esi
leaq -0x5f0(%rbp), %rdi
callq 0x92f0
jmp 0x74bb
movl -0x8a4(%rbp), %eax
decl %eax
movslq %eax, %rsi
leaq -0x860(%rbp), %rdi
callq 0x9420
movq %rax, %rsi
leaq -0x5a0(%rbp), %rdi
callq 0x8fe0
jmp 0x74e3
jmp 0x74ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xaa0(%rbp), %rdi
callq 0x1bfd0
jmp 0x7542
jmp 0x7501
leaq -0x8a0(%rbp), %rdi
callq 0x9520
leaq -0x878(%rbp), %rdi
callq 0x9540
leaq -0x860(%rbp), %rdi
callq 0x95a0
leaq -0x808(%rbp), %rdi
callq 0x35f8
leaq -0x7a8(%rbp), %rdi
callq 0x35f8
jmp 0x760e
leaq -0x8a0(%rbp), %rdi
callq 0x9520
leaq -0x878(%rbp), %rdi
callq 0x9540
leaq -0x860(%rbp), %rdi
callq 0x95a0
leaq -0x808(%rbp), %rdi
callq 0x35f8
leaq -0x7a8(%rbp), %rdi
callq 0x35f8
jmp 0x763c
leaq -0xae1(%rbp), %rdi
movq %rdi, -0xe40(%rbp)
callq 0x3560
movq -0xe40(%rbp), %rdx
leaq 0x1fbd5(%rip), %rsi     # 0x27179
leaq -0xae0(%rbp), %rdi
callq 0x4e10
jmp 0x75b2
leaq -0xae0(%rbp), %rdi
callq 0x4d40
jmp 0x75c0
leaq -0xae0(%rbp), %rdi
callq 0x35f8
leaq -0xae1(%rbp), %rdi
callq 0x3360
jmp 0x760e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x7600
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xae0(%rbp), %rdi
callq 0x35f8
leaq -0xae1(%rbp), %rdi
callq 0x3360
jmp 0x763c
jmp 0x7610
leaq -0x688(%rbp), %rdi
callq 0x35f8
leaq -0x668(%rbp), %rdi
callq 0x35f8
movl -0x640(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x640(%rbp)
jmp 0x63de
leaq -0x688(%rbp), %rdi
callq 0x35f8
leaq -0x668(%rbp), %rdi
callq 0x35f8
jmp 0x7ece
movl -0x2f0(%rbp), %eax
shll $0x2, %eax
cltq
movq %rax, -0xe50(%rbp)
movl $0xffffffff, -0xb04(%rbp) # imm = 0xFFFFFFFF
leaq -0xb05(%rbp), %rdi
movq %rdi, -0xe48(%rbp)
callq 0x9600
movq -0xe50(%rbp), %rsi
movq -0xe48(%rbp), %rcx
leaq -0xb00(%rbp), %rdi
leaq -0xb04(%rbp), %rdx
callq 0x9620
jmp 0x76ab
leaq -0xb05(%rbp), %rdi
callq 0x96a0
movl $0x0, -0xb0c(%rbp)
movl $0x0, -0xb10(%rbp)
movl -0xb10(%rbp), %eax
movl -0x2f0(%rbp), %ecx
shll $0x2, %ecx
cmpl %ecx, %eax
jge 0x791c
movslq -0xb10(%rbp), %rsi
leaq -0x618(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xe60(%rbp)
movq %rax, -0xe58(%rbp)
jmp 0x7705
movq -0xe60(%rbp), %rax
movq -0xe58(%rbp), %rcx
movq %rcx, -0xb20(%rbp)
movq %rax, -0xb18(%rbp)
leaq -0xb20(%rbp), %rdi
callq 0x9440
testb $0x1, %al
jne 0x7733
jmp 0x7766
jmp 0x7908
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xb05(%rbp), %rdi
callq 0x96a0
jmp 0x7ece
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x7ec2
movslq -0xb10(%rbp), %rsi
leaq -0xb00(%rbp), %rdi
callq 0x9420
cmpl $-0x1, (%rax)
je 0x7783
jmp 0x7908
movslq -0xb10(%rbp), %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xb24(%rbp)
movl -0xb24(%rbp), %eax
movl %eax, -0xb28(%rbp)
movl $0x0, -0xb2c(%rbp)
movl -0xb2c(%rbp), %eax
movl -0x2f0(%rbp), %ecx
shll $0x2, %ecx
cmpl %ecx, %eax
jge 0x78e5
movslq -0xb2c(%rbp), %rsi
leaq -0x618(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xe70(%rbp)
movq %rax, -0xe68(%rbp)
jmp 0x77ee
movq -0xe70(%rbp), %rax
movq -0xe68(%rbp), %rcx
movq %rcx, -0xb40(%rbp)
movq %rax, -0xb38(%rbp)
leaq -0xb40(%rbp), %rdi
callq 0x9440
testb $0x1, %al
jne 0x781c
jmp 0x7821
jmp 0x78d1
movslq -0xb2c(%rbp), %rsi
leaq -0xb00(%rbp), %rdi
callq 0x9420
cmpl $-0x1, (%rax)
je 0x783e
jmp 0x78d1
movslq -0xb2c(%rbp), %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
cmpl -0xb28(%rbp), %eax
je 0x785d
jmp 0x78d1
movl -0xb2c(%rbp), %eax
movl %eax, -0xe78(%rbp)
movl -0xb2c(%rbp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
movl -0xe78(%rbp), %eax
movl %edx, %esi
movl $0x1, %ecx
movl $0xfffffffd, %edx       # imm = 0xFFFFFFFD
cmpl $0x3, %esi
cmovel %edx, %ecx
addl %ecx, %eax
movslq %eax, %rsi
leaq -0x638(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
movl %eax, -0xb28(%rbp)
movl -0xb0c(%rbp), %eax
movl %eax, -0xe74(%rbp)
movslq -0xb2c(%rbp), %rsi
leaq -0xb00(%rbp), %rdi
callq 0x9420
movl -0xe74(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x78e5
movl -0xb2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb2c(%rbp)
jmp 0x77b4
jmp 0x78e7
movl -0xb28(%rbp), %eax
cmpl -0xb24(%rbp), %eax
jne 0x77aa
movl -0xb0c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0c(%rbp)
movl -0xb10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb10(%rbp)
jmp 0x76cb
movl $0x0, -0xb44(%rbp)
movl -0xb44(%rbp), %eax
cmpl -0xb0c(%rbp), %eax
jge 0x7967
movq -0x8(%rbp), %rdi
addq $0x58, %rdi
movl $0x2, -0xb48(%rbp)
leaq -0xb48(%rbp), %rsi
callq 0x96c0
jmp 0x7954
jmp 0x7956
movl -0xb44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb44(%rbp)
jmp 0x7926
movl $0x0, -0xb4c(%rbp)
movl -0xb4c(%rbp), %eax
movl %eax, -0xe7c(%rbp)
movq -0x18(%rbp), %rdi
callq 0x96f0
movq %rax, %rcx
movl -0xe7c(%rbp), %eax
cmpl %ecx, %eax
jge 0x7b82
movq -0x18(%rbp), %rdi
movslq -0xb4c(%rbp), %rsi
callq 0x9720
movq %rax, -0xea0(%rbp)
movslq -0xb4c(%rbp), %rsi
leaq -0x588(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xe94(%rbp)
movslq -0xb4c(%rbp), %rsi
leaq -0x5c8(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xe90(%rbp)
movq %rax, -0xe88(%rbp)
jmp 0x79ef
movq -0xe90(%rbp), %rax
movq -0xe88(%rbp), %rcx
movq %rcx, -0xb60(%rbp)
movq %rax, -0xb58(%rbp)
leaq -0xb60(%rbp), %rdi
callq 0x9440
movl -0xe94(%rbp), %ecx
movzbl %al, %edx
movl %ecx, %eax
movl %edx, %ecx
leal 0x2(%rax,%rcx), %eax
movslq %eax, %rsi
leaq -0xb00(%rbp), %rdi
callq 0x9420
movq -0xea0(%rbp), %rdi
movl (%rax), %esi
callq 0x9740
jmp 0x7a47
movq -0x18(%rbp), %rdi
movslq -0xb4c(%rbp), %rsi
callq 0x9720
movq %rax, -0xec0(%rbp)
movslq -0xb4c(%rbp), %rsi
leaq -0x5a0(%rbp), %rdi
callq 0x9420
movl (%rax), %eax
shll $0x2, %eax
movl %eax, -0xeb4(%rbp)
movslq -0xb4c(%rbp), %rsi
leaq -0x5f0(%rbp), %rdi
callq 0x93c0
movq %rdx, -0xeb0(%rbp)
movq %rax, -0xea8(%rbp)
jmp 0x7a9f
movq -0xeb0(%rbp), %rax
movq -0xea8(%rbp), %rcx
movq %rcx, -0xb70(%rbp)
movq %rax, -0xb68(%rbp)
leaq -0xb70(%rbp), %rdi
callq 0x9440
movb %al, %cl
movl -0xeb4(%rbp), %eax
movzbl %cl, %ecx
addl %ecx, %eax
movslq %eax, %rsi
leaq -0xb00(%rbp), %rdi
callq 0x9420
movq -0xec0(%rbp), %rdi
movl (%rax), %esi
callq 0x9760
jmp 0x7af3
movq -0x18(%rbp), %rdi
movslq -0xb4c(%rbp), %rsi
callq 0x9720
movq %rax, -0xed0(%rbp)
movq -0x18(%rbp), %rdi
movslq -0xb4c(%rbp), %rsi
callq 0x9720
movq %rax, %rdi
callq 0x97a0
movl %eax, -0xec4(%rbp)
jmp 0x7b2a
movq -0x18(%rbp), %rdi
movslq -0xb4c(%rbp), %rsi
callq 0x9720
movq %rax, %rdi
callq 0x97c0
movl %eax, -0xed4(%rbp)
jmp 0x7b4a
movq -0xed0(%rbp), %rdi
movl -0xed4(%rbp), %ecx
movl -0xec4(%rbp), %eax
subl %ecx, %eax
sete %al
movzbl %al, %esi
callq 0x9780
jmp 0x7b6c
jmp 0x7b6e
movl -0xb4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb4c(%rbp)
jmp 0x7971
leaq -0xb88(%rbp), %rdi
movq %rdi, -0xee8(%rbp)
callq 0x8bd0
movq -0xee8(%rbp), %rdi
callq 0x9890
movq %rax, -0xb98(%rbp)
leaq -0xb90(%rbp), %rdi
leaq -0xb98(%rbp), %rsi
callq 0x98c0
movq -0x20(%rbp), %rdi
callq 0x9900
movq %rax, -0xba0(%rbp)
movq -0x20(%rbp), %rdi
callq 0x9890
movq -0xee8(%rbp), %rdi
movq %rax, -0xba8(%rbp)
movq -0xb90(%rbp), %rsi
movq -0xba0(%rbp), %rdx
movq -0xba8(%rbp), %rcx
callq 0x97e0
movq %rax, -0xee0(%rbp)
jmp 0x7c05
movq -0xee0(%rbp), %rax
movq %rax, -0xbb0(%rbp)
leaq -0xb88(%rbp), %rdi
movq %rdi, -0xef8(%rbp)
callq 0x9890
movq %rax, -0xbc0(%rbp)
leaq -0xbb8(%rbp), %rdi
leaq -0xbc0(%rbp), %rsi
callq 0x98c0
movq -0x28(%rbp), %rdi
callq 0x9900
movq %rax, -0xbc8(%rbp)
movq -0x28(%rbp), %rdi
callq 0x9890
movq -0xef8(%rbp), %rdi
movq %rax, -0xbd0(%rbp)
movq -0xbb8(%rbp), %rsi
movq -0xbc8(%rbp), %rdx
movq -0xbd0(%rbp), %rcx
callq 0x97e0
movq %rax, -0xef0(%rbp)
jmp 0x7c8a
movq -0xef0(%rbp), %rax
movq %rax, -0xbd8(%rbp)
leaq -0xb88(%rbp), %rdi
movq %rdi, -0xf08(%rbp)
callq 0x9890
movq %rax, -0xbe8(%rbp)
leaq -0xbe0(%rbp), %rdi
leaq -0xbe8(%rbp), %rsi
callq 0x98c0
movq -0x30(%rbp), %rdi
callq 0x9900
movq %rax, -0xbf0(%rbp)
movq -0x30(%rbp), %rdi
callq 0x9890
movq -0xf08(%rbp), %rdi
movq %rax, -0xbf8(%rbp)
movq -0xbe0(%rbp), %rsi
movq -0xbf0(%rbp), %rdx
movq -0xbf8(%rbp), %rcx
callq 0x97e0
movq %rax, -0xf00(%rbp)
jmp 0x7d0f
movq -0xf00(%rbp), %rax
movq %rax, -0xc00(%rbp)
leaq -0xb88(%rbp), %rdi
movq %rdi, -0xf18(%rbp)
callq 0x9890
movq %rax, -0xc10(%rbp)
leaq -0xc08(%rbp), %rdi
leaq -0xc10(%rbp), %rsi
callq 0x98c0
movq 0x10(%rbp), %rdi
callq 0x9900
movq %rax, -0xc18(%rbp)
movq 0x10(%rbp), %rdi
callq 0x9890
movq -0xf18(%rbp), %rdi
movq %rax, -0xc20(%rbp)
movq -0xc08(%rbp), %rsi
movq -0xc18(%rbp), %rdx
movq -0xc20(%rbp), %rcx
callq 0x97e0
movq %rax, -0xf10(%rbp)
jmp 0x7d94
movq -0xf10(%rbp), %rax
movq %rax, -0xc28(%rbp)
leaq -0xb88(%rbp), %rdi
movq %rdi, -0xf28(%rbp)
callq 0x9890
movq %rax, -0xc38(%rbp)
leaq -0xc30(%rbp), %rdi
leaq -0xc38(%rbp), %rsi
callq 0x98c0
movq 0x18(%rbp), %rdi
callq 0x9900
movq %rax, -0xc40(%rbp)
movq 0x18(%rbp), %rdi
callq 0x9890
movq -0xf28(%rbp), %rdi
movq %rax, -0xc48(%rbp)
movq -0xc30(%rbp), %rsi
movq -0xc40(%rbp), %rdx
movq -0xc48(%rbp), %rcx
callq 0x97e0
movq %rax, -0xf20(%rbp)
jmp 0x7e19
movq -0xf20(%rbp), %rax
movq %rax, -0xc50(%rbp)
leaq -0xb88(%rbp), %rdi
callq 0x11e90
jmp 0x7e35
leaq -0xb88(%rbp), %rdi
callq 0x9930
leaq -0xb00(%rbp), %rdi
callq 0x95a0
leaq -0x638(%rbp), %rdi
callq 0x95a0
leaq -0x618(%rbp), %rdi
callq 0x9520
leaq -0x5f0(%rbp), %rdi
callq 0x9520
leaq -0x5c8(%rbp), %rdi
callq 0x9520
leaq -0x5a0(%rbp), %rdi
callq 0x95a0
leaq -0x588(%rbp), %rdi
callq 0x95a0
leaq -0xa0(%rbp), %rdi
callq 0x9930
addq $0xf30, %rsp            # imm = 0xF30
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xb88(%rbp), %rdi
callq 0x9930
leaq -0xb00(%rbp), %rdi
callq 0x95a0
leaq -0x638(%rbp), %rdi
callq 0x95a0
leaq -0x618(%rbp), %rdi
callq 0x9520
leaq -0x5f0(%rbp), %rdi
callq 0x9520
leaq -0x5c8(%rbp), %rdi
callq 0x9520
leaq -0x5a0(%rbp), %rdi
callq 0x95a0
leaq -0x588(%rbp), %rdi
callq 0x95a0
leaq -0xa0(%rbp), %rdi
callq 0x9930
movq -0x58(%rbp), %rdi
callq 0x3550
nopl (%rax,%rax)