// File: /workspace/github_c_makefile_star2_O2/vtereshkov[P]umka-lang/src/umka_compiler.c
// Function: compilerInit
void compilerInit(Compiler *comp, const char *fileName, const char *sourceString, int stackSize, int argc, char **argv, bool fileSystemEnabled, bool implLibsEnabled)
{
#ifdef _WIN32
    comp->originalInputCodepage = GetConsoleCP();
    comp->originalOutputCodepage = GetConsoleOutputCP();
    SetConsoleCP(CP_UTF8);
    SetConsoleOutputCP(CP_UTF8);
#endif

    compilerSetAPI(comp);

    storageInit  (&comp->storage, &comp->error);
    moduleInit   (&comp->modules, &comp->storage, implLibsEnabled, &comp->error);
    blocksInit   (&comp->blocks, &comp->error);
    externalInit (&comp->externals, &comp->storage);
    typeInit     (&comp->types, &comp->storage, &comp->error);
    identInit    (&comp->idents, &comp->storage, &comp->debug, &comp->error);
    constInit    (&comp->consts, &comp->error);
    genInit      (&comp->gen, &comp->storage, &comp->debug, &comp->error);
    vmInit       (&comp->vm, &comp->storage, stackSize, fileSystemEnabled, &comp->error);

    vmReset(&comp->vm, comp->gen.code, comp->gen.debugPerInstr);

    comp->lex.fileName = "<unknown>";
    comp->lex.tok.line = 1;
    comp->lex.tok.pos = 1;
    comp->debug.fnName = "<unknown>";

    char filePath[DEFAULT_STR_LEN + 1] = "";
    moduleAssertRegularizePath(&comp->modules, fileName, comp->modules.curFolder, filePath, DEFAULT_STR_LEN + 1);

    comp->lex.fileName = filePath;

    lexInit(&comp->lex, &comp->storage, &comp->debug, filePath, sourceString, false, &comp->error);

    comp->argc  = argc;
    comp->argv  = argv;

    comp->blocks.module = moduleAdd(&comp->modules, "#universe");

    compilerDeclareBuiltinTypes (comp);
    compilerDeclareBuiltinIdents(comp);
    compilerDeclareExternalFuncs(comp, fileSystemEnabled);

    // Command-line-arguments
    Type *argvType = typeAdd(&comp->types, &comp->blocks, TYPE_ARRAY);
    argvType->base = comp->strType;
    typeResizeArray(argvType, comp->argc);

    Ident *rtlargv = identAllocVar(&comp->idents, &comp->types, &comp->modules, &comp->blocks, "rtlargv", argvType, true);
    char **argArray = (char **)rtlargv->ptr;

    for (int i = 0; i < comp->argc; i++)
    {
        argArray[i] = storageAddStr(&comp->storage, strlen(comp->argv[i]));
        strcpy(argArray[i], comp->argv[i]);
    }

    // Embedded standard library modules
    const int numRuntimeModules = sizeof(runtimeModuleSources) / sizeof(runtimeModuleSources[0]);
    for (int i = 0; i < numRuntimeModules; i++)
    {
        char runtimeModulePath[DEFAULT_STR_LEN + 1] = "";
        moduleAssertRegularizePath(&comp->modules, runtimeModuleNames[i], comp->modules.curFolder, runtimeModulePath, DEFAULT_STR_LEN + 1);

        const bool runtimeModuleTrusted = strcmp(runtimeModuleNames[i], "std.um") == 0;
        moduleAddSource(&comp->modules, runtimeModulePath, runtimeModuleSources[i], runtimeModuleTrusted);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x278, %rsp            # imm = 0x278
movq %r9, 0x28(%rsp)
movl %r8d, 0x20(%rsp)
movl %ecx, 0x8(%rsp)
movq %rdx, 0x18(%rsp)
movq %rsi, 0x38(%rsp)
movq %rdi, %rbx
movb 0x2b8(%rsp), %r15b
leaq -0x1327(%rip), %rax     # 0x39bc
movq %rax, (%rdi)
leaq -0x1327(%rip), %rax     # 0x39c6
movq %rax, 0x8(%rdi)
leaq -0xf9b(%rip), %rax      # 0x3d5d
movq %rax, 0x10(%rdi)
leaq -0xf7a(%rip), %rax      # 0x3d89
movq %rax, 0x18(%rdi)
leaq -0xf51(%rip), %rax      # 0x3dbd
movq %rax, 0x20(%rdi)
leaq -0xf02(%rip), %rax      # 0x3e17
movq %rax, 0x28(%rdi)
leaq -0xefb(%rip), %rax      # 0x3e29
movq %rax, 0x30(%rdi)
leaq -0xefe(%rip), %rax      # 0x3e31
movq %rax, 0x38(%rdi)
leaq -0xefd(%rip), %rax      # 0x3e3d
movq %rax, 0x40(%rdi)
leaq -0xf03(%rip), %rax      # 0x3e42
movq %rax, 0x48(%rdi)
leaq -0xf09(%rip), %rax      # 0x3e47
movq %rax, 0x50(%rdi)
leaq -0xf0f(%rip), %rax      # 0x3e4c
movq %rax, 0x58(%rdi)
leaq -0xf15(%rip), %rax      # 0x3e51
movq %rax, 0x60(%rdi)
leaq -0xe13(%rip), %rax      # 0x3f5e
movq %rax, 0x68(%rdi)
leaq -0xe12(%rip), %rax      # 0x3f6a
movq %rax, 0x70(%rdi)
leaq -0xe11(%rip), %rax      # 0x3f76
movq %rax, 0x78(%rdi)
leaq -0xe09(%rip), %rax      # 0x3f89
movq %rax, 0x80(%rdi)
leaq -0xe04(%rip), %rax      # 0x3f9c
movq %rax, 0x88(%rdi)
leaq -0xe06(%rip), %rax      # 0x3fa8
movq %rax, 0x90(%rdi)
leaq -0xe08(%rip), %rax      # 0x3fb4
movq %rax, 0x98(%rdi)
leaq -0xe0a(%rip), %rax      # 0x3fc0
movq %rax, 0xa0(%rdi)
leaq -0xe0c(%rip), %rax      # 0x3fcc
movq %rax, 0xa8(%rdi)
leaq -0xe0a(%rip), %rax      # 0x3fdc
movq %rax, 0xb0(%rdi)
leaq -0xe10(%rip), %rax      # 0x3fe4
movq %rax, 0xb8(%rdi)
leaq -0xe12(%rip), %rax      # 0x3ff0
movq %rax, 0xc0(%rdi)
leaq -0xe0d(%rip), %rax      # 0x4003
movq %rax, 0xc8(%rdi)
leaq -0xdf5(%rip), %rax      # 0x4029
movq %rax, 0xd0(%rdi)
leaq -0xdf6(%rip), %rax      # 0x4036
movq %rax, 0xd8(%rdi)
leaq -0xde6(%rip), %rax      # 0x4054
movq %rax, 0xe0(%rdi)
leaq -0xdec(%rip), %rax      # 0x405c
movq %rax, 0xe8(%rdi)
leaq 0xf0(%rdi), %r12
leaq 0x50f8(%rdi), %rbp
movq %r12, %rdi
movq %rbp, %rsi
callq 0x41b6
leaq 0x100(%rbx), %r14
movzbl %r15b, %edx
movq %r14, %rdi
movq %r12, %rsi
movq %rbp, %rcx
callq 0x42ea
leaq 0x4220(%rbx), %r13
movq %r13, %rdi
movq %rbp, %rsi
callq 0x4aef
leaq 0x4b98(%rbx), %rdi
movq %rdi, 0x68(%rsp)
movq %r12, %rsi
callq 0x4bdb
leaq 0x4e18(%rbx), %rdi
movq %rdi, 0x48(%rsp)
movq %r12, %rsi
movq %rbp, %rdx
callq 0x14d98
leaq 0x4e38(%rbx), %rdi
movq %rdi, 0x50(%rsp)
leaq 0x50e0(%rbx), %r15
movq %r12, %rsi
movq %r15, %rdx
movq %r15, 0x10(%rsp)
movq %rbp, %rcx
callq 0x10174
leaq 0x4e68(%rbx), %rdi
movq %rbp, %rsi
callq 0x612c
leaq 0x4e70(%rbx), %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %rbp, %rcx
callq 0xe93c
leaq 0x5058(%rbx), %r15
movzbl 0x2b0(%rsp), %ecx
movl %ecx, 0x30(%rsp)
movq %r15, %rdi
movq %r12, %rsi
movl 0x8(%rsp), %edx
movq %rbp, %r8
callq 0x16608
movq 0x4e70(%rbx), %rsi
movq 0x5040(%rbx), %rdx
movq %r15, %rdi
callq 0x16c1e
leaq 0x4ba8(%rbx), %rax
movq %rax, 0x8(%rsp)
leaq 0x61457(%rip), %rax     # 0x663ad
movq %rax, 0x4ba8(%rbx)
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x4ce0(%rbx)
movq %rax, 0x50e8(%rbx)
leaq 0x170(%rsp), %r15
movl $0x100, %edx            # imm = 0x100
movq %r15, %rdi
xorl %esi, %esi
callq 0x3190
leaq 0x4108(%rbx), %rdx
movq %r14, 0x40(%rsp)
movq %r14, %rdi
movq 0x38(%rsp), %rsi
movq %rdx, 0x38(%rsp)
movq %r15, %rcx
movl $0x100, %r8d            # imm = 0x100
callq 0x4ab1
movq %r15, 0x4ba8(%rbx)
movq %rbp, (%rsp)
movq 0x8(%rsp), %rdi
movq %r12, 0x8(%rsp)
movq %r12, %rsi
movq 0x10(%rsp), %rdx
movq %r15, %rcx
movq 0x18(%rsp), %r8
xorl %r9d, %r9d
callq 0x10d0c
movl 0x20(%rsp), %eax
movl %eax, 0x52b8(%rbx)
movq 0x28(%rsp), %rax
movq %rax, 0x52c0(%rbx)
leaq 0x613ba(%rip), %rsi     # 0x663b7
movq %r14, %rdi
callq 0x458f
movl %eax, 0x4b88(%rbx)
pushq $0x2
popq %rdx
movq 0x48(%rsp), %rbp
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5218(%rbx)
pushq $0x3
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5220(%rbx)
pushq $0x4
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5228(%rbx)
pushq $0x5
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5230(%rbx)
pushq $0x6
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5238(%rbx)
pushq $0x7
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5240(%rbx)
pushq $0x8
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5248(%rbx)
pushq $0x9
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5250(%rbx)
pushq $0xa
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5258(%rbx)
pushq $0xb
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5260(%rbx)
pushq $0xc
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5268(%rbx)
pushq $0xd
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5270(%rbx)
pushq $0xe
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5278(%rbx)
pushq $0xf
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5280(%rbx)
pushq $0x14
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, 0x5288(%rbx)
movq 0x5218(%rbx), %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x15100
movq %rax, 0x5298(%rbx)
movq 0x5220(%rbx), %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x15100
movq %rax, 0x52a0(%rbx)
pushq $0x17
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, %r15
movq 0x5298(%rbx), %rdx
leaq 0x61234(%rip), %rcx     # 0x663d0
movq %rbp, %rdi
movq %rax, %rsi
callq 0x159f0
movq 0x5298(%rbx), %rdx
leaq 0x61221(%rip), %rcx     # 0x663d6
movq %rbp, %rdi
movq %r15, %rsi
callq 0x159f0
movq %r15, 0x52a8(%rbx)
pushq $0x19
popq %rdx
movq %rbp, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, %r14
pushq $0x1a
popq %rdx
movq %rbp, %rdi
movq %rbp, %r15
movq %r13, %rsi
callq 0x14da9
movq %rax, %rbp
leaq 0x28(%rax), %rsi
movq 0x52a8(%rbx), %rdx
leaq 0x611e2(%rip), %rcx     # 0x663e0
movq %r15, %rdi
xorl %r8d, %r8d
callq 0x15e11
movq 0x5218(%rbx), %rax
movq %rax, 0xb8(%rbp)
pushq $0x18
popq %rdx
movq %r15, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, %r12
leaq 0x611bb(%rip), %rcx     # 0x663ea
movq %r15, %rdi
movq %rax, %rsi
movq %rbp, %rdx
callq 0x159f0
movq 0x52a8(%rbx), %rdx
movq %r15, %rdi
movq %r12, %rsi
leaq 0x6118f(%rip), %rcx     # 0x663e0
callq 0x159f0
movq %r12, 0x8(%r14)
movq %r14, 0x5290(%rbx)
pushq $0x16
popq %rdx
movq %r15, %rdi
movq %r13, %rsi
callq 0x14da9
movq %rax, %r12
movq 0x5298(%rbx), %rdx
leaq 0x6116e(%rip), %rcx     # 0x663ee
movq %r15, %rdi
movq %rax, %rsi
callq 0x159f0
movq %r15, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0x15100
movq %rax, 0x52b0(%rbx)
movq 0x5268(%rbx), %r8
movq $0x1, (%rsp)
leaq 0x6113e(%rip), %rcx     # 0x663f4
pushq $0x1
popq %r12
movq 0x50(%rsp), %r14
movq %r14, %rdi
movq 0x40(%rsp), %r15
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x104c6
movq 0x5268(%rbx), %r8
andq $0x0, (%rsp)
leaq 0x61111(%rip), %rcx     # 0x663f9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x104c6
movq 0x52a0(%rbx), %r8
andq $0x0, (%rsp)
leaq 0x69a40(%rip), %rcx     # 0x6ed4c
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x104c6
movq 0x5218(%rbx), %r8
leaq 0x64ef3(%rip), %rcx     # 0x6a21e
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5228(%rbx), %r8
leaq 0x610b6(%rip), %rcx     # 0x66400
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5230(%rbx), %r8
leaq 0x6109d(%rip), %rcx     # 0x66406
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5238(%rbx), %r8
leaq 0x61085(%rip), %rcx     # 0x6640d
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5240(%rbx), %r8
leaq 0x64cc1(%rip), %rcx     # 0x6a068
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5248(%rbx), %r8
leaq 0x61039(%rip), %rcx     # 0x663ff
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5250(%rbx), %r8
leaq 0x61020(%rip), %rcx     # 0x66405
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5258(%rbx), %r8
leaq 0x61008(%rip), %rcx     # 0x6640c
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5260(%rbx), %r8
leaq 0x60ff0(%rip), %rcx     # 0x66413
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5268(%rbx), %r8
leaq 0x60fd6(%rip), %rcx     # 0x66418
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5270(%rbx), %r8
leaq 0x60fbc(%rip), %rcx     # 0x6641d
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5278(%rbx), %r8
leaq 0x60fa2(%rip), %rcx     # 0x66422
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5280(%rbx), %r8
leaq 0x60f8a(%rip), %rcx     # 0x66429
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5290(%rbx), %r8
leaq 0x69513(%rip), %rcx     # 0x6e9d1
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x52a8(%rbx), %r8
leaq 0x60f51(%rip), %rcx     # 0x6642e
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x52b0(%rbx), %r8
leaq 0x60f36(%rip), %rcx     # 0x66432
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x1092e
movq 0x5240(%rbx), %r8
leaq 0x60f1f(%rip), %rcx     # 0x6643a
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
xorl %r9d, %r9d
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60eff(%rip), %rcx     # 0x66439
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
movl %r12d, %r9d
callq 0x10946
movq 0x5288(%rbx), %r8
leaq 0x60ee8(%rip), %rcx     # 0x66441
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x2
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60ed1(%rip), %rcx     # 0x6644a
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x3
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60eb0(%rip), %rcx     # 0x66449
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x4
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60e97(%rip), %rcx     # 0x66450
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x5
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60e7e(%rip), %rcx     # 0x66457
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x8
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60e64(%rip), %rcx     # 0x6645d
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x9
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60e4a(%rip), %rcx     # 0x66463
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0xa
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60e2f(%rip), %rcx     # 0x66468
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0xb
popq %r9
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60e16(%rip), %rcx     # 0x6646f
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0xc
popq %r9
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60df5(%rip), %rcx     # 0x6646e
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0xd
popq %r9
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60dda(%rip), %rcx     # 0x66473
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0xe
popq %r9
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60dbf(%rip), %rcx     # 0x66478
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0xf
popq %r9
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60da3(%rip), %rcx     # 0x6647c
pushq $0x10
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60d87(%rip), %rcx     # 0x66480
pushq $0x11
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60d6c(%rip), %rcx     # 0x66485
pushq $0x12
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60d52(%rip), %rcx     # 0x6648b
pushq $0x13
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5280(%rbx), %r8
leaq 0x60d36(%rip), %rcx     # 0x6648f
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x14
popq %r9
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60d1a(%rip), %rcx     # 0x66493
pushq $0x15
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60cfe(%rip), %rcx     # 0x66497
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
pushq $0x16
popq %r9
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60ce3(%rip), %rcx     # 0x6649c
pushq $0x1b
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60cc8(%rip), %rcx     # 0x664a1
pushq $0x1c
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60caf(%rip), %rcx     # 0x664a8
pushq $0x1d
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60c96(%rip), %rcx     # 0x664af
pushq $0x1e
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60c7d(%rip), %rcx     # 0x664b6
pushq $0x1f
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5218(%rbx), %r8
leaq 0x60c63(%rip), %rcx     # 0x664bc
pushq $0x20
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x649ab(%rip), %rcx     # 0x6a224
pushq $0x22
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60c28(%rip), %rcx     # 0x664c1
pushq $0x23
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60c0c(%rip), %rcx     # 0x664c5
pushq $0x24
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60bf3(%rip), %rcx     # 0x664cc
pushq $0x25
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60bde(%rip), %rcx     # 0x664d7
pushq $0x26
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5268(%rbx), %r8
leaq 0x60bc6(%rip), %rcx     # 0x664df
pushq $0x27
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5268(%rbx), %r8
leaq 0x60bb1(%rip), %rcx     # 0x664ea
pushq $0x28
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x60b9c(%rip), %rcx     # 0x664f5
pushq $0x29
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5268(%rbx), %r8
leaq 0x60b84(%rip), %rcx     # 0x664fd
pushq $0x2a
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5268(%rbx), %r8
leaq 0x60b6a(%rip), %rcx     # 0x66503
pushq $0x2b
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5298(%rbx), %r8
leaq 0x692ce(%rip), %rcx     # 0x6ec87
pushq $0x2c
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5218(%rbx), %r8
leaq 0x60b33(%rip), %rcx     # 0x6650c
pushq $0x2d
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5240(%rbx), %r8
leaq 0x60b1a(%rip), %rcx     # 0x66513
pushq $0x2e
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
movq 0x5218(%rbx), %r8
leaq 0x60b03(%rip), %rcx     # 0x6651c
pushq $0x2f
popq %r9
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x10946
leaq 0x60aef(%rip), %rsi     # 0x66521
leaq 0xc27b(%rip), %rdx      # 0x11cb4
movq 0x68(%rsp), %r14
movq %r14, %rdi
movl %r12d, %ecx
callq 0x4c28
leaq 0x60adb(%rip), %rsi     # 0x6652b
leaq 0xc29b(%rip), %rdx      # 0x11cf2
movq %r14, %rdi
movl %r12d, %ecx
callq 0x4c28
leaq 0x60acb(%rip), %rsi     # 0x66534
leaq 0xc297(%rip), %rdx      # 0x11d07
movq %r14, %rdi
movl %r12d, %ecx
callq 0x4c28
leaq 0x60abc(%rip), %rsi     # 0x6653e
leaq 0xc293(%rip), %rdx      # 0x11d1c
movq %r14, %rdi
movl %r12d, %ecx
callq 0x4c28
leaq 0xc2d8(%rip), %rdx      # 0x11d73
cmpb $0x0, 0x30(%rsp)
cmovneq 0x754f0(%rip), %rdx     # 0x7af98
leaq 0x60a99(%rip), %rsi     # 0x66548
leaq 0xc2fa(%rip), %rbp      # 0x11db0
cmovneq 0x75512(%rip), %rbp     # 0x7afd0
leaq 0xc363(%rip), %r15      # 0x11e28
cmovneq 0x754f3(%rip), %r15     # 0x7afc0
leaq 0xc3cc(%rip), %rax      # 0x11ea0
cmovneq 0x754cc(%rip), %rax     # 0x7afa8
movq %rax, 0x58(%rsp)
leaq 0xc42d(%rip), %rax      # 0x11f15
cmovneq 0x754a0(%rip), %rax     # 0x7af90
movq %rax, 0x60(%rsp)
leaq 0xc456(%rip), %rax      # 0x11f52
cmovneq 0x754ac(%rip), %rax     # 0x7afb0
movq %rax, 0x10(%rsp)
leaq 0xc47f(%rip), %rax      # 0x11f8f
cmovneq 0x754a0(%rip), %rax     # 0x7afb8
movq %rax, 0x18(%rsp)
leaq 0xc4a8(%rip), %rax      # 0x11fcc
cmovneq 0x754b4(%rip), %rax     # 0x7afe0
movq %rax, 0x20(%rsp)
leaq 0xc704(%rip), %rax      # 0x1223c
cmovneq 0x75498(%rip), %rax     # 0x7afd8
movq %rax, 0x28(%rsp)
leaq 0xc72d(%rip), %rax      # 0x12279
cmovneq 0x7549c(%rip), %rax     # 0x7aff0
movq %rax, 0x30(%rsp)
movq %r14, %rdi
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x609e3(%rip), %rsi     # 0x66551
movq %rbp, %rdx
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x609d8(%rip), %rsi     # 0x6655b
movq %r15, %rdx
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x609cc(%rip), %rsi     # 0x66564
movq 0x58(%rsp), %rdx
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x609bf(%rip), %rsi     # 0x6656e
movq 0x60(%rsp), %rdx
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x609b1(%rip), %rsi     # 0x66577
movq 0x10(%rsp), %rdx
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x609a3(%rip), %rsi     # 0x66580
movq 0x18(%rsp), %rdx
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x60996(%rip), %rsi     # 0x6658a
movq 0x20(%rsp), %rdx
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x60987(%rip), %rsi     # 0x66592
leaq 0xc3c6(%rip), %rdx      # 0x11fd8
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x60978(%rip), %rsi     # 0x6659c
leaq 0xc3de(%rip), %rdx      # 0x12009
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x60967(%rip), %rsi     # 0x665a4
leaq 0xc3ee(%rip), %rdx      # 0x12032
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x60957(%rip), %rsi     # 0x665ad
leaq 0xc42f(%rip), %rdx      # 0x1208c
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x6094b(%rip), %rsi     # 0x665ba
leaq 0xc4d1(%rip), %rdx      # 0x12147
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x6093c(%rip), %rsi     # 0x665c4
leaq 0xc504(%rip), %rdx      # 0x12193
movl %r12d, %ecx
callq 0x4c28
movq %r14, %rdi
leaq 0x6092d(%rip), %rsi     # 0x665ce
movq 0x28(%rsp), %rdx
movl %r12d, %ecx
callq 0x4c28
leaq 0x60923(%rip), %rsi     # 0x665d8
movq %r14, %rdi
movq 0x30(%rsp), %rdx
movl %r12d, %ecx
callq 0x4c28
leaq 0x60916(%rip), %rsi     # 0x665e2
leaq 0xc5b2(%rip), %rdx      # 0x12285
movq %r14, %rdi
movl %r12d, %ecx
callq 0x4c28
movq 0x48(%rsp), %rdi
movq %rdi, %r14
movq %r13, %rsi
pushq $0x12
popq %rdx
callq 0x14da9
movq 0x5288(%rbx), %rcx
movq %rcx, 0x8(%rax)
cmpl $0x12, (%rax)
jne 0x5d23
movl 0x52b8(%rbx), %edx
movl %edx, 0x10(%rax)
imull 0xc0(%rcx), %edx
movl %edx, 0xc0(%rax)
movl 0xc4(%rcx), %ecx
movl %ecx, 0xc4(%rax)
movl $0x1, (%rsp)
leaq 0x60690(%rip), %r8      # 0x663c1
movq 0x50(%rsp), %rdi
movq %r14, %rsi
movq 0x40(%rsp), %rdx
movq %r13, %rcx
movq %rax, %r9
callq 0x10a24
movq 0x120(%rax), %r14
xorl %r15d, %r15d
movq 0x8(%rsp), %r12
movslq 0x52b8(%rbx), %rax
cmpq %rax, %r15
jge 0x5d9b
movq 0x52c0(%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0x3130
movq %r12, %rdi
movq %rax, %rsi
callq 0x41e7
movq %rax, (%r14,%r15,8)
movq 0x52c0(%rbx), %rcx
movq (%rcx,%r15,8), %rsi
movq %rax, %rdi
callq 0x30a0
incq %r15
jmp 0x5d58
leaq 0x74aee(%rip), %r13     # 0x7a890
xorl %ebp, %ebp
leaq 0x70(%rsp), %rbx
leaq 0x63e28(%rip), %r14     # 0x69bd8
movq 0x40(%rsp), %r15
cmpq $0x10, %rbp
je 0x5e1a
movl $0x100, %edx            # imm = 0x100
movq %rbx, %rdi
xorl %esi, %esi
callq 0x3190
movq (%r13), %r12
movq %r15, %rdi
movq %r12, %rsi
movq 0x38(%rsp), %rdx
movq %rbx, %rcx
movl $0x100, %r8d            # imm = 0x100
callq 0x4ab1
movq %r12, %rdi
leaq 0x605d8(%rip), %rsi     # 0x663c9
callq 0x3210
xorl %ecx, %ecx
testl %eax, %eax
sete %cl
movslq (%rbp,%r14), %rdx
addq %r14, %rdx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x482f
addq $0x4, %rbp
addq $0x8, %r13
jmp 0x5db5
addq $0x278, %rsp            # imm = 0x278
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq