// File: /workspace/github_c_makefile_star2_O0/fukunagatsu[P]RIblast/ungapped_extension.cpp
// Function: UngappedExtension::Run(std::vector<Hit, std::allocator<Hit>>&, std::vector<unsigned char, std::allocator<unsigned char>>&, std::vector<unsigned char, std::allocator<unsigned char>>&, std::vector<float, std::allocator<float>>&, std::vector<float, std::allocator<float>>&, std::vector<std::vector<float, std::allocator<float>>, std::allocator<std::vector<float, std::allocator<float>>>>&, std::vector<std::vector<float, std::allocator<float>>, std::allocator<std::vector<float, std::allocator<float>>>>&)
void UngappedExtension::Run(vector<Hit> &candidate, vector<unsigned char> &query_seq, vector<unsigned char> &db_seq, vector<float> &query_accessibility, vector<float> &query_conditional_accessibility, vector<vector<float> > &db_accessibility,vector<vector<float> > &db_conditional_accessibility){
  for(int x = 0; x < candidate.size(); x++){
    double min_energy = candidate[x].GetEnergy();
    double energy = candidate[x].GetEnergy();
    double min_a_energy = candidate[x].GetAccessibilityEnergy();
    double a_energy = candidate[x].GetAccessibilityEnergy();
    double min_h_energy = candidate[x].GetHybridizationEnergy();
    double h_energy = candidate[x].GetHybridizationEnergy();
    
    int i = candidate[x].GetQSp(); int p = candidate[x].GetQSp();
    int j = candidate[x].GetDbSp(); int q = candidate[x].GetDbSp();
    int min_p = p; int min_q = q;
    int db_seq_id = candidate[x].GetDbSeqId();
    int db_seq_id_start = candidate[x].GetDbSeqIdStart(); int db_seq_id_end = db_seq_id_start + candidate[x].GetDbLength()-1;
    int min_db_seq_id_start = db_seq_id_start;
    while(true){
      i--; j--;
      db_seq_id_end++;
      if(i < 0 || j < 0 || query_seq[i] < 2 || db_seq[j] < 2){
	break;
      }
      double temp_accessibility = query_accessibility[i] - query_accessibility[i+1]
					  + query_conditional_accessibility[i+_min_accessible_length]
					  + db_conditional_accessibility[db_seq_id][db_seq_id_end];
      energy += temp_accessibility;
      a_energy += temp_accessibility;
      
      int q_char = query_seq[i] <=5 ? query_seq[i]-1 : query_seq[i]-5;
      int db_char = db_seq[j] <=5 ? db_seq[j]-1 : db_seq[j]-5;
      int type = BP_pair[q_char][db_char];
      if(type!=0){
	int q_char2 = query_seq[p] <=5 ? query_seq[p]-1 : query_seq[p]-5;
	int db_char2 = db_seq[q] <=5 ? db_seq[q]-1 : db_seq[q]-5;
	int type2 = BP_pair[q_char2][db_char2];
	type2 = rtype[type2];
	energy += LoopEnergy(type, type2, i, j, p, q, query_seq, db_seq);
	h_energy += LoopEnergy(type, type2, i, j, p, q, query_seq, db_seq);
	if(energy < min_energy){
	  min_energy = energy;
	  min_a_energy = a_energy;
	  min_h_energy = h_energy;
	  min_p = i;
	  min_q = j;
	}
	
	p = i;
	q = j;
      }
      
      if(min_p-i >= _drop_out_score){
	break;
      }
    }

    energy = min_energy;
    a_energy = min_a_energy;
    h_energy = min_h_energy;
    int k = candidate[x].GetQSp() + candidate[x].GetQLength()-1; int r = candidate[x].GetQSp() + candidate[x].GetQLength()-1;
    int l = candidate[x].GetDbSp() + candidate[x].GetQLength()-1; int s = candidate[x].GetDbSp() + candidate[x].GetQLength()-1;
    int min_r = r; int min_s = s;
    
    while(true){
      k++; l++;
      db_seq_id_start--;
      if(query_seq[k] < 2 || db_seq[l] < 2){
	break;
      }
      double temp_accessibility = query_conditional_accessibility[k] + db_accessibility[db_seq_id][db_seq_id_start]
			- db_accessibility[db_seq_id][db_seq_id_start+1]
			+ db_conditional_accessibility[db_seq_id][db_seq_id_start+_min_accessible_length];
      energy += temp_accessibility;
      a_energy += temp_accessibility;
      
      int q_char2 = query_seq[k] <=5 ? query_seq[k]-1 : query_seq[k]-5;
      int db_char2 = db_seq[l] <=5 ? db_seq[l]-1 : db_seq[l]-5;
      int type2 = BP_pair[q_char2][db_char2];
      type2 = rtype[type2];
      if(type2!=0){
	int q_char = query_seq[r] <=5 ? query_seq[r]-1 : query_seq[r]-5;
	int db_char = db_seq[s] <=5 ? db_seq[s]-1 : db_seq[s]-5;
	int type = BP_pair[q_char][db_char];
	energy += LoopEnergy(type, type2, r, s, k, l, query_seq, db_seq);
	h_energy += LoopEnergy(type, type2, r, s, k, l, query_seq, db_seq);
	
	if(energy < min_energy){
	  min_energy = energy;
	  min_a_energy = a_energy;
	  min_h_energy = h_energy;
	  min_r = k;
	  min_s = l;
	  min_db_seq_id_start = db_seq_id_start;
	}
	r = k;
	s = l;
      }
      if(k-min_r >= _drop_out_score){
	break;
      }
    }
    candidate[x].SetDbSeqIdStart(min_db_seq_id_start);
    candidate[x].SetQSp(min_p);
    candidate[x].SetDbSp(min_q);
    candidate[x].SetQLength(min_r-min_p+1);
    candidate[x].SetDbLength(min_r-min_p+1);
    candidate[x].SetEnergy(min_energy);
    candidate[x].SetAccessibilityEnergy(min_a_energy);
    candidate[x].SetHybridizationEnergy(min_h_energy);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x160, %rsp            # imm = 0x160
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movl $0x0, -0x34(%rbp)
movslq -0x34(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x10(%rbp), %rdi
callq 0x20650
movq %rax, %rcx
movq -0xf8(%rbp), %rax
cmpq %rcx, %rax
jae 0x29566
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x20800
movsd %xmm0, -0x40(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x20800
movsd %xmm0, -0x48(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x207c0
movsd %xmm0, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x207c0
movsd %xmm0, -0x58(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x207e0
movsd %xmm0, -0x60(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x207e0
movsd %xmm0, -0x68(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb10
movl %eax, -0x6c(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb10
movl %eax, -0x70(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1faf0
movl %eax, -0x74(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1faf0
movl %eax, -0x78(%rbp)
movl -0x70(%rbp), %eax
movl %eax, -0x7c(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0x80(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x207b0
movl %eax, -0x84(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x29930
movl %eax, -0x88(%rbp)
movl -0x88(%rbp), %eax
movl %eax, -0xfc(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb30
movw %ax, %cx
movl -0xfc(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0x8c(%rbp)
movl -0x88(%rbp), %eax
movl %eax, -0x90(%rbp)
movl -0x6c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x6c(%rbp)
movl -0x74(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x74(%rbp)
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
cmpl $0x0, -0x6c(%rbp)
jl 0x28b4d
cmpl $0x0, -0x74(%rbp)
jl 0x28b4d
movq -0x18(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jl 0x28b4d
movq -0x20(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jge 0x28b52
jmp 0x28ec7
movq -0x28(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0x15690
movss (%rax), %xmm0
movss %xmm0, -0x108(%rbp)
movq -0x28(%rbp), %rdi
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x15690
movss -0x108(%rbp), %xmm0
movq -0xf0(%rbp), %rcx
subss (%rax), %xmm0
movss %xmm0, -0x104(%rbp)
movq -0x30(%rbp), %rdi
movl -0x6c(%rbp), %eax
addl (%rcx), %eax
movslq %eax, %rsi
callq 0x15690
movss -0x104(%rbp), %xmm0
addss (%rax), %xmm0
movss %xmm0, -0x100(%rbp)
movq 0x18(%rbp), %rdi
movslq -0x84(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movslq -0x8c(%rbp), %rsi
callq 0x15690
movss -0x100(%rbp), %xmm0
addss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x98(%rbp)
movsd -0x98(%rbp), %xmm0
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x98(%rbp), %xmm0
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x28c48
movq -0x18(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x10c(%rbp)
jmp 0x28c61
movq -0x18(%rbp), %rdi
movslq -0x6c(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x10c(%rbp)
movl -0x10c(%rbp), %eax
movl %eax, -0x9c(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x28c9d
movq -0x20(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x110(%rbp)
jmp 0x28cb6
movq -0x20(%rbp), %rdi
movslq -0x74(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x110(%rbp)
movl -0x110(%rbp), %eax
movl %eax, -0xa0(%rbp)
movslq -0x9c(%rbp), %rcx
leaq 0x85780(%rip), %rax     # 0xae450
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movslq -0xa0(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xa4(%rbp)
cmpl $0x0, -0xa4(%rbp)
je 0x28eae
movq -0x18(%rbp), %rdi
movslq -0x70(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x28d24
movq -0x18(%rbp), %rdi
movslq -0x70(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x114(%rbp)
jmp 0x28d3d
movq -0x18(%rbp), %rdi
movslq -0x70(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x114(%rbp)
movl -0x114(%rbp), %eax
movl %eax, -0xa8(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x78(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x28d79
movq -0x20(%rbp), %rdi
movslq -0x78(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x118(%rbp)
jmp 0x28d92
movq -0x20(%rbp), %rdi
movslq -0x78(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x118(%rbp)
movq -0xf0(%rbp), %rdi
movl -0x118(%rbp), %eax
movl %eax, -0xac(%rbp)
movslq -0xa8(%rbp), %rcx
leaq 0x8569d(%rip), %rax     # 0xae450
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movslq -0xac(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xb0(%rbp)
movslq -0xb0(%rbp), %rcx
leaq 0x856e8(%rip), %rax     # 0xae4c0
movl (%rax,%rcx,4), %eax
movl %eax, -0xb0(%rbp)
movl -0xa4(%rbp), %esi
movl -0xb0(%rbp), %edx
movl -0x6c(%rbp), %ecx
movl -0x74(%rbp), %r8d
movl -0x70(%rbp), %r9d
movl -0x78(%rbp), %r11d
movq -0x18(%rbp), %r10
movq -0x20(%rbp), %rax
movl %r11d, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x29570
movq -0xf0(%rbp), %rdi
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movl -0xa4(%rbp), %esi
movl -0xb0(%rbp), %edx
movl -0x6c(%rbp), %ecx
movl -0x74(%rbp), %r8d
movl -0x70(%rbp), %r9d
movl -0x78(%rbp), %r11d
movq -0x18(%rbp), %r10
movq -0x20(%rbp), %rax
movl %r11d, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x29570
addsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x48(%rbp), %xmm1
movsd -0x40(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x28ea2
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movl -0x6c(%rbp), %eax
movl %eax, -0x7c(%rbp)
movl -0x74(%rbp), %eax
movl %eax, -0x80(%rbp)
movl -0x6c(%rbp), %eax
movl %eax, -0x70(%rbp)
movl -0x74(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0xf0(%rbp), %rcx
movl -0x7c(%rbp), %eax
subl -0x6c(%rbp), %eax
cmpl 0x4(%rcx), %eax
jl 0x28ec2
jmp 0x28ec7
jmp 0x28af6
movsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb10
movl %eax, -0x128(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb50
movw %ax, %cx
movl -0x128(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0xb4(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb10
movl %eax, -0x124(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb50
movw %ax, %cx
movl -0x124(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0xb8(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1faf0
movl %eax, -0x120(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb50
movw %ax, %cx
movl -0x120(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0xbc(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1faf0
movl %eax, -0x11c(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
callq 0x1fb50
movw %ax, %cx
movl -0x11c(%rbp), %eax
movzwl %cx, %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0xc0(%rbp)
movl -0xb8(%rbp), %eax
movl %eax, -0xc4(%rbp)
movl -0xc0(%rbp), %eax
movl %eax, -0xc8(%rbp)
movl -0xb4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb4(%rbp)
movl -0xbc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xbc(%rbp)
movl -0x88(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x88(%rbp)
movq -0x18(%rbp), %rdi
movslq -0xb4(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jl 0x29076
movq -0x20(%rbp), %rdi
movslq -0xbc(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x2, %eax
jge 0x2907b
jmp 0x2947d
movq -0x30(%rbp), %rdi
movslq -0xb4(%rbp), %rsi
callq 0x15690
movss (%rax), %xmm0
movss %xmm0, -0x134(%rbp)
movq 0x10(%rbp), %rdi
movslq -0x84(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movslq -0x88(%rbp), %rsi
callq 0x15690
movss -0x134(%rbp), %xmm0
addss (%rax), %xmm0
movss %xmm0, -0x130(%rbp)
movq 0x10(%rbp), %rdi
movslq -0x84(%rbp), %rsi
callq 0x29950
movq %rax, %rdi
movl -0x88(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x15690
movss -0x130(%rbp), %xmm0
subss (%rax), %xmm0
movss %xmm0, -0x12c(%rbp)
movq 0x18(%rbp), %rdi
movslq -0x84(%rbp), %rsi
callq 0x29950
movq -0xf0(%rbp), %rcx
movq %rax, %rdi
movl -0x88(%rbp), %eax
addl (%rcx), %eax
movslq %eax, %rsi
callq 0x15690
movss -0x12c(%rbp), %xmm0
addss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0xd0(%rbp), %xmm0
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0xd0(%rbp), %xmm0
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movq -0x18(%rbp), %rdi
movslq -0xb4(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x2919e
movq -0x18(%rbp), %rdi
movslq -0xb4(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x138(%rbp)
jmp 0x291ba
movq -0x18(%rbp), %rdi
movslq -0xb4(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x138(%rbp)
movl -0x138(%rbp), %eax
movl %eax, -0xd4(%rbp)
movq -0x20(%rbp), %rdi
movslq -0xbc(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x291fc
movq -0x20(%rbp), %rdi
movslq -0xbc(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x13c(%rbp)
jmp 0x29218
movq -0x20(%rbp), %rdi
movslq -0xbc(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x13c(%rbp)
movl -0x13c(%rbp), %eax
movl %eax, -0xd8(%rbp)
movslq -0xd4(%rbp), %rcx
leaq 0x8521e(%rip), %rax     # 0xae450
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movslq -0xd8(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xdc(%rbp)
movslq -0xdc(%rbp), %rcx
leaq 0x85269(%rip), %rax     # 0xae4c0
movl (%rax,%rcx,4), %eax
movl %eax, -0xdc(%rbp)
cmpl $0x0, -0xdc(%rbp)
je 0x2945e
movq -0x18(%rbp), %rdi
movslq -0xb8(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x292a3
movq -0x18(%rbp), %rdi
movslq -0xb8(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x140(%rbp)
jmp 0x292bf
movq -0x18(%rbp), %rdi
movslq -0xb8(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x140(%rbp)
movl -0x140(%rbp), %eax
movl %eax, -0xe0(%rbp)
movq -0x20(%rbp), %rdi
movslq -0xc0(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
cmpl $0x5, %eax
jg 0x29301
movq -0x20(%rbp), %rdi
movslq -0xc0(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x144(%rbp)
jmp 0x2931d
movq -0x20(%rbp), %rdi
movslq -0xc0(%rbp), %rsi
callq 0xbaa0
movzbl (%rax), %eax
subl $0x5, %eax
movl %eax, -0x144(%rbp)
movq -0xf0(%rbp), %rdi
movl -0x144(%rbp), %eax
movl %eax, -0xe4(%rbp)
movslq -0xe0(%rbp), %rcx
leaq 0x85112(%rip), %rax     # 0xae450
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movslq -0xe4(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xe8(%rbp)
movl -0xe8(%rbp), %esi
movl -0xdc(%rbp), %edx
movl -0xb8(%rbp), %ecx
movl -0xc0(%rbp), %r8d
movl -0xb4(%rbp), %r9d
movl -0xbc(%rbp), %r11d
movq -0x18(%rbp), %r10
movq -0x20(%rbp), %rax
movl %r11d, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x29570
movq -0xf0(%rbp), %rdi
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movl -0xe8(%rbp), %esi
movl -0xdc(%rbp), %edx
movl -0xb8(%rbp), %ecx
movl -0xc0(%rbp), %r8d
movl -0xb4(%rbp), %r9d
movl -0xbc(%rbp), %r11d
movq -0x18(%rbp), %r10
movq -0x20(%rbp), %rax
movl %r11d, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x29570
addsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x48(%rbp), %xmm1
movsd -0x40(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x29446
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movl -0xb4(%rbp), %eax
movl %eax, -0xc4(%rbp)
movl -0xbc(%rbp), %eax
movl %eax, -0xc8(%rbp)
movl -0x88(%rbp), %eax
movl %eax, -0x90(%rbp)
movl -0xb4(%rbp), %eax
movl %eax, -0xb8(%rbp)
movl -0xbc(%rbp), %eax
movl %eax, -0xc0(%rbp)
movq -0xf0(%rbp), %rcx
movl -0xb4(%rbp), %eax
subl -0xc4(%rbp), %eax
cmpl 0x4(%rcx), %eax
jl 0x29478
jmp 0x2947d
jmp 0x29019
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movl -0x90(%rbp), %esi
callq 0x29970
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movl -0x7c(%rbp), %esi
callq 0x29990
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movl -0x80(%rbp), %esi
callq 0x299b0
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movl -0xc4(%rbp), %esi
subl -0x7c(%rbp), %esi
addl $0x1, %esi
callq 0x299d0
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movl -0xc4(%rbp), %esi
subl -0x7c(%rbp), %esi
addl $0x1, %esi
callq 0x299f0
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movsd -0x40(%rbp), %xmm0
callq 0x29a10
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movsd -0x50(%rbp), %xmm0
callq 0x29a30
movq -0x10(%rbp), %rdi
movslq -0x34(%rbp), %rsi
callq 0x20680
movq %rax, %rdi
movsd -0x60(%rbp), %xmm0
callq 0x29a50
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x2894d
addq $0x160, %rsp            # imm = 0x160
popq %rbp
retq
nop