// File: /workspace/github_c_makefile_star2_O0/PoulinV[P]AxiCLASS/build/../source/thermodynamics.c
// Function: thermodynamics_calculate_idm_and_idr_quantities
int thermodynamics_calculate_idm_and_idr_quantities(struct precision* ppr,
                                                    struct background * pba,
                                                    struct thermodynamics * pth,
                                                    double* pvecback){

  /** Summary: **/

  /** - Define local variables **/
  int index_tau_fs;
  int index_tau;

  /** - Calculate optical functions tau_idm_dr, tau_idr, g_idm_dr */
  if (pth->has_idm_dr == _TRUE_) {
    /* - second derivative of idm_dr interaction rate (with idr), [Sinv*dmu_idm_dr]'', stored temporarily in column dddmu */
    class_call(array_spline_table_line_to_line(pth->tau_table,
                                               pth->tt_size,
                                               pth->thermodynamics_table,
                                               pth->th_size,
                                               pth->index_th_ddmu_idm_dr,
                                               pth->index_th_dddmu_idm_dr,
                                               _SPLINE_EST_DERIV_,
                                               pth->error_message),
               pth->error_message,
               pth->error_message);

    /* - compute optical depth of idm, tau_idm_dr = [int_{tau_today}^{tau} dtau [Sinv*dmu_idm_dr] ].*/
    /*    This step gives -tau_idm_dr. The resulty is mutiplied by -1 later on. */
    class_call(array_integrate_spline_table_line_to_line(pth->tau_table,
                                                         pth->tt_size,
                                                         pth->thermodynamics_table,
                                                         pth->th_size,
                                                         pth->index_th_ddmu_idm_dr,
                                                         pth->index_th_dddmu_idm_dr,
                                                         pth->index_th_tau_idm_dr,
                                                         pth->error_message),
               pth->error_message,
               pth->error_message);

    /* - second derivative of idr interaction rate (with idm_dr), [dmu_idm_idr]'', stored temporarily in column dddmu */
    class_call(array_spline_table_line_to_line(pth->tau_table,
                                               pth->tt_size,
                                               pth->thermodynamics_table,
                                               pth->th_size,
                                               pth->index_th_dmu_idm_dr,
                                               pth->index_th_dddmu_idm_dr,
                                               _SPLINE_EST_DERIV_,
                                               pth->error_message),
               pth->error_message,
               pth->error_message);

    /* - compute optical depth of idr, tau_idr = [int_{tau_today}^{tau} dtau [dmu_idm_idr] ]. */
    /*   This step gives -tau_idr. The resulty is mutiplied by -1 later on. */
    class_call(array_integrate_spline_table_line_to_line(pth->tau_table,
                                                         pth->tt_size,
                                                         pth->thermodynamics_table,
                                                         pth->th_size,
                                                         pth->index_th_dmu_idm_dr,
                                                         pth->index_th_dddmu_idm_dr,
                                                         pth->index_th_tau_idr,
                                                         pth->error_message),
               pth->error_message,
               pth->error_message);


    /* - restore correct sign for idm_dr and idr optical depth, and calculate idm_dr visibility function */
    /* loop on z (decreasing z, increasing time) */

    for (index_tau=pth->tt_size-1; index_tau>=0; index_tau--) {
      /* - --> restore the correct sign for tau_idm_dr */
      pth->thermodynamics_table[index_tau*pth->th_size+pth->index_th_tau_idm_dr] *= -1.;

      /* - --> restore the correct sign for tau_idr */
      pth->thermodynamics_table[index_tau*pth->th_size+pth->index_th_tau_idr] *= -1.;

      /* - --> visibility function for idm_dr : g_idm_dr = [Sinv*dmu_idm_dr] * exp(-tau_idm_dr) */
      pth->thermodynamics_table[index_tau*pth->th_size+pth->index_th_g_idm_dr] =
        pth->thermodynamics_table[index_tau*pth->th_size+pth->index_th_ddmu_idm_dr]
        * exp(-pth->thermodynamics_table[index_tau*pth->th_size+pth->index_th_tau_idm_dr]);
    }

    /* - fill columns for ddmu_idm_dr and dddmu_idm_dr with true values, and compute idm_dr temperature and sound speed */
    /* - --> second derivative with respect to tau of dmu_idm_dr (in view of spline interpolation) */
    class_call(array_spline_table_line_to_line(pth->tau_table,
                                               pth->tt_size,
                                               pth->thermodynamics_table,
                                               pth->th_size,
                                               pth->index_th_dmu_idm_dr,
                                               pth->index_th_dddmu_idm_dr,
                                               _SPLINE_EST_DERIV_,
                                               pth->error_message),
               pth->error_message,
               pth->error_message);

    /* - --> first derivative with respect to tau of dmu_idm_dr (using spline interpolation) */
    class_call(array_spline_table_line_to_line(pth->tau_table,
                                               pth->tt_size,
                                               pth->thermodynamics_table,
                                               pth->th_size,
                                               pth->index_th_dmu_idm_dr,
                                               pth->index_th_dddmu_idm_dr,
                                               _SPLINE_EST_DERIV_,
                                               pth->error_message),
               pth->error_message,
               pth->error_message);

    /* - --> first derivative with respect to tau of dmu_idm_dr (using spline interpolation) */
    class_call(array_derive_spline_table_line_to_line(pth->tau_table,
                                                      pth->tt_size,
                                                      pth->thermodynamics_table,
                                                      pth->th_size,
                                                      pth->index_th_dmu_idm_dr,
                                                      pth->index_th_dddmu_idm_dr,
                                                      pth->index_th_ddmu_idm_dr,
                                                      pth->error_message),
               pth->error_message,
               pth->error_message);

  }

  /** - Find interacting dark radiation free-streaming time */
  /* First, find index of recombination, or free streaming for ordinary radiation */
  index_tau = pth->tt_size - 1;
  while(1./pth->thermodynamics_table[(index_tau)*pth->th_size+pth->index_th_dkappa]/pth->tau_table[index_tau] < ppr->radiation_streaming_trigger_tau_c_over_tau && index_tau > 0)
    index_tau--;
  index_tau_fs = index_tau;

  /** - Search after the above free-streaming time for idr free-streaming as well */
  if (pth->has_idm_dr == _TRUE_) {

    if (pth->n_index_idm_dr>=2) {
      index_tau=index_tau_fs-1;
      while ((1./pth->thermodynamics_table[(index_tau)*pth->th_size+pth->index_th_dmu_idm_dr]/pth->tau_table[index_tau]
              < ppr->idr_streaming_trigger_tau_c_over_tau) && index_tau > 0)
        index_tau--;
    }
    else {
      index_tau=0;
      while ((1./pth->thermodynamics_table[(index_tau)*pth->th_size+pth->index_th_dmu_idm_dr]/pth->tau_table[index_tau]
              < ppr->idr_streaming_trigger_tau_c_over_tau) && index_tau < pth->tt_size-1)
        index_tau++;
    }

    /* tau_idm_dr_fs = tau; */
    pth->tau_idr_free_streaming = pth->tau_table[index_tau];
  }
  /* case of idr alone without idm_dr: Set idr free streaming simply to normal free-streaming */
  else {
    index_tau= (index_tau_fs > 0 ? index_tau_fs - 1: 0);
    pth->tau_idr_free_streaming = pth->tau_table[index_tau];
  }

  if (pth->has_idm_b == _TRUE_) {
    /** - --> second derivative with respect to tau of R_idm_b (in view of spline interpolation) */
    class_call(array_spline_table_line_to_line(pth->tau_table,
                                               pth->tt_size,
                                               pth->thermodynamics_table,
                                               pth->th_size,
                                               pth->index_th_R_idm_b,
                                               pth->index_th_ddR_idm_b,
                                               _SPLINE_EST_DERIV_,
                                               pth->error_message),
               pth->error_message,
               pth->error_message);

    /** - --> first derivative with respect to tau of R_idm_b (using spline interpolation) */
    class_call(array_derive_spline_table_line_to_line(pth->tau_table,
                                                      pth->tt_size,
                                                      pth->thermodynamics_table,
                                                      pth->th_size,
                                                      pth->index_th_R_idm_b,
                                                      pth->index_th_ddR_idm_b,
                                                      pth->index_th_dR_idm_b,
                                                      pth->error_message),
               pth->error_message,
               pth->error_message);
  }

  return _SUCCESS_;

}

// Assembly:
subq $0x4858, %rsp           # imm = 0x4858
movq %rdi, 0x4848(%rsp)
movq %rsi, 0x4840(%rsp)
movq %rdx, 0x4838(%rsp)
movq %rcx, 0x4830(%rsp)
movq 0x4838(%rsp), %rax
movswl 0x38(%rax), %eax
cmpl $0x1, %eax
jne 0xc216d
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xeb0(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xeb4(%rax), %r9d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl $0x1, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1c1c0
cmpl $0x1, %eax
jne 0xc1a25
leaq 0x4020(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x110a02(%rip), %rsi    # 0x1d23d8
leaq 0x133714(%rip), %rdx    # 0x1f50f1
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x4020(%rsp), %r8
leaq 0x110632(%rip), %rsi    # 0x1d2034
leaq 0x13379d(%rip), %rdx    # 0x1f51a6
movl $0xdf7, %ecx            # imm = 0xDF7
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xeb0(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xeb4(%rax), %r9d
movq 0x4838(%rsp), %rax
movl 0xebc(%rax), %r10d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1ac60
cmpl $0x1, %eax
jne 0xc1b1a
leaq 0x3820(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x11090d(%rip), %rsi    # 0x1d23d8
leaq 0x133704(%rip), %rdx    # 0x1f51d6
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x3820(%rsp), %r8
leaq 0x11053d(%rip), %rsi    # 0x1d2034
leaq 0x1336a8(%rip), %rdx    # 0x1f51a6
movl $0xe04, %ecx            # imm = 0xE04
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xeac(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xeb4(%rax), %r9d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl $0x1, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1c1c0
cmpl $0x1, %eax
jne 0xc1c03
leaq 0x3020(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x110824(%rip), %rsi    # 0x1d23d8
leaq 0x1336f1(%rip), %rdx    # 0x1f52ac
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x3020(%rsp), %r8
leaq 0x110454(%rip), %rsi    # 0x1d2034
leaq 0x1335bf(%rip), %rdx    # 0x1f51a6
movl $0xe10, %ecx            # imm = 0xE10
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xeac(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xeb4(%rax), %r9d
movq 0x4838(%rsp), %rax
movl 0xec0(%rax), %r10d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1ac60
cmpl $0x1, %eax
jne 0xc1cf8
leaq 0x2820(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x11072f(%rip), %rsi    # 0x1d23d8
leaq 0x1336b0(%rip), %rdx    # 0x1f5360
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x2820(%rsp), %r8
leaq 0x11035f(%rip), %rsi    # 0x1d2034
leaq 0x1334ca(%rip), %rdx    # 0x1f51a6
movl $0xe1d, %ecx            # imm = 0xE1D
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %eax
subl $0x1, %eax
movl %eax, 0x4828(%rsp)
cmpl $0x0, 0x4828(%rsp)
jl 0xc1ea4
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xebc(%rdx), %ecx
movslq %ecx, %rcx
movsd 0x110a74(%rip), %xmm0   # 0x1d27d0
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xec0(%rdx), %ecx
movslq %ecx, %rcx
movsd 0x110a2c(%rip), %xmm0   # 0x1d27d0
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xeb0(%rdx), %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x18(%rsp)
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xebc(%rdx), %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
callq 0x8670
movaps %xmm0, %xmm1
movsd 0x18(%rsp), %xmm0
mulsd %xmm1, %xmm0
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xec4(%rdx), %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x4828(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x4828(%rsp)
jmp 0xc1d10
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xeac(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xeb4(%rax), %r9d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl $0x1, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1c1c0
cmpl $0x1, %eax
jne 0xc1f8d
leaq 0x2020(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x11049a(%rip), %rsi    # 0x1d23d8
leaq 0x133367(%rip), %rdx    # 0x1f52ac
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x2020(%rsp), %r8
leaq 0x1100ca(%rip), %rsi    # 0x1d2034
leaq 0x133235(%rip), %rdx    # 0x1f51a6
movl $0xe3b, %ecx            # imm = 0xE3B
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xeac(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xeb4(%rax), %r9d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl $0x1, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1c1c0
cmpl $0x1, %eax
jne 0xc2076
leaq 0x1820(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x1103b1(%rip), %rsi    # 0x1d23d8
leaq 0x13327e(%rip), %rdx    # 0x1f52ac
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x1820(%rsp), %r8
leaq 0x10ffe1(%rip), %rsi    # 0x1d2034
leaq 0x13314c(%rip), %rdx    # 0x1f51a6
movl $0xe47, %ecx            # imm = 0xE47
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xeac(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xeb4(%rax), %r9d
movq 0x4838(%rsp), %rax
movl 0xeb0(%rax), %r10d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x19c50
cmpl $0x1, %eax
jne 0xc216b
leaq 0x1020(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x1102bc(%rip), %rsi    # 0x1d23d8
leaq 0x13330f(%rip), %rdx    # 0x1f5432
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x1020(%rsp), %r8
leaq 0x10feec(%rip), %rsi    # 0x1d2034
leaq 0x133057(%rip), %rdx    # 0x1f51a6
movl $0xe53, %ecx            # imm = 0xE53
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
jmp 0xc216d
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %eax
subl $0x1, %eax
movl %eax, 0x4828(%rsp)
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xe80(%rdx), %ecx
movslq %ecx, %rcx
movsd 0x110085(%rip), %xmm1   # 0x1d2248
divsd (%rax,%rcx,8), %xmm1
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rax
movslq 0x4828(%rsp), %rcx
divsd (%rax,%rcx,8), %xmm1
movq 0x4848(%rsp), %rax
movsd 0x630(%rax), %xmm0
xorl %eax, %eax
ucomisd %xmm1, %xmm0
movb %al, 0x17(%rsp)
jbe 0xc220f
cmpl $0x0, 0x4828(%rsp)
setg %al
movb %al, 0x17(%rsp)
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0xc2219
jmp 0xc222f
movl 0x4828(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x4828(%rsp)
jmp 0xc2185
movl 0x4828(%rsp), %eax
movl %eax, 0x482c(%rsp)
movq 0x4838(%rsp), %rax
movswl 0x38(%rax), %eax
cmpl $0x1, %eax
jne 0xc242b
movq 0x4838(%rsp), %rax
movsd 0x1028(%rax), %xmm0
movsd 0x110a16(%rip), %xmm1   # 0x1d2c80
ucomisd %xmm1, %xmm0
jb 0xc2334
movl 0x482c(%rsp), %eax
subl $0x1, %eax
movl %eax, 0x4828(%rsp)
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xeac(%rdx), %ecx
movslq %ecx, %rcx
movsd 0x10ff85(%rip), %xmm1   # 0x1d2248
divsd (%rax,%rcx,8), %xmm1
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rax
movslq 0x4828(%rsp), %rcx
divsd (%rax,%rcx,8), %xmm1
movq 0x4848(%rsp), %rax
movsd 0x648(%rax), %xmm0
xorl %eax, %eax
ucomisd %xmm1, %xmm0
movb %al, 0x16(%rsp)
jbe 0xc230f
cmpl $0x0, 0x4828(%rsp)
setg %al
movb %al, 0x16(%rsp)
movb 0x16(%rsp), %al
testb $0x1, %al
jne 0xc2319
jmp 0xc232f
movl 0x4828(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x4828(%rsp)
jmp 0xc2285
jmp 0xc23fd
movl $0x0, 0x4828(%rsp)
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rax
movl 0x4828(%rsp), %ecx
movq 0x4838(%rsp), %rdx
imull 0xf04(%rdx), %ecx
movq 0x4838(%rsp), %rdx
addl 0xeac(%rdx), %ecx
movslq %ecx, %rcx
movsd 0x10fecb(%rip), %xmm1   # 0x1d2248
divsd (%rax,%rcx,8), %xmm1
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rax
movslq 0x4828(%rsp), %rcx
divsd (%rax,%rcx,8), %xmm1
movq 0x4848(%rsp), %rax
movsd 0x648(%rax), %xmm0
xorl %eax, %eax
ucomisd %xmm1, %xmm0
movb %al, 0x15(%rsp)
jbe 0xc23db
movl 0x4828(%rsp), %eax
movq 0x4838(%rsp), %rcx
movl 0xf08(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
setl %al
movb %al, 0x15(%rsp)
movb 0x15(%rsp), %al
testb $0x1, %al
jne 0xc23e5
jmp 0xc23fb
movl 0x4828(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4828(%rsp)
jmp 0xc233f
jmp 0xc23fd
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rax
movslq 0x4828(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq 0x4838(%rsp), %rax
movsd %xmm0, 0xfe0(%rax)
jmp 0xc2484
cmpl $0x0, 0x482c(%rsp)
jle 0xc2445
movl 0x482c(%rsp), %eax
subl $0x1, %eax
movl %eax, 0x10(%rsp)
jmp 0xc244d
xorl %eax, %eax
movl %eax, 0x10(%rsp)
jmp 0xc244d
movl 0x10(%rsp), %eax
movl %eax, 0x4828(%rsp)
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rax
movslq 0x4828(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq 0x4838(%rsp), %rax
movsd %xmm0, 0xfe0(%rax)
movq 0x4838(%rsp), %rax
movswl 0x34(%rax), %eax
cmpl $0x1, %eax
jne 0xc2670
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xed8(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xee0(%rax), %r9d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl $0x1, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1c1c0
cmpl $0x1, %eax
jne 0xc2582
leaq 0x820(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x10fea5(%rip), %rsi    # 0x1d23d8
leaq 0x132fcb(%rip), %rdx    # 0x1f5505
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x820(%rsp), %r8
leaq 0x10fad5(%rip), %rsi    # 0x1d2034
leaq 0x132c40(%rip), %rdx    # 0x1f51a6
movl $0xe82, %ecx            # imm = 0xE82
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
movq 0x4838(%rsp), %rax
movq 0xf18(%rax), %rdi
movq 0x4838(%rsp), %rax
movl 0xf08(%rax), %esi
movq 0x4838(%rsp), %rax
movq 0xf20(%rax), %rdx
movq 0x4838(%rsp), %rax
movl 0xf04(%rax), %ecx
movq 0x4838(%rsp), %rax
movl 0xed8(%rax), %r8d
movq 0x4838(%rsp), %rax
movl 0xee0(%rax), %r9d
movq 0x4838(%rsp), %rax
movl 0xedc(%rax), %r10d
movq 0x4838(%rsp), %rax
addq $0x1064, %rax           # imm = 0x1064
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x19c50
cmpl $0x1, %eax
jne 0xc266e
leaq 0x20(%rsp), %rdi
movq 0x4838(%rsp), %rcx
addq $0x1064, %rcx           # imm = 0x1064
leaq 0x10fdb3(%rip), %rsi    # 0x1d23d8
leaq 0x132f87(%rip), %rdx    # 0x1f55b3
movb $0x0, %al
callq 0x5b9c0
movq 0x4838(%rsp), %rdi
addq $0x1064, %rdi           # imm = 0x1064
leaq 0x20(%rsp), %r8
leaq 0x10f9e6(%rip), %rsi    # 0x1d2034
leaq 0x132b51(%rip), %rdx    # 0x1f51a6
movl $0xe8e, %ecx            # imm = 0xE8E
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x4854(%rsp)
jmp 0xc267b
jmp 0xc2670
movl $0x0, 0x4854(%rsp)
movl 0x4854(%rsp), %eax
addq $0x4858, %rsp           # imm = 0x4858
retq
nopw (%rax,%rax)