// File: Ciaxur[P]yagb-emu/include/imgui/imgui_widgets.cpp
// Function: ImGui::DragScalarN(char const*, int, void*, int, float, void const*, void const*, char const*, int)
bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags)
{
    ImGuiWindow* window = GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    bool value_changed = false;
    BeginGroup();
    PushID(label);
    PushMultiItemsWidths(components, CalcItemWidth());
    size_t type_size = GDataTypeInfo[data_type].Size;
    for (int i = 0; i < components; i++)
    {
        PushID(i);
        if (i > 0)
            SameLine(0, g.Style.ItemInnerSpacing.x);
        value_changed |= DragScalar("", data_type, p_data, v_speed, p_min, p_max, format, flags);
        PopID();
        PopItemWidth();
        p_data = (void*)((char*)p_data + type_size);
    }
    PopID();

    const char* label_end = FindRenderedTextEnd(label);
    if (label != label_end)
    {
        SameLine(0, g.Style.ItemInnerSpacing.x);
        TextEx(label, label_end);
    }

    EndGroup();
    return value_changed;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movl 0x18(%rbp), %eax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movss %xmm0, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
callq 0xeb270
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
testb $0x1, 0x93(%rax)
je 0x142dac
movb $0x0, -0x1(%rbp)
jmp 0x142ee5
leaq 0xd018d(%rip), %rax     # 0x212f40
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movb $0x0, -0x49(%rbp)
callq 0xdd220
movq -0x10(%rbp), %rdi
callq 0xdb440
movl -0x24(%rbp), %eax
movl %eax, -0x6c(%rbp)
callq 0xdcdc0
movl -0x6c(%rbp), %edi
callq 0xdcbc0
movslq -0x14(%rbp), %rcx
leaq 0xcad16(%rip), %rax     # 0x20db00
shlq $0x5, %rcx
addq %rcx, %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
movl $0x0, -0x5c(%rbp)
movl -0x5c(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x142e95
movl -0x5c(%rbp), %edi
callq 0xdb550
cmpl $0x0, -0x5c(%rbp)
jle 0x142e2d
movq -0x48(%rbp), %rax
movss 0x15b0(%rax), %xmm1
xorps %xmm0, %xmm0
callq 0xdc1c0
movl -0x14(%rbp), %esi
movq -0x20(%rbp), %rdx
movss -0x28(%rbp), %xmm0
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq 0x10(%rbp), %r9
movl 0x18(%rbp), %eax
leaq 0x2f0ba(%rip), %rdi     # 0x171f09
movl %eax, (%rsp)
callq 0x1422c0
andb $0x1, %al
movzbl %al, %ecx
movb -0x49(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
orl %ecx, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, -0x49(%rbp)
callq 0xdb640
callq 0xdcd30
movq -0x20(%rbp), %rax
addq -0x58(%rbp), %rax
movq %rax, -0x20(%rbp)
movl -0x5c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c(%rbp)
jmp 0x142dff
callq 0xdb640
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xc8090
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rax
cmpq -0x68(%rbp), %rax
je 0x142ed8
movq -0x48(%rbp), %rax
movss 0x15b0(%rax), %xmm1
xorps %xmm0, %xmm0
callq 0xdc1c0
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rsi
xorl %edx, %edx
callq 0x138a30
callq 0xdbe80
movb -0x49(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)