Function at 0x14003bf60
Capabilities:
Get keyboard layout

Disassembly:
mov qword [rsp + 8], rcx
push rbp
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
mov eax, 0x8568
call fcn.1400bc990
sub rsp, rax
lea rbp, [rsp + 0x40]
mov rax, rcx
mov rcx, qword [0x1401050d0]
mov qword [rbp + 0x18], rcx
test rcx, rcx
jne 0x14003bfba
cmp dword [0x1401052e0], 1
mov rcx, rax
sete dl
xor r12d, r12d
xor dl, 1
mov dword [0x1401052e0], r12d
call fcn.140035700
jmp 0x14003cad0
mov rdi, qword [0x140105188]
lea r15, [0x140000000]
mov r13, qword [0x140105190]
xor r12d, r12d
mov r14, qword [0x140105198]
mov eax, r12d
mov dword [rbp + 0x8588], eax
mov byte [rbp + 0x8578], al
mov dword [0x1401052e0], r12d
mov dword [0x140105324], 1
mov word [0x140105328], r12w
mov dword [0x14010533c], 0x3fff
movzx eax, word [rdi]
mov qword [rbp + 8], r13
mov qword [rbp + 0x10], r14
test ax, ax
je 0x14003c0f8
lea rsi, [rdi + 2]
movzx ebx, ax
test ebx, 0xffffff80
jne 0x14003c041
mov edx, 2
mov ecx, ebx
call fcn.1400aa2a4
test eax, eax
je 0x14003c041
and ebx, 0xffffffdf
movzx eax, bx
add eax, 0xffffffd6
cmp eax, 0x2c
ja case.0x14003c066.51
cdqe
movzx eax, byte [r15 + rax + 0x3cb0c]
mov ecx, dword [r15 + rax*4 + 0x3cae4]
add rcx, r15
jmp rcx
mov byte [0x140105324], r12b
jmp case.0x14003c066.51
mov byte [0x140105325], 1
jmp case.0x14003c066.51
mov byte [0x140105326], 1
jmp case.0x14003c066.51
mov byte [0x140105327], 1
jmp case.0x14003c066.51
mov rcx, rsi
call fcn.1400ab2c8
mov dword [0x14010533c], eax
cmp eax, 0x3fff
jle case.0x14003c066.51
mov dword [0x14010533c], 0x3fff
jmp case.0x14003c066.51
mov rcx, rsi
call fcn.140015780
mulsd xmm0, qword [0x1400ea458]
cvttsd2si eax, xmm0
mov dword [rbp + 0x8588], eax
jmp case.0x14003c066.51
mov byte [0x140105328], 1
jmp case.0x14003c066.51
mov byte [0x140105329], 1
jmp case.0x14003c066.51
mov al, 1
mov byte [rbp + 0x8578], al
movzx eax, word [rdi + 2]
add rdi, 2
add rsi, 2
test ax, ax
jne 0x14003c023
xor edx, edx
lea rcx, [rbp + 0x120]
mov r8d, 0x100
call fcn.1400a6690
xor edx, edx
lea rcx, [rbp + 0x320]
mov r8d, 0x200
call fcn.1400a6690
mov rbx, r12
mov word [rbp + 0x8582], r12w
mov r15, r13
mov qword [rbp], rbx
mov edx, 0x7d
cmp word [r13], r12w
je 0x14003c279
movzx r13d, byte [rbp + 0x8578]
lea rsi, [0x1400fd210]
mov word [rbp + 0x8580], r12w
movzx eax, word [r15]
cmp eax, 0x7b
je 0x14003c307
cmp eax, 0x7d
je 0x14003c25c
test r13b, r13b
je 0x14003c180
inc rbx
mov qword [rbp], rbx
jmp 0x14003c25c
xor ecx, ecx
mov word [rbp + 0x8580], ax
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rbp + 0x8580]
test cx, cx
je 0x14003c257
cmp word [rbp + 0x8582], r12w
jne 0x14003c1cc
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.1400146f0
movzx ebx, al
mov edx, 0x7d
jmp 0x14003c456
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c1ea
mov edx, 2
mov ecx, ebx
call fcn.1400aa2a4
test eax, eax
je 0x14003c1ea
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c220
movzx ecx, word [rbp + 0x8582]
call fcn.14000ad60
cmp ax, 0x4b
jne 0x14003c220
xor edx, edx
lea rcx, [rbp + 0x8584]
lea r8d, [rdx + 0x10]
call fcn.1400ab740
mov ebx, eax
mov edx, 0x7d
jmp 0x14003c456
lea r14, str.Numpad0
mov rdi, r12
mov rbx, r14
nop dword [rax]
mov rcx, qword [rbx]
lea rdx, [rbp + 0x8580]
call fcn.1400a7700
test eax, eax
je 0x14003c2f4
inc rdi
add rbx, 0x10
cmp rbx, rsi
jl 0x14003c230
mov rbx, qword [rbp]
mov edx, 0x7d
add r15, 2
lea rsi, [0x1400fd210]
cmp word [r15], r12w
jne 0x14003c151
mov r13, qword [rbp + 8]
mov r14, qword [rbp + 0x10]
lea r15, [0x1400e8118]
mov qword [0x1401052f8], r15
test rbx, rbx
je 0x14003c501
lea rax, [rbx*2 + 2]
lea rcx, [rax + 0xf]
cmp rcx, rax
ja 0x14003c2ab
movabs rcx, 0xffffffffffffff0
and rcx, 0xfffffffffffffff0
mov rax, rcx
call fcn.1400bc990
sub rsp, rcx
lea rbx, [rsp + 0x40]
mov qword [0x1401052f8], rbx
cmp word [r13], r12w
je 0x14003c4fd
movzx eax, word [r13]
cmp eax, 0x7b
je 0x14003c4ad
cmp eax, 0x7d
je 0x14003c4e9
mov word [rbx], ax
add rbx, 2
jmp 0x14003c4e9
add rdi, rdi
mov edx, 0x7d
movzx ebx, byte [r14 + rdi*8 + 8]
jmp 0x14003c456
lea rsi, [r15 + 2]
mov rcx, rsi
call fcn.1400a5c78
mov r14, rax
test rax, rax
je 0x14003c257
mov rcx, rax
sub rcx, r15
sar rcx, 1
sub rcx, 1
jne 0x14003c33f
add r14, 2
cmp word [r14], 0x7d
jne 0x14003c257
jmp 0x14003c345
cmp rcx, 1
jne 0x14003c360
test r13b, r13b
je 0x14003c356
inc rbx
mov qword [rbp], rbx
jmp 0x14003c257
movzx eax, word [rsi]
mov word [rbp + 0x8580], ax
xor ecx, ecx
mov word [r14], r12w
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rsi]
test cx, cx
jne 0x14003c382
xor bl, bl
jmp 0x14003c432
cmp word [rsi + 2], r12w
jne 0x14003c3a0
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.1400146f0
movzx ebx, al
jmp 0x14003c42e
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c3be
mov edx, 2
mov ecx, ebx
call fcn.1400aa2a4
test eax, eax
je 0x14003c3be
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c3e7
movzx ecx, word [rsi + 2]
call fcn.14000ad60
cmp ax, 0x4b
jne 0x14003c3e7
xor edx, edx
lea rcx, [rsi + 4]
lea r8d, [rdx + 0x10]
call fcn.1400ab740
movzx ebx, al
jmp 0x14003c42e
mov rdi, r12
lea rbx, str.Numpad0
lea r15, [0x1400fd210]
nop dword [rax + rax]
mov rcx, qword [rbx]
mov rdx, rsi
call fcn.1400a7700
test eax, eax
je 0x14003c41f
inc rdi
add rbx, 0x10
cmp rbx, r15
jl 0x14003c400
xor bl, bl
jmp 0x14003c432
add rdi, rdi
lea rax, str.Numpad0
movzx ebx, byte [rax + rdi*8 + 8]
test bl, bl
jne 0x14003c44a
mov rcx, rsi
call fcn.1400144d0
test ax, ax
je 0x14003c44a
movzx eax, ax
mov byte [rbp + rax + 0x320], 1
mov edx, 0x7d
mov r15, r14
mov word [r14], dx
test bl, bl
je 0x14003c493
movzx ecx, word [rbp + 0x8580]
movzx ebx, bl
or byte [rbp + rbx + 0x120], 1
test cx, cx
je 0x14003c493
call qword [sym.imp.USER32.dll_IsCharAlphaW]
test eax, eax
jne 0x14003c253
test byte [rbp + 0x8578], 0x30
lea edx, [rax + 0x7d]
je 0x14003c49c
or byte [rbp + rbx + 0x120], 2
mov rbx, qword [rbp]
jmp 0x14003c25c
or byte [rbp + rbx + 0x120], 4
mov rbx, qword [rbp]
jmp 0x14003c25c
lea rdi, [r13 + 2]
mov rcx, rdi
call fcn.1400a5c78
mov rdx, rax
test rax, rax
je 0x14003c4e9
cmp rax, rdi
jne 0x14003c4d3
cmp word [rax + 2], 0x7d
lea rcx, [rax + 2]
cmove rdx, rcx
lea rax, [r13 + 4]
cmp rdx, rax
jne 0x14003c4e6
movzx eax, word [rdi]
mov word [rbx], ax
add rbx, 2
mov r13, rdx
add r13, 2
mov edx, 0x7d
cmp word [r13], r12w
jne 0x14003c2d1
mov word [rbx], r12w
mov dword [0x140105310], r12d
cmp word [r14], r12w
je 0x14003c6e5
cmp qword [0x140105308], r12
jne 0x14003c559
mov ecx, 0x2000
call fcn.1400a7878
mov qword [0x140105308], rax
test rax, rax
jne 0x14003c54f
mov rcx, qword [rbp + 0x8570]
lea rdx, str.Out_of_memory.
mov r9, r15
xor r8d, r8d
call fcn.1400358c0
jmp 0x14003cad0
mov dword [0x140105314], 0x400
mov rdi, qword [rbp + 0x8570]
mov edx, 3
mov rcx, rdi
call fcn.140025520
mov ecx, dword [0x140105320]
inc rax
cmp rax, rcx
jbe 0x14003c5db
mov rcx, qword [0x140105318]
mov edx, 0x1000
cmp rax, rdx
cmova edx, eax
mov dword [0x140105320], edx
test rcx, rcx
je 0x14003c5a3
call fcn.1400ab7a0
mov edx, dword [0x140105320]
lea ecx, [rdx + rdx]
call fcn.1400a7878
mov qword [0x140105318], rax
mov rdx, rax
test rax, rax
jne 0x14003c5e2
mov dword [0x140105320], r12d
mov r9, r15
lea rdx, str.Out_of_memory.
xor r8d, r8d
mov rcx, rdi
call fcn.1400358c0
jmp 0x14003cad0
mov rdx, qword [0x140105318]
mov ecx, dword [0x140105310]
mov rax, qword [0x140105308]
mov qword [rax + rcx*8], rdx
mov rbx, qword [0x140105318]
cmp word [r14], r12w
je 0x14003c6c2
mov esi, 0x2c
nop dword [rax]
movzx eax, word [r14]
cmp ax, si
je 0x14003c625
mov word [rbx], ax
add rbx, 2
jmp 0x14003c6b4
cmp word [r14 + 2], si
jne 0x14003c639
mov word [rbx], si
add rbx, 2
add r14, 2
jmp 0x14003c6b4
mov word [rbx], r12w
mov ecx, dword [0x140105310]
mov r8, qword [0x140105308]
mov rax, qword [r8 + rcx*8]
cmp word [rax], r12w
je 0x14003c677
inc ecx
mov dword [0x140105310], ecx
add rbx, 2
mov eax, ecx
mov qword [r8 + rcx*8], rbx
mov word [rbx], r12w
mov ecx, dword [0x140105310]
mov r8, qword [0x140105308]
cmp word [r14 + 2], r12w
je 0x14003c6b4
mov eax, dword [0x140105314]
cmp ecx, eax
jb 0x14003c6b4
lea edx, [rax + 0x400]
mov rcx, r8
shl rdx, 3
call fcn.1400ab5d4
test rax, rax
je 0x14003c5c1
add dword [0x140105314], 0x400
mov qword [0x140105308], rax
add r14, 2
cmp word [r14], r12w
jne 0x14003c610
mov word [rbx], r12w
mov edx, dword [0x140105310]
mov rax, qword [0x140105308]
mov rcx, qword [rax + rdx*8]
cmp word [rcx], r12w
je 0x14003c6e5
inc edx
mov dword [0x140105310], edx
cmp byte [0x140100af0], r12b
je 0x14003c732
mov rcx, qword [0x140100ea0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx ecx, byte [0x140100af0]
test eax, eax
cmovne ecx, r12d
mov byte [0x140100af0], cl
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003c732
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
or byte [0x140103d31], 1
lea rax, [rbp + 0x520]
cmp qword [0x140100ec8], r12
mov qword [0x140105330], rax
lea rax, [rbp + 0x120]
mov qword [0x1401052e8], rax
lea rax, [rbp + 0x320]
mov qword [0x1401052f0], rax
mov word [rbp + 0x520], r12w
mov dword [0x140105338], r12d
mov dword [0x1401052e0], 1
mov byte [0x140100eb4], 1
jne 0x14003c798
movzx edx, word [0x140103d38]
call fcn.140009630
mov eax, dword [rbp + 0x8588]
test eax, eax
jle 0x14003c7e0
cmp byte [0x140100af0], r12b
jne 0x14003c7e0
mov ecx, 0xa
lea r9, [0x140004250]
cmp eax, ecx
cmovl eax, ecx
lea edx, [rcx + 2]
mov r8d, eax
mov rcx, qword [0x140100ea0]
call qword [sym.imp.USER32.dll_SetTimer]
test rax, rax
setne byte [0x140100af0]
nop dword [rax]
mov edx, 1
mov ecx, 0x8000012f
call fcn.1400016e0
mov ecx, dword [0x1401052e0]
cmp ecx, 1
je 0x14003c7e0
sub ecx, 2
je 0x14003ca3f
sub ecx, 1
je 0x14003ca36
sub ecx, 1
je 0x14003c841
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
cmp ecx, 1
mov rcx, qword [0x140100e80]
je 0x14003c835
lea rdx, str.NewInput
jmp 0x14003ca59
lea rdx, [0x1400e5988]
jmp 0x14003ca59
movups xmm0, xmmword [str.EndKey:]
xor edx, edx
lea rcx, [rbp + 0x30]
mov r8d, 0xf0
movaps xmmword [rbp + 0x20], xmm0
call fcn.1400a6690
movzx eax, word [0x140105304]
test ax, ax
je 0x14003c87b
mov word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
mov word [rbp + 0x30], r12w
jmp 0x14003ca46
cmp byte [0x140105307], r12b
je 0x14003c923
xor edx, edx
lea rcx, [rbp + 0x220]
mov r8d, 0x100
call fcn.1400a6690
or byte [rbp + 0x230], 0x80
call qword [sym.imp.USER32.dll_GetForegroundWindow]
test rax, rax
je 0x14003c8bb
xor edx, edx
mov rcx, rax
call qword [sym.imp.USER32.dll_GetWindowThreadProcessId]
jmp 0x14003c8be
mov eax, r12d
mov ecx, eax
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
cmp dword [0x140100af4], r12d
mov edi, r12d
movzx ecx, byte [0x140105300]
mov rbx, rax
setne dil
xor edx, edx
call fcn.140014ad0
movzx ecx, byte [0x140105300]
lea r9, [rbp + 0x2e]
mov qword [rsp + 0x30], rbx
lea r8, [rbp + 0x220]
movzx edx, ax
mov dword [rsp + 0x28], edi
mov dword [rsp + 0x20], 2
call qword [sym.imp.USER32.dll_ToUnicodeEx]
movsxd rcx, eax
lea rdx, [rbp + 0x20]
mov word [rbp + rcx*2 + 0x2e], r12w
jmp 0x14003ca46
cmp byte [0x140105306], r12b
mov ecx, r12d
je 0x14003c989
movzx edx, word [0x140105302]
lea rax, [0x1400fca78]
lea r8, [0x1400fcb48]
cmp word [rax], dx
je 0x14003c972
inc ecx
add rax, 0x10
cmp rax, r8
jl 0x14003c944
movzx r9d, dx
lea r8, str.sc_03X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087800
jmp 0x14003ca19
movsxd rdx, ecx
lea rax, [0x140000000]
add rdx, rdx
mov rdx, qword [rax + rdx*8 + 0xfca70]
jmp 0x14003ca02
movzx ebx, byte [0x140105300]
lea rax, [0x1400fcb48]
lea rdx, [0x1400fd218]
nop
cmp byte [rax], bl
je 0x14003c9f1
inc ecx
add rax, 0x10
cmp rax, rdx
jl 0x14003c9a0
movzx ecx, bl
call fcn.140014340
mov word [rbp + 0x2e], ax
test ax, ax
je 0x14003c9c7
mov word [rbp + 0x30], r12w
jmp 0x14003ca19
test bl, bl
je 0x14003c9e6
movzx r9d, bl
lea r8, str.vk_02X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087800
jmp 0x14003ca19
mov word [rbp + 0x2e], r12w
lea rdx, [rbp + 0x20]
jmp 0x14003ca46
movsxd rdx, ecx
lea rax, str.Numpad0
add rdx, rdx
mov rdx, qword [rax + rdx*8]
mov r8d, 0x78
lea rcx, [rbp + 0x2e]
call fcn.1400b0734
mov word [rbp + 0x11e], r12w
movzx eax, word [rbp + 0x2e]
sub ax, 0x61
cmp ax, 0x19
ja 0x14003ca30
mov eax, 0xffe0
add word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
jmp 0x14003ca46
lea rdx, str.Match
jmp 0x14003ca46
lea rdx, str.Timeout
mov rcx, qword [0x140100e80]
xor r9d, r9d
or r8, 0xffffffffffffffff
mov byte [rsp + 0x20], 1
call fcn.14008ad10
cmp byte [0x140100af0], r12b
mov dword [0x1401052e0], r12d
je 0x14003cab4
mov rcx, qword [0x140100ea0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx r8d, byte [0x140100af0]
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
test eax, eax
cmovne r8d, r12d
mov byte [0x140100af0], r8b
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003cab4
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
mov rcx, qword [rbp + 0x18]
lea rdx, [rbp + 0x520]
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
call fcn.14008ad10
lea rsp, [rbp + 0x8528]
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret