// File: /workspace/github_cpp_makefile_star2_O3/graphitemaster[P]smbf/smbf.cpp
// Function: obj::load(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int&, int&)
bool obj::load(const u::string &file, int &before, int &after) {
    u::file fp = u::fopen(file, "r");
    if (!fp)
        return false;

    // Processed vertices, normals and coordinates from the OBJ file
    u::vector<m::vec3> vertices;
    u::vector<m::vec3> normals;
    u::vector<m::vec3> coordinates;
    u::vector<m::vec3> tangents;
    u::vector<float> bitangents;

    // Unique vertices are stored in a map keyed by face.
    u::map<face, size_t> uniques;

    size_t count = 0;
    size_t group = 0;
    while (auto get = u::getline(fp)) {
        auto &line = *get;
        // Skip whitespace
        while (line.size() && strchr(" \t", line[0]))
            line.erase(line.begin());
        // Skip comments
        if (strchr("#$", line[0]))
            continue;
        // Skip empty lines
        if (line.empty())
            continue;

        // Process the individual lines
        float x = 0.0f;
        float y = 0.0f;
        float z = 0.0f;
        if (u::sscanf(line, "v %f %f %f", &x, &y, &z) == 3) {
            // v float float float
            vertices.push_back({x, y, z * -1.0f});
        } else if (u::sscanf(line, "vn %f %f %f", &x, &y, &z) == 3) {
            // vn float float float
            normals.push_back({x * -1.0f, y * -1.0f, z});
        } else if (u::sscanf(line, "vt %f %f", &x, &y) == 2) {
            // vt float float
            coordinates.push_back({x, 1.0f - y, 0.0f});
        } else if (line[0] == 'g') {
            group++;
        } else if (line[0] == 'f' && group == 0) { // Only process the first group faces
            u::vector<size_t> v;
            u::vector<size_t> n;
            u::vector<size_t> t;

            // Note: 1 to skip "f"
            auto contents = u::split(line);
            for (size_t i = 1; i < contents.size(); i++) {
                int vi = 0;
                int ni = 0;
                int ti = 0;
                if (u::sscanf(contents[i], "%i/%i/%i", &vi, &ti, &ni) == 3) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                    t.push_back(ti < 0 ? t.size() + ti : ti - 1);
                    n.push_back(ni < 0 ? n.size() + ni : ni - 1);
                } else if (u::sscanf(contents[i], "%i//%i", &vi, &ni) == 2) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                    n.push_back(ni < 0 ? n.size() + ni : ni - 1);
                } else if (u::sscanf(contents[i], "%i/%i", &vi, &ti) == 2) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                    t.push_back(ti < 0 ? t.size() + ti : ti - 1);
                } else if (u::sscanf(contents[i], "%i", &vi) == 1) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                }
            }

            // Triangulate the mesh
            for (size_t i = 1; i < v.size() - 1; ++i) {
                auto index = m_indices.size();
                m_indices.resize(index + 3);
                auto triangulate = [&v, &n, &t, &uniques, &count](size_t index, size_t &out) {
                    face triangle;
                    triangle.vertex = v[index];
                    if (n.size()) triangle.normal = n[index];
                    if (t.size()) triangle.coordinate = t[index];
                    // Only insert in the map if it doesn't exist
                    if (uniques.find(triangle) == uniques.end())
                        uniques[triangle] = count++;
                    out = uniques[triangle];
                };
                triangulate(0,     m_indices[index + 0]);
                triangulate(i + 0, m_indices[index + 1]);
                triangulate(i + 1, m_indices[index + 2]);
            }
        }
    }

    // Construct the model, indices are already generated
    m_positions.resize(count);
    m_normals.resize(count);
    m_coordinates.resize(count);
    for (auto &it : uniques) {
        const auto &first = it.first;
        const auto &second = it.second;
        m_positions[second] = vertices[first.vertex];
        if (normals.size())
            m_normals[second] = normals[first.normal];
        if (coordinates.size())
            m_coordinates[second] = coordinates[first.coordinate];
    }

    // Optimize the indices
    vertexCache cache;
    vertexCacheOptimizer vco;
    vco.optimize(m_indices);

    // Change winding order
    for (size_t i = 0; i < m_indices.size(); i += 3)
        u::swap(m_indices[i], m_indices[i + 2]);

    // Calculate tangents
    m_tangents.resize(count);
    m_bitangents.resize(count);
    createTangents(m_positions, m_coordinates, m_normals, m_indices, m_tangents, m_bitangents);

    before = cache.getCacheMissCount(m_indices);
    after = vco.getCacheMissCount();

    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x458, %rsp            # imm = 0x458
movq %rcx, %r14
movq %rdx, %r12
movq %rdi, 0x80(%rsp)
leaq 0x3f2e(%rip), %rdx      # 0x7150
leaq 0xa8(%rsp), %rbx
movq %rbx, %rdi
callq 0x244e
movq (%rbx), %r15
testq %r15, %r15
je 0x45fd
movq %r12, 0x118(%rsp)
movq %r14, 0x108(%rsp)
movq %r15, 0x110(%rsp)
pxor %xmm0, %xmm0
leaq 0xf0(%rsp), %rcx
movdqa %xmm0, (%rcx)
xorl %eax, %eax
movq %rax, 0x10(%rcx)
leaq 0xd0(%rsp), %rcx
movq %rax, 0x10(%rcx)
movdqa %xmm0, (%rcx)
leaq 0xb0(%rsp), %rcx
movq %rax, 0x10(%rcx)
movdqa %xmm0, (%rcx)
leaq 0x150(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
movdqu %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movdqu %xmm0, -0x8(%rax)
leaq 0x2a8(%rsp), %rbp
leaq 0xc(%rsp), %r15
leaq 0x8(%rsp), %r14
movabsq $0x100000201, %r13      # imm = 0x100000201
movabsq $0x1800000000, %rbx     # imm = 0x1800000000
movq $0x0, 0x50(%rsp)
movq $0x0, 0x28(%rsp)
leaq 0x2a0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x24b5
movb 0x2a0(%rsp), %r12b
cmpb $0x1, %r12b
jne 0x3da0
movq 0x2a8(%rsp), %rcx
movq 0x2b0(%rsp), %rax
movzbl (%rcx), %ecx
testq %rax, %rax
je 0x3346
cmpl $0x24, %ecx
ja 0x336d
movl %ecx, %ecx
btq %rcx, %r13
jae 0x3363
movl $0x1, %edx
movq %rbp, %rdi
xorl %esi, %esi
callq 0x2150
jmp 0x3310
cmpl $0x24, %ecx
ja 0x336d
movl %ecx, %ecx
movabsq $0x1800000001, %rdx     # imm = 0x1800000001
btq %rcx, %rdx
jb 0x3da0
jmp 0x336d
btq %rcx, %rbx
jb 0x3da0
testq %rax, %rax
je 0x3da0
xorl %eax, %eax
movl %eax, 0x5c(%rsp)
movl %eax, 0xc(%rsp)
movl %eax, 0x8(%rsp)
movq %rbp, %rdi
leaq 0x3dc4(%rip), %rsi      # 0x7152
movq %r15, %rbx
leaq 0x5c(%rsp), %r15
movq %r15, %rdx
movq %rbx, %rcx
movq %r14, %r8
xorl %eax, %eax
callq 0x50a4
cmpl $0x3, %eax
jne 0x3418
movd 0x5c(%rsp), %xmm0
movss 0xc(%rsp), %xmm1
movss 0x8(%rsp), %xmm2
xorps 0x3c5c(%rip), %xmm2     # 0x7020
movd %xmm0, 0x158(%rsp)
movss %xmm1, 0x15c(%rsp)
movss %xmm2, 0x160(%rsp)
movq 0xf8(%rsp), %rsi
cmpq 0x100(%rsp), %rsi
je 0x3546
movl 0x160(%rsp), %eax
movl %eax, 0x8(%rsi)
movq 0x158(%rsp), %rax
movq %rax, (%rsi)
addq $0xc, 0xf8(%rsp)
jmp 0x3498
movq %rbp, %rdi
leaq 0x3d3b(%rip), %rsi      # 0x715d
movq %r15, %rdx
movq %rbx, %rcx
movq %r14, %r8
xorl %eax, %eax
callq 0x50a4
cmpl $0x3, %eax
jne 0x34b1
movd 0x8(%rsp), %xmm0
movss 0xc(%rsp), %xmm1
movss 0x5c(%rsp), %xmm2
unpcklps %xmm1, %xmm2            # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
xorps 0x3bcd(%rip), %xmm2     # 0x7020
movlps %xmm2, 0x158(%rsp)
movd %xmm0, 0x160(%rsp)
movq 0xd8(%rsp), %rsi
cmpq 0xe0(%rsp), %rsi
je 0x358c
movl 0x160(%rsp), %eax
movl %eax, 0x8(%rsi)
movq 0x158(%rsp), %rax
movq %rax, (%rsi)
addq $0xc, 0xd8(%rsp)
leaq 0xc(%rsp), %r15
leaq 0x8(%rsp), %r14
movabsq $0x1800000000, %rbx     # imm = 0x1800000000
jmp 0x3da0
movq %rbp, %rdi
leaq 0x3cae(%rip), %rsi      # 0x7169
movq %r15, %rdx
movq %rbx, %rcx
xorl %eax, %eax
callq 0x50a4
cmpl $0x2, %eax
movq %rbx, %r15
leaq 0x158(%rsp), %rdx
jne 0x3574
movd 0x5c(%rsp), %xmm0
movss 0x3b92(%rip), %xmm1     # 0x707c
subss 0xc(%rsp), %xmm1
movd %xmm0, 0x158(%rsp)
movss %xmm1, 0x15c(%rsp)
movl $0x0, 0x160(%rsp)
movq 0xb8(%rsp), %rsi
cmpq 0xc0(%rsp), %rsi
je 0x3a8e
movl 0x160(%rsp), %eax
movl %eax, 0x8(%rsi)
movq 0x158(%rsp), %rax
movq %rax, (%rsi)
addq $0xc, 0xb8(%rsp)
jmp 0x349d
leaq 0xf0(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x6252
leaq 0xc(%rsp), %r15
leaq 0x8(%rsp), %r14
movabsq $0x1800000000, %rbx     # imm = 0x1800000000
jmp 0x3da0
movq 0x2a8(%rsp), %rbx
movb (%rbx), %al
cmpb $0x67, %al
jne 0x35ba
incq 0x28(%rsp)
jmp 0x349d
leaq 0xd0(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x6252
leaq 0xc(%rsp), %r15
leaq 0x8(%rsp), %r14
movabsq $0x1800000000, %rbx     # imm = 0x1800000000
jmp 0x3da0
cmpb $0x66, %al
sete %al
cmpq $0x0, 0x28(%rsp)
sete %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x349d
pxor %xmm0, %xmm0
movdqa %xmm0, 0x10(%rsp)
xorl %eax, %eax
movq %rax, 0x20(%rsp)
movq %rax, 0x40(%rsp)
movdqa %xmm0, 0x30(%rsp)
movq %rax, 0x70(%rsp)
movdqa %xmm0, 0x60(%rsp)
movq %rax, 0xa0(%rsp)
movdqa %xmm0, 0x90(%rsp)
movq %rbx, %rsi
movzbl (%rbx), %eax
incq %rbx
testb $-0x21, %al
jne 0x360e
leaq 0x168(%rsp), %rax
movq %rax, 0x158(%rsp)
leaq -0x1(%rbx), %r15
leaq 0x158(%rsp), %r14
movq %r14, %rdi
movq %r15, %rdx
callq 0x59e6
leaq 0x90(%rsp), %rdi
movq %r14, %rsi
callq 0x539c
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x3674
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x2120
cmpb $0x0, (%r15)
jne 0x360b
movq 0x90(%rsp), %rdi
movq 0x98(%rsp), %rax
subq %rdi, %rax
cmpq $0x21, %rax
jb 0x3aaf
movl $0x1, %r14d
movl $0x20, %ebx
movq %r14, 0x28(%rsp)
xorl %eax, %eax
movl %eax, 0x4c(%rsp)
movl %eax, 0x8c(%rsp)
movl %eax, 0x58(%rsp)
addq %rbx, %rdi
leaq 0x3ab0(%rip), %rsi      # 0x7172
leaq 0x4c(%rsp), %r14
movq %r14, %rdx
leaq 0x58(%rsp), %rcx
leaq 0x8c(%rsp), %r15
movq %r15, %r8
xorl %eax, %eax
callq 0x50a4
cmpl $0x3, %eax
jne 0x3703
movslq 0x4c(%rsp), %rcx
testq %rcx, %rcx
js 0x378b
decl %ecx
movslq %ecx, %rax
movq 0x18(%rsp), %rsi
jmp 0x379f
movq 0x90(%rsp), %rdi
addq %rbx, %rdi
leaq 0x3a66(%rip), %rsi      # 0x717b
movq %r14, %rdx
movq %r15, %rcx
xorl %eax, %eax
callq 0x50a4
cmpl $0x2, %eax
jne 0x3744
movslq 0x4c(%rsp), %rcx
testq %rcx, %rcx
js 0x38ca
decl %ecx
movslq %ecx, %rax
movq 0x18(%rsp), %rsi
jmp 0x38de
movq 0x90(%rsp), %rdi
addq %rbx, %rdi
leaq 0x3a1f(%rip), %rsi      # 0x7175
movq %r14, %rdx
leaq 0x58(%rsp), %rcx
xorl %eax, %eax
callq 0x50a4
cmpl $0x2, %eax
jne 0x3883
movslq 0x4c(%rsp), %rcx
testq %rcx, %rcx
js 0x399a
decl %ecx
movslq %ecx, %rax
movq 0x18(%rsp), %rsi
jmp 0x39ae
movq 0x18(%rsp), %rsi
movq %rsi, %rax
subq 0x10(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq 0x28(%rsp), %r14
movq %rax, 0x158(%rsp)
cmpq 0x20(%rsp), %rsi
je 0x37c1
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x18(%rsp)
jmp 0x37d3
leaq 0x10(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
movslq 0x58(%rsp), %rcx
testq %rcx, %rcx
js 0x37e9
decl %ecx
movslq %ecx, %rax
movq 0x68(%rsp), %rsi
jmp 0x37fd
movq 0x68(%rsp), %rsi
movq %rsi, %rax
subq 0x60(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq %rax, 0x158(%rsp)
cmpq 0x70(%rsp), %rsi
je 0x381a
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x382c
leaq 0x60(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
movslq 0x8c(%rsp), %rcx
testq %rcx, %rcx
js 0x3845
decl %ecx
movslq %ecx, %rax
movq 0x38(%rsp), %rsi
jmp 0x3859
movq 0x38(%rsp), %rsi
movq %rsi, %rax
subq 0x30(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq %rax, 0x158(%rsp)
cmpq 0x40(%rsp), %rsi
jne 0x394e
leaq 0x30(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
jmp 0x395a
movq 0x90(%rsp), %rdi
addq %rbx, %rdi
leaq 0x38ea(%rip), %rsi      # 0x717f
movq %r14, %rdx
xorl %eax, %eax
callq 0x50a4
cmpl $0x1, %eax
movq 0x28(%rsp), %r14
jne 0x395a
movslq 0x4c(%rsp), %rcx
testq %rcx, %rcx
js 0x3a43
decl %ecx
movslq %ecx, %rax
movq 0x18(%rsp), %rsi
jmp 0x3a57
movq 0x18(%rsp), %rsi
movq %rsi, %rax
subq 0x10(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq 0x28(%rsp), %r14
movq %rax, 0x158(%rsp)
cmpq 0x20(%rsp), %rsi
je 0x3900
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x18(%rsp)
jmp 0x3912
leaq 0x10(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
movslq 0x8c(%rsp), %rcx
testq %rcx, %rcx
js 0x392b
decl %ecx
movslq %ecx, %rax
movq 0x38(%rsp), %rsi
jmp 0x393f
movq 0x38(%rsp), %rsi
movq %rsi, %rax
subq 0x30(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq %rax, 0x158(%rsp)
cmpq 0x40(%rsp), %rsi
je 0x3986
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x38(%rsp)
incq %r14
movq 0x90(%rsp), %rdi
movq 0x98(%rsp), %rax
subq %rdi, %rax
sarq $0x5, %rax
addq $0x20, %rbx
cmpq %rax, %r14
jb 0x36a2
jmp 0x3aaf
leaq 0x30(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
jmp 0x395a
movq 0x18(%rsp), %rsi
movq %rsi, %rax
subq 0x10(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq 0x28(%rsp), %r14
movq %rax, 0x158(%rsp)
cmpq 0x20(%rsp), %rsi
je 0x39d0
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x18(%rsp)
jmp 0x39e2
leaq 0x10(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
movslq 0x58(%rsp), %rcx
testq %rcx, %rcx
js 0x39f8
decl %ecx
movslq %ecx, %rax
movq 0x68(%rsp), %rsi
jmp 0x3a0c
movq 0x68(%rsp), %rsi
movq %rsi, %rax
subq 0x60(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq %rax, 0x158(%rsp)
cmpq 0x70(%rsp), %rsi
je 0x3a2c
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x395a
leaq 0x60(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
jmp 0x395a
movq 0x18(%rsp), %rsi
movq %rsi, %rax
subq 0x10(%rsp), %rax
sarq $0x3, %rax
addq %rcx, %rax
movq %rax, 0x158(%rsp)
cmpq 0x20(%rsp), %rsi
je 0x3a77
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x18(%rsp)
jmp 0x395a
leaq 0x10(%rsp), %rdi
leaq 0x158(%rsp), %rdx
callq 0x5d52
jmp 0x395a
leaq 0xb0(%rsp), %rdi
callq 0x6252
leaq 0x8(%rsp), %r14
movabsq $0x1800000000, %rbx     # imm = 0x1800000000
jmp 0x3da0
movq 0x18(%rsp), %rax
subq 0x10(%rsp), %rax
sarq $0x3, %rax
addq $-0x3, %rax
cmpq $-0x3, %rax
ja 0x3d31
movl $0x1, %ebx
movq 0x80(%rsp), %r14
movq 0x8(%r14), %r15
subq (%r14), %r15
movq %r15, %rsi
sarq $0x3, %rsi
addq $0x3, %rsi
movq %r14, %rdi
callq 0x512c
movq (%r14), %r14
leaq 0x168(%rsp), %rax
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, -0x8(%rax)
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x158(%rsp)
movq 0x30(%rsp), %rax
cmpq %rax, 0x38(%rsp)
je 0x3b2d
movq (%rax), %rax
movq %rax, 0x160(%rsp)
movq 0x60(%rsp), %rax
cmpq %rax, 0x68(%rsp)
je 0x3b44
movq (%rax), %rax
movq %rax, 0x168(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x560c
testq %rax, %rax
jne 0x3b83
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x56c4
movq 0x50(%rsp), %rcx
movq %rcx, (%rax)
incq %rcx
movq %rcx, 0x50(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x56c4
movq (%rax), %rax
movq %rax, (%r14,%r15)
movq 0x80(%rsp), %rax
movq (%rax), %r14
leaq 0x168(%rsp), %rax
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, -0x8(%rax)
movq 0x10(%rsp), %rax
movq (%rax,%rbx,8), %rax
movq %rax, 0x158(%rsp)
movq 0x30(%rsp), %rax
cmpq %rax, 0x38(%rsp)
je 0x3be4
movq (%rax,%rbx,8), %rax
movq %rax, 0x160(%rsp)
movq 0x60(%rsp), %rax
cmpq %rax, 0x68(%rsp)
je 0x3bfc
movq (%rax,%rbx,8), %rax
movq %rax, 0x168(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x560c
testq %rax, %rax
jne 0x3c3b
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x56c4
movq 0x50(%rsp), %rcx
movq %rcx, (%rax)
incq %rcx
movq %rcx, 0x50(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x56c4
movq (%rax), %rax
movq %rax, 0x8(%r14,%r15)
movq 0x80(%rsp), %rax
movq (%rax), %r14
leaq 0x168(%rsp), %rax
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, -0x8(%rax)
movq 0x10(%rsp), %rax
movq 0x8(%rax,%rbx,8), %rax
movq %rax, 0x158(%rsp)
movq 0x30(%rsp), %rax
cmpq %rax, 0x38(%rsp)
je 0x3c9f
movq 0x8(%rax,%rbx,8), %rax
movq %rax, 0x160(%rsp)
movq 0x60(%rsp), %rax
cmpq %rax, 0x68(%rsp)
je 0x3cb8
movq 0x8(%rax,%rbx,8), %rax
movq %rax, 0x168(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x560c
testq %rax, %rax
jne 0x3cf7
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x56c4
movq 0x50(%rsp), %rcx
movq %rcx, (%rax)
incq %rcx
movq %rcx, 0x50(%rsp)
leaq 0x120(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x56c4
movq (%rax), %rax
movq %rax, 0x10(%r14,%r15)
movq 0x18(%rsp), %rax
subq 0x10(%rsp), %rax
incq %rbx
sarq $0x3, %rax
decq %rax
cmpq %rax, %rbx
jb 0x3ad0
leaq 0x90(%rsp), %rdi
callq 0x515e
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
leaq 0xc(%rsp), %r15
je 0x3d5a
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3d71
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
leaq 0x8(%rsp), %r14
movabsq $0x1800000000, %rbx     # imm = 0x1800000000
je 0x3d97
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq $0x0, 0x28(%rsp)
cmpb $0x1, 0x2a0(%rsp)
jne 0x3dcf
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
cmpq %rax, %rdi
je 0x3dcf
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x2120
testb %r12b, %r12b
jne 0x32e9
movq 0x80(%rsp), %r12
leaq 0x18(%r12), %rbp
movq %rbp, %rdi
movq 0x50(%rsp), %r13
movq %r13, %rsi
callq 0x51bc
leaq 0x30(%r12), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x51bc
leaq 0x48(%r12), %r15
movq %r15, %rdi
movq %r13, %rsi
callq 0x51bc
movq 0x130(%rsp), %rax
testq %rax, %rax
je 0x3eca
movq 0xf0(%rsp), %rcx
movq 0x8(%rax), %rdx
movq 0x20(%rax), %rsi
leaq (%rdx,%rdx,2), %rdx
movq (%rbp), %rdi
leaq (%rsi,%rsi,2), %rsi
movl 0x8(%rcx,%rdx,4), %r8d
movl %r8d, 0x8(%rdi,%rsi,4)
movq (%rcx,%rdx,4), %rcx
movq %rcx, (%rdi,%rsi,4)
movq 0xd0(%rsp), %rcx
cmpq %rcx, 0xd8(%rsp)
je 0x3e8b
movq 0x10(%rax), %rdx
movq 0x20(%rax), %rsi
leaq (%rdx,%rdx,2), %rdx
movq (%rbx), %rdi
leaq (%rsi,%rsi,2), %rsi
movl 0x8(%rcx,%rdx,4), %r8d
movl %r8d, 0x8(%rdi,%rsi,4)
movq (%rcx,%rdx,4), %rcx
movq %rcx, (%rdi,%rsi,4)
movq 0xb0(%rsp), %rcx
cmpq %rcx, 0xb8(%rsp)
je 0x3ec2
movq 0x18(%rax), %rdx
movq 0x20(%rax), %rsi
leaq (%rdx,%rdx,2), %rdx
movq (%r15), %rdi
leaq (%rsi,%rsi,2), %rsi
movl 0x8(%rcx,%rdx,4), %r8d
movl %r8d, 0x8(%rdi,%rsi,4)
movq (%rcx,%rdx,4), %rcx
movq %rcx, (%rdi,%rsi,4)
movq (%rax), %rax
jmp 0x3e1d
leaq 0x158(%rsp), %r14
movl $0x140, %edx            # imm = 0x140
movq %r14, %rdi
movl $0xff, %esi
callq 0x20a0
movq $0x0, 0x140(%r14)
leaq 0x300(%rsp), %r14
pxor %xmm0, %xmm0
movdqa %xmm0, -0x10(%r14)
movdqa %xmm0, -0x20(%r14)
movdqa %xmm0, -0x30(%r14)
movdqa %xmm0, -0x40(%r14)
movdqa %xmm0, -0x50(%r14)
movdqa %xmm0, -0x60(%r14)
movl $0x140, %edx            # imm = 0x140
movq %r14, %rdi
movl $0xff, %esi
callq 0x20a0
pxor %xmm0, %xmm0
movdqa %xmm0, 0x140(%r14)
leaq 0x2a0(%rsp), %rdi
movq %r12, %rsi
callq 0x28d6
movq (%r12), %rax
movq 0x8(%r12), %rcx
subq %rax, %rcx
je 0x3f7d
sarq $0x3, %rcx
xorl %edx, %edx
movq (%rax,%rdx,8), %rsi
movq 0x10(%rax,%rdx,8), %rdi
movq %rsi, 0x10(%rax,%rdx,8)
movq %rdi, (%rax,%rdx,8)
addq $0x3, %rdx
cmpq %rcx, %rdx
jb 0x3f62
leaq 0x60(%r12), %r14
movq %r14, %rdi
movq %r13, %rsi
callq 0x51bc
movq %r13, %rsi
leaq 0x78(%r12), %r13
movq %r13, %rdi
callq 0x5200
movq 0x18(%r12), %rcx
movq 0x20(%r12), %rax
movq %rax, 0x28(%rsp)
movq %rcx, 0x50(%rsp)
subq %rcx, %rax
sarq $0x2, %rax
movabsq $-0x5555555555555555, %r12 # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %r12
xorl %eax, %eax
leaq 0x10(%rsp), %rdi
movq %rax, 0x10(%rdi)
pxor %xmm0, %xmm0
movdqa %xmm0, (%rdi)
movq %rax, 0x40(%rsp)
movdqa %xmm0, 0x30(%rsp)
movq %r12, %rsi
callq 0x51bc
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
callq 0x51bc
movq 0x80(%rsp), %rax
movq (%rax), %rcx
cmpq %rcx, 0x8(%rax)
je 0x4279
xorl %eax, %eax
movaps 0x3019(%rip), %xmm0     # 0x7030
movsd 0x3021(%rip), %xmm1     # 0x7040
movss 0x3055(%rip), %xmm2     # 0x707c
movss 0x3059(%rip), %xmm3     # 0x7088
movq (%rcx,%rax,8), %rsi
movq 0x8(%rcx,%rax,8), %rdx
movq 0x10(%rcx,%rax,8), %rcx
movq (%r15), %r10
leaq (%rdx,%rdx,2), %rdi
leaq (%rsi,%rsi,2), %r8
movss (%r10,%rdi,4), %xmm6
movss 0x4(%r10,%rdi,4), %xmm10
movss (%r10,%r8,4), %xmm4
movss 0x4(%r10,%r8,4), %xmm5
subss %xmm4, %xmm6
leaq (%rcx,%rcx,2), %r9
movss (%r10,%r9,4), %xmm7
movss 0x4(%r10,%r9,4), %xmm9
subss %xmm4, %xmm7
subss %xmm5, %xmm10
subss %xmm5, %xmm9
movaps %xmm10, %xmm4
mulss %xmm7, %xmm4
movaps %xmm6, %xmm13
mulss %xmm9, %xmm13
subss %xmm4, %xmm13
movaps %xmm13, %xmm5
andps %xmm0, %xmm5
xorps %xmm4, %xmm4
ucomiss %xmm5, %xmm3
movaps %xmm2, %xmm8
movaps %xmm1, %xmm5
jae 0x4176
movaps 0x2f63(%rip), %xmm8     # 0x7020
xorps %xmm8, %xmm7
movq (%rbp), %r10
movss 0x8(%r10,%r9,4), %xmm11
movss 0x8(%r10,%r8,4), %xmm5
subss %xmm5, %xmm11
movss 0x8(%r10,%rdi,4), %xmm4
subss %xmm5, %xmm4
movss 0x2f90(%rip), %xmm12    # 0x707c
divss %xmm13, %xmm12
movaps %xmm10, %xmm13
xorps %xmm8, %xmm13
movsd (%r10,%r9,4), %xmm5
movsd (%r10,%r8,4), %xmm8
subps %xmm8, %xmm5
movsd (%r10,%rdi,4), %xmm14
subps %xmm8, %xmm14
shufps $0x0, %xmm10, %xmm10    # xmm10 = xmm10[0,0,0,0]
mulps %xmm5, %xmm10
movaps %xmm9, %xmm8
shufps $0x0, %xmm9, %xmm8      # xmm8 = xmm8[0,0],xmm9[0,0]
mulps %xmm14, %xmm8
subps %xmm10, %xmm8
shufps $0x0, %xmm12, %xmm12    # xmm12 = xmm12[0,0,0,0]
mulps %xmm12, %xmm8
movaps %xmm6, %xmm10
shufps $0x0, %xmm6, %xmm10     # xmm10 = xmm10[0,0],xmm6[0,0]
mulps %xmm5, %xmm10
movaps %xmm7, %xmm5
shufps $0x0, %xmm7, %xmm5      # xmm5 = xmm5[0,0],xmm7[0,0]
mulps %xmm14, %xmm5
addps %xmm10, %xmm5
mulps %xmm12, %xmm5
unpcklps %xmm13, %xmm6           # xmm6 = xmm6[0],xmm13[0],xmm6[1],xmm13[1]
shufps $0x0, %xmm11, %xmm11    # xmm11 = xmm11[0,0,0,0]
mulps %xmm6, %xmm11
unpcklps %xmm9, %xmm7            # xmm7 = xmm7[0],xmm9[0],xmm7[1],xmm9[1]
shufps $0x0, %xmm4, %xmm4      # xmm4 = xmm4[0,0,0,0]
mulps %xmm7, %xmm4
addps %xmm11, %xmm4
mulps %xmm12, %xmm4
movq 0x10(%rsp), %rdi
shlq $0x2, %rsi
leaq (%rsi,%rsi,2), %rsi
movsd (%rdi,%rsi), %xmm6
addps %xmm8, %xmm6
movlps %xmm6, (%rdi,%rsi)
movaps %xmm4, %xmm6
shufps $0x55, %xmm4, %xmm6     # xmm6 = xmm6[1,1],xmm4[1,1]
movss 0x8(%rdi,%rsi), %xmm7
addss %xmm6, %xmm7
movss %xmm7, 0x8(%rdi,%rsi)
movq 0x10(%rsp), %rdi
shlq $0x2, %rdx
leaq (%rdx,%rdx,2), %rdx
movsd (%rdi,%rdx), %xmm7
addps %xmm8, %xmm7
movlps %xmm7, (%rdi,%rdx)
movss 0x8(%rdi,%rdx), %xmm7
addss %xmm6, %xmm7
movss %xmm7, 0x8(%rdi,%rdx)
movq 0x10(%rsp), %rdi
shlq $0x2, %rcx
leaq (%rcx,%rcx,2), %rcx
movsd (%rdi,%rcx), %xmm7
addps %xmm8, %xmm7
movlps %xmm7, (%rdi,%rcx)
addss 0x8(%rdi,%rcx), %xmm6
movss %xmm6, 0x8(%rdi,%rcx)
movq 0x30(%rsp), %rdi
movsd (%rdi,%rsi), %xmm6
addps %xmm5, %xmm6
movlps %xmm6, (%rdi,%rsi)
movss 0x8(%rdi,%rsi), %xmm6
addss %xmm4, %xmm6
movss %xmm6, 0x8(%rdi,%rsi)
movq 0x30(%rsp), %rsi
movsd (%rsi,%rdx), %xmm6
addps %xmm5, %xmm6
movlps %xmm6, (%rsi,%rdx)
movss 0x8(%rsi,%rdx), %xmm6
addss %xmm4, %xmm6
movss %xmm6, 0x8(%rsi,%rdx)
movq 0x30(%rsp), %rdx
movsd (%rdx,%rcx), %xmm6
addps %xmm5, %xmm6
movlps %xmm6, (%rdx,%rcx)
addss 0x8(%rdx,%rcx), %xmm4
movss %xmm4, 0x8(%rdx,%rcx)
addq $0x3, %rax
movq 0x80(%rsp), %rdx
movq (%rdx), %rcx
movq 0x8(%rdx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %rdx, %rax
jb 0x402f
movq 0x28(%rsp), %rax
cmpq 0x50(%rsp), %rax
je 0x44bc
cmpq $0x1, %r12
adcq $0x0, %r12
xorl %eax, %eax
movaps 0x2d96(%rip), %xmm0     # 0x7030
movaps 0x2daf(%rip), %xmm1     # 0x7050
movss 0x2ddf(%rip), %xmm2     # 0x7088
movss 0x2dbf(%rip), %xmm3     # 0x7070
xorps %xmm4, %xmm4
leaq 0x2dd1(%rip), %rcx      # 0x708c
xorl %edx, %edx
movq 0x110(%rsp), %r15
movq 0x108(%rsp), %rbp
movq (%rbx), %rsi
movq 0x10(%rsp), %rdi
movss 0x8(%rdi,%rax), %xmm6
movss 0x8(%rsi,%rax), %xmm9
movsd (%rdi,%rax), %xmm5
movsd (%rsi,%rax), %xmm7
movaps %xmm5, %xmm8
mulps %xmm7, %xmm8
shufps $0x55, %xmm8, %xmm8     # xmm8 = xmm8[1,1,1,1]
movaps %xmm7, %xmm10
mulss %xmm5, %xmm10
addss %xmm8, %xmm10
movaps %xmm9, %xmm8
mulss %xmm6, %xmm8
addss %xmm10, %xmm8
mulss %xmm8, %xmm9
shufps $0x0, %xmm8, %xmm8      # xmm8 = xmm8[0,0,0,0]
mulps %xmm7, %xmm8
movaps %xmm5, %xmm7
subps %xmm8, %xmm7
movaps %xmm6, %xmm8
subss %xmm9, %xmm8
movaps %xmm7, %xmm9
andps %xmm0, %xmm9
cmpltps %xmm1, %xmm9
unpcklps %xmm9, %xmm9            # xmm9 = xmm9[0,0,1,1]
movmskpd %xmm9, %edi
testb $0x1, %dil
je 0x4362
shrb %dil
je 0x4362
movaps %xmm8, %xmm9
andps %xmm0, %xmm9
ucomiss %xmm9, %xmm2
ja 0x43ac
movaps %xmm7, %xmm9
mulps %xmm7, %xmm9
shufps $0x55, %xmm9, %xmm9     # xmm9 = xmm9[1,1,1,1]
movaps %xmm7, %xmm10
mulss %xmm7, %xmm10
addss %xmm9, %xmm10
movaps %xmm8, %xmm9
mulss %xmm8, %xmm9
addss %xmm10, %xmm9
sqrtss %xmm9, %xmm9
movss 0x2ce3(%rip), %xmm10    # 0x707c
divss %xmm9, %xmm10
mulss %xmm10, %xmm8
shufps $0x0, %xmm10, %xmm10    # xmm10 = xmm10[0,0,0,0]
mulps %xmm10, %xmm7
movq (%r14), %rdi
movlps %xmm7, (%rdi,%rax)
movss %xmm8, 0x8(%rdi,%rax)
movq (%r14), %rdi
movss (%rdi,%rax), %xmm7
movss 0x4(%rdi,%rax), %xmm8
mulss %xmm8, %xmm8
mulss %xmm7, %xmm7
addss %xmm8, %xmm7
movss 0x8(%rdi,%rax), %xmm8
mulss %xmm8, %xmm8
addss %xmm7, %xmm8
xorps %xmm7, %xmm7
sqrtss %xmm8, %xmm7
addss %xmm3, %xmm7
andps %xmm0, %xmm7
ucomiss %xmm7, %xmm2
jbe 0x4405
movaps %xmm5, %xmm7
shufps $0x55, %xmm5, %xmm7     # xmm7 = xmm7[1,1],xmm5[1,1]
jmp 0x442a
addq %rax, %rdi
movl $0x0, 0x8(%rdi)
movq $0x3f800000, (%rdi)     # imm = 0x3F800000
movq (%r14), %rdi
movss (%rdi,%rax), %xmm5
movss 0x4(%rdi,%rax), %xmm7
movss 0x8(%rdi,%rax), %xmm6
movss (%rsi,%rax), %xmm8
movss 0x4(%rsi,%rax), %xmm9
movss 0x8(%rsi,%rax), %xmm10
movaps %xmm7, %xmm11
mulss %xmm10, %xmm11
mulss %xmm5, %xmm10
mulss %xmm9, %xmm5
mulss %xmm6, %xmm9
subss %xmm11, %xmm9
mulss %xmm8, %xmm6
subss %xmm6, %xmm10
mulss %xmm7, %xmm8
movq 0x30(%rsp), %rdi
mulss 0x4(%rdi,%rax), %xmm10
mulss (%rdi,%rax), %xmm9
subss %xmm5, %xmm8
addss %xmm10, %xmm9
mulss 0x8(%rdi,%rax), %xmm8
addss %xmm9, %xmm8
xorl %esi, %esi
ucomiss %xmm8, %xmm4
seta %sil
movss (%rcx,%rsi,4), %xmm5
movq (%r13), %rsi
movss %xmm5, (%rsi,%rdx,4)
incq %rdx
addq $0xc, %rax
cmpq %rdx, %r12
jne 0x42cd
jmp 0x44d6
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
movq 0x110(%rsp), %r15
movq 0x108(%rsp), %rbp
je 0x44e3
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x44fa
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
leaq 0x158(%rsp), %rdi
movq 0x80(%rsp), %rsi
callq 0x281c
movq 0x118(%rsp), %rcx
movl %eax, (%rcx)
movl 0x440(%rsp), %eax
movl %eax, (%rbp)
movq 0x2e8(%rsp), %rdi
testq %rdi, %rdi
je 0x4540
movq 0x2f8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0x2d0(%rsp), %rdi
testq %rdi, %rdi
je 0x455d
movq 0x2e0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0x2b8(%rsp), %rdi
testq %rdi, %rdi
je 0x457a
movq 0x2c8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
leaq 0x2a0(%rsp), %rdi
callq 0x4e02
leaq 0x120(%rsp), %rdi
callq 0x5976
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x45b1
movq 0xc0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x45ce
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x45eb
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x45fd
callq 0x2100
testq %r15, %r15
setne %al
addq $0x458, %rsp            # imm = 0x458
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x46b3
jmp 0x46b3
jmp 0x46b3
jmp 0x470f
jmp 0x46b3
jmp 0x46b3
jmp 0x470f
jmp 0x46b3
jmp 0x46b3
jmp 0x46b3
jmp 0x470f
jmp 0x46b3
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x465f
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x2250
jmp 0x469f
movq %rax, %rbx
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x46b6
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x2120
jmp 0x46b6
jmp 0x46b3
movq %rax, %rbx
leaq 0x2a0(%rsp), %rdi
callq 0x5232
jmp 0x4741
jmp 0x470a
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x515e
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x46da
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x46f1
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4712
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
jmp 0x4712
movq %rax, %rbx
jmp 0x4741
movq %rax, %rbx
cmpb $0x1, 0x2a0(%rsp)
jne 0x4741
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
cmpq %rax, %rdi
je 0x4741
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x2120
leaq 0x120(%rsp), %rdi
callq 0x5976
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x476b
movq 0xc0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x4788
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x47a5
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x2120
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x47b7
callq 0x2100
movq %rbx, %rdi
callq 0x2200