// File: jpcima[P]faustmd/metadata.cpp
// Function: dump_widgets(std::ostream&, std::vector<Metadata::Widget, std::allocator<Metadata::Widget>> const&, bool)
static void dump_widgets(std::ostream &o, const std::vector<Metadata::Widget> &widgets, bool is_active)
{
    const char *separator;
    const char *prefix = is_active ? "active" : "passive";

    o << "\t" "FMSTATIC constexpr " << prefix << "_type_t " << prefix << "_type[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << "" << prefix << "_type_t::" << w.type; separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC constexpr int " << prefix << "_id[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << w.id; separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC const char *const " << prefix << "_label[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << cstrlit(w.label); separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC const char *const " << prefix << "_symbol[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << cstrlit(w.symbol); separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC const std::size_t " << prefix << "_offsets[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << "(size_t)&((FAUSTCLASS *)0)->" << w.var; separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC constexpr FAUSTFLOAT " << prefix << "_init[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << w.init; separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC constexpr FAUSTFLOAT " << prefix << "_min[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << w.min; separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC constexpr FAUSTFLOAT " << prefix << "_max[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << w.max; separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC constexpr FAUSTFLOAT " << prefix << "_step[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << w.step; separator = ", "; }
    o << "};" "\n";

    o << "\n";

    o << "\t" "FMSTATIC const char *const " << prefix << "_unit[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << cstrlit(w.unit); separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC constexpr scale_t " << prefix << "_scale[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << "scale_t::" << w.scale; separator = ", "; }
    o << "};" "\n";

    o << "\t" "FMSTATIC const char *const " << prefix << "_tooltip[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << cstrlit(w.tooltip); separator = ", "; }
    o << "};" "\n";

    o << "\n";

    bool have_metadata = false;
    for (size_t i = 0, n = widgets.size(); i < n; ++i) {
        const Metadata::Widget &w = widgets[i];
        if (w.metadata.empty())
            continue;
        o << "\t" "FMSTATIC const metadata_t " << prefix << "_metadata_" << i << "[] = {";
        separator = "";
        for (const std::pair<std::string, std::string> &md : w.metadata) {
            o << separator << "{" << cstrlit(md.first) << ", " << cstrlit(md.second) << "}";
            separator = ", ";
        }
        o << "};\n";
        have_metadata = true;
    }

    if (have_metadata)
        o << "\n";

    o << "\t" "FMSTATIC const metadata_t *const " << prefix << "_metadata[] = {";
    separator = "";
    for (size_t i = 0, n = widgets.size(); i < n; ++i) {
        const Metadata::Widget &w = widgets[i];
        if (w.metadata.empty())
            o << separator << "nullptr";
        else
            o << separator << prefix << "_metadata_" << i;
        separator = ", ";
    }
    o << "};" "\n";

    o << "\t" "FMSTATIC constexpr std::size_t " << prefix << "_metadata_size[] = {";
    separator = "";
    for (const Metadata::Widget &w : widgets)
        { o << separator << w.metadata.size(); separator = ", "; }
    o << "};" "\n";

    o << "\n";

    if (is_active) {
        o << "\t" "FMSTATIC inline void " << prefix << "_set(FAUSTCLASS &x, unsigned idx, FAUSTFLOAT v) {"
          << " *(FAUSTFLOAT *)((char *)&x + " << prefix << "_offsets[idx]) = v; "
          << "}" "\n";
    }
    o << "\t" "FMSTATIC inline FAUSTFLOAT " << prefix << "_get(const FAUSTCLASS &x, unsigned idx) {"
      << " return *(const FAUSTFLOAT *)((const char *)&x + " << prefix << "_offsets[idx]); "
      << "}" "\n";

    o << "\n";

    if (is_active) {
        for (const Metadata::Widget &w : widgets) {
            o << "\t" << "FMSTATIC inline void " << mangle("set_" + w.symbol) << "(FAUSTCLASS &x, FAUSTFLOAT v) {"
              << " x." << w.var << " = v; "
              << "}" "\n";
        }
    }
    for (const Metadata::Widget &w : widgets) {
        o << "\t" << "FMSTATIC inline FAUSTFLOAT " << mangle("get_" + w.symbol) << "(const FAUSTCLASS &x) {"
          << " return x." << w.var << "; "
          << "}" "\n";
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x510, %rsp            # imm = 0x510
movb %dl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
movb -0x11(%rbp), %dl
leaq 0x2db49(%rip), %rax     # 0x67b6d
leaq 0x2db3b(%rip), %rcx     # 0x67b66
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x2db34(%rip), %rsi     # 0x67b75
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2db2e(%rip), %rsi     # 0x67b8a
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2db1c(%rip), %rsi     # 0x67b93
callq 0x7540
leaq 0x2de07(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
callq 0x3d090
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a0bc
jmp 0x3a124
leaq -0x38(%rbp), %rdi
callq 0x3d130
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2ddaa(%rip), %rsi     # 0x67e8a
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2daa4(%rip), %rsi     # 0x67b9f
callq 0x7540
movq %rax, %rdi
movq -0x48(%rbp), %rax
movl (%rax), %esi
callq 0x3b7d0
leaq 0x2d8f0(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x3d150
jmp 0x3a0a9
movq -0x8(%rbp), %rdi
leaq 0x2d678(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2da6a(%rip), %rsi     # 0x67ba9
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2da68(%rip), %rsi     # 0x67bc2
callq 0x7540
leaq 0x2dd24(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
callq 0x3d090
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x60(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a19f
jmp 0x3a1de
leaq -0x58(%rbp), %rdi
callq 0x3d130
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
movq -0x68(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x79f0
leaq 0x2d836(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x3d150
jmp 0x3a18c
movq -0x8(%rbp), %rdi
leaq 0x2d5be(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d9d3(%rip), %rsi     # 0x67bcc
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d9d5(%rip), %rsi     # 0x67be9
callq 0x7540
leaq 0x2dc6a(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rdi
callq 0x3d090
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x80(%rbp)
leaq -0x78(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a25c
jmp 0x3a315
leaq -0x78(%rbp), %rdi
callq 0x3d130
movq %rax, -0x88(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, -0x440(%rbp)
movq -0x88(%rbp), %rsi
addq $0x8, %rsi
leaq -0xb8(%rbp), %rdi
callq 0xd840
movq -0xb8(%rbp), %rsi
movq -0xb0(%rbp), %rdx
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x438(%rbp)
callq 0x39db0
movq -0x440(%rbp), %rdi
movq -0x438(%rbp), %rsi
callq 0x7500
jmp 0x3a2cd
leaq -0xa8(%rbp), %rdi
callq 0x7380
leaq 0x2d725(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x3d150
jmp 0x3a246
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x7380
jmp 0x3b645
movq -0x8(%rbp), %rdi
leaq 0x2d487(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d89c(%rip), %rsi     # 0x67bcc
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d8ab(%rip), %rsi     # 0x67bf6
callq 0x7540
leaq 0x2db33(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x3d090
movq %rax, -0xd8(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0xe0(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a3a8
jmp 0x3a467
leaq -0xd8(%rbp), %rdi
callq 0x3d130
movq %rax, -0xe8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, -0x450(%rbp)
movq -0xe8(%rbp), %rsi
addq $0x48, %rsi
leaq -0x118(%rbp), %rdi
callq 0xd840
movq -0x118(%rbp), %rsi
movq -0x110(%rbp), %rdx
leaq -0x108(%rbp), %rdi
movq %rdi, -0x448(%rbp)
callq 0x39db0
movq -0x450(%rbp), %rdi
movq -0x448(%rbp), %rsi
callq 0x7500
jmp 0x3a41c
leaq -0x108(%rbp), %rdi
callq 0x7380
leaq 0x2d5d6(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x3d150
jmp 0x3a38c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x7380
jmp 0x3b645
movq -0x8(%rbp), %rdi
leaq 0x2d335(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d782(%rip), %rsi     # 0x67c04
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d784(%rip), %rsi     # 0x67c21
callq 0x7540
leaq 0x2d9e1(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0x120(%rbp), %rdi
callq 0x3d090
movq %rax, -0x128(%rbp)
movq -0x120(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x130(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a4f7
jmp 0x3a552
leaq -0x128(%rbp), %rdi
callq 0x3d130
movq %rax, -0x138(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d70f(%rip), %rsi     # 0x67c30
callq 0x7540
movq %rax, %rdi
movq -0x138(%rbp), %rsi
addq $0x28, %rsi
callq 0x7500
leaq 0x2d4c5(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x3d150
jmp 0x3a4de
movq -0x8(%rbp), %rdi
leaq 0x2d24a(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d6e0(%rip), %rsi     # 0x67c4d
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d6e5(%rip), %rsi     # 0x67c6d
callq 0x7540
leaq 0x2d8f6(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rdi
callq 0x3d090
movq %rax, -0x148(%rbp)
movq -0x140(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x150(%rbp)
leaq -0x148(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a5e2
jmp 0x3a62f
leaq -0x148(%rbp), %rdi
callq 0x3d130
movq %rax, -0x158(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
movq -0x158(%rbp), %rax
movss 0x68(%rax), %xmm0
callq 0x7440
leaq 0x2d3e8(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x3d150
jmp 0x3a5c9
movq -0x8(%rbp), %rdi
leaq 0x2d16d(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d603(%rip), %rsi     # 0x67c4d
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d614(%rip), %rsi     # 0x67c79
callq 0x7540
leaq 0x2d819(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x160(%rbp)
movq -0x160(%rbp), %rdi
callq 0x3d090
movq %rax, -0x168(%rbp)
movq -0x160(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x170(%rbp)
leaq -0x168(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a6bf
jmp 0x3a70c
leaq -0x168(%rbp), %rdi
callq 0x3d130
movq %rax, -0x178(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
movq -0x178(%rbp), %rax
movss 0x6c(%rax), %xmm0
callq 0x7440
leaq 0x2d30b(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x3d150
jmp 0x3a6a6
movq -0x8(%rbp), %rdi
leaq 0x2d090(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d526(%rip), %rsi     # 0x67c4d
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d542(%rip), %rsi     # 0x67c84
callq 0x7540
leaq 0x2d73c(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x180(%rbp), %rdi
callq 0x3d090
movq %rax, -0x188(%rbp)
movq -0x180(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x190(%rbp)
leaq -0x188(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a79c
jmp 0x3a7e9
leaq -0x188(%rbp), %rdi
callq 0x3d130
movq %rax, -0x198(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
movq -0x198(%rbp), %rax
movss 0x70(%rax), %xmm0
callq 0x7440
leaq 0x2d22e(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x3d150
jmp 0x3a783
movq -0x8(%rbp), %rdi
leaq 0x2cfb3(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d449(%rip), %rsi     # 0x67c4d
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d470(%rip), %rsi     # 0x67c8f
callq 0x7540
leaq 0x2d65f(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x1a0(%rbp), %rdi
callq 0x3d090
movq %rax, -0x1a8(%rbp)
movq -0x1a0(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x1b0(%rbp)
leaq -0x1a8(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a879
jmp 0x3a8c6
leaq -0x1a8(%rbp), %rdi
callq 0x3d130
movq %rax, -0x1b8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
movq -0x1b8(%rbp), %rax
movss 0x74(%rax), %xmm0
callq 0x7440
leaq 0x2d151(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x3d150
jmp 0x3a860
movq -0x8(%rbp), %rdi
leaq 0x2ced6(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2be6a(%rip), %rsi     # 0x6674b
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d2db(%rip), %rsi     # 0x67bcc
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d38f(%rip), %rsi     # 0x67c9b
callq 0x7540
leaq 0x2d572(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x1c0(%rbp), %rdi
callq 0x3d090
movq %rax, -0x1c8(%rbp)
movq -0x1c0(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x1d0(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3a969
jmp 0x3aa2b
leaq -0x1c8(%rbp), %rdi
callq 0x3d130
movq %rax, -0x1d8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, -0x460(%rbp)
movq -0x1d8(%rbp), %rsi
addq $0x90, %rsi
leaq -0x208(%rbp), %rdi
callq 0xd840
movq -0x208(%rbp), %rsi
movq -0x200(%rbp), %rdx
leaq -0x1f8(%rbp), %rdi
movq %rdi, -0x458(%rbp)
callq 0x39db0
movq -0x460(%rbp), %rdi
movq -0x458(%rbp), %rsi
callq 0x7500
jmp 0x3a9e0
leaq -0x1f8(%rbp), %rdi
callq 0x7380
leaq 0x2d012(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x3d150
jmp 0x3a94d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x7380
jmp 0x3b645
movq -0x8(%rbp), %rdi
leaq 0x2cd71(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d261(%rip), %rsi     # 0x67ca7
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d263(%rip), %rsi     # 0x67cc4
callq 0x7540
leaq 0x2d41d(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x210(%rbp)
movq -0x210(%rbp), %rdi
callq 0x3d090
movq %rax, -0x218(%rbp)
movq -0x210(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x220(%rbp)
leaq -0x218(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3aabb
jmp 0x3ab18
leaq -0x218(%rbp), %rdi
callq 0x3d130
movq %rax, -0x228(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d1ec(%rip), %rsi     # 0x67cd1
callq 0x7540
movq %rax, %rdi
movq -0x228(%rbp), %rax
movl 0xb0(%rax), %esi
callq 0x3b8d0
leaq 0x2ceff(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x3d150
jmp 0x3aaa2
movq -0x8(%rbp), %rdi
leaq 0x2cc84(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2d099(%rip), %rsi     # 0x67bcc
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d18d(%rip), %rsi     # 0x67cdb
callq 0x7540
leaq 0x2d330(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x230(%rbp)
movq -0x230(%rbp), %rdi
callq 0x3d090
movq %rax, -0x238(%rbp)
movq -0x230(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x240(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3abab
jmp 0x3ac6d
leaq -0x238(%rbp), %rdi
callq 0x3d130
movq %rax, -0x248(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, -0x470(%rbp)
movq -0x248(%rbp), %rsi
addq $0xb8, %rsi
leaq -0x278(%rbp), %rdi
callq 0xd840
movq -0x278(%rbp), %rsi
movq -0x270(%rbp), %rdx
leaq -0x268(%rbp), %rdi
movq %rdi, -0x468(%rbp)
callq 0x39db0
movq -0x470(%rbp), %rdi
movq -0x468(%rbp), %rsi
callq 0x7500
jmp 0x3ac22
leaq -0x268(%rbp), %rdi
callq 0x7380
leaq 0x2cdd0(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x3d150
jmp 0x3ab8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x7380
jmp 0x3b645
movq -0x8(%rbp), %rdi
leaq 0x2cb2f(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2bac3(%rip), %rsi     # 0x6674b
callq 0x7540
movb $0x0, -0x279(%rbp)
movq $0x0, -0x288(%rbp)
movq -0x10(%rbp), %rdi
callq 0x3bd40
movq %rax, -0x290(%rbp)
movq -0x288(%rbp), %rax
cmpq -0x290(%rbp), %rax
jae 0x3af4a
movq -0x10(%rbp), %rdi
movq -0x288(%rbp), %rsi
callq 0x3d170
movq %rax, -0x298(%rbp)
movq -0x298(%rbp), %rdi
addq $0x78, %rdi
callq 0x3d190
testb $0x1, %al
jne 0x3acf0
jmp 0x3acf5
jmp 0x3af33
movq -0x8(%rbp), %rdi
leaq 0x2cfea(%rip), %rsi     # 0x67cea
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cfeb(%rip), %rsi     # 0x67d06
callq 0x7540
movq %rax, %rdi
movq -0x288(%rbp), %rsi
callq 0x7130
movq %rax, %rdi
leaq 0x2ccc5(%rip), %rsi     # 0x679fe
callq 0x7540
leaq 0x2d145(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x298(%rbp), %rax
addq $0x78, %rax
movq %rax, -0x2a0(%rbp)
movq -0x2a0(%rbp), %rdi
callq 0x22f00
movq %rax, -0x2a8(%rbp)
movq -0x2a0(%rbp), %rdi
callq 0x22f30
movq %rax, -0x2b0(%rbp)
leaq -0x2a8(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x22f60
testb $0x1, %al
jne 0x3ad9d
jmp 0x3af1c
leaq -0x2a8(%rbp), %rdi
callq 0x22fa0
movq %rax, -0x2b8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2d0e7(%rip), %rsi     # 0x67eae
callq 0x7540
movq %rax, -0x488(%rbp)
movq -0x2b8(%rbp), %rsi
leaq -0x2e8(%rbp), %rdi
callq 0xd840
movq -0x2e8(%rbp), %rsi
movq -0x2e0(%rbp), %rdx
leaq -0x2d8(%rbp), %rdi
movq %rdi, -0x480(%rbp)
callq 0x39db0
movq -0x488(%rbp), %rdi
movq -0x480(%rbp), %rsi
callq 0x7500
movq %rax, -0x478(%rbp)
jmp 0x3ae23
movq -0x478(%rbp), %rdi
leaq 0x2cbd4(%rip), %rsi     # 0x67a05
callq 0x7540
movq %rax, -0x490(%rbp)
jmp 0x3ae3f
movq -0x2b8(%rbp), %rsi
addq $0x20, %rsi
leaq -0x318(%rbp), %rdi
callq 0xd840
jmp 0x3ae58
movq -0x318(%rbp), %rsi
movq -0x310(%rbp), %rdx
leaq -0x308(%rbp), %rdi
callq 0x39db0
jmp 0x3ae74
movq -0x490(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x7500
movq %rax, -0x498(%rbp)
jmp 0x3ae90
movq -0x498(%rbp), %rdi
leaq 0x2cb6a(%rip), %rsi     # 0x67a08
callq 0x7540
jmp 0x3aea5
leaq -0x308(%rbp), %rdi
callq 0x7380
leaq -0x2d8(%rbp), %rdi
callq 0x7380
leaq 0x2cb41(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x23010
jmp 0x3ad81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x3af0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x7380
leaq -0x2d8(%rbp), %rdi
callq 0x7380
jmp 0x3b645
movq -0x8(%rbp), %rdi
leaq 0x2c880(%rip), %rsi     # 0x677a7
callq 0x7540
movb $0x1, -0x279(%rbp)
movq -0x288(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x288(%rbp)
jmp 0x3acaf
testb $0x1, -0x279(%rbp)
je 0x3af63
movq -0x8(%rbp), %rdi
leaq 0x2b7ed(%rip), %rsi     # 0x6674b
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2cda3(%rip), %rsi     # 0x67d11
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cdab(%rip), %rsi     # 0x67d34
callq 0x7540
leaq 0x2cef5(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq $0x0, -0x320(%rbp)
movq -0x10(%rbp), %rdi
callq 0x3bd40
movq %rax, -0x328(%rbp)
movq -0x320(%rbp), %rax
cmpq -0x328(%rbp), %rax
jae 0x3b06c
movq -0x10(%rbp), %rdi
movq -0x320(%rbp), %rsi
callq 0x3d170
movq %rax, -0x330(%rbp)
movq -0x330(%rbp), %rdi
addq $0x78, %rdi
callq 0x3d190
testb $0x1, %al
jne 0x3aff5
jmp 0x3b013
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cd38(%rip), %rsi     # 0x67d44
callq 0x7540
jmp 0x3b04a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2ccd0(%rip), %rsi     # 0x67d06
callq 0x7540
movq %rax, %rdi
movq -0x320(%rbp), %rsi
callq 0x7130
leaq 0x2c9b4(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
movq -0x320(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x320(%rbp)
jmp 0x3afb4
movq -0x8(%rbp), %rdi
leaq 0x2c730(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2ccc5(%rip), %rsi     # 0x67d4c
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cccb(%rip), %rsi     # 0x67d6d
callq 0x7540
leaq 0x2cddc(%rip), %rax     # 0x67e8a
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x338(%rbp)
movq -0x338(%rbp), %rdi
callq 0x3d090
movq %rax, -0x340(%rbp)
movq -0x338(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x348(%rbp)
leaq -0x340(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3b0fc
jmp 0x3b15b
leaq -0x340(%rbp), %rdi
callq 0x3d130
movq %rax, -0x350(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7540
movq %rax, -0x4a0(%rbp)
movq -0x350(%rbp), %rdi
addq $0x78, %rdi
callq 0x23c20
movq -0x4a0(%rbp), %rdi
movq %rax, %rsi
callq 0x7130
leaq 0x2c8bc(%rip), %rax     # 0x67a05
movq %rax, -0x20(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x3d150
jmp 0x3b0e3
movq -0x8(%rbp), %rdi
leaq 0x2c641(%rip), %rsi     # 0x677a7
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2b5d5(%rip), %rsi     # 0x6674b
callq 0x7540
testb $0x1, -0x11(%rbp)
je 0x3b1e5
movq -0x8(%rbp), %rdi
leaq 0x2cbf6(%rip), %rsi     # 0x67d82
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cbf2(%rip), %rsi     # 0x67d99
callq 0x7540
movq %rax, %rdi
leaq 0x2cc15(%rip), %rsi     # 0x67dcb
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cc19(%rip), %rsi     # 0x67dea
callq 0x7540
movq %rax, %rdi
leaq 0x2c82a(%rip), %rsi     # 0x67a0a
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2cc0f(%rip), %rsi     # 0x67dff
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cc11(%rip), %rsi     # 0x67e1c
callq 0x7540
movq %rax, %rdi
leaq 0x2cc2c(%rip), %rsi     # 0x67e46
callq 0x7540
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x7540
movq %rax, %rdi
leaq 0x2cc43(%rip), %rsi     # 0x67e78
callq 0x7540
movq %rax, %rdi
leaq 0x2c7c6(%rip), %rsi     # 0x67a0a
callq 0x7540
movq -0x8(%rbp), %rdi
leaq 0x2b4f7(%rip), %rsi     # 0x6674b
callq 0x7540
testb $0x1, -0x11(%rbp)
je 0x3b452
movq -0x10(%rbp), %rax
movq %rax, -0x358(%rbp)
movq -0x358(%rbp), %rdi
callq 0x3d090
movq %rax, -0x360(%rbp)
movq -0x358(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x368(%rbp)
leaq -0x360(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3b2b0
jmp 0x3b450
leaq -0x360(%rbp), %rdi
callq 0x3d130
movq %rax, -0x370(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x2cbbb(%rip), %rsi     # 0x67e89
callq 0x7540
movq %rax, %rdi
leaq 0x2caa6(%rip), %rsi     # 0x67d83
callq 0x7540
movq %rax, -0x4b0(%rbp)
movq -0x370(%rbp), %rdx
addq $0x48, %rdx
leaq 0x2cb90(%rip), %rsi     # 0x67e8b
leaq -0x3c0(%rbp), %rdi
movq %rdi, -0x4a8(%rbp)
callq 0x3d1d0
movq -0x4a8(%rbp), %rsi
leaq -0x3a0(%rbp), %rdi
callq 0xd840
jmp 0x3b323
movq -0x3a0(%rbp), %rsi
movq -0x398(%rbp), %rdx
leaq -0x390(%rbp), %rdi
callq 0x3b970
jmp 0x3b33f
movq -0x4b0(%rbp), %rdi
leaq -0x390(%rbp), %rsi
callq 0x7500
movq %rax, -0x4b8(%rbp)
jmp 0x3b35b
movq -0x4b8(%rbp), %rdi
leaq 0x2cb27(%rip), %rsi     # 0x67e90
callq 0x7540
movq %rax, -0x4c0(%rbp)
jmp 0x3b377
movq -0x4c0(%rbp), %rdi
leaq 0x2cb4f(%rip), %rsi     # 0x67ed4
callq 0x7540
movq %rax, -0x4c8(%rbp)
jmp 0x3b393
movq -0x4c8(%rbp), %rdi
movq -0x370(%rbp), %rsi
addq $0x28, %rsi
callq 0x7500
movq %rax, -0x4d0(%rbp)
jmp 0x3b3b3
movq -0x4d0(%rbp), %rdi
leaq 0x2ca37(%rip), %rsi     # 0x67df8
callq 0x7540
movq %rax, -0x4d8(%rbp)
jmp 0x3b3cf
movq -0x4d8(%rbp), %rdi
leaq 0x2c62d(%rip), %rsi     # 0x67a0a
callq 0x7540
jmp 0x3b3e4
leaq -0x390(%rbp), %rdi
callq 0x7380
leaq -0x3c0(%rbp), %rdi
callq 0x7380
leaq -0x360(%rbp), %rdi
callq 0x3d150
jmp 0x3b294
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x3b43f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x7380
leaq -0x3c0(%rbp), %rdi
callq 0x7380
jmp 0x3b645
jmp 0x3b452
movq -0x10(%rbp), %rax
movq %rax, -0x3c8(%rbp)
movq -0x3c8(%rbp), %rdi
callq 0x3d090
movq %rax, -0x3d0(%rbp)
movq -0x3c8(%rbp), %rdi
callq 0x3d0c0
movq %rax, -0x3d8(%rbp)
leaq -0x3d0(%rbp), %rdi
leaq -0x3d8(%rbp), %rsi
callq 0x3d0f0
testb $0x1, %al
jne 0x3b49f
jmp 0x3b63c
leaq -0x3d0(%rbp), %rdi
callq 0x3d130
movq %rax, -0x3e0(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x2c9cc(%rip), %rsi     # 0x67e89
callq 0x7540
movq %rax, %rdi
leaq 0x2c934(%rip), %rsi     # 0x67e00
callq 0x7540
movq %rax, -0x4e8(%rbp)
movq -0x3e0(%rbp), %rdx
addq $0x48, %rdx
leaq 0x2c9c6(%rip), %rsi     # 0x67eb0
leaq -0x430(%rbp), %rdi
movq %rdi, -0x4e0(%rbp)
callq 0x3d1d0
movq -0x4e0(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0xd840
jmp 0x3b512
movq -0x410(%rbp), %rsi
movq -0x408(%rbp), %rdx
leaq -0x400(%rbp), %rdi
callq 0x3b970
jmp 0x3b52e
movq -0x4e8(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x7500
movq %rax, -0x4f0(%rbp)
jmp 0x3b54a
movq -0x4f0(%rbp), %rdi
leaq 0x2c95d(%rip), %rsi     # 0x67eb5
callq 0x7540
movq %rax, -0x4f8(%rbp)
jmp 0x3b566
movq -0x4f8(%rbp), %rdi
leaq 0x2c959(%rip), %rsi     # 0x67ecd
callq 0x7540
movq %rax, -0x500(%rbp)
jmp 0x3b582
movq -0x500(%rbp), %rdi
movq -0x3e0(%rbp), %rsi
addq $0x28, %rsi
callq 0x7500
movq %rax, -0x508(%rbp)
jmp 0x3b5a2
movq -0x508(%rbp), %rdi
leaq 0x2c8d6(%rip), %rsi     # 0x67e86
callq 0x7540
movq %rax, -0x510(%rbp)
jmp 0x3b5be
movq -0x510(%rbp), %rdi
leaq 0x2c43e(%rip), %rsi     # 0x67a0a
callq 0x7540
jmp 0x3b5d3
leaq -0x400(%rbp), %rdi
callq 0x7380
leaq -0x430(%rbp), %rdi
callq 0x7380
leaq -0x3d0(%rbp), %rdi
callq 0x3d150
jmp 0x3b483
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x3b62e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x7380
leaq -0x430(%rbp), %rdi
callq 0x7380
jmp 0x3b645
addq $0x510, %rsp            # imm = 0x510
popq %rbp
retq
movq -0xc0(%rbp), %rdi
callq 0x7a20
nopw %cs:(%rax,%rax)