// File: BenLangmead[P]bowtie/./multikey_qsort.h
// Function: void bucketSortSufDcU8<S2bDnaString, S2bDnaString>(S2bDnaString const&, S2bDnaString const&, unsigned long, unsigned long*, unsigned long, DifferenceCoverSample<S2bDnaString> const&, unsigned char, unsigned long, unsigned long, unsigned long, bool)
static void bucketSortSufDcU8(
		const T1& host1,
		const T2& host,
        size_t hlen,
        TIndexOffU* s,
        size_t slen,
        const DifferenceCoverSample<T1>& dc,
        uint8_t hi,
        size_t _begin,
        size_t _end,
        size_t _depth,
        bool sanityCheck = false)
{
        // 5 64-element buckets for bucket-sorting A, C, G, T, $
        TIndexOffU* bkts[4];
	for(size_t i = 0; i < 4; i++) {
	        bkts[i] = new TIndexOffU[4 * 1024 * 1024];
	}
	EList<EList<size_t> > block_list;
	bool first = true;
	while(true) {
	        size_t begin = 0, end = 0;
		if(first) {
		        begin = _begin;
			end = _end;
			first = false;
		} else {
		        if(block_list.size() == 0) {
			        break;
			}
			if(block_list.back().size() > 1) {
			        end = block_list.back().back(); 
				block_list.back().pop_back();
				begin = block_list.back().back();
			} else {
			        block_list.resize(block_list.size() - 1);
				if(block_list.size() == 0) {
				        break;
				}
			}
		}
		size_t depth = block_list.size() + _depth;
		assert_leq(end-begin, BUCKET_SORT_CUTOFF);
		assert_eq(hi, 4);
		if(end <= begin + 1) { // 1-element list already sorted
		        continue;
		}
		if(depth > dc.v()) {
		        // Quicksort the remaining suffixes using difference cover
		        // for constant-time comparisons; this is O(k*log(k)) where
		        // k=(end-begin)
		        qsortSufDcU8<T1,T2>(host1, host, hlen, s, slen, dc, begin, end, sanityCheck);
			continue;
		}
		if(end-begin <= SELECTION_SORT_CUTOFF) {
		        // Bucket sort remaining items
		        selectionSortSufDcU8(host1, host, hlen, s, slen, dc, hi,
					     begin, end, depth, sanityCheck);
			if(sanityCheck) {
			        sanityCheckOrderedSufs(host1, hlen, s, slen,
						       OFF_MASK, begin, end);
			}
			continue;
		}
		size_t cnts[] = { 0, 0, 0, 0, 0 };
		for(size_t i = begin; i < end; i++) {
		        size_t off = depth + s[i];
			uint8_t c = (off < hlen) ? get_uint8(host, off) : hi;
			assert_leq(c, 4);
			if(c == 0) {
			        s[begin + cnts[0]++] = s[i];
			} else {
			        bkts[c-1][cnts[c]++] = s[i];
			}
		}
		assert_eq(cnts[0] + cnts[1] + cnts[2] + cnts[3] + cnts[4], end - begin);
		size_t cur = begin + cnts[0];
		if(cnts[1] > 0) { memcpy(&s[cur], bkts[0], cnts[1] << (OFF_SIZE/4 + 1)); cur += cnts[1]; }
		if(cnts[2] > 0) { memcpy(&s[cur], bkts[1], cnts[2] << (OFF_SIZE/4 + 1)); cur += cnts[2]; }
		if(cnts[3] > 0) { memcpy(&s[cur], bkts[2], cnts[3] << (OFF_SIZE/4 + 1)); cur += cnts[3]; }
		if(cnts[4] > 0) { memcpy(&s[cur], bkts[3], cnts[4] << (OFF_SIZE/4 + 1)); }
		// This frame is now totally finished with bkts[][], so recursive
		// callees can safely clobber it; we're not done with cnts[], but
		// that's local to the stack frame.
		EList<size_t> tmp;
		block_list.push_back(tmp);
		block_list.back().clear();
		block_list.back().push_back(begin);
		for(size_t i = 0; i < 4; i++) {
		        if(cnts[i] > 0) {
			        block_list.back().push_back(block_list.back().back() + cnts[i]);
			}
		}
	}
	// Done
	
	for(size_t i = 0; i < 4; i++) {
	        delete [] bkts[i];
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x368, %rsp            # imm = 0x368
movb 0x30(%rbp), %al
movq 0x28(%rbp), %r10
movq 0x20(%rbp), %r10
movq 0x18(%rbp), %r10
movb 0x10(%rbp), %r10b
movq %rdi, -0x20(%rbp)
movq %rsi, -0x28(%rbp)
movq %rdx, -0x30(%rbp)
movq %rcx, -0x38(%rbp)
movq %r8, -0x40(%rbp)
movq %r9, -0x48(%rbp)
andb $0x1, %al
movb %al, -0x49(%rbp)
movq $0x0, -0x78(%rbp)
cmpq $0x4, -0x78(%rbp)
jae 0x14723
movl $0x2000000, %edi        # imm = 0x2000000
callq 0x5030
movq %rax, %rcx
movq -0x78(%rbp), %rax
movq %rcx, -0x70(%rbp,%rax,8)
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x146f8
leaq -0x98(%rbp), %rdi
callq 0x36d90
movb $0x1, -0x99(%rbp)
jmp 0x14738
movq $0x0, -0xa8(%rbp)
movq $0x0, -0xb0(%rbp)
testb $0x1, -0x99(%rbp)
je 0x14779
movq 0x18(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq 0x20(%rbp), %rax
movq %rax, -0xb0(%rbp)
movb $0x0, -0x99(%rbp)
jmp 0x148d5
leaq -0x98(%rbp), %rdi
callq 0x36dd0
movq %rax, -0x150(%rbp)
jmp 0x1478e
movq -0x150(%rbp), %rax
cmpq $0x0, %rax
jne 0x147b7
jmp 0x15515
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x1557f
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x158(%rbp)
jmp 0x147cc
movq -0x158(%rbp), %rdi
callq 0x17c40
cmpq $0x1, %rax
jbe 0x1487d
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x160(%rbp)
jmp 0x147f7
movq -0x160(%rbp), %rdi
callq 0x2edf0
movq %rax, -0x168(%rbp)
jmp 0x1480c
movq -0x168(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xb0(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x170(%rbp)
jmp 0x14832
movq -0x170(%rbp), %rdi
callq 0x2eef0
jmp 0x14840
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x178(%rbp)
jmp 0x14855
movq -0x178(%rbp), %rdi
callq 0x2edf0
movq %rax, -0x180(%rbp)
jmp 0x1486a
movq -0x180(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa8(%rbp)
jmp 0x148d3
leaq -0x98(%rbp), %rdi
callq 0x36dd0
movq %rax, -0x188(%rbp)
jmp 0x14892
movq -0x188(%rbp), %rsi
decq %rsi
leaq -0x98(%rbp), %rdi
callq 0x36ef0
jmp 0x148aa
leaq -0x98(%rbp), %rdi
callq 0x36dd0
movq %rax, -0x190(%rbp)
jmp 0x148bf
movq -0x190(%rbp), %rax
cmpq $0x0, %rax
jne 0x148d1
jmp 0x15515
jmp 0x148d3
jmp 0x148d5
leaq -0x98(%rbp), %rdi
callq 0x36dd0
movq %rax, -0x198(%rbp)
jmp 0x148ea
movq -0x198(%rbp), %rax
addq 0x28(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xb0(%rbp), %rax
subq -0xa8(%rbp), %rax
cmpq $0x400000, %rax         # imm = 0x400000
jbe 0x14a45
movq 0x356a3(%rip), %rdi     # 0x49fc0
leaq 0x2a87f(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, -0x1a0(%rbp)
jmp 0x14932
movq -0x1a0(%rbp), %rdi
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rax
subq %rax, %rsi
callq 0x50c0
movq %rax, -0x1a8(%rbp)
jmp 0x14958
movq -0x1a8(%rbp), %rdi
leaq 0x2a854(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, -0x1b0(%rbp)
jmp 0x14974
movq -0x1b0(%rbp), %rdi
movl $0x400000, %esi         # imm = 0x400000
callq 0x5750
movq %rax, -0x1b8(%rbp)
jmp 0x1498e
movq -0x1b8(%rbp), %rdi
leaq 0x2cc1c(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, -0x1c0(%rbp)
jmp 0x149aa
movq -0x1c0(%rbp), %rdi
movq 0x355c8(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x149bf
movq 0x355fa(%rip), %rdi     # 0x49fc0
leaq 0x2d561(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, -0x1c8(%rbp)
jmp 0x149db
movq -0x1c8(%rbp), %rdi
leaq 0x2bda1(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, -0x1d0(%rbp)
jmp 0x149f7
movq -0x1d0(%rbp), %rdi
movl $0x411, %esi            # imm = 0x411
callq 0x5750
movq %rax, -0x1d8(%rbp)
jmp 0x14a11
movq -0x1d8(%rbp), %rdi
movq 0x35561(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x14a26
leaq 0x2bc3d(%rip), %rdi     # 0x4066a
leaq 0x2d4fa(%rip), %rsi     # 0x41f2e
movl $0x411, %edx            # imm = 0x411
leaq 0x2db3e(%rip), %rcx     # 0x4257e
callq 0x51e0
movzbl 0x10(%rbp), %eax
cmpl $0x4, %eax
je 0x14c4f
movq 0x35567(%rip), %rdi     # 0x49fc0
leaq 0x2a6b9(%rip), %rsi     # 0x3f119
callq 0x5360
movq %rax, -0x1e0(%rbp)
jmp 0x14a6e
movq -0x1e0(%rbp), %rdi
movzbl 0x10(%rbp), %esi
callq 0x5620
movq %rax, -0x1e8(%rbp)
jmp 0x14a87
movq -0x1e8(%rbp), %rdi
leaq 0x2a69a(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, -0x1f0(%rbp)
jmp 0x14aa3
movq -0x1f0(%rbp), %rdi
leaq 0x3d2f(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, -0x1f8(%rbp)
jmp 0x14abf
movq -0x1f8(%rbp), %rdi
movzbl 0x10(%rbp), %esi
callq 0x5620
movq %rax, -0x200(%rbp)
jmp 0x14ad8
movq -0x200(%rbp), %rdi
leaq 0x3d2a(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, -0x208(%rbp)
jmp 0x14af4
movq -0x208(%rbp), %rdi
leaq 0x2a632(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, -0x210(%rbp)
jmp 0x14b10
movq -0x210(%rbp), %rdi
movl $0x4, %esi
callq 0x5750
movq %rax, -0x218(%rbp)
jmp 0x14b2a
movq -0x218(%rbp), %rdi
leaq 0x2a5f7(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, -0x220(%rbp)
jmp 0x14b46
movq -0x220(%rbp), %rdi
leaq 0x3c8c(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, -0x228(%rbp)
jmp 0x14b62
movq -0x228(%rbp), %rdi
movl $0x4, %esi
callq 0x5750
movq %rax, -0x230(%rbp)
jmp 0x14b7c
movq -0x230(%rbp), %rdi
leaq 0x3c86(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, -0x238(%rbp)
jmp 0x14b98
movq -0x238(%rbp), %rdi
leaq 0x2ca12(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, -0x240(%rbp)
jmp 0x14bb4
movq -0x240(%rbp), %rdi
movq 0x353be(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x14bc9
movq 0x353f0(%rip), %rdi     # 0x49fc0
leaq 0x2d357(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, -0x248(%rbp)
jmp 0x14be5
movq -0x248(%rbp), %rdi
leaq 0x2bb97(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, -0x250(%rbp)
jmp 0x14c01
movq -0x250(%rbp), %rdi
movl $0x412, %esi            # imm = 0x412
callq 0x5750
movq %rax, -0x258(%rbp)
jmp 0x14c1b
movq -0x258(%rbp), %rdi
movq 0x35357(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x14c30
leaq 0x2ba33(%rip), %rdi     # 0x4066a
leaq 0x2d2f0(%rip), %rsi     # 0x41f2e
movl $0x412, %edx            # imm = 0x412
leaq 0x2d934(%rip), %rcx     # 0x4257e
callq 0x51e0
movq -0xb0(%rbp), %rax
movq -0xa8(%rbp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
ja 0x14c6b
jmp 0x14736
movq -0xc8(%rbp), %rax
movq %rax, -0x260(%rbp)
movq -0x48(%rbp), %rdi
callq 0x33470
movl %eax, %ecx
movq -0x260(%rbp), %rax
movl %ecx, %ecx
cmpq %rcx, %rax
jbe 0x14cd8
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x48(%rbp), %r9
movq -0xa8(%rbp), %r10
movq -0xb0(%rbp), %r11
movzbl -0x49(%rbp), %ebx
andl $0x1, %ebx
movq %rsp, %rax
movl %ebx, 0x10(%rax)
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x33490
jmp 0x14cd3
jmp 0x14736
movq -0xb0(%rbp), %rax
subq -0xa8(%rbp), %rax
cmpq $0x6, %rax
ja 0x14d87
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x48(%rbp), %r9
movzbl 0x10(%rbp), %r10d
movq -0xa8(%rbp), %r11
movq -0xb0(%rbp), %rbx
movq -0xc8(%rbp), %r14
movzbl -0x49(%rbp), %r15d
andl $0x1, %r15d
movq %rsp, %rax
movl %r15d, 0x20(%rax)
movq %r14, 0x18(%rax)
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movl %r10d, (%rax)
callq 0x16210
jmp 0x14d48
testb $0x1, -0x49(%rbp)
je 0x14d82
movq -0x20(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x40(%rbp), %rcx
movq -0xa8(%rbp), %r9
movq -0xb0(%rbp), %r8
movq %rsp, %rax
movq %r8, (%rax)
movq $-0x1, %r8
callq 0x32480
jmp 0x14d80
jmp 0x14d82
jmp 0x14736
leaq -0xf0(%rbp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x5190
movq -0xa8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpq -0xb0(%rbp), %rax
jae 0x14ff7
movq -0xc8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0xf8(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x14e0c
movq -0x28(%rbp), %rdi
movq -0x100(%rbp), %rsi
callq 0x36f70
movb %al, -0x261(%rbp)
jmp 0x14dfe
movb -0x261(%rbp), %al
movb %al, -0x262(%rbp)
jmp 0x14e15
movb 0x10(%rbp), %al
movb %al, -0x262(%rbp)
movb -0x262(%rbp), %al
movb %al, -0x101(%rbp)
movzbl -0x101(%rbp), %eax
cmpl $0x4, %eax
jle 0x14f56
movq 0x35188(%rip), %rdi     # 0x49fc0
leaq 0x2a364(%rip), %rsi     # 0x3f1a3
callq 0x5360
movq %rax, -0x270(%rbp)
jmp 0x14e4d
movq -0x270(%rbp), %rdi
movzbl -0x101(%rbp), %esi
callq 0x5620
movq %rax, -0x278(%rbp)
jmp 0x14e69
movq -0x278(%rbp), %rdi
leaq 0x2a343(%rip), %rsi     # 0x3f1ba
callq 0x5360
movq %rax, -0x280(%rbp)
jmp 0x14e85
movq -0x280(%rbp), %rdi
movl $0x4, %esi
callq 0x5750
movq %rax, -0x288(%rbp)
jmp 0x14e9f
movq -0x288(%rbp), %rdi
leaq 0x2c70b(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, -0x290(%rbp)
jmp 0x14ebb
movq -0x290(%rbp), %rdi
movq 0x350b7(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x14ed0
movq 0x350e9(%rip), %rdi     # 0x49fc0
leaq 0x2d050(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, -0x298(%rbp)
jmp 0x14eec
movq -0x298(%rbp), %rdi
leaq 0x2b890(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, -0x2a0(%rbp)
jmp 0x14f08
movq -0x2a0(%rbp), %rdi
movl $0x42b, %esi            # imm = 0x42B
callq 0x5750
movq %rax, -0x2a8(%rbp)
jmp 0x14f22
movq -0x2a8(%rbp), %rdi
movq 0x35050(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x14f37
leaq 0x2b72c(%rip), %rdi     # 0x4066a
leaq 0x2cfe9(%rip), %rsi     # 0x41f2e
movl $0x42b, %edx            # imm = 0x42B
leaq 0x2d62d(%rip), %rcx     # 0x4257e
callq 0x51e0
movzbl -0x101(%rbp), %eax
cmpl $0x0, %eax
jne 0x14f9a
movq -0x38(%rbp), %rax
movq -0xf8(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x38(%rbp), %rax
movq -0xa8(%rbp), %rcx
movq -0xf0(%rbp), %rsi
movq %rsi, %rdi
addq $0x1, %rdi
movq %rdi, -0xf0(%rbp)
addq %rsi, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x14fde
movq -0x38(%rbp), %rax
movq -0xf8(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movzbl -0x101(%rbp), %eax
subl $0x1, %eax
cltq
movq -0x70(%rbp,%rax,8), %rax
movzbl -0x101(%rbp), %ecx
movl %ecx, %esi
movq -0xf0(%rbp,%rsi,8), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, -0xf0(%rbp,%rsi,8)
movq %rdx, (%rax,%rcx,8)
jmp 0x14fe0
movq -0xf8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xf8(%rbp)
jmp 0x14da8
movq -0xf0(%rbp), %rax
addq -0xe8(%rbp), %rax
addq -0xe0(%rbp), %rax
addq -0xd8(%rbp), %rax
addq -0xd0(%rbp), %rax
movq -0xb0(%rbp), %rcx
subq -0xa8(%rbp), %rcx
cmpq %rcx, %rax
je 0x1529c
movq 0x34f88(%rip), %rdi     # 0x49fc0
leaq 0x2a0da(%rip), %rsi     # 0x3f119
callq 0x5360
movq %rax, -0x2b0(%rbp)
jmp 0x1504d
movq -0x2b0(%rbp), %rdi
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rax
addq %rax, %rsi
movq -0xe0(%rbp), %rax
addq %rax, %rsi
movq -0xd8(%rbp), %rax
addq %rax, %rsi
movq -0xd0(%rbp), %rax
addq %rax, %rsi
callq 0x50c0
movq %rax, -0x2b8(%rbp)
jmp 0x15091
movq -0x2b8(%rbp), %rdi
leaq 0x2a090(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, -0x2c0(%rbp)
jmp 0x150ad
movq -0x2c0(%rbp), %rdi
leaq 0x3725(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, -0x2c8(%rbp)
jmp 0x150c9
movq -0x2c8(%rbp), %rdi
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rax
addq %rax, %rsi
movq -0xe0(%rbp), %rax
addq %rax, %rsi
movq -0xd8(%rbp), %rax
addq %rax, %rsi
movq -0xd0(%rbp), %rax
addq %rax, %rsi
callq 0x50c0
movq %rax, -0x2d0(%rbp)
jmp 0x1510d
movq -0x2d0(%rbp), %rdi
leaq 0x36f5(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, -0x2d8(%rbp)
jmp 0x15129
movq -0x2d8(%rbp), %rdi
leaq 0x29ffd(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, -0x2e0(%rbp)
jmp 0x15145
movq -0x2e0(%rbp), %rdi
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rax
subq %rax, %rsi
callq 0x50c0
movq %rax, -0x2e8(%rbp)
jmp 0x1516b
movq -0x2e8(%rbp), %rdi
leaq 0x29fb6(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, -0x2f0(%rbp)
jmp 0x15187
movq -0x2f0(%rbp), %rdi
leaq 0x364b(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, -0x2f8(%rbp)
jmp 0x151a3
movq -0x2f8(%rbp), %rdi
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rax
subq %rax, %rsi
callq 0x50c0
movq %rax, -0x300(%rbp)
jmp 0x151c9
movq -0x300(%rbp), %rdi
leaq 0x3639(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, -0x308(%rbp)
jmp 0x151e5
movq -0x308(%rbp), %rdi
leaq 0x2c3c5(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, -0x310(%rbp)
jmp 0x15201
movq -0x310(%rbp), %rdi
movq 0x34d71(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x15216
movq 0x34da3(%rip), %rdi     # 0x49fc0
leaq 0x2cd0a(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, -0x318(%rbp)
jmp 0x15232
movq -0x318(%rbp), %rdi
leaq 0x2b54a(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, -0x320(%rbp)
jmp 0x1524e
movq -0x320(%rbp), %rdi
movl $0x432, %esi            # imm = 0x432
callq 0x5750
movq %rax, -0x328(%rbp)
jmp 0x15268
movq -0x328(%rbp), %rdi
movq 0x34d0a(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x1527d
leaq 0x2b3e6(%rip), %rdi     # 0x4066a
leaq 0x2cca3(%rip), %rsi     # 0x41f2e
movl $0x432, %edx            # imm = 0x432
leaq 0x2d2e7(%rip), %rcx     # 0x4257e
callq 0x51e0
movq -0xa8(%rbp), %rax
addq -0xf0(%rbp), %rax
movq %rax, -0x110(%rbp)
cmpq $0x0, -0xe8(%rbp)
jbe 0x152f6
movq -0x38(%rbp), %rdi
movq -0x110(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x70(%rbp), %rsi
movq -0xe8(%rbp), %rdx
shlq $0x3, %rdx
callq 0x5290
movq -0xe8(%rbp), %rax
addq -0x110(%rbp), %rax
movq %rax, -0x110(%rbp)
cmpq $0x0, -0xe0(%rbp)
jbe 0x1533b
movq -0x38(%rbp), %rdi
movq -0x110(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x68(%rbp), %rsi
movq -0xe0(%rbp), %rdx
shlq $0x3, %rdx
callq 0x5290
movq -0xe0(%rbp), %rax
addq -0x110(%rbp), %rax
movq %rax, -0x110(%rbp)
cmpq $0x0, -0xd8(%rbp)
jbe 0x15380
movq -0x38(%rbp), %rdi
movq -0x110(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x60(%rbp), %rsi
movq -0xd8(%rbp), %rdx
shlq $0x3, %rdx
callq 0x5290
movq -0xd8(%rbp), %rax
addq -0x110(%rbp), %rax
movq %rax, -0x110(%rbp)
cmpq $0x0, -0xd0(%rbp)
jbe 0x153b0
movq -0x38(%rbp), %rdi
movq -0x110(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x58(%rbp), %rsi
movq -0xd0(%rbp), %rdx
shlq $0x3, %rdx
callq 0x5290
leaq -0x130(%rbp), %rdi
callq 0x2bd40
jmp 0x153be
leaq -0x98(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x36fa0
jmp 0x153d3
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x330(%rbp)
jmp 0x153e8
movq -0x330(%rbp), %rdi
callq 0x37020
jmp 0x153f6
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x338(%rbp)
jmp 0x1540b
movq -0x338(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x2c110
jmp 0x15420
movq $0x0, -0x138(%rbp)
cmpq $0x4, -0x138(%rbp)
jae 0x15504
movq -0x138(%rbp), %rax
cmpq $0x0, -0xf0(%rbp,%rax,8)
jbe 0x154eb
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x340(%rbp)
jmp 0x15464
leaq -0x98(%rbp), %rdi
callq 0x36df0
movq %rax, -0x348(%rbp)
jmp 0x15479
movq -0x348(%rbp), %rdi
callq 0x2edf0
movq %rax, -0x350(%rbp)
jmp 0x1548e
movq -0x340(%rbp), %rdi
movq -0x350(%rbp), %rax
movq (%rax), %rax
movq -0x138(%rbp), %rcx
movq -0xf0(%rbp,%rcx,8), %rcx
addq %rcx, %rax
movq %rax, -0x140(%rbp)
leaq -0x140(%rbp), %rsi
callq 0x2c110
jmp 0x154c6
jmp 0x154eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x2caf0
jmp 0x1557f
jmp 0x154ed
movq -0x138(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x138(%rbp)
jmp 0x1542b
leaq -0x130(%rbp), %rdi
callq 0x2caf0
jmp 0x14736
movq $0x0, -0x148(%rbp)
cmpq $0x4, -0x148(%rbp)
jae 0x15565
movq -0x148(%rbp), %rax
movq -0x70(%rbp,%rax,8), %rax
movq %rax, -0x358(%rbp)
cmpq $0x0, %rax
je 0x1554f
movq -0x358(%rbp), %rdi
callq 0x5510
jmp 0x15551
movq -0x148(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x148(%rbp)
jmp 0x15520
leaq -0x98(%rbp), %rdi
callq 0x37040
addq $0x368, %rsp            # imm = 0x368
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq -0x98(%rbp), %rdi
callq 0x37040
movq -0xb8(%rbp), %rdi
callq 0x5760
nopw (%rax,%rax)