// File: ksabry[P]bfbrute/src/ProgramSearch.h
// Function: ProgramSearch<ProgramIterator<400ul, 32ul, 12ul, 32ul>, DataCache<32ul, 12ul>>::FindStringThread(unsigned long)
void FindStringThread(uint_fast32_t threadIdx)
	{
		static const uint_fast32_t countUpdate = 100000;
		static const uint_fast32_t countSave = 1000000;

		auto& iterator = iterators[threadIdx];

		uint_fast32_t threadCount = 0;
		while (iterator.Next())
		{
			uint_fast32_t stringDist;

			if (++threadCount % countUpdate == 0)
			{
				lock.lock();
				this->count += countUpdate;

				if (printProgress)
				{
					uint_fast64_t currentCount = 0;
					for (int i = 0; i < THREAD_COUNT; i++)
					{
						currentCount += iterators[i].currentCount;
					}

					double proportion = static_cast<double>(currentCount) / static_cast<double>(programSizeCount);
					auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now() - sizeStart).count();
					uint_fast64_t remaining = static_cast<double>(elapsed) * (1-proportion) / proportion;

					auto seconds = remaining % 60;
					auto minutes = remaining / 60 % 60;
					auto hours = remaining / 3600 % 24;
					auto days = remaining / 86400;
					
					std::cout 
						<< std::right
						<< " " << programSize
						<< " " << std::setw(10) << std::setprecision(6) << std::fixed << proportion * 100 << "%"
						<< " " << iterator.GetProgram()
						<< " Estimated remaining " << std::setw(3) << days << ":" << std::setfill('0') << std::setw(2) << hours << ":" << std::setw(2) << minutes << ":" << std::setw(2) << seconds << std::setfill(' ')
						<< "          \r" << std::flush;
				}
				lock.unlock();
			}

			if (threadCount % countSave == 0)
			{
				SaveFindStringProgress();
			}

			if (!iterator.Execute(inputs[0], input_sizes[0]))
			{
				continue;
			}

			stringDist = iterator.StringDistance(outputs[0], output_sizes[0], SHOW_ALL_PROGRAMS_LENGTH - programSize);
			if (stringDist + programSize > SHOW_ALL_PROGRAMS_LENGTH)
			{
				continue;
			}

			std::string postProgram = iterator.StringDistanceOutput(outputs[0], output_sizes[0], SHOW_ALL_PROGRAMS_LENGTH - programSize);
			programResult = std::string(iterator.GetProgram()) + postProgram;

			lock.lock();

			std::cout 
				<< std::right << std::setw(3) << std::setfill(' ') << stringDist + programSize
				<< " " << programResult << std::endl;

			std::ofstream file("output.txt", std::ofstream::app);
			file
				<< std::right << std::setw(3) << std::setfill(' ') << stringDist + programSize
				<< " " << programResult << std::endl;
			file.close();
			
			if (printProgress)
			{
				uint_fast64_t currentCount = 0;
				for (int i = 0; i < THREAD_COUNT; i++)
				{
					currentCount += iterators[i].currentCount;
				}

				double proportion = static_cast<double>(currentCount) / static_cast<double>(programSizeCount);
				auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now() - sizeStart).count();
				uint_fast64_t remaining = static_cast<double>(elapsed) * (1-proportion) / proportion;

				auto seconds = remaining % 60;
				auto minutes = remaining / 60 % 60;
				auto hours = remaining / 3600 % 24;
				auto days = remaining / 86400;
				
				std::cout 
					<< std::right
					<< " " << programSize
					<< " " << std::setw(10) << std::setprecision(6) << std::fixed << proportion * 100 << "%"
					<< " " << iterator.GetProgram()
					<< " Estimated remaining " << std::setw(3) << days << ":" << std::setfill('0') << std::setw(2) << hours << ":" << std::setw(2) << minutes << ":" << std::setw(2) << seconds << std::setfill(' ')
					<< "          \r" << std::flush;
			}

			lock.unlock();

			SaveFindStringProgress();
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x5d0, %rsp            # imm = 0x5D0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x3b0(%rbp)
addq $0x401f8, %rax          # imm = 0x401F8
imulq $0x4578, -0x10(%rbp), %rcx # imm = 0x4578
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x18(%rbp), %rdi
callq 0xf7c0
testb $0x1, %al
jne 0xe4fd
jmp 0xf4b3
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
movl $0x186a0, %ecx          # imm = 0x186A0
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
jne 0xe95b
leaq 0xddbc(%rip), %rdi      # 0x1c2e0
callq 0xc060
movq -0x3b0(%rbp), %rax
movq 0x85a98(%rax), %rcx
addq $0x186a0, %rcx          # imm = 0x186A0
movq %rcx, 0x85a98(%rax)
testb $0x1, (%rax)
je 0xe94f
movq $0x0, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
cmpl $0x10, -0x34(%rbp)
jge 0xe598
movq -0x3b0(%rbp), %rax
addq $0x401f8, %rax          # imm = 0x401F8
movslq -0x34(%rbp), %rcx
imulq $0x4578, %rcx, %rcx     # imm = 0x4578
addq %rcx, %rax
movq 0x4270(%rax), %rax
addq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0xe55d
movq -0x3b0(%rbp), %rax
movq -0x30(%rbp), %xmm0
movaps 0x4b45(%rip), %xmm3     # 0x130f0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0x4b49(%rip), %xmm2     # 0x13100
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq 0x85a28(%rax), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
callq 0x3030
movq -0x3b0(%rbp), %rsi
movq %rax, -0x60(%rbp)
addq $0x85a30, %rsi          # imm = 0x85A30
leaq -0x60(%rbp), %rdi
callq 0xf930
movq %rax, -0x58(%rbp)
leaq -0x58(%rbp), %rdi
callq 0xf900
movq %rax, -0x50(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xd260
movq %rax, -0x48(%rbp)
cvtsi2sdq -0x48(%rbp), %xmm0
movsd -0x40(%rbp), %xmm1
movsd 0x4aa5(%rip), %xmm2     # 0x130e0
subsd %xmm1, %xmm2
mulsd %xmm2, %xmm0
divsd %xmm1, %xmm0
movaps %xmm0, %xmm1
cvttsd2si %xmm1, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
movsd 0x4a8a(%rip), %xmm1     # 0x130e8
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %rcx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movl $0x3c, %ecx
xorl %edx, %edx
divq %rcx
movq %rdx, -0x70(%rbp)
movq -0x68(%rbp), %rax
movl $0x3c, %ecx
xorl %edx, %edx
divq %rcx
movl $0x3c, %ecx
xorl %edx, %edx
divq %rcx
movq %rdx, -0x78(%rbp)
movq -0x68(%rbp), %rax
movl $0xe10, %ecx            # imm = 0xE10
xorl %edx, %edx
divq %rcx
movl $0x18, %ecx
xorl %edx, %edx
divq %rcx
movq %rdx, -0x80(%rbp)
movq -0x68(%rbp), %rax
movl $0x15180, %ecx          # imm = 0x15180
xorl %edx, %edx
divq %rcx
movq %rax, -0x88(%rbp)
movq 0xd8f9(%rip), %rdi      # 0x1bfd0
leaq 0x12a2(%rip), %rsi      # 0xf980
callq 0x30a0
movq %rax, %rdi
leaq 0x4ad9(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, %rdi
movq -0x3b0(%rbp), %rax
movq 0x85a20(%rax), %rsi
callq 0x3060
movq %rax, %rdi
leaq 0x4ab4(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, -0x3f8(%rbp)
movl $0xa, %edi
callq 0x4870
movq -0x3f8(%rbp), %rdi
movl %eax, -0x8c(%rbp)
movl -0x8c(%rbp), %esi
callq 0x3330
movq %rax, -0x3f0(%rbp)
movl $0x6, %edi
callq 0xf9b0
movq -0x3f0(%rbp), %rdi
movl %eax, -0x90(%rbp)
movl -0x90(%rbp), %esi
callq 0x3450
movq %rax, %rdi
leaq 0x125d(%rip), %rsi      # 0xf9d0
callq 0x30a0
movq %rax, %rdi
movsd 0x4955(%rip), %xmm0     # 0x130d8
mulsd -0x40(%rbp), %xmm0
callq 0x3530
movq %rax, %rdi
leaq 0x4fa0(%rip), %rsi      # 0x13737
callq 0x32a0
movq %rax, %rdi
leaq 0x4a20(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, -0x3e8(%rbp)
movq -0x18(%rbp), %rdi
callq 0xfa00
movq -0x3e8(%rbp), %rdi
movq %rax, %rsi
callq 0x32a0
movq %rax, %rdi
leaq 0x4f65(%rip), %rsi      # 0x13739
callq 0x32a0
movq %rax, -0x3e0(%rbp)
movl $0x3, %edi
callq 0x4870
movq -0x3e0(%rbp), %rdi
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %esi
callq 0x3330
movq %rax, %rdi
movq -0x88(%rbp), %rsi
callq 0x3060
movq %rax, %rdi
leaq 0x4f34(%rip), %rsi      # 0x1374f
callq 0x32a0
movq %rax, -0x3d8(%rbp)
movl $0x30, %edi
callq 0xfb60
movq -0x3d8(%rbp), %rdi
movb %al, -0x95(%rbp)
movzbl -0x95(%rbp), %esi
callq 0x3440
movq %rax, -0x3d0(%rbp)
movl $0x2, %edi
callq 0x4870
movq -0x3d0(%rbp), %rdi
movl %eax, -0x9c(%rbp)
movl -0x9c(%rbp), %esi
callq 0x3330
movq %rax, %rdi
movq -0x80(%rbp), %rsi
callq 0x3060
movq %rax, %rdi
leaq 0x4ec6(%rip), %rsi      # 0x1374f
callq 0x32a0
movq %rax, -0x3c8(%rbp)
movl $0x2, %edi
callq 0x4870
movq -0x3c8(%rbp), %rdi
movl %eax, -0xa0(%rbp)
movl -0xa0(%rbp), %esi
callq 0x3330
movq %rax, %rdi
movq -0x78(%rbp), %rsi
callq 0x3060
movq %rax, %rdi
leaq 0x4e82(%rip), %rsi      # 0x1374f
callq 0x32a0
movq %rax, -0x3c0(%rbp)
movl $0x2, %edi
callq 0x4870
movq -0x3c0(%rbp), %rdi
movl %eax, -0xa4(%rbp)
movl -0xa4(%rbp), %esi
callq 0x3330
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x3060
movq %rax, -0x3b8(%rbp)
movl $0x20, %edi
callq 0xfb60
movq -0x3b8(%rbp), %rdi
movb %al, -0xa5(%rbp)
movzbl -0xa5(%rbp), %esi
callq 0x3440
movq %rax, %rdi
leaq 0x4e16(%rip), %rsi      # 0x13751
callq 0x32a0
movq %rax, %rdi
movq 0xd68e(%rip), %rsi      # 0x1bfd8
callq 0x32d0
leaq 0xd98a(%rip), %rdi      # 0x1c2e0
callq 0xc7f0
movq -0x20(%rbp), %rax
movl $0xf4240, %ecx          # imm = 0xF4240
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
jne 0xe97b
movq -0x3b0(%rbp), %rdi
callq 0xfb80
movq -0x3b0(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x408(%rbp)
addq $0x85a38, %rdi          # imm = 0x85A38
xorl %eax, %eax
movl %eax, %esi
callq 0x5a10
movq -0x3b0(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x400(%rbp)
addq $0x85a50, %rdi          # imm = 0x85A50
xorl %eax, %eax
movl %eax, %esi
callq 0x10100
movq -0x408(%rbp), %rdi
movq -0x400(%rbp), %rsi
movq (%rax), %rdx
callq 0xfdb0
testb $0x1, %al
jne 0xe9dd
jmp 0xe4eb
movq -0x3b0(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x418(%rbp)
addq $0x85a68, %rdi          # imm = 0x85A68
xorl %eax, %eax
movl %eax, %esi
callq 0x5a10
movq -0x3b0(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x410(%rbp)
addq $0x85a80, %rdi          # imm = 0x85A80
xorl %eax, %eax
movl %eax, %esi
callq 0x10100
movq -0x418(%rbp), %rdi
movq -0x410(%rbp), %rsi
movq %rax, %rcx
movq -0x3b0(%rbp), %rax
movq (%rcx), %rdx
movl $0x55, %ecx
subq 0x85a20(%rax), %rcx
callq 0x10120
movq -0x3b0(%rbp), %rcx
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
addq 0x85a20(%rcx), %rax
cmpq $0x55, %rax
jbe 0xea6d
jmp 0xe4eb
movq -0x3b0(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x430(%rbp)
addq $0x85a68, %rdi          # imm = 0x85A68
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x438(%rbp)
callq 0x5a10
movq -0x438(%rbp), %rsi
movq -0x3b0(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x428(%rbp)
addq $0x85a80, %rdi          # imm = 0x85A80
callq 0x10100
movq -0x430(%rbp), %rsi
movq -0x428(%rbp), %rdx
movq %rax, %rcx
movq -0x3b0(%rbp), %rax
movq (%rcx), %rcx
movq 0x85a20(%rax), %rax
movl $0x55, %r8d
subq %rax, %r8
leaq -0xc8(%rbp), %rdi
callq 0x101a0
movq -0x18(%rbp), %rdi
callq 0xfa00
movq %rax, -0x420(%rbp)
jmp 0xeb03
leaq -0x115(%rbp), %rdi
movq %rdi, -0x440(%rbp)
callq 0x34e0
movq -0x420(%rbp), %rsi
movq -0x440(%rbp), %rdx
leaq -0x108(%rbp), %rdi
callq 0x3a90
jmp 0xeb32
leaq -0xe8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x10240
jmp 0xeb4e
movq -0x3b0(%rbp), %rdi
addq $0x859f8, %rdi          # imm = 0x859F8
leaq -0xe8(%rbp), %rsi
movq %rsi, -0x448(%rbp)
callq 0x3350
movq -0x448(%rbp), %rdi
callq 0x3160
leaq -0x108(%rbp), %rdi
callq 0x3160
leaq -0x115(%rbp), %rdi
callq 0x32f0
leaq 0xd746(%rip), %rdi      # 0x1c2e0
callq 0xc060
jmp 0xeba1
movq 0xd428(%rip), %rdi      # 0x1bfd0
leaq 0xdd1(%rip), %rsi       # 0xf980
callq 0x30a0
movq %rax, -0x450(%rbp)
jmp 0xebbd
movl $0x3, %edi
callq 0x4870
movq -0x450(%rbp), %rdi
movl %eax, -0x11c(%rbp)
movl -0x11c(%rbp), %esi
callq 0x3330
movq %rax, -0x458(%rbp)
jmp 0xebe8
movl $0x20, %edi
callq 0xfb60
movb %al, -0x459(%rbp)
jmp 0xebfa
movq -0x458(%rbp), %rdi
movb -0x459(%rbp), %al
movb %al, -0x11d(%rbp)
movzbl -0x11d(%rbp), %esi
callq 0x3440
movq %rax, -0x468(%rbp)
jmp 0xec22
movq -0x468(%rbp), %rdi
movq -0x3b0(%rbp), %rax
movq -0x28(%rbp), %rsi
movq 0x85a20(%rax), %rax
addq %rax, %rsi
callq 0x3060
movq %rax, -0x470(%rbp)
jmp 0xec4c
movq -0x470(%rbp), %rdi
leaq 0x456c(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, -0x478(%rbp)
jmp 0xec68
movq -0x478(%rbp), %rdi
movq -0x3b0(%rbp), %rsi
addq $0x859f8, %rsi          # imm = 0x859F8
callq 0x3250
movq %rax, -0x480(%rbp)
jmp 0xec8b
movq -0x480(%rbp), %rdi
movq 0xd31f(%rip), %rsi      # 0x1bfb8
callq 0x32d0
jmp 0xeca0
leaq 0x4ab6(%rip), %rsi      # 0x1375d
leaq -0x320(%rbp), %rdi
movl $0x1, %edx
callq 0x3300
jmp 0xecba
leaq 0xcbf(%rip), %rsi       # 0xf980
leaq -0x320(%rbp), %rdi
callq 0x30a0
movq %rax, -0x488(%rbp)
jmp 0xecd6
movl $0x3, %edi
callq 0x4870
movq -0x488(%rbp), %rdi
movl %eax, -0x324(%rbp)
movl -0x324(%rbp), %esi
callq 0x3330
movq %rax, -0x490(%rbp)
jmp 0xed01
movl $0x20, %edi
callq 0xfb60
movb %al, -0x491(%rbp)
jmp 0xed13
movq -0x490(%rbp), %rdi
movb -0x491(%rbp), %al
movb %al, -0x325(%rbp)
movzbl -0x325(%rbp), %esi
callq 0x3440
movq %rax, -0x4a0(%rbp)
jmp 0xed3b
movq -0x4a0(%rbp), %rdi
movq -0x3b0(%rbp), %rax
movq -0x28(%rbp), %rsi
movq 0x85a20(%rax), %rax
addq %rax, %rsi
callq 0x3060
movq %rax, -0x4a8(%rbp)
jmp 0xed65
movq -0x4a8(%rbp), %rdi
leaq 0x4453(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, -0x4b0(%rbp)
jmp 0xed81
movq -0x4b0(%rbp), %rdi
movq -0x3b0(%rbp), %rsi
addq $0x859f8, %rsi          # imm = 0x859F8
callq 0x3250
movq %rax, -0x4b8(%rbp)
jmp 0xeda4
movq -0x4b8(%rbp), %rdi
movq 0xd206(%rip), %rsi      # 0x1bfb8
callq 0x32d0
jmp 0xedb9
leaq -0x320(%rbp), %rdi
callq 0x33c0
jmp 0xedc7
movq -0x3b0(%rbp), %rax
testb $0x1, (%rax)
je 0xf46c
movq $0x0, -0x330(%rbp)
movl $0x0, -0x334(%rbp)
cmpl $0x10, -0x334(%rbp)
jge 0xeeba
movq -0x3b0(%rbp), %rax
addq $0x401f8, %rax          # imm = 0x401F8
movslq -0x334(%rbp), %rcx
imulq $0x4578, %rcx, %rcx     # imm = 0x4578
addq %rcx, %rax
movq 0x4270(%rax), %rax
addq -0x330(%rbp), %rax
movq %rax, -0x330(%rbp)
movl -0x334(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x334(%rbp)
jmp 0xedec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0xf4a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0xee86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x3160
leaq -0x115(%rbp), %rdi
callq 0x32f0
jmp 0xf4a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x3400
jmp 0xf4a5
movq -0x3b0(%rbp), %rax
movq -0x330(%rbp), %xmm0
movaps 0x4220(%rip), %xmm3     # 0x130f0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0x4224(%rip), %xmm2     # 0x13100
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq 0x85a28(%rax), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x340(%rbp)
callq 0x3030
movq -0x3b0(%rbp), %rsi
movq %rax, -0x360(%rbp)
addq $0x85a30, %rsi          # imm = 0x85A30
leaq -0x360(%rbp), %rdi
callq 0xf930
movq %rax, -0x4c0(%rbp)
jmp 0xef41
movq -0x4c0(%rbp), %rax
movq %rax, -0x358(%rbp)
leaq -0x358(%rbp), %rdi
callq 0xf900
movq %rax, -0x4c8(%rbp)
jmp 0xef64
movq -0x4c8(%rbp), %rax
movq %rax, -0x350(%rbp)
leaq -0x350(%rbp), %rdi
callq 0xd260
movq %rax, -0x348(%rbp)
cvtsi2sdq -0x348(%rbp), %xmm0
movsd -0x340(%rbp), %xmm1
movsd 0x4142(%rip), %xmm2     # 0x130e0
subsd %xmm1, %xmm2
mulsd %xmm2, %xmm0
divsd %xmm1, %xmm0
movaps %xmm0, %xmm1
cvttsd2si %xmm1, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
movsd 0x4127(%rip), %xmm1     # 0x130e8
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %rcx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x368(%rbp)
movq -0x368(%rbp), %rax
movq %rax, -0x4e8(%rbp)
movabsq $-0x7777777777777777, %rcx # imm = 0x8888888888888889
mulq %rcx
movq -0x4e8(%rbp), %rax
shrq $0x5, %rdx
imulq $0x3c, %rdx, %rdx
subq %rdx, %rax
movq %rax, -0x370(%rbp)
movq -0x368(%rbp), %rax
mulq %rcx
movq %rdx, %rax
shrq $0x5, %rax
movq %rax, -0x4e0(%rbp)
movabsq $0x888888888888889, %rcx # imm = 0x888888888888889
mulq %rcx
movq -0x4e0(%rbp), %rax
shrq %rdx
imulq $0x3c, %rdx, %rcx
subq %rcx, %rax
movq %rax, -0x378(%rbp)
movq -0x368(%rbp), %rax
shrq $0x4, %rax
movabsq $0x91a2b3c4d5e6f81, %rcx # imm = 0x91A2B3C4D5E6F81
mulq %rcx
movq %rdx, %rax
shrq $0x3, %rax
movq %rax, -0x4d8(%rbp)
movabsq $0xaaaaaaaaaaaaaab, %rcx # imm = 0xAAAAAAAAAAAAAAB
mulq %rcx
movq -0x4d8(%rbp), %rax
shlq $0x3, %rdx
leaq (%rdx,%rdx,2), %rcx
subq %rcx, %rax
movq %rax, -0x380(%rbp)
movq -0x368(%rbp), %rax
movabsq $-0x3dd1baf98d76b549, %rcx # imm = 0xC22E450672894AB7
mulq %rcx
shrq $0x10, %rdx
movq %rdx, -0x388(%rbp)
movq 0xcf16(%rip), %rdi      # 0x1bfd0
leaq 0x8bf(%rip), %rsi       # 0xf980
callq 0x30a0
movq %rax, -0x4d0(%rbp)
jmp 0xf0cf
movq -0x4d0(%rbp), %rdi
leaq 0x40e9(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, -0x4f0(%rbp)
jmp 0xf0eb
movq -0x4f0(%rbp), %rdi
movq -0x3b0(%rbp), %rax
movq 0x85a20(%rax), %rsi
callq 0x3060
movq %rax, -0x4f8(%rbp)
jmp 0xf10e
movq -0x4f8(%rbp), %rdi
leaq 0x40aa(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, -0x500(%rbp)
jmp 0xf12a
movl $0xa, %edi
callq 0x4870
movq -0x500(%rbp), %rdi
movl %eax, -0x38c(%rbp)
movl -0x38c(%rbp), %esi
callq 0x3330
movq %rax, -0x508(%rbp)
jmp 0xf155
movl $0x6, %edi
callq 0xf9b0
movl %eax, -0x50c(%rbp)
jmp 0xf167
movq -0x508(%rbp), %rdi
movl -0x50c(%rbp), %eax
movl %eax, -0x390(%rbp)
movl -0x390(%rbp), %esi
callq 0x3450
movq %rax, -0x518(%rbp)
jmp 0xf18e
movq -0x518(%rbp), %rdi
leaq 0x834(%rip), %rsi       # 0xf9d0
callq 0x30a0
movq %rax, -0x520(%rbp)
jmp 0xf1aa
movq -0x520(%rbp), %rdi
movsd -0x340(%rbp), %xmm0
movsd 0x3f17(%rip), %xmm1     # 0x130d8
mulsd %xmm1, %xmm0
callq 0x3530
movq %rax, -0x528(%rbp)
jmp 0xf1d3
movq -0x528(%rbp), %rdi
leaq 0x4556(%rip), %rsi      # 0x13737
callq 0x32a0
movq %rax, -0x530(%rbp)
jmp 0xf1ef
movq -0x530(%rbp), %rdi
leaq 0x3fc9(%rip), %rsi      # 0x131c6
callq 0x32a0
movq %rax, -0x538(%rbp)
jmp 0xf20b
movq -0x18(%rbp), %rdi
callq 0xfa00
movq %rax, -0x540(%rbp)
jmp 0xf21d
movq -0x540(%rbp), %rsi
movq -0x538(%rbp), %rdi
callq 0x32a0
movq %rax, -0x548(%rbp)
jmp 0xf239
movq -0x548(%rbp), %rdi
leaq 0x44f2(%rip), %rsi      # 0x13739
callq 0x32a0
movq %rax, -0x550(%rbp)
jmp 0xf255
movl $0x3, %edi
callq 0x4870
movq -0x550(%rbp), %rdi
movl %eax, -0x394(%rbp)
movl -0x394(%rbp), %esi
callq 0x3330
movq %rax, -0x558(%rbp)
jmp 0xf280
movq -0x558(%rbp), %rdi
movq -0x388(%rbp), %rsi
callq 0x3060
movq %rax, -0x560(%rbp)
jmp 0xf29c
movq -0x560(%rbp), %rdi
leaq 0x44a5(%rip), %rsi      # 0x1374f
callq 0x32a0
movq %rax, -0x568(%rbp)
jmp 0xf2b8
movl $0x30, %edi
callq 0xfb60
movb %al, -0x569(%rbp)
jmp 0xf2ca
movq -0x568(%rbp), %rdi
movb -0x569(%rbp), %al
movb %al, -0x395(%rbp)
movzbl -0x395(%rbp), %esi
callq 0x3440
movq %rax, -0x578(%rbp)
jmp 0xf2f2
movl $0x2, %edi
callq 0x4870
movq -0x578(%rbp), %rdi
movl %eax, -0x39c(%rbp)
movl -0x39c(%rbp), %esi
callq 0x3330
movq %rax, -0x580(%rbp)
jmp 0xf31d
movq -0x580(%rbp), %rdi
movq -0x380(%rbp), %rsi
callq 0x3060
movq %rax, -0x588(%rbp)
jmp 0xf339
movq -0x588(%rbp), %rdi
leaq 0x4408(%rip), %rsi      # 0x1374f
callq 0x32a0
movq %rax, -0x590(%rbp)
jmp 0xf355
movl $0x2, %edi
callq 0x4870
movq -0x590(%rbp), %rdi
movl %eax, -0x3a0(%rbp)
movl -0x3a0(%rbp), %esi
callq 0x3330
movq %rax, -0x598(%rbp)
jmp 0xf380
movq -0x598(%rbp), %rdi
movq -0x378(%rbp), %rsi
callq 0x3060
movq %rax, -0x5a0(%rbp)
jmp 0xf39c
movq -0x5a0(%rbp), %rdi
leaq 0x43a5(%rip), %rsi      # 0x1374f
callq 0x32a0
movq %rax, -0x5a8(%rbp)
jmp 0xf3b8
movl $0x2, %edi
callq 0x4870
movq -0x5a8(%rbp), %rdi
movl %eax, -0x3a4(%rbp)
movl -0x3a4(%rbp), %esi
callq 0x3330
movq %rax, -0x5b0(%rbp)
jmp 0xf3e3
movq -0x5b0(%rbp), %rdi
movq -0x370(%rbp), %rsi
callq 0x3060
movq %rax, -0x5b8(%rbp)
jmp 0xf3ff
movl $0x20, %edi
callq 0xfb60
movb %al, -0x5b9(%rbp)
jmp 0xf411
movq -0x5b8(%rbp), %rdi
movb -0x5b9(%rbp), %al
movb %al, -0x3a5(%rbp)
movzbl -0x3a5(%rbp), %esi
callq 0x3440
movq %rax, -0x5c8(%rbp)
jmp 0xf439
movq -0x5c8(%rbp), %rdi
leaq 0x430a(%rip), %rsi      # 0x13751
callq 0x32a0
movq %rax, -0x5d0(%rbp)
jmp 0xf455
movq -0x5d0(%rbp), %rdi
movq 0xcb75(%rip), %rsi      # 0x1bfd8
callq 0x32d0
jmp 0xf46a
jmp 0xf46c
leaq 0xce6d(%rip), %rdi      # 0x1c2e0
callq 0xc7f0
jmp 0xf47a
movq -0x3b0(%rbp), %rdi
callq 0xfb80
jmp 0xf488
leaq -0x320(%rbp), %rdi
callq 0x3400
leaq -0xc8(%rbp), %rdi
callq 0x3160
jmp 0xe4eb
leaq -0xc8(%rbp), %rdi
callq 0x3160
jmp 0xf4bc
addq $0x5d0, %rsp            # imm = 0x5D0
popq %rbp
retq
movq -0x110(%rbp), %rdi
callq 0x34d0
nopl (%rax,%rax)