// File: /workspace/github_c_makefile_star2_O2/theandrew168[P]squeaky/src/main.c
// Function: main
int
main(int argc, char* argv[])
{
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        fprintf(stderr, "failed to init SDL2: %s\n", SDL_GetError());
        return EXIT_FAILURE;
    }

    struct vm vm = { 0 };
    vm_init(&vm);

    struct value* env = env_empty(&vm);
    env_define(&vm, vm_make_symbol(&vm, "nil"), vm_make_empty_list(&vm), env);
    env_define(&vm, vm_make_symbol(&vm, "stdin"), vm_make_input_port(&vm, stdin), env);
    env_define(&vm, vm_make_symbol(&vm, "stdout"), vm_make_output_port(&vm, stdout), env);
    env_define(&vm, vm_make_symbol(&vm, "stderr"), vm_make_output_port(&vm, stderr), env);

    // R5RS 6.1: Equivalence Predicates
    add_builtin(&vm, "eq?", builtin_is_eq, env);  // shallow compare (slightly more specific than eqv)
    add_builtin(&vm, "eqv?", builtin_is_eqv, env);  // shallow compare (baseline "what you'd expect" comparison)
    add_builtin(&vm, "equal?", builtin_is_equal, env);  // deep compare (recursive baseline comparison)

    // R5RS 6.2.5: Numerical Operations
    add_builtin(&vm, "number?", builtin_is_number, env);
    add_builtin(&vm, "=", builtin_equal, env);
    add_builtin(&vm, "<", builtin_less, env);
    add_builtin(&vm, ">", builtin_greater, env);
    add_builtin(&vm, "<=", builtin_less_equal, env);
    add_builtin(&vm, ">=", builtin_greater_equal, env);
    add_builtin(&vm, "+", builtin_add, env);
    add_builtin(&vm, "*", builtin_mul, env);
    add_builtin(&vm, "-", builtin_sub, env);
    add_builtin(&vm, "/", builtin_div, env);

    // R5RS 6.3.1: Booleans
    add_builtin(&vm, "boolean?", builtin_is_boolean, env);

    // R5RS 6.3.2: Pairs and Lists
    add_builtin(&vm, "pair?", builtin_is_pair, env);
    add_builtin(&vm, "cons", builtin_cons, env);
    add_builtin(&vm, "car", builtin_car, env);
    add_builtin(&vm, "cdr", builtin_cdr, env);
    add_builtin(&vm, "set-car!", builtin_set_car, env);
    add_builtin(&vm, "set-cdr!", builtin_set_cdr, env);
    add_builtin(&vm, "null?", builtin_is_null, env);

    // R5RS 6.3.3: Symbols
    add_builtin(&vm, "symbol?", builtin_is_symbol, env);

    // R5RS 6.3.5: Strings
    add_builtin(&vm, "string?", builtin_is_string, env);

    // R5RS 6.4: Control Features
    add_builtin(&vm, "procedure?", builtin_is_procedure, env);
    add_builtin(&vm, "apply", mce_builtin_apply, env);  // will be handled specifically by the MCE

    // R5RS 6.5: Eval
    add_builtin(&vm, "eval", mce_builtin_eval, env);  // will be handled specifically by the MCE

    // R5RS 6.6.1: Ports
    add_builtin(&vm, "input-port?", builtin_is_input_port, env);
    add_builtin(&vm, "output-port?", builtin_is_output_port, env);
    add_builtin(&vm, "current-input-port", builtin_current_input_port, env);
    add_builtin(&vm, "current-output-port", builtin_current_output_port, env);
    add_builtin(&vm, "open-input-file", builtin_open_input_file, env);
    add_builtin(&vm, "open-output-file", builtin_open_output_file, env);
    add_builtin(&vm, "close-input-port", builtin_close_input_port, env);
    add_builtin(&vm, "close-output-port", builtin_close_output_port, env);

    // R5RS 6.6.2: Input
    add_builtin(&vm, "read", builtin_read, env);
    add_builtin(&vm, "read-char", builtin_read_char, env);
    add_builtin(&vm, "peek-char", builtin_peek_char, env);
    add_builtin(&vm, "eof-object?", builtin_is_eof_object, env);
    add_builtin(&vm, "char-ready?", builtin_is_char_ready, env);

    // R5RS 6.6.3: Output
    add_builtin(&vm, "write", builtin_write, env);
    add_builtin(&vm, "display", builtin_display, env);
    add_builtin(&vm, "newline", builtin_newline, env);
    add_builtin(&vm, "write-char", builtin_write_char, env);

    /* Squeaky Extensions */

    // Windows
    add_builtin(&vm, "window?", builtin_is_window, env);
    add_builtin(&vm, "make-window", builtin_make_window, env);
    add_builtin(&vm, "window-clear!", builtin_window_clear, env);
    add_builtin(&vm, "window-draw-line!", builtin_window_draw_line, env);
    add_builtin(&vm, "window-present!", builtin_window_present, env);

    // Events
    add_builtin(&vm, "event?", builtin_is_event, env);
    add_builtin(&vm, "event-poll", builtin_event_poll, env);
    add_builtin(&vm, "event-type", builtin_event_type, env);
    add_builtin(&vm, "event-key", builtin_event_key, env);

    // load prelude (small library of R5RS funcs and extensions)
    struct value* exp = vm_make_pair(&vm,
        vm_make_symbol(&vm, "load"),
        vm_make_pair(&vm,
            vm_make_string(&vm, "prelude.scm"),
            vm_make_empty_list(&vm)));
    mce_eval(&vm, exp, env);

    // eval files given on CLI (if any) otherwise default to REPL
    if (argc >= 2) {
        for (int i = 1; i < argc; i++) {
            struct value* exp = vm_make_pair(&vm,
                vm_make_symbol(&vm, "load"),
                vm_make_pair(&vm,
                    vm_make_string(&vm, argv[1]),
                    vm_make_empty_list(&vm)));
            mce_eval(&vm, exp, env);
        }
    } else {
        for (;;) {
            printf("> ");
            struct value* exp = reader_read(&vm, stdin);
            if (value_is_eof(exp)) break;
            value_println(stdout, exp);

            struct value* res = mce_eval(&vm, exp, env);
            value_println(stdout, res);
        }
    }

    vm_free(&vm);
    SDL_Quit();
    return EXIT_SUCCESS;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rsi, 0x8(%rsp)
movl %edi, %ebp
pushq $0x20
popq %rdi
callq 0x1130
testl %eax, %eax
jne 0x1fef
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %r15
movaps %xmm0, (%r15)
andq $0x0, 0x10(%r15)
movq %r15, %rdi
callq 0x6508
movq %r15, %rdi
callq 0x4bc0
movq %rax, %rbx
leaq 0x5c61(%rip), %rsi      # 0x701d
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
movq %r15, %rdi
callq 0x66fc
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5c3a(%rip), %rsi      # 0x7021
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
movq 0xabdf(%rip), %rax      # 0xbfd8
movq (%rax), %rsi
movq %r15, %rdi
callq 0x69aa
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5c0b(%rip), %rsi      # 0x7027
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
movq 0xab92(%rip), %rax      # 0xbfc0
movq (%rax), %rsi
movq %r15, %rdi
callq 0x69e3
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5bdd(%rip), %rsi      # 0x702e
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
movq 0xab7d(%rip), %rax      # 0xbfe0
movq (%rax), %rsi
movq %r15, %rdi
callq 0x69e3
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5baf(%rip), %rsi      # 0x7035
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xb80(%rip), %rsi       # 0x2018
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5b81(%rip), %rsi      # 0x7039
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xbd5(%rip), %rsi       # 0x209f
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5b54(%rip), %rsi      # 0x703e
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xc2a(%rip), %rsi       # 0x2126
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5b29(%rip), %rsi      # 0x7045
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xc7f(%rip), %rsi       # 0x21ad
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5b02(%rip), %rsi      # 0x7050
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xcbb(%rip), %rsi       # 0x221b
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5acd(%rip), %rsi      # 0x704d
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xd9d(%rip), %rsi       # 0x232f
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x685e(%rip), %rsi      # 0x7e10
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xe7a(%rip), %rsi       # 0x243e
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5a6b(%rip), %rsi      # 0x704f
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0xf57(%rip), %rsi       # 0x254d
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5a3c(%rip), %rsi      # 0x7052
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1034(%rip), %rsi      # 0x265c
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5a0d(%rip), %rsi      # 0x7055
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1111(%rip), %rsi      # 0x276b
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x59dd(%rip), %rsi      # 0x7057
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x11dd(%rip), %rsi      # 0x2869
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x59ad(%rip), %rsi      # 0x7059
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x12ab(%rip), %rsi      # 0x2969
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x597d(%rip), %rsi      # 0x705b
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x137d(%rip), %rsi      # 0x2a6d
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x594d(%rip), %rsi      # 0x705d
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1487(%rip), %rsi      # 0x2ba9
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5924(%rip), %rsi      # 0x7066
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x14c3(%rip), %rsi      # 0x2c17
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x58f8(%rip), %rsi      # 0x706c
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x14ff(%rip), %rsi      # 0x2c85
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x58cb(%rip), %rsi      # 0x7071
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x154c(%rip), %rsi      # 0x2d04
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x589d(%rip), %rsi      # 0x7075
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x15db(%rip), %rsi      # 0x2dc5
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x586f(%rip), %rsi      # 0x7079
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x166a(%rip), %rsi      # 0x2e86
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5846(%rip), %rsi      # 0x7082
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x170c(%rip), %rsi      # 0x2f5a
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x581d(%rip), %rsi      # 0x708b
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x17ae(%rip), %rsi      # 0x302e
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x57f1(%rip), %rsi      # 0x7091
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x17ea(%rip), %rsi      # 0x309c
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x57c7(%rip), %rsi      # 0x7099
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1826(%rip), %rsi      # 0x310a
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x579d(%rip), %rsi      # 0x70a1
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1862(%rip), %rsi      # 0x3178
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5776(%rip), %rsi      # 0x70ac
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x3f22(%rip), %rsi      # 0x586a
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x574a(%rip), %rsi      # 0x70b2
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x3ecb(%rip), %rsi      # 0x5845
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x571d(%rip), %rsi      # 0x70b7
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x183c(%rip), %rsi      # 0x31e8
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x56f7(%rip), %rsi      # 0x70c3
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1878(%rip), %rsi      # 0x3256
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x56d2(%rip), %rsi      # 0x70d0
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x18b4(%rip), %rsi      # 0x32c4
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x56b3(%rip), %rsi      # 0x70e3
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x18e9(%rip), %rsi      # 0x332b
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5695(%rip), %rsi      # 0x70f7
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x191e(%rip), %rsi      # 0x3392
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5673(%rip), %rsi      # 0x7107
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x19f9(%rip), %rsi      # 0x349f
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5652(%rip), %rsi      # 0x7118
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1ad4(%rip), %rsi      # 0x35ac
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5631(%rip), %rsi      # 0x7129
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1b6f(%rip), %rsi      # 0x3679
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5611(%rip), %rsi      # 0x713b
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1c0a(%rip), %rsi      # 0x3746
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x55e4(%rip), %rsi      # 0x7140
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1cd9(%rip), %rsi      # 0x3847
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x55bc(%rip), %rsi      # 0x714a
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1dfc(%rip), %rsi      # 0x399c
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5594(%rip), %rsi      # 0x7154
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1f29(%rip), %rsi      # 0x3afb
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x556e(%rip), %rsi      # 0x7160
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x1f65(%rip), %rsi      # 0x3b69
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5548(%rip), %rsi      # 0x716c
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2083(%rip), %rsi      # 0x3cb9
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x551c(%rip), %rsi      # 0x7172
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x217a(%rip), %rsi      # 0x3de2
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x610e(%rip), %rsi      # 0x7d96
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2271(%rip), %rsi      # 0x3f0b
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x54c0(%rip), %rsi      # 0x717a
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2348(%rip), %rsi      # 0x4014
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5499(%rip), %rsi      # 0x7185
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x24a1(%rip), %rsi      # 0x419f
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x546f(%rip), %rsi      # 0x718d
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x24dd(%rip), %rsi      # 0x420d
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5449(%rip), %rsi      # 0x7199
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2660(%rip), %rsi      # 0x43c2
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5425(%rip), %rsi      # 0x71a7
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x271a(%rip), %rsi      # 0x44ae
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5405(%rip), %rsi      # 0x71b9
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x298b(%rip), %rsi      # 0x4751
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x53e3(%rip), %rsi      # 0x71c9
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2a26(%rip), %rsi      # 0x481e
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x53b8(%rip), %rsi      # 0x71d0
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2a62(%rip), %rsi      # 0x488c
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5391(%rip), %rsi      # 0x71db
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2b27(%rip), %rsi      # 0x4983
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x536a(%rip), %rsi      # 0x71e6
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x2c25(%rip), %rsi      # 0x4ab3
movq %r15, %rdi
callq 0x6922
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x4f30
leaq 0x5342(%rip), %rsi      # 0x71f0
movq %r15, %rdi
callq 0x6875
movq %rax, %r12
leaq 0x5335(%rip), %rsi      # 0x71f5
movq %r15, %rdi
callq 0x6811
movq %rax, %r13
movq %r15, %rdi
callq 0x66fc
movq %r15, %rdi
movq %r13, %rsi
movq %rax, %rdx
callq 0x68d9
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x68d9
movq %r15, %rdi
movq %rax, %rsi
movq %rbx, %rdx
callq 0x5100
cmpl $0x1, %ebp
jle 0x1f6f
decl %ebp
leaq 0x52e5(%rip), %r15      # 0x71f0
leaq 0x10(%rsp), %r12
subl $0x1, %ebp
jb 0x1fcf
movq %r12, %rdi
movq %r15, %rsi
callq 0x6875
movq %rax, %r13
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rsi
movq %r12, %rdi
callq 0x6811
movq %rax, %r14
movq %r12, %rdi
callq 0x66fc
movq %r12, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x68d9
movq %r12, %rdi
movq %r13, %rsi
movq %rax, %rdx
callq 0x68d9
movq %r12, %rdi
movq %rax, %rsi
movq %rbx, %rdx
callq 0x5100
jmp 0x1f10
leaq 0x528b(%rip), %r14      # 0x7201
leaq 0x10(%rsp), %r15
movq 0xa056(%rip), %r13      # 0xbfd8
movq 0xa037(%rip), %rbp      # 0xbfc0
movq %r14, %rdi
xorl %eax, %eax
callq 0x1050
movq (%r13), %rsi
movq %r15, %rdi
callq 0x5ed2
cmpl $0xe, (%rax)
je 0x1fcf
movq %rax, %r12
movq (%rbp), %rdi
movq %rax, %rsi
callq 0x63fa
movq %r15, %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x5100
movq (%rbp), %rdi
movq %rax, %rsi
callq 0x63fa
jmp 0x1f89
leaq 0x10(%rsp), %rdi
callq 0x6570
callq 0x1070
xorl %eax, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x9fea(%rip), %rax      # 0xbfe0
movq (%rax), %rbx
callq 0x1110
leaq 0x4fff(%rip), %rsi      # 0x7004
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1220
pushq $0x1
popq %rax
jmp 0x1fe0
nop