// File: dfrodriguezp[P]PiCM-cpp/functions.cc
// Function: potential(std::vector<std::valarray<double>, std::allocator<std::valarray<double>>> const&, double const&, double const&, unsigned int const&, unsigned int const&)
VecArr potential(const VecArr &rho, const Real &dx, const Real &dy,
                 const Int &Nx, const Int &Ny)
{
    Complex rho_k[Nx][Ny];

    for (Int i = 0; i < Nx; ++i)
    {
        for (Int j = 0; j < Ny; ++j)
        {
            rho_k[i][j] = rho[i][j];
        }
    }

    CArray f(Nx);
    CArray g(Ny);

    for (Int i = 0; i < Nx; ++i)
    {
        for (Int j = 0; j < Ny; ++j)
        {
            g[j] = rho_k[i][j];
        }
        fft(g);
        for (Int j = 0; j < Ny; ++j)
        {
            rho_k[i][j] = g[j];
        }
    }

    for (Int j = 0; j < Ny; ++j)
    {
        for (Int i = 0; i < Nx; ++i)
        {
            f[i] = rho_k[i][j];
        }
        fft(f);
        for (Int i = 0; i < Nx; ++i)
        {
            rho_k[i][j] = f[i];
        }
    }

    Complex phi_k[Nx][Ny];

    for (Int i = 0; i < Nx; ++i)
    {
        for (Int j = 0; j < Ny; ++j)
        {
            phi_k[i][j] = rho_k[i][j];
        }
    }

    Complex i(0.0, 1.0);
    Complex Wx = std::exp(2.0 * std::acos(-1.0) * i / Real(Nx));
    Complex Wy = std::exp(2.0 * std::acos(-1.0) * i / Real(Ny));
    Complex Wn = 1.0;
    Complex Wm = 1.0;
    Real dx_2 = dx * dx;
    Real dy_2 = dy * dy;

    for (Int n = 0; n < Nx; ++n)
    {
        for (Int m = 0; m < Ny; ++m)
        {
            Complex denom = dy_2 * (2.0 - Wn - 1.0 / Wn) + dx_2 * (2.0 - Wm - 1.0 / Wm);
            if (denom != 0.0)
            {
                phi_k[n][m] *= (dx_2 * dy_2) / denom;
            }
            Wm *= Wy;
        }
        Wn *= Wx;
    }

    for (Int i = 0; i < Nx; ++i)
    {
        for (Int j = 0; j < Ny; ++j)
        {
            g[j] = phi_k[i][j];
        }
        ifft(g);
        for (Int j = 0; j < Ny; ++j)
        {
            phi_k[i][j] = g[j];
        }
    }

    for (Int j = 0; j < Ny; ++j)
    {
        for (Int i = 0; i < Nx; ++i)
        {
            f[i] = phi_k[i][j];
        }
        ifft(f);
        for (Int i = 0; i < Nx; ++i)
        {
            phi_k[i][j] = f[i];
        }
    }

    VecArr phi = valarraysVector(Nx, Ny);
    for (Int i = 0; i < Nx; ++i)
    {
        for (Int j = 0; j < Ny; ++j)
        {
            phi[i][j] = std::real(phi_k[i][j]);
        }
    }

    return phi;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x460, %rsp            # imm = 0x460
movq %rdi, -0x298(%rbp)
movq %rdi, %rax
movq %rax, -0x290(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x28(%rbp), %rax
movl (%rax), %eax
movq -0x30(%rbp), %rcx
movl (%rcx), %ecx
movq %rcx, -0x288(%rbp)
movq %rsp, %rdx
movq %rdx, -0x38(%rbp)
movq %rax, %rsi
imulq %rcx, %rsi
shlq $0x4, %rsi
movq %rsp, %rdx
subq %rsi, %rdx
movq %rdx, -0x280(%rbp)
movq %rdx, %rsp
movq %rax, -0x40(%rbp)
movq %rcx, -0x48(%rbp)
imulq %rcx, %rax
movq %rax, -0x278(%rbp)
cmpq $0x0, %rax
je 0xe20f
movq -0x280(%rbp), %rax
movq -0x278(%rbp), %rdx
shlq $0x4, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x2a8(%rbp)
movq %rax, -0x2a0(%rbp)
movq -0x2a0(%rbp), %rdi
movq %rdi, -0x2b0(%rbp)
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x10a10
movq -0x2b0(%rbp), %rax
movq -0x2a8(%rbp), %rcx
addq $0x10, %rax
cmpq %rcx, %rax
movq %rax, -0x2a0(%rbp)
jne 0xe1d8
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe295
movl $0x0, -0x50(%rbp)
movl -0x50(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe288
movq -0x10(%rbp), %rdi
movl -0x4c(%rbp), %eax
movl %eax, %esi
callq 0x10cd0
movq %rax, %rdi
movl -0x50(%rbp), %eax
movl %eax, %esi
callq 0x10c10
movq -0x288(%rbp), %rcx
movq -0x280(%rbp), %rdi
movsd (%rax), %xmm0
movl -0x4c(%rbp), %eax
imulq %rcx, %rax
shlq $0x4, %rax
addq %rax, %rdi
movl -0x50(%rbp), %eax
shlq $0x4, %rax
addq %rax, %rdi
callq 0x10cf0
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
jmp 0xe228
jmp 0xe28a
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0xe216
movq -0x28(%rbp), %rax
movl (%rax), %eax
movl %eax, %esi
leaq -0x60(%rbp), %rdi
callq 0x10d20
movq -0x30(%rbp), %rax
movl (%rax), %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
callq 0x10d20
jmp 0xe2b9
movl $0x0, -0x80(%rbp)
movl -0x80(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe420
movl $0x0, -0x84(%rbp)
movl -0x84(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe384
movq -0x280(%rbp), %rax
movq -0x288(%rbp), %rdx
movl -0x80(%rbp), %ecx
imulq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x84(%rbp), %ecx
movl %ecx, %esi
movq %rsi, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x2c0(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x10780
movq %rax, -0x2b8(%rbp)
jmp 0xe332
movq -0x2b8(%rbp), %rax
movq -0x2c0(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x84(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x84(%rbp)
jmp 0xe2d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xf15b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xf152
leaq -0x70(%rbp), %rdi
callq 0xd530
jmp 0xe38f
movl $0x0, -0x88(%rbp)
movl -0x88(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe410
movl -0x88(%rbp), %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
callq 0x10780
movq %rax, -0x2c8(%rbp)
jmp 0xe3c1
movq -0x2c8(%rbp), %rcx
movq -0x280(%rbp), %rax
movq -0x288(%rbp), %rsi
movl -0x80(%rbp), %edx
imulq %rsi, %rdx
shlq $0x4, %rdx
addq %rdx, %rax
movl -0x88(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0xe399
jmp 0xe412
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0xe2c0
movl $0x0, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe573
movl $0x0, -0x90(%rbp)
movl -0x90(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe4ce
movq -0x280(%rbp), %rax
movq -0x288(%rbp), %rdx
movl -0x90(%rbp), %ecx
movl %ecx, %esi
movq %rsi, %rcx
imulq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x8c(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x2d8(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x10780
movq %rax, -0x2d0(%rbp)
jmp 0xe49e
movq -0x2d0(%rbp), %rax
movq -0x2d8(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0xe446
leaq -0x60(%rbp), %rdi
callq 0xd530
jmp 0xe4d9
movl $0x0, -0x94(%rbp)
movl -0x94(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe55d
movl -0x94(%rbp), %eax
movl %eax, %esi
leaq -0x60(%rbp), %rdi
callq 0x10780
movq %rax, -0x2e0(%rbp)
jmp 0xe50b
movq -0x2e0(%rbp), %rcx
movq -0x280(%rbp), %rax
movq -0x288(%rbp), %rsi
movl -0x94(%rbp), %edx
imulq %rsi, %rdx
shlq $0x4, %rdx
addq %rdx, %rax
movl -0x8c(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0xe4e3
jmp 0xe55f
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0xe42a
movq -0x28(%rbp), %rax
movl (%rax), %eax
movq -0x30(%rbp), %rcx
movl (%rcx), %ecx
movq %rcx, -0x2f8(%rbp)
movq %rax, %rsi
imulq %rcx, %rsi
shlq $0x4, %rsi
movq %rsp, %rdx
subq %rsi, %rdx
movq %rdx, -0x2f0(%rbp)
movq %rdx, %rsp
movq %rax, -0xa0(%rbp)
movq %rcx, -0xa8(%rbp)
imulq %rcx, %rax
movq %rax, -0x2e8(%rbp)
cmpq $0x0, %rax
je 0xe61f
movq -0x2f0(%rbp), %rax
movq -0x2e8(%rbp), %rdx
shlq $0x4, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x308(%rbp)
movq %rax, -0x300(%rbp)
movq -0x300(%rbp), %rdi
movq %rdi, -0x310(%rbp)
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x10a10
jmp 0xe601
movq -0x308(%rbp), %rcx
movq -0x310(%rbp), %rax
addq $0x10, %rax
cmpq %rcx, %rax
movq %rax, -0x300(%rbp)
jne 0xe5e6
movl $0x0, -0xac(%rbp)
movl -0xac(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe6e3
movl $0x0, -0xb0(%rbp)
movl -0xb0(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xe6cd
movq -0x2f0(%rbp), %rax
movq -0x2f8(%rbp), %rsi
movq -0x280(%rbp), %rcx
movq -0x288(%rbp), %rdi
movl -0xac(%rbp), %edx
imulq %rdi, %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
movl -0xb0(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rcx
movl -0xac(%rbp), %edx
imulq %rsi, %rdx
shlq $0x4, %rdx
addq %rdx, %rax
movl -0xb0(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0xb0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0(%rbp)
jmp 0xe645
jmp 0xe6cf
movl -0xac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac(%rbp)
jmp 0xe629
leaq -0xc0(%rbp), %rdi
xorps %xmm0, %xmm0
movsd 0x591b(%rip), %xmm1     # 0x14010
callq 0x10a10
jmp 0xe6fc
movsd 0x5d6c(%rip), %xmm0     # 0x14470
callq 0x32e0
addsd %xmm0, %xmm0
movsd %xmm0, -0xf8(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x10e20
movsd %xmm1, -0x320(%rbp)
movsd %xmm0, -0x318(%rbp)
jmp 0xe73a
movsd -0x320(%rbp), %xmm0
movsd -0x318(%rbp), %xmm1
movsd %xmm1, -0xf0(%rbp)
movsd %xmm0, -0xe8(%rbp)
movq -0x28(%rbp), %rax
movl (%rax), %eax
cvtsi2sd %rax, %xmm0
movsd %xmm0, -0x100(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x10de0
movsd %xmm1, -0x330(%rbp)
movsd %xmm0, -0x328(%rbp)
jmp 0xe792
movsd -0x330(%rbp), %xmm0
movsd -0x328(%rbp), %xmm1
movsd %xmm1, -0xe0(%rbp)
movsd %xmm0, -0xd8(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x10d80
movsd %xmm1, -0x340(%rbp)
movsd %xmm0, -0x338(%rbp)
jmp 0xe7d0
movsd -0x340(%rbp), %xmm0
movsd -0x338(%rbp), %xmm1
movsd %xmm1, -0xd0(%rbp)
movsd %xmm0, -0xc8(%rbp)
movsd 0x5c78(%rip), %xmm0     # 0x14470
callq 0x32e0
addsd %xmm0, %xmm0
movsd %xmm0, -0x138(%rbp)
leaq -0x138(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x10e20
movsd %xmm1, -0x350(%rbp)
movsd %xmm0, -0x348(%rbp)
jmp 0xe82e
movsd -0x350(%rbp), %xmm0
movsd -0x348(%rbp), %xmm1
movsd %xmm1, -0x130(%rbp)
movsd %xmm0, -0x128(%rbp)
movq -0x30(%rbp), %rax
movl (%rax), %eax
cvtsi2sd %rax, %xmm0
movsd %xmm0, -0x140(%rbp)
leaq -0x130(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x10de0
movsd %xmm1, -0x360(%rbp)
movsd %xmm0, -0x358(%rbp)
jmp 0xe886
movsd -0x360(%rbp), %xmm0
movsd -0x358(%rbp), %xmm1
movsd %xmm1, -0x120(%rbp)
movsd %xmm0, -0x118(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x10d80
movsd %xmm1, -0x370(%rbp)
movsd %xmm0, -0x368(%rbp)
jmp 0xe8c4
movsd -0x370(%rbp), %xmm0
movsd -0x368(%rbp), %xmm1
movsd %xmm1, -0x110(%rbp)
movsd %xmm0, -0x108(%rbp)
leaq -0x150(%rbp), %rdi
movsd 0x571d(%rip), %xmm0     # 0x14010
xorps %xmm1, %xmm1
callq 0x10a10
jmp 0xe8fd
leaq -0x160(%rbp), %rdi
movsd 0x5704(%rip), %xmm0     # 0x14010
xorps %xmm1, %xmm1
callq 0x10a10
jmp 0xe916
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq -0x18(%rbp), %rax
mulsd (%rax), %xmm0
movsd %xmm0, -0x168(%rbp)
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
mulsd (%rax), %xmm0
movsd %xmm0, -0x170(%rbp)
movl $0x0, -0x174(%rbp)
movl -0x174(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xed57
movl $0x0, -0x178(%rbp)
movl -0x178(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xed2c
movabsq $0x4000000000000000, %rax # imm = 0x4000000000000000
movq %rax, -0x1c0(%rbp)
leaq -0x1c0(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x10e60
movsd %xmm1, -0x380(%rbp)
movsd %xmm0, -0x378(%rbp)
jmp 0xe9b4
movsd -0x380(%rbp), %xmm0
movsd -0x378(%rbp), %xmm1
movsd %xmm1, -0x1b8(%rbp)
movsd %xmm0, -0x1b0(%rbp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x1d8(%rbp)
leaq -0x1d8(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x10eb0
movsd %xmm1, -0x390(%rbp)
movsd %xmm0, -0x388(%rbp)
jmp 0xea0a
movsd -0x390(%rbp), %xmm0
movsd -0x388(%rbp), %xmm1
movsd %xmm1, -0x1d0(%rbp)
movsd %xmm0, -0x1c8(%rbp)
leaq -0x1b8(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x107f0
movsd %xmm1, -0x3a0(%rbp)
movsd %xmm0, -0x398(%rbp)
jmp 0xea4f
movsd -0x3a0(%rbp), %xmm0
movsd -0x398(%rbp), %xmm1
movsd %xmm1, -0x1a8(%rbp)
movsd %xmm0, -0x1a0(%rbp)
leaq -0x170(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x10e20
movsd %xmm1, -0x3b0(%rbp)
movsd %xmm0, -0x3a8(%rbp)
jmp 0xea94
movsd -0x3b0(%rbp), %xmm0
movsd -0x3a8(%rbp), %xmm1
movsd %xmm1, -0x198(%rbp)
movsd %xmm0, -0x190(%rbp)
movabsq $0x4000000000000000, %rax # imm = 0x4000000000000000
movq %rax, -0x210(%rbp)
leaq -0x210(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x10e60
movsd %xmm1, -0x3c0(%rbp)
movsd %xmm0, -0x3b8(%rbp)
jmp 0xeaea
movsd -0x3c0(%rbp), %xmm0
movsd -0x3b8(%rbp), %xmm1
movsd %xmm1, -0x208(%rbp)
movsd %xmm0, -0x200(%rbp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x228(%rbp)
leaq -0x228(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x10eb0
movsd %xmm1, -0x3d0(%rbp)
movsd %xmm0, -0x3c8(%rbp)
jmp 0xeb40
movsd -0x3d0(%rbp), %xmm0
movsd -0x3c8(%rbp), %xmm1
movsd %xmm1, -0x220(%rbp)
movsd %xmm0, -0x218(%rbp)
leaq -0x208(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x107f0
movsd %xmm1, -0x3e0(%rbp)
movsd %xmm0, -0x3d8(%rbp)
jmp 0xeb85
movsd -0x3e0(%rbp), %xmm0
movsd -0x3d8(%rbp), %xmm1
movsd %xmm1, -0x1f8(%rbp)
movsd %xmm0, -0x1f0(%rbp)
leaq -0x168(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x10e20
movsd %xmm1, -0x3f0(%rbp)
movsd %xmm0, -0x3e8(%rbp)
jmp 0xebca
movsd -0x3f0(%rbp), %xmm0
movsd -0x3e8(%rbp), %xmm1
movsd %xmm1, -0x1e8(%rbp)
movsd %xmm0, -0x1e0(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x107b0
movsd %xmm1, -0x400(%rbp)
movsd %xmm0, -0x3f8(%rbp)
jmp 0xec0f
movsd -0x400(%rbp), %xmm0
movsd -0x3f8(%rbp), %xmm1
movsd %xmm1, -0x188(%rbp)
movsd %xmm0, -0x180(%rbp)
movq $0x0, -0x230(%rbp)
leaq -0x188(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x10f00
movb %al, -0x401(%rbp)
jmp 0xec55
movb -0x401(%rbp), %al
testb $0x1, %al
jne 0xec64
jmp 0xed01
movsd -0x168(%rbp), %xmm0
movsd -0x170(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x248(%rbp)
leaq -0x248(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x10eb0
movsd %xmm1, -0x418(%rbp)
movsd %xmm0, -0x410(%rbp)
jmp 0xeca5
movq -0x2f0(%rbp), %rdi
movq -0x2f8(%rbp), %rcx
movsd -0x418(%rbp), %xmm0
movsd -0x410(%rbp), %xmm1
movsd %xmm1, -0x240(%rbp)
movsd %xmm0, -0x238(%rbp)
movl -0x174(%rbp), %eax
imulq %rcx, %rax
shlq $0x4, %rax
addq %rax, %rdi
movl -0x178(%rbp), %eax
shlq $0x4, %rax
addq %rax, %rdi
leaq -0x240(%rbp), %rsi
callq 0x10f50
jmp 0xecff
jmp 0xed01
leaq -0x160(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x10f50
jmp 0xed16
jmp 0xed18
movl -0x178(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x178(%rbp)
jmp 0xe96c
leaq -0x150(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x10f50
jmp 0xed41
jmp 0xed43
movl -0x174(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x174(%rbp)
jmp 0xe950
movl $0x0, -0x24c(%rbp)
movl -0x24c(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xeeaa
movl $0x0, -0x250(%rbp)
movl -0x250(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xee05
movq -0x2f0(%rbp), %rax
movq -0x2f8(%rbp), %rdx
movl -0x24c(%rbp), %ecx
imulq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x250(%rbp), %ecx
movl %ecx, %esi
movq %rsi, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x428(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x10780
movq %rax, -0x420(%rbp)
jmp 0xedd5
movq -0x420(%rbp), %rax
movq -0x428(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x250(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x250(%rbp)
jmp 0xed7d
leaq -0x70(%rbp), %rdi
callq 0xd8e0
jmp 0xee10
movl $0x0, -0x254(%rbp)
movl -0x254(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xee94
movl -0x254(%rbp), %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
callq 0x10780
movq %rax, -0x430(%rbp)
jmp 0xee42
movq -0x430(%rbp), %rcx
movq -0x2f0(%rbp), %rax
movq -0x2f8(%rbp), %rsi
movl -0x24c(%rbp), %edx
imulq %rsi, %rdx
shlq $0x4, %rdx
addq %rdx, %rax
movl -0x254(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x254(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x254(%rbp)
jmp 0xee1a
jmp 0xee96
movl -0x24c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24c(%rbp)
jmp 0xed61
movl $0x0, -0x258(%rbp)
movl -0x258(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xeffd
movl $0x0, -0x25c(%rbp)
movl -0x25c(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xef58
movq -0x2f0(%rbp), %rax
movq -0x2f8(%rbp), %rdx
movl -0x25c(%rbp), %ecx
movl %ecx, %esi
movq %rsi, %rcx
imulq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x258(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x440(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x10780
movq %rax, -0x438(%rbp)
jmp 0xef28
movq -0x438(%rbp), %rax
movq -0x440(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x25c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x25c(%rbp)
jmp 0xeed0
leaq -0x60(%rbp), %rdi
callq 0xd8e0
jmp 0xef63
movl $0x0, -0x260(%rbp)
movl -0x260(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xefe7
movl -0x260(%rbp), %eax
movl %eax, %esi
leaq -0x60(%rbp), %rdi
callq 0x10780
movq %rax, -0x448(%rbp)
jmp 0xef95
movq -0x448(%rbp), %rcx
movq -0x2f0(%rbp), %rax
movq -0x2f8(%rbp), %rsi
movl -0x260(%rbp), %edx
imulq %rsi, %rdx
shlq $0x4, %rdx
addq %rdx, %rax
movl -0x258(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl -0x260(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x260(%rbp)
jmp 0xef6d
jmp 0xefe9
movl -0x258(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x258(%rbp)
jmp 0xeeb4
movq -0x298(%rbp), %rdi
movb $0x0, -0x261(%rbp)
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0xdae0
jmp 0xf01a
movl $0x0, -0x268(%rbp)
movl -0x268(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xf111
movl $0x0, -0x26c(%rbp)
movl -0x26c(%rbp), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jae 0xf0fb
movq -0x2f0(%rbp), %rdi
movq -0x2f8(%rbp), %rcx
movl -0x268(%rbp), %eax
imulq %rcx, %rax
shlq $0x4, %rax
addq %rax, %rdi
movl -0x26c(%rbp), %eax
shlq $0x4, %rax
addq %rax, %rdi
callq 0x11040
movsd %xmm0, -0x450(%rbp)
jmp 0xf08d
movq -0x298(%rbp), %rdi
movl -0x268(%rbp), %eax
movl %eax, %esi
callq 0x7d10
movq %rax, %rdi
movl -0x26c(%rbp), %eax
movl %eax, %esi
callq 0x6fb0
movq %rax, -0x458(%rbp)
jmp 0xf0ba
movq -0x458(%rbp), %rax
movsd -0x450(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x26c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x26c(%rbp)
jmp 0xf040
movq -0x298(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
callq 0x76f0
jmp 0xf152
jmp 0xf0fd
movl -0x268(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x268(%rbp)
jmp 0xf024
movb $0x1, -0x261(%rbp)
testb $0x1, -0x261(%rbp)
jne 0xf12d
movq -0x298(%rbp), %rdi
callq 0x76f0
leaq -0x70(%rbp), %rdi
callq 0x10830
leaq -0x60(%rbp), %rdi
callq 0x10830
movq -0x290(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, %rsp
movq %rbp, %rsp
popq %rbp
retq
leaq -0x70(%rbp), %rdi
callq 0x10830
leaq -0x60(%rbp), %rdi
callq 0x10830
movq -0x78(%rbp), %rdi
callq 0x3530
nopl (%rax)