Function at 0x403bc0
Capabilities:
Get keyboard layout

Disassembly:
push 0xffffffffffffffff
push 0x476fcc
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0x134
push ebx
push esi
mov esi, ecx
push edi
lea eax, [esp + 0xc]
lea edi, [esi + 0x40]
push eax
mov ecx, edi
call fcn.00401820
lea ecx, [esp + 0x14]
xor ebx, ebx
push ecx
mov ecx, edi
mov dword [esp + 0x14c], ebx
call fcn.004017c0
lea edx, [esp + 0x1c]
mov ecx, edi
push edx
mov byte [esp + 0x14c], 1
call fcn.004016e0
lea eax, [esp + 0x24]
mov ecx, edi
push eax
mov byte [esp + 0x14c], 2
call fcn.004016a0
mov ecx, dword [esi + 0x88]
mov byte [esp + 0x148], 3
mov eax, dword [ecx + 0x24]
mov ecx, edi
push eax
call fcn.004015e0
mov edx, dword [esi + 0x88]
mov ecx, edi
mov eax, dword [edx + 0x1c]
push eax
call fcn.00401620
mov eax, dword [esi + 0x88]
mov ecx, edi
mov eax, dword [eax + 0x18]
push eax
call fcn.00401600
mov ecx, dword [esi + 0x88]
mov eax, dword [ecx + 0x20]
lea ecx, [esp + 0xc]
push eax
call fcn.00401ab0
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0xc]
mov eax, dword [edx + 0x154]
push eax
call fcn.00401a80
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x148]
cmp ecx, 6
ja case.default.0x403ca5
jmp dword [ecx*4 + 0x404160]
mov dword [eax + 0x14c], 0x320
mov edx, dword [esi + 0x88]
mov dword [edx + 0x150], 0x258
jmp case.default.0x403ca5
mov dword [eax + 0x14c], 0x400
mov eax, dword [esi + 0x88]
mov dword [eax + 0x150], 0x300
jmp case.default.0x403ca5
mov dword [eax + 0x14c], 0x480
mov ecx, dword [esi + 0x88]
mov dword [ecx + 0x150], 0x360
jmp case.default.0x403ca5
mov dword [eax + 0x14c], 0x500
mov edx, dword [esi + 0x88]
mov dword [edx + 0x150], 0x400
jmp case.default.0x403ca5
mov dword [eax + 0x14c], 0x640
mov eax, dword [esi + 0x88]
mov dword [eax + 0x150], 0x4b0
jmp case.default.0x403ca5
mov edx, dword [esi + 0x1c]
lea ecx, [esp + 0x2c]
push ecx
push edx
call dword [sym.imp.USER32.dll_GetClientRect]
mov eax, dword [esp + 0x34]
mov edx, dword [esp + 0x2c]
sub eax, edx
cmp eax, 0xc8
jle 0x403d9d
mov ecx, dword [esp + 0x38]
mov edx, dword [esp + 0x30]
sub ecx, edx
cmp ecx, 0xc8
jle 0x403d9d
mov edx, dword [esi + 0x88]
mov dword [edx + 0x14c], eax
mov eax, dword [esp + 0x38]
mov ecx, dword [esp + 0x30]
sub eax, ecx
mov ecx, dword [esi + 0x88]
mov dword [ecx + 0x150], eax
jmp case.default.0x403ca5
mov edx, dword [esi + 0x88]
push ebx
lea ecx, [esp + 0x10]
mov dword [edx + 0x154], ebx
call fcn.00401a80
mov eax, dword [esi + 0x88]
mov dword [eax + 0x14c], 0x280
mov ecx, dword [esi + 0x88]
mov dword [ecx + 0x150], 0x1e0
mov edx, dword [esi + 0x88]
mov ecx, edi
mov eax, dword [edx + 0x14c]
push eax
call fcn.00401660
mov ecx, dword [esi + 0x88]
mov edx, dword [ecx + 0x150]
mov ecx, edi
push edx
call fcn.00401680
mov dword [0x4b581c], ebx
mov dword [0x4b5820], ebx
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x14c]
mov dword [0x4b5824], ecx
mov edx, dword [esi + 0x88]
mov eax, dword [edx + 0x150]
mov dword [0x4b5828], eax
mov ecx, dword [esi + 0x88]
cmp dword [ecx + 0x154], ebx
jne 0x403e5a
mov edx, dword [0x4b5754]
push ebx
push 0xffffffffffffffff
push 0x403
mov eax, dword [edx + 0x1c]
push eax
call dword [sym.imp.USER32.dll_SendMessageA]
mov ecx, dword [esi + 0x1c]
push ecx
call dword [sym.imp.USER32.dll_UpdateWindow]
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x158]
add ecx, 0xfffffff8
cmp ecx, 0x10
ja case.0x403e76.8
xor edx, edx
mov dl, byte [ecx + 0x404190]
jmp dword [edx*4 + 0x40417c]
mov dword [eax + 0x158], 0xf
jmp 0x403eab
mov dword [eax + 0x158], 0x10
jmp 0x403eab
mov dword [eax + 0x158], 0x18
jmp 0x403eab
mov dword [eax + 0x158], 8
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x158]
push ecx
mov ecx, edi
call fcn.00401760
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0x14]
mov eax, dword [edx + 0x15c]
push eax
call fcn.00401c60
mov ecx, dword [esi + 0x88]
mov edx, dword [ecx + 0x160]
lea ecx, [esp + 0x14]
push edx
call fcn.00401c40
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x164]
push ecx
lea ecx, [esp + 0x10]
call fcn.00401ae0
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0xc]
mov eax, dword [edx + 0x168]
push eax
call fcn.00401b10
mov ecx, dword [esi + 0x88]
mov edx, dword [ecx + 0x16c]
lea ecx, [esp + 0xc]
push edx
call fcn.00401b40
mov eax, dword [esi + 0x88]
cmp dword [eax + 0x174], ebx
je 0x403f8d
mov eax, dword [eax + 0x178]
lea ecx, [esp + 0x14]
push eax
call fcn.00401c00
mov eax, dword [esi + 0x88]
lea ecx, [esp + 0x14]
mov eax, dword [eax + 0x17c]
push eax
call fcn.00401c20
mov ecx, dword [esi + 0x88]
mov eax, dword [ecx + 0x178]
lea ecx, [esp + 0x24]
push eax
call fcn.00402480
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0x24]
mov eax, dword [edx + 0x17c]
push eax
call fcn.004024a0
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x184]
push ecx
lea ecx, [esp + 0x10]
call fcn.00401b70
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0xc]
mov eax, dword [edx + 0x188]
push eax
call fcn.004018c0
mov ecx, dword [esi + 0x88]
mov edx, dword [ecx + 0x188]
lea ecx, [esp + 0x1c]
push edx
call fcn.00402400
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x18c]
push ecx
lea ecx, [esp + 0x10]
call fcn.004018a0
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0x1c]
mov eax, dword [edx + 0x18c]
push eax
call fcn.004023e0
mov ecx, dword [esi + 0x88]
mov edx, dword [ecx + 0x194]
lea ecx, [esp + 0xc]
push edx
call fcn.00401a20
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x190]
push ecx
lea ecx, [esp + 0x10]
call fcn.00401940
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0xc]
mov eax, dword [edx + 0x1b0]
push eax
call fcn.00401ba0
mov ecx, dword [esi + 0x88]
mov edx, dword [ecx + 0x1b4]
lea ecx, [esp + 0xc]
push edx
call fcn.00401bd0
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x198]
push ecx
lea ecx, [esp + 0x10]
call fcn.00401960
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0xc]
mov eax, dword [edx + 0x19c]
push eax
call fcn.00401a50
mov ecx, dword [esi + 0x88]
mov edx, dword [ecx + 0x1a0]
lea ecx, [esp + 0xc]
push edx
call fcn.004019c0
mov eax, dword [esi + 0x88]
mov ecx, dword [eax + 0x1a4]
push ecx
lea ecx, [esp + 0x10]
call fcn.004019f0
mov edx, dword [esi + 0x88]
lea ecx, [esp + 0xc]
mov eax, dword [edx + 0x1a8]
push eax
call fcn.00401990
lea ecx, [esp + 0x3c]
push ecx
call dword [sym.imp.USER32.dll_GetKeyboardLayoutNameA]
test eax, eax
je 0x4040ec
lea edx, [esp + 0x3c]
lea ecx, [esp + 0xc]
push edx
call fcn.004018e0
lea eax, [esp + 0x3c]
lea ecx, [esp + 0x1c]
push eax
call fcn.00402420
push 1
lea ecx, [esp + 0x10]
call fcn.00401910
push 1
lea ecx, [esp + 0x20]
call fcn.00402450
lea ecx, [esp + 0x24]
mov byte [esp + 0x148], 2
call fcn.004727a7
lea ecx, [esp + 0x1c]
mov byte [esp + 0x148], 1
call fcn.004727a7
lea ecx, [esp + 0x14]
mov byte [esp + 0x148], bl
call fcn.004727a7
lea ecx, [esp + 0xc]
mov dword [esp + 0x148], 0xffffffff
call fcn.004727a7
mov ecx, dword [esp + 0x140]
pop edi
pop esi
pop ebx
mov dword fs:[0], ecx
add esp, 0x140
ret