// File: /workspace/github_cpp_makefile_star2_O1/BenLangmead[P]bowtie/./blockwise_sa.h
// Function: KarkkainenBlockwiseSA<SString<char>>::nextBlock(int, int)
void KarkkainenBlockwiseSA<TStr>::nextBlock(int cur_block, int tid) {
#ifndef NDEBUG
	if(this->_nthreads > 1) {
		assert_lt((size_t)tid, this->_itrBuckets.size());
	}
#endif
	EList<TIndexOffU>& bucket = (this->_nthreads > 1 ? this->_itrBuckets[tid] : this->_itrBucket);
	{
		ThreadSafe ts(&_mutex);
		VMSG_NL("Getting block " << (cur_block+1) << " of " << _sampleSuffs.size()+1);
	}
	assert(_built);
	assert_gt(_dcV, 3);
	assert_leq((size_t)cur_block, _sampleSuffs.size());
	const TStr& t = this->text();
	TIndexOffU len = (TIndexOffU)t.length();
	// Set up the bucket
	bucket.clear();
	TIndexOffU lo = OFF_MASK, hi = OFF_MASK;
	if(_sampleSuffs.size() == 0) {
		// Special case: if _sampleSuffs is 0, then multikey-quicksort
		// everything
		{
			ThreadSafe ts(&_mutex);
			VMSG_NL("  No samples; assembling all-inclusive block");
		}
		assert_eq(0, cur_block);
		try {
			if(bucket.capacity() < this->bucketSz()) {
				bucket.reserveExact(len+1);
			}
			bucket.resize(len);
			for(TIndexOffU i = 0; i < len; i++) {
				bucket[i] = i;
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a master suffix-array block of " << ((len+1) * 4) << " bytes" << endl
				     << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}
	} else {
		try {
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Reserving size (" << this->bucketSz() << ") for bucket " << (cur_block+1));
			}
			// BTL: Add a +100 fudge factor; there seem to be instances
			// where a bucket ends up having one more elt than bucketSz()
			if(bucket.size() < this->bucketSz()+100) {
				bucket.reserveExact(this->bucketSz()+100);
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a suffix-array block of " << ((this->bucketSz()+1) * 4) << " bytes" << endl;
				cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}
		// Select upper and lower bounds from _sampleSuffs[] and
		// calculate the Z array up to the difference-cover periodicity
		// for both.  Be careful about first/last buckets.

		//String<TIndexOffU> zLo(EBWTB_CAT), zHi(EBWTB_CAT);
		EList<TIndexOffU> zLo, zHi;
		assert_geq(cur_block, 0);
		assert_leq((size_t)cur_block, _sampleSuffs.size());
		bool first = (cur_block == 0);
		bool last  = ((size_t)cur_block == _sampleSuffs.size());
		try {
			// Timer timer(cout, "  Calculating Z arrays time: ", this->verbose());
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Calculating Z arrays for bucket " << (cur_block+1));
			}
			if(!last) {
				// Not the last bucket
				assert_lt((size_t)cur_block, _sampleSuffs.size());
				hi = _sampleSuffs[cur_block];
				zHi.resizeExact(_dcV);
				zHi.fillZero();
				assert_eq(zHi[0], 0);
				calcZ(t, hi, zHi, this->verbose(), this->sanityCheck());
			}
			if(!first) {
				// Not the first bucket
				assert_gt(cur_block, 0);
				assert_leq((size_t)cur_block, _sampleSuffs.size());
				lo = _sampleSuffs[cur_block-1];
				zLo.resizeExact(_dcV);
				zLo.fillZero();
				assert_gt(_dcV, 3);
				assert_eq(zLo[0], 0);
				calcZ(t, lo, zLo, this->verbose(), this->sanityCheck());
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a z-array of " << (_dcV * 4) << " bytes" << endl;
				cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}

		// This is the most critical loop in the algorithm; this is where
		// we iterate over all suffixes in the text and pick out those that
		// fall into the current bucket.
		//
		// This loop is based on the SMALLERSUFFIXES function outlined on
		// p7 of the "Fast BWT" paper
		//
		int64_t kHi = -1, kLo = -1;
		int64_t jHi = -1, jLo = -1;
		bool kHiSoft = false, kLoSoft = false;
		assert_eq(0, bucket.size());
		{
			// Timer timer(cout, "  Block accumulator loop time: ", this->verbose());
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Entering block accumulator loop for bucket " << (cur_block+1) << ":");
			}
			TIndexOffU lenDiv10 = (len + 9) / 10;
			for(TIndexOffU iten = 0, ten = 0; iten < len; iten += lenDiv10, ten++) {
				TIndexOffU itenNext = iten + lenDiv10;
				{
					ThreadSafe ts(&_mutex);
					if(ten > 0) VMSG_NL("  bucket " << (cur_block+1) << ": " << (ten * 10) << "%");
				}
				for(TIndexOffU i = iten; i < itenNext && i < len; i++) {
					assert_lt(jLo, (TIndexOff)i); assert_lt(jHi, (TIndexOff)i);
					// Advance the upper-bound comparison by one character
					if(i == hi || i == lo) continue; // equal to one of the bookends
					if(hi != OFF_MASK && !suffixCmp(hi, i, jHi, kHi, kHiSoft, zHi)) {
						continue; // not in the bucket
					}
					if(lo != OFF_MASK && suffixCmp(lo, i, jLo, kLo, kLoSoft, zLo)) {
						continue; // not in the bucket
					}
					// In the bucket! - add it
					assert_lt(i, len);
					try {
						bucket.push_back(i);
					} catch(bad_alloc &e) {
						cerr << "Could not append element to block of " << ((bucket.size()) * OFF_SIZE) << " bytes" << endl;
						if(this->_passMemExc) {
							throw e; // rethrow immediately
						} else {
							cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
							     << "a larger --bmaxdivn" << endl;
							throw 1;
						}
					}
					// Not necessarily true; we allow overflowing buckets
					// since we can't guarantee that a good set of sample
					// suffixes can be found in a reasonable amount of time
					//assert_lt(bucket.size(), this->bucketSz());
				}
			} // end loop over all suffixes of t
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  bucket " << (cur_block+1) << ": 100%");
			}
		}
	} // end else clause of if(_sampleSuffs.size() == 0)
	// Sort the bucket
	if(bucket.size() > 0) {
		Timer timer(cout, "  Sorting block time: ", this->verbose());
		{
			ThreadSafe ts(&_mutex);
			VMSG_NL("  Sorting block of length " << bucket.size() << " for bucket " << (cur_block+1));
		}
		this->qsort(bucket);
	}
	if(hi != OFF_MASK) {
		// Not the final bucket; throw in the sample on the RHS
		bucket.push_back(hi);
	} else {
		// Final bucket; throw in $ suffix
		bucket.push_back(len);
	}
	{
		ThreadSafe ts(&_mutex);
		VMSG_NL("Returning block of " << bucket.size() << " for bucket " << (cur_block+1));
	}

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x248, %rsp            # imm = 0x248
movl %esi, %ebp
movq %rdi, %r12
movslq %edx, %rax
shlq $0x5, %rax
addq 0x110(%rdi), %rax
cmpl $0x2, 0x68(%rdi)
leaq 0x18(%rdi), %r15
cmovgeq %rax, %r15
addq $0x98, %rdi
movq %rdi, 0x8(%rsp)
callq 0x2d29c
cmpb $0x1, 0x16(%r12)
jne 0x181d7
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x1894a(%rip), %rsi     # 0x30a5d
movl $0xe, %edx
movq %rbx, %rdi
callq 0x5400
leal 0x1(%rbp), %esi
movq %rbx, %rdi
callq 0x5680
movq %rax, %rbx
leaq 0x17f3a(%rip), %rsi     # 0x3006f
movl $0x4, %edx
movq %rax, %rdi
callq 0x5400
movq 0x60(%r12), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x20(%rsp), %rdi
callq 0x55a0
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x181b6
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x22d9b(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movq 0x8(%r12), %r13
movl 0x18(%r13), %eax
movl %eax, 0x14(%rsp)
movq $0x0, 0x18(%r15)
movl $0xffffffff, 0x1c(%rsp) # imm = 0xFFFFFFFF
cmpq $0x0, 0x60(%r12)
je 0x18515
movq 0x8(%rsp), %rdi
callq 0x2d29c
cmpb $0x1, 0x16(%r12)
jne 0x182fd
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x188e4(%rip), %rsi     # 0x30b20
movl $0x12, %edx
movq %rbx, %rdi
callq 0x5400
movl 0x10(%r12), %esi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
leaq 0x188d3(%rip), %rsi     # 0x30b33
movl $0xd, %edx
movq %rax, %rdi
callq 0x5400
leal 0x1(%rbp), %esi
movq %rbx, %rdi
callq 0x5680
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x20(%rsp), %rdi
callq 0x55a0
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x182dc
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x22c75(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movl 0x10(%r12), %ebx
addl $0x64, %ebx
cmpq %rbx, 0x18(%r15)
jae 0x18343
cmpq $0x0, 0x8(%r15)
jne 0x18338
movq %rbx, 0x10(%r15)
leaq (,%rbx,4), %rdi
callq 0x5030
movl (%r15), %ecx
movl %ecx, 0x4(%r15)
movq %rax, 0x8(%r15)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x179d8
movabsq $-0x100000000, %rax     # imm = 0xFFFFFFFF00000000
leaq 0x28(%rsp), %rsi
movq %rax, -0x8(%rsi)
xorl %ecx, %ecx
movq %rcx, (%rsi)
movl $0x80, %edx
movq %rdx, 0x8(%rsi)
movq %rcx, 0x10(%rsi)
leaq 0x80(%rsp), %rsi
movq %rax, -0x8(%rsi)
movq %rcx, (%rsi)
movq %rdx, 0x8(%rsi)
movq %rcx, 0x10(%rsi)
movq 0x60(%r12), %r14
movq 0x8(%rsp), %rdi
callq 0x2d29c
cmpb $0x1, 0x16(%r12)
jne 0x18453
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x187b7(%rip), %rsi     # 0x30b6d
movl $0x22, %edx
movq %rbx, %rdi
callq 0x5400
leal 0x1(%rbp), %esi
movq %rbx, %rdi
callq 0x5680
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x55a0
leaq 0x40(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18432
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x22b1f(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq %r15, 0x68(%rsp)
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movslq %ebp, %r15
cmpq %r15, %r14
je 0x184b9
movq 0x50(%r12), %rax
movl (%rax,%r15,4), %eax
movl %eax, 0x1c(%rsp)
movl 0x74(%r12), %esi
leaq 0x78(%rsp), %rdi
callq 0x1cbe2
leaq 0x78(%rsp), %rbx
movq 0x8(%rbx), %rdi
movq 0x18(%rbx), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x51b0
movl 0x1c(%rsp), %esi
movzbl 0x16(%r12), %ecx
movzbl 0x14(%r12), %r8d
movq %r13, %rdi
movq %rbx, %rdx
callq 0x1f4cb
movq %rbp, 0x60(%rsp)
testl %ebp, %ebp
je 0x18655
movq 0x50(%r12), %rax
movl -0x4(%rax,%r15,4), %ebp
movl 0x74(%r12), %esi
leaq 0x20(%rsp), %rdi
callq 0x1cbe2
leaq 0x20(%rsp), %rbx
movq 0x8(%rbx), %rdi
movq 0x18(%rbx), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x51b0
movzbl 0x16(%r12), %ecx
movzbl 0x14(%r12), %r8d
movq %r13, %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x1f4cb
jmp 0x1865a
movq 0x8(%rsp), %rdi
callq 0x2d29c
cmpb $0x1, 0x16(%r12)
jne 0x185db
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x18525(%rip), %rsi     # 0x30a6c
movl $0x2c, %edx
movq %rbx, %rdi
callq 0x5400
movq 0xd0(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x20(%rsp), %rdi
callq 0x55a0
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x185ba
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x22997(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movl 0x10(%r12), %eax
cmpq %rax, 0x10(%r15)
jae 0x18624
movl 0x14(%rsp), %ebx
incl %ebx
cmpq $0x0, 0x8(%r15)
jne 0x18619
movq %rbx, 0x10(%r15)
leaq (,%rbx,4), %rdi
callq 0x5030
movl (%r15), %ecx
movl %ecx, 0x4(%r15)
movq %rax, 0x8(%r15)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x179d8
movl 0x14(%rsp), %esi
movq %r15, %rdi
callq 0x1a064
cmpl $0x0, 0x14(%rsp)
je 0x18aef
xorl %eax, %eax
movq 0x8(%r15), %rcx
movl %eax, (%rcx,%rax,4)
incq %rax
movl 0x14(%rsp), %ecx
cmpq %rcx, %rax
jb 0x1863d
jmp 0x18aef
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movq $-0x1, %rax
movq %rax, 0xb8(%rsp)
movq %rax, 0xb0(%rsp)
movq %rax, 0xa8(%rsp)
movq %rax, 0xa0(%rsp)
xorl %eax, %eax
movb %al, 0x1b(%rsp)
movb %al, 0x1a(%rsp)
movq 0x8(%rsp), %rdi
callq 0x2d29c
cmpb $0x1, 0x16(%r12)
jne 0x18773
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x184f4(%rip), %rsi     # 0x30bb1
movl $0x2d, %edx
movq %rbx, %rdi
callq 0x5400
movq 0x60(%rsp), %rax
leal 0x1(%rax), %esi
movq %rbx, %rdi
callq 0x5680
movq %rax, %rbx
leaq 0x1681e(%rip), %rsi     # 0x2ef02
movl $0x1, %edx
movq %rax, %rdi
callq 0x5400
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x55a0
leaq 0x40(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18752
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x227ff(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq %r12, %r15
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movl 0x14(%rsp), %eax
testl %eax, %eax
je 0x189ac
addl $0x9, %eax
movl $0xcccccccd, %ecx       # imm = 0xCCCCCCCD
imulq %rax, %rcx
shrq $0x23, %rcx
movq %rcx, 0x98(%rsp)
movq 0x60(%rsp), %rax
incl %eax
movl %eax, 0x74(%rsp)
xorl %r14d, %r14d
leaq 0x1b(%rsp), %rbx
xorl %r13d, %r13d
movl %r13d, %r12d
movq 0x8(%rsp), %rdi
callq 0x2d29c
testl %r14d, %r14d
je 0x188d4
cmpb $0x1, 0x16(%r15)
jne 0x188d4
leaq 0xc0(%rsp), %rdi
callq 0x5200
movl $0x9, %edx
leaq 0xd0(%rsp), %rdi
leaq 0x183e3(%rip), %rsi     # 0x30bdf
callq 0x5400
leaq 0xd0(%rsp), %rdi
movl 0x74(%rsp), %esi
callq 0x5680
movq %rax, %r13
movl $0x2, %edx
movq %rax, %rdi
leaq 0x15f54(%rip), %rsi     # 0x2e778
callq 0x5400
leal (%r14,%r14), %eax
leal (%rax,%rax,4), %esi
movq %r13, %rdi
callq 0x51e0
movq %rax, %r13
movl $0x1, %edx
movq %rax, %rdi
leaq 0x183ca(%rip), %rsi     # 0x30c14
callq 0x5400
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %r13, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0x40(%rsp), %r13
movq %r13, %rdi
leaq 0xd8(%rsp), %rsi
callq 0x55a0
movq %r15, %rdi
movq %r13, %rsi
callq 0x1b894
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x188b3
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
leaq 0xc0(%rsp), %rdi
movq 0x22696(%rip), %rsi     # 0x3af58
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movq 0x98(%rsp), %rax
leal (%r12,%rax), %r13d
movl %r12d, 0xc0(%rsp)
cmpl %r13d, %r12d
jae 0x1899e
cmpl 0x14(%rsp), %r12d
jae 0x1899e
movl 0x1c(%rsp), %esi
cmpl %esi, %r12d
je 0x1898e
cmpl %ebp, %r12d
je 0x1898e
cmpl $-0x1, %esi
je 0x18944
leaq 0x78(%rsp), %rax
movq %rax, (%rsp)
movq %r15, %rdi
movl %r12d, %edx
leaq 0xa8(%rsp), %rcx
leaq 0xb8(%rsp), %r8
movq %rbx, %r9
callq 0x1f65c
testb %al, %al
je 0x1898e
cmpl $-0x1, %ebp
je 0x1897c
movl 0xc0(%rsp), %edx
leaq 0x20(%rsp), %rax
movq %rax, (%rsp)
movq %r15, %rdi
movl %ebp, %esi
leaq 0xa0(%rsp), %rcx
leaq 0xb0(%rsp), %r8
leaq 0x1a(%rsp), %r9
callq 0x1f65c
testb %al, %al
jne 0x1898e
movq 0x68(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x17516
movl 0xc0(%rsp), %r12d
incl %r12d
jmp 0x188ea
incl %r14d
cmpl 0x14(%rsp), %r13d
jb 0x187ba
movq 0x8(%rsp), %rdi
callq 0x2d29c
movq %r15, %r12
cmpb $0x1, 0x16(%r15)
movq 0x60(%rsp), %rbp
movq 0x68(%rsp), %r15
jne 0x18a9b
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x181f5(%rip), %rsi     # 0x30bdf
movl $0x9, %edx
movq %rbx, %rdi
callq 0x5400
leal 0x1(%rbp), %esi
movq %rbx, %rdi
callq 0x5680
movq %rax, %rbx
leaq 0x18203(%rip), %rsi     # 0x30c0f
movl $0x6, %edx
movq %rax, %rdi
callq 0x5400
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x55a0
leaq 0x40(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18a7a
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x224d7(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x18acd
callq 0x5450
xorps %xmm0, %xmm0
leaq 0x80(%rsp), %rax
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x18aef
callq 0x5450
xorps %xmm0, %xmm0
leaq 0x28(%rsp), %rax
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
cmpq $0x0, 0x18(%r15)
je 0x18c40
movb 0x16(%r12), %bl
xorl %edi, %edi
callq 0x5300
movq %rax, 0x20(%rsp)
movq 0x2248e(%rip), %rax     # 0x3afa0
movq %rax, 0x28(%rsp)
leaq 0x180f8(%rip), %rax     # 0x30c16
movq %rax, 0x30(%rsp)
movb %bl, 0x38(%rsp)
movq 0x8(%rsp), %rdi
callq 0x2d29c
cmpb $0x1, 0x16(%r12)
jne 0x18c1f
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x180d4(%rip), %rsi     # 0x30c2d
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x5400
movq 0x18(%r15), %rsi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
leaq 0x17fb8(%rip), %rsi     # 0x30b34
movl $0xc, %edx
movq %rax, %rdi
callq 0x5400
leal 0x1(%rbp), %esi
movq %rbx, %rdi
callq 0x5680
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x78(%rsp), %rdi
callq 0x55a0
leaq 0x78(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x88(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18bfe
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x22353(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
movq (%r12), %rax
movq %r12, %rdi
movq %r15, %rsi
callq *0x38(%rax)
leaq 0x20(%rsp), %rdi
callq 0xff2c
leaq 0x1c(%rsp), %rax
cmpl $-0x1, (%rax)
leaq 0x14(%rsp), %rsi
cmovneq %rax, %rsi
movq %r15, %rdi
callq 0x17516
movq 0x8(%rsp), %rdi
callq 0x2d29c
cmpb $0x1, 0x16(%r12)
jne 0x18d4c
leaq 0xc0(%rsp), %rdi
callq 0x5200
leaq 0xd0(%rsp), %rbx
leaq 0x17fbd(%rip), %rsi     # 0x30c48
movl $0x13, %edx
movq %rbx, %rdi
callq 0x5400
movq 0x18(%r15), %rsi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
leaq 0x17e86(%rip), %rsi     # 0x30b34
movl $0xc, %edx
movq %rax, %rdi
callq 0x5400
incl %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0x5680
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5340
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xd8(%rsp), %rsi
leaq 0x20(%rsp), %rdi
callq 0x55a0
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x1b894
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18d2b
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
movq 0x22226(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
addq $0x248, %rsp            # imm = 0x248
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1907a
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x1907a
jmp 0x19077
movq %rax, %r14
jmp 0x1909b
movq %rax, %r14
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x191ff
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x191ff
jmp 0x191fc
movq %rax, %r14
jmp 0x19220
movq %rax, %r14
leaq 0x88(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1926f
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x1926f
jmp 0x1926c
movq %rax, %r14
jmp 0x19290
movq %rax, %r14
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x19237
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x19237
jmp 0x19234
movq %rax, %r14
jmp 0x19258
movq %rdx, %rbx
movq %rax, %r14
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x190bf
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x190bf
jmp 0x190b9
movq %rdx, %rbx
movq %rax, %r14
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x192b4
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x192b4
jmp 0x192ae
movq %rdx, %rbx
movq %rax, %r14
jmp 0x190e0
movq %rdx, %rbx
movq %rax, %r14
jmp 0x192d5
jmp 0x195d8
jmp 0x18f56
movq %rax, %r14
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x193f8
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x193f8
jmp 0x193f5
movq %rax, %r14
jmp 0x19419
movq %rax, %r14
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x19430
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x19430
jmp 0x1942d
movq %rax, %r14
jmp 0x19451
jmp 0x195d8
jmp 0x195e0
jmp 0x18f35
jmp 0x195d8
movq %rax, %r14
jmp 0x1929a
jmp 0x195d8
jmp 0x195e0
jmp 0x195d8
jmp 0x1906f
jmp 0x195d8
movq %rdx, %rbx
movq %rax, %r14
jmp 0x192df
movq %rax, %r14
cmpl $0x2, %edx
jne 0x1962d
movq %r14, %rdi
callq 0x5140
cmpb $0x1, 0x15(%r12)
jne 0x18fb0
movl $0x8, %edi
callq 0x5180
movq 0x22002(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x2200c(%rip), %rsi     # 0x3afa8
movq 0x21fd5(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5650
jmp 0x195ce
movq 0x22039(%rip), %rdi     # 0x3aff0
leaq 0x17adb(%rip), %rsi     # 0x30a99
movl $0x32, %edx
callq 0x5400
movl 0x14(%rsp), %eax
leal 0x4(,%rax,4), %esi
movq 0x22016(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x17ae3(%rip), %rsi     # 0x30acc
movl $0x6, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movq %rax, %rbx
leaq 0x17acb(%rip), %rsi     # 0x30ad3
movl $0x4c, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movq %rax, %rbx
leaq 0x1747a(%rip), %rsi     # 0x304a1
movl $0x13, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21ef5(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5650
jmp 0x195ce
movq %rax, %r14
callq 0x55d0
jmp 0x1962d
movq %rdx, %rbx
movq %rax, %r14
jmp 0x190ea
movq %rax, %r14
movq 0x21ed7(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
jmp 0x1962d
jmp 0x195d8
jmp 0x195d8
jmp 0x195d8
movq %rdx, %rbx
movq %rax, %r14
movq 0x21e92(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
cmpl $0x2, %ebx
jne 0x195e3
movq %r14, %rdi
callq 0x5140
cmpb $0x1, 0x15(%r12)
jne 0x19136
movl $0x8, %edi
callq 0x5180
movq 0x21e7c(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x21e86(%rip), %rsi     # 0x3afa8
movq 0x21e4f(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5650
jmp 0x195ce
movq 0x21eb3(%rip), %rdi     # 0x3aff0
leaq 0x17a4c(%rip), %rsi     # 0x30b90
movl $0x20, %edx
callq 0x5400
movl 0x74(%r12), %esi
shll $0x2, %esi
movq 0x21e93(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x17960(%rip), %rsi     # 0x30acc
movl $0x6, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movq 0x21e68(%rip), %rdi     # 0x3aff0
leaq 0x17944(%rip), %rsi     # 0x30ad3
movl $0x4c, %edx
callq 0x5400
movq 0x21e50(%rip), %rdi     # 0x3aff0
callq 0x5170
movq %rax, %rbx
leaq 0x172f2(%rip), %rsi     # 0x304a1
movl $0x13, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21d6d(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5650
jmp 0x195ce
jmp 0x195d8
movq %rax, %r14
callq 0x55d0
jmp 0x195e3
movq %rax, %r14
movq 0x21d52(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
jmp 0x195e3
jmp 0x195d8
movq %rax, %r14
movq 0x21d1a(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
jmp 0x195e3
jmp 0x195d8
movq %rax, %r14
movq 0x21ce2(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
leaq 0x20(%rsp), %rdi
callq 0xff2c
jmp 0x1962d
jmp 0x195d8
movq %rdx, %rbx
movq %rax, %r14
movq 0x21c9d(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
cmpl $0x2, %ebx
jne 0x1962d
movq %r14, %rdi
callq 0x5140
cmpb $0x1, 0x15(%r12)
jne 0x1932b
movl $0x8, %edi
callq 0x5180
movq 0x21c87(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x21c91(%rip), %rsi     # 0x3afa8
movq 0x21c5a(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5650
jmp 0x195ce
movq 0x21cbe(%rip), %rdi     # 0x3aff0
leaq 0x17808(%rip), %rsi     # 0x30b41
movl $0x2b, %edx
callq 0x5400
movl 0x10(%r12), %eax
leal 0x4(,%rax,4), %esi
movq 0x21c9a(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x17767(%rip), %rsi     # 0x30acc
movl $0x6, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movq 0x21c6f(%rip), %rdi     # 0x3aff0
leaq 0x1774b(%rip), %rsi     # 0x30ad3
movl $0x4c, %edx
callq 0x5400
movq 0x21c57(%rip), %rdi     # 0x3aff0
callq 0x5170
movq %rax, %rbx
leaq 0x170f9(%rip), %rsi     # 0x304a1
movl $0x13, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21b74(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5650
jmp 0x195ce
movq %rax, %r14
callq 0x55d0
jmp 0x1962d
jmp 0x195d8
movq %rax, %r14
movq 0x21b59(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
jmp 0x1962d
jmp 0x195d8
movq %rax, %r14
movq 0x21b21(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
jmp 0x1962d
jmp 0x195d8
movq %rax, %r14
jmp 0x194bb
movq %rax, %r14
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1949a
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5380
jmp 0x1949a
jmp 0x19497
jmp 0x195e0
jmp 0x195d8
movq %rax, %r14
movq 0x21ab7(%rip), %rsi     # 0x3af58
leaq 0xc0(%rsp), %rdi
callq 0x5230
leaq 0x140(%rsp), %rdi
callq 0x5130
movq 0x8(%rsp), %rdi
callq 0x2d2d8
jmp 0x195e3
jmp 0x195d8
movq %rax, %r14
cmpl $0x2, %edx
jne 0x195e3
movq %r14, %rdi
callq 0x5140
movq 0x21b06(%rip), %rdi     # 0x3aff0
leaq 0x176f8(%rip), %rsi     # 0x30be9
movl $0x25, %edx
callq 0x5400
movq 0x68(%rsp), %rax
movq 0x18(%rax), %rsi
shlq $0x2, %rsi
movq 0x21ae1(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x175ae(%rip), %rsi     # 0x30acc
movl $0x6, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
cmpb $0x1, 0x15(%r15)
jne 0x1956a
movl $0x8, %edi
callq 0x5180
movq 0x21a45(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x21a4f(%rip), %rsi     # 0x3afa8
movq 0x21a18(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5650
jmp 0x195ce
movq 0x21a7f(%rip), %rdi     # 0x3aff0
leaq 0x1755b(%rip), %rsi     # 0x30ad3
movl $0x4c, %edx
callq 0x5400
movq 0x21a67(%rip), %rdi     # 0x3aff0
callq 0x5170
movq %rax, %rbx
leaq 0x16f09(%rip), %rsi     # 0x304a1
movl $0x13, %edx
movq %rax, %rdi
callq 0x5400
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21984(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5650
movq %rax, %r14
callq 0x55d0
jmp 0x195e3
movq %rax, %rdi
callq 0xdcfa
movq %rax, %r14
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x1960b
callq 0x5450
xorps %xmm0, %xmm0
leaq 0x80(%rsp), %rax
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x1962d
callq 0x5450
xorps %xmm0, %xmm0
leaq 0x28(%rsp), %rax
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movq %r14, %rdi
callq 0x56a0
nop