Function at 0x402a90
Capabilities:
Print debug messages

Disassembly:
sub esp, 0x28
mov eax, dword [esp + 0x30]
push ebx
push ebp
mov ebp, dword [esp + 0x34]
mov dword [esp + 0x2c], eax
push esi
mov al, byte [ebp]
mov esi, ecx
test al, al
push edi
mov dword [esp + 0x30], esi
mov dword [esp + 0x24], 0
je 0x40303b
mov ebx, dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov edi, dword [sym.imp.KERNEL32.dll_GetThreadLocale]
mov esi, dword [sym.imp.USER32.dll_CharNextA]
jmp 0x402ae2
mov esi, dword [sym.imp.USER32.dll_CharNextA]
mov ebx, dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov edi, dword [sym.imp.KERNEL32.dll_GetThreadLocale]
cmp byte [ebp], 0x25
jne 0x403015
push ebp
call esi
mov ebp, eax
mov al, byte [ebp]
cmp al, 0x25
je 0x403015
xor esi, esi
test al, al
mov dword [esp + 0x2c], esi
mov dword [esp + 0x20], esi
je 0x402b61
cmp al, 0x23
jne 0x402b15
add dword [esp + 0x24], 2
jmp 0x402b39
cmp al, 0x2a
jne 0x402b29
mov eax, dword [esp + 0x40]
add eax, 4
mov dword [esp + 0x40], eax
mov esi, dword [eax - 4]
jmp 0x402b39
cmp al, 0x2d
je 0x402b39
cmp al, 0x2b
je 0x402b39
cmp al, 0x30
je 0x402b39
cmp al, 0x20
jne 0x402b49
push ebp
call dword [sym.imp.USER32.dll_CharNextA]
mov ebp, eax
mov al, byte [ebp]
test al, al
jne 0x402b0a
test esi, esi
mov dword [esp + 0x20], esi
jne 0x402c7d
mov ebx, dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov edi, dword [sym.imp.KERNEL32.dll_GetThreadLocale]
mov cl, byte [ebp]
lea edx, [esp + 0x14]
push edx
lea eax, [esp + 0x17]
push 1
push eax
push 1
mov esi, ebp
mov byte [esp + 0x23], cl
call edi
push eax
call ebx
mov cl, byte [esp + 0x14]
and cl, 8
cmp cl, 8
jne 0x402bb0
mov dl, byte [esi + 1]
lea eax, [esp + 0x14]
inc esi
push eax
lea ecx, [esp + 0x17]
push 1
push ecx
push 1
mov byte [esp + 0x23], dl
call edi
push eax
call ebx
mov dl, byte [esp + 0x14]
and dl, 8
cmp dl, 8
je 0x402b89
xor ebx, ebx
mov bl, byte [esi]
inc esi
cmp ebx, 0x2d
mov dword [esp + 0x28], ebx
je 0x402bc3
cmp ebx, 0x2b
jne 0x402bc8
xor ebx, ebx
mov bl, byte [esi]
inc esi
lea eax, [esp + 0x16]
lea ecx, [esp + 0x13]
push eax
push 1
push ecx
push 1
xor edi, edi
mov byte [esp + 0x23], bl
call dword [sym.imp.KERNEL32.dll_GetThreadLocale]
push eax
call dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov dl, byte [esp + 0x16]
and dl, 4
cmp dl, 4
jne 0x402c2a
lea eax, [edi + edi*4]
lea ecx, [esp + 0x16]
push ecx
lea edx, [esp + 0x17]
lea edi, [ebx + eax*2 - 0x30]
xor ebx, ebx
mov bl, byte [esi]
push 1
push edx
push 1
inc esi
mov byte [esp + 0x23], bl
call dword [sym.imp.KERNEL32.dll_GetThreadLocale]
push eax
call dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov al, byte [esp + 0x16]
and al, 4
cmp al, 4
je 0x402bf5
cmp dword [esp + 0x28], 0x2d
jne 0x402c33
neg edi
mov al, byte [ebp]
mov dword [esp + 0x20], edi
test al, al
je 0x402c7d
mov ebx, dword [sym.imp.USER32.dll_CharNextA]
mov esi, dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov edi, dword [sym.imp.KERNEL32.dll_GetThreadLocale]
lea ecx, [esp + 0x1c]
lea edx, [esp + 0x13]
push ecx
push 1
push edx
push 1
mov byte [esp + 0x23], al
call edi
push eax
call esi
mov al, byte [esp + 0x1c]
and al, 4
cmp al, 4
jne 0x402c7d
push ebp
call ebx
mov ebp, eax
mov al, byte [ebp]
test al, al
jne 0x402c50
mov al, byte [ebp]
xor ebx, ebx
cmp al, 0x2e
jne 0x402de1
mov esi, dword [sym.imp.USER32.dll_CharNextA]
push ebp
call esi
mov ebp, eax
mov al, byte [ebp]
cmp al, 0x2a
jne 0x402cb8
mov eax, dword [esp + 0x40]
push ebp
add eax, 4
mov dword [esp + 0x44], eax
mov ecx, dword [eax - 4]
mov dword [esp + 0x2c], ecx
call esi
mov ebp, eax
jmp 0x402ddd
mov ebx, dword [sym.imp.KERNEL32.dll_GetThreadLocale]
lea edx, [esp + 0x18]
mov byte [esp + 0x13], al
push edx
lea eax, [esp + 0x17]
push 1
push eax
push 1
mov esi, ebp
call ebx
mov edi, dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
push eax
call edi
mov cl, byte [esp + 0x18]
and cl, 8
cmp cl, 8
jne 0x402d10
mov dl, byte [esi + 1]
lea eax, [esp + 0x18]
inc esi
push eax
lea ecx, [esp + 0x17]
push 1
push ecx
push 1
mov byte [esp + 0x23], dl
call ebx
push eax
call edi
mov dl, byte [esp + 0x18]
and dl, 8
cmp dl, 8
je 0x402ce9
xor ebx, ebx
mov bl, byte [esi]
inc esi
cmp ebx, 0x2d
mov dword [esp + 0x28], ebx
je 0x402d23
cmp ebx, 0x2b
jne 0x402d28
xor ebx, ebx
mov bl, byte [esi]
inc esi
lea eax, [esp + 0x1a]
lea ecx, [esp + 0x13]
push eax
push 1
push ecx
push 1
xor edi, edi
mov byte [esp + 0x23], bl
call dword [sym.imp.KERNEL32.dll_GetThreadLocale]
push eax
call dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov dl, byte [esp + 0x1a]
and dl, 4
cmp dl, 4
jne 0x402d8a
lea eax, [edi + edi*4]
lea ecx, [esp + 0x1a]
push ecx
lea edx, [esp + 0x17]
lea edi, [ebx + eax*2 - 0x30]
xor ebx, ebx
mov bl, byte [esi]
push 1
push edx
push 1
inc esi
mov byte [esp + 0x23], bl
call dword [sym.imp.KERNEL32.dll_GetThreadLocale]
push eax
call dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov al, byte [esp + 0x1a]
and al, 4
cmp al, 4
je 0x402d55
cmp dword [esp + 0x28], 0x2d
jne 0x402d93
neg edi
mov al, byte [ebp]
mov dword [esp + 0x28], edi
test al, al
je 0x402ddd
mov edi, dword [sym.imp.USER32.dll_CharNextA]
mov esi, dword [sym.imp.KERNEL32.dll_GetStringTypeExA]
mov ebx, dword [sym.imp.KERNEL32.dll_GetThreadLocale]
lea ecx, [esp + 0x1e]
lea edx, [esp + 0x13]
push ecx
push 1
push edx
push 1
mov byte [esp + 0x23], al
call ebx
push eax
call esi
mov al, byte [esp + 0x1e]
and al, 4
cmp al, 4
jne 0x402ddd
push ebp
call edi
mov ebp, eax
mov al, byte [ebp]
test al, al
jne 0x402db0
mov ebx, dword [esp + 0x28]
mov al, byte [ebp]
xor edi, edi
cmp al, 0x49
jne 0x402e00
cmp byte [ebp + 1], 0x36
jne 0x402e00
cmp byte [ebp + 2], 0x34
jne 0x402e00
add ebp, 3
mov edi, 0x40000
jmp case.0x402e13.73
movsx eax, al
add eax, 0xffffffba
cmp eax, 0x26
ja case.0x402e13.73
xor ecx, ecx
mov cl, byte [eax + 0x4031c4]
jmp dword [ecx*4 + 0x4031b4]
mov edi, 0x10000
jmp case.0x402e13.70
mov edi, 0x20000
push ebp
call dword [sym.imp.USER32.dll_CharNextA]
mov ebp, eax
movsx eax, byte [ebp]
or eax, edi
cmp eax, 0x10063
jg 0x402ef9
je 0x402f6c
cmp eax, 0x73
jg 0x402ee8
je 0x402ec3
cmp eax, 0x43
je 0x402f6c
cmp eax, 0x53
je 0x402ea3
cmp eax, 0x63
je 0x402f6c
mov esi, dword [esp + 0x2c]
movsx eax, byte [ebp]
add eax, 0xffffffbb
cmp eax, 0x33
ja case.0x402e84.73
xor edx, edx
mov dl, byte [eax + 0x403200]
jmp dword [edx*4 + 0x4031ec]
mov eax, dword [esp + 0x40]
test edi, 0x40000
je 0x402fa6
add eax, 8
jmp 0x402fa9
mov eax, dword [esp + 0x40]
add eax, 4
mov dword [esp + 0x40], eax
mov eax, dword [eax - 4]
test eax, eax
jne 0x402f55
mov esi, 6
jmp 0x402f86
mov eax, dword [esp + 0x40]
add eax, 4
mov dword [esp + 0x40], eax
mov eax, dword [eax - 4]
test eax, eax
jne 0x402edf
mov esi, 6
jmp 0x402f86
push eax
call dword [sym.imp.KERNEL32.dll_lstrlenA]
jmp 0x402f5e
sub eax, 0x10043
je 0x402f6c
sub eax, 0x10
je 0x402f13
jmp 0x402e68
cmp eax, 0x20053
jg 0x402f2c
je 0x402f3c
cmp eax, 0x10073
je 0x402f13
cmp eax, 0x20043
jmp 0x402e62
mov eax, dword [esp + 0x40]
add eax, 4
mov dword [esp + 0x40], eax
mov eax, dword [eax - 4]
test eax, eax
jne 0x402edf
mov esi, 6
jmp 0x402f86
sub eax, 0x20063
je 0x402f6c
sub eax, 0x10
jne 0x402e68
mov eax, dword [esp + 0x40]
add eax, 4
mov dword [esp + 0x40], eax
mov eax, dword [eax - 4]
test eax, eax
jne 0x402f55
mov esi, 6
jmp 0x402f86
push eax
call fcn.00404970
add esp, 4
mov esi, eax
cmp esi, 1
jge 0x402f7e
mov esi, 1
jmp 0x402f86
mov eax, dword [esp + 0x40]
mov esi, 2
add eax, 4
mov dword [esp + 0x40], eax
jmp 0x402f86
test esi, esi
je 0x402e6c
mov eax, dword [esp + 0x20]
cmp esi, eax
jg 0x402f90
mov esi, eax
test ebx, ebx
je case.0x402e84.73
cmp esi, ebx
jl case.0x402e84.73
mov eax, dword [esp + 0x24]
mov esi, ebx
add eax, esi
mov dword [esp + 0x24], eax
jmp 0x403024
add eax, 4
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x20]
mov esi, 0x20
add eax, ebx
cmp eax, esi
jl case.0x402e84.73
mov esi, eax
mov eax, dword [esp + 0x24]
add eax, esi
mov dword [esp + 0x24], eax
jmp 0x403024
push str.Floating_point____e____f____g__and___G__is_not_supported_by_the_WTL::CString_class.
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
call dword [sym.imp.KERNEL32.dll_DebugBreak]
add dword [esp + 0x24], esi
jmp 0x403024
mov ecx, dword [esp + 0x20]
mov edx, dword [esp + 0x40]
mov esi, 0x20
add edx, 4
lea eax, [ebx + ecx]
mov dword [esp + 0x40], edx
cmp eax, esi
jl case.0x402e84.73
mov esi, eax
mov eax, dword [esp + 0x24]
add eax, esi
mov dword [esp + 0x24], eax
jmp 0x403024
add dword [esp + 0x40], 4
add dword [esp + 0x24], esi
jmp 0x403024
push ebp
call esi
mov ecx, dword [esp + 0x24]
sub eax, ebp
add ecx, eax
mov dword [esp + 0x24], ecx
push ebp
call dword [sym.imp.USER32.dll_CharNextA]
mov ebp, eax
cmp byte [ebp], 0
jne 0x402ad0
mov esi, dword [esp + 0x30]
mov eax, dword [esi]
mov edi, dword [esp + 0x24]
mov ecx, dword [eax - 0xc]
lea ebx, [eax - 0xc]
cmp ecx, 1
jg 0x403055
cmp edi, dword [eax - 4]
jle 0x4030d5
mov ebp, dword [eax - 8]
cmp edi, ebp
jge 0x40305e
mov edi, ebp
test edi, edi
jne 0x40306c
mov edx, dword [0x40d14c]
mov dword [esi], edx
jmp 0x403092
lea eax, [edi + 0xd]
push eax
call fcn.00404633
add esp, 4
test eax, eax
je 0x4030db
mov dword [eax], 1
mov byte [eax + edi + 0xc], 0
mov dword [eax + 4], edi
mov dword [eax + 8], edi
add eax, 0xc
mov dword [esi], eax
lea ecx, [ebp + 1]
inc edi
cmp edi, ecx
jb 0x4030b3
mov edx, dword [esp + 0x30]
mov eax, ecx
lea esi, [ebx + 0xc]
mov edi, dword [edx]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov esi, edx
mov ecx, dword [esi]
mov dword [ecx - 8], ebp
mov eax, dword [0x40d150]
cmp ebx, eax
je 0x4030d5
push ebx
call dword [sym.imp.KERNEL32.dll_InterlockedDecrement]
test eax, eax
jg 0x4030d5
push ebx
call fcn.004043af
add esp, 4
mov eax, dword [esi]
test eax, eax
jne 0x4030e7
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x28
ret 8
mov edx, dword [esp + 0x34]
mov ecx, dword [esp + 0x3c]
push edx
push ecx
push eax
call dword [sym.imp.USER32.dll_wvsprintfA]
mov eax, dword [esi]
mov ecx, dword [eax - 0xc]
lea ebx, [eax - 0xc]
cmp ecx, 1
jle 0x403190
mov ecx, dword [0x40d150]
add eax, 0xfffffff4
cmp eax, ecx
je 0x403136
push ebx
call dword [sym.imp.KERNEL32.dll_InterlockedDecrement]
test eax, eax
jg 0x40312f
mov edx, dword [esi]
sub edx, 0xc
push edx
call fcn.004043af
add esp, 4
mov eax, dword [0x40d14c]
mov dword [esi], eax
mov edi, dword [ebx + 4]
test edi, edi
jne 0x403147
mov ecx, dword [0x40d14c]
mov dword [esi], ecx
jmp 0x40316d
lea edx, [edi + 0xd]
push edx
call fcn.00404633
add esp, 4
test eax, eax
je 0x403190
mov dword [eax], 1
mov byte [eax + edi + 0xc], 0
mov dword [eax + 4], edi
mov dword [eax + 8], edi
add eax, 0xc
mov dword [esi], eax
mov edi, dword [esi]
mov ecx, dword [ebx + 4]
inc ecx
mov eax, dword [edi - 4]
inc eax
cmp eax, ecx
jb 0x403190
mov edx, ecx
lea esi, [ebx + 0xc]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov esi, dword [esp + 0x30]
mov eax, dword [esi]
push eax
call dword [sym.imp.KERNEL32.dll_lstrlenA]
mov ecx, dword [esi]
pop edi
mov dword [ecx - 8], eax
mov edx, dword [esi]
pop esi
pop ebp
mov byte [eax + edx], 0
mov eax, 1
pop ebx
add esp, 0x28
ret 8