// File: /workspace/github_c_makefile_star2_O3/stetre[P]moonnuklear/src/./nuklear/nuklear.h
// Function: nk_textedit_key
NK_LIB void
nk_textedit_key(struct nk_text_edit *state, enum nk_keys key, int shift_mod,
    const struct nk_user_font *font, float row_height)
{
retry:
    switch (key)
    {
    case NK_KEY_NONE:
    case NK_KEY_CTRL:
    case NK_KEY_ENTER:
    case NK_KEY_SHIFT:
    case NK_KEY_TAB:
    case NK_KEY_COPY:
    case NK_KEY_CUT:
    case NK_KEY_PASTE:
    case NK_KEY_MAX:
    default: break;
    case NK_KEY_TEXT_UNDO:
         nk_textedit_undo(state);
         state->has_preferred_x = 0;
         break;

    case NK_KEY_TEXT_REDO:
        nk_textedit_redo(state);
        state->has_preferred_x = 0;
        break;

    case NK_KEY_TEXT_SELECT_ALL:
        nk_textedit_select_all(state);
        state->has_preferred_x = 0;
        break;

    case NK_KEY_TEXT_INSERT_MODE:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            state->mode = NK_TEXT_EDIT_MODE_INSERT;
        break;
    case NK_KEY_TEXT_REPLACE_MODE:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            state->mode = NK_TEXT_EDIT_MODE_REPLACE;
        break;
    case NK_KEY_TEXT_RESET_MODE:
        if (state->mode == NK_TEXT_EDIT_MODE_INSERT ||
            state->mode == NK_TEXT_EDIT_MODE_REPLACE)
            state->mode = NK_TEXT_EDIT_MODE_VIEW;
        break;

    case NK_KEY_LEFT:
        if (shift_mod) {
            nk_textedit_clamp(state);
            nk_textedit_prep_selection_at_cursor(state);
            /* move selection left */
            if (state->select_end > 0)
                --state->select_end;
            state->cursor = state->select_end;
            state->has_preferred_x = 0;
        } else {
            /* if currently there's a selection,
             * move cursor to start of selection */
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_first(state);
            else if (state->cursor > 0)
               --state->cursor;
            state->has_preferred_x = 0;
        } break;

    case NK_KEY_RIGHT:
        if (shift_mod) {
            nk_textedit_prep_selection_at_cursor(state);
            /* move selection right */
            ++state->select_end;
            nk_textedit_clamp(state);
            state->cursor = state->select_end;
            state->has_preferred_x = 0;
        } else {
            /* if currently there's a selection,
             * move cursor to end of selection */
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_last(state);
            else ++state->cursor;
            nk_textedit_clamp(state);
            state->has_preferred_x = 0;
        } break;

    case NK_KEY_TEXT_WORD_LEFT:
        if (shift_mod) {
            if( !NK_TEXT_HAS_SELECTION( state ) )
            nk_textedit_prep_selection_at_cursor(state);
            state->cursor = nk_textedit_move_to_word_previous(state);
            state->select_end = state->cursor;
            nk_textedit_clamp(state );
        } else {
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_first(state);
            else {
                state->cursor = nk_textedit_move_to_word_previous(state);
                nk_textedit_clamp(state );
            }
        } break;

    case NK_KEY_TEXT_WORD_RIGHT:
        if (shift_mod) {
            if( !NK_TEXT_HAS_SELECTION( state ) )
                nk_textedit_prep_selection_at_cursor(state);
            state->cursor = nk_textedit_move_to_word_next(state);
            state->select_end = state->cursor;
            nk_textedit_clamp(state);
        } else {
            if (NK_TEXT_HAS_SELECTION(state))
                nk_textedit_move_to_last(state);
            else {
                state->cursor = nk_textedit_move_to_word_next(state);
                nk_textedit_clamp(state );
            }
        } break;

    case NK_KEY_DOWN: {
        struct nk_text_find find;
        struct nk_text_edit_row row;
        int i, sel = shift_mod;

        if (state->single_line) {
            /* on windows, up&down in single-line behave like left&right */
            key = NK_KEY_RIGHT;
            goto retry;
        }

        if (sel)
            nk_textedit_prep_selection_at_cursor(state);
        else if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_move_to_last(state);

        /* compute current position of cursor point */
        nk_textedit_clamp(state);
        nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
            font, row_height);

        /* now find character position down a row */
        if (find.length)
        {
            float x;
            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;
            int start = find.first_char + find.length;

            state->cursor = start;
            nk_textedit_layout_row(&row, state, state->cursor, row_height, font);
            x = row.x0;

            for (i=0; i < row.num_chars && x < row.x1; ++i) {
                float dx = nk_textedit_get_width(state, start, i, font);
                x += dx;
                if (x > goal_x)
                    break;
                ++state->cursor;
            }
            nk_textedit_clamp(state);

            state->has_preferred_x = 1;
            state->preferred_x = goal_x;
            if (sel)
                state->select_end = state->cursor;
        }
    } break;

    case NK_KEY_UP: {
        struct nk_text_find find;
        struct nk_text_edit_row row;
        int i, sel = shift_mod;

        if (state->single_line) {
            /* on windows, up&down become left&right */
            key = NK_KEY_LEFT;
            goto retry;
        }

        if (sel)
            nk_textedit_prep_selection_at_cursor(state);
        else if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_move_to_first(state);

         /* compute current position of cursor point */
         nk_textedit_clamp(state);
         nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);

         /* can only go up if there's a previous row */
         if (find.prev_first != find.first_char) {
            /* now find character position up a row */
            float x;
            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;

            state->cursor = find.prev_first;
            nk_textedit_layout_row(&row, state, state->cursor, row_height, font);
            x = row.x0;

            for (i=0; i < row.num_chars && x < row.x1; ++i) {
                float dx = nk_textedit_get_width(state, find.prev_first, i, font);
                x += dx;
                if (x > goal_x)
                    break;
                ++state->cursor;
            }
            nk_textedit_clamp(state);

            state->has_preferred_x = 1;
            state->preferred_x = goal_x;
            if (sel) state->select_end = state->cursor;
         }
      } break;

    case NK_KEY_DEL:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            break;
        if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_delete_selection(state);
        else {
            int n = state->string.len;
            if (state->cursor < n)
                nk_textedit_delete(state, state->cursor, 1);
         }
         state->has_preferred_x = 0;
         break;

    case NK_KEY_BACKSPACE:
        if (state->mode == NK_TEXT_EDIT_MODE_VIEW)
            break;
        if (NK_TEXT_HAS_SELECTION(state))
            nk_textedit_delete_selection(state);
        else {
            nk_textedit_clamp(state);
            if (state->cursor > 0) {
                nk_textedit_delete(state, state->cursor-1, 1);
                --state->cursor;
            }
         }
         state->has_preferred_x = 0;
         break;

    case NK_KEY_TEXT_START:
         if (shift_mod) {
            nk_textedit_prep_selection_at_cursor(state);
            state->cursor = state->select_end = 0;
            state->has_preferred_x = 0;
         } else {
            state->cursor = state->select_start = state->select_end = 0;
            state->has_preferred_x = 0;
         }
         break;

    case NK_KEY_TEXT_END:
         if (shift_mod) {
            nk_textedit_prep_selection_at_cursor(state);
            state->cursor = state->select_end = state->string.len;
            state->has_preferred_x = 0;
         } else {
            state->cursor = state->string.len;
            state->select_start = state->select_end = 0;
            state->has_preferred_x = 0;
         }
         break;

    case NK_KEY_TEXT_LINE_START: {
        if (shift_mod) {
            struct nk_text_find find;
           nk_textedit_clamp(state);
            nk_textedit_prep_selection_at_cursor(state);
            if (state->string.len && state->cursor == state->string.len)
                --state->cursor;
            nk_textedit_find_charpos(&find, state,state->cursor, state->single_line,
                font, row_height);
            state->cursor = state->select_end = find.first_char;
            state->has_preferred_x = 0;
        } else {
            struct nk_text_find find;
            if (state->string.len && state->cursor == state->string.len)
                --state->cursor;
            nk_textedit_clamp(state);
            nk_textedit_move_to_first(state);
            nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);
            state->cursor = find.first_char;
            state->has_preferred_x = 0;
        }
      } break;

    case NK_KEY_TEXT_LINE_END: {
        if (shift_mod) {
            struct nk_text_find find;
            nk_textedit_clamp(state);
            nk_textedit_prep_selection_at_cursor(state);
            nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);
            state->has_preferred_x = 0;
            state->cursor = find.first_char + find.length;
            if (find.length > 0 && nk_str_rune_at(&state->string, state->cursor-1) == '\n')
                --state->cursor;
            state->select_end = state->cursor;
        } else {
            struct nk_text_find find;
            nk_textedit_clamp(state);
            nk_textedit_move_to_first(state);
            nk_textedit_find_charpos(&find, state, state->cursor, state->single_line,
                font, row_height);

            state->has_preferred_x = 0;
            state->cursor = find.first_char + find.length;
            if (find.length > 0 && nk_str_rune_at(&state->string, state->cursor-1) == '\n')
                --state->cursor;
        }} break;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rcx, %r14
movl %edx, %ebp
movq %rdi, %rbx
leaq 0x15a25(%rip), %rax     # 0x6dbe8
addl $-0x3, %esi
cmpl $0x16, %esi
ja 0x58b2f
movslq (%rax,%rsi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
cmpb $0x0, 0xb8(%rbx)
je 0x5850d
movl $0xc, %esi
jmp 0x581c3
cmpb $0x0, 0xb8(%rbx)
je 0x584d5
movl $0xd, %esi
jmp 0x581c3
cmpb $0x0, 0xb4(%rbx)
jne 0x58b2f
movb $0x2, 0xb4(%rbx)
jmp 0x58b2f
movb 0xb4(%rbx), %al
decb %al
cmpb $0x1, %al
ja 0x58b2f
movb $0x0, 0xb4(%rbx)
jmp 0x58b2f
cmpb $0x0, 0xb4(%rbx)
jne 0x58b2f
movb $0x1, 0xb4(%rbx)
jmp 0x58b2f
movss %xmm0, (%rsp)
movq %rbx, %rdi
testl %ebp, %ebp
je 0x58552
callq 0x4ac86
movl 0xb0(%rbx), %edx
cmpl %edx, 0xac(%rbx)
jne 0x586df
movl 0xa8(%rbx), %edx
movl %edx, 0xb0(%rbx)
movl %edx, 0xac(%rbx)
jmp 0x586e5
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
testl %ebp, %ebp
je 0x5857b
movl 0xa8(%rbx), %ebp
cmpl %ecx, %eax
jne 0x582b6
movl %ebp, 0xb0(%rbx)
movl %ebp, 0xac(%rbx)
movl %ebp, %eax
leal -0x1(%rax), %ebp
testl %eax, %eax
jle 0x582cd
movq %rbx, %rdi
movl %ebp, %esi
callq 0x596d9
testl %eax, %eax
je 0x582b6
xorl %eax, %eax
testl %ebp, %ebp
cmovgl %ebp, %eax
jmp 0x583aa
cmpb $0x0, 0xb4(%rbx)
je 0x58b2f
movl 0xac(%rbx), %eax
cmpl 0xb0(%rbx), %eax
jne 0x58545
movl 0xa8(%rbx), %esi
cmpl 0x90(%rbx), %esi
jge 0x58b28
movq %rbx, %rdi
movl $0x1, %edx
callq 0x12360
jmp 0x58b28
cmpb $0x0, 0xb4(%rbx)
je 0x58b2f
movl 0xac(%rbx), %eax
cmpl 0xb0(%rbx), %eax
jne 0x58545
movq %rbx, %rdi
callq 0x4ac86
movl 0xa8(%rbx), %esi
testl %esi, %esi
jle 0x58b28
decl %esi
movq %rbx, %rdi
movl $0x1, %edx
callq 0x12360
decl 0xa8(%rbx)
jmp 0x58b28
movq %rbx, %rdi
callq 0x12350
jmp 0x58b28
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
testl %ebp, %ebp
je 0x585a5
cmpl %ecx, %eax
jne 0x583a2
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
movq %rbx, %rdi
callq 0x594d3
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
jmp 0x585bb
testl %ebp, %ebp
je 0x585d1
movq %rbx, %rdi
callq 0x4ac86
movl 0xb0(%rbx), %eax
cmpl %eax, 0xac(%rbx)
jne 0x583eb
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
testl %eax, %eax
jle 0x58b22
decl %eax
jmp 0x587a4
testl %ebp, %ebp
je 0x58611
movl 0xac(%rbx), %eax
cmpl 0xb0(%rbx), %eax
jne 0x5841c
movl 0xa8(%rbx), %eax
movl %eax, 0xac(%rbx)
movl 0x90(%rbx), %eax
jmp 0x587a4
movq %rbx, %rdi
callq 0x13890
jmp 0x58b28
testl %ebp, %ebp
movss %xmm0, (%rsp)
je 0x5862d
movq %rbx, %rdi
callq 0x4ac86
movl 0xb0(%rbx), %edx
cmpl %edx, 0xac(%rbx)
jne 0x5875d
movl 0xa8(%rbx), %edx
movl %edx, 0xb0(%rbx)
movl %edx, 0xac(%rbx)
jmp 0x58763
movl 0xac(%rbx), %ecx
movl 0xb0(%rbx), %eax
testl %ebp, %ebp
je 0x58673
cmpl %eax, %ecx
jne 0x587af
movl 0xa8(%rbx), %eax
movl %eax, 0xac(%rbx)
jmp 0x587b5
movq %rbx, %rdi
callq 0x12840
jmp 0x58b28
testl %ebp, %ebp
je 0x58686
movl 0xac(%rbx), %eax
cmpl 0xb0(%rbx), %eax
jne 0x584ce
movl 0xa8(%rbx), %eax
movl %eax, 0xac(%rbx)
xorl %eax, %eax
jmp 0x587a4
movl 0xac(%rbx), %ecx
movl 0xb0(%rbx), %eax
testl %ebp, %ebp
movss %xmm0, (%rsp)
je 0x586a0
cmpl %eax, %ecx
jne 0x587d0
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x587d6
movl 0xac(%rbx), %ecx
movl 0xb0(%rbx), %eax
testl %ebp, %ebp
movss %xmm0, (%rsp)
je 0x586b5
cmpl %eax, %ecx
jne 0x588f9
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
movl %eax, 0xac(%rbx)
jmp 0x588ff
movq %rbx, %rdi
callq 0x13e30
jmp 0x58b28
callq 0x4ac86
movl 0xac(%rbx), %edx
movl 0xb0(%rbx), %eax
cmpl %eax, %edx
jne 0x58a44
movl 0xa8(%rbx), %edx
movss (%rsp), %xmm0
jmp 0x58a66
cmpl %ecx, %eax
jne 0x585f6
movl 0xa8(%rbx), %ebp
movl %ebp, %eax
leal -0x1(%rax), %ebp
testl %eax, %eax
jle 0x5859c
movq %rbx, %rdi
movl %ebp, %esi
callq 0x596d9
testl %eax, %eax
je 0x58585
xorl %eax, %eax
testl %ebp, %ebp
cmovgl %ebp, %eax
jmp 0x585b5
cmpl %ecx, %eax
jne 0x58acc
movq %rbx, %rdi
callq 0x594d3
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x4ac86
movl 0xac(%rbx), %eax
movl 0xb0(%rbx), %ecx
cmpl %ecx, %eax
jne 0x585f6
movl 0xa8(%rbx), %eax
testl %eax, %eax
jle 0x58b28
decl %eax
jmp 0x58b22
jle 0x58600
movl %ecx, 0xac(%rbx)
movl %ecx, %eax
movl %eax, 0xa8(%rbx)
movl %eax, 0xb0(%rbx)
jmp 0x58b28
movl 0x90(%rbx), %eax
movl %eax, 0xa8(%rbx)
movq $0x0, 0xac(%rbx)
jmp 0x58b28
movl 0x90(%rbx), %eax
testl %eax, %eax
je 0x58647
cmpl %eax, 0xa8(%rbx)
jne 0x58647
decl %eax
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
callq 0x4ac86
movl 0xac(%rbx), %edx
movl 0xb0(%rbx), %eax
cmpl %eax, %edx
jne 0x58ae2
movl 0xa8(%rbx), %edx
movss (%rsp), %xmm0
jmp 0x58b04
cmpl %eax, %ecx
jne 0x58b3e
incl 0xa8(%rbx)
jmp 0x58b46
movl $0x0, 0xb0(%rbx)
movq $0x0, 0xa8(%rbx)
jmp 0x58b28
cmpl %eax, %ecx
je 0x587d6
movq %rbx, %rdi
callq 0x5948e
jmp 0x587d6
cmpl %eax, %ecx
je 0x588ff
jle 0x586c7
movl %eax, 0xac(%rbx)
movl %eax, %ecx
movl %ecx, 0xa8(%rbx)
movl %ecx, 0xb0(%rbx)
movb $0x0, 0xb7(%rbx)
jmp 0x588ff
movl %edx, 0xa8(%rbx)
movss (%rsp), %xmm0
movzbl 0xb8(%rbx), %ecx
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x59515
movb $0x0, 0xb7(%rbx)
movl 0x10(%r15), %eax
movl 0xc(%r15), %esi
addl %eax, %esi
movl %esi, 0xa8(%rbx)
testl %eax, %eax
jle 0x58752
leaq 0x18(%rbx), %rdi
decl %esi
leaq 0x4(%rsp), %r14
movl $0x0, (%r14)
leaq 0x18(%rsp), %rcx
movq %r14, %rdx
callq 0x13f60
cmpl $0xa, (%r14)
movl 0xa8(%rbx), %esi
jne 0x58752
decl %esi
movl %esi, 0xa8(%rbx)
movl %esi, 0xb0(%rbx)
jmp 0x58b2f
movl %edx, 0xa8(%rbx)
movss (%rsp), %xmm0
movl 0x90(%rbx), %eax
testl %eax, %eax
setne %cl
cmpl %eax, %edx
sete %al
andb %cl, %al
cmpb $0x1, %al
jne 0x58786
decl %edx
movl %edx, 0xa8(%rbx)
movzbl 0xb8(%rbx), %ecx
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x59515
movl 0xc(%r15), %eax
movl %eax, 0xb0(%rbx)
jmp 0x58b22
movl %eax, 0xa8(%rbx)
incl %eax
movl %eax, 0xb0(%rbx)
movq %rbx, %rdi
callq 0x4ac86
movl 0xb0(%rbx), %eax
jmp 0x58b22
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
callq 0x4ac86
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
leaq 0x30(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movq %r14, %r8
movss (%rsp), %xmm0
callq 0x59515
movl 0x10(%r12), %r15d
testl %r15d, %r15d
je 0x58b2f
leaq 0xbc(%rbx), %rax
cmpb $0x0, 0xb7(%rbx)
cmoveq %r12, %rax
movss (%rax), %xmm0
movss %xmm0, 0x8(%rsp)
addl 0x3c(%rsp), %r15d
movl %r15d, 0xa8(%rbx)
leaq 0x18(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movl %r15d, %edx
movss (%rsp), %xmm0
movq %r14, %rcx
callq 0x593dd
movl 0x14(%r12), %eax
movl %eax, 0x10(%rsp)
testl %eax, %eax
jle 0x58a0e
movss 0x18(%rsp), %xmm0
movss 0x1c(%rsp), %xmm1
movss %xmm1, 0xc(%rsp)
ucomiss %xmm0, %xmm1
jbe 0x58a0e
leaq 0x18(%rbx), %r12
movl $0x1, %r13d
movss %xmm0, (%rsp)
xorl %eax, %eax
movl %eax, 0x4(%rsp)
movl %eax, 0x14(%rsp)
leal (%r15,%r13), %esi
decl %esi
movq %r12, %rdi
leaq 0x14(%rsp), %rdx
leaq 0x4(%rsp), %rcx
callq 0x13f60
movss 0x8(%r14), %xmm0
movl 0x4(%rsp), %edx
movq (%r14), %rdi
movq %rax, %rsi
callq *0x10(%r14)
addss (%rsp), %xmm0
ucomiss 0x8(%rsp), %xmm0
ja 0x58a0e
incl 0xa8(%rbx)
cmpl 0x10(%rsp), %r13d
jge 0x58a0e
incl %r13d
movss 0xc(%rsp), %xmm1
ucomiss %xmm0, %xmm1
ja 0x5888a
jmp 0x58a0e
movl %eax, 0xa8(%rbx)
movq %rbx, %rdi
callq 0x4ac86
movl 0xa8(%rbx), %edx
movzbl 0xb8(%rbx), %ecx
leaq 0x30(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movq %r14, %r8
movss (%rsp), %xmm0
callq 0x59515
movl 0x14(%r12), %r15d
cmpl 0xc(%r12), %r15d
je 0x58b2f
leaq 0xbc(%rbx), %rax
cmpb $0x0, 0xb7(%rbx)
cmoveq %r12, %rax
movss (%rax), %xmm0
movss %xmm0, 0x8(%rsp)
movl %r15d, 0xa8(%rbx)
leaq 0x18(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movl %r15d, %edx
movss (%rsp), %xmm0
movq %r14, %rcx
callq 0x593dd
movl 0x14(%r12), %eax
movl %eax, 0x10(%rsp)
testl %eax, %eax
jle 0x58a0e
movss 0x18(%rsp), %xmm0
movss 0x1c(%rsp), %xmm1
movss %xmm1, 0xc(%rsp)
ucomiss %xmm0, %xmm1
jbe 0x58a0e
leaq 0x18(%rbx), %r12
movl $0x1, %r13d
movss %xmm0, (%rsp)
xorl %eax, %eax
movl %eax, 0x4(%rsp)
movl %eax, 0x14(%rsp)
leal (%r15,%r13), %esi
decl %esi
movq %r12, %rdi
leaq 0x14(%rsp), %rdx
leaq 0x4(%rsp), %rcx
callq 0x13f60
movss 0x8(%r14), %xmm0
movl 0x4(%rsp), %edx
movq (%r14), %rdi
movq %rax, %rsi
callq *0x10(%r14)
addss (%rsp), %xmm0
ucomiss 0x8(%rsp), %xmm0
ja 0x58a0e
incl 0xa8(%rbx)
cmpl 0x10(%rsp), %r13d
jge 0x58a0e
incl %r13d
movss 0xc(%rsp), %xmm1
ucomiss %xmm0, %xmm1
ja 0x589ac
movq %rbx, %rdi
callq 0x4ac86
movb $0x1, 0xb7(%rbx)
movss 0x8(%rsp), %xmm0
movss %xmm0, 0xbc(%rbx)
testl %ebp, %ebp
je 0x58b2f
movl 0xa8(%rbx), %eax
movl %eax, 0xb0(%rbx)
jmp 0x58b2f
movss (%rsp), %xmm0
jle 0x58a53
movl %eax, 0xac(%rbx)
movl %eax, %edx
movl %edx, 0xa8(%rbx)
movl %edx, 0xb0(%rbx)
movb $0x0, 0xb7(%rbx)
movzbl 0xb8(%rbx), %ecx
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x59515
movb $0x0, 0xb7(%rbx)
movl 0x10(%r15), %eax
movl 0xc(%r15), %esi
addl %eax, %esi
movl %esi, 0xa8(%rbx)
testl %eax, %eax
jle 0x58b2f
leaq 0x18(%rbx), %rdi
decl %esi
leaq 0x4(%rsp), %r14
movl $0x0, (%r14)
leaq 0x18(%rsp), %rcx
movq %r14, %rdx
callq 0x13f60
cmpl $0xa, (%r14)
jne 0x58b2f
decl 0xa8(%rbx)
jmp 0x58b2f
movq %rbx, %rdi
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x5948e
movss (%rsp), %xmm0
jle 0x58af1
movl %eax, 0xac(%rbx)
movl %eax, %edx
movl %edx, 0xa8(%rbx)
movl %edx, 0xb0(%rbx)
movb $0x0, 0xb7(%rbx)
movzbl 0xb8(%rbx), %ecx
leaq 0x30(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %r14, %r8
callq 0x59515
movl 0xc(%r15), %eax
movl %eax, 0xa8(%rbx)
movb $0x0, 0xb7(%rbx)
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rdi
callq 0x5948e
movq %rbx, %rdi
callq 0x4ac86
jmp 0x58b28