Function at 0x40c7a0
Capabilities:
Get keyboard layout

Disassembly:
sub esp, 0x40c
push ebx
push ebp
mov ebp, dword [esp + 0x420]
push esi
push edi
xor edi, edi
mov esi, ecx
mov byte [esp + 0x12], 0
test ebp, ebp
je 0x40c7c7
lea eax, [ebp + 0x12]
mov dword [esp + 0x14], eax
jmp 0x40c7cf
lea ecx, [esp + 0x13]
mov dword [esp + 0x14], ecx
cmp byte [esp + 0x424], 0
jne 0x40c821
mov ebx, 0x4a781c
mov eax, esi
call fcn.00409e00
mov ebx, eax
test ebx, ebx
je 0x40c821
mov ecx, ebx
lea ecx, [ecx]
movzx eax, word [ecx]
cmp eax, 0x20
je 0x40c7fd
cmp eax, 9
jne 0x40c802
add ecx, 2
jmp 0x40c7f0
push 0x4a4ecc
push ecx
call fcn.00490e99
add esp, 8
test eax, eax
jne 0x40c821
test ebp, ebp
je 0x40c81c
mov byte [ebp + 0x16], 1
xor edx, edx
mov word [ebx], dx
push 0
call dword [sym.imp.USER32.dll_GetKeyboardLayout]
push eax
push 1
lea ecx, [esp + 0x1a]
mov eax, esi
call fcn.00414420
mov bl, al
add esp, 8
mov byte [esp + 0x13], bl
test bl, bl
je 0x40c92b
cmp byte [esp + 0x424], 0
je 0x40c8cd
lea eax, [ebx + 0x64]
cmp al, 3
ja 0x40c8e9
cmp byte [esp + 0x42c], 0
je 0x40c88b
mov ecx, dword [0x4cbd60]
push 1
push 0
push 0xffffffffffffffff
push 0x4a7824
push ecx
call fcn.0047a5f0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x40c
ret
push esi
push 0x4a7828
mov esi, 0x200
lea edi, [esp + 0x24]
call fcn.004772c0
mov edx, dword [esp + 0x428]
add esp, 8
push edx
mov eax, edi
push eax
mov ecx, 0x4cc518
call fcn.00430bd0
test ebp, ebp
jne 0x40c97d
pop edi
pop esi
lea eax, [ebp + 4]
pop ebp
pop ebx
add esp, 0x40c
ret
test ebp, ebp
je 0x40c8e9
push 2
push 0x4a7874
push esi
call fcn.0049109d
add esp, 0xc
test eax, eax
sete cl
mov byte [ebp + 0x17], cl
lea edx, [ebx - 1]
cmp dl, 5
ja 0x40c8f6
cmp bl, 3
jne 0x40c8fd
lea eax, [ebx + 0x66]
cmp al, 5
ja 0x40c901
mov al, 1
jmp 0x40c903
xor al, al
mov dl, byte [esp + 0x12]
test dl, 0x30
je 0x40c917
lea ecx, [ebx - 0x41]
cmp cl, 0x19
ja 0x40c917
and dl, 0xcf
test al, al
je 0x40ca13
mov eax, dword [esp + 0x14]
mov byte [eax], 2
jmp 0x40ca13
xor ebx, ebx
mov eax, esi
call fcn.00414360
movzx edi, ax
test di, di
jne 0x40ca0b
push 1
lea ebx, [esp + 0x1c]
mov eax, esi
call fcn.00451c70
movzx edi, ax
add esp, 4
test di, di
jne 0x40c9eb
cmp byte [esp + 0x42c], 0
je 0x40c98a
mov edx, dword [0x4cbd60]
push 1
push 0
push 0xffffffffffffffff
push 0x4a787c
push edx
call fcn.0047a5f0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x40c
ret
cmp word [esi + 2], 0
jne 0x40c9b1
cmp byte [0x4ccffc], 0
jne 0x40c9b1
mov eax, ebp
neg eax
pop edi
sbb eax, eax
pop esi
and eax, 0xfffffffd
pop ebp
add eax, 3
pop ebx
add esp, 0x40c
ret
test ebp, ebp
je 0x40c9de
push esi
push 0x4a7880
mov esi, 0x200
lea edi, [esp + 0x24]
call fcn.004772c0
add esp, 8
push 0x4a48a0
mov eax, edi
push eax
mov ecx, 0x4cc518
call fcn.00430bd0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x40c
ret
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x18]
mov ecx, 1
add dword [0x4cbdc8], ecx
mov byte [edx], 4
mov byte [eax + 0x4cbdb8], cl
mov bl, al
jmp 0x40ca0f
mov bl, byte [esp + 0x13]
mov dl, byte [esp + 0x12]
cmp byte [esp + 0x424], 0
je 0x40ca38
test ebp, ebp
je 0x40ca70
mov word [ebp + 0xa], di
pop edi
pop esi
mov byte [ebp + 0x11], bl
pop ebp
mov eax, 1
pop ebx
add esp, 0x40c
ret
test ebp, ebp
je 0x40ca70
mov al, dl
and al, 0xd5
xor ecx, ecx
mov byte [ebp + 0x10], bl
mov word [ebp + 8], di
test al, 0xc0
je 0x40ca52
mov ecx, 8
test al, 0xc
je 0x40ca59
or ecx, 1
test al, 0x30
je 0x40ca60
or ecx, 4
test al, 3
je 0x40ca67
or ecx, 2
or dword [ebp], ecx
and dl, 0x2a
or byte [ebp + 0xe], dl
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x40c
ret