// File: CMU-SAFARI[P]optimal-seed-solver/optimalSolverLN.cc
// Function: OptimalSolverLN::fillMatrix(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
void OptimalSolverLN::fillMatrix(string& DNA) {
	//Load all substrings
	loadL0(DNA);

#ifdef DEBUG
	cout << "l-" << 0 << "  ";
#endif

	//Fill level 0
	int lvPosCount = readLength - minLength * seedNum;
	for (int pos = 0; pos <= lvPosCount; pos++) {
		level[0][pos].start = level0[pos][0].start;
		level[0][pos].end = level0[pos][0].end;
		level[0][pos].frequency = level0[pos][0].frequency;
		//Fill up again for tracing back
		level[0][pos].rstart = level0[pos][0].start;
		level[0][pos].rend = level0[pos][0].end;
		level[0][pos].rfreq = level0[pos][0].frequency;
#ifdef DEBUG
		cout << 0 << "-" << pos + minLength - 1 << ":" << level[0][pos].start << "-"
			<< level[0][pos].end << ":" << level[0][pos].frequency << " ";
#endif
	}
#ifdef DEBUG
	cout << endl;
#endif

	int opt_div;

	//Now calculate the rest levels
	for (int l = 1; l < seedNum - 1; l++) {

		lvPosCount = readLength - minLength * seedNum;
		opt_div = solveFirstOptimal(lvPosCount, lvPosCount, l);
#ifdef DEBUG
		cout << "lvPosCount: " << lvPosCount << " opt_div: " << opt_div << endl;
#endif
		level[l][lvPosCount].lstart = level[l-1][opt_div].start;
		level[l][lvPosCount].lend = level[l-1][opt_div].end;
		level[l][lvPosCount].lfreq = level[l-1][opt_div].frequency;
		level[l][lvPosCount].rstart = level0[lvPosCount - opt_div][opt_div + l * minLength].start;
		level[l][lvPosCount].rend = level0[lvPosCount - opt_div][opt_div + l * minLength].end;
		level[l][lvPosCount].rfreq = level0[lvPosCount - opt_div][opt_div + l * minLength].frequency;
		level[l][lvPosCount].start = level[l][lvPosCount].lstart;
		level[l][lvPosCount].end = level[l][lvPosCount].rend;
		level[l][lvPosCount].frequency = level[l][lvPosCount].lfreq + level[l][lvPosCount].rfreq;

		for (int pos = lvPosCount - 1; pos >= 0; pos--) {

			int prev_opt_div = level[l][pos+1].rstart - l * minLength;
#ifdef DEBUG
			cout << "prev_opt_div: " << prev_opt_div << endl;
#endif
			//Optimal Solution Forwarding
			if (true && prev_opt_div <= pos && level0[pos - prev_opt_div][prev_opt_div + l * minLength].frequency == level[l][pos+1].rfreq) {
#ifdef TEST
				cout << "same as previous; pos: " << pos << endl;
				cout.flush();
#endif
				level[l][pos].lstart = level[l][pos+1].lstart;
				level[l][pos].lend = level[l][pos+1].lend;
				level[l][pos].lfreq = level[l][pos+1].lfreq;
				level[l][pos].rstart = level0[pos - prev_opt_div][opt_div + l * minLength].start;
				level[l][pos].rend = level0[pos - prev_opt_div][prev_opt_div + l * minLength].end;
				level[l][pos].rfreq = level0[pos - prev_opt_div][prev_opt_div + l * minLength].frequency;
				level[l][pos].start = level[l][pos].lstart;
				level[l][pos].end = level[l][pos].rend;
				level[l][pos].frequency = level[l][pos].lfreq + level[l][pos].rfreq;
				divTravel[0]++;
			}
			else {
				if (opt_div > pos)
					opt_div = pos;

				opt_div = solveFirstOptimal(opt_div, pos, l);

				level[l][pos].lstart = level[l-1][opt_div].start;
				level[l][pos].lend = level[l-1][opt_div].end;
				level[l][pos].lfreq = level[l-1][opt_div].frequency;
				level[l][pos].rstart = level0[pos - opt_div][opt_div + l * minLength].start;
				level[l][pos].rend = level0[pos - opt_div][opt_div + l * minLength].end;
				level[l][pos].rfreq = level0[pos - opt_div][opt_div + l * minLength].frequency;
				level[l][pos].start = level[l][pos].lstart;
				level[l][pos].end = level[l][pos].rend;
				level[l][pos].frequency = level[l][pos].lfreq + level[l][pos].rfreq;
			}
		}

#ifdef TEST
		cout << "freq: ";
		for (int pos = 0; pos <= lvPosCount; pos++) {
			cout << level[l][pos].frequency << " ";
		}
		cout << endl;
		cout << "rstart: ";
		for (int pos = 0; pos <= lvPosCount; pos++) {
			cout << level[l][pos].rstart << " ";
		}
		cout << endl;
		cout << "rfreq: ";
		for (int pos = 0; pos <= lvPosCount; pos++) {
			cout << level[l][pos].rfreq << " ";
		}
		cout << endl;
#endif
#ifdef DEBUG
		cout << "l-" << l << "  ";
		for (int pos = 0; pos <= lvPosCount; pos++) {
			cout << 0 << "-" << pos + (l + 1) * minLength - 1 << ":" << level[l][pos].lstart << "-"
				<< level[l][pos].lend << "(" << level[l][pos].lfreq << ")"
				<< level[l][pos].rstart << "-" << level[l][pos].rend << "("
				<< level[l][pos].rfreq << "):" << level[l][pos].frequency << " ";

		}
		cout << endl;
#endif
	}

	L0Loaded = false;
}

// Assembly:
subq $0xd8, %rsp
movq %rdi, 0xd0(%rsp)
movq %rsi, 0xc8(%rsp)
movq 0xd0(%rsp), %rdi
movq %rdi, 0x98(%rsp)
movq 0xc8(%rsp), %rsi
callq 0x6e60
movq 0x98(%rsp), %rdx
movl 0x360(%rdx), %eax
movl 0x368(%rdx), %ecx
imull 0x364(%rdx), %ecx
subl %ecx, %eax
movl %eax, 0xc4(%rsp)
movl $0x0, 0xc0(%rsp)
movl 0xc0(%rsp), %eax
cmpl 0xc4(%rsp), %eax
jg 0x83e8
movq 0x98(%rsp), %rdi
addq $0x398, %rdi            # imm = 0x398
movslq 0xc0(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl (%rax), %eax
movl %eax, 0x80(%rsp)
addq $0x380, %rdi            # imm = 0x380
xorl %eax, %eax
movl %eax, %esi
callq 0xa600
movl 0x80(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc0(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, (%rax)
addq $0x398, %rdi            # imm = 0x398
movslq 0xc0(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0x4(%rax), %eax
movl %eax, 0x84(%rsp)
addq $0x380, %rdi            # imm = 0x380
xorl %eax, %eax
movl %eax, %esi
callq 0xa600
movl 0x84(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc0(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x4(%rax)
addq $0x398, %rdi            # imm = 0x398
movslq 0xc0(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xc(%rax), %eax
movl %eax, 0x88(%rsp)
addq $0x380, %rdi            # imm = 0x380
xorl %eax, %eax
movl %eax, %esi
callq 0xa600
movl 0x88(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc0(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0xc(%rax)
addq $0x398, %rdi            # imm = 0x398
movslq 0xc0(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl (%rax), %eax
movl %eax, 0x8c(%rsp)
addq $0x380, %rdi            # imm = 0x380
xorl %eax, %eax
movl %eax, %esi
callq 0xa600
movl 0x8c(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc0(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x1c(%rax)
addq $0x398, %rdi            # imm = 0x398
movslq 0xc0(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0x4(%rax), %eax
movl %eax, 0x90(%rsp)
addq $0x380, %rdi            # imm = 0x380
xorl %eax, %eax
movl %eax, %esi
callq 0xa600
movl 0x90(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc0(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x20(%rax)
addq $0x398, %rdi            # imm = 0x398
movslq 0xc0(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xc(%rax), %eax
movl %eax, 0x94(%rsp)
addq $0x380, %rdi            # imm = 0x380
xorl %eax, %eax
movl %eax, %esi
callq 0xa600
movl 0x94(%rsp), %ecx
movq (%rax), %rax
movslq 0xc0(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x24(%rax)
movl 0xc0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc0(%rsp)
jmp 0x8193
movl $0x1, 0xb8(%rsp)
movq 0x98(%rsp), %rcx
movl 0xb8(%rsp), %eax
movl 0x364(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x9526
movq 0x98(%rsp), %rdi
movl 0x360(%rdi), %eax
movl 0x368(%rdi), %ecx
imull 0x364(%rdi), %ecx
subl %ecx, %eax
movl %eax, 0xc4(%rsp)
movl 0xc4(%rsp), %esi
movl 0xc4(%rsp), %edx
movl 0xb8(%rsp), %ecx
callq 0x9540
movq 0x98(%rsp), %rdi
movl %eax, 0xbc(%rsp)
addq $0x380, %rdi            # imm = 0x380
movl 0xb8(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, 0x58(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x58(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
addq $0x380, %rdi            # imm = 0x380
movl 0xb8(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, 0x5c(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x5c(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x14(%rax)
addq $0x380, %rdi            # imm = 0x380
movl 0xb8(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, 0x60(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x60(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x18(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xc4(%rsp), %eax
subl 0xbc(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xbc(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, 0x64(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x64(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x1c(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xc4(%rsp), %eax
subl 0xbc(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xbc(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, 0x68(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x68(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x20(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xc4(%rsp), %eax
subl 0xbc(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xbc(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, 0x6c(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x6c(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x24(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, 0x70(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x70(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, (%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x20(%rax), %eax
movl %eax, 0x74(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x74(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x4(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xc4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
movl %eax, 0x78(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq %rax, %rcx
movl 0x78(%rsp), %eax
movq (%rcx), %rcx
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rcx
addl 0x24(%rcx), %eax
movl %eax, 0x7c(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x7c(%rsp), %ecx
movq (%rax), %rax
movslq 0xc4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0xc(%rax)
movl 0xc4(%rsp), %eax
subl $0x1, %eax
movl %eax, 0xb4(%rsp)
cmpl $0x0, 0xb4(%rsp)
jl 0x9330
movq 0x98(%rsp), %rdi
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdx
movq (%rax), %rax
movl 0xb4(%rsp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x1c(%rax), %eax
movl 0xb8(%rsp), %ecx
imull 0x368(%rdx), %ecx
subl %ecx, %eax
movl %eax, 0xb0(%rsp)
movl 0xb0(%rsp), %eax
cmpl 0xb4(%rsp), %eax
jg 0x8e7e
movq 0x98(%rsp), %rdi
addq $0x398, %rdi            # imm = 0x398
movl 0xb4(%rsp), %eax
subl 0xb0(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xb0(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, 0x54(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq %rax, %rcx
movl 0x54(%rsp), %eax
movq (%rcx), %rcx
movl 0xb4(%rsp), %edx
addl $0x1, %edx
movslq %edx, %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rcx
cmpl 0x24(%rcx), %eax
jne 0x8e7e
movq 0x1b5fb(%rip), %rdi     # 0x23fc8
leaq 0x128a9(%rip), %rsi     # 0x1b27d
callq 0x32e0
movq %rax, %rdi
movl 0xb4(%rsp), %esi
callq 0x35b0
movq %rax, %rdi
movq 0x1b5c6(%rip), %rsi     # 0x23fb8
callq 0x3330
movq 0x1b5ca(%rip), %rdi     # 0x23fc8
callq 0x31f0
movq 0x98(%rsp), %rdi
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xb4(%rsp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, 0x2c(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x2c(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xb4(%rsp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movl %eax, 0x30(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x30(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x14(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xb4(%rsp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
movl %eax, 0x34(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x34(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x18(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xb4(%rsp), %eax
subl 0xb0(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xbc(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, 0x38(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x38(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x1c(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xb4(%rsp), %eax
subl 0xb0(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xb0(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, 0x3c(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x3c(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x20(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xb4(%rsp), %eax
subl 0xb0(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xb0(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, 0x40(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x40(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x24(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, 0x44(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x44(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, (%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x20(%rax), %eax
movl %eax, 0x48(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x48(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x4(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
movl %eax, 0x4c(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq %rax, %rcx
movl 0x4c(%rsp), %eax
movq (%rcx), %rcx
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rcx
addl 0x24(%rcx), %eax
movl %eax, 0x50(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x50(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0xc(%rax)
addq $0x3e8, %rdi            # imm = 0x3E8
xorl %eax, %eax
movl %eax, %esi
callq 0xa7a0
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x9318
movl 0xbc(%rsp), %eax
cmpl 0xb4(%rsp), %eax
jle 0x8e9c
movl 0xb4(%rsp), %eax
movl %eax, 0xbc(%rsp)
movq 0x98(%rsp), %rdi
movl 0xbc(%rsp), %esi
movl 0xb4(%rsp), %edx
movl 0xb8(%rsp), %ecx
callq 0x9540
movq 0x98(%rsp), %rdi
movl %eax, 0xbc(%rsp)
addq $0x380, %rdi            # imm = 0x380
movl 0xb8(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, 0x4(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x4(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
addq $0x380, %rdi            # imm = 0x380
movl 0xb8(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, 0x8(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x8(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x14(%rax)
addq $0x380, %rdi            # imm = 0x380
movl 0xb8(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, 0xc(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0xc(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x18(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xb4(%rsp), %eax
subl 0xbc(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xbc(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, 0x10(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x10(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x1c(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xb4(%rsp), %eax
subl 0xbc(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xbc(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, 0x14(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x14(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x20(%rax)
addq $0x398, %rdi            # imm = 0x398
movl 0xb4(%rsp), %eax
subl 0xbc(%rsp), %eax
movslq %eax, %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movl 0xbc(%rsp), %ecx
movl 0xb8(%rsp), %edx
imull 0x368(%rdi), %edx
addl %edx, %ecx
movslq %ecx, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, 0x18(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x18(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x24(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, 0x1c(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x1c(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, (%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x20(%rax), %eax
movl %eax, 0x20(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x20(%rsp), %ecx
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x4(%rax)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq (%rax), %rax
movslq 0xb4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
movl %eax, 0x24(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq 0x98(%rsp), %rdi
movq %rax, %rcx
movl 0x24(%rsp), %eax
movq (%rcx), %rcx
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rcx
addl 0x24(%rcx), %eax
movl %eax, 0x28(%rsp)
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movl 0x28(%rsp), %ecx
movq (%rax), %rax
movslq 0xb4(%rsp), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0xc(%rax)
jmp 0x931a
movl 0xb4(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0xb4(%rsp)
jmp 0x88bc
movq 0x1ac91(%rip), %rdi     # 0x23fc8
leaq 0x11f62(%rip), %rsi     # 0x1b2a0
callq 0x32e0
movl $0x0, 0xac(%rsp)
movl 0xac(%rsp), %eax
cmpl 0xc4(%rsp), %eax
jg 0x93bd
movq 0x98(%rsp), %rdi
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq (%rax), %rax
movslq 0xac(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %esi
movq 0x1ac32(%rip), %rdi     # 0x23fc8
callq 0x3460
movq %rax, %rdi
leaq 0x1234b(%rip), %rsi     # 0x1b6f0
callq 0x32e0
movl 0xac(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xac(%rsp)
jmp 0x934e
movq 0x1ac04(%rip), %rdi     # 0x23fc8
movq 0x1abed(%rip), %rsi     # 0x23fb8
callq 0x3330
movq 0x1abf1(%rip), %rdi     # 0x23fc8
leaq 0x11eb7(%rip), %rsi     # 0x1b295
callq 0x32e0
movl $0x0, 0xa8(%rsp)
movl 0xa8(%rsp), %eax
cmpl 0xc4(%rsp), %eax
jg 0x945d
movq 0x98(%rsp), %rdi
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq (%rax), %rax
movslq 0xa8(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x1c(%rax), %esi
movq 0x1ab92(%rip), %rdi     # 0x23fc8
callq 0x3460
movq %rax, %rdi
leaq 0x122ab(%rip), %rsi     # 0x1b6f0
callq 0x32e0
movl 0xa8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa8(%rsp)
jmp 0x93ee
movq 0x1ab64(%rip), %rdi     # 0x23fc8
movq 0x1ab4d(%rip), %rsi     # 0x23fb8
callq 0x3330
movq 0x1ab51(%rip), %rdi     # 0x23fc8
leaq 0x11e2a(%rip), %rsi     # 0x1b2a8
callq 0x32e0
movl $0x0, 0xa4(%rsp)
movl 0xa4(%rsp), %eax
cmpl 0xc4(%rsp), %eax
jg 0x94fd
movq 0x98(%rsp), %rdi
addq $0x380, %rdi            # imm = 0x380
movslq 0xb8(%rsp), %rsi
callq 0xa600
movq (%rax), %rax
movslq 0xa4(%rsp), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x24(%rax), %esi
movq 0x1aaf2(%rip), %rdi     # 0x23fc8
callq 0x3460
movq %rax, %rdi
leaq 0x1220b(%rip), %rsi     # 0x1b6f0
callq 0x32e0
movl 0xa4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa4(%rsp)
jmp 0x948e
movq 0x1aac4(%rip), %rdi     # 0x23fc8
movq 0x1aaad(%rip), %rsi     # 0x23fb8
callq 0x3330
movl 0xb8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb8(%rsp)
jmp 0x83f3
movq 0x98(%rsp), %rax
movb $0x0, (%rax)
addq $0xd8, %rsp
retq
nopl (%rax)