// File: /workspace/github_c_makefile_star2_O0/janet-lang[P]janet/src/core/marsh.c
// Function: marshal_one
static void marshal_one(MarshalState *st, Janet x, int flags) {
    MARSH_STACKCHECK;
    JanetType type = janet_type(x);

    /* Check simple primitives (non reference types, no benefit from memoization) */
    switch (type) {
        default:
            break;
        case JANET_NIL:
            pushbyte(st, LB_NIL);
            return;
        case JANET_BOOLEAN:
            pushbyte(st, janet_unwrap_boolean(x) ? LB_TRUE : LB_FALSE);
            return;
        case JANET_NUMBER: {
            double xval = janet_unwrap_number(x);
            if (janet_checkintrange(xval)) {
                pushint(st, (int32_t) xval);
                return;
            }
            break;
        }
    }

    /* Check reference and registry value */
    {
        Janet check;
        if (st->maybe_cycles) {
            check = janet_table_get(&st->seen, x);
            if (janet_checkint(check)) {
                pushbyte(st, LB_REFERENCE);
                pushint(st, janet_unwrap_integer(check));
                return;
            }
        }
        if (st->rreg) {
            check = janet_table_get(st->rreg, x);
            if (janet_checktype(check, JANET_SYMBOL)) {
                MARK_SEEN();
                const uint8_t *regname = janet_unwrap_symbol(check);
                pushbyte(st, LB_REGISTRY);
                pushint(st, janet_string_length(regname));
                pushbytes(st, regname, janet_string_length(regname));
                return;
            }
        }
    }

    /* Reference types */
    switch (type) {
        case JANET_NUMBER: {
            union {
                double d;
                uint8_t bytes[8];
            } u;
            u.d = janet_unwrap_number(x);
#ifdef JANET_BIG_ENDIAN
            /* Swap byte order */
            uint8_t temp;
            temp = u.bytes[7];
            u.bytes[7] = u.bytes[0];
            u.bytes[0] = temp;
            temp = u.bytes[6];
            u.bytes[6] = u.bytes[1];
            u.bytes[1] = temp;
            temp = u.bytes[5];
            u.bytes[5] = u.bytes[2];
            u.bytes[2] = temp;
            temp = u.bytes[4];
            u.bytes[4] = u.bytes[3];
            u.bytes[3] = temp;
#endif
            pushbyte(st, LB_REAL);
            pushbytes(st, u.bytes, 8);
            MARK_SEEN();
            return;
        }
        case JANET_STRING:
        case JANET_SYMBOL:
        case JANET_KEYWORD: {
            const uint8_t *str = janet_unwrap_string(x);
            int32_t length = janet_string_length(str);
            /* Record reference */
            MARK_SEEN();
            uint8_t lb = (type == JANET_STRING) ? LB_STRING :
                         (type == JANET_SYMBOL) ? LB_SYMBOL :
                         LB_KEYWORD;
            pushbyte(st, lb);
            pushint(st, length);
            pushbytes(st, str, length);
            return;
        }
        case JANET_BUFFER: {
            JanetBuffer *buffer = janet_unwrap_buffer(x);
            /* Record reference */
            MARK_SEEN();
#ifdef JANET_EV
            if ((flags & JANET_MARSHAL_UNSAFE) &&
                    (buffer->gc.flags & JANET_BUFFER_FLAG_NO_REALLOC)) {
                pushbyte(st, LB_POINTER_BUFFER);
                pushint(st, buffer->count);
                pushint(st, buffer->capacity);
                pushpointer(st, buffer->data);
                return;
            }
#endif
            pushbyte(st, LB_BUFFER);
            pushint(st, buffer->count);
            pushbytes(st, buffer->data, buffer->count);
            return;
        }
        case JANET_ARRAY: {
            int32_t i;
            JanetArray *a = janet_unwrap_array(x);
            MARK_SEEN();
            enum JanetMemoryType memtype = janet_gc_type(a);
            pushbyte(st, memtype == JANET_MEMORY_ARRAY_WEAK ? LB_ARRAY_WEAK : LB_ARRAY);
            pushint(st, a->count);
            for (i = 0; i < a->count; i++)
                marshal_one(st, a->data[i], flags + 1);
            return;
        }
        case JANET_TUPLE: {
            int32_t i, count, flag;
            const Janet *tup = janet_unwrap_tuple(x);
            count = janet_tuple_length(tup);
            flag = janet_tuple_flag(tup) >> 16;
            pushbyte(st, LB_TUPLE);
            pushint(st, count);
            pushint(st, flag);
            for (i = 0; i < count; i++)
                marshal_one(st, tup[i], flags + 1);
            /* Mark as seen AFTER marshaling */
            MARK_SEEN();
            return;
        }
        case JANET_TABLE: {
            JanetTable *t = janet_unwrap_table(x);
            MARK_SEEN();
            enum JanetMemoryType memtype = janet_gc_type(t);
            if (memtype == JANET_MEMORY_TABLE_WEAKK) {
                pushbyte(st, t->proto ? LB_TABLE_WEAKK_PROTO : LB_TABLE_WEAKK);
            } else if (memtype == JANET_MEMORY_TABLE_WEAKV) {
                pushbyte(st, t->proto ? LB_TABLE_WEAKV_PROTO : LB_TABLE_WEAKV);
            } else if (memtype == JANET_MEMORY_TABLE_WEAKKV) {
                pushbyte(st, t->proto ? LB_TABLE_WEAKKV_PROTO : LB_TABLE_WEAKKV);
            } else {
                pushbyte(st, t->proto ? LB_TABLE_PROTO : LB_TABLE);
            }
            pushint(st, t->count);
            if (t->proto)
                marshal_one(st, janet_wrap_table(t->proto), flags + 1);
            for (int32_t i = 0; i < t->capacity; i++) {
                if (janet_checktype(t->data[i].key, JANET_NIL))
                    continue;
                marshal_one(st, t->data[i].key, flags + 1);
                marshal_one(st, t->data[i].value, flags + 1);
            }
            return;
        }
        case JANET_STRUCT: {
            int32_t count;
            const JanetKV *struct_ = janet_unwrap_struct(x);
            count = janet_struct_length(struct_);
            pushbyte(st, janet_struct_proto(struct_) ? LB_STRUCT_PROTO : LB_STRUCT);
            pushint(st, count);
            if (janet_struct_proto(struct_))
                marshal_one(st, janet_wrap_struct(janet_struct_proto(struct_)), flags + 1);
            for (int32_t i = 0; i < janet_struct_capacity(struct_); i++) {
                if (janet_checktype(struct_[i].key, JANET_NIL))
                    continue;
                marshal_one(st, struct_[i].key, flags + 1);
                marshal_one(st, struct_[i].value, flags + 1);
            }
            /* Mark as seen AFTER marshaling */
            MARK_SEEN();
            return;
        }
        case JANET_ABSTRACT: {
            marshal_one_abstract(st, x, flags);
            return;
        }
        case JANET_FUNCTION: {
            pushbyte(st, LB_FUNCTION);
            JanetFunction *func = janet_unwrap_function(x);
            pushint(st, func->def->environments_length);
            /* Mark seen before reading def */
            MARK_SEEN();
            marshal_one_def(st, func->def, flags);
            for (int32_t i = 0; i < func->def->environments_length; i++)
                marshal_one_env(st, func->envs[i], flags + 1);
            return;
        }
        case JANET_FIBER: {
            MARK_SEEN();
            pushbyte(st, LB_FIBER);
            marshal_one_fiber(st, janet_unwrap_fiber(x), flags + 1);
            return;
        }
        case JANET_CFUNCTION: {
            if (!(flags & JANET_MARSHAL_UNSAFE)) goto no_registry;
            MARK_SEEN();
            pushbyte(st, LB_UNSAFE_CFUNCTION);
            JanetCFunction cfn = janet_unwrap_cfunction(x);
            pushbytes(st, (uint8_t *) &cfn, sizeof(JanetCFunction));
            return;
        }
        case JANET_POINTER: {
            if (!(flags & JANET_MARSHAL_UNSAFE)) goto no_registry;
            MARK_SEEN();
            pushbyte(st, LB_UNSAFE_POINTER);
            pushpointer(st, janet_unwrap_pointer(x));
            return;
        }
    no_registry:
        default: {
            janet_panicf("no registry value and cannot marshal %p", x);
        }
    }
#undef MARK_SEEN
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1e0, %rsp            # imm = 0x1E0
movq %rsi, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl -0x14(%rbp), %eax
andl $0xffff, %eax           # imm = 0xFFFF
cmpl $0x400, %eax            # imm = 0x400
jle 0x40871
leaq 0x496a7(%rip), %rdi     # 0x89f13
callq 0x1ad60
movsd -0x8(%rbp), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x40883
jmp 0x40897
movq -0x8(%rbp), %rax
shrq $0x2f, %rax
andq $0xf, %rax
movl %eax, -0x144(%rbp)
jmp 0x408a1
xorl %eax, %eax
movl %eax, -0x144(%rbp)
jmp 0x408a1
movl -0x144(%rbp), %eax
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x148(%rbp)
testl %eax, %eax
je 0x40915
jmp 0x408b9
movl -0x148(%rbp), %eax
subl $0x1, %eax
je 0x408d8
jmp 0x408c6
movl -0x148(%rbp), %eax
subl $0x2, %eax
je 0x408eb
jmp 0x408d3
jmp 0x4096c
movq -0x10(%rbp), %rdi
movl $0xc9, %esi
callq 0x40750
jmp 0x416f3
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rdx
andq $0x1, %rdx
movl $0xca, %eax
movl $0xcb, %ecx
cmpq $0x0, %rdx
cmovnel %ecx, %eax
movzbl %al, %esi
callq 0x40750
jmp 0x416f3
movsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm0
movsd 0x3eb4c(%rip), %xmm1    # 0x7f478
ucomisd %xmm1, %xmm0
jb 0x4096a
movsd 0x3eb46(%rip), %xmm0    # 0x7f480
ucomisd -0x20(%rbp), %xmm0
jb 0x4096a
movsd -0x20(%rbp), %xmm0
cvttsd2si -0x20(%rbp), %eax
cvtsi2sd %eax, %xmm1
ucomisd %xmm1, %xmm0
jne 0x4096a
jp 0x4096a
movq -0x10(%rbp), %rdi
cvttsd2si -0x20(%rbp), %esi
callq 0x405d0
jmp 0x416f3
jmp 0x4096c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x409c4
movq -0x10(%rbp), %rdi
addq $0x8, %rdi
movq -0x8(%rbp), %rsi
callq 0x69420
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0x6d480
cmpl $0x0, %eax
je 0x409c2
movq -0x10(%rbp), %rdi
movl $0xda, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
cvttsd2si -0x28(%rbp), %esi
callq 0x405d0
jmp 0x416f3
jmp 0x409c4
movq -0x10(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x40ad5
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x8(%rbp), %rsi
callq 0x69420
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
xorl %eax, %eax
testb $0x1, %al
jne 0x409f8
jmp 0x40a21
movsd -0x28(%rbp), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x40a0a
jmp 0x40a42
movq -0x28(%rbp), %rax
shrq $0x2f, %rax
andq $0xf, %rax
cmpq $0x0, %rax
je 0x40a42
jmp 0x40ad3
movabsq $-0x800000000000, %rax  # imm = 0xFFFF800000000000
andq -0x28(%rbp), %rax
movabsq $-0x5800000000000, %rcx # imm = 0xFFFA800000000000
cmpq %rcx, %rax
jne 0x40ad3
jmp 0x40a44
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x40a8d
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x150(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x150(%rbp), %rdi
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0x697e0
jmp 0x40a8f
movq -0x28(%rbp), %rdi
callq 0x7b260
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rdi
movl $0xd8, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
movq -0x48(%rbp), %rax
movl -0x8(%rax), %esi
callq 0x405d0
movq -0x10(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq -0x48(%rbp), %rax
movl -0x8(%rax), %edx
callq 0x407d0
jmp 0x416f3
jmp 0x40ad5
movl -0x18(%rbp), %eax
movq %rax, -0x158(%rbp)
subq $0xf, %rax
ja 0x416e1
movq -0x158(%rbp), %rax
leaq 0x4bcd9(%rip), %rcx     # 0x8c7d0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movl $0xc8, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
leaq -0x50(%rbp), %rsi
movl $0x8, %edx
callq 0x407d0
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x40b73
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x160(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x160(%rbp), %rdi
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rsi
movq -0x58(%rbp), %rdx
callq 0x697e0
jmp 0x40b75
jmp 0x416f3
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movl -0x8(%rax), %eax
movl %eax, -0x64(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x40bda
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x168(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x168(%rbp), %rdi
movq %rax, -0x70(%rbp)
movq -0x8(%rbp), %rsi
movq -0x70(%rbp), %rdx
callq 0x697e0
jmp 0x40bdc
cmpl $0x4, -0x18(%rbp)
jne 0x40bef
movl $0xce, %eax
movl %eax, -0x16c(%rbp)
jmp 0x40c08
movl -0x18(%rbp), %edx
movl $0xd0, %eax
movl $0xcf, %ecx
cmpl $0x5, %edx
cmovel %ecx, %eax
movl %eax, -0x16c(%rbp)
movl -0x16c(%rbp), %eax
movb %al, -0x71(%rbp)
movq -0x10(%rbp), %rdi
movzbl -0x71(%rbp), %esi
callq 0x40750
movq -0x10(%rbp), %rdi
movl -0x64(%rbp), %esi
callq 0x405d0
movq -0x10(%rbp), %rdi
movq -0x60(%rbp), %rsi
movl -0x64(%rbp), %edx
callq 0x407d0
jmp 0x416f3
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0x80(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x40c9b
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x178(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x178(%rbp), %rdi
movq %rax, -0x88(%rbp)
movq -0x8(%rbp), %rsi
movq -0x88(%rbp), %rdx
callq 0x697e0
jmp 0x40c9d
movl -0x14(%rbp), %eax
andl $0x20000, %eax          # imm = 0x20000
cmpl $0x0, %eax
je 0x40cfe
movq -0x80(%rbp), %rax
movl (%rax), %eax
andl $0x10000, %eax          # imm = 0x10000
cmpl $0x0, %eax
je 0x40cfe
movq -0x10(%rbp), %rdi
movl $0xe1, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rax
movl 0x10(%rax), %esi
callq 0x405d0
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rax
movl 0x14(%rax), %esi
callq 0x405d0
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x406f0
jmp 0x416f3
movq -0x10(%rbp), %rdi
movl $0xd6, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rax
movl 0x10(%rax), %esi
callq 0x405d0
movq -0x10(%rbp), %rdi
movq -0x80(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x80(%rbp), %rax
movl 0x10(%rax), %edx
callq 0x407d0
jmp 0x416f3
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0x98(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x40d98
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x180(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x180(%rbp), %rdi
movq %rax, -0xa0(%rbp)
movq -0x8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
callq 0x697e0
jmp 0x40d9a
movq -0x98(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
movl %eax, -0xa4(%rbp)
movq -0x10(%rbp), %rdi
movl -0xa4(%rbp), %edx
movl $0xd1, %eax
movl $0xe8, %ecx
cmpl $0x11, %edx
cmovel %ecx, %eax
movzbl %al, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
movq -0x98(%rbp), %rax
movl 0x10(%rax), %esi
callq 0x405d0
movl $0x0, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
movq -0x98(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jge 0x40e35
movq -0x10(%rbp), %rdi
movq -0x98(%rbp), %rax
movq 0x18(%rax), %rax
movslq -0x8c(%rbp), %rcx
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq (%rax,%rcx,8), %rsi
callq 0x40840
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x40ded
jmp 0x416f3
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movl -0x10(%rax), %eax
movl %eax, -0xac(%rbp)
movq -0xb8(%rbp), %rax
movl -0x20(%rax), %eax
sarl $0x10, %eax
movl %eax, -0xb0(%rbp)
movq -0x10(%rbp), %rdi
movl $0xd2, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
movl -0xac(%rbp), %esi
callq 0x405d0
movq -0x10(%rbp), %rdi
movl -0xb0(%rbp), %esi
callq 0x405d0
movl $0x0, -0xa8(%rbp)
movl -0xa8(%rbp), %eax
cmpl -0xac(%rbp), %eax
jge 0x40ee3
movq -0x10(%rbp), %rdi
movq -0xb8(%rbp), %rax
movslq -0xa8(%rbp), %rcx
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq (%rax,%rcx,8), %rsi
callq 0x40840
movl -0xa8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa8(%rbp)
jmp 0x40ea3
jmp 0x40ee5
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x40f34
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x188(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x188(%rbp), %rdi
movq %rax, -0xc0(%rbp)
movq -0x8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
callq 0x697e0
jmp 0x40f36
jmp 0x416f3
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0xc8(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x40f9a
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x190(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x190(%rbp), %rdi
movq %rax, -0xd0(%rbp)
movq -0x8(%rbp), %rsi
movq -0xd0(%rbp), %rdx
callq 0x697e0
jmp 0x40f9c
movq -0xc8(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
movl %eax, -0xd4(%rbp)
cmpl $0xe, -0xd4(%rbp)
jne 0x40fe6
movq -0x10(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x28(%rax), %rdx
movl $0xe2, %eax
movl $0xe5, %ecx
cmpq $0x0, %rdx
cmovnel %ecx, %eax
movzbl %al, %esi
callq 0x40750
jmp 0x41078
cmpl $0xf, -0xd4(%rbp)
jne 0x41019
movq -0x10(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x28(%rax), %rdx
movl $0xe3, %eax
movl $0xe6, %ecx
cmpq $0x0, %rdx
cmovnel %ecx, %eax
movzbl %al, %esi
callq 0x40750
jmp 0x41076
cmpl $0x10, -0xd4(%rbp)
jne 0x4104c
movq -0x10(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x28(%rax), %rdx
movl $0xe4, %eax
movl $0xe7, %ecx
cmpq $0x0, %rdx
cmovnel %ecx, %eax
movzbl %al, %esi
callq 0x40750
jmp 0x41074
movq -0x10(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x28(%rax), %rdx
movl $0xd3, %eax
movl $0xd4, %ecx
cmpq $0x0, %rdx
cmovnel %ecx, %eax
movzbl %al, %esi
callq 0x40750
jmp 0x41076
jmp 0x41078
movq -0x10(%rbp), %rdi
movq -0xc8(%rbp), %rax
movl 0x10(%rax), %esi
callq 0x405d0
movq -0xc8(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x410de
movq -0x10(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0xc8(%rbp), %rax
movq 0x28(%rax), %rdi
movabsq $-0x3800000000000, %rsi # imm = 0xFFFC800000000000
callq 0x7b610
movq -0x198(%rbp), %rdi
movq %rax, -0xe0(%rbp)
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq -0xe0(%rbp), %rsi
callq 0x40840
movl $0x0, -0xe4(%rbp)
movl -0xe4(%rbp), %eax
movq -0xc8(%rbp), %rcx
cmpl 0x14(%rcx), %eax
jge 0x411fe
xorl %eax, %eax
testb $0x1, %al
jne 0x41106
jmp 0x4115c
movq -0xc8(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xe4(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x41130
jmp 0x41191
movq -0xc8(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xe4(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
shrq $0x2f, %rax
andq $0xf, %rax
cmpq $0x0, %rax
je 0x41191
jmp 0x41193
movq -0xc8(%rbp), %rax
movq 0x20(%rax), %rcx
movslq -0xe4(%rbp), %rax
shlq $0x4, %rax
addq %rax, %rcx
movabsq $-0x800000000000, %rax  # imm = 0xFFFF800000000000
andq (%rcx), %rax
movabsq $-0x7800000000000, %rcx # imm = 0xFFF8800000000000
cmpq %rcx, %rax
jne 0x41193
jmp 0x411ea
movq -0x10(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xe4(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq (%rax), %rsi
callq 0x40840
movq -0x10(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0xe4(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq 0x8(%rax), %rsi
callq 0x40840
movl -0xe4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xe4(%rbp)
jmp 0x410e8
jmp 0x416f3
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
movl -0x18(%rax), %eax
movl %eax, -0xe8(%rbp)
movq -0x10(%rbp), %rdi
movq -0xf0(%rbp), %rax
movq -0x8(%rax), %rdx
movl $0xd5, %eax
movl $0xdf, %ecx
cmpq $0x0, %rdx
cmovnel %ecx, %eax
movzbl %al, %esi
callq 0x40750
movq -0x10(%rbp), %rdi
movl -0xe8(%rbp), %esi
callq 0x405d0
movq -0xf0(%rbp), %rax
cmpq $0x0, -0x8(%rax)
je 0x412ad
movq -0x10(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0xf0(%rbp), %rax
movq -0x8(%rax), %rdi
movabsq $-0x3000000000000, %rsi # imm = 0xFFFD000000000000
callq 0x7b550
movq -0x1a0(%rbp), %rdi
movq %rax, -0xf8(%rbp)
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq -0xf8(%rbp), %rsi
callq 0x40840
movl $0x0, -0xfc(%rbp)
movl -0xfc(%rbp), %eax
movq -0xf0(%rbp), %rcx
cmpl -0x10(%rcx), %eax
jge 0x413b9
xorl %eax, %eax
testb $0x1, %al
jne 0x412d5
jmp 0x41323
movq -0xf0(%rbp), %rax
movslq -0xfc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x412fb
jmp 0x41354
movq -0xf0(%rbp), %rax
movslq -0xfc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
shrq $0x2f, %rax
andq $0xf, %rax
cmpq $0x0, %rax
je 0x41354
jmp 0x41356
movq -0xf0(%rbp), %rcx
movslq -0xfc(%rbp), %rax
shlq $0x4, %rax
addq %rax, %rcx
movabsq $-0x800000000000, %rax  # imm = 0xFFFF800000000000
andq (%rcx), %rax
movabsq $-0x7800000000000, %rcx # imm = 0xFFF8800000000000
cmpq %rcx, %rax
jne 0x41356
jmp 0x413a5
movq -0x10(%rbp), %rdi
movq -0xf0(%rbp), %rax
movslq -0xfc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq (%rax), %rsi
callq 0x40840
movq -0x10(%rbp), %rdi
movq -0xf0(%rbp), %rax
movslq -0xfc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl -0x14(%rbp), %edx
addl $0x1, %edx
movq 0x8(%rax), %rsi
callq 0x40840
movl -0xfc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xfc(%rbp)
jmp 0x412b7
jmp 0x413bb
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x4140a
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x1a8(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x1a8(%rbp), %rdi
movq %rax, -0x108(%rbp)
movq -0x8(%rbp), %rsi
movq -0x108(%rbp), %rdx
callq 0x697e0
jmp 0x4140c
jmp 0x416f3
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %edx
movq -0x8(%rbp), %rsi
callq 0x43a90
jmp 0x416f3
movq -0x10(%rbp), %rdi
movl $0xd7, %esi
callq 0x40750
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0x110(%rbp)
movq -0x10(%rbp), %rdi
movq -0x110(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x74(%rax), %esi
callq 0x405d0
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x414aa
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x1b0(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x1b0(%rbp), %rdi
movq %rax, -0x118(%rbp)
movq -0x8(%rbp), %rsi
movq -0x118(%rbp), %rdx
callq 0x697e0
jmp 0x414ac
movq -0x10(%rbp), %rdi
movq -0x110(%rbp), %rax
movq 0x10(%rax), %rsi
movl -0x14(%rbp), %edx
callq 0x43c10
movl $0x0, -0x11c(%rbp)
movl -0x11c(%rbp), %eax
movq -0x110(%rbp), %rcx
movq 0x10(%rcx), %rcx
cmpl 0x74(%rcx), %eax
jge 0x41516
movq -0x10(%rbp), %rdi
movq -0x110(%rbp), %rax
movslq -0x11c(%rbp), %rcx
movq 0x18(%rax,%rcx,8), %rsi
movl -0x14(%rbp), %edx
addl $0x1, %edx
callq 0x440c0
movl -0x11c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x11c(%rbp)
jmp 0x414cd
jmp 0x416f3
jmp 0x4151d
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x4156c
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x1b8(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x1b8(%rbp), %rdi
movq %rax, -0x128(%rbp)
movq -0x8(%rbp), %rsi
movq -0x128(%rbp), %rdx
callq 0x697e0
jmp 0x4156e
movq -0x10(%rbp), %rdi
movl $0xcc, %esi
callq 0x40750
movq -0x10(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b260
movq -0x1c0(%rbp), %rdi
movq %rax, %rsi
movl -0x14(%rbp), %edx
addl $0x1, %edx
callq 0x44380
jmp 0x416f3
movl -0x14(%rbp), %eax
andl $0x20000, %eax          # imm = 0x20000
cmpl $0x0, %eax
jne 0x415bc
jmp 0x416df
jmp 0x415be
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x4160d
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x1c8(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x1c8(%rbp), %rdi
movq %rax, -0x130(%rbp)
movq -0x8(%rbp), %rsi
movq -0x130(%rbp), %rdx
callq 0x697e0
jmp 0x4160f
movq -0x10(%rbp), %rdi
movl $0xdd, %esi
callq 0x40750
movq -0x8(%rbp), %rdi
callq 0x7b260
movq %rax, -0x138(%rbp)
movq -0x10(%rbp), %rdi
leaq -0x138(%rbp), %rsi
movl $0x8, %edx
callq 0x407d0
jmp 0x416f3
movl -0x14(%rbp), %eax
andl $0x20000, %eax          # imm = 0x20000
cmpl $0x0, %eax
jne 0x41659
jmp 0x416df
jmp 0x4165b
movq -0x10(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x416aa
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x1d0(%rbp)
movq -0x10(%rbp), %rcx
movl 0x50(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x50(%rcx)
cvtsi2sd %eax, %xmm0
callq 0x7b820
movq -0x1d0(%rbp), %rdi
movq %rax, -0x140(%rbp)
movq -0x8(%rbp), %rsi
movq -0x140(%rbp), %rdx
callq 0x697e0
jmp 0x416ac
movq -0x10(%rbp), %rdi
movl $0xde, %esi
callq 0x40750
movq -0x10(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b260
movq -0x1d8(%rbp), %rdi
movq %rax, %rsi
callq 0x406f0
jmp 0x416f3
jmp 0x416e1
movq -0x8(%rbp), %rsi
leaq 0x4b5ba(%rip), %rdi     # 0x8cca6
movb $0x0, %al
callq 0x1ac40
addq $0x1e0, %rsp            # imm = 0x1E0
popq %rbp
retq
nopl (%rax)