LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xc5e9
movq %r14, %rdi
callq 0x6747
movq %rax, %r14
movb 0x51(%rax), %al
movl %eax, %ecx
andb $0x1, %cl
cmpb %bl, %cl
je 0xc5fa
andb $-0x2, %al
orb %bl, %al
movb %al, 0x51(%r14)
movq 0x48(%r14), %rdi
testq %rdi, %rdi
je 0xc5fa
callq 0x1e6f8
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 0x1e2f4
leaq 0x2eb54(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xc5f8
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xc6af
cmpb $0x5, %bpl
ja 0xc6c0
movzbl %bpl, %esi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x20368
leaq 0x2ea8e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xc6be
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O2/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 *0x518a6(%rip)          # 0x5e2f0
movl %eax, %ebx
cmpb $0x1, %al
jne 0xca92
movb $0x1, %bl
cmpb $0x6, %bpl
je 0xca7a
movzbl %bpl, %eax
cmpl $0x7, %eax
jne 0xca92
leaq 0x2ea54(%rip), %rsi     # 0x3b4bc
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r14, %rdi
callq 0x6316
movzwl 0x3e(%rax), %eax
cmpw %ax, 0x5c(%r14)
jge 0xca92
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_O2/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 0x7994
testb %al, %al
je 0xcae8
movq %rbx, %rdi
callq 0x6747
movb 0xa(%rax), %cl
movl %ecx, %edx
andb $0x1, %dl
cmpb %bpl, %dl
je 0xcaf9
andb $-0x2, %cl
orb %bpl, %cl
movb %cl, 0xa(%rax)
testb %bpl, %bpl
je 0xcaf9
movq (%rax), %rsi
movzwl 0x8(%rax), %edx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xcbb5
leaq 0x2e655(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xcaf7
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xcb5b
movq %rbx, %rdi
callq 0x6747
movb 0xa(%rax), %cl
testb $0x2, %cl
sete %dl
xorb %bpl, %dl
je 0xcb6c
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2e5e2(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xcb6a
addb %bpl, %bpl
andb $-0x3, %cl
orb %bpl, %cl
movb %cl, 0xa(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xcc1d
movq %rbx, %rdi
callq 0x6747
movq %r14, (%rax)
movw %bp, 0x8(%rax)
testw %bp, %bp
je 0xcc4e
testb $0x1, 0xa(%rax)
je 0xcc4e
movzwl %bp, %eax
movw $0x83e8, %r15w          # imm = 0x83E8
xorl %ecx, %ecx
movw $0x83e8, %bp            # imm = 0x83E8
cmpq %rcx, %rax
je 0xcc2e
movzwl (%r14,%rcx,4), %edx
cmpw %r15w, %dx
cmovlel %r15d, %edx
movzwl 0x2(%r14,%rcx,4), %esi
cmpw %bp, %si
cmovlel %ebp, %esi
incq %rcx
movl %edx, %r15d
movl %esi, %ebp
jmp 0xcbf5
leaq 0x2e520(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xcc2c
movq %rbx, %rdi
callq 0x6316
movzwl 0x3e(%rax), %eax
addl %eax, %r15d
addl %eax, %ebp
movswl %r15w, %esi
movswl %bp, %edx
movq %rbx, %rdi
callq 0x520e
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/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 0xcf9b
movq %rdi, %rbx
callq 0xd4a3
cmpw $-0x1, %ax
je 0xcf9b
movq %rbx, %rdi
xorl %esi, %esi
popq %rbx
jmp 0xd2a4
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xcfe1
movq %rbx, %rdi
callq 0x6747
cmpb $0x6, %bpl
ja 0xd029
movzbl %bpl, %ecx
leaq 0x2e4f9(%rip), %rdx     # 0x3b4c4
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5a3d
jmp 0xd029
leaq 0x2e15c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xcff0
movq 0x10(%rax), %rdi
pushq $0x3
jmp 0xd020
movq 0x10(%rax), %rdi
pushq $0x1
jmp 0xd020
movq 0x10(%rax), %rdi
pushq $0x2
jmp 0xd020
movq 0x10(%rax), %rdi
xorl %esi, %esi
jmp 0xd021
movq 0x10(%rax), %rdi
pushq $0x4
jmp 0xd020
movq 0x10(%rax), %rdi
pushq $0x5
popq %rsi
movq %r14, %rdx
callq 0x202b9
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0xd170
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd0c3
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0xd0d4
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
cmpq $0x0, 0x10(%rax)
jne 0xd0f7
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f420
movq %rax, 0x10(%r15)
callq 0x2be75
testq %rax, %rax
je 0xd0e5
movq %rax, %r12
movq 0x1f0(%rax), %rdx
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0xcf9d
movq 0x1f8(%r12), %rdx
pushq $0x2
popq %rsi
movq %rbx, %rdi
callq 0xcf9d
movq 0x200(%r12), %rdx
pushq $0x3
popq %rsi
movq %rbx, %rdi
callq 0xcf9d
jmp 0xd0f7
leaq 0x2e07a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd0d2
leaq 0x2e069(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xd0e3
movq 0x10(%r15), %rdi
leaq 0x50f90(%rip), %rdx     # 0x5e080
xorl %esi, %esi
callq 0x202b9
movq 0x10(%r15), %rdi
movq %r14, %rsi
callq 0x1fe53
movq 0x10(%r15), %rdi
movl $0x110, %esi            # imm = 0x110
callq 0x205de
movq 0x10(%r15), %rdi
leaq 0x15(%rip), %rsi        # 0xd131
callq 0x5fce
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xd170
// File: /workspace/github_c_makefile_star2_O2/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 0x6747
movq %rax, %rbx
movq %r14, %rdi
xorl %esi, %esi
callq 0xd517
movq %rax, %r15
movq %r14, %rdi
callq 0x5308
movzwl 0x1a(%r15), %ecx
addw 0x1c(%r15), %cx
subl %ecx, %eax
movq 0x8(%rbx), %rdi
movswl %ax, %ebp
testq %rdi, %rdi
je 0xd1b6
movl %ebp, %esi
callq 0x53a8
cmpq $0x0, 0x10(%rbx)
je 0xd208
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0xd517
movq %rax, %r15
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0xd517
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 0x520e
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd255
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0xd266
movq %rbx, %rdi
callq 0x6747
movq 0x8(%rax), %rdi
movq %r14, %rsi
callq 0x18a9a
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xd170
leaq 0x2dee8(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd264
leaq 0x2ded7(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xd275
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd293
movq %rbx, %rdi
callq 0x6747
andw $0x0, 0x18(%rax)
popq %rbx
retq
leaq 0x2deaa(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd2a2
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_mbox.c
// Function: lv_mbox_start_auto_close
void lv_mbox_start_auto_close(lv_obj_t * mbox, uint16_t delay)
{
    LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    if(lv_mbox_get_anim_time(mbox) != 0) {
        /*Add shrinking animations*/
        lv_anim_t a;
        a.var            = mbox;
        a.start          = lv_obj_get_height(mbox);
        a.end            = 0;
        a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_height;
        a.path_cb        = lv_anim_path_linear;
        a.ready_cb       = NULL;
        a.act_time       = -delay;
        a.time           = lv_mbox_get_anim_time(mbox);
        a.playback       = 0;
        a.playback_pause = 0;
        a.repeat         = 0;
        a.repeat_pause   = 0;
        lv_anim_create(&a);

        a.start    = lv_obj_get_width(mbox);
        a.exec_cb  = (lv_anim_exec_xcb_t)lv_obj_set_width;
        a.ready_cb = lv_mbox_close_ready_cb;
        lv_anim_create(&a);

        /*Disable fit to let shrinking work*/
        lv_cont_set_fit(mbox, LV_FIT_NONE);
    } else {
        /*Create an animation to delete the mbox `delay` ms later*/
        lv_anim_t a;
        a.var            = mbox;
        a.start          = 0;
        a.end            = 1;
        a.exec_cb        = (lv_anim_exec_xcb_t)NULL;
        a.path_cb        = lv_anim_path_linear;
        a.ready_cb       = lv_mbox_close_ready_cb;
        a.act_time       = -delay;
        a.time           = 0;
        a.playback       = 0;
        a.playback_pause = 0;
        a.repeat         = 0;
        a.repeat_pause   = 0;
        lv_anim_create(&a);
    }
#else
    (void)delay; /*Unused*/
    lv_obj_del(mbox);
#endif
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x40, %rsp
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xd368
movq %rbx, %rdi
callq 0xd3cb
testw %ax, %ax
je 0xd379
leaq 0x8(%rsp), %r14
movq %rbx, (%r14)
movq %rbx, %rdi
callq 0x5332
cwtl
movl %eax, 0x20(%r14)
andl $0x0, 0x24(%r14)
leaq -0x7f0a(%rip), %rax     # 0x53e6
movq %rax, 0x8(%r14)
leaq 0x1a35e(%rip), %rax     # 0x27659
movq %rax, 0x10(%r14)
andq $0x0, 0x18(%r14)
negl %ebp
movw %bp, 0x2a(%r14)
movq %rbx, %rdi
callq 0xd3cb
movw %ax, 0x28(%r14)
andl $0x0, 0x2c(%r14)
movb $0x0, 0x30(%r14)
movq %r14, %rdi
callq 0x27685
movq %rbx, %rdi
callq 0x5308
cwtl
movl %eax, 0x20(%r14)
leaq -0x7f96(%rip), %rax     # 0x53a8
movq %rax, 0x8(%r14)
leaq 0xae(%rip), %rax        # 0xd3f7
movq %rax, 0x18(%r14)
movq %r14, %rdi
callq 0x27685
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x20c30
jmp 0xd3c2
leaq 0x2ddd5(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd377
leaq 0x8(%rsp), %rdi
movq %rbx, (%rdi)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x20(%rdi)
andq $0x0, 0x8(%rdi)
leaq 0x1a2be(%rip), %rax     # 0x27659
movq %rax, 0x10(%rdi)
leaq 0x51(%rip), %rax        # 0xd3f7
movq %rax, 0x18(%rdi)
negl %ebp
movw %bp, 0x2a(%rdi)
andw $0x0, 0x28(%rdi)
andl $0x0, 0x2c(%rdi)
movb $0x0, 0x30(%rdi)
callq 0x27685
addq $0x40, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd3e6
movq %rbx, %rdi
callq 0x6747
movzwl 0x18(%rax), %eax
popq %rbx
retq
leaq 0x2dd57(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd3f5
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd4c7
movq %rbx, %rdi
callq 0x6747
movq 0x10(%rax), %rdi
testq %rdi, %rdi
je 0xd4d8
popq %rbx
jmp 0x207b0
leaq 0x2dc76(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd4d6
movw $0xffff, %ax            # imm = 0xFFFF
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd502
movq %rbx, %rdi
callq 0x6747
movq 0x10(%rax), %rdi
testq %rdi, %rdi
je 0xd513
popq %rbx
jmp 0x207dc
leaq 0x2dc3b(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd511
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd558
movq %rbx, %rdi
callq 0x6747
cmpb $0x6, %bpl
ja 0xd581
movzbl %bpl, %ecx
leaq 0x2df9f(%rip), %rdx     # 0x3b4e0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x2dbe5(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd567
movq 0x10(%rax), %rdi
pushq $0x3
jmp 0xd5a0
movq 0x10(%rax), %rdi
pushq $0x1
jmp 0xd5a0
movq 0x10(%rax), %rdi
pushq $0x2
jmp 0xd5a0
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movq 0x10(%rax), %rdi
xorl %esi, %esi
jmp 0xd5a1
movq 0x10(%rax), %rdi
pushq $0x4
jmp 0xd5a0
movq 0x10(%rax), %rdi
pushq $0x5
popq %rsi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x20368
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xd5d0
movq %rbx, %rdi
callq 0x6747
movq 0x10(%rax), %rdi
testq %rdi, %rdi
je 0xd5e1
popq %rbx
jmp 0x20783
leaq 0x2db6d(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xd5df
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0xdb35
movq %rbx, %rdi
callq 0x6747
movw %bp, 0x6(%rax)
movzbl 0x8(%rax), %esi
andl $0x3, %esi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xd947
leaq 0x2d608(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xdb44
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_preload.c
// Function: lv_preload_spinner_anim
void lv_preload_spinner_anim(void * ptr, lv_anim_value_t val)
{
    lv_obj_t * preload     = ptr;
    lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);

    int16_t angle_start = val - ext->arc_length / 2 + 180;
    int16_t angle_end   = angle_start + ext->arc_length;

    angle_start = angle_start % 360;
    angle_end   = angle_end % 360;

    lv_arc_set_angles(preload, angle_start, angle_end);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %r14d
movq %rdi, %rbx
callq 0x6747
movzwl 0x4(%rax), %ecx
movl %ecx, %eax
cwtd
movw $0xfffe, %si            # imm = 0xFFFE
idivw %si
movl %r14d, %edx
addl %eax, %edx
addl %r14d, %eax
addl $0xb4, %eax
leal 0xb4(%rcx,%rdx), %ecx
movw $0x168, %di             # imm = 0x168
cwtd
idivw %di
movl %edx, %esi
movl %ecx, %eax
cwtd
idivw %di
movzwl %si, %esi
movzwl %dx, %edx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x8402
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_preload.c
// Function: lv_preload_set_dir
void lv_preload_set_dir(lv_obj_t * preload, lv_preload_dir_t dir)
{
    LV_ASSERT_OBJ(preload, LV_OBJX_NAME);

    lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);

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

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xdbe0
movq %rbx, %rdi
callq 0x6747
movzbl 0x8(%rax), %esi
shlb $0x2, %bpl
andb $0x4, %bpl
movl %esi, %ecx
andb $-0x5, %cl
orb %bpl, %cl
movb %cl, 0x8(%rax)
andl $0x3, %esi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xd947
leaq 0x2d55d(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xdbef
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_preload.c
// Function: lv_preload_get_style
const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_style_t type)
{
    LV_ASSERT_OBJ(preload, LV_OBJX_NAME);

    const lv_style_t * style = NULL;

    switch(type) {
        case LV_PRELOAD_STYLE_MAIN: style = lv_arc_get_style(preload, LV_ARC_STYLE_MAIN); break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xdc68
testb %bpl, %bpl
je 0xdc79
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2d4d5(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xdc77
movq %rbx, %rdi
xorl %esi, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x84b6
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: lv_roller_set_visible_row_count
void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt)
{
    LV_ASSERT_OBJ(roller, LV_OBJX_NAME);

    lv_roller_ext_t * ext          = lv_obj_get_ext_attr(roller);
    const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
    uint8_t n_line_space           = (row_cnt > 1) ? row_cnt - 1 : 1;
    lv_ddlist_set_fix_height(roller, lv_font_get_line_height(style_label->text.font) * row_cnt +
                                         style_label->text.line_space * n_line_space);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xe4f8
movq %rbx, %rdi
callq 0x6747
movq 0x50(%rax), %rdi
callq 0x6316
movzbl %bpl, %ecx
leal -0x1(%rcx), %edx
cmpb $0x2, %cl
movzbl %dl, %edx
pushq $0x1
popq %rsi
cmovael %edx, %esi
movq 0x28(%rax), %rdx
movzbl 0x10(%rdx), %edx
imull %ecx, %edx
movzbl %sil, %ecx
imulw 0x32(%rax), %cx
addl %edx, %ecx
movswl %cx, %esi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xb83b
leaq 0x2cc45(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xe507
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: lv_roller_set_style
void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(roller, LV_OBJX_NAME);

    switch(type) {
        case LV_ROLLER_STYLE_BG: lv_obj_set_style(roller, style); break;
        case LV_ROLLER_STYLE_SEL: lv_ddlist_set_style(roller, LV_DDLIST_STYLE_SEL, style); break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %rbx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xe69b
cmpb $0x1, %bpl
je 0xe6ac
movzbl %bpl, %eax
testl %eax, %eax
jne 0xe6be
movq %r14, %rdi
movq %rbx, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x5a3d
leaq 0x2caa2(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xe6aa
pushq $0x1
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0xb445
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: refr_height
static void refr_height(lv_obj_t * roller)
{
    lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
    lv_align_t obj_align  = LV_ALIGN_IN_LEFT_MID;
    if(ext->ddlist.label) {
        lv_label_align_t label_align = lv_label_get_align(ext->ddlist.label);
        if(LV_LABEL_ALIGN_CENTER == label_align)
            obj_align = LV_ALIGN_CENTER;
        else if(LV_LABEL_ALIGN_RIGHT == label_align)
            obj_align = LV_ALIGN_IN_RIGHT_MID;
    }

    lv_obj_set_height(lv_page_get_scrl(roller), lv_obj_get_height(ext->ddlist.label) + lv_obj_get_height(roller));
    lv_obj_align(ext->ddlist.label, NULL, obj_align, 0, 0);
#if LV_USE_ANIMATION
    lv_anim_del(lv_page_get_scrl(roller), (lv_anim_exec_xcb_t)lv_obj_set_y);
#endif
    lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
callq 0x6747
movq %rax, %r14
movq 0x50(%rax), %rdi
testq %rdi, %rdi
je 0xe829
callq 0x18d7f
cmpb $0x2, %al
sete %cl
addb $0x7, %cl
xorl %edx, %edx
cmpb $0x1, %al
movzbl %cl, %r12d
cmovel %edx, %r12d
jmp 0xe82c
movb $0x7, %r12b
movq %rbx, %rdi
callq 0x245d9
movq %rax, %r15
movq 0x50(%r14), %rdi
callq 0x5332
movl %eax, %ebp
movq %rbx, %rdi
callq 0x5332
addl %ebp, %eax
movswl %ax, %esi
movq %r15, %rdi
callq 0x53e6
movq 0x50(%r14), %rdi
movzbl %r12b, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x5424
movq %rbx, %rdi
callq 0x245d9
leaq -0x96aa(%rip), %rsi     # 0x51d0
movq %rax, %rdi
callq 0x27715
movzwl 0x62(%r14), %esi
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0xb749
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: lv_roller_set_selected
void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_t anim)
{
    LV_ASSERT_OBJ(roller, LV_OBJX_NAME);

#if LV_USE_ANIMATION == 0
    anim = LV_ANIM_OFF;
#endif

    if(lv_roller_get_selected(roller) == sel_opt) return;

    lv_ddlist_set_selected(roller, sel_opt);
    refr_position(roller, anim);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xe8bf
movq %rbx, %rdi
callq 0xe962
cmpw %r14w, %ax
jne 0xe8d0
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2c87e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xe8ce
movzwl %r14w, %esi
movq %rbx, %rdi
callq 0xb749
movzbl %bpl, %esi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0xe9c3
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: lv_roller_set_align
void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align)
{
    LV_ASSERT_OBJ(roller, LV_OBJX_NAME);

    lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);

    lv_obj_t * label = ext->ddlist.label;

    if(label == NULL) return; /*Probably the roller is being deleted if the label is NULL.*/
    lv_label_set_align(label, align);

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

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xe94a
movq %rbx, %rdi
callq 0x6747
movq 0x50(%rax), %rbx
testq %rbx, %rbx
je 0xe95b
movzbl %bpl, %esi
movq %rbx, %rdi
callq 0x18d16
movq %rbx, %rdi
callq 0x18d7f
cmpb $0x2, %al
ja 0xe95b
shlb $0x3, %al
movl $0x80007, %edx          # imm = 0x80007
movl %eax, %ecx
shrl %cl, %edx
movzbl %dl, %edx
movq %rbx, %rdi
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x5424
leaq 0x2c7f3(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xe959
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: lv_roller_get_selected
uint16_t lv_roller_get_selected(const lv_obj_t * roller)
{
    LV_ASSERT_OBJ(roller, LV_OBJX_NAME);

    lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
    if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
        uint16_t real_id_cnt = ext->ddlist.option_cnt / LV_ROLLER_INF_PAGES;
        return lv_ddlist_get_selected(roller) % real_id_cnt;
    } else {
        return lv_ddlist_get_selected(roller);
    }
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xe98d
movq %rbx, %rdi
callq 0x6747
testb $0x1, 0x70(%rax)
jne 0xe99e
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xba3c
leaq 0x2c7b0(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xe99c
movzwl 0x60(%rax), %eax
movw $0x7, %cx
xorl %edx, %edx
divw %cx
movl %eax, %ebp
movq %rbx, %rdi
callq 0xba3c
xorl %edx, %edx
divw %bp
movl %edx, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: lv_roller_get_align
lv_label_align_t lv_roller_get_align(const lv_obj_t * roller)
{
    LV_ASSERT_OBJ(roller, LV_OBJX_NAME);

    lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
    LV_ASSERT_MEM(ext);
    LV_ASSERT_MEM(ext->ddlist.label);
    return lv_label_get_align(ext->ddlist.label);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xeb2c
movq %rbx, %rdi
callq 0x6747
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0xeb3d
movq 0x50(%rbx), %rdi
callq 0x7994
movq 0x50(%rbx), %rsi
testb %al, %al
je 0xeb4e
movq %rsi, %rdi
popq %rbx
jmp 0x18d7f
leaq 0x2c611(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xeb3b
leaq 0x2c4fc(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0xeb4c
leaq 0x2c4eb(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0xeb5a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: lv_roller_get_style
const lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_style_t type)
{
    LV_ASSERT_OBJ(roller, LV_OBJX_NAME);

    switch(type) {
        case LV_ROLLER_STYLE_BG: return lv_obj_get_style(roller);
        case LV_ROLLER_STYLE_SEL: return lv_ddlist_get_style(roller, LV_DDLIST_STYLE_SEL);
        default: return NULL;
    }

    /*To avoid warning*/
    return NULL;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xebbe
cmpb $0x1, %bpl
je 0xebcf
movzbl %bpl, %eax
testl %eax, %eax
jne 0xebe0
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x2c57f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xebcd
pushq $0x1
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xb4ce
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_roller.c
// Function: inf_normalize
static void inf_normalize(void * scrl)
{
    lv_obj_t * roller_scrl = (lv_obj_t *)scrl;
    lv_obj_t * roller      = lv_obj_get_parent(roller_scrl);
    lv_roller_ext_t * ext  = lv_obj_get_ext_attr(roller);

    if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
        uint16_t real_id_cnt = ext->ddlist.option_cnt / LV_ROLLER_INF_PAGES;

        ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id % real_id_cnt;

        ext->ddlist.sel_opt_id += (LV_ROLLER_INF_PAGES / 2) * real_id_cnt; /*Select the middle page*/

        /*Move to the new id*/
        const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
        const lv_font_t * font         = style_label->text.font;
        lv_coord_t font_h              = lv_font_get_line_height(font);
        lv_coord_t h                   = lv_obj_get_height(roller);

        lv_coord_t line_y1 = ext->ddlist.sel_opt_id * (font_h + style_label->text.line_space) +
                             ext->ddlist.label->coords.y1 - roller_scrl->coords.y1;
        lv_coord_t new_y = -line_y1 + (h - font_h) / 2;
        lv_obj_set_y(roller_scrl, new_y);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
callq 0x47bc
movq %rax, %r15
movq %rax, %rdi
callq 0x6747
testb $0x1, 0x70(%rax)
jne 0xec13
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movzwl 0x60(%rax), %eax
movw $0x7, %cx
xorl %edx, %edx
divw %cx
movl %eax, %ecx
movzwl 0x62(%r14), %eax
xorl %edx, %edx
divw %cx
leal (%rcx,%rcx,2), %eax
addl %edx, %eax
movw %ax, 0x62(%r14)
movq 0x50(%r14), %rdi
callq 0x6316
movq %rax, %r12
movq 0x28(%rax), %rax
movzbl 0x10(%rax), %ebp
movq %r15, %rdi
callq 0x5332
movzwl %bp, %ecx
movq 0x50(%r14), %rsi
movzwl 0x32(%r12), %edi
addw %cx, %di
imulw 0x62(%r14), %di
cwtl
subl %ecx, %eax
pushq $0x2
popq %rcx
cltd
idivl %ecx
addw 0x22(%rsi), %di
subl %edi, %eax
addw 0x22(%rbx), %ax
movswl %ax, %esi
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x51d0
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_signal
static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(table, 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) {
        /*Free the cell texts*/
        lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
        uint16_t cell;
        for(cell = 0; cell < ext->col_cnt * ext->row_cnt; cell++) {
            if(ext->cell_data[cell]) {
                lv_mem_free(ext->cell_data[cell]);
                ext->cell_data[cell] = NULL;
            }
        }
        if(ext->cell_data != NULL)
            lv_mem_free(ext->cell_data);
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %r15
callq *0x4f498(%rip)          # 0x5e320
movl %eax, %ebx
cmpb $0x1, %al
jne 0xef02
movb $0x1, %bl
testb %bpl, %bpl
je 0xeeb7
movzbl %bpl, %eax
cmpl $0x7, %eax
jne 0xef02
leaq 0x2c6e3(%rip), %rsi     # 0x3b588
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r15, %rdi
callq 0x6747
movq %rax, %r14
xorl %ebp, %ebp
movzwl %bp, %r15d
movzwl (%r14), %eax
movzwl 0x2(%r14), %ecx
imull %eax, %ecx
movq 0x8(%r14), %rdi
cmpl %r15d, %ecx
jbe 0xeef8
movq (%rdi,%r15,8), %rdi
testq %rdi, %rdi
je 0xeef4
callq 0x27a7a
movq 0x8(%r14), %rax
andq $0x0, (%rax,%r15,8)
incl %ebp
jmp 0xeec4
testq %rdi, %rdi
je 0xef02
callq 0x27a7a
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_style
void lv_table_set_style(lv_obj_t * table, lv_table_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);

    switch(type) {
        case LV_TABLE_STYLE_BG:
            lv_obj_set_style(table, style);
            refr_size(table);
            break;
        case LV_TABLE_STYLE_CELL1:
            ext->cell_style[0] = style;
            refr_size(table);
            break;
        case LV_TABLE_STYLE_CELL2:
            ext->cell_style[1] = style;
            refr_size(table);
            break;
        case LV_TABLE_STYLE_CELL3:
            ext->cell_style[2] = style;
            refr_size(table);
            break;
        case LV_TABLE_STYLE_CELL4:
            ext->cell_style[3] = style;
            refr_size(table);
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xf37c
movq %rbx, %rdi
callq 0x6747
cmpb $0x4, %bpl
ja 0xf3af
movzbl %bpl, %ecx
leaq 0x2c1fa(%rip), %rdx     # 0x3b560
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5a3d
jmp 0xf3a3
leaq 0x2bdc1(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xf38b
movq %r14, 0x28(%rax)
jmp 0xf3a3
movq %r14, 0x18(%rax)
jmp 0xf3a3
movq %r14, 0x20(%rax)
jmp 0xf3a3
movq %r14, 0x10(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0xf610
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_row_cnt
void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    uint16_t old_row_cnt = ext->row_cnt;
    ext->row_cnt         = row_cnt;

    if(ext->row_cnt > 0 && ext->col_cnt > 0) {
        ext->cell_data = lv_mem_realloc(ext->cell_data, ext->row_cnt * ext->col_cnt * sizeof(char *));

        /*Initilize the new fields*/
        if(old_row_cnt < row_cnt) {
            uint16_t old_cell_cnt = old_row_cnt * ext->col_cnt;
            uint32_t new_cell_cnt = ext->col_cnt * ext->row_cnt;
            memset(&ext->cell_data[old_cell_cnt], 0, (new_cell_cnt - old_cell_cnt) * sizeof(ext->cell_data[0]));
        }
    } else {
        lv_mem_free(ext->cell_data);
        ext->cell_data = NULL;
    }

    refr_size(table);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xf430
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movzwl 0x2(%rax), %r15d
movw %bp, 0x2(%rax)
testw %bp, %bp
je 0xf441
movzwl (%r14), %eax
testq %rax, %rax
je 0xf441
movzwl %bp, %esi
movq 0x8(%r14), %rdi
imulq %rax, %rsi
shlq $0x3, %rsi
callq 0x27ad9
movq %rax, 0x8(%r14)
cmpw %bp, %r15w
jae 0xf44f
movzwl (%r14), %ecx
imull %ecx, %r15d
movzwl 0x2(%r14), %edx
imull %ecx, %edx
movzwl %r15w, %ecx
leaq (%rax,%rcx,8), %rdi
subl %ecx, %edx
shlq $0x3, %rdx
xorl %esi, %esi
callq 0x20a0
jmp 0xf44f
leaq 0x2bd0d(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xf43f
movq 0x8(%r14), %rdi
callq 0x27a7a
andq $0x0, 0x8(%r14)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0xf610
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_col_cnt
void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    if(col_cnt >= LV_TABLE_COL_MAX) {
        LV_LOG_WARN("lv_table_set_col_cnt: too many columns. Must be < LV_TABLE_COL_MAX.");
        return;
    }

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    uint16_t old_col_cnt = ext->col_cnt;
    ext->col_cnt         = col_cnt;

    if(ext->row_cnt > 0 && ext->col_cnt > 0) {
        ext->cell_data = lv_mem_realloc(ext->cell_data, ext->row_cnt * ext->col_cnt * sizeof(char *));
        /*Initilize the new fields*/
        if(old_col_cnt < col_cnt) {
            uint16_t old_cell_cnt = old_col_cnt * ext->row_cnt;
            uint32_t new_cell_cnt = ext->col_cnt * ext->row_cnt;
            memset(&ext->cell_data[old_cell_cnt], 0, (new_cell_cnt - old_cell_cnt) * sizeof(ext->cell_data[0]));
        }

    } else {
        lv_mem_free(ext->cell_data);
        ext->cell_data = NULL;
    }
    refr_size(table);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xf489
cmpw $0xb, %r14w
jbe 0xf49a
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2bcb4(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xf498
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
movzwl (%rax), %ebp
movw %r14w, (%rax)
movzwl 0x2(%rax), %eax
testq %rax, %rax
sete %cl
testw %r14w, %r14w
sete %dl
orb %cl, %dl
je 0xf4d1
movq 0x8(%r15), %rdi
callq 0x27a7a
andq $0x0, 0x8(%r15)
jmp 0xf516
movq 0x8(%r15), %rdi
leal (,%r14,8), %ecx
movzwl %cx, %esi
imulq %rax, %rsi
callq 0x27ad9
movq %rax, 0x8(%r15)
cmpw %r14w, %bp
jae 0xf516
movzwl 0x2(%r15), %ecx
imull %ecx, %ebp
movzwl (%r15), %edx
imull %ecx, %edx
movzwl %bp, %ecx
leaq (%rax,%rcx,8), %rdi
subl %ecx, %edx
shlq $0x3, %rdx
xorl %esi, %esi
callq 0x20a0
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0xf610
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_cell_value
void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const char * txt)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);
    LV_ASSERT_NULL(txt);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_set_cell_value: invalid row or column");
        return;
    }
    uint32_t cell = row * ext->col_cnt + col;
    lv_table_cell_format_t format;

    /*Save the format byte*/
    if(ext->cell_data[cell]) {
        format.format_byte = ext->cell_data[cell][0];
    }
    /*Initialize the format byte*/
    else {
#if LV_USE_BIDI
        lv_bidi_dir_t base_dir = lv_obj_get_base_dir(table);
        if(base_dir == LV_BIDI_DIR_LTR) format.s.align = LV_LABEL_ALIGN_LEFT;
        else if(base_dir == LV_BIDI_DIR_RTL) format.s.align = LV_LABEL_ALIGN_RIGHT;
        else if(base_dir == LV_BIDI_DIR_AUTO) format.s.align = lv_bidi_detect_base_dir(txt);
#else
        format.s.align = LV_LABEL_ALIGN_LEFT;
#endif

        format.s.right_merge = 0;
        format.s.type        = 0;
        format.s.crop        = 0;
    }

    ext->cell_data[cell] = lv_mem_realloc(ext->cell_data[cell], strlen(txt) + 2); /*+1: trailing '\0; +1: format byte*/
    strcpy(ext->cell_data[cell] + 1, txt);  /*+1 to skip the format byte*/

    ext->cell_data[cell][0] = format.format_byte;
    refr_size(table);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r14
movl %edx, %ebp
movl %esi, %r12d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xf590
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0xf5a1
movq %rbx, %rdi
callq 0x6747
cmpw %r12w, 0x2(%rax)
jbe 0xf5b2
movq %rax, %r15
movzwl (%rax), %r13d
cmpw %bp, %r13w
jbe 0xf5b2
movzwl %r12w, %eax
movzwl %bp, %ecx
imulq %rax, %r13
addq %rcx, %r13
movq 0x8(%r15), %rax
movq (%rax,%r13,8), %r12
testq %r12, %r12
je 0xf5c1
movb (%r12), %bpl
jmp 0xf5c3
leaq 0x2bbad(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xf59f
leaq 0x2bb9c(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xf5b0
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %ebp, %ebp
movq %r14, %rdi
callq 0x2070
leaq 0x2(%rax), %rsi
movq %r12, %rdi
callq 0x27ad9
movq 0x8(%r15), %rcx
movq %rax, (%rcx,%r13,8)
movq 0x8(%r15), %rax
movq (%rax,%r13,8), %rdi
incq %rdi
movq %r14, %rsi
callq 0x2040
movq 0x8(%r15), %rax
movq (%rax,%r13,8), %rax
movb %bpl, (%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xf610