// File: ekg[P]sgd2/src/sgd2.hpp
// Function: sgd2::MSSP_unweighted(std::vector<std::vector<unsigned long, std::allocator<unsigned long>>, std::allocator<std::vector<unsigned long, std::allocator<unsigned long>>>> const&, std::vector<unsigned long, std::allocator<unsigned long>> const&)
std::vector<term_sparse> MSSP_unweighted(const std::vector<std::vector<uint64_t>>& graph, const std::vector<uint64_t>& closest_pivots)
{
    uint64_t n = graph.size();

    // get pivots and their regions, but in sets
    std::unordered_map<uint64_t, std::unordered_set<uint64_t>> regions;
    for (uint64_t i = 0; i < n; i++)
    {
        if (regions.find(closest_pivots[i]) == regions.end())
        {
            regions[closest_pivots[i]] = std::unordered_set<uint64_t>();
        }
        regions[closest_pivots[i]].insert(i);
    }

    std::unordered_map<uint64_t, std::unordered_map<uint64_t, term_sparse>> termsDict;
    for (const auto& region : regions)
    {
        // q contains next to visit
        std::queue<uint64_t> q;
        std::vector<uint64_t> d(n, -1);

        uint64_t p = region.first;
        q.push(p);
        d[p] = 0;

        // q2 contains visited vertices' distances for s calculation
        std::queue<uint64_t> q2;
        uint64_t s = 0;
        q2.push(0);

        while (!q.empty())
        {
            uint64_t current = q.front();
            q.pop();

            for (uint64_t next : graph[current])
            {
                if (d[next] == -1)
                {
                    q.push(next);
                    d[next] = d[current] + 1;

                    // empty the second queue enough to calculate s
                    while (!q2.empty() && q2.front() <= d[next]/2)
                    {
                        q2.pop();
                        s += 1;
                    }
                    if (region.second.find(next) != region.second.end())
                    {
                        q2.push(d[next]);
                    }

                    uint64_t i = next;
                    if (i < p)
                    {
                        if (termsDict.find(i) == termsDict.end())
                            termsDict[i] = std::unordered_map<uint64_t, term_sparse>();
                        if (termsDict[i].find(p) == termsDict[i].end())
                            termsDict[i].insert({ p, term_sparse(i, p, d[next]) });

                        termsDict[i].at(p).w_ij = s / ((double)d[next] * d[next]);
                    }
                    else
                    {
                        if (termsDict.find(p) == termsDict.end())
                            termsDict[p] = std::unordered_map<uint64_t, term_sparse>();
                        if (termsDict[p].find(i) == termsDict[p].end())
                            termsDict[p].insert({ i, term_sparse(p, i, d[next]) });

                        termsDict[p].at(i).w_ji = s / ((double)d[next] * d[next]);
                    }
                }
            }
        }
    }
    // 1-stress
    for (uint64_t i=0; i<n; i++)
    {
        for (uint64_t j : graph[i])
        {
            if (i < j)
            {
                if (termsDict.find(i) == termsDict.end())
                    termsDict[i] = std::unordered_map<uint64_t, term_sparse>();
                if (termsDict[i].find(j) == termsDict[i].end())
                    termsDict[i].insert({ j, term_sparse(i, j, 1) });
                else
                    termsDict[i].at(j).d = 1;

                termsDict[i].at(j).w_ij = termsDict[i].at(j).w_ji = 1;
            }
        }
    }
    std::vector<term_sparse> terms;
    for (const auto& i : termsDict)
    {
        for (const auto& j : i.second)
        {
            terms.push_back(j.second);
        }
    }
    return terms;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x730, %rsp            # imm = 0x730
movq %rdi, -0x510(%rbp)
movq %rdi, %rax
movq %rax, -0x508(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rdi
callq 0xb050
movq %rax, -0x20(%rbp)
leaq -0x58(%rbp), %rdi
callq 0xb1f0
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x20(%rbp), %rax
jae 0x5630
movq -0x18(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0xb270
movq %rax, %rsi
leaq -0x58(%rbp), %rdi
callq 0xb240
movq %rax, -0x518(%rbp)
jmp 0x54f6
movq -0x518(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq -0x58(%rbp), %rdi
callq 0xb290
movq %rax, -0x80(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0xb210
testb $0x1, %al
jne 0x5524
jmp 0x55c4
xorps %xmm0, %xmm0
movaps %xmm0, -0xa0(%rbp)
movaps %xmm0, -0xb0(%rbp)
movaps %xmm0, -0xc0(%rbp)
movq $0x0, -0x90(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0xb2c0
movq -0x18(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0xb270
movq %rax, %rsi
leaq -0x58(%rbp), %rdi
callq 0xb2e0
movq %rax, -0x520(%rbp)
jmp 0x5575
movq -0x520(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xb310
leaq -0xc0(%rbp), %rdi
callq 0xb340
jmp 0x55c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x6717
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0xb340
jmp 0x6717
movq -0x18(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0xb270
movq %rax, %rsi
leaq -0x58(%rbp), %rdi
callq 0xb2e0
movq %rax, -0x528(%rbp)
jmp 0x55e6
movq -0x528(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x9b40
movb %dl, -0x531(%rbp)
movq %rax, -0x530(%rbp)
jmp 0x5605
movb -0x531(%rbp), %al
movq -0x530(%rbp), %rcx
movq %rcx, -0xd0(%rbp)
movb %al, -0xc8(%rbp)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x54c6
leaq -0x108(%rbp), %rdi
callq 0xb360
leaq -0x58(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rdi
callq 0xb380
movq %rax, -0x118(%rbp)
movq -0x110(%rbp), %rdi
callq 0xb290
movq %rax, -0x120(%rbp)
leaq -0x118(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0xb3b0
testb $0x1, %al
jne 0x5689
jmp 0x61dd
leaq -0x118(%rbp), %rdi
callq 0xb3e0
movq %rax, -0x128(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x9eb0
jmp 0x56aa
movq -0x20(%rbp), %rax
movq %rax, -0x548(%rbp)
movq $-0x1, -0x198(%rbp)
leaq -0x199(%rbp), %rdi
movq %rdi, -0x540(%rbp)
callq 0x9df0
movq -0x548(%rbp), %rsi
movq -0x540(%rbp), %rcx
leaq -0x190(%rbp), %rdi
leaq -0x198(%rbp), %rdx
callq 0x9e10
jmp 0x56f6
leaq -0x199(%rbp), %rdi
callq 0x9e90
movq -0x128(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1a8(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x9f00
jmp 0x5728
movq -0x1a8(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
movq $0x0, (%rax)
leaq -0x1f8(%rbp), %rdi
callq 0x9eb0
jmp 0x5750
movq $0x0, -0x200(%rbp)
movq $0x0, -0x208(%rbp)
leaq -0x1f8(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0xb410
jmp 0x577b
jmp 0x577d
leaq -0x178(%rbp), %rdi
callq 0x9f30
movb %al, -0x549(%rbp)
jmp 0x5791
movb -0x549(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x57a2
jmp 0x617f
leaq -0x178(%rbp), %rdi
callq 0x9f70
movq %rax, -0x558(%rbp)
jmp 0x57b7
movq -0x558(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x210(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x9f90
jmp 0x57d6
movq -0x10(%rbp), %rdi
movq -0x210(%rbp), %rsi
callq 0xb0f0
movq %rax, -0x218(%rbp)
movq -0x218(%rbp), %rdi
callq 0xb110
movq %rax, -0x220(%rbp)
movq -0x218(%rbp), %rdi
callq 0xb140
movq %rax, -0x228(%rbp)
leaq -0x220(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0xb170
testb $0x1, %al
jne 0x582f
jmp 0x617a
leaq -0x220(%rbp), %rdi
callq 0xb1b0
movq (%rax), %rax
movq %rax, -0x230(%rbp)
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
cmpq $-0x1, (%rax)
jne 0x6167
leaq -0x178(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x9f00
jmp 0x5877
movq -0x210(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
movq (%rax), %rax
addq $0x1, %rax
movq %rax, -0x560(%rbp)
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
movq -0x560(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x1f8(%rbp), %rdi
callq 0x9f30
movb %al, -0x561(%rbp)
jmp 0x58c9
movb -0x561(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x562(%rbp)
jne 0x5933
jmp 0x58de
leaq -0x1f8(%rbp), %rdi
callq 0x9f70
movq %rax, -0x570(%rbp)
jmp 0x58f3
movq -0x570(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x578(%rbp)
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
movq %rax, %rcx
movq -0x578(%rbp), %rax
movq (%rcx), %rcx
shrq %rcx
cmpq %rcx, %rax
setbe %al
movb %al, -0x562(%rbp)
movb -0x562(%rbp), %al
testb $0x1, %al
jne 0x593f
jmp 0x59b4
leaq -0x1f8(%rbp), %rdi
callq 0x9f90
jmp 0x594d
movq -0x200(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x200(%rbp)
jmp 0x58b5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x670b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x199(%rbp), %rdi
callq 0x9e90
jmp 0x61cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x61c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x61b4
movq -0x128(%rbp), %rdi
addq $0x8, %rdi
leaq -0x230(%rbp), %rsi
callq 0xb470
movq %rax, -0x580(%rbp)
jmp 0x59d4
movq -0x580(%rbp), %rax
movq %rax, -0x238(%rbp)
movq -0x128(%rbp), %rdi
addq $0x8, %rdi
callq 0xb4a0
movq %rax, -0x240(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0xb440
testb $0x1, %al
jne 0x5a12
jmp 0x5a38
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
movq %rax, %rsi
leaq -0x1f8(%rbp), %rdi
callq 0x9f00
jmp 0x5a36
jmp 0x5a38
movq -0x230(%rbp), %rax
movq %rax, -0x248(%rbp)
movq -0x248(%rbp), %rax
cmpq -0x1a8(%rbp), %rax
jae 0x5de2
leaq -0x108(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb500
movq %rax, -0x588(%rbp)
jmp 0x5a76
movq -0x588(%rbp), %rax
movq %rax, -0x250(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xb530
movq %rax, -0x258(%rbp)
leaq -0x250(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0xb4d0
testb $0x1, %al
jne 0x5ab3
jmp 0x5b3c
xorps %xmm0, %xmm0
movaps %xmm0, -0x270(%rbp)
movaps %xmm0, -0x280(%rbp)
movaps %xmm0, -0x290(%rbp)
movq $0x0, -0x260(%rbp)
leaq -0x290(%rbp), %rdi
callq 0xb560
leaq -0x108(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb580
movq %rax, -0x590(%rbp)
jmp 0x5afe
movq -0x590(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0xb5b0
leaq -0x290(%rbp), %rdi
callq 0xb5e0
jmp 0x5b3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x290(%rbp), %rdi
callq 0xb5e0
jmp 0x61b4
leaq -0x108(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb580
movq %rax, -0x598(%rbp)
jmp 0x5b58
movq -0x598(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb630
movq %rax, -0x5a0(%rbp)
jmp 0x5b74
movq -0x5a0(%rbp), %rax
movq %rax, -0x298(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb580
movq %rax, -0x5a8(%rbp)
jmp 0x5b9e
movq -0x5a8(%rbp), %rdi
callq 0xb660
movq %rax, -0x2a0(%rbp)
leaq -0x298(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0xb600
testb $0x1, %al
jne 0x5bcd
jmp 0x5cb2
leaq -0x108(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb580
movq %rax, -0x5b0(%rbp)
jmp 0x5be9
movq -0x248(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movq -0x1a8(%rbp), %rax
movq %rax, -0x5b8(%rbp)
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
movq -0x5c0(%rbp), %rsi
movq -0x5b8(%rbp), %rdx
movq (%rax), %xmm0
movaps 0x1840f(%rip), %xmm1    # 0x1e040
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x18413(%rip), %xmm1    # 0x1e050
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
leaq -0x2f8(%rbp), %rdi
callq 0xb6d0
jmp 0x5c5a
leaq -0x2d0(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
leaq -0x2f8(%rbp), %rdx
callq 0xb720
jmp 0x5c76
movq -0x5b0(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0xb690
movb %dl, -0x5c9(%rbp)
movq %rax, -0x5c8(%rbp)
jmp 0x5c98
movb -0x5c9(%rbp), %al
movq -0x5c8(%rbp), %rcx
movq %rcx, -0x308(%rbp)
movb %al, -0x300(%rbp)
movq -0x200(%rbp), %xmm0
movaps 0x1837f(%rip), %xmm1    # 0x1e040
movaps %xmm1, -0x610(%rbp)
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x1837c(%rip), %xmm1    # 0x1e050
movaps %xmm1, -0x600(%rbp)
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, -0x5e8(%rbp)
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
movq %rdi, -0x618(%rbp)
callq 0x9ee0
movq -0x618(%rbp), %rdi
movaps -0x610(%rbp), %xmm2
movaps -0x600(%rbp), %xmm1
movq (%rax), %xmm0
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, -0x5f0(%rbp)
movq -0x230(%rbp), %rsi
callq 0x9ee0
movaps -0x610(%rbp), %xmm4
movaps -0x600(%rbp), %xmm3
movsd -0x5f0(%rbp), %xmm1
movsd -0x5e8(%rbp), %xmm0
movq (%rax), %xmm2
punpckldq %xmm4, %xmm2    # xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
subpd %xmm3, %xmm2
movaps %xmm2, %xmm3
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x5e0(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb580
movq %rax, -0x5d8(%rbp)
jmp 0x5dad
movq -0x5d8(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb760
movq %rax, -0x620(%rbp)
jmp 0x5dc9
movq -0x620(%rbp), %rax
movsd -0x5e0(%rbp), %xmm0
movsd %xmm0, 0x18(%rax)
jmp 0x6165
leaq -0x108(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb500
movq %rax, -0x628(%rbp)
jmp 0x5dfe
movq -0x628(%rbp), %rax
movq %rax, -0x310(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xb530
movq %rax, -0x318(%rbp)
leaq -0x310(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0xb4d0
testb $0x1, %al
jne 0x5e3b
jmp 0x5ec4
xorps %xmm0, %xmm0
movaps %xmm0, -0x330(%rbp)
movaps %xmm0, -0x340(%rbp)
movaps %xmm0, -0x350(%rbp)
movq $0x0, -0x320(%rbp)
leaq -0x350(%rbp), %rdi
callq 0xb560
leaq -0x108(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb580
movq %rax, -0x630(%rbp)
jmp 0x5e86
movq -0x630(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0xb5b0
leaq -0x350(%rbp), %rdi
callq 0xb5e0
jmp 0x5ec4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x350(%rbp), %rdi
callq 0xb5e0
jmp 0x61b4
leaq -0x108(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb580
movq %rax, -0x638(%rbp)
jmp 0x5ee0
movq -0x638(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb630
movq %rax, -0x640(%rbp)
jmp 0x5efc
movq -0x640(%rbp), %rax
movq %rax, -0x358(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb580
movq %rax, -0x648(%rbp)
jmp 0x5f26
movq -0x648(%rbp), %rdi
callq 0xb660
movq %rax, -0x360(%rbp)
leaq -0x358(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0xb600
testb $0x1, %al
jne 0x5f55
jmp 0x603a
leaq -0x108(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb580
movq %rax, -0x650(%rbp)
jmp 0x5f71
movq -0x1a8(%rbp), %rax
movq %rax, -0x660(%rbp)
movq -0x248(%rbp), %rax
movq %rax, -0x658(%rbp)
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x9ee0
movq -0x660(%rbp), %rsi
movq -0x658(%rbp), %rdx
movq (%rax), %xmm0
movaps 0x18087(%rip), %xmm1    # 0x1e040
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x1808b(%rip), %xmm1    # 0x1e050
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
leaq -0x3b8(%rbp), %rdi
callq 0xb6d0
jmp 0x5fe2
leaq -0x390(%rbp), %rdi
leaq -0x248(%rbp), %rsi
leaq -0x3b8(%rbp), %rdx
callq 0xb720
jmp 0x5ffe
movq -0x650(%rbp), %rdi
leaq -0x390(%rbp), %rsi
callq 0xb690
movb %dl, -0x669(%rbp)
movq %rax, -0x668(%rbp)
jmp 0x6020
movb -0x669(%rbp), %al
movq -0x668(%rbp), %rcx
movq %rcx, -0x3c8(%rbp)
movb %al, -0x3c0(%rbp)
movq -0x200(%rbp), %xmm0
movaps 0x17ff7(%rip), %xmm1    # 0x1e040
movaps %xmm1, -0x6b0(%rbp)
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x17ff4(%rip), %xmm1    # 0x1e050
movaps %xmm1, -0x6a0(%rbp)
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, -0x688(%rbp)
movq -0x230(%rbp), %rsi
leaq -0x190(%rbp), %rdi
movq %rdi, -0x6b8(%rbp)
callq 0x9ee0
movq -0x6b8(%rbp), %rdi
movaps -0x6b0(%rbp), %xmm2
movaps -0x6a0(%rbp), %xmm1
movq (%rax), %xmm0
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, -0x690(%rbp)
movq -0x230(%rbp), %rsi
callq 0x9ee0
movaps -0x6b0(%rbp), %xmm4
movaps -0x6a0(%rbp), %xmm3
movsd -0x690(%rbp), %xmm1
movsd -0x688(%rbp), %xmm0
movq (%rax), %xmm2
punpckldq %xmm4, %xmm2    # xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
subpd %xmm3, %xmm2
movaps %xmm2, %xmm3
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x680(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xb580
movq %rax, -0x678(%rbp)
jmp 0x6135
movq -0x678(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb760
movq %rax, -0x6c0(%rbp)
jmp 0x6151
movq -0x6c0(%rbp), %rax
movsd -0x680(%rbp), %xmm0
movsd %xmm0, 0x20(%rax)
jmp 0x6167
jmp 0x6169
leaq -0x220(%rbp), %rdi
callq 0xb1d0
jmp 0x5813
jmp 0x577d
leaq -0x1f8(%rbp), %rdi
callq 0xa110
leaq -0x190(%rbp), %rdi
callq 0xa130
leaq -0x178(%rbp), %rdi
callq 0xa110
leaq -0x118(%rbp), %rdi
callq 0xb790
jmp 0x566d
leaq -0x1f8(%rbp), %rdi
callq 0xa110
leaq -0x190(%rbp), %rdi
callq 0xa130
leaq -0x178(%rbp), %rdi
callq 0xa110
jmp 0x670b
movq $0x0, -0x3d0(%rbp)
movq -0x3d0(%rbp), %rax
cmpq -0x20(%rbp), %rax
jae 0x659a
movq -0x10(%rbp), %rdi
movq -0x3d0(%rbp), %rsi
callq 0xb0f0
movq %rax, -0x3d8(%rbp)
movq -0x3d8(%rbp), %rdi
callq 0xb110
movq %rax, -0x3e0(%rbp)
movq -0x3d8(%rbp), %rdi
callq 0xb140
movq %rax, -0x3e8(%rbp)
leaq -0x3e0(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0xb170
testb $0x1, %al
jne 0x6252
jmp 0x6581
leaq -0x3e0(%rbp), %rdi
callq 0xb1b0
movq (%rax), %rax
movq %rax, -0x3f0(%rbp)
movq -0x3d0(%rbp), %rax
cmpq -0x3f0(%rbp), %rax
jae 0x656e
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb500
movq %rax, -0x6c8(%rbp)
jmp 0x6298
movq -0x6c8(%rbp), %rax
movq %rax, -0x3f8(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xb530
movq %rax, -0x400(%rbp)
leaq -0x3f8(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0xb4d0
testb $0x1, %al
jne 0x62d5
jmp 0x635e
xorps %xmm0, %xmm0
movaps %xmm0, -0x420(%rbp)
movaps %xmm0, -0x430(%rbp)
movaps %xmm0, -0x440(%rbp)
movq $0x0, -0x410(%rbp)
leaq -0x440(%rbp), %rdi
callq 0xb560
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb580
movq %rax, -0x6d0(%rbp)
jmp 0x6320
movq -0x6d0(%rbp), %rdi
leaq -0x440(%rbp), %rsi
callq 0xb5b0
leaq -0x440(%rbp), %rdi
callq 0xb5e0
jmp 0x635e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x440(%rbp), %rdi
callq 0xb5e0
jmp 0x670b
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb580
movq %rax, -0x6d8(%rbp)
jmp 0x637a
movq -0x6d8(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0xb630
movq %rax, -0x6e0(%rbp)
jmp 0x6396
movq -0x6e0(%rbp), %rax
movq %rax, -0x448(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb580
movq %rax, -0x6e8(%rbp)
jmp 0x63c0
movq -0x6e8(%rbp), %rdi
callq 0xb660
movq %rax, -0x450(%rbp)
leaq -0x448(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0xb600
testb $0x1, %al
jne 0x63ef
jmp 0x6489
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb580
movq %rax, -0x6f0(%rbp)
jmp 0x640b
movq -0x3d0(%rbp), %rsi
movq -0x3f0(%rbp), %rdx
leaq -0x4a8(%rbp), %rdi
movsd 0x17be0(%rip), %xmm0    # 0x1e008
callq 0xb6d0
jmp 0x642f
leaq -0x480(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
leaq -0x4a8(%rbp), %rdx
callq 0xb720
jmp 0x644b
movq -0x6f0(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0xb690
movb %dl, -0x6f9(%rbp)
movq %rax, -0x6f8(%rbp)
jmp 0x646d
movb -0x6f9(%rbp), %al
movq -0x6f8(%rbp), %rcx
movq %rcx, -0x4b8(%rbp)
movb %al, -0x4b0(%rbp)
jmp 0x64d5
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb580
movq %rax, -0x708(%rbp)
jmp 0x64a5
movq -0x708(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0xb760
movq %rax, -0x710(%rbp)
jmp 0x64c1
movq -0x710(%rbp), %rax
movsd 0x17b38(%rip), %xmm0    # 0x1e008
movsd %xmm0, 0x10(%rax)
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb580
movq %rax, -0x718(%rbp)
jmp 0x64f1
movq -0x718(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0xb760
movq %rax, -0x720(%rbp)
jmp 0x650d
movq -0x720(%rbp), %rax
movabsq $0x3ff0000000000000, %rcx # imm = 0x3FF0000000000000
movq %rcx, 0x20(%rax)
leaq -0x108(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xb580
movq %rax, -0x728(%rbp)
jmp 0x653e
movq -0x728(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0xb760
movq %rax, -0x730(%rbp)
jmp 0x655a
movq -0x730(%rbp), %rax
movsd 0x17a9f(%rip), %xmm0    # 0x1e008
movsd %xmm0, 0x18(%rax)
jmp 0x6570
leaq -0x3e0(%rbp), %rdi
callq 0xb1d0
jmp 0x6236
jmp 0x6583
movq -0x3d0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x3d0(%rbp)
jmp 0x61e8
movq -0x510(%rbp), %rdi
movb $0x0, -0x4b9(%rbp)
callq 0xb7c0
leaq -0x108(%rbp), %rax
movq %rax, -0x4c8(%rbp)
movq -0x4c8(%rbp), %rdi
callq 0xb7e0
movq %rax, -0x4d0(%rbp)
movq -0x4c8(%rbp), %rdi
callq 0xb530
movq %rax, -0x4d8(%rbp)
leaq -0x4d0(%rbp), %rdi
leaq -0x4d8(%rbp), %rsi
callq 0xb810
testb $0x1, %al
jne 0x65fd
jmp 0x66ca
leaq -0x4d0(%rbp), %rdi
callq 0xb840
movq %rax, -0x4e0(%rbp)
movq -0x4e0(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x4e8(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0xb870
movq %rax, -0x4f0(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0xb8a0
movq %rax, -0x4f8(%rbp)
leaq -0x4f0(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0xb8d0
testb $0x1, %al
jne 0x6661
jmp 0x66b7
leaq -0x4f0(%rbp), %rdi
callq 0xb900
movq -0x510(%rbp), %rdi
movq %rax, -0x500(%rbp)
movq -0x500(%rbp), %rsi
addq $0x8, %rsi
callq 0xb930
jmp 0x668d
jmp 0x668f
leaq -0x4f0(%rbp), %rdi
callq 0xb9a0
jmp 0x6648
movq -0x510(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
callq 0xba00
jmp 0x670b
jmp 0x66b9
leaq -0x4d0(%rbp), %rdi
callq 0xb9d0
jmp 0x65e1
movb $0x1, -0x4b9(%rbp)
testb $0x1, -0x4b9(%rbp)
jne 0x66e6
movq -0x510(%rbp), %rdi
callq 0xba00
leaq -0x108(%rbp), %rdi
callq 0xba60
leaq -0x58(%rbp), %rdi
callq 0xba80
movq -0x508(%rbp), %rax
addq $0x730, %rsp            # imm = 0x730
popq %rbp
retq
leaq -0x108(%rbp), %rdi
callq 0xba60
leaq -0x58(%rbp), %rdi
callq 0xba80
movq -0x70(%rbp), %rdi
callq 0x22a0
nopl (%rax)