// File: melop[P]admixem/./spline.h
// Function: (anonymous namespace)::tk::spline::set_points(std::vector<double, std::allocator<double>> const&, std::vector<double, std::allocator<double>> const&, bool)
void spline::set_points(const std::vector<double>& x,
                        const std::vector<double>& y, bool cubic_spline)
{
    assert(x.size()==y.size());
    assert(x.size()>2);
    m_x=x;
    m_y=y;
    int   n=x.size();
    // TODO: maybe sort x and y, rather than returning an error
    for(int i=0; i<n-1; i++) {
        assert(m_x[i]<m_x[i+1]);
    }

    if(cubic_spline==true) { // cubic spline interpolation
        // setting up the matrix and right hand side of the equation system
        // for the parameters b[]
        band_matrix A(n,1,1);
        std::vector<double>  rhs(n);
        for(int i=1; i<n-1; i++) {
            A(i,i-1)=1.0/3.0*(x[i]-x[i-1]);
            A(i,i)=2.0/3.0*(x[i+1]-x[i-1]);
            A(i,i+1)=1.0/3.0*(x[i+1]-x[i]);
            rhs[i]=(y[i+1]-y[i])/(x[i+1]-x[i]) - (y[i]-y[i-1])/(x[i]-x[i-1]);
        }
        // boundary conditions
        if(m_left == spline::second_deriv) {
            // 2*b[0] = f''
            A(0,0)=2.0;
            A(0,1)=0.0;
            rhs[0]=m_left_value;
        } else if(m_left == spline::first_deriv) {
            // c[0] = f', needs to be re-expressed in terms of b:
            // (2b[0]+b[1])(x[1]-x[0]) = 3 ((y[1]-y[0])/(x[1]-x[0]) - f')
            A(0,0)=2.0*(x[1]-x[0]);
            A(0,1)=1.0*(x[1]-x[0]);
            rhs[0]=3.0*((y[1]-y[0])/(x[1]-x[0])-m_left_value);
        } else {
            assert(false);
        }
        if(m_right == spline::second_deriv) {
            // 2*b[n-1] = f''
            A(n-1,n-1)=2.0;
            A(n-1,n-2)=0.0;
            rhs[n-1]=m_right_value;
        } else if(m_right == spline::first_deriv) {
            // c[n-1] = f', needs to be re-expressed in terms of b:
            // (b[n-2]+2b[n-1])(x[n-1]-x[n-2])
            // = 3 (f' - (y[n-1]-y[n-2])/(x[n-1]-x[n-2]))
            A(n-1,n-1)=2.0*(x[n-1]-x[n-2]);
            A(n-1,n-2)=1.0*(x[n-1]-x[n-2]);
            rhs[n-1]=3.0*(m_right_value-(y[n-1]-y[n-2])/(x[n-1]-x[n-2]));
        } else {
            assert(false);
        }

        // solve the equation system to obtain the parameters b[]
        m_b=A.lu_solve(rhs);

        // calculate parameters a[] and c[] based on b[]
        m_a.resize(n);
        m_c.resize(n);
        for(int i=0; i<n-1; i++) {
            m_a[i]=1.0/3.0*(m_b[i+1]-m_b[i])/(x[i+1]-x[i]);
            m_c[i]=(y[i+1]-y[i])/(x[i+1]-x[i])
                   - 1.0/3.0*(2.0*m_b[i]+m_b[i+1])*(x[i+1]-x[i]);
        }
    } else { // linear interpolation
        m_a.resize(n);
        m_b.resize(n);
        m_c.resize(n);
        for(int i=0; i<n-1; i++) {
            m_a[i]=0.0;
            m_b[i]=0.0;
            m_c[i]=(m_y[i+1]-m_y[i])/(m_x[i+1]-m_x[i]);
        }
    }

    // for left extrapolation coefficients
    m_b0 = (m_force_linear_extrapolation==false) ? m_b[0] : 0.0;
    m_c0 = m_c[0];

    // for the right extrapolation coefficients
    // f_{n-1}(x) = b*(x-x_{n-1})^2 + c*(x-x_{n-1}) + y_{n-1}
    double h=x[n-1]-x[n-2];
    // m_b[n-1] is determined by the boundary condition
    m_a[n-1]=0.0;
    m_c[n-1]=3.0*m_a[n-2]*h*h+2.0*m_b[n-2]*h+m_c[n-2];   // = f'_{n-2}(x_{n-1})
    if(m_force_linear_extrapolation==true)
        m_b[n-1]=0.0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x300, %rsp            # imm = 0x300
movb %cl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2a780
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rdi
callq 0x2a780
movq %rax, %rcx
movq -0xb8(%rbp), %rax
cmpq %rcx, %rax
jne 0x1f363
jmp 0x1f382
leaq 0x58716(%rip), %rdi     # 0x77a80
leaq 0x58697(%rip), %rsi     # 0x77a08
movl $0x11f, %edx            # imm = 0x11F
leaq 0x58716(%rip), %rcx     # 0x77a93
callq 0x8300
movq -0x10(%rbp), %rdi
callq 0x2a780
cmpq $0x2, %rax
jbe 0x1f393
jmp 0x1f3b2
leaq 0x5876c(%rip), %rdi     # 0x77b06
leaq 0x58667(%rip), %rsi     # 0x77a08
movl $0x120, %edx            # imm = 0x120
leaq 0x586e6(%rip), %rcx     # 0x77a93
callq 0x8300
movq -0xc0(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x2e8e0
movq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq $0x18, %rdi
callq 0x2e8e0
movq -0x10(%rbp), %rdi
callq 0x2a780
movl %eax, -0x20(%rbp)
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl -0x20(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x1f467
movq -0xc0(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0xc8(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
movsd -0xc8(%rbp), %xmm1
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x1f43b
jmp 0x1f45a
leaq 0x586cf(%rip), %rdi     # 0x77b11
leaq 0x585bf(%rip), %rsi     # 0x77a08
movl $0x126, %edx            # imm = 0x126
leaq 0x5863e(%rip), %rcx     # 0x77a93
callq 0x8300
jmp 0x1f45c
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x1f3e9
movb -0x19(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x2005e
movl -0x20(%rbp), %esi
leaq -0x58(%rbp), %rdi
movl $0x1, %ecx
movl %ecx, %edx
callq 0x283e0
movslq -0x20(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0xd0(%rbp)
callq 0x2eb50
movq -0xd8(%rbp), %rsi
movq -0xd0(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x2eb70
jmp 0x1f4bf
leaq -0x71(%rbp), %rdi
callq 0x2ebe0
movl $0x1, -0x88(%rbp)
movl -0x88(%rbp), %eax
movl -0x20(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x1f813
movq -0x10(%rbp), %rdi
movslq -0x88(%rbp), %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0xf0(%rbp)
movq -0x10(%rbp), %rdi
movl -0x88(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0xf0(%rbp), %xmm0
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd 0x571fa(%rip), %xmm1    # 0x76728
mulsd %xmm1, %xmm0
movsd %xmm0, -0xe8(%rbp)
movl -0x88(%rbp), %esi
movl %esi, %edx
decl %edx
leaq -0x58(%rbp), %rdi
callq 0x28460
movq %rax, -0xe0(%rbp)
jmp 0x1f556
movq -0xe0(%rbp), %rax
movsd -0xe8(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rdi
movl -0x88(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x108(%rbp)
movq -0x10(%rbp), %rdi
movl -0x88(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x108(%rbp), %xmm0
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd 0x5765b(%rip), %xmm1    # 0x76c10
mulsd %xmm1, %xmm0
movsd %xmm0, -0x100(%rbp)
movl -0x88(%rbp), %edx
leaq -0x58(%rbp), %rdi
movl %edx, %esi
callq 0x28460
movq %rax, -0xf8(%rbp)
jmp 0x1f5db
movq -0xf8(%rbp), %rax
movsd -0x100(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rdi
movl -0x88(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x120(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x88(%rbp), %rsi
callq 0x2ec00
movsd -0x120(%rbp), %xmm0
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd 0x570f2(%rip), %xmm1    # 0x76728
mulsd %xmm1, %xmm0
movsd %xmm0, -0x118(%rbp)
movl -0x88(%rbp), %esi
movl %esi, %edx
incl %edx
leaq -0x58(%rbp), %rdi
callq 0x28460
movq %rax, -0x110(%rbp)
jmp 0x1f65e
movq -0x110(%rbp), %rax
movsd -0x118(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rdi
movl -0x88(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x160(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x88(%rbp), %rsi
callq 0x2ec00
movsd -0x160(%rbp), %xmm0
subsd (%rax), %xmm0
movsd %xmm0, -0x150(%rbp)
movq -0x10(%rbp), %rdi
movl -0x88(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x158(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x88(%rbp), %rsi
callq 0x2ec00
movsd -0x158(%rbp), %xmm1
movsd -0x150(%rbp), %xmm0
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x130(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x88(%rbp), %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x148(%rbp)
movq -0x18(%rbp), %rdi
movl -0x88(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x148(%rbp), %xmm0
subsd (%rax), %xmm0
movsd %xmm0, -0x138(%rbp)
movq -0x10(%rbp), %rdi
movslq -0x88(%rbp), %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x140(%rbp)
movq -0x10(%rbp), %rdi
movl -0x88(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x140(%rbp), %xmm2
movsd -0x138(%rbp), %xmm1
movsd -0x130(%rbp), %xmm0
subsd (%rax), %xmm2
divsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x128(%rbp)
movslq -0x88(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x2eb30
movsd -0x128(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x1f4d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x71(%rbp), %rdi
callq 0x2ebe0
jmp 0x20050
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x2aff0
jmp 0x20050
movq -0xc0(%rbp), %rax
cmpl $0x2, 0x88(%rax)
jne 0x1f8ad
leaq -0x58(%rbp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x28460
movq %rax, -0x168(%rbp)
jmp 0x1f83d
movq -0x168(%rbp), %rax
movabsq $0x4000000000000000, %rcx # imm = 0x4000000000000000
movq %rcx, (%rax)
leaq -0x58(%rbp), %rdi
xorl %esi, %esi
movl $0x1, %edx
callq 0x28460
movq %rax, -0x170(%rbp)
jmp 0x1f86a
movq -0xc0(%rbp), %rax
movq -0x170(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rcx)
movsd 0x90(%rax), %xmm0
movsd %xmm0, -0x178(%rbp)
leaq -0x70(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2eb30
movsd -0x178(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x1fa88
movq -0xc0(%rbp), %rax
cmpl $0x1, 0x88(%rax)
jne 0x1fa67
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x198(%rbp)
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, -0x18c(%rbp)
movl %eax, %esi
callq 0x2ec00
movsd -0x198(%rbp), %xmm0
movl -0x18c(%rbp), %edx
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x188(%rbp)
leaq -0x58(%rbp), %rdi
movl %edx, %esi
callq 0x28460
movq %rax, -0x180(%rbp)
jmp 0x1f924
movq -0x180(%rbp), %rax
movsd -0x188(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x1b8(%rbp)
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, -0x1ac(%rbp)
movl %eax, %esi
callq 0x2ec00
movsd -0x1b8(%rbp), %xmm0
movl -0x1ac(%rbp), %esi
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x1a8(%rbp)
leaq -0x58(%rbp), %rdi
movl $0x1, %edx
callq 0x28460
movq %rax, -0x1a0(%rbp)
jmp 0x1f999
movq -0x1a0(%rbp), %rax
movsd -0x1a8(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x1d8(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2ec00
movsd -0x1d8(%rbp), %xmm0
subsd (%rax), %xmm0
movsd %xmm0, -0x1c8(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x1d0(%rbp)
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2ec00
movsd -0x1d0(%rbp), %xmm0
movsd -0x1c8(%rbp), %xmm1
movq %rax, %rcx
movq -0xc0(%rbp), %rax
subsd (%rcx), %xmm0
divsd %xmm0, %xmm1
subsd 0x90(%rax), %xmm1
movsd 0x571c8(%rip), %xmm0    # 0x76c08
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1c0(%rbp)
leaq -0x70(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2eb30
movsd -0x1c0(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x1fa86
leaq 0x580b3(%rip), %rdi     # 0x77b21
leaq 0x57f93(%rip), %rsi     # 0x77a08
movl $0x141, %edx            # imm = 0x141
leaq 0x58012(%rip), %rcx     # 0x77a93
callq 0x8300
jmp 0x1fa88
movq -0xc0(%rbp), %rax
cmpl $0x2, 0x8c(%rax)
jne 0x1fb2d
movl -0x20(%rbp), %edx
decl %edx
leaq -0x58(%rbp), %rdi
movl %edx, %esi
callq 0x28460
movq %rax, -0x1e0(%rbp)
jmp 0x1fab5
movq -0x1e0(%rbp), %rax
movabsq $0x4000000000000000, %rcx # imm = 0x4000000000000000
movq %rcx, (%rax)
movl -0x20(%rbp), %edx
movl %edx, %esi
decl %esi
addl $-0x2, %edx
leaq -0x58(%rbp), %rdi
callq 0x28460
movq %rax, -0x1e8(%rbp)
jmp 0x1fae5
movq -0xc0(%rbp), %rax
movq -0x1e8(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rcx)
movsd 0x98(%rax), %xmm0
movsd %xmm0, -0x1f0(%rbp)
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq -0x70(%rbp), %rdi
callq 0x2eb30
movsd -0x1f0(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x1fd32
movq -0xc0(%rbp), %rax
cmpl $0x1, 0x8c(%rax)
jne 0x1fd11
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x208(%rbp)
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
addl $-0x2, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x208(%rbp), %xmm0
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x200(%rbp)
movl -0x20(%rbp), %edx
decl %edx
leaq -0x58(%rbp), %rdi
movl %edx, %esi
callq 0x28460
movq %rax, -0x1f8(%rbp)
jmp 0x1fba5
movq -0x1f8(%rbp), %rax
movsd -0x200(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x220(%rbp)
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
addl $-0x2, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x220(%rbp), %xmm0
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x218(%rbp)
movl -0x20(%rbp), %edx
movl %edx, %esi
decl %esi
addl $-0x2, %edx
leaq -0x58(%rbp), %rdi
callq 0x28460
movq %rax, -0x210(%rbp)
jmp 0x1fc1b
movq -0xc0(%rbp), %rax
movq -0x210(%rbp), %rcx
movsd -0x218(%rbp), %xmm0
movsd %xmm0, (%rcx)
movsd 0x98(%rax), %xmm0
movsd %xmm0, -0x230(%rbp)
movq -0x18(%rbp), %rdi
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x248(%rbp)
movq -0x18(%rbp), %rdi
movl -0x20(%rbp), %eax
subl $0x2, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x248(%rbp), %xmm0
subsd (%rax), %xmm0
movsd %xmm0, -0x238(%rbp)
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x240(%rbp)
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
subl $0x2, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x240(%rbp), %xmm2
movsd -0x238(%rbp), %xmm0
movsd -0x230(%rbp), %xmm1
subsd (%rax), %xmm2
divsd %xmm2, %xmm0
subsd %xmm0, %xmm1
movsd 0x56f23(%rip), %xmm0    # 0x76c08
mulsd %xmm1, %xmm0
movsd %xmm0, -0x228(%rbp)
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq -0x70(%rbp), %rdi
callq 0x2eb30
movsd -0x228(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x1fd30
leaq 0x57e09(%rip), %rdi     # 0x77b21
leaq 0x57ce9(%rip), %rsi     # 0x77a08
movl $0x150, %edx            # imm = 0x150
leaq 0x57d68(%rip), %rcx     # 0x77a93
callq 0x8300
jmp 0x1fd32
leaq -0xa0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
leaq -0x70(%rbp), %rdx
xorl %ecx, %ecx
callq 0x285b0
jmp 0x1fd4a
movq -0xc0(%rbp), %rdi
addq $0x48, %rdi
leaq -0xa0(%rbp), %rsi
movq %rsi, -0x250(%rbp)
callq 0x2ec20
movq -0x250(%rbp), %rdi
callq 0x2aff0
movq -0xc0(%rbp), %rdi
addq $0x30, %rdi
movslq -0x20(%rbp), %rsi
callq 0x2ec50
jmp 0x1fd8a
movq -0xc0(%rbp), %rdi
addq $0x60, %rdi
movslq -0x20(%rbp), %rsi
callq 0x2ec50
jmp 0x1fda0
movl $0x0, -0xa4(%rbp)
movl -0xa4(%rbp), %eax
movl -0x20(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x20039
movq -0xc0(%rbp), %rdi
addq $0x48, %rdi
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x2b0(%rbp)
addq $0x48, %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2eb30
movsd -0x2b0(%rbp), %xmm1
subsd (%rax), %xmm1
movsd 0x56917(%rip), %xmm0    # 0x76728
mulsd %xmm1, %xmm0
movsd %xmm0, -0x2a0(%rbp)
movq -0x10(%rbp), %rdi
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x2a8(%rbp)
movq -0x10(%rbp), %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2ec00
movsd -0x2a8(%rbp), %xmm1
movsd -0x2a0(%rbp), %xmm0
movq -0xc0(%rbp), %rdi
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x298(%rbp)
addq $0x30, %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2eb30
movsd -0x298(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rdi
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x290(%rbp)
movq -0x18(%rbp), %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2ec00
movsd -0x290(%rbp), %xmm0
subsd (%rax), %xmm0
movsd %xmm0, -0x280(%rbp)
movq -0x10(%rbp), %rdi
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x288(%rbp)
movq -0x10(%rbp), %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2ec00
movsd -0x288(%rbp), %xmm1
movsd -0x280(%rbp), %xmm0
movq -0xc0(%rbp), %rdi
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x260(%rbp)
addq $0x48, %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x278(%rbp)
addq $0x48, %rdi
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
movsd -0x278(%rbp), %xmm1
movsd (%rax), %xmm0
addsd %xmm1, %xmm1
addsd %xmm0, %xmm1
movsd 0x567a6(%rip), %xmm0    # 0x76728
mulsd %xmm1, %xmm0
movsd %xmm0, -0x268(%rbp)
movq -0x10(%rbp), %rdi
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x270(%rbp)
movq -0x10(%rbp), %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2ec00
movsd -0x270(%rbp), %xmm2
movsd -0x268(%rbp), %xmm0
movsd -0x260(%rbp), %xmm1
movq -0xc0(%rbp), %rdi
subsd (%rax), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x258(%rbp)
addq $0x60, %rdi
movslq -0xa4(%rbp), %rsi
callq 0x2eb30
movsd -0x258(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa4(%rbp)
jmp 0x1fdaa
leaq -0x70(%rbp), %rdi
callq 0x2aff0
leaq -0x58(%rbp), %rdi
callq 0x28730
jmp 0x201d7
leaq -0x58(%rbp), %rdi
callq 0x28730
jmp 0x203df
movq -0xc0(%rbp), %rdi
addq $0x30, %rdi
movslq -0x20(%rbp), %rsi
callq 0x2ec50
movq -0xc0(%rbp), %rdi
addq $0x48, %rdi
movslq -0x20(%rbp), %rsi
callq 0x2ec50
movq -0xc0(%rbp), %rdi
addq $0x60, %rdi
movslq -0x20(%rbp), %rsi
callq 0x2ec50
movl $0x0, -0xa8(%rbp)
movl -0xa8(%rbp), %eax
movl -0x20(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x201d5
movq -0xc0(%rbp), %rdi
addq $0x30, %rdi
movslq -0xa8(%rbp), %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
addq $0x48, %rdi
movslq -0xa8(%rbp), %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
addq $0x18, %rdi
movl -0xa8(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x2d0(%rbp)
addq $0x18, %rdi
movslq -0xa8(%rbp), %rsi
callq 0x2eb30
movsd -0x2d0(%rbp), %xmm0
movq -0xc0(%rbp), %rdi
subsd (%rax), %xmm0
movsd %xmm0, -0x2c0(%rbp)
movl -0xa8(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x2c8(%rbp)
movslq -0xa8(%rbp), %rsi
callq 0x2eb30
movsd -0x2c8(%rbp), %xmm1
movsd -0x2c0(%rbp), %xmm0
movq -0xc0(%rbp), %rdi
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x2b8(%rbp)
addq $0x60, %rdi
movslq -0xa8(%rbp), %rsi
callq 0x2eb30
movsd -0x2b8(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0xa8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa8(%rbp)
jmp 0x200a4
jmp 0x201d7
movq -0xc0(%rbp), %rax
movb 0xa0(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x20210
movq -0xc0(%rbp), %rdi
addq $0x48, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2eb30
movsd (%rax), %xmm0
movsd %xmm0, -0x2d8(%rbp)
jmp 0x2021d
xorps %xmm0, %xmm0
movsd %xmm0, -0x2d8(%rbp)
jmp 0x2021d
movq -0xc0(%rbp), %rdi
movsd -0x2d8(%rbp), %xmm0
movsd %xmm0, 0x78(%rdi)
addq $0x60, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2eb30
movq %rax, %rcx
movq -0xc0(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, 0x80(%rax)
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd (%rax), %xmm0
movsd %xmm0, -0x300(%rbp)
movq -0x10(%rbp), %rdi
movl -0x20(%rbp), %eax
subl $0x2, %eax
movslq %eax, %rsi
callq 0x2ec00
movsd -0x300(%rbp), %xmm0
movq -0xc0(%rbp), %rdi
subsd (%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
addq $0x30, %rdi
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
addq $0x30, %rdi
movl -0x20(%rbp), %eax
subl $0x2, %eax
movslq %eax, %rsi
callq 0x2eb30
movq -0xc0(%rbp), %rdi
movsd 0x56928(%rip), %xmm0    # 0x76c08
mulsd (%rax), %xmm0
mulsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x2f8(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x2f0(%rbp)
addq $0x48, %rdi
movl -0x20(%rbp), %eax
subl $0x2, %eax
movslq %eax, %rsi
callq 0x2eb30
movsd -0x2f8(%rbp), %xmm0
movsd -0x2f0(%rbp), %xmm2
movq -0xc0(%rbp), %rdi
movsd 0x5637b(%rip), %xmm1    # 0x766b0
mulsd (%rax), %xmm1
mulsd -0xb0(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2e8(%rbp)
addq $0x60, %rdi
movl -0x20(%rbp), %eax
subl $0x2, %eax
movslq %eax, %rsi
callq 0x2eb30
movsd -0x2e8(%rbp), %xmm0
movq -0xc0(%rbp), %rdi
addsd (%rax), %xmm0
movsd %xmm0, -0x2e0(%rbp)
addq $0x60, %rdi
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
movsd -0x2e0(%rbp), %xmm0
movq %rax, %rcx
movq -0xc0(%rbp), %rax
movsd %xmm0, (%rcx)
movb 0xa0(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x203d6
movq -0xc0(%rbp), %rdi
addq $0x48, %rdi
movl -0x20(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x2eb30
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
addq $0x300, %rsp            # imm = 0x300
popq %rbp
retq
movq -0x80(%rbp), %rdi
callq 0x8860
nopl (%rax,%rax)