// File: mouda[P]LTE_random_access-simulate/alglibinternal.cpp
// Function: alglib_impl::rmatrixscaledtrsafesolve(alglib_impl::ae_matrix*, double, long, alglib_impl::ae_vector*, bool, long, bool, double, alglib_impl::ae_state*)
ae_bool rmatrixscaledtrsafesolve(/* Real    */ ae_matrix* a,
     double sa,
     ae_int_t n,
     /* Real    */ ae_vector* x,
     ae_bool isupper,
     ae_int_t trans,
     ae_bool isunit,
     double maxgrowth,
     ae_state *_state)
{
    ae_frame _frame_block;
    double lnmax;
    double nrmb;
    double nrmx;
    ae_int_t i;
    ae_complex alpha;
    ae_complex beta;
    double vr;
    ae_complex cx;
    ae_vector tmp;
    ae_bool result;

    ae_frame_make(_state, &_frame_block);
    ae_vector_init(&tmp, 0, DT_REAL, _state, ae_true);

    ae_assert(n>0, "RMatrixTRSafeSolve: incorrect N!", _state);
    ae_assert(trans==0||trans==1, "RMatrixTRSafeSolve: incorrect Trans!", _state);
    result = ae_true;
    lnmax = ae_log(ae_maxrealnumber, _state);
    
    /*
     * Quick return if possible
     */
    if( n<=0 )
    {
        ae_frame_leave(_state);
        return result;
    }
    
    /*
     * Load norms: right part and X
     */
    nrmb = 0;
    for(i=0; i<=n-1; i++)
    {
        nrmb = ae_maxreal(nrmb, ae_fabs(x->ptr.p_double[i], _state), _state);
    }
    nrmx = 0;
    
    /*
     * Solve
     */
    ae_vector_set_length(&tmp, n, _state);
    result = ae_true;
    if( isupper&&trans==0 )
    {
        
        /*
         * U*x = b
         */
        for(i=n-1; i>=0; i--)
        {
            
            /*
             * Task is reduced to alpha*x[i] = beta
             */
            if( isunit )
            {
                alpha = ae_complex_from_d(sa);
            }
            else
            {
                alpha = ae_complex_from_d(a->ptr.pp_double[i][i]*sa);
            }
            if( i<n-1 )
            {
                ae_v_moved(&tmp.ptr.p_double[i+1], 1, &a->ptr.pp_double[i][i+1], 1, ae_v_len(i+1,n-1), sa);
                vr = ae_v_dotproduct(&tmp.ptr.p_double[i+1], 1, &x->ptr.p_double[i+1], 1, ae_v_len(i+1,n-1));
                beta = ae_complex_from_d(x->ptr.p_double[i]-vr);
            }
            else
            {
                beta = ae_complex_from_d(x->ptr.p_double[i]);
            }
            
            /*
             * solve alpha*x[i] = beta
             */
            result = safesolve_cbasicsolveandupdate(alpha, beta, lnmax, nrmb, maxgrowth, &nrmx, &cx, _state);
            if( !result )
            {
                ae_frame_leave(_state);
                return result;
            }
            x->ptr.p_double[i] = cx.x;
        }
        ae_frame_leave(_state);
        return result;
    }
    if( !isupper&&trans==0 )
    {
        
        /*
         * L*x = b
         */
        for(i=0; i<=n-1; i++)
        {
            
            /*
             * Task is reduced to alpha*x[i] = beta
             */
            if( isunit )
            {
                alpha = ae_complex_from_d(sa);
            }
            else
            {
                alpha = ae_complex_from_d(a->ptr.pp_double[i][i]*sa);
            }
            if( i>0 )
            {
                ae_v_moved(&tmp.ptr.p_double[0], 1, &a->ptr.pp_double[i][0], 1, ae_v_len(0,i-1), sa);
                vr = ae_v_dotproduct(&tmp.ptr.p_double[0], 1, &x->ptr.p_double[0], 1, ae_v_len(0,i-1));
                beta = ae_complex_from_d(x->ptr.p_double[i]-vr);
            }
            else
            {
                beta = ae_complex_from_d(x->ptr.p_double[i]);
            }
            
            /*
             * solve alpha*x[i] = beta
             */
            result = safesolve_cbasicsolveandupdate(alpha, beta, lnmax, nrmb, maxgrowth, &nrmx, &cx, _state);
            if( !result )
            {
                ae_frame_leave(_state);
                return result;
            }
            x->ptr.p_double[i] = cx.x;
        }
        ae_frame_leave(_state);
        return result;
    }
    if( isupper&&trans==1 )
    {
        
        /*
         * U^T*x = b
         */
        for(i=0; i<=n-1; i++)
        {
            
            /*
             * Task is reduced to alpha*x[i] = beta
             */
            if( isunit )
            {
                alpha = ae_complex_from_d(sa);
            }
            else
            {
                alpha = ae_complex_from_d(a->ptr.pp_double[i][i]*sa);
            }
            beta = ae_complex_from_d(x->ptr.p_double[i]);
            
            /*
             * solve alpha*x[i] = beta
             */
            result = safesolve_cbasicsolveandupdate(alpha, beta, lnmax, nrmb, maxgrowth, &nrmx, &cx, _state);
            if( !result )
            {
                ae_frame_leave(_state);
                return result;
            }
            x->ptr.p_double[i] = cx.x;
            
            /*
             * update the rest of right part
             */
            if( i<n-1 )
            {
                vr = cx.x;
                ae_v_moved(&tmp.ptr.p_double[i+1], 1, &a->ptr.pp_double[i][i+1], 1, ae_v_len(i+1,n-1), sa);
                ae_v_subd(&x->ptr.p_double[i+1], 1, &tmp.ptr.p_double[i+1], 1, ae_v_len(i+1,n-1), vr);
            }
        }
        ae_frame_leave(_state);
        return result;
    }
    if( !isupper&&trans==1 )
    {
        
        /*
         * L^T*x = b
         */
        for(i=n-1; i>=0; i--)
        {
            
            /*
             * Task is reduced to alpha*x[i] = beta
             */
            if( isunit )
            {
                alpha = ae_complex_from_d(sa);
            }
            else
            {
                alpha = ae_complex_from_d(a->ptr.pp_double[i][i]*sa);
            }
            beta = ae_complex_from_d(x->ptr.p_double[i]);
            
            /*
             * solve alpha*x[i] = beta
             */
            result = safesolve_cbasicsolveandupdate(alpha, beta, lnmax, nrmb, maxgrowth, &nrmx, &cx, _state);
            if( !result )
            {
                ae_frame_leave(_state);
                return result;
            }
            x->ptr.p_double[i] = cx.x;
            
            /*
             * update the rest of right part
             */
            if( i>0 )
            {
                vr = cx.x;
                ae_v_moved(&tmp.ptr.p_double[0], 1, &a->ptr.pp_double[i][0], 1, ae_v_len(0,i-1), sa);
                ae_v_subd(&x->ptr.p_double[0], 1, &tmp.ptr.p_double[0], 1, ae_v_len(0,i-1), vr);
            }
        }
        ae_frame_leave(_state);
        return result;
    }
    result = ae_false;
    ae_frame_leave(_state);
    return result;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2e0, %rsp            # imm = 0x2E0
movb %r9b, %al
movq 0x10(%rbp), %r9
movq %rdi, -0x10(%rbp)
movsd %xmm0, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
andb $0x1, %cl
movb %cl, -0x29(%rbp)
movq %r8, -0x38(%rbp)
andb $0x1, %al
movb %al, -0x39(%rbp)
movsd %xmm1, -0x48(%rbp)
movq 0x10(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3b0f0
movq 0x10(%rbp), %rcx
leaq -0xe8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x3, %edx
movl $0x1, %r8d
callq 0x3b400
cmpq $0x0, -0x20(%rbp)
setg %al
movq 0x10(%rbp), %rdx
movzbl %al, %edi
andl $0x1, %edi
leaq 0x297f2(%rip), %rsi     # 0x57dbe
callq 0x3b240
movb $0x1, %al
cmpq $0x0, -0x38(%rbp)
movb %al, -0x251(%rbp)
je 0x2e5ee
cmpq $0x1, -0x38(%rbp)
sete %al
movb %al, -0x251(%rbp)
movb -0x251(%rbp), %al
movq 0x10(%rbp), %rdx
movzbl %al, %edi
andl $0x1, %edi
leaq 0x297da(%rip), %rsi     # 0x57ddf
callq 0x3b240
movb $0x1, -0xe9(%rbp)
movq 0x10(%rbp), %rdi
movsd 0x2718b(%rip), %xmm0    # 0x557a8
callq 0x3cd70
movsd %xmm0, -0x68(%rbp)
cmpq $0x0, -0x20(%rbp)
jg 0x2e647
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
xorps %xmm0, %xmm0
movsd %xmm0, -0x70(%rbp)
movq $0x0, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jg 0x2e6b6
movsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x260(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c820
movaps %xmm0, %xmm1
movsd -0x260(%rbp), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3ca70
movsd %xmm0, -0x70(%rbp)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x2e657
xorps %xmm0, %xmm0
movsd %xmm0, -0x78(%rbp)
movq -0x20(%rbp), %rsi
movq 0x10(%rbp), %rdx
leaq -0xe8(%rbp), %rdi
callq 0x3b620
movb $0x1, -0xe9(%rbp)
testb $0x1, -0x29(%rbp)
je 0x2ea0e
cmpq $0x0, -0x38(%rbp)
jne 0x2ea0e
movq -0x20(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
jl 0x2e9f5
testb $0x1, -0x39(%rbp)
je 0x2e743
movsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x100(%rbp)
movsd %xmm1, -0xf8(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x2e792
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
mulsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x110(%rbp)
movsd %xmm1, -0x108(%rbp)
movq -0x110(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x80(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jge 0x2e8e4
movq -0xc0(%rbp), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x280(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x278(%rbp)
movq -0x80(%rbp), %rdi
addq $0x1, %rdi
movq -0x20(%rbp), %rsi
subq $0x1, %rsi
callq 0x42370
movq -0x280(%rbp), %rdi
movq -0x278(%rbp), %rdx
movq %rax, %r8
movsd -0x18(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41d90
movq -0xc0(%rbp), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x270(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x268(%rbp)
movq -0x80(%rbp), %rdi
addq $0x1, %rdi
movq -0x20(%rbp), %rsi
subq $0x1, %rsi
callq 0x42370
movq -0x270(%rbp), %rdi
movq -0x268(%rbp), %rdx
movq %rax, %r8
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41940
movsd %xmm0, -0xa8(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
subsd -0xa8(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x120(%rbp)
movsd %xmm1, -0x118(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x118(%rbp), %rax
movq %rax, -0x98(%rbp)
jmp 0x2e926
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x130(%rbp)
movsd %xmm1, -0x128(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x148(%rbp)
movsd -0x68(%rbp), %xmm4
movsd -0x70(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movq 0x10(%rbp), %rdx
movsd -0x140(%rbp), %xmm0
movsd -0x138(%rbp), %xmm1
movsd -0x150(%rbp), %xmm2
movsd -0x148(%rbp), %xmm3
leaq -0x78(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x2f2d0
andb $0x1, %al
movb %al, -0xe9(%rbp)
testb $0x1, -0xe9(%rbp)
jne 0x2e9cb
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
movsd -0xb8(%rbp), %xmm0
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x80(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x2e6fa
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
testb $0x1, -0x29(%rbp)
jne 0x2ecfb
cmpq $0x0, -0x38(%rbp)
jne 0x2ecfb
movq $0x0, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jg 0x2ece2
testb $0x1, -0x39(%rbp)
je 0x2ea7e
movsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x160(%rbp)
movsd %xmm1, -0x158(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x158(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x2eacd
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
mulsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x170(%rbp)
movsd %xmm1, -0x168(%rbp)
movq -0x170(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x88(%rbp)
cmpq $0x0, -0x80(%rbp)
jle 0x2ebd1
movq -0xc0(%rbp), %rax
movq %rax, -0x2a0(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x298(%rbp)
movq -0x80(%rbp), %rsi
subq $0x1, %rsi
xorl %eax, %eax
movl %eax, %edi
callq 0x42370
movq -0x2a0(%rbp), %rdi
movq -0x298(%rbp), %rdx
movq %rax, %r8
movsd -0x18(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41d90
movq -0xc0(%rbp), %rax
movq %rax, -0x290(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x288(%rbp)
movq -0x80(%rbp), %rsi
subq $0x1, %rsi
xorl %eax, %eax
movl %eax, %edi
callq 0x42370
movq -0x290(%rbp), %rdi
movq -0x288(%rbp), %rdx
movq %rax, %r8
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41940
movsd %xmm0, -0xa8(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
subsd -0xa8(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x180(%rbp)
movsd %xmm1, -0x178(%rbp)
movq -0x180(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0x98(%rbp)
jmp 0x2ec13
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x190(%rbp)
movsd %xmm1, -0x188(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x188(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movsd -0x68(%rbp), %xmm4
movsd -0x70(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movq 0x10(%rbp), %rdx
movsd -0x1a0(%rbp), %xmm0
movsd -0x198(%rbp), %xmm1
movsd -0x1b0(%rbp), %xmm2
movsd -0x1a8(%rbp), %xmm3
leaq -0x78(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x2f2d0
andb $0x1, %al
movb %al, -0xe9(%rbp)
testb $0x1, -0xe9(%rbp)
jne 0x2ecb8
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
movsd -0xb8(%rbp), %xmm0
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x2ea2b
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
testb $0x1, -0x29(%rbp)
je 0x2effc
cmpq $0x1, -0x38(%rbp)
jne 0x2effc
movq $0x0, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jg 0x2efe3
testb $0x1, -0x39(%rbp)
je 0x2ed6b
movsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x1c0(%rbp)
movsd %xmm1, -0x1b8(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x1b8(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x2edba
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
mulsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x1d0(%rbp)
movsd %xmm1, -0x1c8(%rbp)
movq -0x1d0(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x1c8(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x1e0(%rbp)
movsd %xmm1, -0x1d8(%rbp)
movq -0x1e0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x1d8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x200(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movsd -0x68(%rbp), %xmm4
movsd -0x70(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movq 0x10(%rbp), %rdx
movsd -0x1f0(%rbp), %xmm0
movsd -0x1e8(%rbp), %xmm1
movsd -0x200(%rbp), %xmm2
movsd -0x1f8(%rbp), %xmm3
leaq -0x78(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x2f2d0
andb $0x1, %al
movb %al, -0xe9(%rbp)
testb $0x1, -0xe9(%rbp)
jne 0x2eea1
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
movsd -0xb8(%rbp), %xmm0
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x80(%rbp), %rax
movq -0x20(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jge 0x2efd0
movsd -0xb8(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movq -0xc0(%rbp), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x2c0(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x2b8(%rbp)
movq -0x80(%rbp), %rdi
addq $0x1, %rdi
movq -0x20(%rbp), %rsi
subq $0x1, %rsi
callq 0x42370
movq -0x2c0(%rbp), %rdi
movq -0x2b8(%rbp), %rdx
movq %rax, %r8
movsd -0x18(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41d90
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x2b0(%rbp)
movq -0xc0(%rbp), %rax
movq -0x80(%rbp), %rcx
addq $0x1, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x2a8(%rbp)
movq -0x80(%rbp), %rdi
addq $0x1, %rdi
movq -0x20(%rbp), %rsi
subq $0x1, %rsi
callq 0x42370
movq -0x2b0(%rbp), %rdi
movq -0x2a8(%rbp), %rdx
movq %rax, %r8
movsd -0xa8(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x42270
jmp 0x2efd2
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x2ed18
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
testb $0x1, -0x29(%rbp)
jne 0x2f2a6
cmpq $0x1, -0x38(%rbp)
jne 0x2f2a6
movq -0x20(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
jl 0x2f290
testb $0x1, -0x39(%rbp)
je 0x2f066
movsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x210(%rbp)
movsd %xmm1, -0x208(%rbp)
movq -0x210(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x208(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x2f0b5
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
mulsd -0x18(%rbp), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x220(%rbp)
movsd %xmm1, -0x218(%rbp)
movq -0x220(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x218(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x3f1b0
movsd %xmm0, -0x230(%rbp)
movsd %xmm1, -0x228(%rbp)
movq -0x230(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x228(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x240(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x238(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x250(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x248(%rbp)
movsd -0x68(%rbp), %xmm4
movsd -0x70(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movq 0x10(%rbp), %rdx
movsd -0x240(%rbp), %xmm0
movsd -0x238(%rbp), %xmm1
movsd -0x250(%rbp), %xmm2
movsd -0x248(%rbp), %xmm3
leaq -0x78(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x2f2d0
andb $0x1, %al
movb %al, -0xe9(%rbp)
testb $0x1, -0xe9(%rbp)
jne 0x2f19c
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
movsd -0xb8(%rbp), %xmm0
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x80(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
cmpq $0x0, -0x80(%rbp)
jle 0x2f27d
movsd -0xb8(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x2e0(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x80(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x2d8(%rbp)
movq -0x80(%rbp), %rsi
subq $0x1, %rsi
xorl %eax, %eax
movl %eax, %edi
callq 0x42370
movq -0x2e0(%rbp), %rdi
movq -0x2d8(%rbp), %rdx
movq %rax, %r8
movsd -0x18(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41d90
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x2d0(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x2c8(%rbp)
movq -0x80(%rbp), %rsi
subq $0x1, %rsi
xorl %eax, %eax
movl %eax, %edi
callq 0x42370
movq -0x2d0(%rbp), %rdi
movq -0x2c8(%rbp), %rdx
movq %rax, %r8
movsd -0xa8(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x42270
jmp 0x2f27f
movq -0x80(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x2f01d
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x2f2c1
movb $0x0, -0xe9(%rbp)
movq 0x10(%rbp), %rdi
callq 0x3b030
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x2e0, %rsp            # imm = 0x2E0
popq %rbp
retq
nop