// File: /workspace/github_cpp_makefile_star2_O3/MarkCBell[P]twister/./twister/kernel/manifold.cpp
// Function: construct_manifold(manifold&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, 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 construct_manifold(manifold &M, std::string surface_file_contents, std::string gluing, std::string handles)
{
	// These will hold all the pieces of information for the manifold.
	std::vector<annulus> annuli;
	std::vector<rectangle> rectangles;
	std::vector<std::string> annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro;
	
	// Fill up the manifold with interesting information from the surface_file_contents.
	initialise_manifold(M, annuli, rectangles, annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro, surface_file_contents);
	
	// Format the commands.
	format_command(handles, annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro);
	format_command(gluing, annulus_name, annulus_name_inverse, rectangle_name, rectangle_name_inverse, macro_name, macro);
	
	output_debugging("\nParsed handles: " + handles + "\nParsed gluing: " + gluing + "\n", 1);
	
	int num_annuli = int(annulus_name.size());
	int num_rectangles = int(rectangle_name.size());
	
	if (handles != "")  // Attach handles (if needed).
	{
		size_t marker = 0;
		
		do
		{
			std::string handle_location = find_next_substring(handles, separator, marker);
			
			if (handle_location == "") continue;  // Skip it if there is no action.
			
			bool performed_action = false;  // Records if we actually performed an action.
			for (int i = 0; i < num_annuli; i++)
			{
				if ((annulus_name[i] == handle_location) || (annulus_name_inverse[i] == handle_location))
				{
					annuli[i].twohandle((annulus_name[i] == handle_location));
					performed_action = true;
					break;  // Annuli / rectangle names are unique, so we can give up if we get a hit.
				}
			}
			if (performed_action) continue;
			
			output_warning("No annulus named '" + handle_location + "' found to attach a handle to.");
		} while (marker != 0);
	}
	
	M.insert_layer();  // Insert layer #1 to prevent rooftop access.
	
	// Reset the layer flags on cubes and marked points.
	for (int i = 0; i < int(M.marked_points.size()); i++)
		M.marked_points[i] = half_twisted;
	
	for (int i = 0; i < int(M.cubes.size()); i++)
		M.cubes[i]->set_status(false);
	
	// We parse the gluing w = w_1 ... w_n from left to right, so our twists are 
	// stacked from top to bottom. So when a curve c at the bottom is pushed up 
	// the resulting curve at the top is w(c) = w_1( ... w_n(c) ... ), i.e. mapping
	// classes act on the left.
	if (gluing != "")  // Twist / drill (if needed).
	{
		size_t marker = 0;
		
		do
		{
			std::string action_name = find_next_substring(gluing, separator, marker);
			
			if (action_name == "") continue;  // Skip it if there is no action.
			
			bool drilling = (action_name.substr(0, 1) == drill);  // Are we drilling?
			if (drilling) action_name = action_name.substr(1);  // If so, drop the drill symbol.
			
			bool performed_action = false;  // Records if we actually performed an action.
			
			for (int i = 0; i < num_annuli; i++)
			{
				if ((annulus_name[i] == action_name) || (annulus_name_inverse[i] == action_name))
				{
					if (drilling)
						annuli[i].drill();
					else
						annuli[i].twist((annulus_name[i] == action_name) ? plus : minus);
					
					performed_action = true;
					break;  // Annuli / rectangle names are unique, so we can give up if we get a hit.
				}
			}
			if (performed_action) continue;
			
			for (int i = 0; i < num_rectangles; i++)
			{
				if ((rectangle_name[i] == action_name) || (rectangle_name_inverse[i] == action_name))
				{
					if (drilling)
						rectangles[i].drill();
					else
						rectangles[i].half_twist((rectangle_name[i] == action_name) ? plus : minus);
					
					performed_action = true;
					break;  // Annuli / rectangle names are unique, so we can give up if we get a hit.
				}
			}
			if (performed_action) continue;
			
			// If our action_name didn't match any curves then throw a warning.
			output_warning("No annulus or rectangle named '" + action_name + "' found to twist or half-twist.");
		} while (marker != 0);
	}
	
	M.tidy_boundary();
	
	return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x298, %rsp            # imm = 0x298
movq %rcx, (%rsp)
movq %rdx, 0x58(%rsp)
movq %rdi, 0x88(%rsp)
pxor %xmm0, %xmm0
movdqa %xmm0, 0x1a0(%rsp)
xorl %eax, %eax
movq %rax, 0x1b0(%rsp)
movq %rax, 0x230(%rsp)
movdqa %xmm0, 0x220(%rsp)
movq %rax, 0xb0(%rsp)
movdqa %xmm0, 0xa0(%rsp)
movq %rax, 0x130(%rsp)
movdqa %xmm0, 0x120(%rsp)
movq %rax, 0xf0(%rsp)
movdqa %xmm0, 0xe0(%rsp)
movq %rax, 0x190(%rsp)
movdqa %xmm0, 0x180(%rsp)
movq %rax, 0x210(%rsp)
movdqa %xmm0, 0x200(%rsp)
movq %rax, 0x270(%rsp)
movdqa %xmm0, 0x260(%rsp)
leaq 0x288(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rsi), %rax
movq 0x8(%rsi), %rdx
addq %rax, %rdx
leaq 0x278(%rsp), %rbx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x89c4
leaq 0x260(%rsp), %r14
leaq 0x200(%rsp), %rax
leaq 0x180(%rsp), %r10
leaq 0x1a0(%rsp), %rsi
leaq 0x220(%rsp), %rdx
leaq 0xa0(%rsp), %rcx
leaq 0x120(%rsp), %r8
leaq 0xe0(%rsp), %r9
movq 0x88(%rsp), %rdi
pushq %rbx
pushq %r14
pushq %rax
pushq %r10
callq 0x455c
addq $0x20, %rsp
movq 0x278(%rsp), %rdi
cmpq %r15, %rdi
je 0x73ee
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x3220
subq $0x8, %rsp
leaq 0xa8(%rsp), %rsi
leaq 0x128(%rsp), %rdx
leaq 0xe8(%rsp), %rcx
leaq 0x188(%rsp), %r8
leaq 0x208(%rsp), %r9
movq 0x8(%rsp), %rdi
pushq %r14
callq 0xd283
addq $0x10, %rsp
subq $0x8, %rsp
leaq 0xa8(%rsp), %rsi
leaq 0x128(%rsp), %rdx
leaq 0xe8(%rsp), %rcx
leaq 0x188(%rsp), %r8
leaq 0x208(%rsp), %r9
movq 0x60(%rsp), %rdi
pushq %r14
callq 0xd283
addq $0x10, %rsp
leaq 0xfd4d(%rip), %rsi      # 0x171ba
leaq 0x160(%rsp), %rdi
movq (%rsp), %rdx
callq 0x44d4
leaq 0xfd47(%rip), %rsi      # 0x171cc
leaq 0x160(%rsp), %rdi
callq 0x3420
leaq 0x48(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x74b9
movq %rdx, 0x38(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x48(%rsp)
jmp 0x74c2
movdqu (%rcx), %xmm0
movdqu %xmm0, (%rbp)
movq 0x8(%rax), %rdx
leaq 0x38(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x58(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
callq 0x30d0
leaq 0x28(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7516
movq %rdx, 0x18(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x28(%rsp)
jmp 0x7520
movdqu (%rcx), %xmm0
movdqu %xmm0, (%r13)
movq 0x8(%rax), %rdx
leaq 0x18(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xfb11(%rip), %rsi      # 0x17054
callq 0x3420
leaq 0x250(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7578
movq %rdx, 0x240(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x250(%rsp)
jmp 0x7581
movdqu (%rcx), %xmm0
movdqu %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq 0x240(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x1, %esi
callq 0x4229
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0x75c7
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x75de
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x38(%rsp), %rdi
cmpq %rbp, %rdi
je 0x75f5
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x170(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7616
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0xa8(%rsp), %rax
subq 0xa0(%rsp), %rax
shrq $0x5, %rax
movq %rax, 0x60(%rsp)
movq 0xe8(%rsp), %rax
subq 0xe0(%rsp), %rax
movq %rax, 0x98(%rsp)
leaq 0xfceb(%rip), %rsi      # 0x17339
movq (%rsp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x7976
leaq 0x160(%rsp), %rax
movq $0x0, (%rax)
leaq 0x110(%rsp), %r14
leaq 0x1f0(%rsp), %r15
movq 0x60(%rsp), %rax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %rax, 0x90(%rsp)
movq %r14, 0x100(%rsp)
movq (%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq 0x100(%rsp), %rdi
callq 0x89c4
movq %r15, 0x1e0(%rsp)
movq 0x16d36(%rip), %rsi     # 0x1e3f8
movq 0x16d37(%rip), %rdx     # 0x1e400
addq %rsi, %rdx
leaq 0x1e0(%rsp), %rbx
movq %rbx, %rdi
callq 0x89c4
leaq 0x18(%rsp), %rdi
leaq 0x100(%rsp), %rsi
movq %rbx, %rdx
leaq 0x160(%rsp), %rcx
callq 0xa485
movq 0x1e0(%rsp), %rdi
cmpq %r15, %rdi
je 0x7716
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x100(%rsp), %rdi
cmpq %r14, %rdi
je 0x7733
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x18(%rsp), %rdi
leaq 0xfbfa(%rip), %rsi      # 0x17339
callq 0x30c0
testl %eax, %eax
je 0x7950
cmpl $0x0, 0x60(%rsp)
jle 0x77f4
movq 0xa0(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %rbx
movq 0x120(%rsp), %r12
movq 0x90(%rsp), %r14
xorl %r15d, %r15d
xorl %ebp, %ebp
movq 0x10(%rsp), %rax
movq 0x8(%rax,%r15), %r13
cmpq %rbx, %r13
jne 0x77be
testq %rbx, %rbx
je 0x78d4
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rdi
movq 0x8(%rsp), %rsi
movq %rbx, %rdx
callq 0x3230
testl %eax, %eax
je 0x78d4
cmpq %rbx, 0x8(%r12,%r15)
jne 0x77e7
testq %rbx, %rbx
je 0x78e1
movq (%r12,%r15), %rdi
movq 0x8(%rsp), %rsi
movq %rbx, %rdx
callq 0x3230
testl %eax, %eax
je 0x78e1
addq $-0x18, %rbp
addq $0x20, %r15
decq %r14
jne 0x7788
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
leaq 0xf9da(%rip), %rsi      # 0x171dd
leaq 0x18(%rsp), %rdx
callq 0x44d4
movq %rbx, %rdi
leaq 0xf9d9(%rip), %rsi      # 0x171f0
callq 0x3420
leaq 0x1d0(%rsp), %rbx
movq %rbx, 0x1c0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x48(%rsp), %rbp
je 0x7855
movq %rdx, 0x1c0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x1d0(%rsp)
jmp 0x785d
movdqu (%rcx), %xmm0
movdqu %xmm0, (%rbx)
leaq 0x28(%rsp), %r13
leaq 0x110(%rsp), %r14
leaq 0x1f0(%rsp), %r15
movq 0x8(%rax), %rdx
movq %rdx, 0x1c8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1c0(%rsp), %rdi
callq 0x42a5
movq 0x1c0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x78b7
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x38(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7950
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x7950
movq 0x1a0(%rsp), %r12
subq %rbp, %r12
jmp 0x78f1
movq 0x1a0(%rsp), %r12
subq %rbp, %r12
cmpq %rbx, %r13
jne 0x7929
leaq 0x28(%rsp), %r13
leaq 0x48(%rsp), %rbp
leaq 0x110(%rsp), %r14
testq %rbx, %rbx
je 0x7925
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rdi
movq 0x8(%rsp), %rsi
movq %rbx, %rdx
callq 0x3230
testl %eax, %eax
sete %al
jmp 0x793d
movb $0x1, %al
jmp 0x793d
xorl %eax, %eax
leaq 0x28(%rsp), %r13
leaq 0x48(%rsp), %rbp
leaq 0x110(%rsp), %r14
movzbl %al, %esi
movq %r12, %rdi
callq 0xf600
leaq 0x1f0(%rsp), %r15
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x7967
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
cmpq $0x0, 0x160(%rsp)
jne 0x7690
movq 0x88(%rsp), %rbx
movq %rbx, %rdi
callq 0x106e2
movq 0x58(%rbx), %rax
movq 0x60(%rbx), %rcx
subq %rax, %rcx
shrq $0x2, %rcx
testl %ecx, %ecx
jle 0x7a9d
movl %ecx, %edx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
addl $0x3, %ecx
andl $-0x4, %ecx
decq %rdx
movq %rdx, %xmm0
pshufd $0x44, %xmm0, %xmm0     # xmm0 = xmm0[0,1,0,1]
movdqa 0xf6b0(%rip), %xmm1     # 0x17070
movdqa 0xf6b8(%rip), %xmm2     # 0x17080
xorl %edx, %edx
movdqa 0xf6be(%rip), %xmm3     # 0x17090
pxor %xmm3, %xmm0
pcmpeqd %xmm4, %xmm4
movdqa 0xf6be(%rip), %xmm5     # 0x170a0
movdqa %xmm2, %xmm6
pxor %xmm3, %xmm6
movdqa %xmm6, %xmm7
pcmpgtd %xmm0, %xmm7
pcmpeqd %xmm0, %xmm6
pshufd $0xf5, %xmm6, %xmm8     # xmm8 = xmm6[1,1,3,3]
pand %xmm7, %xmm8
pshufd $0xf5, %xmm7, %xmm6     # xmm6 = xmm7[1,1,3,3]
por %xmm8, %xmm6
movd %xmm6, %esi
notl %esi
testb $0x1, %sil
je 0x7a1e
movl $0x2, (%rax,%rdx,4)
pxor %xmm4, %xmm6
pextrw $0x4, %xmm6, %esi
testb $0x1, %sil
je 0x7a35
movl $0x2, 0x4(%rax,%rdx,4)
movdqa %xmm1, %xmm6
pxor %xmm3, %xmm6
movdqa %xmm6, %xmm7
pcmpgtd %xmm0, %xmm7
pcmpeqd %xmm0, %xmm6
pshufd $0xf5, %xmm6, %xmm8     # xmm8 = xmm6[1,1,3,3]
pand %xmm7, %xmm8
pshufd $0xf5, %xmm7, %xmm6     # xmm6 = xmm7[1,1,3,3]
por %xmm8, %xmm6
pxor %xmm4, %xmm6
pextrw $0x0, %xmm6, %esi
testb $0x1, %sil
je 0x7a75
movl $0x2, 0x8(%rax,%rdx,4)
pextrw $0x4, %xmm6, %esi
testb $0x1, %sil
je 0x7a88
movl $0x2, 0xc(%rax,%rdx,4)
addq $0x4, %rdx
paddq %xmm5, %xmm2
paddq %xmm5, %xmm1
cmpq %rdx, %rcx
jne 0x79e2
movq 0x40(%rbx), %rax
movq 0x48(%rbx), %rcx
subq %rax, %rcx
shrq $0x3, %rcx
testl %ecx, %ecx
jle 0x7ac8
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
xorl %edx, %edx
movq (%rax,%rdx,8), %rsi
movb $0x0, 0x32(%rsi)
incq %rdx
cmpq %rdx, %rcx
jne 0x7ab8
leaq 0xf86a(%rip), %rsi      # 0x17339
movq 0x58(%rsp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x8043
movq 0x98(%rsp), %rdx
shrq $0x5, %rdx
leaq 0x160(%rsp), %rax
movq $0x0, (%rax)
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
movl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq 0x60(%rsp), %rcx
andq %rax, %rcx
movq %rcx, 0x90(%rsp)
movq %rdx, 0x98(%rsp)
andq %rax, %rdx
movq %rdx, 0x238(%rsp)
leaq 0x68(%rsp), %r15
movq %rbx, 0x68(%rsp)
movq 0x58(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x89c4
movq %r14, 0xc0(%rsp)
movq 0x16897(%rip), %rsi     # 0x1e3f8
movq 0x16898(%rip), %rdx     # 0x1e400
addq %rsi, %rdx
leaq 0xc0(%rsp), %r12
movq %r12, %rdi
callq 0x89c4
leaq 0x18(%rsp), %rdi
movq %r15, %rsi
movq %r12, %rdx
leaq 0x160(%rsp), %rcx
callq 0xa485
movq 0xc0(%rsp), %rdi
cmpq %r14, %rdi
je 0x7bb0
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x68(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7bc7
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x18(%rsp), %rdi
leaq 0xf766(%rip), %rsi      # 0x17339
callq 0x30c0
testl %eax, %eax
je 0x801d
movl $0x1, %ecx
leaq 0x38(%rsp), %rdi
leaq 0x18(%rsp), %rsi
xorl %edx, %edx
callq 0x3240
movq 0x40(%rsp), %rdx
cmpq 0x1681e(%rip), %rdx     # 0x1e420
jne 0x7c25
movq 0x38(%rsp), %rbx
testq %rdx, %rdx
je 0x7c2f
movq 0x16803(%rip), %rsi     # 0x1e418
movq %rbx, %rdi
callq 0x3230
testl %eax, %eax
sete %r15b
jmp 0x7c32
movq 0x38(%rsp), %rbx
xorl %r15d, %r15d
jmp 0x7c32
movb $0x1, %r15b
cmpq %rbp, %rbx
je 0x7c47
movq 0x48(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testb %r15b, %r15b
je 0x7c8f
movl $0x1, %edx
leaq 0x38(%rsp), %r14
movq %r14, %rdi
leaq 0x18(%rsp), %rbx
movq %rbx, %rsi
movq $-0x1, %rcx
callq 0x3240
movq %rbx, %rdi
movq %r14, %rsi
callq 0x32a0
movq 0x38(%rsp), %rdi
cmpq %rbp, %rdi
je 0x7c8f
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x3220
movl %r15d, (%rsp)
cmpl $0x0, 0x60(%rsp)
jle 0x7d3b
movq 0xa0(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %r14
movq 0x120(%rsp), %r15
movq 0x90(%rsp), %r13
xorl %ebp, %ebp
xorl %r12d, %r12d
movq 0x10(%rsp), %rax
movq 0x8(%rax,%rbp), %rbx
cmpq %r14, %rbx
jne 0x7d05
testq %r14, %r14
je 0x7ee3
movq 0x10(%rsp), %rax
movq (%rax,%rbp), %rdi
movq 0x8(%rsp), %rsi
movq %r14, %rdx
callq 0x3230
testl %eax, %eax
je 0x7ee7
cmpq %r14, 0x8(%r15,%rbp)
jne 0x7d2e
testq %r14, %r14
je 0x7e5e
movq (%r15,%rbp), %rdi
movq 0x8(%rsp), %rsi
movq %r14, %rdx
callq 0x3230
testl %eax, %eax
je 0x7e5e
addq $-0x18, %r12
addq $0x20, %rbp
decq %r13
jne 0x7ccf
cmpl $0x0, 0x98(%rsp)
jle 0x7de6
movq 0xe0(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %r14
movq 0x180(%rsp), %r15
movq 0x238(%rsp), %r13
xorl %ebp, %ebp
xorl %r12d, %r12d
movq 0x10(%rsp), %rax
movq 0x8(%rax,%rbp), %rbx
cmpq %r14, %rbx
jne 0x7db0
testq %r14, %r14
je 0x7f84
movq 0x10(%rsp), %rax
movq (%rax,%rbp), %rdi
movq 0x8(%rsp), %rsi
movq %r14, %rdx
callq 0x3230
testl %eax, %eax
je 0x7f88
cmpq %r14, 0x8(%r15,%rbp)
jne 0x7dd9
testq %r14, %r14
je 0x7edb
movq (%r15,%rbp), %rdi
movq 0x8(%rsp), %rsi
movq %r14, %rdx
callq 0x3230
testl %eax, %eax
je 0x7edb
addq $-0x28, %r12
addq $0x20, %rbp
decq %r13
jne 0x7d7a
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
leaq 0xf41a(%rip), %rsi      # 0x1720f
leaq 0x18(%rsp), %rdx
callq 0x44d4
movq %rbx, %rdi
leaq 0xf426(%rip), %rsi      # 0x1722f
leaq 0x28(%rsp), %r13
callq 0x3420
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
leaq 0x150(%rsp), %rsi
leaq 0x68(%rsp), %r15
movq %rsi, 0x140(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x48(%rsp), %rbp
je 0x7e66
movq %rdx, 0x140(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x150(%rsp)
jmp 0x7e6e
movq %rbx, %rdx
jmp 0x7eea
movdqu (%rcx), %xmm0
movdqu %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x148(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x140(%rsp), %rdi
callq 0x42a5
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x7ebb
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x38(%rsp), %rdi
cmpq %rbp, %rdi
je 0x801d
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x801d
movq %rbx, %rdx
jmp 0x7f8b
xorl %edx, %edx
jmp 0x7eea
movq %r14, %rdx
movq 0x1a0(%rsp), %rdi
subq %r12, %rdi
cmpb $0x0, (%rsp)
leaq 0x28(%rsp), %r13
leaq 0x68(%rsp), %r15
je 0x7f21
callq 0x10466
leaq 0x48(%rsp), %rbp
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
jmp 0x801d
movl $0xffffffff, %r12d      # imm = 0xFFFFFFFF
cmpq %r14, %rbx
jne 0x7f65
testq %rdx, %rdx
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
je 0x7f5d
movq 0x10(%rsp), %rax
movq %rdi, (%rsp)
movq (%rax,%rbp), %rdi
movq 0x8(%rsp), %rsi
callq 0x3230
movq (%rsp), %rdi
testl %eax, %eax
jne 0x7f72
movl $0x1, %r12d
jmp 0x7f72
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
movl %r12d, %esi
callq 0xfb26
leaq 0x48(%rsp), %rbp
jmp 0x801d
xorl %edx, %edx
jmp 0x7f8b
movq %r14, %rdx
movq 0x220(%rsp), %rdi
subq %r12, %rdi
cmpb $0x0, (%rsp)
leaq 0x28(%rsp), %r13
leaq 0x68(%rsp), %r15
je 0x7fbf
callq 0x10bee
leaq 0x48(%rsp), %rbp
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
jmp 0x801d
movl $0xffffffff, %r12d      # imm = 0xFFFFFFFF
cmpq %r14, %rbx
jne 0x8003
testq %rdx, %rdx
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
je 0x7ffb
movq 0x10(%rsp), %rax
movq %rdi, (%rsp)
movq (%rax,%rbp), %rdi
movq 0x8(%rsp), %rsi
callq 0x3230
movq (%rsp), %rdi
testl %eax, %eax
jne 0x8010
movl $0x1, %r12d
jmp 0x8010
leaq 0x78(%rsp), %rbx
leaq 0xd0(%rsp), %r14
movl %r12d, %esi
callq 0x111fc
leaq 0x48(%rsp), %rbp
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x8034
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
cmpq $0x0, 0x160(%rsp)
jne 0x7b36
movq 0x88(%rsp), %rdi
callq 0x13288
leaq 0x260(%rsp), %rdi
callq 0x8772
leaq 0x200(%rsp), %rdi
callq 0x8772
leaq 0x180(%rsp), %rdi
callq 0x8772
leaq 0xe0(%rsp), %rdi
callq 0x8772
leaq 0x120(%rsp), %rdi
callq 0x8772
leaq 0xa0(%rsp), %rdi
callq 0x8772
leaq 0x220(%rsp), %rdi
callq 0x87d0
leaq 0x1a0(%rsp), %rdi
callq 0x8818
addq $0x298, %rsp            # imm = 0x298
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0x80ef
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x80ef
movq %rax, %rbx
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x8110
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x8110
movq %rax, %rbx
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x8131
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x8131
movq %rax, %rbx
leaq 0x170(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x829a
movq 0x170(%rsp), %rsi
jmp 0x8292
jmp 0x8253
movq %rax, %rbx
movq 0x278(%rsp), %rdi
cmpq %r15, %rdi
je 0x829a
movq 0x288(%rsp), %rsi
jmp 0x8292
jmp 0x8253
jmp 0x8253
jmp 0x81f9
movq %rax, %rbx
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x81db
movq 0x150(%rsp), %rsi
jmp 0x81d3
jmp 0x81b1
jmp 0x81f9
jmp 0x81f9
jmp 0x81f9
jmp 0x81f9
movq %rax, %rbx
jmp 0x81db
jmp 0x81f9
movq %rbx, %rcx
movq %rax, %rbx
movq 0x1c0(%rsp), %rdi
cmpq %rcx, %rdi
je 0x81db
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x81fc
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x3220
jmp 0x81fc
movq %rax, %rbx
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x829a
movq 0x28(%rsp), %rsi
jmp 0x8292
jmp 0x8253
movq %rax, %rbx
jmp 0x823d
movq %rax, %rbx
movq 0xc0(%rsp), %rdi
cmpq %r14, %rdi
je 0x823d
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x829a
movq 0x78(%rsp), %rsi
jmp 0x8292
movq %rax, %rbx
jmp 0x829a
movq %rax, %rbx
jmp 0x827d
movq %rax, %rbx
movq 0x1e0(%rsp), %rdi
cmpq %r15, %rdi
je 0x827d
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x3220
movq 0x100(%rsp), %rdi
cmpq %r14, %rdi
je 0x829a
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x3220
leaq 0x260(%rsp), %rdi
callq 0x8772
leaq 0x200(%rsp), %rdi
callq 0x8772
leaq 0x180(%rsp), %rdi
callq 0x8772
leaq 0xe0(%rsp), %rdi
callq 0x8772
leaq 0x120(%rsp), %rdi
callq 0x8772
leaq 0xa0(%rsp), %rdi
callq 0x8772
leaq 0x220(%rsp), %rdi
callq 0x87d0
leaq 0x1a0(%rsp), %rdi
callq 0x8818
movq %rbx, %rdi
callq 0x33e0