// File: ralgond[P]SortedListIntersection/main.cpp
// Function: main
int main(int argc, char* argv[]) {

	string file1 = argv[1];
	string file2 = argv[2];

	uint32_t a_len = 0;
	uint32_t* a = read_sorted_int_from_file(file1, &a_len);
	cout<<"file "<<file1<<": "<<a_len<<endl;

	uint32_t b_len = 0;
	uint32_t* b = read_sorted_int_from_file(file2, &b_len);
	cout<<"file "<<file2<<": "<<b_len<<endl;


	uint32_t rareLen = 0;
	uint32_t* rare = NULL;
	uint32_t freqLen = 0;
	uint32_t* freq = NULL;

	if (a_len < b_len) {
		rareLen = a_len;
		rare = a;
		freqLen = b_len;
		freq = b;
	} else {
		rareLen = b_len;
		rare = b;
		freqLen = a_len;
		freq = a;
	}


	uint32_t* c = new uint32_t[rareLen];

	uint32_t cnt = 0;

	bloom_filter* filter = create_bloom_filter(freq, freqLen);

	long time1, time2;

	int N = 10000;


	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = v1_avx2_intersection(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "v1_avx2\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;

	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = v3_avx2_intersection(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "v3_avx2\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;

	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = highlyscalable_SIMD_intersection(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "highlyscalable_SIMD\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;
	
	prepare_shuffling_dict32();
	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = highlyscalable_avx2_intersection(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "highlyscalable_avx2\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;

	prepare_shuffling_dict64();
	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = highlyscalable_avx512_intersection(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "highlyscalable_avx512\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;




	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = lemire_highlyscalable_SIMD_intersection(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "lemire_highlyscalable_SIMD\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;

	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = scalar(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "scalar\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;

	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = block_merge_intersection(freq, freqLen, rare, rareLen, c);
	time2 = currentTimeMs();
	cout << "block_merge\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;

//	time1 = currentTimeMs();
//	for (int i = 0; i < 10000; i++)
//		cnt = bisearch_intersection(freq, freqLen, rare, rareLen, c);
//	time2 = currentTimeMs();
//	cout << "bisearch\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;
	
//	time1 = currentTimeMs();
//	for (int i = 0; i < 10000; i++)
//		cnt = bloomfilter_intersection(filter, freq, freqLen, rare, rareLen, c);
//	time2 = currentTimeMs();
//	cout << "bloom\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;
label1:
	prepare_shuffling_dict16();
	PrefixList* rarePl = buildPrefixList(rare, rareLen);
	PrefixList* freqPl = buildPrefixList(freq, freqLen);

	time1 = currentTimeMs();
	for (int i = 0; i < 10000; i++)
		cnt = intersectPrefixList(freqPl, rarePl, c);
	time2 = currentTimeMs();
	cout << "sttni\t" << (time2-time1) << "ms"<<"\t"<<qps(N, (time2-time1))<<"\t"<<cnt<<endl;

	//for (uint32_t i = 0; i < cnt; i++) {
	//	cout<<c[i]<<endl;
	//}

	return 0;
}

// Assembly:
subq $0x4b8, %rsp            # imm = 0x4B8
movl $0x0, 0x4b4(%rsp)
movl %edi, 0x4b0(%rsp)
movq %rsi, 0x4a8(%rsp)
movq 0x4a8(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x358(%rsp)
leaq 0x487(%rsp), %rdi
movq %rdi, 0x360(%rsp)
callq 0x2340
movq 0x358(%rsp), %rsi
movq 0x360(%rsp), %rdx
leaq 0x488(%rsp), %rdi
callq 0x4ac0
jmp 0xc369
leaq 0x487(%rsp), %rdi
callq 0x2220
movq 0x4a8(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x348(%rsp)
leaq 0x44f(%rsp), %rdi
movq %rdi, 0x350(%rsp)
callq 0x2340
movq 0x348(%rsp), %rsi
movq 0x350(%rsp), %rdx
leaq 0x450(%rsp), %rdi
callq 0x4ac0
jmp 0xc3be
leaq 0x44f(%rsp), %rdi
callq 0x2220
movl $0x0, 0x448(%rsp)
leaq 0x420(%rsp), %rdi
leaq 0x488(%rsp), %rsi
callq 0x20d0
jmp 0xc3ed
leaq 0x420(%rsp), %rdi
leaq 0x448(%rsp), %rsi
callq 0xd780
movq %rax, 0x340(%rsp)
jmp 0xc40c
leaq 0x420(%rsp), %rdi
callq 0x2110
movq 0x340(%rsp), %rax
movq %rax, 0x440(%rsp)
movq 0x5ba8(%rip), %rdi      # 0x11fd8
leaq 0x2317(%rip), %rsi      # 0xe74e
callq 0x21d0
movq %rax, 0x338(%rsp)
jmp 0xc446
movq 0x338(%rsp), %rdi
leaq 0x488(%rsp), %rsi
callq 0x21b0
movq %rax, 0x330(%rsp)
jmp 0xc465
movq 0x330(%rsp), %rdi
leaq 0x22e0(%rip), %rsi      # 0xe754
callq 0x21d0
movq %rax, 0x328(%rsp)
jmp 0xc483
movq 0x328(%rsp), %rdi
movl 0x448(%rsp), %esi
callq 0x2270
movq %rax, 0x320(%rsp)
jmp 0xc4a1
movq 0x320(%rsp), %rdi
movq 0x5b18(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xc4b7
movl $0x0, 0x41c(%rsp)
leaq 0x3f0(%rsp), %rdi
leaq 0x450(%rsp), %rsi
callq 0x20d0
jmp 0xc4d9
leaq 0x3f0(%rsp), %rdi
leaq 0x41c(%rsp), %rsi
callq 0xd780
movq %rax, 0x318(%rsp)
jmp 0xc4f8
leaq 0x3f0(%rsp), %rdi
callq 0x2110
movq 0x318(%rsp), %rax
movq %rax, 0x410(%rsp)
movq 0x5abc(%rip), %rdi      # 0x11fd8
leaq 0x222b(%rip), %rsi      # 0xe74e
callq 0x21d0
movq %rax, 0x310(%rsp)
jmp 0xc532
movq 0x310(%rsp), %rdi
leaq 0x450(%rsp), %rsi
callq 0x21b0
movq %rax, 0x308(%rsp)
jmp 0xc551
movq 0x308(%rsp), %rdi
leaq 0x21f4(%rip), %rsi      # 0xe754
callq 0x21d0
movq %rax, 0x300(%rsp)
jmp 0xc56f
movq 0x300(%rsp), %rdi
movl 0x41c(%rsp), %esi
callq 0x2270
movq %rax, 0x2f8(%rsp)
jmp 0xc58d
movq 0x2f8(%rsp), %rdi
movq 0x5a2c(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xc5a3
movl $0x0, 0x3ec(%rsp)
movq $0x0, 0x3e0(%rsp)
movl $0x0, 0x3dc(%rsp)
movq $0x0, 0x3d0(%rsp)
movl 0x448(%rsp), %eax
cmpl 0x41c(%rsp), %eax
jae 0xc6d7
movl 0x448(%rsp), %eax
movl %eax, 0x3ec(%rsp)
movq 0x440(%rsp), %rax
movq %rax, 0x3e0(%rsp)
movl 0x41c(%rsp), %eax
movl %eax, 0x3dc(%rsp)
movq 0x410(%rsp), %rax
movq %rax, 0x3d0(%rsp)
jmp 0xc713
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
leaq 0x487(%rsp), %rdi
callq 0x2220
jmp 0xd76c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
leaq 0x44f(%rsp), %rdi
callq 0x2220
jmp 0xd75f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd752
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
leaq 0x420(%rsp), %rdi
callq 0x2110
jmp 0xd752
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
leaq 0x3f0(%rsp), %rdi
callq 0x2110
jmp 0xd752
movl 0x41c(%rsp), %eax
movl %eax, 0x3ec(%rsp)
movq 0x410(%rsp), %rax
movq %rax, 0x3e0(%rsp)
movl 0x448(%rsp), %eax
movl %eax, 0x3dc(%rsp)
movq 0x440(%rsp), %rax
movq %rax, 0x3d0(%rsp)
movl 0x3ec(%rsp), %eax
movl %eax, %edi
shlq $0x2, %rdi
callq 0x2030
movq %rax, 0x2f0(%rsp)
jmp 0xc72f
movq 0x2f0(%rsp), %rax
movq %rax, 0x3c8(%rsp)
movl $0x0, 0x3c4(%rsp)
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %esi
callq 0x5310
movq %rax, 0x2e8(%rsp)
jmp 0xc768
movq 0x2e8(%rsp), %rax
movq %rax, 0x3b8(%rsp)
movl $0x2710, 0x3a4(%rsp) # imm = 0x2710
callq 0xddc0
movq %rax, 0x2e0(%rsp)
jmp 0xc792
movq 0x2e0(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x3a0(%rsp)
cmpl $0x2710, 0x3a0(%rsp) # imm = 0x2710
jge 0xc815
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %eax
movl %eax, %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %eax
movl %eax, %ecx
movq 0x3c8(%rsp), %r8
callq 0xabb0
movq %rax, 0x2d8(%rsp)
jmp 0xc7f3
movq 0x2d8(%rsp), %rax
movl %eax, 0x3c4(%rsp)
movl 0x3a0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3a0(%rsp)
jmp 0xc7ad
callq 0xddc0
movq %rax, 0x2d0(%rsp)
jmp 0xc824
movq 0x2d0(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x579d(%rip), %rdi      # 0x11fd8
leaq 0x1f15(%rip), %rsi      # 0xe757
callq 0x21d0
movq %rax, 0x2c8(%rsp)
jmp 0xc851
movq 0x2c8(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x2c0(%rsp)
jmp 0xc87b
movq 0x2c0(%rsp), %rdi
leaq 0x1ed6(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x2b8(%rsp)
jmp 0xc899
movq 0x2b8(%rsp), %rdi
leaq 0x1eee(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x2b0(%rsp)
jmp 0xc8b7
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x2b0(%rsp), %rdi
callq 0x2150
movq %rax, 0x2a8(%rsp)
jmp 0xc8ed
movq 0x2a8(%rsp), %rdi
leaq 0x1e9a(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x2a0(%rsp)
jmp 0xc90b
movq 0x2a0(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x298(%rsp)
jmp 0xc929
movq 0x298(%rsp), %rdi
movq 0x5690(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xc93f
callq 0xddc0
movq %rax, 0x290(%rsp)
jmp 0xc94e
movq 0x290(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x39c(%rsp)
cmpl $0x2710, 0x39c(%rsp) # imm = 0x2710
jge 0xc9d1
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %eax
movl %eax, %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %eax
movl %eax, %ecx
movq 0x3c8(%rsp), %r8
callq 0xb150
movq %rax, 0x288(%rsp)
jmp 0xc9af
movq 0x288(%rsp), %rax
movl %eax, 0x3c4(%rsp)
movl 0x39c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x39c(%rsp)
jmp 0xc969
callq 0xddc0
movq %rax, 0x280(%rsp)
jmp 0xc9e0
movq 0x280(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x55e1(%rip), %rdi      # 0x11fd8
leaq 0x1d65(%rip), %rsi      # 0xe763
callq 0x21d0
movq %rax, 0x278(%rsp)
jmp 0xca0d
movq 0x278(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x270(%rsp)
jmp 0xca37
movq 0x270(%rsp), %rdi
leaq 0x1d1a(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x268(%rsp)
jmp 0xca55
movq 0x268(%rsp), %rdi
leaq 0x1d32(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x260(%rsp)
jmp 0xca73
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x260(%rsp), %rdi
callq 0x2150
movq %rax, 0x258(%rsp)
jmp 0xcaa9
movq 0x258(%rsp), %rdi
leaq 0x1cde(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x250(%rsp)
jmp 0xcac7
movq 0x250(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x248(%rsp)
jmp 0xcae5
movq 0x248(%rsp), %rdi
movq 0x54d4(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xcafb
callq 0xddc0
movq %rax, 0x240(%rsp)
jmp 0xcb0a
movq 0x240(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x398(%rsp)
cmpl $0x2710, 0x398(%rsp) # imm = 0x2710
jge 0xcb8d
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %eax
movl %eax, %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %eax
movl %eax, %ecx
movq 0x3c8(%rsp), %r8
callq 0x8ab0
movq %rax, 0x238(%rsp)
jmp 0xcb6b
movq 0x238(%rsp), %rax
movl %eax, 0x3c4(%rsp)
movl 0x398(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x398(%rsp)
jmp 0xcb25
callq 0xddc0
movq %rax, 0x230(%rsp)
jmp 0xcb9c
movq 0x230(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x5425(%rip), %rdi      # 0x11fd8
leaq 0x1be5(%rip), %rsi      # 0xe79f
callq 0x21d0
movq %rax, 0x228(%rsp)
jmp 0xcbc9
movq 0x228(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x220(%rsp)
jmp 0xcbf3
movq 0x220(%rsp), %rdi
leaq 0x1b5e(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x218(%rsp)
jmp 0xcc11
movq 0x218(%rsp), %rdi
leaq 0x1b76(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x210(%rsp)
jmp 0xcc2f
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x210(%rsp), %rdi
callq 0x2150
movq %rax, 0x208(%rsp)
jmp 0xcc65
movq 0x208(%rsp), %rdi
leaq 0x1b22(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x200(%rsp)
jmp 0xcc83
movq 0x200(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x1f8(%rsp)
jmp 0xcca1
movq 0x1f8(%rsp), %rdi
movq 0x5318(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xccb7
callq 0x9730
jmp 0xccbe
callq 0xddc0
movq %rax, 0x1f0(%rsp)
jmp 0xcccd
movq 0x1f0(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x394(%rsp)
cmpl $0x2710, 0x394(%rsp) # imm = 0x2710
jge 0xcd50
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %eax
movl %eax, %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %eax
movl %eax, %ecx
movq 0x3c8(%rsp), %r8
callq 0x98b0
movq %rax, 0x1e8(%rsp)
jmp 0xcd2e
movq 0x1e8(%rsp), %rax
movl %eax, 0x3c4(%rsp)
movl 0x394(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x394(%rsp)
jmp 0xcce8
callq 0xddc0
movq %rax, 0x1e0(%rsp)
jmp 0xcd5f
movq 0x1e0(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x5262(%rip), %rdi      # 0x11fd8
leaq 0x19ef(%rip), %rsi      # 0xe76c
callq 0x21d0
movq %rax, 0x1d8(%rsp)
jmp 0xcd8c
movq 0x1d8(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x1d0(%rsp)
jmp 0xcdb6
movq 0x1d0(%rsp), %rdi
leaq 0x199b(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x1c8(%rsp)
jmp 0xcdd4
movq 0x1c8(%rsp), %rdi
leaq 0x19b3(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x1c0(%rsp)
jmp 0xcdf2
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x1c0(%rsp), %rdi
callq 0x2150
movq %rax, 0x1b8(%rsp)
jmp 0xce28
movq 0x1b8(%rsp), %rdi
leaq 0x195f(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x1b0(%rsp)
jmp 0xce46
movq 0x1b0(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x1a8(%rsp)
jmp 0xce64
movq 0x1a8(%rsp), %rdi
movq 0x5155(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xce7a
callq 0xa030
jmp 0xce81
callq 0xddc0
movq %rax, 0x1a0(%rsp)
jmp 0xce90
movq 0x1a0(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x390(%rsp)
cmpl $0x2710, 0x390(%rsp) # imm = 0x2710
jge 0xcf13
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %eax
movl %eax, %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %eax
movl %eax, %ecx
movq 0x3c8(%rsp), %r8
callq 0xa1f0
movq %rax, 0x198(%rsp)
jmp 0xcef1
movq 0x198(%rsp), %rax
movl %eax, 0x3c4(%rsp)
movl 0x390(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x390(%rsp)
jmp 0xceab
callq 0xddc0
movq %rax, 0x190(%rsp)
jmp 0xcf22
movq 0x190(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x509f(%rip), %rdi      # 0x11fd8
leaq 0x1841(%rip), %rsi      # 0xe781
callq 0x21d0
movq %rax, 0x188(%rsp)
jmp 0xcf4f
movq 0x188(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x180(%rsp)
jmp 0xcf79
movq 0x180(%rsp), %rdi
leaq 0x17d8(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x178(%rsp)
jmp 0xcf97
movq 0x178(%rsp), %rdi
leaq 0x17f0(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x170(%rsp)
jmp 0xcfb5
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x170(%rsp), %rdi
callq 0x2150
movq %rax, 0x168(%rsp)
jmp 0xcfeb
movq 0x168(%rsp), %rdi
leaq 0x179c(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x160(%rsp)
jmp 0xd009
movq 0x160(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x158(%rsp)
jmp 0xd027
movq 0x158(%rsp), %rdi
movq 0x4f92(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xd03d
callq 0xddc0
movq %rax, 0x150(%rsp)
jmp 0xd04c
movq 0x150(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x38c(%rsp)
cmpl $0x2710, 0x38c(%rsp) # imm = 0x2710
jge 0xd0cf
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %eax
movl %eax, %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %eax
movl %eax, %ecx
movq 0x3c8(%rsp), %r8
callq 0x90d0
movq %rax, 0x148(%rsp)
jmp 0xd0ad
movq 0x148(%rsp), %rax
movl %eax, 0x3c4(%rsp)
movl 0x38c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x38c(%rsp)
jmp 0xd067
callq 0xddc0
movq %rax, 0x140(%rsp)
jmp 0xd0de
movq 0x140(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x4ee3(%rip), %rdi      # 0x11fd8
leaq 0x169c(%rip), %rsi      # 0xe798
callq 0x21d0
movq %rax, 0x138(%rsp)
jmp 0xd10b
movq 0x138(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x130(%rsp)
jmp 0xd135
movq 0x130(%rsp), %rdi
leaq 0x161c(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x128(%rsp)
jmp 0xd153
movq 0x128(%rsp), %rdi
leaq 0x1634(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x120(%rsp)
jmp 0xd171
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x120(%rsp), %rdi
callq 0x2150
movq %rax, 0x118(%rsp)
jmp 0xd1a7
movq 0x118(%rsp), %rdi
leaq 0x15e0(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x110(%rsp)
jmp 0xd1c5
movq 0x110(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x108(%rsp)
jmp 0xd1e3
movq 0x108(%rsp), %rdi
movq 0x4dd6(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xd1f9
callq 0xddc0
movq %rax, 0x100(%rsp)
jmp 0xd208
movq 0x100(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x388(%rsp)
cmpl $0x2710, 0x388(%rsp) # imm = 0x2710
jge 0xd28b
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %eax
movl %eax, %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %eax
movl %eax, %ecx
movq 0x3c8(%rsp), %r8
callq 0xa8e0
movq %rax, 0xf8(%rsp)
jmp 0xd269
movq 0xf8(%rsp), %rax
movl %eax, 0x3c4(%rsp)
movl 0x388(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x388(%rsp)
jmp 0xd223
callq 0xddc0
movq %rax, 0xf0(%rsp)
jmp 0xd29a
movq 0xf0(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x4d27(%rip), %rdi      # 0x11fd8
leaq 0x14fc(%rip), %rsi      # 0xe7b4
callq 0x21d0
movq %rax, 0xe8(%rsp)
jmp 0xd2c7
movq 0xe8(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0xe0(%rsp)
jmp 0xd2f1
movq 0xe0(%rsp), %rdi
leaq 0x1460(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0xd8(%rsp)
jmp 0xd30f
movq 0xd8(%rsp), %rdi
leaq 0x1478(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0xd0(%rsp)
jmp 0xd32d
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0xd0(%rsp), %rdi
callq 0x2150
movq %rax, 0xc8(%rsp)
jmp 0xd363
movq 0xc8(%rsp), %rdi
leaq 0x1424(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0xc0(%rsp)
jmp 0xd381
movq 0xc0(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0xb8(%rsp)
jmp 0xd39f
movq 0xb8(%rsp), %rdi
movq 0x4c1a(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xd3b5
callq 0xddc0
movq %rax, 0xb0(%rsp)
jmp 0xd3c4
movq 0xb0(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x384(%rsp)
cmpl $0x2710, 0x384(%rsp) # imm = 0x2710
jge 0xd441
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %esi
movq 0x3e0(%rsp), %rdx
movl 0x3ec(%rsp), %ecx
movq 0x3c8(%rsp), %r8
callq 0x4fe0
movl %eax, 0xac(%rsp)
jmp 0xd420
movl 0xac(%rsp), %eax
movl %eax, 0x3c4(%rsp)
movl 0x384(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x384(%rsp)
jmp 0xd3df
callq 0xddc0
movq %rax, 0xa0(%rsp)
jmp 0xd450
movq 0xa0(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x4b71(%rip), %rdi      # 0x11fd8
leaq 0x134e(%rip), %rsi      # 0xe7bc
callq 0x21d0
movq %rax, 0x98(%rsp)
jmp 0xd47d
movq 0x98(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x90(%rsp)
jmp 0xd4a7
movq 0x90(%rsp), %rdi
leaq 0x12aa(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x88(%rsp)
jmp 0xd4c5
movq 0x88(%rsp), %rdi
leaq 0x12c2(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x80(%rsp)
jmp 0xd4e3
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x80(%rsp), %rdi
callq 0x2150
movq %rax, 0x78(%rsp)
jmp 0xd516
movq 0x78(%rsp), %rdi
leaq 0x1274(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x70(%rsp)
jmp 0xd52e
movq 0x70(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x68(%rsp)
jmp 0xd546
movq 0x68(%rsp), %rdi
movq 0x4a76(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xd559
jmp 0xd55b
callq 0x4320
jmp 0xd562
movq 0x3e0(%rsp), %rdi
movl 0x3ec(%rsp), %esi
callq 0x3a50
movq %rax, 0x60(%rsp)
jmp 0xd57d
movq 0x60(%rsp), %rax
movq %rax, 0x378(%rsp)
movq 0x3d0(%rsp), %rdi
movl 0x3dc(%rsp), %esi
callq 0x3a50
movq %rax, 0x58(%rsp)
jmp 0xd5a5
movq 0x58(%rsp), %rax
movq %rax, 0x370(%rsp)
callq 0xddc0
movq %rax, 0x50(%rsp)
jmp 0xd5be
movq 0x50(%rsp), %rax
movq %rax, 0x3b0(%rsp)
movl $0x0, 0x36c(%rsp)
cmpl $0x2710, 0x36c(%rsp) # imm = 0x2710
jge 0xd624
movq 0x370(%rsp), %rdi
movq 0x378(%rsp), %rsi
movq 0x3c8(%rsp), %rdx
callq 0x41b0
movl %eax, 0x4c(%rsp)
jmp 0xd606
movl 0x4c(%rsp), %eax
movl %eax, 0x3c4(%rsp)
movl 0x36c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x36c(%rsp)
jmp 0xd5d6
callq 0xddc0
movq %rax, 0x40(%rsp)
jmp 0xd630
movq 0x40(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x4994(%rip), %rdi      # 0x11fd8
leaq 0x117e(%rip), %rsi      # 0xe7c9
callq 0x21d0
movq %rax, 0x38(%rsp)
jmp 0xd657
movq 0x38(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0x2360
movq %rax, 0x30(%rsp)
jmp 0xd67b
movq 0x30(%rsp), %rdi
leaq 0x10d9(%rip), %rsi      # 0xe760
callq 0x21d0
movq %rax, 0x28(%rsp)
jmp 0xd693
movq 0x28(%rsp), %rdi
leaq 0x10f7(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x20(%rsp)
jmp 0xd6ab
movl 0x3a4(%rsp), %edi
movq 0x3a8(%rsp), %rsi
movq 0x3b0(%rsp), %rax
subq %rax, %rsi
callq 0xc2b0
movq 0x20(%rsp), %rdi
callq 0x2150
movq %rax, 0x18(%rsp)
jmp 0xd6db
movq 0x18(%rsp), %rdi
leaq 0x10af(%rip), %rsi      # 0xe796
callq 0x21d0
movq %rax, 0x10(%rsp)
jmp 0xd6f3
movq 0x10(%rsp), %rdi
movl 0x3c4(%rsp), %esi
callq 0x2270
movq %rax, 0x8(%rsp)
jmp 0xd70b
movq 0x8(%rsp), %rdi
movq 0x48b1(%rip), %rsi      # 0x11fc8
callq 0x2200
jmp 0xd71e
movl $0x0, 0x4b4(%rsp)
leaq 0x450(%rsp), %rdi
callq 0x2110
leaq 0x488(%rsp), %rdi
callq 0x2110
movl 0x4b4(%rsp), %eax
addq $0x4b8, %rsp            # imm = 0x4B8
retq
leaq 0x450(%rsp), %rdi
callq 0x2110
leaq 0x488(%rsp), %rdi
callq 0x2110
movq 0x478(%rsp), %rdi
callq 0x2330
nopl (%rax)