LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_scrl_signal
static lv_res_t lv_ddlist_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_scrl_signal(scrl, sign, param);
    if(res != LV_RES_OK) return res;

    lv_obj_t * ddlist = lv_obj_get_parent(scrl);

    if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
        /*TODO review this*/
        /* Because of the wider selected rectangle ext. size
         * In this way by dragging the scrollable part the wider rectangle area can be redrawn too*/
        const lv_style_t * style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
        lv_coord_t hpad          = LV_MATH_MAX(style->body.padding.left, style->body.padding.right);
        if(scrl->ext_draw_pad < hpad) scrl->ext_draw_pad = hpad;
    } else if(sign == LV_SIGNAL_RELEASED) {
        if(lv_indev_is_dragging(lv_indev_get_act()) == false) {
            release_handler(ddlist);
        }
    } else if(sign == LV_SIGNAL_CLEANUP) {
        lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
        ext->label            = NULL; /*The label is already deleted*/
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %r14
callq *0x549e9(%rip)          # 0x602d8
movl %eax, %ebx
cmpb $0x1, %al
jne 0xb964
movq %r14, %rdi
callq 0x4ab5
movq %rax, %r15
testb %bpl, %bpl
je 0xb954
movzbl %bpl, %eax
cmpl $0xb, %eax
je 0xb939
cmpl $0x6, %eax
jne 0xb964
movq %r15, %rdi
xorl %esi, %esi
callq 0xbe51
movzwl 0x1a(%rax), %ecx
movzwl 0x1c(%rax), %eax
cmpw %ax, %cx
cmovgl %ecx, %eax
cmpw %ax, 0x5c(%r14)
jge 0xb964
movw %ax, 0x5c(%r14)
jmp 0xb964
callq 0x378a
movq %rax, %rdi
callq 0x3869
testb %al, %al
jne 0xb964
movq %r15, %rdi
callq 0xc61e
jmp 0xb964
movq %r15, %rdi
callq 0x6af7
movq $0x0, 0x50(%rax)
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_options
void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
    LV_ASSERT_STR(options);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    /*Count the '\n'-s to determine the number of options*/
    ext->option_cnt = 0;
    uint16_t i;
    for(i = 0; options[i] != '\0'; i++) {
        if(options[i] == '\n') ext->option_cnt++;
    }
    ext->option_cnt++; /*Last option has no `\n`*/
    ext->sel_opt_id     = 0;
    ext->sel_opt_id_ori = 0;

    lv_label_set_text(ext->label, options);

    lv_ddlist_refr_width(ddlist);

    lv_label_align_t align = lv_label_get_align(ext->label);
    switch(align) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }

    lv_ddlist_refr_size(ddlist, false);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xbd46
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0xbd57
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r15
movw $0x0, 0x60(%rax)
xorl %eax, %eax
xorl %ecx, %ecx
movzwl %cx, %edx
movzbl (%r14,%rdx), %edx
cmpl $0xa, %edx
je 0xbd3b
testl %edx, %edx
jne 0xbd42
jmp 0xbd68
incl %eax
movw %ax, 0x60(%r15)
incl %ecx
jmp 0xbd28
leaq 0x33497(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xbd55
leaq 0x33486(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xbd66
incl %eax
movw %ax, 0x60(%r15)
movl $0x0, 0x62(%r15)
movq 0x50(%r15), %rdi
movq %r14, %rsi
callq 0x1a6da
movq %rbx, %rdi
callq 0xbeb7
movq 0x50(%r15), %rdi
callq 0x1a9c6
cmpb $0x2, %al
ja 0xbdb7
shlb $0x3, %al
movl $0x80007, %edx          # imm = 0x80007
movl %eax, %ecx
shrl %cl, %edx
movq 0x50(%r15), %rdi
movzbl %dl, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x5789
movq %rbx, %rdi
xorl %esi, %esi
popq %rbx
popq %r14
popq %r15
jmp 0xbfb8
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_style
void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    switch(type) {
        case LV_DDLIST_STYLE_BG:
            lv_page_set_style(ddlist, LV_PAGE_STYLE_BG, style);
            lv_ddlist_refr_width(ddlist);
            break;
        case LV_DDLIST_STYLE_SB: lv_page_set_style(ddlist, LV_PAGE_STYLE_SB, style); break;
        case LV_DDLIST_STYLE_SEL:
            ext->sel_style  = style;
            lv_obj_t * scrl = lv_page_get_scrl(ddlist);
            lv_obj_refresh_ext_draw_pad(scrl); /*Because of the wider selected rectangle*/
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xbe0f
movq %rbx, %rdi
callq 0x6af7
cmpb $0x2, %bpl
je 0xbe38
movzbl %bpl, %ecx
cmpl $0x1, %ecx
je 0xbe20
testl %ecx, %ecx
jne 0xbe4c
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x2640b
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0xbeb7
leaq 0x333ce(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xbe1e
movq %r14, 0x58(%rax)
movq %rbx, %rdi
callq 0x2695e
movq %rax, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x6514
movq %rbx, %rdi
movl $0x2, %esi
movq %r14, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x2640b
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_get_style
const lv_style_t * lv_ddlist_get_style(const lv_obj_t * ddlist, lv_ddlist_style_t type)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    switch(type) {
        case LV_DDLIST_STYLE_BG: return lv_page_get_style(ddlist, LV_PAGE_STYLE_BG);
        case LV_DDLIST_STYLE_SB: return lv_page_get_style(ddlist, LV_PAGE_STYLE_SB);
        case LV_DDLIST_STYLE_SEL: return ext->sel_style;
        default: return NULL;
    }

    /*To avoid warning*/
    return NULL;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xbe84
movq %rbx, %rdi
callq 0x6af7
cmpb $0x2, %bpl
je 0xbe9b
movzbl %bpl, %ecx
cmpl $0x1, %ecx
je 0xbe95
testl %ecx, %ecx
jne 0xbeae
movq %rbx, %rdi
xorl %esi, %esi
jmp 0xbea3
leaq 0x33359(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xbe93
movq 0x58(%rax), %rax
jmp 0xbeb0
movq %rbx, %rdi
movl $0x2, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x264cb
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_refr_width
static void lv_ddlist_refr_width(lv_obj_t * ddlist)
{
    lv_ddlist_ext_t * ext          = lv_obj_get_ext_attr(ddlist);

    /*Save the current x coordinate because it should be kept after the refrsh*/
    lv_coord_t x;
    if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) x = lv_obj_get_x(ddlist) + lv_obj_get_width(ddlist);
    else x = lv_obj_get_x(ddlist);

    /*Set the TIGHT fit horizontally the set the width to the content*/
    lv_page_set_scrl_fit2(ddlist, LV_FIT_TIGHT, lv_page_get_scrl_fit_bottom(ddlist));

    /*Revert FILL fit to fill the parent with the options area. It allows to RIGHT/CENTER align the text*/
    lv_page_set_scrl_fit2(ddlist, LV_FIT_FILL, lv_page_get_scrl_fit_bottom(ddlist));

    if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) lv_obj_set_x(ddlist, x - lv_obj_get_width(ddlist));
    else lv_obj_set_x(ddlist, x);

    switch(lv_label_get_align(ext->label)) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
callq 0x6af7
movq %rax, %rbx
movq %r14, %rdi
callq 0x4ab2
movl %eax, %r15d
movq %r14, %rdi
callq 0x4bdd
movl %eax, %ebp
cmpb $0x1, %r15b
jne 0xbeee
movq %r14, %rdi
callq 0x566d
addl %eax, %ebp
movq %r14, %rdi
callq 0x2695e
movq %rax, %rdi
callq 0x22f19
movl %eax, %r15d
movq %r14, %rdi
callq 0x2695e
movzbl %r15b, %ecx
movq %rax, %rdi
movl $0x1, %esi
movl $0x1, %edx
movl %ecx, %r8d
callq 0x22d84
movq %r14, %rdi
callq 0x2695e
movq %rax, %rdi
callq 0x22f19
movl %eax, %r15d
movq %r14, %rdi
callq 0x2695e
movzbl %r15b, %ecx
movq %rax, %rdi
movl $0x3, %esi
movl $0x3, %edx
movl %ecx, %r8d
callq 0x22d84
movq %r14, %rdi
callq 0x4ab2
cmpb $0x1, %al
jne 0xbf6c
movq %r14, %rdi
callq 0x566d
subl %eax, %ebp
movswl %bp, %esi
movq %r14, %rdi
callq 0x54db
movq 0x50(%rbx), %rdi
callq 0x1a9c6
cmpb $0x2, %al
ja 0xbfad
shlb $0x3, %al
movl $0x80007, %edx          # imm = 0x80007
movl %eax, %ecx
shrl %cl, %edx
movq 0x50(%rbx), %rdi
movzbl %dl, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5789
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_selected
void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    if(ext->sel_opt_id == sel_opt) return;

    ext->sel_opt_id     = sel_opt < ext->option_cnt ? sel_opt : ext->option_cnt - 1;
    ext->sel_opt_id_ori = ext->sel_opt_id;
    /*Move the list to show the current option*/
    if(ext->opened == 0) {
        lv_ddlist_pos_current_option(ddlist);
    } else {
        lv_obj_invalidate(ddlist);
    }
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xc138
movq %rbx, %rdi
callq 0x6af7
cmpw %bp, 0x62(%rax)
jne 0xc149
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x330a5(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xc147
movl 0x60(%rax), %ecx
movl %ecx, %edx
decl %edx
cmpw %bp, %cx
cmovbel %edx, %ebp
movw %bp, 0x62(%rax)
movw %bp, 0x64(%rax)
testb $0x1, 0x66(%rax)
jne 0xc16f
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xc17d
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_pos_current_option
static void lv_ddlist_pos_current_option(lv_obj_t * ddlist)
{
    lv_ddlist_ext_t * ext          = lv_obj_get_ext_attr(ddlist);
    const lv_style_t * style       = lv_obj_get_style(ddlist);
    const lv_font_t * font         = style->text.font;
    lv_coord_t font_h              = lv_font_get_line_height(font);
    const lv_style_t * label_style = lv_obj_get_style(ext->label);
    lv_obj_t * scrl                = lv_page_get_scrl(ddlist);

    lv_coord_t h = lv_obj_get_height(ddlist);
    lv_coord_t line_y1 =
        ext->sel_opt_id * (font_h + label_style->text.line_space) + ext->label->coords.y1 - scrl->coords.y1;

    lv_obj_set_y(scrl, -line_y1 + (h - font_h) / 2);
    lv_obj_invalidate(ddlist);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
callq 0x6af7
movq %rax, %r15
movq %rbx, %rdi
callq 0x66b6
movq 0x28(%rax), %rax
movzbl 0x10(%rax), %ebp
movq 0x50(%r15), %rdi
callq 0x66b6
movq %rax, %r12
movq %rbx, %rdi
callq 0x2695e
movq %rax, %r14
movq %rbx, %rdi
callq 0x5697
movzwl %bp, %ecx
movq 0x50(%r15), %rdx
movzwl 0x32(%r12), %esi
addw %cx, %si
imulw 0x62(%r15), %si
cwtl
subl %ecx, %eax
movl %eax, %ecx
shrl $0x1f, %ecx
addl %eax, %ecx
shrl %ecx
addw 0x22(%rdx), %si
subl %esi, %ecx
addw 0x22(%r14), %cx
movswl %cx, %esi
movq %r14, %rdi
callq 0x5519
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_fix_height
void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    if(ext->fix_height == h) return;

    ext->fix_height = h;

    lv_ddlist_refr_size(ddlist, false);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xc22d
movq %rbx, %rdi
callq 0x6af7
cmpw %bp, 0x68(%rax)
jne 0xc23e
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x32fb0(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xc23c
movw %bp, 0x68(%rax)
movq %rbx, %rdi
xorl %esi, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xbfb8
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_fix_width
void lv_ddlist_set_fix_width(lv_obj_t * ddlist, lv_coord_t w)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    if(w == 0) {
        lv_cont_set_fit2(ddlist, LV_FIT_TIGHT, lv_cont_get_fit_bottom(ddlist));
    } else {
        lv_cont_set_fit2(ddlist, LV_FIT_NONE, lv_cont_get_fit_bottom(ddlist));
        lv_obj_set_width(ddlist, w);
    }

    switch(lv_label_get_align(ext->label)) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }

    lv_ddlist_refr_size(ddlist, false);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xc29b
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r14
movq %rbx, %rdi
callq 0x22f19
movzbl %al, %ecx
movq %rbx, %rdi
testw %bp, %bp
je 0xc2ac
xorl %esi, %esi
xorl %edx, %edx
movl %ecx, %r8d
callq 0x22d84
movswl %bp, %esi
movq %rbx, %rdi
callq 0x570d
jmp 0xc2be
leaq 0x32f42(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xc2aa
movl $0x1, %esi
movl $0x1, %edx
movl %ecx, %r8d
callq 0x22d84
movq 0x50(%r14), %rdi
callq 0x1a9c6
cmpb $0x2, %al
ja 0xc2ea
shlb $0x3, %al
movl $0x80007, %edx          # imm = 0x80007
movl %eax, %ecx
shrl %cl, %edx
movq 0x50(%r14), %rdi
movzbl %dl, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x5789
movq %rbx, %rdi
xorl %esi, %esi
popq %rbx
popq %r14
popq %rbp
jmp 0xbfb8
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_draw_arrow
void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    /*Set the flag*/
    ext->draw_arrow = en ? 1 : 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0xc328
movq %r14, %rdi
callq 0x6af7
movb 0x66(%rax), %cl
shlb $0x2, %bl
andb $-0x5, %cl
orb %bl, %cl
movb %cl, 0x66(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x32eb5(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xc337
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_stay_open
void lv_ddlist_set_stay_open(lv_obj_t * ddlist, bool en)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    /*Set the flag*/
    ext->stay_open = en ? 1 : 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0xc369
movq %r14, %rdi
callq 0x6af7
movb 0x66(%rax), %cl
shlb $0x3, %bl
andb $-0x9, %cl
orb %bl, %cl
movb %cl, 0x66(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x32e74(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xc378
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_align
void lv_ddlist_set_align(lv_obj_t * ddlist, lv_label_align_t align)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    lv_label_set_align(ext->label, align);
    switch(align) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0xc3ce
movq %r14, %rdi
callq 0x6af7
movq %rax, %r14
movq 0x50(%rax), %rdi
movzbl %bl, %ebp
movl %ebp, %esi
callq 0x1a95d
cmpb $0x2, %bpl
ja 0xc3df
shlb $0x3, %bl
movl $0x80007, %eax          # imm = 0x80007
movl %ebx, %ecx
shrl %cl, %eax
movq 0x50(%r14), %rdi
movzbl %al, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
popq %rbx
popq %r14
popq %rbp
jmp 0x5789
leaq 0x32e0f(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xc3dd
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_get_selected_str
void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t buf_size)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    uint16_t i;
    uint16_t line        = 0;
    const char * opt_txt = lv_label_get_text(ext->label);
    size_t txt_len     = strlen(opt_txt);

    for(i = 0; i < txt_len && line != ext->sel_opt_id; i++) {
        if(opt_txt[i] == '\n') line++;
    }

    uint16_t c;
    for(c = 0; opt_txt[i] != '\n' && i < txt_len; c++, i++) {
        if(buf_size && c >= buf_size - 1) {
            LV_LOG_WARN("lv_ddlist_get_selected_str: the buffer was too small")
            break;
        }
        buf[c] = opt_txt[i];
    }

    buf[c] = '\0';
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0xc4a7
movq %r14, %rdi
callq 0x6af7
movq %rax, %r15
movq 0x50(%rax), %rdi
callq 0x1aa00
movq %rax, %r14
movq %rax, %rdi
callq 0x2070
testq %rax, %rax
je 0xc4b8
movzwl 0x62(%r15), %edx
xorl %edi, %edi
xorl %ecx, %ecx
xorl %esi, %esi
cmpw %dx, %si
je 0xc4ba
xorl %r8d, %r8d
cmpb $0xa, (%r14,%rdi)
sete %r8b
addl %r8d, %esi
incl %ecx
movzwl %cx, %edi
cmpq %rdi, %rax
ja 0xc487
jmp 0xc4ba
leaq 0x32d36(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xc4b6
xorl %ecx, %ecx
movzwl %cx, %esi
xorl %edx, %edx
cmpq %rsi, %rax
jbe 0xc506
movb (%r14,%rsi), %sil
cmpb $0xa, %sil
je 0xc506
movzwl %bp, %edx
decl %edx
incl %ecx
xorl %edi, %edi
movzwl %di, %r8d
testw %bp, %bp
je 0xc4e5
cmpl %r8d, %edx
jbe 0xc503
movb %sil, (%rbx,%r8)
leal (%rcx,%r8), %esi
leal 0x1(%r8), %edi
movzwl %si, %esi
cmpq %rsi, %rax
jbe 0xc503
movb (%r14,%rsi), %sil
cmpb $0xa, %sil
jne 0xc4d7
movzwl %di, %edx
movb $0x0, (%rbx,%rdx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_open
void lv_ddlist_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
{
#if LV_USE_ANIMATION == 0
    anim = false;
#endif
    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    ext->opened           = 1;
    lv_obj_set_drag(lv_page_get_scrl(ddlist), true);
    lv_ddlist_refr_size(ddlist, anim);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x6af7
orb $0x1, 0x66(%rax)
movq %r14, %rdi
callq 0x2695e
movq %rax, %rdi
movl $0x1, %esi
callq 0x606c
movq %r14, %rdi
movl %ebx, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xbfb8
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_close
void lv_ddlist_close(lv_obj_t * ddlist, lv_anim_enable_t anim)
{
#if LV_USE_ANIMATION == 0
    anim = false;
#endif
    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    ext->opened           = 0;
    lv_obj_set_drag(lv_page_get_scrl(ddlist), false);
    lv_ddlist_refr_size(ddlist, anim);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x6af7
andb $-0x2, 0x66(%rax)
movq %r14, %rdi
callq 0x2695e
movq %rax, %rdi
xorl %esi, %esi
callq 0x606c
movq %r14, %rdi
movl %ebx, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xbfb8
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_anim_finish
static void lv_ddlist_anim_finish(lv_obj_t * ddlist)
{
    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    lv_ddlist_pos_current_option(ddlist);
    ext->force_sel = 0; /*Turn off drawing of selection*/
    if(ext->opened) lv_page_set_sb_mode(ddlist, LV_SB_MODE_UNHIDE);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x6af7
movq %rax, %r14
movq %rbx, %rdi
callq 0xc17d
movb 0x66(%r14), %al
movl %eax, %ecx
andb $-0x3, %cl
movb %cl, 0x66(%r14)
testb $0x1, %al
jne 0xc822
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq %rbx, %rdi
movl $0x5, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x2636f
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_signal
static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(kb, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    if(sign == LV_SIGNAL_CLEANUP) {
        /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
    } else if(sign == LV_SIGNAL_FOCUS) {
        lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
        /*Show the cursor of the new Text area if cursor management is enabled*/
        if(ext->ta && ext->cursor_mng) {
            lv_cursor_type_t cur_type = lv_ta_get_cursor_type(ext->ta);
            lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
        }
    } else if(sign == LV_SIGNAL_DEFOCUS) {
        lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
        /*Show the cursor of the new Text area if cursor management is enabled*/
        if(ext->ta && ext->cursor_mng) {
            lv_cursor_type_t cur_type = lv_ta_get_cursor_type(ext->ta);
            lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
        }
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %r15
callq *0x5388b(%rip)          # 0x602e8
movl %eax, %ebx
cmpb $0x1, %al
jne 0xcaea
movb $0x1, %bl
cmpb $0x11, %bpl
je 0xcabd
movzbl %bpl, %eax
cmpl $0x10, %eax
je 0xca96
cmpl $0x7, %eax
jne 0xcaea
leaq 0x3299e(%rip), %rsi     # 0x3f422
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6c02
movq %r15, %rdi
callq 0x6af7
movq 0x48(%rax), %rdi
testq %rdi, %rdi
je 0xcaea
movq %rax, %r14
testb $0x1, 0x51(%rax)
je 0xcaea
callq 0x20713
movq 0x48(%r14), %rdi
andb $-0x9, %al
jmp 0xcae2
movq %r15, %rdi
callq 0x6af7
movq 0x48(%rax), %rdi
testq %rdi, %rdi
je 0xcaea
movq %rax, %r14
testb $0x1, 0x51(%rax)
je 0xcaea
callq 0x20713
movq 0x48(%r14), %rdi
orb $0x8, %al
movzbl %al, %esi
callq 0x202c7
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_set_ta
void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta)
{
    LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
    if(ta) LV_ASSERT_OBJ(ta, "lv_ta");

    lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
    lv_cursor_type_t cur_type;

    /*Hide the cursor of the old Text area if cursor management is enabled*/
    if(ext->ta && ext->cursor_mng) {
        cur_type = lv_ta_get_cursor_type(ext->ta);
        lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
    }

    ext->ta = ta;

    /*Show the cursor of the new Text area if cursor management is enabled*/
    if(ext->ta && ext->cursor_mng) {
        cur_type = lv_ta_get_cursor_type(ext->ta);
        lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0xcf05
testq %rbx, %rbx
je 0xcebf
movq %rbx, %rdi
callq 0x80e4
testb %al, %al
je 0xcf16
movq %r14, %rdi
callq 0x6af7
movq %rax, %r14
movq 0x48(%rax), %rdi
testq %rdi, %rdi
je 0xceed
testb $0x1, 0x51(%r14)
je 0xceed
callq 0x20713
movq 0x48(%r14), %rdi
orb $0x8, %al
movzbl %al, %esi
callq 0x202c7
movq %rbx, 0x48(%r14)
testq %rbx, %rbx
je 0xcefd
testb $0x1, 0x51(%r14)
jne 0xcf27
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x322d8(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xcf14
leaq 0x322c7(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xcf25
movq %rbx, %rdi
callq 0x20713
movq 0x48(%r14), %rdi
andb $-0x9, %al
movzbl %al, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x202c7
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_set_mode
void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode)
{
    LV_ASSERT_OBJ(kb, LV_OBJX_NAME);

    lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
    if(ext->mode == mode) return;

    ext->mode = mode;
    if(mode == LV_KB_MODE_TEXT) {
        lv_btnm_set_map(kb, kb_map_lc);
        lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map);
    } else if(mode == LV_KB_MODE_NUM) {
        lv_btnm_set_map(kb, kb_map_num);
        lv_btnm_set_ctrl_map(kb, kb_ctrl_num_map);
    } else if(mode == LV_KB_MODE_TEXT_UPPER) {
        lv_btnm_set_map(kb, kb_map_uc);
        lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xcfa2
movq %rbx, %rdi
callq 0x6af7
cmpb %bpl, 0x50(%rax)
je 0xcfb3
movb %bpl, 0x50(%rax)
cmpb $0x2, %bpl
ja 0xcfb3
leaq 0x45d4b(%rip), %rax     # 0x52cc0
movzbl %bpl, %ecx
movq (%rax,%rcx,8), %rsi
leaq 0x325cc(%rip), %rax     # 0x3f550
movslq (%rax,%rcx,4), %r14
addq %rax, %r14
movq %rbx, %rdi
callq 0x21f33
movq %rbx, %rdi
movq %r14, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x22507
leaq 0x3223b(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xcfb1
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_set_cursor_manage
void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en)
{
    LV_ASSERT_OBJ(kb, LV_OBJX_NAME);

    lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
    if(ext->cursor_mng == en) return;

    ext->cursor_mng = en == false ? 0 : 1;

    if(ext->ta) {
        lv_cursor_type_t cur_type;
        cur_type = lv_ta_get_cursor_type(ext->ta);

        if(ext->cursor_mng) {
            lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
        } else {
            lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
        }
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0xd01b
movq %r14, %rdi
callq 0x6af7
movq %rax, %r14
movb 0x51(%rax), %al
movl %eax, %ecx
andb $0x1, %cl
cmpb %bl, %cl
je 0xd02c
andb $-0x2, %al
orb %bl, %al
movb %al, 0x51(%r14)
movq 0x48(%r14), %rdi
testq %rdi, %rdi
je 0xd02c
callq 0x20713
movb 0x51(%r14), %cl
movq 0x48(%r14), %rdi
andb $-0x9, %al
shlb $0x3, %cl
andb $0x8, %cl
orb %al, %cl
xorb $0x8, %cl
movzbl %cl, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x202c7
leaq 0x321c2(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xd02a
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_get_style
const lv_style_t * lv_kb_get_style(const lv_obj_t * kb, lv_kb_style_t type)
{
    LV_ASSERT_OBJ(kb, LV_OBJX_NAME);

    const lv_style_t * style = NULL;

    switch(type) {
        case LV_KB_STYLE_BG: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BG); break;
        case LV_KB_STYLE_BTN_REL: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_REL); break;
        case LV_KB_STYLE_BTN_PR: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_PR); break;
        case LV_KB_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_TGL_REL); break;
        case LV_KB_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_TGL_PR); break;
        case LV_KB_STYLE_BTN_INA: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_INA); break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xd0e1
cmpb $0x5, %bpl
ja 0xd0f2
movzbl %bpl, %esi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x2248e
leaq 0x320fc(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xd0f0
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_line.c
// Function: lv_line_signal
static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(line, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

   if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
        const lv_style_t * style = lv_line_get_style(line, LV_LINE_STYLE_MAIN);
        if(line->ext_draw_pad < style->line.width) line->ext_draw_pad = style->line.width;
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x52e69(%rip)          # 0x602f0
movl %eax, %ebx
cmpb $0x1, %al
jne 0xd4cf
movb $0x1, %bl
cmpb $0x6, %bpl
je 0xd4b7
movzbl %bpl, %eax
cmpl $0x7, %eax
jne 0xd4cf
leaq 0x320b7(%rip), %rsi     # 0x3f55c
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6c02
movq %r14, %rdi
callq 0x66b6
movzwl 0x3e(%rax), %eax
cmpw %ax, 0x5c(%r14)
jge 0xd4cf
movw %ax, 0x5c(%r14)
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_line.c
// Function: lv_line_set_auto_size
void lv_line_set_auto_size(lv_obj_t * line, bool en)
{
    LV_ASSERT_OBJ(line, LV_OBJX_NAME);

    lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
    if(ext->auto_size == en) return;

    ext->auto_size = en == false ? 0 : 1;

    /*Refresh the object*/
    if(en) lv_line_set_points(line, ext->point_array, ext->point_num);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xd525
movq %rbx, %rdi
callq 0x6af7
movb 0xa(%rax), %cl
movl %ecx, %edx
andb $0x1, %dl
cmpb %bpl, %dl
je 0xd536
andb $-0x2, %cl
orb %bpl, %cl
movb %cl, 0xa(%rax)
testb %bpl, %bpl
je 0xd536
movq (%rax), %rsi
movzwl 0x8(%rax), %edx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xd5f2
leaq 0x31cb8(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xd534
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_line.c
// Function: lv_line_set_y_invert
void lv_line_set_y_invert(lv_obj_t * line, bool en)
{
    LV_ASSERT_OBJ(line, LV_OBJX_NAME);

    lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
    if(ext->y_inv == en) return;

    ext->y_inv = en == false ? 0 : 1;

    lv_obj_invalidate(line);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xd598
movq %rbx, %rdi
callq 0x6af7
movb 0xa(%rax), %cl
testb $0x2, %cl
sete %dl
xorb %bpl, %dl
je 0xd5a9
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x31c45(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xd5a7
addb %bpl, %bpl
andb $-0x3, %cl
orb %bpl, %cl
movb %cl, 0xa(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_line.c
// Function: lv_line_set_points
void lv_line_set_points(lv_obj_t * line, const lv_point_t point_a[], uint16_t point_num)
{
    LV_ASSERT_OBJ(line, LV_OBJX_NAME);

    lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
    ext->point_array    = point_a;
    ext->point_num      = point_num;

    if(point_num > 0 && ext->auto_size != 0) {
        uint16_t i;
        lv_coord_t xmax = LV_COORD_MIN;
        lv_coord_t ymax = LV_COORD_MIN;
        for(i = 0; i < point_num; i++) {
            xmax = LV_MATH_MAX(point_a[i].x, xmax);
            ymax = LV_MATH_MAX(point_a[i].y, ymax);
        }

        const lv_style_t * style = lv_line_get_style(line, LV_LINE_STYLE_MAIN);
        lv_obj_set_size(line, xmax + style->line.width, ymax + style->line.width);
    }

    lv_obj_invalidate(line);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xd68e
movq %rbx, %rdi
callq 0x6af7
movq %r14, (%rax)
movw %bp, 0x8(%rax)
testw %bp, %bp
je 0xd67c
testb $0x1, 0xa(%rax)
je 0xd67c
movzwl %bp, %eax
movw $0x83e8, %bp            # imm = 0x83E8
xorl %ecx, %ecx
movw $0x83e8, %r15w          # imm = 0x83E8
movzwl (%r14,%rcx,4), %edx
cmpw %r15w, %dx
cmovlel %r15d, %edx
movzwl 0x2(%r14,%rcx,4), %esi
cmpw %bp, %si
cmovlel %ebp, %esi
movl %edx, %r15d
movl %esi, %ebp
incq %rcx
cmpq %rcx, %rax
jne 0xd636
movq %rbx, %rdi
callq 0x66b6
movzwl 0x3e(%rax), %eax
addl %eax, %r15d
addl %eax, %ebp
movswl %r15w, %esi
movswl %bp, %edx
movq %rbx, %rdi
callq 0x5557
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x4c4d
leaq 0x31b4f(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xd69d
nop
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_default_event_cb
static void lv_mbox_default_event_cb(lv_obj_t * mbox, lv_event_t event)
{
    if(event != LV_EVENT_VALUE_CHANGED) return;

    uint32_t btn_id = lv_mbox_get_active_btn(mbox);
    if(btn_id == LV_BTNM_BTN_NONE) return;

    lv_mbox_start_auto_close(mbox, 0);
}

// Assembly:
pushq %rbx
cmpl $0xe, %esi
jne 0xd9f3
movq %rdi, %rbx
callq 0xdf22
cmpw $-0x1, %ax
je 0xd9f3
movq %rbx, %rdi
xorl %esi, %esi
popq %rbx
jmp 0xdd18
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_set_style
void lv_mbox_set_style(lv_obj_t * mbox, lv_mbox_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);

    switch(type) {
        case LV_MBOX_STYLE_BG: lv_obj_set_style(mbox, style); break;
        case LV_MBOX_STYLE_BTN_BG: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BG, style); break;
        case LV_MBOX_STYLE_BTN_REL: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_REL, style); break;
        case LV_MBOX_STYLE_BTN_PR: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_PR, style); break;
        case LV_MBOX_STYLE_BTN_TGL_REL: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_REL, style); break;
        case LV_MBOX_STYLE_BTN_TGL_PR: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_PR, style); break;
        case LV_MBOX_STYLE_BTN_INA: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_INA, style); break;
    }

    mbox_realign(mbox);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xda39
movq %rbx, %rdi
callq 0x6af7
cmpb $0x6, %bpl
ja 0xda8f
movzbl %bpl, %ecx
leaq 0x31b41(%rip), %rdx     # 0x3f564
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5d9f
jmp 0xda8f
leaq 0x317a4(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xda48
movq 0x10(%rax), %rdi
movl $0x3, %esi
jmp 0xda87
movq 0x10(%rax), %rdi
movl $0x1, %esi
jmp 0xda87
movq 0x10(%rax), %rdi
movl $0x2, %esi
jmp 0xda87
movq 0x10(%rax), %rdi
xorl %esi, %esi
jmp 0xda87
movq 0x10(%rax), %rdi
movl $0x4, %esi
jmp 0xda87
movq 0x10(%rax), %rdi
movl $0x5, %esi
movq %r14, %rdx
callq 0x223df
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0xdbdf
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_add_btns
void lv_mbox_add_btns(lv_obj_t * mbox, const char * btn_map[])
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
    LV_ASSERT_NULL(btn_map);

    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);

    /*Create a button matrix if not exists yet*/
    if(ext->btnm == NULL) {
        ext->btnm = lv_btnm_create(mbox, NULL);

        /*Set the default styles*/
        lv_theme_t * th = lv_theme_get_current();
        if(th) {
            lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_BG, th->style.mbox.btn.bg);
            lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_REL, th->style.mbox.btn.rel);
            lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_PR, th->style.mbox.btn.pr);
        } else {
            lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BG, &lv_style_transp_fit);
        }
    }

    lv_btnm_set_map(ext->btnm, btn_map);
    lv_btnm_set_btn_ctrl_all(ext->btnm, LV_BTNM_CTRL_CLICK_TRIG | LV_BTNM_CTRL_NO_REPEAT);
    lv_obj_set_event_cb(ext->btnm, lv_mbox_btnm_event_cb);

    mbox_realign(mbox);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xdb37
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0xdb48
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r15
cmpq $0x0, 0x10(%rax)
jne 0xdb6b
movq %rbx, %rdi
xorl %esi, %esi
callq 0x2148c
movq %rax, 0x10(%r15)
callq 0x2e91c
testq %rax, %rax
je 0xdb59
movq %rax, %r12
movq 0x1f0(%rax), %rdx
movq %rbx, %rdi
movl $0x1, %esi
callq 0xd9f5
movq 0x1f8(%r12), %rdx
movq %rbx, %rdi
movl $0x2, %esi
callq 0xd9f5
movq 0x200(%r12), %rdx
movq %rbx, %rdi
movl $0x3, %esi
callq 0xd9f5
jmp 0xdb6b
leaq 0x316a6(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xdb46
leaq 0x31695(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xdb57
movq 0x10(%r15), %rdi
leaq 0x5251c(%rip), %rdx     # 0x60080
xorl %esi, %esi
callq 0x223df
movq 0x10(%r15), %rdi
movq %r14, %rsi
callq 0x21f33
movq 0x10(%r15), %rdi
movl $0x110, %esi            # imm = 0x110
callq 0x22704
movq 0x10(%r15), %rdi
leaq 0x15(%rip), %rsi        # 0xdba5
callq 0x6363
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xdbdf
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_btnm_event_cb
static void lv_mbox_btnm_event_cb(lv_obj_t * btnm, lv_event_t event)
{
    lv_obj_t * mbox = lv_obj_get_parent(btnm);

    /*clang-format off*/
    if(event == LV_EVENT_PRESSED || event == LV_EVENT_PRESSING || event == LV_EVENT_PRESS_LOST ||
       event == LV_EVENT_RELEASED || event == LV_EVENT_SHORT_CLICKED || event == LV_EVENT_CLICKED ||
       event == LV_EVENT_LONG_PRESSED || event == LV_EVENT_LONG_PRESSED_REPEAT ||
       event == LV_EVENT_VALUE_CHANGED) {
        lv_event_send(mbox, event, lv_event_get_data());
    }
    /*clang-format on*/
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
callq 0x4ab5
movq %rax, %r14
cmpl $0x8, %ebx
jae 0xdbd2
callq 0x6473
movzbl %bl, %esi
movq %r14, %rdi
movq %rax, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x5018
cmpl $0xe, %ebx
je 0xdbb8
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: mbox_realign
static void mbox_realign(lv_obj_t * mbox)
{
    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);

    const lv_style_t * style = lv_mbox_get_style(mbox, LV_MBOX_STYLE_BG);
    lv_coord_t w             = lv_obj_get_width(mbox) - style->body.padding.left - style->body.padding.right;

    if(ext->text) {
        lv_obj_set_width(ext->text, w);
    }

    if(ext->btnm) {
        const lv_style_t * btn_bg_style  = lv_mbox_get_style(mbox, LV_MBOX_STYLE_BTN_BG);
        const lv_style_t * btn_rel_style = lv_mbox_get_style(mbox, LV_MBOX_STYLE_BTN_REL);
        lv_coord_t font_h                = lv_font_get_line_height(btn_rel_style->text.font);
        lv_obj_set_size(ext->btnm, w,
                        font_h + btn_rel_style->body.padding.top + btn_rel_style->body.padding.bottom +
                            btn_bg_style->body.padding.top + btn_bg_style->body.padding.bottom);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
callq 0x6af7
movq %rax, %rbx
movq %r14, %rdi
xorl %esi, %esi
callq 0xdf96
movq %rax, %r15
movq %r14, %rdi
callq 0x566d
movzwl 0x1a(%r15), %ecx
addw 0x1c(%r15), %cx
subl %ecx, %eax
movq 0x8(%rbx), %rdi
movswl %ax, %ebp
testq %rdi, %rdi
je 0xdc25
movl %ebp, %esi
callq 0x570d
cmpq $0x0, 0x10(%rbx)
je 0xdc7b
movq %r14, %rdi
movl $0x1, %esi
callq 0xdf96
movq %rax, %r15
movq %r14, %rdi
movl $0x2, %esi
callq 0xdf96
movq 0x28(%rax), %rcx
movzbl 0x10(%rcx), %ecx
movq 0x10(%rbx), %rdi
addw 0x16(%rax), %cx
addw 0x18(%rax), %cx
addw 0x16(%r15), %cx
addw 0x18(%r15), %cx
movswl %cx, %edx
movl %ebp, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5557
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_set_text
void lv_mbox_set_text(lv_obj_t * mbox, const char * txt)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
    LV_ASSERT_STR(txt);

    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
    lv_label_set_text(ext->text, txt);

    mbox_realign(mbox);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xdcc8
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0xdcd9
movq %rbx, %rdi
callq 0x6af7
movq 0x8(%rax), %rdi
movq %r14, %rsi
callq 0x1a6da
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xdbdf
leaq 0x31515(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xdcd7
leaq 0x31504(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0xdce8
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_set_anim_time
void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
    anim_time           = 0;
    ext->anim_time      = anim_time;
#else
    (void)mbox;
    (void)anim_time;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xdd07
movq %rbx, %rdi
callq 0x6af7
movw $0x0, 0x18(%rax)
popq %rbx
retq
leaq 0x314d6(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xdd16
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_get_anim_time
uint16_t lv_mbox_get_anim_time(const lv_obj_t * mbox)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
    return ext->anim_time;
#else
    (void)mbox;
    return 0;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xde65
movq %rbx, %rdi
callq 0x6af7
movzwl 0x18(%rax), %eax
popq %rbx
retq
leaq 0x31378(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xde74
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_get_active_btn
uint16_t lv_mbox_get_active_btn(lv_obj_t * mbox)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
    if(ext->btnm)
        return lv_btnm_get_active_btn(ext->btnm);
    else
        return LV_BTNM_BTN_NONE;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xdf46
movq %rbx, %rdi
callq 0x6af7
movq 0x10(%rax), %rdi
testq %rdi, %rdi
je 0xdf57
popq %rbx
jmp 0x228e6
leaq 0x31297(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xdf55
movw $0xffff, %ax            # imm = 0xFFFF
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_get_active_btn_text
const char * lv_mbox_get_active_btn_text(lv_obj_t * mbox)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
    if(ext->btnm)
        return lv_btnm_get_active_btn_text(ext->btnm);
    else
        return NULL;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xdf81
movq %rbx, %rdi
callq 0x6af7
movq 0x10(%rax), %rdi
testq %rdi, %rdi
je 0xdf92
popq %rbx
jmp 0x22912
leaq 0x3125c(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xdf90
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_get_style
const lv_style_t * lv_mbox_get_style(const lv_obj_t * mbox, lv_mbox_style_t type)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_mbox_ext_t * ext      = lv_obj_get_ext_attr(mbox);

    switch(type) {
        case LV_MBOX_STYLE_BG: style = lv_obj_get_style(mbox); break;
        case LV_MBOX_STYLE_BTN_BG: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BG); break;
        case LV_MBOX_STYLE_BTN_REL: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_REL); break;
        case LV_MBOX_STYLE_BTN_PR: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_PR); break;
        case LV_MBOX_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_REL); break;
        case LV_MBOX_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_PR); break;
        case LV_MBOX_STYLE_BTN_INA: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_INA); break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xdfd7
movq %rbx, %rdi
callq 0x6af7
cmpb $0x6, %bpl
ja 0xe009
movzbl %bpl, %ecx
leaq 0x315c0(%rip), %rdx     # 0x3f580
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x66b6
leaq 0x31206(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xdfe6
movq 0x10(%rax), %rdi
movl $0x3, %esi
jmp 0xe02e
movq 0x10(%rax), %rdi
movl $0x1, %esi
jmp 0xe02e
movq 0x10(%rax), %rdi
movl $0x2, %esi
jmp 0xe02e
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movq 0x10(%rax), %rdi
xorl %esi, %esi
jmp 0xe02e
movq 0x10(%rax), %rdi
movl $0x4, %esi
jmp 0xe02e
movq 0x10(%rax), %rdi
movl $0x5, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x2248e
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_get_recolor
bool lv_mbox_get_recolor(const lv_obj_t * mbox)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

    lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);

    if(!ext->btnm) return false;

    return lv_btnm_get_recolor(ext->btnm);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xe05d
movq %rbx, %rdi
callq 0x6af7
movq 0x10(%rax), %rdi
testq %rdi, %rdi
je 0xe06e
popq %rbx
jmp 0x228b9
leaq 0x31180(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xe06c
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_preload.c
// Function: lv_preload_set_spin_time
void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time)
{
    LV_ASSERT_OBJ(preload, LV_OBJX_NAME);

    lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);

    ext->time = time;
    lv_preload_set_type(preload, ext->anim_type);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0xe5de
movq %rbx, %rdi
callq 0x6af7
movw %bp, 0x6(%rax)
movzbl 0x8(%rax), %esi
andl $0x3, %esi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xe3e8
leaq 0x30bff(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0xe5ed