// File: ksabry[P]bfbrute/src/ProgramSearch.h
// Function: ProgramSearch<ProgramIterator<400ul, 32ul, 12ul, 32ul>, DataCache<32ul, 12ul>>::Filename[abi:cxx11]()
std::string Filename()
	{
		std::string filename = "/home/ksabry/dev/bfbrute/progress/program_search";

		for (std::string input : inputs)
		{
			filename += "_" + StringToHex(input);
		}
		filename += "_";
		for (std::string output : outputs)
		{
			filename += "_" + StringToHex(output);
		}

		filename += "__" + std::to_string(THREAD_COUNT);
		// SIZE_START is not necessary
		filename += "_" + std::to_string(SHOW_ALL_PROGRAMS_LENGTH);
		filename += "_" + std::to_string(MAX_JUMPS);

#ifdef SINGLE_BRACKET_HIERARCHY
		filename += "_T";
#else
		filename += "_F";
#endif

#ifdef SHORT_CIRCUIT_LINEAR_SINGULAR
		filename += "_T";
#else
		filename += "_F";
#endif

#ifdef INITIAL_ZERO
		filename += "_T";
#else
		filename += "_F";
#endif

#ifdef INITIAL_DATA_SYMMETRIC
		filename += "_T";
#else
		filename += "_F";
#endif

#ifdef NO_ENDING
		filename += "_T";
#else
		filename += "_F";
#endif

#ifdef CASE_INSENSITIVE
		filename += "_T";
#else
		filename += "_F";
#endif

#ifdef MAX_BRACKET_DEPTH
		filename += "_" + std::to_string(MAX_BRACKET_DEPTH);
#else
		filename += "_F";
#endif

#ifdef SINGLE_ITER_COUNT
		filename += "_" + std::to_string(SINGLE_ITER_COUNT);
#else
		filename += "_F";
#endif

#ifdef MAX_FIRST_SIZE
		filename += "_" + std::to_string(MAX_FIRST_SIZE);
#else
		filename += "_F";
#endif

		return filename;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2b0, %rsp            # imm = 0x2B0
movq %rdi, -0x278(%rbp)
movq %rdi, %rax
movq %rax, -0x288(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x280(%rbp)
movb $0x0, -0x11(%rbp)
leaq -0x12(%rbp), %rdi
movq %rdi, -0x270(%rbp)
callq 0x34e0
movq -0x278(%rbp), %rdi
movq -0x270(%rbp), %rdx
leaq 0x71af(%rip), %rsi      # 0x13297
callq 0x3a90
jmp 0xc0ef
leaq -0x12(%rbp), %rdi
callq 0x32f0
movq -0x280(%rbp), %rax
addq $0x85a38, %rax          # imm = 0x85A38
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
callq 0xcb40
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
callq 0xcb70
movq %rax, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xcba0
testb $0x1, %al
jne 0xc139
jmp 0xc279
leaq -0x38(%rbp), %rdi
callq 0xcbe0
movq (%rax), %rax
movq %rax, -0x298(%rbp)
leaq -0x61(%rbp), %rdi
movq %rdi, -0x290(%rbp)
callq 0x34e0
movq -0x298(%rbp), %rsi
movq -0x290(%rbp), %rdx
leaq -0x60(%rbp), %rdi
callq 0x3a90
jmp 0xc175
leaq -0x61(%rbp), %rdi
callq 0x32f0
movq -0x280(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
leaq -0x60(%rbp), %rdx
callq 0xcc50
jmp 0xc197
leaq 0x712b(%rip), %rsi      # 0x132c9
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rdx
callq 0xcc00
jmp 0xc1b3
movq -0x278(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3370
jmp 0xc1c8
leaq -0x88(%rbp), %rdi
callq 0x3160
leaq -0xa8(%rbp), %rdi
callq 0x3160
leaq -0x60(%rbp), %rdi
callq 0x3160
leaq -0x38(%rbp), %rdi
callq 0xcd60
jmp 0xc123
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x12(%rbp), %rdi
callq 0x32f0
jmp 0xc7dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x61(%rbp), %rdi
callq 0x32f0
jmp 0xc7d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc26b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc25f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x3160
leaq -0xa8(%rbp), %rdi
callq 0x3160
leaq -0x60(%rbp), %rdi
callq 0x3160
jmp 0xc7d1
movq -0x278(%rbp), %rdi
leaq 0x7042(%rip), %rsi      # 0x132c9
callq 0x3290
jmp 0xc28e
movq -0x280(%rbp), %rax
addq $0x85a68, %rax          # imm = 0x85A68
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rdi
callq 0xcb40
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
callq 0xcb70
movq %rax, -0xc0(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xcba0
testb $0x1, %al
jne 0xc2e4
jmp 0xc436
leaq -0xb8(%rbp), %rdi
callq 0xcbe0
movq (%rax), %rax
movq %rax, -0x2a8(%rbp)
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
callq 0x34e0
movq -0x2a8(%rbp), %rsi
movq -0x2a0(%rbp), %rdx
leaq -0xe0(%rbp), %rdi
callq 0x3a90
jmp 0xc329
leaq -0xe1(%rbp), %rdi
callq 0x32f0
movq -0x280(%rbp), %rsi
leaq -0x128(%rbp), %rdi
leaq -0xe0(%rbp), %rdx
callq 0xcc50
jmp 0xc351
leaq 0x6f71(%rip), %rsi      # 0x132c9
leaq -0x108(%rbp), %rdi
leaq -0x128(%rbp), %rdx
callq 0xcc00
jmp 0xc36d
movq -0x278(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x3370
jmp 0xc382
leaq -0x108(%rbp), %rdi
callq 0x3160
leaq -0x128(%rbp), %rdi
callq 0x3160
leaq -0xe0(%rbp), %rdi
callq 0x3160
leaq -0xb8(%rbp), %rdi
callq 0xcd60
jmp 0xc2c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc7d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0xe1(%rbp), %rdi
callq 0x32f0
jmp 0xc7d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc425
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc419
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x3160
leaq -0x128(%rbp), %rdi
callq 0x3160
leaq -0xe0(%rbp), %rdi
callq 0x3160
jmp 0xc7d1
leaq -0x168(%rbp), %rdi
movl $0x10, %esi
callq 0xcd80
jmp 0xc449
leaq 0x6e78(%rip), %rsi      # 0x132c8
leaq -0x148(%rbp), %rdi
leaq -0x168(%rbp), %rdx
callq 0xcc00
jmp 0xc465
movq -0x278(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x3370
jmp 0xc47a
leaq -0x148(%rbp), %rdi
callq 0x3160
leaq -0x168(%rbp), %rdi
callq 0x3160
leaq -0x1a8(%rbp), %rdi
movl $0x55, %esi
callq 0xcd80
jmp 0xc4a5
leaq 0x6e1d(%rip), %rsi      # 0x132c9
leaq -0x188(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0xcc00
jmp 0xc4c1
movq -0x278(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x3370
jmp 0xc4d6
leaq -0x188(%rbp), %rdi
callq 0x3160
leaq -0x1a8(%rbp), %rdi
callq 0x3160
leaq -0x1e8(%rbp), %rdi
movl $0xc350, %esi           # imm = 0xC350
callq 0xcd80
jmp 0xc501
leaq 0x6dc1(%rip), %rsi      # 0x132c9
leaq -0x1c8(%rbp), %rdi
leaq -0x1e8(%rbp), %rdx
callq 0xcc00
jmp 0xc51d
movq -0x278(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x3370
jmp 0xc532
leaq -0x1c8(%rbp), %rdi
callq 0x3160
leaq -0x1e8(%rbp), %rdi
callq 0x3160
movq -0x278(%rbp), %rdi
leaq 0x6d73(%rip), %rsi      # 0x132cb
callq 0x3290
jmp 0xc55f
movq -0x278(%rbp), %rdi
leaq 0x6d5e(%rip), %rsi      # 0x132cb
callq 0x3290
jmp 0xc574
movq -0x278(%rbp), %rdi
leaq 0x6d49(%rip), %rsi      # 0x132cb
callq 0x3290
jmp 0xc589
movq -0x278(%rbp), %rdi
leaq 0x6d37(%rip), %rsi      # 0x132ce
callq 0x3290
jmp 0xc59e
movq -0x278(%rbp), %rdi
leaq 0x6d1f(%rip), %rsi      # 0x132cb
callq 0x3290
jmp 0xc5b3
movq -0x278(%rbp), %rdi
leaq 0x6d0d(%rip), %rsi      # 0x132ce
callq 0x3290
jmp 0xc5c8
leaq -0x228(%rbp), %rdi
movl $0x2, %esi
callq 0xcd80
jmp 0xc5db
leaq 0x6ce7(%rip), %rsi      # 0x132c9
leaq -0x208(%rbp), %rdi
leaq -0x228(%rbp), %rdx
callq 0xcc00
jmp 0xc5f7
movq -0x278(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x3370
jmp 0xc60c
leaq -0x208(%rbp), %rdi
callq 0x3160
leaq -0x228(%rbp), %rdi
callq 0x3160
movq -0x278(%rbp), %rdi
leaq 0x6c9c(%rip), %rsi      # 0x132ce
callq 0x3290
jmp 0xc639
leaq -0x268(%rbp), %rdi
movl $0x1, %esi
callq 0xcd80
jmp 0xc64c
leaq 0x6c76(%rip), %rsi      # 0x132c9
leaq -0x248(%rbp), %rdi
leaq -0x268(%rbp), %rdx
callq 0xcc00
jmp 0xc668
movq -0x278(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x3370
jmp 0xc67d
leaq -0x248(%rbp), %rdi
callq 0x3160
leaq -0x268(%rbp), %rdi
callq 0x3160
movb $0x1, -0x11(%rbp)
testb $0x1, -0x11(%rbp)
jne 0xc7c1
jmp 0xc7b5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x3160
leaq -0x168(%rbp), %rdi
callq 0x3160
jmp 0xc7d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc705
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x3160
leaq -0x1a8(%rbp), %rdi
callq 0x3160
jmp 0xc7d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc73c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x3160
leaq -0x1e8(%rbp), %rdi
callq 0x3160
jmp 0xc7d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc773
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x3160
leaq -0x228(%rbp), %rdi
callq 0x3160
jmp 0xc7d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xc7a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x3160
leaq -0x268(%rbp), %rdi
callq 0x3160
jmp 0xc7d1
movq -0x278(%rbp), %rdi
callq 0x3160
movq -0x288(%rbp), %rax
addq $0x2b0, %rsp            # imm = 0x2B0
popq %rbp
retq
movq -0x278(%rbp), %rdi
callq 0x3160
movq -0x20(%rbp), %rdi
callq 0x34d0
nopw %cs:(%rax,%rax)