// File: splatlab[P]debgr/debruijn_graph.cc
// Function: kmer_tests()
void kmer_tests(void)
{
	kmer aagt1("AAGT");
	kmer aagt2(A);
	aagt2 = aagt2 + A + G + T;
	assert(aagt1 == aagt2);
	assert(aagt1 + A != aagt1 + C);
	assert((aagt1 << A) == kmer("AGTA"));
	assert(-aagt1 == kmer("ACTT"));
	assert(aagt1 + (-aagt2) == kmer("AAGTACTT"));
	assert(suffix(aagt1, 3) == kmer("AGT"));
	assert(prefix(aagt1, 3) == kmer("AAG"));

	canonical_kmer can_aagt = aagt1;
	assert(can_aagt == kmer("ACTT") || can_aagt == kmer("AAGT"));
	canonical_kmer can_tttt("TTTT"), can_aaaa("AAAA");
	assert(can_tttt == can_aaaa);

	assert(period(kmer("AAAAAAAAAAAAA")) == 1);
	assert(period(kmer("ACACACACACACAC")) == 2);
	assert(period(kmer("ACTACTACTACTACTACT")) == 3);

	string s = "ACTGGTGCGCCCGCCTTTTTGGGGGGTCCGTCC";
	for (uint64_t periodicity = 1; periodicity <=32; periodicity++) {
		string base = s.substr(0, periodicity);
		string k;
		for (uint64_t i = 0; i < 32; i++)
			k += base;
		for (uint64_t len = periodicity; len <=32; len++) {
			kmer kk(k.substr(0,len));
			cout << (string)kk << " "
					 << periodicity << " " << len << " " << period(kk) << endl;
			assert(period(kk) == periodicity);
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x6f0, %rsp            # imm = 0x6F0
leaq -0x31(%rbp), %rdi
movq %rdi, -0x648(%rbp)
callq 0x3490
movq -0x648(%rbp), %rdx
leaq 0x2039f(%rip), %rsi     # 0x2a2c8
leaq -0x30(%rbp), %rdi
callq 0x33b0
jmp 0x9f34
leaq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x38e0
jmp 0x9f43
leaq -0x30(%rbp), %rdi
callq 0x3150
leaq -0x31(%rbp), %rdi
callq 0x3310
leaq -0x58(%rbp), %rdi
movl $0x1, %esi
callq 0x3820
movq -0x58(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x90(%rbp)
leaq -0xa8(%rbp), %rdi
movl $0x1, %esi
callq 0x3820
movl -0x98(%rbp), %edi
movq -0x90(%rbp), %rsi
movl -0xa8(%rbp), %edx
movq -0xa0(%rbp), %rcx
callq 0x3f10
movl %eax, -0x88(%rbp)
movq %rdx, -0x80(%rbp)
leaq -0xb8(%rbp), %rdi
movl $0x3, %esi
callq 0x3820
movl -0x88(%rbp), %edi
movq -0x80(%rbp), %rsi
movl -0xb8(%rbp), %edx
movq -0xb0(%rbp), %rcx
callq 0x3f10
movl %eax, -0x78(%rbp)
movq %rdx, -0x70(%rbp)
leaq -0xc8(%rbp), %rdi
movl $0x2, %esi
callq 0x3820
movl -0x78(%rbp), %edi
movq -0x70(%rbp), %rsi
movl -0xc8(%rbp), %edx
movq -0xc0(%rbp), %rcx
callq 0x3f10
movl %eax, -0x68(%rbp)
movq %rdx, -0x60(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0xe0(%rbp)
movl -0xd8(%rbp), %edi
movq -0xd0(%rbp), %rsi
movl -0xe8(%rbp), %edx
movq -0xe0(%rbp), %rcx
callq 0x3b80
testb $0x1, %al
jne 0xa079
jmp 0xa07b
jmp 0xa0cb
leaq 0x2024b(%rip), %rdi     # 0x2a2cd
leaq 0x20100(%rip), %rsi     # 0x2a189
movl $0x477, %edx            # imm = 0x477
leaq 0x20247(%rip), %rcx     # 0x2a2dc
callq 0x3160
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa0bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x3150
leaq -0x31(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq -0x10(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x100(%rbp)
leaq -0x118(%rbp), %rdi
movl $0x1, %esi
callq 0x3820
movl -0x108(%rbp), %edi
movq -0x100(%rbp), %rsi
movl -0x118(%rbp), %edx
movq -0x110(%rbp), %rcx
callq 0x3f10
movl %eax, -0xf8(%rbp)
movq %rdx, -0xf0(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x130(%rbp)
leaq -0x148(%rbp), %rdi
xorl %esi, %esi
callq 0x3820
movl -0x138(%rbp), %edi
movq -0x130(%rbp), %rsi
movl -0x148(%rbp), %edx
movq -0x140(%rbp), %rcx
callq 0x3f10
movl %eax, -0x128(%rbp)
movq %rdx, -0x120(%rbp)
movl -0xf8(%rbp), %edi
movq -0xf0(%rbp), %rsi
movl -0x128(%rbp), %edx
movq -0x120(%rbp), %rcx
callq 0x3bc0
testb $0x1, %al
jne 0xa193
jmp 0xa195
jmp 0xa1b4
leaq 0x20152(%rip), %rdi     # 0x2a2ee
leaq 0x1ffe6(%rip), %rsi     # 0x2a189
movl $0x478, %edx            # imm = 0x478
leaq 0x2012d(%rip), %rcx     # 0x2a2dc
callq 0x3160
movups -0x10(%rbp), %xmm0
movaps %xmm0, -0x170(%rbp)
leaq -0x180(%rbp), %rdi
movl $0x1, %esi
callq 0x3820
movl -0x170(%rbp), %edi
movq -0x168(%rbp), %rsi
movl -0x180(%rbp), %edx
movq -0x178(%rbp), %rcx
callq 0x3de0
movl %eax, -0x158(%rbp)
movq %rdx, -0x150(%rbp)
leaq -0x1b1(%rbp), %rdi
movq %rdi, -0x650(%rbp)
callq 0x3490
movq -0x650(%rbp), %rdx
leaq 0x200e8(%rip), %rsi     # 0x2a305
leaq -0x1b0(%rbp), %rdi
callq 0x33b0
jmp 0xa22b
leaq -0x190(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x38e0
jmp 0xa240
movl -0x158(%rbp), %edi
movq -0x150(%rbp), %rsi
movl -0x190(%rbp), %edx
movq -0x188(%rbp), %rcx
callq 0x3b80
testb $0x1, %al
jne 0xa265
jmp 0xa267
jmp 0xa2b4
leaq 0x2009c(%rip), %rdi     # 0x2a30a
leaq 0x1ff14(%rip), %rsi     # 0x2a189
movl $0x479, %edx            # imm = 0x479
leaq 0x2005b(%rip), %rcx     # 0x2a2dc
callq 0x3160
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa380
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x3150
jmp 0xa380
leaq -0x1b0(%rbp), %rdi
callq 0x3150
leaq -0x1b1(%rbp), %rdi
callq 0x3310
movups -0x10(%rbp), %xmm0
movaps %xmm0, -0x1e0(%rbp)
movl -0x1e0(%rbp), %edi
movq -0x1d8(%rbp), %rsi
callq 0x3c20
movl %eax, -0x1c8(%rbp)
movq %rdx, -0x1c0(%rbp)
leaq -0x211(%rbp), %rdi
movq %rdi, -0x658(%rbp)
callq 0x3490
movq -0x658(%rbp), %rdx
leaq 0x2002b(%rip), %rsi     # 0x2a342
leaq -0x210(%rbp), %rdi
callq 0x33b0
jmp 0xa325
leaq -0x1f0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x38e0
jmp 0xa33a
movl -0x1c8(%rbp), %edi
movq -0x1c0(%rbp), %rsi
movl -0x1f0(%rbp), %edx
movq -0x1e8(%rbp), %rcx
callq 0x3b80
testb $0x1, %al
jne 0xa35f
jmp 0xa361
jmp 0xa3bf
leaq 0x1ffbf(%rip), %rdi     # 0x2a327
leaq 0x1fe1a(%rip), %rsi     # 0x2a189
movl $0x47a, %edx            # imm = 0x47A
leaq 0x1ff61(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x1b1(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa4c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x3150
jmp 0xa4c2
leaq -0x210(%rbp), %rdi
callq 0x3150
leaq -0x211(%rbp), %rdi
callq 0x3310
movups -0x10(%rbp), %xmm0
movaps %xmm0, -0x240(%rbp)
movups -0x58(%rbp), %xmm0
movaps %xmm0, -0x260(%rbp)
movl -0x260(%rbp), %edi
movq -0x258(%rbp), %rsi
callq 0x3c20
movl %eax, -0x250(%rbp)
movq %rdx, -0x248(%rbp)
movl -0x240(%rbp), %edi
movq -0x238(%rbp), %rsi
movl -0x250(%rbp), %edx
movq -0x248(%rbp), %rcx
callq 0x3f10
movl %eax, -0x228(%rbp)
movq %rdx, -0x220(%rbp)
leaq -0x291(%rbp), %rdi
movq %rdi, -0x660(%rbp)
callq 0x3490
movq -0x660(%rbp), %rdx
leaq 0x1fee5(%rip), %rsi     # 0x2a33e
leaq -0x290(%rbp), %rdi
callq 0x33b0
jmp 0xa467
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x38e0
jmp 0xa47c
movl -0x228(%rbp), %edi
movq -0x220(%rbp), %rsi
movl -0x270(%rbp), %edx
movq -0x268(%rbp), %rcx
callq 0x3b80
testb $0x1, %al
jne 0xa4a1
jmp 0xa4a3
jmp 0xa501
leaq 0x1fe9d(%rip), %rdi     # 0x2a347
leaq 0x1fcd8(%rip), %rsi     # 0x2a189
movl $0x47b, %edx            # imm = 0x47B
leaq 0x1fe1f(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x211(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa5d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x3150
jmp 0xa5d2
leaq -0x290(%rbp), %rdi
callq 0x3150
leaq -0x291(%rbp), %rdi
callq 0x3310
movups -0x10(%rbp), %xmm0
movaps %xmm0, -0x2c0(%rbp)
movl -0x2c0(%rbp), %edi
movq -0x2b8(%rbp), %rsi
movl $0x3, %edx
callq 0x3fd0
movl %eax, -0x2a8(%rbp)
movq %rdx, -0x2a0(%rbp)
leaq -0x2f1(%rbp), %rdi
movq %rdi, -0x668(%rbp)
callq 0x3490
movq -0x668(%rbp), %rdx
leaq 0x1fd60(%rip), %rsi     # 0x2a2c9
leaq -0x2f0(%rbp), %rdi
callq 0x33b0
jmp 0xa577
leaq -0x2d0(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x38e0
jmp 0xa58c
movl -0x2a8(%rbp), %edi
movq -0x2a0(%rbp), %rsi
movl -0x2d0(%rbp), %edx
movq -0x2c8(%rbp), %rcx
callq 0x3b80
testb $0x1, %al
jne 0xa5b1
jmp 0xa5b3
jmp 0xa611
leaq 0x1fdb2(%rip), %rdi     # 0x2a36c
leaq 0x1fbc8(%rip), %rsi     # 0x2a189
movl $0x47c, %edx            # imm = 0x47C
leaq 0x1fd0f(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x291(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa6e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x3150
jmp 0xa6e2
leaq -0x2f0(%rbp), %rdi
callq 0x3150
leaq -0x2f1(%rbp), %rdi
callq 0x3310
movups -0x10(%rbp), %xmm0
movaps %xmm0, -0x320(%rbp)
movl -0x320(%rbp), %edi
movq -0x318(%rbp), %rsi
movl $0x3, %edx
callq 0x3f90
movl %eax, -0x308(%rbp)
movq %rdx, -0x300(%rbp)
leaq -0x351(%rbp), %rdi
movq %rdi, -0x670(%rbp)
callq 0x3490
movq -0x670(%rbp), %rdx
leaq 0x1fd13(%rip), %rsi     # 0x2a38c
leaq -0x350(%rbp), %rdi
callq 0x33b0
jmp 0xa687
leaq -0x330(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x38e0
jmp 0xa69c
movl -0x308(%rbp), %edi
movq -0x300(%rbp), %rsi
movl -0x330(%rbp), %edx
movq -0x328(%rbp), %rcx
callq 0x3b80
testb $0x1, %al
jne 0xa6c1
jmp 0xa6c3
jmp 0xa721
leaq 0x1fcc6(%rip), %rdi     # 0x2a390
leaq 0x1fab8(%rip), %rsi     # 0x2a189
movl $0x47d, %edx            # imm = 0x47D
leaq 0x1fbff(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x2f1(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa8a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x350(%rbp), %rdi
callq 0x3150
jmp 0xa8a4
leaq -0x350(%rbp), %rdi
callq 0x3150
leaq -0x351(%rbp), %rdi
callq 0x3310
movups -0x10(%rbp), %xmm0
movaps %xmm0, -0x380(%rbp)
movl -0x380(%rbp), %esi
movq -0x378(%rbp), %rdx
leaq -0x368(%rbp), %rdi
callq 0x4300
movups -0x368(%rbp), %xmm0
movaps %xmm0, -0x390(%rbp)
leaq -0x3c1(%rbp), %rdi
movq %rdi, -0x678(%rbp)
callq 0x3490
movq -0x678(%rbp), %rdx
movb $0x0, -0x412(%rbp)
movb $0x0, -0x413(%rbp)
leaq 0x1fba8(%rip), %rsi     # 0x2a342
leaq -0x3c0(%rbp), %rdi
callq 0x33b0
jmp 0xa7a8
leaq -0x3a0(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0x38e0
jmp 0xa7bd
movl -0x390(%rbp), %edi
movq -0x388(%rbp), %rsi
movl -0x3a0(%rbp), %edx
movq -0x398(%rbp), %rcx
callq 0x3b80
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x679(%rbp)
jne 0xa874
movups -0x368(%rbp), %xmm0
movaps %xmm0, -0x3e0(%rbp)
leaq -0x411(%rbp), %rdi
movq %rdi, -0x688(%rbp)
callq 0x3490
movq -0x688(%rbp), %rdx
movb $0x1, -0x412(%rbp)
leaq 0x1faa3(%rip), %rsi     # 0x2a2c8
leaq -0x410(%rbp), %rdi
callq 0x33b0
jmp 0xa833
movb $0x1, -0x413(%rbp)
leaq -0x3f0(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x38e0
jmp 0xa84f
movl -0x3e0(%rbp), %edi
movq -0x3d8(%rbp), %rsi
movl -0x3f0(%rbp), %edx
movq -0x3e8(%rbp), %rcx
callq 0x3b80
movb %al, -0x679(%rbp)
movb -0x679(%rbp), %al
testb $0x1, %al
jne 0xa880
jmp 0xa885
jmp 0xa906
leaq 0x1fb24(%rip), %rdi     # 0x2a3b0
leaq 0x1f8f6(%rip), %rsi     # 0x2a189
movl $0x480, %edx            # imm = 0x480
leaq 0x1fa3d(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x351(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xaab8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xaaac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xaa93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
testb $0x1, -0x413(%rbp)
jne 0xaa85
jmp 0xaa91
testb $0x1, -0x413(%rbp)
jne 0xa911
jmp 0xa91d
leaq -0x410(%rbp), %rdi
callq 0x3150
testb $0x1, -0x412(%rbp)
jne 0xa928
jmp 0xa934
leaq -0x411(%rbp), %rdi
callq 0x3310
leaq -0x3c0(%rbp), %rdi
callq 0x3150
leaq -0x3c1(%rbp), %rdi
callq 0x3310
leaq -0x449(%rbp), %rdi
movq %rdi, -0x690(%rbp)
callq 0x3490
movq -0x690(%rbp), %rdx
leaq 0x1fa78(%rip), %rsi     # 0x2a3e5
leaq -0x448(%rbp), %rdi
callq 0x33b0
jmp 0xa97b
leaq -0x428(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x4260
jmp 0xa990
leaq -0x448(%rbp), %rdi
callq 0x3150
leaq -0x449(%rbp), %rdi
callq 0x3310
leaq -0x481(%rbp), %rdi
movq %rdi, -0x698(%rbp)
callq 0x3490
movq -0x698(%rbp), %rdx
leaq 0x1fa3f(%rip), %rsi     # 0x2a408
leaq -0x480(%rbp), %rdi
callq 0x33b0
jmp 0xa9d7
leaq -0x460(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0x4260
jmp 0xa9ec
leaq -0x480(%rbp), %rdi
callq 0x3150
leaq -0x481(%rbp), %rdi
callq 0x3310
movq -0x428(%rbp), %rax
movq %rax, -0x498(%rbp)
movq -0x420(%rbp), %rax
movq %rax, -0x490(%rbp)
movq -0x460(%rbp), %rax
movq %rax, -0x4a8(%rbp)
movq -0x458(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movl -0x498(%rbp), %edi
movq -0x490(%rbp), %rsi
movl -0x4a8(%rbp), %edx
movq -0x4a0(%rbp), %rcx
callq 0x3b80
testb $0x1, %al
jne 0xaa61
jmp 0xaa66
jmp 0xab37
leaq 0x1f97d(%rip), %rdi     # 0x2a3ea
leaq 0x1f715(%rip), %rsi     # 0x2a189
movl $0x482, %edx            # imm = 0x482
leaq 0x1f85c(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x410(%rbp), %rdi
callq 0x3150
jmp 0xaa93
testb $0x1, -0x412(%rbp)
jne 0xaa9e
jmp 0xaaaa
leaq -0x411(%rbp), %rdi
callq 0x3310
jmp 0xaaac
leaq -0x3c0(%rbp), %rdi
callq 0x3150
leaq -0x3c1(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xaaef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x448(%rbp), %rdi
callq 0x3150
leaq -0x449(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xab26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x3150
leaq -0x481(%rbp), %rdi
callq 0x3310
jmp 0xb134
leaq -0x4d9(%rbp), %rdi
movq %rdi, -0x6a0(%rbp)
callq 0x3490
movq -0x6a0(%rbp), %rdx
leaq 0x1f8a7(%rip), %rsi     # 0x2a3ff
leaq -0x4d8(%rbp), %rdi
callq 0x33b0
jmp 0xab66
leaq -0x4b8(%rbp), %rdi
leaq -0x4d8(%rbp), %rsi
callq 0x38e0
jmp 0xab7b
movl -0x4b8(%rbp), %edi
movq -0x4b0(%rbp), %rsi
callq 0x4120
cmpq $0x1, %rax
jne 0xab95
jmp 0xabe2
leaq 0x1f871(%rip), %rdi     # 0x2a40d
leaq 0x1f5e6(%rip), %rsi     # 0x2a189
movl $0x484, %edx            # imm = 0x484
leaq 0x1f72d(%rip), %rcx     # 0x2a2dc
callq 0x3160
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xac77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x4d8(%rbp), %rdi
callq 0x3150
jmp 0xac77
leaq -0x4d8(%rbp), %rdi
callq 0x3150
leaq -0x4d9(%rbp), %rdi
callq 0x3310
leaq -0x511(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x3490
movq -0x6a8(%rbp), %rdx
leaq 0x1f815(%rip), %rsi     # 0x2a430
leaq -0x510(%rbp), %rdi
callq 0x33b0
jmp 0xac29
leaq -0x4f0(%rbp), %rdi
leaq -0x510(%rbp), %rsi
callq 0x38e0
jmp 0xac3e
movl -0x4f0(%rbp), %edi
movq -0x4e8(%rbp), %rsi
callq 0x4120
cmpq $0x2, %rax
jne 0xac58
jmp 0xacb6
leaq 0x1f7e0(%rip), %rdi     # 0x2a43f
leaq 0x1f523(%rip), %rsi     # 0x2a189
movl $0x485, %edx            # imm = 0x485
leaq 0x1f66a(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x4d9(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xad4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x510(%rbp), %rdi
callq 0x3150
jmp 0xad4b
leaq -0x510(%rbp), %rdi
callq 0x3150
leaq -0x511(%rbp), %rdi
callq 0x3310
leaq -0x549(%rbp), %rdi
movq %rdi, -0x6b0(%rbp)
callq 0x3490
movq -0x6b0(%rbp), %rdx
leaq 0x1f774(%rip), %rsi     # 0x2a463
leaq -0x548(%rbp), %rdi
callq 0x33b0
jmp 0xacfd
leaq -0x528(%rbp), %rdi
leaq -0x548(%rbp), %rsi
callq 0x38e0
jmp 0xad12
movl -0x528(%rbp), %edi
movq -0x520(%rbp), %rsi
callq 0x4120
cmpq $0x3, %rax
jne 0xad2c
jmp 0xad8a
leaq 0x1f743(%rip), %rdi     # 0x2a476
leaq 0x1f44f(%rip), %rsi     # 0x2a189
movl $0x486, %edx            # imm = 0x486
leaq 0x1f596(%rip), %rcx     # 0x2a2dc
callq 0x3160
leaq -0x511(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xae62
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x548(%rbp), %rdi
callq 0x3150
jmp 0xae62
leaq -0x548(%rbp), %rdi
callq 0x3150
leaq -0x549(%rbp), %rdi
callq 0x3310
leaq -0x571(%rbp), %rdi
movq %rdi, -0x6b8(%rbp)
callq 0x3490
movq -0x6b8(%rbp), %rdx
leaq 0x1f6db(%rip), %rsi     # 0x2a49e
leaq -0x570(%rbp), %rdi
callq 0x33b0
jmp 0xadd1
leaq -0x571(%rbp), %rdi
callq 0x3310
movq $0x1, -0x580(%rbp)
cmpq $0x20, -0x580(%rbp)
ja 0xb113
movq -0x580(%rbp), %rcx
xorl %eax, %eax
movl %eax, %edx
leaq -0x5a0(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x32c0
jmp 0xae16
leaq -0x5c0(%rbp), %rdi
callq 0x33c0
movq $0x0, -0x5c8(%rbp)
cmpq $0x20, -0x5c8(%rbp)
jae 0xaeb2
leaq -0x5c0(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0x3390
jmp 0xae4c
jmp 0xae4e
movq -0x5c8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x5c8(%rbp)
jmp 0xae2d
leaq -0x549(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x571(%rbp), %rdi
callq 0x3310
jmp 0xb134
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xb128
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xb0f9
movq -0x580(%rbp), %rax
movq %rax, -0x5d0(%rbp)
cmpq $0x20, -0x5d0(%rbp)
ja 0xb0ca
movq -0x5d0(%rbp), %rcx
xorl %eax, %eax
movl %eax, %edx
leaq -0x600(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0x32c0
jmp 0xaeee
leaq -0x5e0(%rbp), %rdi
leaq -0x600(%rbp), %rsi
callq 0x38e0
jmp 0xaf03
leaq -0x600(%rbp), %rdi
callq 0x3150
leaq -0x620(%rbp), %rdi
leaq -0x5e0(%rbp), %rsi
callq 0x3a50
jmp 0xaf24
movq 0x2f0a5(%rip), %rdi     # 0x39fd0
leaq -0x620(%rbp), %rsi
callq 0x3270
movq %rax, -0x6c0(%rbp)
jmp 0xaf40
movq -0x6c0(%rbp), %rdi
leaq 0x1f8cc(%rip), %rsi     # 0x2a81a
callq 0x3290
movq %rax, -0x6c8(%rbp)
jmp 0xaf5c
movq -0x6c8(%rbp), %rdi
movq -0x580(%rbp), %rsi
callq 0x3060
movq %rax, -0x6d0(%rbp)
jmp 0xaf78
movq -0x6d0(%rbp), %rdi
leaq 0x1f894(%rip), %rsi     # 0x2a81a
callq 0x3290
movq %rax, -0x6d8(%rbp)
jmp 0xaf94
movq -0x6d8(%rbp), %rdi
movq -0x5d0(%rbp), %rsi
callq 0x3060
movq %rax, -0x6e0(%rbp)
jmp 0xafb0
movq -0x6e0(%rbp), %rdi
leaq 0x1f85c(%rip), %rsi     # 0x2a81a
callq 0x3290
movq %rax, -0x6e8(%rbp)
jmp 0xafcc
movups -0x5e0(%rbp), %xmm0
movaps %xmm0, -0x630(%rbp)
movl -0x630(%rbp), %edi
movq -0x628(%rbp), %rsi
callq 0x4120
movq -0x6e8(%rbp), %rdi
movq %rax, %rsi
callq 0x3060
movq %rax, -0x6f0(%rbp)
jmp 0xb004
movq -0x6f0(%rbp), %rdi
movq 0x2efa6(%rip), %rsi     # 0x39fb8
callq 0x32e0
jmp 0xb019
leaq -0x620(%rbp), %rdi
callq 0x3150
movq -0x5e0(%rbp), %rax
movq %rax, -0x640(%rbp)
movq -0x5d8(%rbp), %rax
movq %rax, -0x638(%rbp)
movl -0x640(%rbp), %edi
movq -0x638(%rbp), %rsi
callq 0x4120
cmpq -0x580(%rbp), %rax
jne 0xb05e
jmp 0xb0b1
leaq 0x1f45b(%rip), %rdi     # 0x2a4c0
leaq 0x1f11d(%rip), %rsi     # 0x2a189
movl $0x492, %edx            # imm = 0x492
leaq 0x1f264(%rip), %rcx     # 0x2a2dc
callq 0x3160
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x600(%rbp), %rdi
callq 0x3150
jmp 0xb0f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x620(%rbp), %rdi
callq 0x3150
jmp 0xb0f9
jmp 0xb0b3
movq -0x5d0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x5d0(%rbp)
jmp 0xaec0
leaq -0x5c0(%rbp), %rdi
callq 0x3150
leaq -0x5a0(%rbp), %rdi
callq 0x3150
movq -0x580(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x580(%rbp)
jmp 0xade8
leaq -0x5c0(%rbp), %rdi
callq 0x3150
leaq -0x5a0(%rbp), %rdi
callq 0x3150
jmp 0xb128
leaq -0x570(%rbp), %rdi
callq 0x3150
addq $0x6f0, %rsp            # imm = 0x6F0
popq %rbp
retq
leaq -0x570(%rbp), %rdi
callq 0x3150
movq -0x40(%rbp), %rdi
callq 0x3480
nopl (%rax)