// File: mouda[P]LTE_random_access-simulate/alglibinternal.cpp
// Function: alglib_impl::linmin_mcstep(double*, double*, double*, double*, double*, double*, double*, double, double, bool*, double, double, long*, alglib_impl::ae_state*)
static void linmin_mcstep(double* stx,
     double* fx,
     double* dx,
     double* sty,
     double* fy,
     double* dy,
     double* stp,
     double fp,
     double dp,
     ae_bool* brackt,
     double stmin,
     double stmax,
     ae_int_t* info,
     ae_state *_state)
{
    ae_bool bound;
    double gamma;
    double p;
    double q;
    double r;
    double s;
    double sgnd;
    double stpc;
    double stpf;
    double stpq;
    double theta;


    *info = 0;
    
    /*
     *     CHECK THE INPUT PARAMETERS FOR ERRORS.
     */
    if( ((*brackt&&(ae_fp_less_eq(*stp,ae_minreal(*stx, *sty, _state))||ae_fp_greater_eq(*stp,ae_maxreal(*stx, *sty, _state))))||ae_fp_greater_eq(*dx*(*stp-(*stx)),0))||ae_fp_less(stmax,stmin) )
    {
        return;
    }
    
    /*
     *     DETERMINE IF THE DERIVATIVES HAVE OPPOSITE SIGN.
     */
    sgnd = dp*(*dx/ae_fabs(*dx, _state));
    
    /*
     *     FIRST CASE. A HIGHER FUNCTION VALUE.
     *     THE MINIMUM IS BRACKETED. IF THE CUBIC STEP IS CLOSER
     *     TO STX THAN THE QUADRATIC STEP, THE CUBIC STEP IS TAKEN,
     *     ELSE THE AVERAGE OF THE CUBIC AND QUADRATIC STEPS IS TAKEN.
     */
    if( ae_fp_greater(fp,*fx) )
    {
        *info = 1;
        bound = ae_true;
        theta = 3*(*fx-fp)/(*stp-(*stx))+(*dx)+dp;
        s = ae_maxreal(ae_fabs(theta, _state), ae_maxreal(ae_fabs(*dx, _state), ae_fabs(dp, _state), _state), _state);
        gamma = s*ae_sqrt(ae_sqr(theta/s, _state)-*dx/s*(dp/s), _state);
        if( ae_fp_less(*stp,*stx) )
        {
            gamma = -gamma;
        }
        p = gamma-(*dx)+theta;
        q = gamma-(*dx)+gamma+dp;
        r = p/q;
        stpc = *stx+r*(*stp-(*stx));
        stpq = *stx+*dx/((*fx-fp)/(*stp-(*stx))+(*dx))/2*(*stp-(*stx));
        if( ae_fp_less(ae_fabs(stpc-(*stx), _state),ae_fabs(stpq-(*stx), _state)) )
        {
            stpf = stpc;
        }
        else
        {
            stpf = stpc+(stpq-stpc)/2;
        }
        *brackt = ae_true;
    }
    else
    {
        if( ae_fp_less(sgnd,0) )
        {
            
            /*
             *     SECOND CASE. A LOWER FUNCTION VALUE AND DERIVATIVES OF
             *     OPPOSITE SIGN. THE MINIMUM IS BRACKETED. IF THE CUBIC
             *     STEP IS CLOSER TO STX THAN THE QUADRATIC (SECANT) STEP,
             *     THE CUBIC STEP IS TAKEN, ELSE THE QUADRATIC STEP IS TAKEN.
             */
            *info = 2;
            bound = ae_false;
            theta = 3*(*fx-fp)/(*stp-(*stx))+(*dx)+dp;
            s = ae_maxreal(ae_fabs(theta, _state), ae_maxreal(ae_fabs(*dx, _state), ae_fabs(dp, _state), _state), _state);
            gamma = s*ae_sqrt(ae_sqr(theta/s, _state)-*dx/s*(dp/s), _state);
            if( ae_fp_greater(*stp,*stx) )
            {
                gamma = -gamma;
            }
            p = gamma-dp+theta;
            q = gamma-dp+gamma+(*dx);
            r = p/q;
            stpc = *stp+r*(*stx-(*stp));
            stpq = *stp+dp/(dp-(*dx))*(*stx-(*stp));
            if( ae_fp_greater(ae_fabs(stpc-(*stp), _state),ae_fabs(stpq-(*stp), _state)) )
            {
                stpf = stpc;
            }
            else
            {
                stpf = stpq;
            }
            *brackt = ae_true;
        }
        else
        {
            if( ae_fp_less(ae_fabs(dp, _state),ae_fabs(*dx, _state)) )
            {
                
                /*
                 *     THIRD CASE. A LOWER FUNCTION VALUE, DERIVATIVES OF THE
                 *     SAME SIGN, AND THE MAGNITUDE OF THE DERIVATIVE DECREASES.
                 *     THE CUBIC STEP IS ONLY USED IF THE CUBIC TENDS TO INFINITY
                 *     IN THE DIRECTION OF THE STEP OR IF THE MINIMUM OF THE CUBIC
                 *     IS BEYOND STP. OTHERWISE THE CUBIC STEP IS DEFINED TO BE
                 *     EITHER STPMIN OR STPMAX. THE QUADRATIC (SECANT) STEP IS ALSO
                 *     COMPUTED AND IF THE MINIMUM IS BRACKETED THEN THE THE STEP
                 *     CLOSEST TO STX IS TAKEN, ELSE THE STEP FARTHEST AWAY IS TAKEN.
                 */
                *info = 3;
                bound = ae_true;
                theta = 3*(*fx-fp)/(*stp-(*stx))+(*dx)+dp;
                s = ae_maxreal(ae_fabs(theta, _state), ae_maxreal(ae_fabs(*dx, _state), ae_fabs(dp, _state), _state), _state);
                
                /*
                 *        THE CASE GAMMA = 0 ONLY ARISES IF THE CUBIC DOES NOT TEND
                 *        TO INFINITY IN THE DIRECTION OF THE STEP.
                 */
                gamma = s*ae_sqrt(ae_maxreal(0, ae_sqr(theta/s, _state)-*dx/s*(dp/s), _state), _state);
                if( ae_fp_greater(*stp,*stx) )
                {
                    gamma = -gamma;
                }
                p = gamma-dp+theta;
                q = gamma+(*dx-dp)+gamma;
                r = p/q;
                if( ae_fp_less(r,0)&&ae_fp_neq(gamma,0) )
                {
                    stpc = *stp+r*(*stx-(*stp));
                }
                else
                {
                    if( ae_fp_greater(*stp,*stx) )
                    {
                        stpc = stmax;
                    }
                    else
                    {
                        stpc = stmin;
                    }
                }
                stpq = *stp+dp/(dp-(*dx))*(*stx-(*stp));
                if( *brackt )
                {
                    if( ae_fp_less(ae_fabs(*stp-stpc, _state),ae_fabs(*stp-stpq, _state)) )
                    {
                        stpf = stpc;
                    }
                    else
                    {
                        stpf = stpq;
                    }
                }
                else
                {
                    if( ae_fp_greater(ae_fabs(*stp-stpc, _state),ae_fabs(*stp-stpq, _state)) )
                    {
                        stpf = stpc;
                    }
                    else
                    {
                        stpf = stpq;
                    }
                }
            }
            else
            {
                
                /*
                 *     FOURTH CASE. A LOWER FUNCTION VALUE, DERIVATIVES OF THE
                 *     SAME SIGN, AND THE MAGNITUDE OF THE DERIVATIVE DOES
                 *     NOT DECREASE. IF THE MINIMUM IS NOT BRACKETED, THE STEP
                 *     IS EITHER STPMIN OR STPMAX, ELSE THE CUBIC STEP IS TAKEN.
                 */
                *info = 4;
                bound = ae_false;
                if( *brackt )
                {
                    theta = 3*(fp-(*fy))/(*sty-(*stp))+(*dy)+dp;
                    s = ae_maxreal(ae_fabs(theta, _state), ae_maxreal(ae_fabs(*dy, _state), ae_fabs(dp, _state), _state), _state);
                    gamma = s*ae_sqrt(ae_sqr(theta/s, _state)-*dy/s*(dp/s), _state);
                    if( ae_fp_greater(*stp,*sty) )
                    {
                        gamma = -gamma;
                    }
                    p = gamma-dp+theta;
                    q = gamma-dp+gamma+(*dy);
                    r = p/q;
                    stpc = *stp+r*(*sty-(*stp));
                    stpf = stpc;
                }
                else
                {
                    if( ae_fp_greater(*stp,*stx) )
                    {
                        stpf = stmax;
                    }
                    else
                    {
                        stpf = stmin;
                    }
                }
            }
        }
    }
    
    /*
     *     UPDATE THE INTERVAL OF UNCERTAINTY. THIS UPDATE DOES NOT
     *     DEPEND ON THE NEW STEP OR THE CASE ANALYSIS ABOVE.
     */
    if( ae_fp_greater(fp,*fx) )
    {
        *sty = *stp;
        *fy = fp;
        *dy = dp;
    }
    else
    {
        if( ae_fp_less(sgnd,0.0) )
        {
            *sty = *stx;
            *fy = *fx;
            *dy = *dx;
        }
        *stx = *stp;
        *fx = fp;
        *dx = dp;
    }
    
    /*
     *     COMPUTE THE NEW STEP AND SAFEGUARD IT.
     */
    stpf = ae_minreal(stmax, stpf, _state);
    stpf = ae_maxreal(stmin, stpf, _state);
    *stp = stpf;
    if( *brackt&&bound )
    {
        if( ae_fp_greater(*sty,*stx) )
        {
            *stp = ae_minreal(*stx+0.66*(*sty-(*stx)), *stp, _state);
        }
        else
        {
            *stp = ae_maxreal(*stx+0.66*(*sty-(*stx)), *stp, _state);
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
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)
movsd %xmm0, -0x38(%rbp)
movsd %xmm1, -0x40(%rbp)
movsd %xmm2, -0x48(%rbp)
movsd %xmm3, -0x50(%rbp)
movq 0x20(%rbp), %rax
movq $0x0, (%rax)
movq 0x18(%rbp), %rax
testb $0x1, (%rax)
je 0x32585
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
movq -0x8(%rbp), %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm1
movq 0x28(%rbp), %rdi
callq 0x3cab0
movaps %xmm0, %xmm1
movsd -0xb0(%rbp), %xmm0
callq 0x3c480
testb $0x1, %al
jne 0x325c2
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xb8(%rbp)
movq -0x8(%rbp), %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm1
movq 0x28(%rbp), %rdi
callq 0x3ca70
movaps %xmm0, %xmm1
movsd -0xb8(%rbp), %xmm0
callq 0x3c500
testb $0x1, %al
jne 0x325c2
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movq -0x8(%rbp), %rax
subsd (%rax), %xmm1
mulsd %xmm1, %xmm0
xorps %xmm1, %xmm1
callq 0x3c500
testb $0x1, %al
jne 0x325c2
movsd -0x50(%rbp), %xmm0
movsd -0x48(%rbp), %xmm1
callq 0x3c440
testb $0x1, %al
jne 0x325c2
jmp 0x325c7
jmp 0x33392
movsd -0x40(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xc8(%rbp)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd -0xc8(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0xc0(%rbp), %xmm0
divsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x38(%rbp), %xmm0
movq -0x10(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x32633
jmp 0x3291f
movq 0x20(%rbp), %rax
movq $0x1, (%rax)
movb $0x1, -0x51(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm1
subsd -0x38(%rbp), %xmm1
movsd 0x22b59(%rip), %xmm0    # 0x551b0
mulsd %xmm1, %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movq -0x8(%rbp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq -0x18(%rbp), %rax
addsd (%rax), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0xa8(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0xd8(%rbp)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0xe0(%rbp)
movsd -0x40(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0xe0(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movaps %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0xa8(%rbp), %xmm0
divsd -0x80(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c870
movaps %xmm0, %xmm1
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x80(%rbp), %xmm0
movsd -0x40(%rbp), %xmm2
divsd -0x80(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c890
movaps %xmm0, %xmm1
movsd -0xd0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c440
testb $0x1, %al
jne 0x32785
jmp 0x327a6
movsd -0x60(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
movq -0x18(%rbp), %rax
subsd (%rax), %xmm0
addsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x60(%rbp), %xmm0
movq -0x18(%rbp), %rax
subsd (%rax), %xmm0
addsd -0x60(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x68(%rbp), %xmm0
divsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
movsd -0x78(%rbp), %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm2
movq -0x8(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq -0x10(%rbp), %rax
movsd (%rax), %xmm2
subsd -0x38(%rbp), %xmm2
movq 0x10(%rbp), %rax
movsd (%rax), %xmm3
movq -0x8(%rbp), %rax
subsd (%rax), %xmm3
divsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
addsd (%rax), %xmm2
divsd %xmm2, %xmm0
movsd 0x22b6b(%rip), %xmm2    # 0x553c8
divsd %xmm2, %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm2
movq -0x8(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x90(%rbp), %xmm0
movq -0x8(%rbp), %rax
subsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0xe8(%rbp)
movsd -0xa0(%rbp), %xmm0
movq -0x8(%rbp), %rax
subsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0xe8(%rbp), %xmm0
callq 0x3c440
testb $0x1, %al
jne 0x328d1
jmp 0x328e3
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x32913
movsd -0x90(%rbp), %xmm0
movsd -0xa0(%rbp), %xmm1
subsd -0x90(%rbp), %xmm1
movsd 0x22ac5(%rip), %xmm2    # 0x553c8
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x98(%rbp)
movq 0x18(%rbp), %rax
movb $0x1, (%rax)
jmp 0x331da
movsd -0x88(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c440
testb $0x1, %al
jne 0x32938
jmp 0x32bd6
movq 0x20(%rbp), %rax
movq $0x2, (%rax)
movb $0x0, -0x51(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm1
subsd -0x38(%rbp), %xmm1
movsd 0x22854(%rip), %xmm0    # 0x551b0
mulsd %xmm1, %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movq -0x8(%rbp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq -0x18(%rbp), %rax
addsd (%rax), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0xa8(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0xf8(%rbp)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x100(%rbp)
movsd -0x40(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x100(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movaps %xmm0, %xmm1
movsd -0xf8(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0xf0(%rbp)
movsd -0xa8(%rbp), %xmm0
divsd -0x80(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c870
movaps %xmm0, %xmm1
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x80(%rbp), %xmm0
movsd -0x40(%rbp), %xmm2
divsd -0x80(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c890
movaps %xmm0, %xmm1
movsd -0xf0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x32a8a
jmp 0x32aab
movsd -0x60(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
addsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
addsd -0x60(%rbp), %xmm0
movq -0x18(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x68(%rbp), %xmm0
divsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movsd -0x78(%rbp), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm2
movq 0x10(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movsd -0x40(%rbp), %xmm0
movsd -0x40(%rbp), %xmm2
movq -0x18(%rbp), %rax
subsd (%rax), %xmm2
divsd %xmm2, %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm2
movq 0x10(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x90(%rbp), %xmm0
movq 0x10(%rbp), %rax
subsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x108(%rbp)
movsd -0xa0(%rbp), %xmm0
movq 0x10(%rbp), %rax
subsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x108(%rbp), %xmm0
callq 0x3c4c0
testb $0x1, %al
jne 0x32ba8
jmp 0x32bba
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x32bca
movsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
movq 0x18(%rbp), %rax
movb $0x1, (%rax)
jmp 0x331d8
movsd -0x40(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x110(%rbp)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x110(%rbp), %xmm0
callq 0x3c440
testb $0x1, %al
jne 0x32c16
jmp 0x32f9a
movq 0x20(%rbp), %rax
movq $0x3, (%rax)
movb $0x1, -0x51(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm1
subsd -0x38(%rbp), %xmm1
movsd 0x22576(%rip), %xmm0    # 0x551b0
mulsd %xmm1, %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movq -0x8(%rbp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq -0x18(%rbp), %rax
addsd (%rax), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0xa8(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x120(%rbp)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x128(%rbp)
movsd -0x40(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x128(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movaps %xmm0, %xmm1
movsd -0x120(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x118(%rbp)
movsd -0xa8(%rbp), %xmm0
divsd -0x80(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c870
movq -0x18(%rbp), %rax
movsd (%rax), %xmm1
divsd -0x80(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
divsd -0x80(%rbp), %xmm2
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x28(%rbp), %rdi
xorps %xmm0, %xmm0
callq 0x3ca70
movq 0x28(%rbp), %rdi
callq 0x3c890
movaps %xmm0, %xmm1
movsd -0x118(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x32d71
jmp 0x32d92
movsd -0x60(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
addsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x60(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd (%rax), %xmm1
subsd -0x40(%rbp), %xmm1
addsd %xmm1, %xmm0
addsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x68(%rbp), %xmm0
divsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c440
testb $0x1, %al
jne 0x32deb
jmp 0x32e2d
movsd -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c410
testb $0x1, %al
jne 0x32dfe
jmp 0x32e2d
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movsd -0x78(%rbp), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm2
movq 0x10(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0x32e66
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x32e48
jmp 0x32e57
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0x32e64
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0x32e66
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movsd -0x40(%rbp), %xmm0
movsd -0x40(%rbp), %xmm2
movq -0x18(%rbp), %rax
subsd (%rax), %xmm2
divsd %xmm2, %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm2
movq 0x10(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movq 0x18(%rbp), %rax
testb $0x1, (%rax)
je 0x32f21
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
subsd -0x90(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x130(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
subsd -0xa0(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x130(%rbp), %xmm0
callq 0x3c440
testb $0x1, %al
jne 0x32efd
jmp 0x32f0f
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x32f1f
movsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x32f95
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
subsd -0x90(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x138(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
subsd -0xa0(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x138(%rbp), %xmm0
callq 0x3c4c0
testb $0x1, %al
jne 0x32f71
jmp 0x32f83
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x32f93
movsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x32f95
jmp 0x331d6
movq 0x20(%rbp), %rax
movq $0x4, (%rax)
movb $0x0, -0x51(%rbp)
movq 0x18(%rbp), %rax
testb $0x1, (%rax)
je 0x3319b
movsd -0x38(%rbp), %xmm1
movq -0x28(%rbp), %rax
subsd (%rax), %xmm1
movsd 0x221e5(%rip), %xmm0    # 0x551b0
mulsd %xmm1, %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm1
movq 0x10(%rbp), %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
addsd (%rax), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0xa8(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x148(%rbp)
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movsd %xmm0, -0x150(%rbp)
movsd -0x40(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x150(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movaps %xmm0, %xmm1
movsd -0x148(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3ca70
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x140(%rbp)
movsd -0xa8(%rbp), %xmm0
divsd -0x80(%rbp), %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c870
movaps %xmm0, %xmm1
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
divsd -0x80(%rbp), %xmm0
movsd -0x40(%rbp), %xmm2
divsd -0x80(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x28(%rbp), %rdi
callq 0x3c890
movaps %xmm0, %xmm1
movsd -0x140(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x330f9
jmp 0x3311a
movsd -0x60(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
addsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
addsd -0x60(%rbp), %xmm0
movq -0x30(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x68(%rbp), %xmm0
divsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movsd -0x78(%rbp), %xmm0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm2
movq 0x10(%rbp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x331d4
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x331b6
jmp 0x331c5
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x331d2
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x331d4
jmp 0x331d6
jmp 0x331d8
jmp 0x331da
movsd -0x38(%rbp), %xmm0
movq -0x10(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x331f2
jmp 0x3321e
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x38(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x40(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x3328e
movsd -0x88(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c440
testb $0x1, %al
jne 0x33234
jmp 0x33264
movq -0x8(%rbp), %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq 0x10(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x38(%rbp), %xmm0
movq -0x10(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x40(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x50(%rbp), %xmm0
movsd -0x98(%rbp), %xmm1
movq 0x28(%rbp), %rdi
callq 0x3cab0
movsd %xmm0, -0x98(%rbp)
movsd -0x48(%rbp), %xmm0
movsd -0x98(%rbp), %xmm1
movq 0x28(%rbp), %rdi
callq 0x3ca70
movsd %xmm0, -0x98(%rbp)
movsd -0x98(%rbp), %xmm0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
movq 0x18(%rbp), %rax
testb $0x1, (%rax)
je 0x33392
testb $0x1, -0x51(%rbp)
je 0x33392
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x3330c
jmp 0x3334f
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
subsd (%rax), %xmm0
movsd 0x2454c(%rip), %xmm2    # 0x57878
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movq 0x28(%rbp), %rdi
callq 0x3cab0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x33390
movq -0x8(%rbp), %rax
movsd (%rax), %xmm1
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
subsd (%rax), %xmm0
movsd 0x24509(%rip), %xmm2    # 0x57878
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movq 0x28(%rbp), %rdi
callq 0x3ca70
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x33392
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
nopl (%rax,%rax)