Function at 0x523c30
Capabilities:
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x90
push ebx
push ebp
push esi
xor ecx, ecx
xorps xmm0, xmm0
push edi
mov edi, dword [esp + 0xa4]
movlpd qword [esp + 0x3c], xmm0
cmp word [esp + 0xb4], cx
je 0x523c64
mov eax, dword [edi]
mov eax, dword [eax]
test byte [eax + 0x50], 0x40
jne 0x5245ca
mov eax, dword [esp + 0xa8]
movzx eax, word [eax]
mov dword [esp + 0x38], eax
cmp eax, 0x3f
ja 0x5245ca
movzx eax, ax
xor edx, edx
bts edx, eax
mov ebp, dword [esp + 0x40]
xor ebx, ebx
mov esi, dword [esp + 0x3c]
cmp eax, 0x20
movlpd qword [esp + 0x78], xmm0
movlpd qword [esp + 0x70], xmm0
cmovae ebx, edx
mov byte [esp + 0x24], 1
xor edx, ebx
mov dword [esp + 0x14], ebp
cmp eax, 0x40
mov dword [esp + 0x18], esi
mov eax, dword [esp + 0xb0]
cmovae ebx, edx
add edx, 0xffffffff
mov dword [esp + 0x6c], edx
mov edx, dword [esp + 0x24]
adc ebx, 0xffffffff
and eax, 0x803
mov dword [esp + 0x68], ebx
neg eax
sbb eax, eax
neg eax
add eax, 0x182
xor ebx, ebx
movzx eax, ax
mov dword [esp + 0x64], eax
mov eax, dword [esp + 0x7c]
mov dword [esp + 0x5c], eax
mov eax, dword [esp + 0x78]
mov dword [esp + 0x58], eax
mov eax, dword [esp + 0x74]
mov dword [esp + 0x50], eax
mov eax, dword [esp + 0x70]
mov dword [esp + 0x60], ebx
mov dword [esp + 0x4c], eax
nop word [eax + eax]
mov eax, dword [esp + 0x68]
cmp ebp, eax
ja 0x52451b
jb 0x523d28
cmp esi, dword [esp + 0x6c]
jae 0x52451f
movzx eax, word [esp + 0xb4]
cmp ebx, eax
jg 0x52454c
test ebx, ebx
jle 0x523d59
mov edi, dword [esp + 0x4c]
or edi, dword [ecx + 8]
mov dword [esp + 0x4c], edi
mov edi, dword [esp + 0x50]
or edi, dword [ecx + 0xc]
mov dword [esp + 0x50], edi
mov edi, dword [esp + 0xa4]
cmp ebx, eax
jge 0x523d83
mov eax, dword [esp + 0xac]
mov eax, dword [eax + 0x18]
mov ebx, dword [eax + ebx*4]
mov eax, dword [esp + 0xb0]
mov dword [esp + 0x2c], ebx
test eax, 0x800
je 0x523d95
mov ecx, ebx
jmp 0x5244ff
mov ebx, dword [esp + 0xb8]
mov eax, dword [esp + 0xb0]
mov dword [esp + 0x2c], ebx
test dword [ebx + 0x2c], 0x400
jne 0x52453a
and eax, 0x80
mov dword [esp + 0x70], eax
je 0x523db3
xor eax, eax
mov word [ebx + 0x1e], ax
movzx eax, byte [ebx + 0x10]
lea ecx, [eax + eax*8]
mov eax, dword [edi + 4]
mov edi, dword [eax + ecx*8 + 0x34]
xor eax, eax
mov dword [esp + 0x34], edi
mov dword [esp + 0x30], eax
cmp word [esp + 0x38], ax
je 0x523f5c
mov ebx, dword [esp + 0xa8]
add ebx, 8
mov dword [esp + 0x1c], ebx
xor ebp, ebp
xor edx, edx
bts ebp, eax
cmp eax, 0x20
cmovae edx, ebp
xor ebp, edx
cmp eax, 0x40
mov ecx, ebp
cmovae edx, ebp
and ecx, esi
mov eax, edx
mov dword [esp + 0x48], edx
and eax, dword [esp + 0x14]
or ecx, eax
jne 0x523f33
mov esi, dword [ebx]
test esi, esi
je 0x523f2f
nop dword [eax]
mov eax, dword [esi + 4]
test eax, 0x82000
je 0x523e45
test eax, 0x80000
je 0x523e39
mov eax, dword [esi + 0x14]
mov esi, dword [eax + 8]
jmp 0x523e3c
mov esi, dword [esi + 0xc]
test esi, esi
jne 0x523e20
jmp 0x523f2f
mov al, byte [esi]
cmp al, 0xa7
je 0x523e53
cmp al, 0xa9
jne 0x523f2f
cmp dword [esi + 0x1c], edi
jne 0x523f2f
mov eax, dword [esp + 0x64]
mov ecx, dword [esp + 0x4c]
movzx eax, ax
not ecx
push 0
push eax
mov eax, dword [esp + 0x58]
not eax
push eax
movsx eax, word [esi + 0x20]
push ecx
push eax
mov eax, dword [esp + 0xb8]
add eax, 0x50
push edi
push eax
call fcn.00511760
mov edi, eax
add esp, 0x1c
test edi, edi
je 0x523f2b
movzx ebx, word [edi + 0xc]
cmp ebx, 1
jne 0x523ec1
mov eax, dword [esp + 0x2c]
xor ecx, ecx
movzx edx, word [eax + 0x30]
test edx, edx
je 0x523ebd
mov eax, dword [eax + 0x38]
cmp edi, dword [eax]
je 0x523ebd
inc ecx
add eax, 4
cmp ecx, edx
jl 0x523eb1
cmp ecx, edx
jge 0x523f2b
test bl, 0x82
je 0x523f0f
cmp word [esi + 0x20], 0
jl 0x523f0f
mov eax, dword [esp + 0xa4]
mov esi, dword [eax]
mov eax, dword [esp + 0x1c]
push dword [eax]
push esi
call fcn.004db080
mov ebx, eax
add esp, 8
test ebx, ebx
jne 0x523ef0
mov eax, dword [esi]
mov ebx, dword [eax + 8]
push dword [edi]
push esi
call fcn.004db4c0
add esp, 8
test eax, eax
je 0x523f2b
push dword [eax]
push dword [ebx]
call fcn.004f93b0
add esp, 8
test eax, eax
jne 0x523f2b
mov esi, dword [esp + 0x18]
mov edi, dword [esp + 0x34]
or esi, ebp
mov ebp, dword [esp + 0x14]
or ebp, dword [esp + 0x48]
mov dword [esp + 0x18], esi
mov dword [esp + 0x14], ebp
jmp 0x523f37
mov edi, dword [esp + 0x34]
mov esi, dword [esp + 0x18]
mov ebp, dword [esp + 0x14]
mov eax, dword [esp + 0x30]
mov edx, dword [esp + 0x38]
inc eax
add dword [esp + 0x1c], 0x14
mov ebx, dword [esp + 0x1c]
movzx ecx, dx
mov dword [esp + 0x30], eax
cmp eax, ecx
jl 0x523de4
mov ebx, dword [esp + 0x2c]
mov eax, dword [ebx + 0x2c]
test eax, 0x1000
jne 0x52438e
test eax, 0x100
je 0x523f88
mov dword [esp + 0x44], 0
mov ecx, 1
mov dword [esp + 0x48], 0
jmp 0x523fc4
mov edx, dword [ebx + 0x20]
mov dword [esp + 0x44], edx
test edx, edx
je 0x5245ca
test byte [edx + 0x38], 4
jne 0x5245ca
cmp byte [edx + 0x36], 0
movzx ecx, word [edx + 0x32]
mov dword [esp + 0x48], ecx
movzx ecx, word [edx + 0x34]
je 0x523fbf
mov byte [esp + 0x24], 1
test eax, 0x8000
je 0x523fc4
mov byte [esp + 0x24], 0
xor al, al
xor edi, edi
mov byte [esp + 0x2b], al
mov byte [esp + 0x2a], al
mov dword [esp + 0x30], eax
movzx eax, cx
mov dword [esp + 0x1c], edi
mov dword [esp + 0x3c], eax
test eax, eax
je 0x52438e
mov dword [esp + 0x54], edi
nop dword [eax + eax]
movzx esi, word [ebx + 0x18]
mov dl, 1
mov byte [esp + 0x13], dl
cmp edi, esi
jge 0x52405e
movzx eax, word [ebx + 0x32]
cmp edi, eax
jl 0x52405e
mov ebx, dword [ebx + 0x38]
mov eax, dword [esp + 0x64]
mov edi, dword [ebx + edi*4]
movzx ecx, word [edi + 0xc]
and eax, ecx
test ax, ax
je 0x524031
test ecx, 0x180
je 0x52436d
mov byte [esp + 0x24], 0
jmp 0x52436d
test dl, cl
je 0x52405a
mov eax, dword [esp + 0x1c]
mov edi, dword [edi]
lea edx, [eax + 1]
cmp edx, esi
jge 0x524056
lea ecx, [eax + 1]
lea ecx, [ebx + ecx*4]
mov eax, dword [ecx]
cmp dword [eax], edi
je 0x52408d
inc edx
add ecx, 4
cmp edx, esi
jl 0x524048
mov dl, byte [esp + 0x13]
mov edi, dword [esp + 0x1c]
mov ebx, dword [esp + 0x44]
test ebx, ebx
je 0x524095
mov eax, dword [ebx + 4]
movsx ebp, word [eax + edi*2]
mov eax, dword [ebx + 0x1c]
mov cl, byte [edi + eax]
mov eax, dword [ebx + 0xc]
and cl, 1
mov byte [esp + 0x23], cl
movsx eax, word [eax + 0x20]
cmp ebp, eax
mov eax, 0xffffffff
cmove ebp, eax
jmp 0x52409d
xor dl, dl
mov byte [esp + 0x13], dl
jmp 0x52405a
or ebp, 0xffffffff
mov byte [esp + 0x23], 0
mov eax, dword [esp + 0x24]
test al, al
je 0x5240d4
test ebp, ebp
js 0x5240c5
cmp edi, esi
jl 0x5240d4
mov eax, dword [ebx + 0xc]
mov ecx, ebp
add ecx, ecx
mov eax, dword [eax + 4]
test byte [eax + ecx*8 + 4], 0xf
jne 0x5240d4
mov byte [esp + 0x24], 0
jmp 0x5240d4
xor ecx, ecx
movzx eax, al
cmp ebp, 0xfffffffe
cmove eax, ecx
mov dword [esp + 0x24], eax
xor edi, edi
test dl, dl
je 0x52426b
mov ebx, dword [esp + 0xa8]
add ebx, 8
nop dword [eax + eax]
mov ecx, dword [esp + 0x38]
movzx eax, cx
cmp edi, eax
jge 0x52426b
xor esi, esi
mov eax, edi
bts esi, eax
xor edx, edx
cmp eax, 0x20
cmovae edx, esi
xor esi, edx
cmp eax, 0x40
mov ecx, esi
mov dword [esp + 0x80], esi
cmovae edx, esi
and ecx, dword [esp + 0x18]
mov eax, edx
mov dword [esp + 0x78], edx
and eax, dword [esp + 0x14]
or ecx, eax
jne 0x52425c
mov eax, dword [ebx]
test eax, eax
je 0x52425c
nop
mov ecx, dword [eax + 4]
test ecx, 0x82000
je 0x524167
test ecx, 0x80000
je 0x52415b
mov ecx, dword [eax + 0x14]
mov eax, dword [ecx + 8]
jmp 0x52415e
mov eax, dword [eax + 0xc]
test eax, eax
jne 0x524140
jmp 0x52425c
mov cl, byte [esp + 0xb0]
and cl, 0xc0
neg cl
sbb cl, cl
and byte [esp + 0x13], cl
cmp ebp, 0xffffffff
jl 0x5241a3
mov cl, byte [eax]
cmp cl, 0xa7
je 0x52418e
cmp cl, 0xa9
jne 0x52425c
mov ecx, dword [esp + 0x34]
cmp dword [eax + 0x1c], ecx
jne 0x52425c
movsx eax, word [eax + 0x20]
cmp eax, ebp
jmp 0x524216
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x54]
mov ecx, dword [ecx + 0x28]
mov edx, dword [ecx + edx + 8]
test edx, edx
je 0x5241e2
nop word [eax + eax]
mov ecx, dword [edx + 4]
test ecx, 0x82000
je 0x5241e2
test ecx, 0x80000
je 0x5241db
mov ecx, dword [edx + 0x14]
mov edx, dword [ecx + 8]
jmp 0x5241de
mov edx, dword [edx + 0xc]
test edx, edx
jne 0x5241c0
mov ecx, dword [eax + 4]
test ecx, 0x82000
je 0x524204
test ecx, 0x80000
je 0x5241fd
mov ecx, dword [eax + 0x14]
mov eax, dword [ecx + 8]
jmp 0x524200
mov eax, dword [eax + 0xc]
test eax, eax
jne 0x5241e2
push dword [esp + 0x34]
push edx
push eax
push 0
call fcn.004db250
add esp, 0x10
test eax, eax
jne 0x52425c
cmp ebp, 0xffffffff
je 0x5242a3
mov eax, dword [esp + 0xa4]
push dword [ebx]
mov esi, dword [eax]
push esi
call fcn.004db080
mov ecx, eax
add esp, 8
test ecx, ecx
jne 0x524240
mov eax, dword [esi]
mov ecx, dword [eax + 8]
mov eax, dword [esp + 0x44]
mov edx, dword [esp + 0x1c]
mov eax, dword [eax + 0x20]
push dword [eax + edx*4]
push dword [ecx]
call fcn.004f93b0
add esp, 8
test eax, eax
je 0x52429c
inc edi
add ebx, 0x14
cmp byte [esp + 0x13], 0
jne 0x5240f0
mov ecx, dword [esp + 0x1c]
test ecx, ecx
je 0x52427e
mov eax, dword [esp + 0x48]
movzx eax, ax
cmp ecx, eax
jge 0x524283
mov byte [esp + 0x24], 0
mov ebp, dword [esp + 0x14]
cmp byte [esp + 0x30], 0
je 0x52438e
mov byte [esp + 0x24], 1
jmp 0x524399
mov esi, dword [esp + 0x80]
cmp word [esp + 0x70], 0
mov ebx, dword [esp + 0x1c]
je 0x5242ba
mov ecx, dword [esp + 0x2c]
lea eax, [ebx + 1]
mov word [ecx + 0x1e], ax
test byte [esp + 0xb0], 0x40
jne 0x52431f
mov ecx, dword [esp + 0xa8]
lea eax, [edi + edi*4]
mov al, byte [ecx + eax*4 + 0x10]
and al, 1
cmp byte [esp + 0x2b], 0
je 0x5242e9
mov cl, byte [esp + 0x23]
xor cl, byte [esp + 0x2a]
cmp cl, al
jne 0x52426b
jmp 0x52431f
mov dh, al
xor dh, byte [esp + 0x23]
mov byte [esp + 0x2a], dh
je 0x52431a
mov eax, dword [esp + 0x60]
xor ecx, ecx
bts ecx, eax
xor edx, edx
cmp eax, 0x20
cmovae edx, ecx
xor ecx, edx
cmp eax, 0x40
mov eax, dword [esp + 0xbc]
cmovae edx, ecx
or dword [eax], ecx
or dword [eax + 4], edx
mov byte [esp + 0x2b], 1
mov ecx, dword [esp + 0xa8]
lea eax, [edi + edi*4]
test byte [ecx + eax*4 + 0x10], 2
je 0x524347
mov ecx, dword [esp + 0x2c]
movzx eax, word [ecx + 0x18]
cmp ebx, eax
jne 0x52426b
or dword [ecx + 0x2c], 0x80000
mov eax, dword [esp + 0x30]
cmp ebp, 0xffffffff
mov ebp, dword [esp + 0x14]
mov ecx, 1
movzx eax, al
cmove eax, ecx
or dword [esp + 0x18], esi
or ebp, dword [esp + 0x78]
mov dword [esp + 0x30], eax
mov dword [esp + 0x14], ebp
mov edi, dword [esp + 0x1c]
add dword [esp + 0x54], 0x14
inc edi
mov dword [esp + 0x1c], edi
cmp edi, dword [esp + 0x3c]
jge 0x524287
mov ebx, dword [esp + 0x2c]
jmp 0x523ff0
cmp byte [esp + 0x24], 0
je 0x524534
mov ecx, dword [esp + 0x2c]
xor ebp, ebp
mov eax, dword [esp + 0x58]
or eax, dword [ecx + 8]
mov dword [esp + 0x58], eax
mov eax, dword [esp + 0x5c]
or eax, dword [ecx + 0xc]
mov dword [esp + 0x5c], eax
cmp word [esp + 0x38], bp
je 0x5244f3
mov esi, dword [esp + 0xa8]
add esi, 8
mov dword [esp + 0x30], esi
nop
xor edx, edx
xor ecx, ecx
mov eax, ebp
bts edx, eax
cmp eax, 0x20
cmovae ecx, edx
xor edx, ecx
cmp eax, 0x40
cmovae ecx, edx
and edx, dword [esp + 0x18]
and ecx, dword [esp + 0x14]
or edx, ecx
jne 0x5244d6
mov ecx, dword [esp + 0xa4]
mov esi, dword [esi]
add ecx, 0x1f0
test esi, esi
je 0x524440
cmp byte [esi], 0xa7
jne 0x524427
test byte [esi + 4], 0x20
jne 0x524427
push dword [esi + 0x1c]
push ecx
call fcn.00511800
add esp, 8
mov edi, eax
mov ebx, edx
jmp 0x524451
test dword [esi + 4], 0x810000
jne 0x524440
push esi
push ecx
call fcn.00511600
add esp, 8
mov edi, eax
mov ebx, edx
jmp 0x524451
xorps xmm0, xmm0
movlpd qword [esp + 0x3c], xmm0
mov edi, dword [esp + 0x3c]
mov ebx, dword [esp + 0x40]
mov eax, edi
or eax, ebx
jne 0x5244a5
mov dword [esp + 0x88], fcn.004a9390
mov eax, 1
mov word [esp + 0x98], ax
mov dword [esp + 0x8c], 0x4f7980
mov dword [esp + 0x9c], 0
test esi, esi
je 0x5244a5
lea eax, [esp + 0x84]
push esi
push eax
call fcn.0050c9c0
add esp, 8
cmp word [esp + 0x98], 0
je 0x5244d6
mov ecx, dword [esp + 0x58]
mov eax, dword [esp + 0x5c]
not ecx
not eax
and ecx, edi
and eax, ebx
or ecx, eax
jne 0x5244d6
mov eax, ebp
xor edx, edx
bts ecx, eax
cmp eax, 0x20
cmovae edx, ecx
xor ecx, edx
cmp eax, 0x40
cmovae edx, ecx
or dword [esp + 0x18], ecx
or dword [esp + 0x14], edx
mov ecx, dword [esp + 0x38]
inc ebp
add dword [esp + 0x30], 0x14
mov esi, dword [esp + 0x30]
movzx eax, cx
cmp ebp, eax
jl 0x5243d0
mov ecx, dword [esp + 0x2c]
mov ebp, dword [esp + 0x14]
mov esi, dword [esp + 0x18]
mov edx, dword [esp + 0x24]
mov ebx, dword [esp + 0x60]
mov edi, dword [esp + 0xa4]
inc ebx
mov dword [esp + 0x60], ebx
test dl, dl
jne 0x523d10
mov eax, dword [esp + 0x68]
cmp esi, dword [esp + 0x6c]
jne 0x52454c
cmp ebp, eax
jne 0x52454c
mov al, byte [esp + 0x38]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x90
ret
mov ecx, dword [esp + 0x2c]
jmp 0x5244f7
cmp byte [ebx + 0x20], 0
je 0x52454c
and eax, 0x280
cmp eax, 0x80
jne 0x524525
test dl, dl
jne 0x5245bd
mov eax, dword [esp + 0x38]
movzx ebx, ax
dec ebx
test ebx, ebx
jle 0x5245ca
nop dword [eax]
cmp ebx, 0x40
jge 0x524584
xor ecx, ecx
xor edx, edx
mov eax, ebx
bts ecx, eax
cmp eax, 0x20
cmovae edx, ecx
xor ecx, edx
cmp eax, 0x40
cmovae edx, ecx
add ecx, 0xffffffff
adc edx, 0xffffffff
jmp 0x524595
xorps xmm0, xmm0
movlpd qword [esp + 0x3c], xmm0
mov edx, dword [esp + 0x40]
mov ecx, dword [esp + 0x3c]
mov eax, ecx
and eax, esi
mov esi, edx
and esi, ebp
cmp eax, ecx
jne 0x5245a5
cmp esi, edx
je 0x5245b0
dec ebx
test ebx, ebx
jle 0x5245ca
mov esi, dword [esp + 0x18]
jmp 0x524560
pop edi
pop esi
pop ebp
mov al, bl
pop ebx
add esp, 0x90
ret
pop edi
pop esi
pop ebp
or al, 0xff
pop ebx
add esp, 0x90
ret
pop edi
pop esi
pop ebp
xor al, al
pop ebx
add esp, 0x90
ret