// File: Ciaxur[P]yagb-emu/src/../include/imgui_club/imgui_memory_editor/imgui_memory_editor.h
// Function: MemoryEditor::DrawOptionsLine(MemoryEditor::Sizes const&, void*, unsigned long, unsigned long)
void DrawOptionsLine(const Sizes& s, void* mem_data, size_t mem_size, size_t base_display_addr)
    {
        IM_UNUSED(mem_data);
        ImGuiStyle& style = ImGui::GetStyle();
        const char* format_range = OptUpperCaseHex ? "Range %0*" _PRISizeT "X..%0*" _PRISizeT "X" : "Range %0*" _PRISizeT "x..%0*" _PRISizeT "x";

        // Options menu
        if (ImGui::Button("Options"))
            ImGui::OpenPopup("context");
        if (ImGui::BeginPopup("context"))
        {
            ImGui::PushItemWidth(56);
            if (ImGui::DragInt("##cols", &Cols, 0.2f, 4, 32, "%d cols")) { ContentsWidthChanged = true; if (Cols < 1) Cols = 1; }
            ImGui::PopItemWidth();
            ImGui::Checkbox("Show Data Preview", &OptShowDataPreview);
            ImGui::Checkbox("Show HexII", &OptShowHexII);
            if (ImGui::Checkbox("Show Ascii", &OptShowAscii)) { ContentsWidthChanged = true; }
            ImGui::Checkbox("Grey out zeroes", &OptGreyOutZeroes);
            ImGui::Checkbox("Uppercase Hex", &OptUpperCaseHex);

            ImGui::EndPopup();
        }

        ImGui::SameLine();
        ImGui::Text(format_range, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1);
        ImGui::SameLine();
        ImGui::PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0f);
        if (ImGui::InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue))
        {
            size_t goto_addr;
            if (sscanf(AddrInputBuf, "%" _PRISizeT "X", &goto_addr) == 1)
            {
                GotoAddr = goto_addr - base_display_addr;
                HighlightMin = HighlightMax = (size_t)-1;
            }
        }
        ImGui::PopItemWidth();

        if (GotoAddr != (size_t)-1)
        {
            if (GotoAddr < mem_size)
            {
                ImGui::BeginChild("##scrolling");
                ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + (GotoAddr / Cols) * ImGui::GetTextLineHeight());
                ImGui::EndChild();
                DataEditingAddr = DataPreviewAddr = GotoAddr;
                DataEditingTakeFocus = true;
            }
            GotoAddr = (size_t)-1;
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x60(%rbp)
callq 0xc7680
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, -0x30(%rbp)
testb $0x1, 0xd(%rax)
je 0xc12aa
leaq 0xb11b0(%rip), %rax     # 0x172454
movq %rax, -0x68(%rbp)
jmp 0xc12b7
leaq 0xb11b6(%rip), %rax     # 0x172467
movq %rax, -0x68(%rbp)
jmp 0xc12b7
movq -0x68(%rbp), %rax
movq %rax, -0x38(%rbp)
leaq -0x40(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0xb11a5(%rip), %rdi     # 0x17247a
leaq -0x40(%rbp), %rsi
callq 0x13a930
testb $0x1, %al
jne 0xc12e4
jmp 0xc12f2
leaq 0xb3fbc(%rip), %rdi     # 0x1752a7
xorl %esi, %esi
callq 0xdde00
leaq 0xb3fae(%rip), %rdi     # 0x1752a7
xorl %esi, %esi
callq 0xde5f0
testb $0x1, %al
jne 0xc1309
jmp 0xc13e3
movss 0xb0cc3(%rip), %xmm0    # 0x171fd4
callq 0xdcb10
movq -0x60(%rbp), %rsi
addq $0x4, %rsi
leaq 0xb115d(%rip), %rdi     # 0x172482
movss 0xb0ca3(%rip), %xmm0    # 0x171fd0
movl $0x4, %edx
movl $0x20, %ecx
leaq 0xb114b(%rip), %r8      # 0x172489
xorl %r9d, %r9d
callq 0x143390
testb $0x1, %al
jne 0xc134c
jmp 0xc1367
movq -0x60(%rbp), %rax
movb $0x1, 0x38(%rax)
cmpl $0x1, 0x4(%rax)
jge 0xc1365
movq -0x60(%rbp), %rax
movl $0x1, 0x4(%rax)
jmp 0xc1367
callq 0xdcd30
movq -0x60(%rbp), %rsi
addq $0x9, %rsi
leaq 0xb1116(%rip), %rdi     # 0x172491
callq 0x13c7c0
movq -0x60(%rbp), %rsi
addq $0xa, %rsi
leaq 0xb1114(%rip), %rdi     # 0x1724a3
callq 0x13c7c0
movq -0x60(%rbp), %rsi
addq $0xb, %rsi
leaq 0xb110b(%rip), %rdi     # 0x1724ae
callq 0x13c7c0
testb $0x1, %al
jne 0xc13ae
jmp 0xc13b6
movq -0x60(%rbp), %rax
movb $0x1, 0x38(%rax)
movq -0x60(%rbp), %rsi
addq $0xc, %rsi
leaq 0xb10f4(%rip), %rdi     # 0x1724b9
callq 0x13c7c0
movq -0x60(%rbp), %rsi
addq $0xd, %rsi
leaq 0xb10f0(%rip), %rdi     # 0x1724c9
callq 0x13c7c0
callq 0xde4e0
xorps %xmm0, %xmm0
movss 0xb0b92(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movq -0x38(%rbp), %rdi
movq -0x10(%rbp), %rax
movl (%rax), %esi
movq -0x28(%rbp), %rdx
movq -0x10(%rbp), %rax
movl (%rax), %ecx
movq -0x28(%rbp), %r8
addq -0x20(%rbp), %r8
subq $0x1, %r8
movb $0x0, %al
callq 0x139160
xorps %xmm0, %xmm0
movss 0xb0b5b(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movq -0x10(%rbp), %rax
movl (%rax), %eax
addl $0x1, %eax
cvtsi2ss %eax, %xmm0
movq -0x10(%rbp), %rax
movss 0x8(%rax), %xmm2
movq -0x30(%rbp), %rax
movss 0xb0b80(%rip), %xmm1    # 0x171fcc
mulss 0x38(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
callq 0xdcb10
movq -0x60(%rbp), %rsi
addq $0x71, %rsi
leaq 0xb106a(%rip), %rdi     # 0x1724d7
movl $0x20, %edx
movl $0x22, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
testb $0x1, %al
jne 0xc148a
jmp 0xc14d4
movq -0x60(%rbp), %rdi
addq $0x71, %rdi
leaq 0xb1045(%rip), %rsi     # 0x1724de
leaq -0x48(%rbp), %rdx
movb $0x0, %al
callq 0xd0d0
cmpl $0x1, %eax
jne 0xc14d2
movq -0x60(%rbp), %rax
movq -0x48(%rbp), %rcx
subq -0x28(%rbp), %rcx
movq %rcx, 0x98(%rax)
movq $-0x1, 0xa8(%rax)
movq $-0x1, 0xa0(%rax)
jmp 0xc14d4
callq 0xdcd30
movq -0x60(%rbp), %rax
cmpq $-0x1, 0x98(%rax)
je 0xc15ea
movq -0x60(%rbp), %rax
movq 0x98(%rax), %rax
cmpq -0x20(%rbp), %rax
jae 0xc15db
leaq -0x50(%rbp), %rdi
movq %rdi, -0x80(%rbp)
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
movq -0x80(%rbp), %rsi
leaq 0xb0df4(%rip), %rdi     # 0x172312
xorl %ecx, %ecx
movl %ecx, -0x78(%rbp)
movl %ecx, %edx
callq 0xd5cc0
callq 0xdc990
movq -0x60(%rbp), %rcx
movl -0x78(%rbp), %edx
movlpd %xmm0, -0x58(%rbp)
movss -0x54(%rbp), %xmm0
movss %xmm0, -0x74(%rbp)
movq 0x98(%rcx), %rax
movslq 0x4(%rcx), %rcx
divq %rcx
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x70(%rbp)
testq %rax, %rax
movss %xmm0, -0x6c(%rbp)
js 0xc1588
movss -0x70(%rbp), %xmm0
movss %xmm0, -0x6c(%rbp)
movss -0x6c(%rbp), %xmm0
movss %xmm0, -0x84(%rbp)
callq 0xdd000
movss -0x74(%rbp), %xmm1
movaps %xmm0, %xmm2
movss -0x84(%rbp), %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss 0xb0a1e(%rip), %xmm1    # 0x171fd8
callq 0xdda20
callq 0xd5d90
movq -0x60(%rbp), %rax
movq 0x98(%rax), %rcx
movq %rcx, 0x40(%rax)
movq %rcx, 0x48(%rax)
movb $0x1, 0x50(%rax)
movq -0x60(%rbp), %rax
movq $-0x1, 0x98(%rax)
addq $0x90, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)