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

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x1f8
mov eax, dword [ebp + 0x1c]
mov dword [esp + 0x30], edx
mov dword [esp + 0x60], ecx
mov edi, dword [ebp + 0x18]
mov esi, dword [ebp + 0x14]
mov ebx, dword [ebp + 0xc]
mov dword [esp + 0x34], eax
mov eax, dword [0x4b9170]
xor eax, ebp
mov dword [esp + 0x1f0], eax
mov eax, dword [ebp + 0x10]
mov dword [esp + 0xc], eax
lea eax, [esp + 0x70]
push 0x180
push 0xff
push eax
call fcn.0047b380
add esp, 0xc
mov eax, 0xfffffe80
xor ecx, ecx
mov dword [esp + eax + 0x1f4], ecx
mov dword [esp + eax + 0x1f0], ecx
mov dword [esp + eax + 0x1fc], ecx
mov dword [esp + eax + 0x1f8], ecx
add eax, 0x18
jne 0x405170
mov eax, edi
mov dword [esp + 0x1c], esi
sub eax, dword [ebp + 0x10]
test eax, 0xff00
je 0x4051b0
movzx eax, ah
mov edx, dword [eax*4 + 0x49e59c]
add edx, 8
jmp 0x4051ba
movzx eax, al
mov edx, dword [eax*4 + 0x49e59c]
mov eax, dword [esp + 0x60]
mov dword [esp + 0x3c], 0
mov dword [esp + 8], ebx
add eax, 2
mov dword [esp + 0x64], eax
mov eax, edi
mov ebx, eax
mov dword [esp + 0x2c], eax
sub ebx, dword [esp + 0xc]
cmp ebx, 8
jg 0x405475
mov edi, dword [esp + 0x1c]
cmp ebx, 2
jl 0x4051fc
mov eax, dword [esp + 0x2c]
lea ebx, [eax - 2]
cmp ebx, dword [esp + 0xc]
jae 0x40523f
mov eax, dword [esp + 0x3c]
test eax, eax
je 0x407446
dec eax
mov dword [esp + 0x3c], eax
lea eax, [eax + eax*2]
mov ecx, dword [esp + eax*8 + 0x7c]
mov edx, dword [esp + eax*8 + 0x74]
mov edi, dword [esp + eax*8 + 0x78]
mov ebx, ecx
mov dword [esp + 0x2c], ecx
mov ecx, edx
mov ecx, dword [esp + eax*8 + 0x80]
mov dword [esp + 0xc], edx
sub ebx, edx
cmp ebx, 9
mov dword [esp + 0x34], ecx
jl 0x4051ea
jmp 0x405487
mov eax, dword [esp + 0x34]
mov dword [esp + 0x1c], edi
add eax, dword [esp + 0x60]
mov dword [esp + 0x34], eax
mov edi, dword [edi]
mov eax, ebx
mov ecx, ebx
mov edx, 0x3ffff
mov dword [esp + 0x48], ebx
shr eax, 0x12
and ecx, edx
mov eax, dword [edi + eax*4]
mov ecx, dword [eax + ecx*4]
mov eax, dword [ebp + 8]
lea esi, [ecx + eax]
lea eax, [ecx + eax + 1]
mov dword [esp + 0x50], ecx
mov ecx, eax
and eax, edx
shr ecx, 0x12
mov dword [esp + 0x38], eax
mov dword [esp + 0x44], ecx
mov ecx, esi
and esi, edx
lea edx, [ebx + 1]
shr ecx, 0x12
mov dword [esp + 0x20], esi
mov dword [esp + 0x54], ecx
mov eax, edx
mov ecx, edx
mov ebx, 0x3ffff
mov dword [esp + 0x18], edx
shr eax, 0x12
and ecx, ebx
mov eax, dword [edi + eax*4]
mov eax, dword [eax + ecx*4]
mov ecx, dword [ebp + 8]
lea edx, [eax + ecx + 1]
add eax, ecx
mov ecx, dword [esp + 0x30]
mov esi, edx
and edx, ebx
shr esi, 0x12
mov ebx, dword [ecx]
mov ecx, dword [ebx + esi*4]
mov esi, 0x3ffff
mov dword [esp], ecx
mov ecx, eax
and eax, esi
mov esi, dword [esp + 0x38]
shr ecx, 0x12
mov ecx, dword [ebx + ecx*4]
mov eax, dword [ecx + eax*4]
mov ecx, dword [esp + 0x54]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x44]
mov ecx, dword [ebx + ecx*4]
mov eax, dword [ebx + eax*4]
mov ebx, dword [esp + 0x20]
mov dword [esp + 8], eax
mov eax, dword [esp]
mov ecx, dword [ecx + ebx*4]
mov ebx, dword [eax + edx*4]
mov eax, dword [esp + 0x34]
mov dword [esp], ecx
lea ecx, [eax + ecx]
mov dword [esp + 4], ecx
mov ecx, dword [esp + 8]
mov edx, dword [ecx + esi*4]
mov ecx, dword [esp + 0x64]
mov esi, dword [esp + 0x10]
add edx, ecx
add ebx, ecx
lea ecx, [eax + esi]
cmp dword [esp + 4], edx
mov dword [esp + 8], ebx
mov dword [esp + 0x28], ecx
setb byte [esp + 0x24]
cmp ecx, ebx
setb ah
jae 0x40538e
mov ebx, dword [esp + 4]
cmp ebx, edx
jae 0x405392
mov ecx, dword [esp + 0x34]
mov dword [esp + 0x14], edi
mov ebx, dword [esp]
mov ah, byte [ecx + esi]
mov al, byte [ecx + ebx]
cmp al, ah
jne 0x4053ae
lea ebx, [ecx + ebx + 1]
lea edi, [ecx + esi + 1]
cmp ebx, edx
setb al
inc ecx
cmp edi, dword [esp + 8]
mov edi, dword [esp + 0x14]
setb ah
jae 0x40537d
cmp ebx, edx
jb 0x405351
mov ebx, dword [esp]
add esi, ecx
mov byte [esp + 0x24], al
mov dword [esp + 0x28], esi
add ebx, ecx
jmp 0x405392
mov ebx, dword [esp + 4]
cmp byte [esp + 0x24], 0
je 0x405462
test ah, ah
mov ecx, 1
je 0x4053bc
mov ecx, dword [esp + 0x28]
mov al, byte [ebx]
mov ah, byte [ecx]
movzx ecx, al
movzx eax, ah
sub ecx, eax
jle 0x405467
mov eax, dword [esp + 0x18]
mov dword [esp], ecx
mov edx, eax
mov esi, eax
mov ecx, 0x3ffff
shr edx, 0x12
and esi, ecx
mov edx, dword [edi + edx*4]
mov edx, dword [edx + esi*4]
lea esi, [eax - 1]
mov ebx, esi
and esi, ecx
shr ebx, 0x12
mov edi, dword [edi + ebx*4]
mov dword [edi + esi*4], edx
lea edx, [eax + 1]
cmp edx, dword [esp + 0x2c]
jae 0x405413
mov ecx, dword [esp + 0x1c]
mov eax, edx
mov esi, edx
shr eax, 0x12
and esi, 0x3ffff
mov edi, dword [ecx]
mov eax, dword [edi + eax*4]
cmp dword [eax + esi*4], 0
mov eax, edx
js 0x4053c3
jmp 0x405298
mov edi, dword [esp + 0x1c]
mov ebx, dword [esp + 0x48]
mov ecx, dword [esp]
inc eax
mov edx, eax
test ecx, ecx
jne 0x40543a
mov esi, dword [edi]
mov eax, edx
mov ecx, edx
shr eax, 0x12
and ecx, 0x3ffff
mov eax, dword [esi + eax*4]
not dword [eax + ecx*4]
mov ecx, dword [edi]
dec edx
dec ebx
mov esi, dword [esp + 0x50]
mov eax, edx
and edx, 0x3ffff
shr eax, 0x12
cmp ebx, dword [esp + 0xc]
mov eax, dword [ecx + eax*4]
mov dword [eax + edx*4], esi
jae 0x40524f
jmp 0x4051fc
movzx ecx, ah
neg ecx
mov edi, dword [esp + 0x1c]
mov ebx, dword [esp + 0x48]
mov edx, dword [esp + 0x18]
jmp 0x405421
mov dword [esp + 0x40], ebx
mov ecx, dword [esp + 0x34]
mov edi, dword [esp + 0x1c]
mov ebx, dword [esp + 0x30]
jmp 0x4054a2
mov ecx, dword [esp + eax*8 + 0x70]
mov dword [esp + 0x40], ebx
mov edx, dword [esp + eax*8 + 0x84]
mov ebx, dword [esp + 0x30]
mov dword [esp + 8], ecx
mov ecx, dword [esp + 0x34]
mov dword [esp + 0x5c], edx
mov eax, dword [esp + 0x60]
mov dword [esp + 0x1c], edi
mov edi, dword [esp + 0xc]
sub edx, 1
mov dword [esp + 0x34], ecx
mov dword [esp + 0x4c], edx
lea eax, [eax + ecx]
mov dword [esp + 0x14], eax
jae 0x405ad3
mov eax, dword [esp + 0x40]
test al, 1
jne 0x405590
mov ecx, dword [esp + 0x40]
mov edx, 0x3ffff
lea eax, [ecx - 1]
mov dword [esp + 0x10], eax
shr eax, 0x1f
lea eax, [ecx + eax - 1]
sar eax, 1
add eax, edi
mov ecx, eax
and eax, edx
mov edx, dword [esp + 8]
shr ecx, 0x12
mov edi, dword [edx]
mov edx, dword [edi + ecx*4]
mov esi, dword [edx + eax*4]
mov edx, dword [ebp + 8]
mov dword [esp + 4], esi
add esi, edx
mov edx, 0x3ffff
mov ebx, esi
and esi, edx
mov edx, dword [esp + 0x30]
shr ebx, 0x12
mov edx, dword [edx]
mov ebx, dword [edx + ebx*4]
mov esi, dword [ebx + esi*4]
mov dword [esp], esi
mov esi, dword [esp + 0x2c]
dec esi
mov ebx, esi
shr ebx, 0x12
mov ebx, dword [edi + ebx*4]
mov edi, 0x3ffff
and esi, edi
mov edi, dword [ebp + 8]
mov dword [esp + 0x24], ebx
mov ebx, dword [ebx + esi*4]
mov dword [esp + 0x18], ebx
add ebx, edi
mov edi, ebx
shr edi, 0x12
mov edx, dword [edx + edi*4]
mov edi, 0x3ffff
and ebx, edi
mov edi, dword [esp + 0x14]
mov edx, dword [edx + ebx*4]
mov ebx, dword [esp]
mov bl, byte [edi + ebx]
cmp bl, byte [edi + edx]
jae 0x405588
mov edx, dword [esp + 4]
mov edi, dword [esp + 0x24]
mov dword [edi + esi*4], edx
mov edx, dword [esp + 8]
mov esi, dword [esp + 0x18]
mov edx, dword [edx]
mov ecx, dword [edx + ecx*4]
mov dword [ecx + eax*4], esi
mov edi, dword [esp + 0xc]
mov eax, dword [esp + 0x10]
mov dword [esp + 0x10], eax
shr eax, 1
mov dword [esp + 0x20], eax
mov ecx, dword [esp + 8]
mov ebx, dword [esp + 0x20]
mov esi, 0x3ffff
mov ecx, dword [ecx]
lea eax, [ebx + edi - 1]
lea edi, [ebx + ebx - 1]
mov dword [esp + 0x44], ebx
dec ebx
mov edx, eax
and eax, esi
mov dword [esp + 0x20], ebx
shr edx, 0x12
cmp edi, dword [esp + 0x10]
mov dword [esp + 4], ecx
mov ecx, dword [ecx + edx*4]
mov ecx, dword [ecx + eax*4]
mov dword [esp + 0x38], ecx
jge 0x40570d
mov eax, dword [ebp + 8]
mov dword [esp + 0x18], ebx
mov ebx, dword [esp + 4]
add ecx, eax
mov eax, dword [esp + 0x30]
mov edx, ecx
and ecx, esi
shr edx, 0x12
mov eax, dword [eax]
mov edx, dword [eax + edx*4]
mov dword [esp], eax
mov eax, dword [esp + 0x14]
mov ecx, dword [edx + ecx*4]
mov al, byte [eax + ecx]
mov byte [esp + 0x28], al
mov esi, dword [esp + 0xc]
mov dword [esp + 4], edi
mov eax, dword [ebp + 8]
lea ecx, [edi + esi]
mov edi, 0x3ffff
mov edx, ecx
and ecx, edi
shr edx, 0x12
mov edx, dword [ebx + edx*4]
mov ecx, dword [edx + ecx*4]
add ecx, eax
mov eax, dword [esp]
mov edx, ecx
and ecx, edi
mov edi, 0x3ffff
shr edx, 0x12
mov edx, dword [eax + edx*4]
mov eax, dword [edx + ecx*4]
mov edx, dword [esp + 4]
lea ecx, [edx + esi + 1]
mov dword [esp + 0x24], eax
mov eax, ecx
and ecx, edi
mov edi, dword [esp]
shr eax, 0x12
mov eax, dword [ebx + eax*4]
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
shr ecx, 0x12
mov ecx, dword [edi + ecx*4]
mov edi, 0x3ffff
and eax, edi
mov edi, ebx
mov eax, dword [ecx + eax*4]
lea ecx, [edx + 1]
mov dword [esp], eax
mov eax, dword [esp + 0x14]
mov edx, dword [esp]
mov ebx, eax
mov eax, dword [esp + 0x24]
movzx edx, byte [ebx + edx]
movzx eax, byte [ebx + eax]
cmp al, dl
cmovb eax, edx
cmovae ecx, dword [esp + 4]
cmp al, byte [esp + 0x28]
jbe 0x4056f3
lea eax, [ecx + esi]
mov ebx, 0x3ffff
mov edx, eax
and eax, ebx
mov ebx, dword [esp + 0x18]
shr edx, 0x12
add ebx, esi
mov esi, ebx
shr esi, 0x12
mov esi, dword [edi + esi*4]
mov edi, dword [edi + edx*4]
mov dword [esp], esi
mov esi, 0x3ffff
mov edi, dword [edi + eax*4]
and ebx, esi
mov esi, dword [esp]
mov dword [esi + ebx*4], edi
mov ebx, dword [esp + 8]
lea esi, [ecx + ecx + 1]
cmp esi, dword [esp + 0x10]
mov ebx, dword [ebx]
jge 0x405709
mov eax, dword [esp + 0x30]
mov edi, esi
mov dword [esp + 0x18], ecx
mov eax, dword [eax]
mov dword [esp], eax
jmp 0x405607
mov eax, dword [esp + 0x18]
mov dword [esp + 4], edi
add eax, esi
mov edx, eax
and eax, 0x3ffff
shr edx, 0x12
jmp 0x40570d
mov dword [esp + 4], ebx
mov ecx, dword [esp + 4]
mov edi, dword [esp + 0x38]
mov esi, dword [esp + 0x44]
mov ecx, dword [ecx + edx*4]
cmp esi, 1
mov dword [ecx + eax*4], edi
mov edi, dword [esp + 0xc]
jg 0x40559a
mov edx, edi
mov eax, edi
shr edx, 0x12
and eax, 0x3ffff
test byte [esp + 0x40], 1
mov dword [esp + 0x58], eax
mov dword [esp + 0x20], edx
jne 0x4058e6
mov esi, dword [esp + 8]
mov ecx, dword [esp + 0x58]
mov dword [esp + 0x24], 0
mov eax, dword [esi]
mov dword [esp + 4], eax
mov eax, dword [eax + edx*4]
mov edx, esi
mov esi, dword [esp + 0x10]
mov ebx, dword [eax + ecx*4]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 4]
add esi, edi
mov edi, esi
shr edi, 0x12
mov eax, dword [eax + edi*4]
mov dword [esp], ebx
mov ebx, 0x3ffff
and esi, ebx
mov ebx, dword [esp + 0x18]
mov eax, dword [eax + esi*4]
mov dword [ebx + ecx*4], eax
mov eax, dword [edx]
mov eax, dword [eax + edi*4]
mov edi, dword [esp]
mov dword [eax + esi*4], edi
mov eax, dword [esp + 0x20]
mov edx, dword [edx]
mov eax, dword [edx + eax*4]
mov ecx, dword [eax + ecx*4]
mov eax, dword [ebp + 8]
mov dword [esp + 0x38], ecx
add ecx, eax
mov eax, 0x3ffff
mov esi, ecx
and ecx, eax
mov eax, dword [esp + 0x30]
shr esi, 0x12
xor edi, edi
inc edi
mov eax, dword [eax]
mov esi, dword [eax + esi*4]
mov dword [esp], eax
mov eax, dword [esp + 0x14]
mov ecx, dword [esi + ecx*4]
mov al, byte [eax + ecx]
mov byte [esp + 0x28], al
mov ebx, dword [esp + 0xc]
mov eax, 0x3ffff
mov dword [esp + 4], edx
lea ecx, [edi + ebx]
mov esi, ecx
and ecx, eax
mov eax, dword [ebp + 8]
shr esi, 0x12
mov esi, dword [edx + esi*4]
mov ecx, dword [esi + ecx*4]
add ecx, eax
mov eax, 0x3ffff
mov esi, ecx
and ecx, eax
mov eax, dword [esp]
shr esi, 0x12
mov esi, dword [eax + esi*4]
mov eax, dword [esi + ecx*4]
lea ecx, [edi + ebx + 1]
mov esi, 0x3ffff
mov dword [esp + 0x18], eax
mov eax, ecx
and ecx, esi
shr eax, 0x12
mov eax, dword [edx + eax*4]
mov edx, dword [esp]
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
and eax, esi
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov edx, dword [esp + 0x14]
mov esi, dword [ecx + eax*4]
mov eax, dword [esp + 0x18]
lea ecx, [edi + 1]
movzx eax, byte [edx + eax]
movzx edx, byte [edx + esi]
cmp al, dl
cmovb eax, edx
cmovae ecx, edi
cmp al, byte [esp + 0x28]
jbe 0x4058be
mov edx, dword [esp + 0xc]
mov ebx, dword [esp + 0x24]
mov edi, 0x3ffff
lea eax, [ecx + edx]
add ebx, edx
mov esi, eax
and eax, edi
mov edi, dword [esp + 4]
mov edx, ebx
shr edx, 0x12
shr esi, 0x12
mov edx, dword [edi + edx*4]
mov edi, dword [edi + esi*4]
mov dword [esp], edx
mov edx, 0x3ffff
mov edi, dword [edi + eax*4]
and ebx, edx
mov edx, dword [esp]
mov dword [edx + ebx*4], edi
mov edx, dword [esp + 8]
lea edi, [ecx + ecx + 1]
cmp edi, dword [esp + 0x10]
mov edx, dword [edx]
jge 0x4058d8
mov eax, dword [esp + 0x30]
mov dword [esp + 0x24], ecx
mov eax, dword [eax]
mov dword [esp], eax
jmp 0x4057dc
mov eax, dword [esp + 0x24]
mov edi, dword [esp + 0xc]
mov edx, dword [esp + 4]
add eax, edi
mov esi, eax
and eax, 0x3ffff
shr esi, 0x12
jmp 0x4058dc
mov edi, dword [esp + 0xc]
mov ecx, dword [edx + esi*4]
mov esi, dword [esp + 0x38]
mov dword [ecx + eax*4], esi
mov ecx, dword [esp + 0x10]
mov eax, dword [esp + 8]
mov edx, ecx
mov esi, dword [esp + 0x58]
mov dword [esp + 0x38], edx
mov ebx, dword [eax]
mov eax, dword [esp + 0x20]
mov ecx, dword [ebx + eax*4]
mov eax, 0x3ffff
mov dword [esp], ecx
lea ecx, [edx + edi - 1]
mov edi, ecx
and ecx, eax
shr edi, 0x12
mov dword [esp + 0x44], ecx
cmp edx, 2
mov eax, dword [ebx + edi*4]
mov dword [esp + 0x48], edi
mov edi, dword [esp]
mov eax, dword [eax + ecx*4]
mov ecx, dword [edi + esi*4]
mov dword [edi + esi*4], eax
mov eax, dword [esp + 8]
mov dword [esp + 0x54], ecx
mov ecx, dword [esp + 0x20]
mov eax, dword [eax]
mov dword [esp], eax
mov eax, dword [eax + ecx*4]
lea ecx, [edx - 1]
mov edi, dword [eax + esi*4]
mov dword [esp + 0x50], edi
jne 0x40595b
mov eax, dword [esp + 0x20]
mov edi, dword [esp + 0xc]
jmp 0x405a9f
mov eax, dword [ebp + 8]
mov edx, 0x3ffff
mov dword [esp + 0x10], ecx
mov dword [esp + 4], 0
add eax, edi
mov ecx, eax
and eax, edx
mov edx, dword [esp + 0x30]
shr ecx, 0x12
xor edi, edi
inc edi
mov esi, dword [edx]
mov edx, dword [esp + 0x14]
mov ecx, dword [esi + ecx*4]
mov ebx, esi
mov eax, dword [ecx + eax*4]
mov al, byte [edx + eax]
mov byte [esp + 0x28], al
mov esi, dword [esp + 0xc]
mov edx, 0x3ffff
mov dword [esp + 0x24], ebx
lea eax, [edi + esi]
mov ecx, eax
and eax, edx
mov edx, dword [esp]
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov edx, 0x3ffff
mov eax, dword [ecx + eax*4]
mov ecx, dword [ebp + 8]
add eax, ecx
mov ecx, eax
and eax, edx
shr ecx, 0x12
mov ecx, dword [ebx + ecx*4]
mov ebx, dword [esp + 0x14]
mov eax, dword [ecx + eax*4]
lea ecx, [edi + esi + 1]
mov esi, ecx
shr esi, 0x12
mov dword [esp + 0x18], eax
mov eax, 0x3ffff
and ecx, eax
mov eax, dword [esp]
mov esi, dword [eax + esi*4]
mov eax, dword [esp + 0x24]
mov ecx, dword [esi + ecx*4]
add ecx, dword [ebp + 8]
mov esi, ecx
shr esi, 0x12
mov esi, dword [eax + esi*4]
mov eax, 0x3ffff
and ecx, eax
mov eax, dword [esp + 0x18]
mov esi, dword [esi + ecx*4]
lea ecx, [edi + 1]
movzx eax, byte [ebx + eax]
movzx ebx, byte [ebx + esi]
cmp al, bl
cmovb eax, ebx
cmovae ecx, edi
cmp al, byte [esp + 0x28]
jbe 0x405a80
mov edi, dword [esp + 0xc]
mov edx, 0x3ffff
mov ebx, dword [esp]
lea esi, [ecx + edi]
mov eax, esi
and esi, edx
mov edx, dword [esp + 4]
shr eax, 0x12
add edx, edi
mov edi, edx
shr edi, 0x12
mov edi, dword [ebx + edi*4]
mov ebx, dword [ebx + eax*4]
mov dword [esp + 4], edi
mov edi, 0x3ffff
mov ebx, dword [ebx + esi*4]
and edx, edi
mov edi, dword [esp + 4]
mov dword [edi + edx*4], ebx
mov edx, dword [esp + 8]
lea edi, [ecx + ecx + 1]
cmp edi, dword [esp + 0x10]
mov edx, dword [edx]
mov dword [esp], edx
jge 0x405a97
mov eax, dword [esp + 0x30]
mov dword [esp + 4], ecx
mov ebx, dword [eax]
jmp 0x405994
mov esi, dword [esp + 4]
mov edi, dword [esp + 0xc]
add esi, edi
mov eax, esi
and esi, 0x3ffff
shr eax, 0x12
jmp 0x405a9b
mov edi, dword [esp + 0xc]
mov ecx, dword [esp + 0x10]
mov ebx, dword [esp]
mov edx, dword [esp + 0x48]
cmp dword [esp + 0x38], 2
mov eax, dword [ebx + eax*4]
mov ebx, dword [esp + 0x50]
mov dword [eax + esi*4], ebx
mov eax, dword [esp + 8]
mov esi, dword [esp + 0x44]
mov ebx, dword [esp + 0x54]
mov eax, dword [eax]
mov eax, dword [eax + edx*4]
mov dword [eax + esi*4], ebx
mov ebx, dword [esp + 0x30]
jg 0x4058ea
cmp dword [esp + 0x5c], 0
jle 0x405c6a
mov edx, edi
mov edi, dword [esp + 0x40]
mov eax, edi
shr eax, 0x1f
add eax, edi
sar eax, 1
add eax, edx
cmp edi, 0x200
mov dword [esp + 0x10], eax
jg 0x405d3f
cmp edi, 0x20
mov ecx, 0x3ffff
jg 0x406254
mov edi, edx
mov eax, edx
mov ecx, ebx
mov edx, 0x3ffff
mov ebx, edi
shr eax, 0x12
mov ecx, dword [ecx]
and ebx, edx
mov edx, dword [esp + 8]
mov dword [esp + 0x54], eax
mov dword [esp + 0x44], ebx
mov dword [esp], ecx
mov edx, dword [edx]
mov eax, dword [edx + eax*4]
mov dword [esp + 4], edx
mov edx, 0x3ffff
mov ebx, dword [eax + ebx*4]
mov dword [esp + 0x24], eax
mov eax, dword [ebp + 8]
lea eax, [ebx + eax]
mov dword [esp + 0x18], ebx
mov ebx, edi
mov esi, eax
and eax, edx
mov edx, dword [esp + 0x10]
shr esi, 0x12
mov esi, dword [ecx + esi*4]
mov edi, edx
mov eax, dword [esi + eax*4]
mov esi, edx
shr esi, 0x12
mov dword [esp + 0x28], eax
mov eax, 0x3ffff
and edi, eax
mov eax, dword [esp + 4]
mov esi, dword [eax + esi*4]
mov eax, 0x3ffff
mov esi, dword [esi + edi*4]
add esi, dword [ebp + 8]
mov edi, esi
and esi, eax
mov eax, dword [esp + 0x28]
shr edi, 0x12
mov edi, dword [ecx + edi*4]
mov ecx, dword [esp + 0x14]
mov esi, dword [edi + esi*4]
mov al, byte [ecx + eax]
cmp al, byte [ecx + esi]
mov eax, edx
mov ecx, dword [esp + 4]
cmova eax, ebx
cmovbe edx, ebx
mov esi, eax
mov dword [esp + 0x10], edx
mov edi, eax
mov edx, 0x3ffff
shr esi, 0x12
and edi, edx
mov esi, dword [ecx + esi*4]
mov ecx, dword [ebp + 8]
mov esi, dword [esi + edi*4]
add esi, ecx
mov ecx, dword [esp]
mov edi, esi
and esi, edx
shr edi, 0x12
mov edi, dword [ecx + edi*4]
mov esi, dword [edi + esi*4]
mov edi, dword [esp + 0x1c]
mov dword [esp + 0x28], esi
mov esi, dword [esp + 0x2c]
mov edi, dword [edi]
dec esi
mov ebx, esi
shr ebx, 0x12
mov edi, dword [edi + ebx*4]
mov ebx, esi
and ebx, edx
mov edx, 0x3ffff
mov edi, dword [edi + ebx*4]
add edi, dword [ebp + 8]
mov ebx, edi
and edi, edx
mov edx, dword [esp + 0x28]
shr ebx, 0x12
mov ebx, dword [ecx + ebx*4]
mov ecx, dword [esp + 0x14]
mov edi, dword [ebx + edi*4]
mov bl, byte [ecx + edi]
cmp byte [ecx + edx], bl
jbe 0x406240
mov edx, dword [esp + 0x10]
mov ecx, dword [esp + 4]
mov edi, 0x3ffff
mov eax, edx
shr eax, 0x12
mov eax, dword [ecx + eax*4]
mov ecx, edx
and ecx, edi
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
and eax, edi
mov edi, dword [esp]
shr ecx, 0x12
mov ecx, dword [edi + ecx*4]
mov edi, dword [esp + 0x14]
mov eax, dword [ecx + eax*4]
cmp byte [edi + eax], bl
cmova esi, edx
mov edx, dword [esp + 0x1c]
mov eax, esi
cmova edx, dword [esp + 8]
jmp 0x4065c0
mov esi, dword [esp + 8]
mov eax, edi
mov ecx, edi
mov edx, 0x3ffff
shr eax, 0x12
and ecx, edx
mov esi, dword [esi]
mov eax, dword [esi + eax*4]
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
and eax, edx
mov edx, dword [ebx]
lea ebx, [edi + 1]
shr ecx, 0x12
cmp dword [esp + 0x2c], ebx
mov ecx, dword [edx + ecx*4]
mov dword [esp + 4], edx
mov eax, dword [ecx + eax*4]
mov ecx, dword [esp + 0x14]
movzx ecx, byte [ecx + eax]
jbe 0x406249
mov edi, dword [esp + 8]
mov dword [esp + 0x10], esi
mov dword [esp], ecx
mov ecx, dword [esp + 0x10]
mov eax, ebx
mov edx, ebx
mov esi, 0x3ffff
shr eax, 0x12
and edx, esi
mov eax, dword [ecx + eax*4]
mov ecx, dword [esp + 4]
mov eax, dword [eax + edx*4]
add eax, dword [ebp + 8]
mov edx, eax
and eax, esi
shr edx, 0x12
mov edx, dword [ecx + edx*4]
mov eax, dword [edx + eax*4]
mov edx, dword [esp + 0x14]
movzx edx, byte [edx + eax]
cmp dword [esp], edx
jne 0x405cfe
mov esi, dword [esp + 0xc]
mov edx, dword [esp]
mov eax, edi
jmp 0x405d1c
mov dword [esp + 0x18], edi
mov edi, dword [esp + 0xc]
mov eax, ebx
mov ecx, dword [esp]
mov esi, ebx
sub eax, edi
cmp eax, 1
mov eax, dword [esp + 8]
jg 0x406889
inc ebx
mov edi, esi
mov edi, eax
mov dword [esp], edx
mov dword [esp + 0xc], esi
cmp dword [esp + 0x2c], ebx
jne 0x405cba
mov ecx, edx
mov edx, dword [esp + 0x2c]
mov edi, eax
mov dword [esp + 0xc], edx
jmp 0x406893
mov ecx, edx
mov esi, 0x3ffff
mov eax, edx
shr edi, 3
and ecx, esi
mov esi, dword [esp + 8]
shr eax, 0x12
mov dword [esp + 0x40], edi
mov dword [esp + 0x54], eax
mov dword [esp + 0x44], ecx
mov esi, dword [esi]
mov eax, dword [esi + eax*4]
mov dword [esp + 4], esi
mov esi, 0x3ffff
mov ecx, dword [eax + ecx*4]
mov dword [esp + 0x24], eax
mov eax, dword [ebp + 8]
add eax, ecx
mov dword [esp + 0x18], ecx
mov ecx, eax
and eax, esi
mov esi, dword [ebx]
lea ebx, [edi + edx]
mov edx, dword [esp + 4]
shr ecx, 0x12
mov edi, ebx
mov ecx, dword [esi + ecx*4]
mov dword [esp], esi
mov esi, ebx
shr esi, 0x12
mov esi, dword [edx + esi*4]
mov ecx, dword [ecx + eax*4]
mov eax, 0x3ffff
and edi, eax
mov esi, dword [esi + edi*4]
add esi, dword [ebp + 8]
mov edi, esi
and esi, eax
mov eax, dword [esp]
shr edi, 0x12
mov edi, dword [eax + edi*4]
mov eax, dword [esp + 0x14]
mov esi, dword [edi + esi*4]
mov cl, byte [eax + ecx]
mov edi, dword [esp + 0xc]
cmp cl, byte [eax + esi]
mov esi, ebx
cmova esi, edi
cmovbe ebx, edi
mov ecx, esi
mov dword [esp + 0x20], ebx
mov ebx, 0x3ffff
mov dword [esp + 0x28], esi
shr ecx, 0x12
and esi, ebx
mov ecx, dword [edx + ecx*4]
mov edx, dword [ebp + 8]
mov ecx, dword [ecx + esi*4]
add ecx, edx
mov edx, dword [esp]
mov esi, ecx
and ecx, ebx
shr esi, 0x12
mov esi, dword [edx + esi*4]
mov edx, 0x3ffff
mov esi, dword [esi + ecx*4]
mov ecx, dword [esp + 0x40]
lea ecx, [edi + ecx*2]
mov ebx, ecx
mov edi, ecx
and ebx, edx
mov edx, dword [esp + 4]
shr edi, 0x12
mov edi, dword [edx + edi*4]
mov edx, 0x3ffff
mov edi, dword [edi + ebx*4]
add edi, dword [ebp + 8]
mov ebx, edi
and edi, edx
mov edx, dword [esp]
shr ebx, 0x12
mov ebx, dword [edx + ebx*4]
mov edi, dword [ebx + edi*4]
mov bl, byte [eax + edi]
cmp byte [eax + esi], bl
jbe 0x405e7f
mov edi, dword [esp + 0x20]
mov edx, dword [esp + 4]
mov eax, 0x3ffff
mov esi, edi
and edi, eax
shr esi, 0x12
mov esi, dword [edx + esi*4]
mov esi, dword [esi + edi*4]
add esi, dword [ebp + 8]
mov edi, esi
and esi, eax
mov eax, dword [esp]
shr edi, 0x12
mov edi, dword [eax + edi*4]
mov eax, dword [esp + 0x14]
mov esi, dword [edi + esi*4]
cmp byte [eax + esi], bl
cmova ecx, dword [esp + 0x20]
mov dword [esp + 0x28], ecx
mov edx, dword [esp + 0x10]
mov ebx, 0x3ffff
mov esi, edx
sub esi, dword [esp + 0x40]
mov edi, esi
mov ecx, esi
and edi, ebx
mov ebx, eax
mov eax, dword [esp + 4]
shr ecx, 0x12
mov ecx, dword [eax + ecx*4]
mov eax, esi
mov esi, dword [ebp + 8]
mov ecx, dword [ecx + edi*4]
mov edi, 0x3ffff
add ecx, esi
mov esi, ecx
and ecx, edi
mov edi, dword [esp]
shr esi, 0x12
mov esi, dword [edi + esi*4]
mov edi, edx
mov ecx, dword [esi + ecx*4]
mov esi, edx
shr esi, 0x12
mov cl, byte [ebx + ecx]
mov byte [esp + 0x20], cl
mov ecx, 0x3ffff
and edi, ecx
mov ecx, dword [esp + 4]
mov esi, dword [ecx + esi*4]
mov ecx, 0x3ffff
mov esi, dword [esi + edi*4]
add esi, dword [ebp + 8]
mov edi, esi
and esi, ecx
mov ecx, dword [esp]
shr edi, 0x12
mov edi, dword [ecx + edi*4]
mov cl, byte [esp + 0x20]
mov esi, dword [edi + esi*4]
mov edi, edx
cmp cl, byte [ebx + esi]
mov esi, dword [esp + 0x40]
mov ebx, 0x3ffff
mov ecx, 0x3ffff
cmova edi, eax
cmova eax, edx
add edx, esi
mov dword [esp + 0x38], eax
mov eax, 0x3ffff
mov esi, edi
mov dword [esp + 0x20], edi
and edi, eax
mov eax, dword [esp + 4]
shr esi, 0x12
mov esi, dword [eax + esi*4]
mov esi, dword [esi + edi*4]
mov edi, dword [ebp + 8]
add esi, edi
mov edi, esi
and esi, ebx
mov ebx, dword [esp]
shr edi, 0x12
mov edi, dword [ebx + edi*4]
mov ebx, edx
and ebx, ecx
mov ecx, dword [esp + 0x40]
mov esi, dword [edi + esi*4]
mov edi, edx
shr edi, 0x12
mov edi, dword [eax + edi*4]
mov eax, 0x3ffff
mov edi, dword [edi + ebx*4]
add edi, dword [ebp + 8]
mov ebx, edi
and edi, eax
mov eax, dword [esp]
shr ebx, 0x12
mov ebx, dword [eax + ebx*4]
mov eax, dword [esp + 0x14]
mov edi, dword [ebx + edi*4]
mov bl, byte [eax + edi]
cmp byte [eax + esi], bl
lea esi, [ecx + ecx]
jbe 0x405fcc
mov edi, dword [esp + 0x38]
mov dword [esp + 0x10], esi
mov esi, dword [esp + 4]
mov eax, 0x3ffff
mov ecx, edi
and edi, eax
mov eax, 0x3ffff
shr ecx, 0x12
mov ecx, dword [esi + ecx*4]
mov esi, dword [esp]
mov ecx, dword [ecx + edi*4]
add ecx, dword [ebp + 8]
mov edi, ecx
and ecx, eax
shr edi, 0x12
mov edi, dword [esi + edi*4]
mov esi, dword [esp + 0x14]
mov ecx, dword [edi + ecx*4]
cmp byte [esi + ecx], bl
mov esi, dword [esp + 0x10]
cmova edx, dword [esp + 0x38]
mov dword [esp + 0x20], edx
mov eax, dword [esp + 0x2c]
mov ebx, dword [esp + 0x1c]
dec eax
mov edi, eax
mov ecx, eax
mov dword [esp + 0x38], eax
mov eax, 0x3ffff
sub edi, esi
sub ecx, dword [esp + 0x40]
mov edx, edi
mov esi, edi
and edx, eax
mov eax, dword [ebx]
shr esi, 0x12
mov ebx, 0x3ffff
mov esi, dword [eax + esi*4]
mov dword [esp + 0x50], eax
mov edx, dword [esi + edx*4]
mov esi, dword [ebp + 8]
add edx, esi
mov esi, edx
and edx, ebx
mov ebx, dword [esp]
shr esi, 0x12
mov esi, dword [ebx + esi*4]
mov ebx, ecx
mov edx, dword [esi + edx*4]
mov esi, ecx
shr esi, 0x12
mov esi, dword [eax + esi*4]
mov eax, dword [esp]
mov dword [esp + 0x10], edx
mov edx, 0x3ffff
and ebx, edx
mov edx, 0x3ffff
mov esi, dword [esi + ebx*4]
add esi, dword [ebp + 8]
mov ebx, esi
and esi, edx
mov edx, dword [esp + 0x10]
shr ebx, 0x12
mov ebx, dword [eax + ebx*4]
mov ebx, dword [ebx + esi*4]
mov esi, dword [esp + 0x14]
mov dl, byte [esi + edx]
cmp dl, byte [esi + ebx]
mov edx, ecx
mov ebx, 0x3ffff
cmova edx, edi
cmova edi, ecx
mov dword [esp + 0x58], edi
mov edi, dword [esp + 0x50]
mov ecx, edx
mov dword [esp + 0x48], edx
and edx, ebx
shr ecx, 0x12
mov ecx, dword [edi + ecx*4]
mov ecx, dword [ecx + edx*4]
mov edx, dword [ebp + 8]
add ecx, edx
mov edx, ecx
and ecx, ebx
mov ebx, dword [esp + 0x38]
shr edx, 0x12
mov edx, dword [eax + edx*4]
mov ecx, dword [edx + ecx*4]
mov edx, ebx
shr edx, 0x12
mov edx, dword [edi + edx*4]
mov edi, 0x3ffff
mov dword [esp + 0x10], ecx
mov ecx, 0x3ffff
and ebx, ecx
mov edx, dword [edx + ebx*4]
add edx, dword [ebp + 8]
mov ebx, edx
and edx, edi
shr ebx, 0x12
mov ebx, dword [eax + ebx*4]
mov eax, dword [esp + 0x10]
mov edx, dword [ebx + edx*4]
mov cl, byte [esi + eax]
mov bh, byte [esi + edx]
mov byte [esp + 0x10], cl
cmp cl, bh
jbe 0x40613f
mov esi, dword [esp + 0x58]
mov edi, dword [esp + 0x50]
mov eax, 0x3ffff
mov ecx, esi
mov edx, esi
shr ecx, 0x12
and edx, eax
mov ecx, dword [edi + ecx*4]
mov ecx, dword [ecx + edx*4]
mov edx, dword [ebp + 8]
add ecx, edx
mov edx, ecx
and ecx, eax
mov eax, dword [esp]
shr edx, 0x12
mov edx, dword [eax + edx*4]
mov ecx, dword [edx + ecx*4]
mov edx, dword [esp + 0x14]
cmp byte [edx + ecx], bh
mov ebx, dword [esp + 0x38]
cmova ebx, esi
mov esi, 0x3ffff
mov eax, ebx
mov ecx, ebx
mov dword [esp + 0x48], ebx
shr eax, 0x12
and ecx, esi
mov eax, dword [edi + eax*4]
mov edi, dword [esp]
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
and eax, esi
shr ecx, 0x12
mov ecx, dword [edi + ecx*4]
mov eax, dword [ecx + eax*4]
mov al, byte [edx + eax]
mov byte [esp + 0x10], al
mov ebx, dword [esp + 0x28]
mov edx, 0x3ffff
mov edi, dword [ebp + 8]
mov esi, dword [esp + 0x20]
mov ecx, ebx
mov eax, ebx
and ecx, edx
mov edx, dword [esp + 4]
shr eax, 0x12
mov eax, dword [edx + eax*4]
mov edx, 0x3ffff
mov eax, dword [eax + ecx*4]
add eax, edi
mov edi, dword [esp]
mov ecx, eax
and eax, edx
mov edx, esi
shr ecx, 0x12
mov ecx, dword [edi + ecx*4]
mov eax, dword [ecx + eax*4]
mov ecx, esi
shr ecx, 0x12
mov dword [esp + 0x38], eax
mov eax, 0x3ffff
and edx, eax
mov eax, dword [esp + 4]
mov ecx, dword [eax + ecx*4]
mov eax, 0x3ffff
mov ecx, dword [ecx + edx*4]
add ecx, dword [ebp + 8]
mov edx, ecx
and ecx, eax
mov eax, dword [esp + 0x38]
shr edx, 0x12
mov edx, dword [edi + edx*4]
mov edi, dword [esp + 0x14]
mov ecx, dword [edx + ecx*4]
mov al, byte [edi + eax]
cmp al, byte [edi + ecx]
mov eax, esi
cmova eax, ebx
cmova ebx, esi
mov esi, 0x3ffff
mov edx, eax
mov ecx, eax
and edx, esi
mov esi, dword [esp + 4]
shr ecx, 0x12
mov ecx, dword [esi + ecx*4]
mov esi, 0x3ffff
mov ecx, dword [ecx + edx*4]
add ecx, dword [ebp + 8]
mov edx, ecx
and ecx, esi
mov esi, dword [esp]
shr edx, 0x12
mov edx, dword [esi + edx*4]
mov ecx, dword [edx + ecx*4]
mov dh, byte [esp + 0x10]
cmp byte [edi + ecx], dh
jbe 0x406240
mov ecx, dword [esp + 4]
mov eax, ebx
mov edx, 0x3ffff
shr eax, 0x12
mov eax, dword [ecx + eax*4]
mov ecx, ebx
and ecx, edx
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
and eax, edx
mov edx, dword [esp]
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov dl, byte [esp + 0x10]
mov eax, dword [ecx + eax*4]
cmp byte [edi + eax], dl
mov edx, dword [esp + 0x1c]
mov eax, dword [esp + 0x48]
cmova edx, dword [esp + 8]
cmova eax, ebx
jmp 0x4065c0
mov edx, dword [esp + 8]
jmp 0x4065c0
mov esi, edi
mov edi, dword [esp + 8]
jmp 0x40688f
mov eax, dword [esp + 0x2c]
shr edi, 2
dec eax
mov dword [esp + 0x28], eax
sub eax, edi
add edi, edx
mov edx, 0x3ffff
mov dword [esp + 4], eax
mov eax, dword [esp + 8]
mov esi, edi
mov dword [esp + 0x40], edi
and edi, ecx
mov ecx, dword [ebp + 8]
shr esi, 0x12
mov eax, dword [eax]
mov esi, dword [eax + esi*4]
mov dword [esp + 0x18], eax
mov esi, dword [esi + edi*4]
add esi, ecx
mov ecx, dword [ebx]
mov edi, esi
and esi, edx
shr edi, 0x12
mov edi, dword [ecx + edi*4]
mov dword [esp], ecx
mov edx, dword [edi + esi*4]
mov esi, 0x3ffff
mov dword [esp + 0x24], edx
mov edx, dword [esp + 0x10]
mov edi, edx
mov ebx, edx
shr edi, 0x12
and ebx, esi
mov esi, 0x3ffff
mov edi, dword [eax + edi*4]
mov eax, dword [esp + 0x24]
mov edi, dword [edi + ebx*4]
add edi, dword [ebp + 8]
mov ebx, edi
and edi, esi
shr ebx, 0x12
mov ebx, dword [ecx + ebx*4]
mov ecx, dword [esp + 0x14]
mov edi, dword [ebx + edi*4]
mov bl, byte [ecx + eax]
mov eax, dword [esp + 0x40]
cmp bl, byte [ecx + edi]
mov ecx, eax
mov ebx, dword [esp + 4]
cmovbe eax, edx
mov esi, ebx
cmova ecx, edx
mov edx, dword [esp]
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x1c]
shr esi, 0x12
mov dword [esp + 0x24], ecx
mov ecx, 0x3ffff
and ebx, ecx
mov edi, dword [eax]
mov eax, dword [ebp + 8]
mov esi, dword [edi + esi*4]
mov dword [esp + 0x20], edi
mov esi, dword [esi + ebx*4]
add esi, eax
mov ebx, esi
and esi, ecx
shr ebx, 0x12
mov ebx, dword [edx + ebx*4]
mov eax, dword [ebx + esi*4]
mov esi, dword [esp + 0x28]
mov ebx, 0x3ffff
mov dword [esp + 0x10], eax
mov eax, esi
mov ecx, esi
shr eax, 0x12
and ecx, ebx
mov ebx, dword [edi + eax*4]
mov edi, dword [ebp + 8]
mov eax, 0x3ffff
mov ecx, dword [ebx + ecx*4]
add ecx, edi
mov ebx, ecx
and ecx, eax
mov eax, dword [esp + 0x14]
shr ebx, 0x12
mov ebx, dword [edx + ebx*4]
mov ecx, dword [ebx + ecx*4]
mov ebx, dword [esp + 0x10]
mov bl, byte [eax + ebx]
cmp bl, byte [eax + ecx]
mov eax, dword [esp + 4]
mov ebx, 0x3ffff
mov ecx, eax
cmovbe eax, esi
cmova ecx, esi
mov esi, dword [esp + 0x18]
mov dword [esp + 4], eax
mov dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x24]
mov eax, ecx
and ecx, ebx
shr eax, 0x12
mov eax, dword [esi + eax*4]
mov esi, dword [esp + 0x10]
mov eax, dword [eax + ecx*4]
add eax, edi
mov edi, edx
mov ecx, eax
and eax, ebx
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov edx, dword [esp + 0x20]
mov eax, dword [ecx + eax*4]
mov ecx, esi
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov edx, esi
and edx, ebx
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x28]
mov ecx, dword [ecx + edx*4]
add ecx, dword [ebp + 8]
mov edx, ecx
and ecx, ebx
shr edx, 0x12
mov edx, dword [edi + edx*4]
mov ecx, dword [edx + ecx*4]
mov edx, dword [esp + 0x14]
mov al, byte [edx + eax]
cmp al, byte [edx + ecx]
mov ecx, dword [esp + 0x40]
mov eax, dword [esp + 4]
mov edx, ecx
cmova esi, dword [esp + 0x24]
cmova edx, eax
cmova eax, ecx
mov ecx, dword [esp + 0x1c]
mov dword [esp + 4], eax
mov eax, dword [esp + 8]
mov ebx, edx
mov edx, 0x3ffff
mov dword [esp + 0x10], esi
mov esi, 0x3ffff
mov edi, eax
cmova edi, ecx
cmova ecx, eax
mov dword [esp + 0x38], ecx
mov ecx, dword [esp + 0xc]
mov eax, ecx
and ecx, edx
mov edx, dword [esp + 0x18]
shr eax, 0x12
mov dword [esp + 0x44], ecx
mov dword [esp + 0x54], eax
mov eax, dword [edx + eax*4]
mov dword [esp + 0x24], eax
mov eax, dword [eax + ecx*4]
mov ecx, dword [ebp + 8]
mov dword [esp + 0x18], eax
add eax, ecx
mov ecx, 0x3ffff
mov edx, eax
and eax, ecx
mov ecx, dword [esp]
shr edx, 0x12
mov edx, dword [ecx + edx*4]
mov eax, dword [edx + eax*4]
mov edx, ebx
shr edx, 0x12
mov dword [esp + 0x28], eax
mov eax, dword [edi]
mov eax, dword [eax + edx*4]
mov edx, ebx
and edx, esi
mov esi, 0x3ffff
mov eax, dword [eax + edx*4]
add eax, dword [ebp + 8]
mov edx, eax
and eax, esi
shr edx, 0x12
mov edx, dword [ecx + edx*4]
mov ecx, dword [esp + 0x14]
mov eax, dword [edx + eax*4]
mov edx, dword [esp + 0x28]
mov dl, byte [ecx + edx]
cmp dl, byte [ecx + eax]
mov edx, dword [esp + 8]
mov eax, dword [esp + 0xc]
mov ecx, edx
cmova eax, ebx
cmova ebx, dword [esp + 0xc]
cmova ecx, edi
cmova edi, edx
mov dword [esp + 0x50], ecx
mov ecx, eax
mov dword [esp + 0x28], edi
mov edi, dword [esp]
mov edx, dword [esp + 0x50]
shr ecx, 0x12
mov dword [esp + 0x20], ebx
mov ebx, dword [ebp + 8]
mov esi, dword [edx]
mov edx, 0x3ffff
mov ecx, dword [esi + ecx*4]
mov esi, eax
and esi, edx
mov ecx, dword [ecx + esi*4]
add ecx, ebx
mov esi, ecx
and ecx, edx
mov edx, dword [esp + 0x10]
shr esi, 0x12
mov esi, dword [edi + esi*4]
mov ecx, dword [esi + ecx*4]
mov esi, edx
shr esi, 0x12
mov dword [esp + 0x48], ecx
mov ecx, dword [esp + 0x38]
mov ecx, dword [ecx]
mov ecx, dword [ecx + esi*4]
mov esi, edx
mov edx, 0x3ffff
and esi, edx
mov ecx, dword [ecx + esi*4]
add ecx, ebx
mov ebx, dword [esp + 0x20]
mov esi, ecx
and ecx, edx
mov edx, dword [esp + 0x14]
shr esi, 0x12
mov esi, dword [edi + esi*4]
mov edi, dword [esp + 0x50]
mov esi, dword [esi + ecx*4]
mov ecx, dword [esp + 0x48]
mov cl, byte [edx + ecx]
cmp cl, byte [edx + esi]
mov esi, dword [esp + 0x38]
mov ecx, dword [esp + 0x28]
cmova ebx, dword [esp + 4]
cmova ecx, esi
cmovbe edi, esi
cmovbe eax, dword [esp + 0x10]
mov esi, dword [ecx]
mov dword [esp + 0x28], ecx
mov edx, ebx
mov dword [esp + 0x20], ebx
shr edx, 0x12
mov ecx, dword [esi + edx*4]
mov edx, 0x3ffff
mov esi, dword [ebp + 8]
and ebx, edx
mov ecx, dword [ecx + ebx*4]
add ecx, esi
mov esi, ecx
and ecx, edx
mov edx, dword [esp]
shr esi, 0x12
mov esi, dword [edx + esi*4]
mov ecx, dword [esi + ecx*4]
mov esi, eax
shr esi, 0x12
mov dword [esp + 4], ecx
mov ecx, dword [edi]
mov ebx, dword [ecx + esi*4]
mov esi, eax
mov ecx, 0x3ffff
and esi, ecx
mov ecx, dword [ebx + esi*4]
mov ebx, 0x3ffff
add ecx, dword [ebp + 8]
mov esi, ecx
and ecx, ebx
shr esi, 0x12
mov esi, dword [edx + esi*4]
mov edx, edi
mov edi, dword [esp + 0x14]
mov esi, dword [esi + ecx*4]
mov ecx, dword [esp + 4]
mov cl, byte [edi + ecx]
cmp cl, byte [edi + esi]
cmovbe edx, dword [esp + 0x28]
cmovbe eax, dword [esp + 0x20]
mov esi, dword [edx]
mov ecx, eax
shl eax, 2
mov edi, dword [ebp + 8]
shr ecx, 0x12
and eax, 0xffffc
mov dword [esp + 4], eax
mov esi, dword [esi + ecx*4]
mov esi, dword [esi + eax]
mov eax, edx
mov edx, dword [esp]
add edi, esi
mov ebx, edi
and edi, 0x3ffff
shr ebx, 0x12
mov ebx, dword [edx + ebx*4]
mov edx, dword [esp + 0x14]
mov edi, dword [ebx + edi*4]
mov bl, byte [edx + edi]
mov edi, dword [esp + 0x44]
mov edx, dword [esp + 0x24]
mov dword [edx + edi*4], esi
mov esi, dword [esp + 0x18]
mov byte [esp + 0x10], bl
mov edx, dword [eax]
mov eax, dword [esp + 4]
mov ecx, dword [edx + ecx*4]
mov dword [ecx + eax], esi
mov eax, dword [esp + 0xc]
lea ecx, [eax + 1]
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x28], ecx
cmp ecx, eax
jae 0x406761
mov eax, dword [esp + 8]
mov edi, 0x3ffff
mov ebx, dword [esp + 0x30]
mov esi, dword [eax]
mov eax, ecx
and ecx, edi
mov edx, dword [ebx]
shr eax, 0x12
mov eax, dword [esi + eax*4]
mov dword [esp + 0x18], esi
mov dword [esp + 4], edx
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
and eax, edi
mov edi, dword [esp + 0x1c]
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov eax, dword [ecx + eax*4]
mov ecx, dword [esp + 0x14]
mov cl, byte [ecx + eax]
mov al, 1
cmp cl, byte [esp + 0x10]
jne 0x4066d9
mov eax, dword [esp + 0xc]
lea esi, [eax + 2]
mov eax, dword [esp + 0x2c]
cmp eax, esi
je 0x40677d
mov edx, dword [esp + 0x18]
mov eax, esi
mov ecx, esi
mov edi, 0x3ffff
inc esi
shr eax, 0x12
and ecx, edi
mov eax, dword [edx + eax*4]
mov edx, dword [esp + 4]
mov eax, dword [eax + ecx*4]
add eax, dword [ebp + 8]
mov ecx, eax
and eax, edi
mov edi, dword [esp + 0x1c]
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov eax, dword [ecx + eax*4]
mov ecx, dword [esp + 0x14]
mov cl, byte [ecx + eax]
mov eax, dword [esp + 0x2c]
cmp cl, byte [esp + 0x10]
je 0x406685
dec esi
cmp esi, eax
mov dword [esp + 0x28], esi
setb al
test al, al
je 0x406770
cmp cl, byte [esp + 0x10]
jae 0x406770
mov eax, dword [esp + 0x28]
lea edx, [eax + 1]
mov eax, dword [esp + 0x2c]
cmp edx, eax
jae 0x406783
mov edi, edx
mov dword [esp], edx
mov eax, edx
mov edx, dword [esp + 0x18]
mov ecx, 0x3ffff
mov esi, dword [esp + 4]
shr edi, 0x12
and eax, ecx
mov dword [esp + 0x24], eax
mov ecx, dword [edx + edi*4]
mov dword [esp + 0x20], ecx
mov edi, dword [ecx + eax*4]
mov ecx, dword [ebp + 8]
lea eax, [edi + ecx]
mov ebx, eax
shr ebx, 0x12
mov esi, dword [esi + ebx*4]
mov ebx, 0x3ffff
and eax, ebx
mov eax, dword [esi + eax*4]
mov esi, dword [esp + 0x14]
mov bl, byte [esi + eax]
mov al, byte [esp + 0x10]
cmp bl, al
jbe 0x406a39
mov ebx, dword [esp + 0x30]
mov edi, dword [esp + 0x1c]
mov eax, dword [esp + 0x2c]
mov edx, dword [esp]
jmp 0x406786
mov edx, ecx
mov ebx, dword [esp + 0x30]
mov ecx, dword [ebp + 8]
mov edi, dword [esp + 0x1c]
jmp 0x406786
mov edx, dword [esp + 0x28]
mov ecx, dword [ebp + 8]
mov eax, dword [esp + 0x2c]
jmp 0x406786
mov edx, eax
mov dword [esp + 0x28], eax
mov ecx, dword [ebp + 8]
lea esi, [eax - 1]
cmp edx, esi
mov dword [esp + 0x20], esi
jae 0x4067ff
mov esi, dword [edi]
mov edi, dword [ebx]
mov ebx, dword [esp + 0x20]
add eax, 0xfffffffd
mov dword [esp], edx
mov dword [esp + 0x24], esi
mov dword [esp + 0x38], edi
mov esi, dword [esp + 0x24]
mov dword [esp + 0x18], eax
mov eax, ebx
mov edx, ebx
mov edi, 0x3ffff
shr eax, 0x12
and edx, edi
mov eax, dword [esi + eax*4]
mov esi, dword [esp + 0x38]
mov eax, dword [eax + edx*4]
add eax, ecx
mov edx, eax
and eax, edi
mov edi, ebx
mov bl, byte [esp + 0x10]
shr edx, 0x12
mov edx, dword [esi + edx*4]
mov esi, dword [esp + 0x14]
mov eax, dword [edx + eax*4]
cmp byte [esi + eax], bl
jne 0x406806
mov eax, dword [esp + 0x18]
mov edx, dword [esp]
dec edi
mov ebx, edi
dec eax
cmp edx, edi
jb 0x4067a7
mov dword [esp + 0x20], edx
mov eax, edx
jmp 0x406c02
mov eax, esi
jmp 0x406ddd
mov dword [esp + 0x20], edi
mov edi, dword [esp + 0xc]
jbe 0x406879
mov eax, dword [esp + 0x20]
mov edx, dword [esp]
dec eax
cmp edx, eax
jae 0x406a0f
mov esi, dword [esp + 0x24]
mov edx, eax
shr eax, 0x12
mov dword [esp + 4], edx
mov ebx, edx
mov edx, 0x3ffff
and ebx, edx
mov dword [esp + 0x50], ebx
mov eax, dword [esi + eax*4]
mov esi, dword [eax + ebx*4]
mov ebx, dword [esp + 0x38]
mov dword [esp + 0x48], eax
lea edx, [esi + ecx]
mov eax, edx
shr eax, 0x12
mov eax, dword [ebx + eax*4]
mov ebx, 0x3ffff
and edx, ebx
mov eax, dword [eax + edx*4]
mov edx, dword [esp + 0x14]
mov bl, byte [edx + eax]
mov al, byte [esp + 0x10]
cmp bl, al
jae 0x406b18
mov ebx, dword [esp + 0x30]
jmp 0x406c0b
mov eax, dword [esp + 0x20]
mov ebx, dword [esp + 0x30]
mov edx, dword [esp]
jmp 0x406c12
mov esi, edi
mov edi, dword [esp + 0x18]
mov dword [esp + 0xc], ebx
mov edx, dword [edi]
mov eax, esi
mov ebx, 0x3ffff
mov dword [esp + 0x18], edi
mov edi, dword [esp + 4]
shr eax, 0x12
mov eax, dword [edx + eax*4]
mov edx, esi
and edx, ebx
mov eax, dword [eax + edx*4]
mov edx, dword [ebp + 8]
add eax, edx
mov edx, eax
and eax, ebx
shr edx, 0x12
mov edx, dword [edi + edx*4]
mov eax, dword [edx + eax*4]
mov edx, dword [esp + 0x14]
movzx eax, byte [eax + edx - 1]
cmp ecx, eax
jle 0x406903
mov edx, dword [esp + 0x30]
lea ecx, [esp + 0x68]
push dword [esp + 0x34]
mov ebx, dword [esp + 0x10]
push ebx
push dword [esp + 0x10]
push esi
push dword [esp + 0x28]
push dword [ebp + 8]
call fcn.00409b1e
add esp, 0x18
mov esi, dword [esp + 0x68]
mov edx, dword [esp + 0x6c]
mov eax, dword [esp + 0x2c]
jmp 0x406911
mov edx, esi
mov eax, dword [esp + 0x2c]
mov ebx, dword [esp + 0xc]
mov esi, dword [esp + 0x18]
mov ecx, ebx
sub eax, ebx
mov dword [esp], edx
sub ecx, edx
cmp ecx, eax
jle 0x406975
cmp eax, 2
jl 0x4069ce
mov eax, dword [esp + 0x3c]
test ecx, 0xff00
lea edx, [eax + eax*2]
mov eax, dword [esp]
mov dword [esp + edx*8 + 0x70], esi
mov dword [esp + edx*8 + 0x74], eax
mov eax, dword [esp + 8]
mov dword [esp + edx*8 + 0x78], eax
mov eax, dword [esp + 0xc]
mov dword [esp + edx*8 + 0x7c], eax
mov eax, dword [esp + 0x34]
lea eax, [eax + 1]
mov dword [esp + edx*8 + 0x80], eax
je 0x406a18
movzx eax, ch
mov eax, dword [eax*4 + 0x49e59c]
add eax, 8
jmp 0x406a22
mov eax, dword [esp + 0x2c]
cmp ecx, 2
mov edx, 0xffffffff
jl 0x4051d3
mov edi, dword [esp + 0x3c]
mov edx, dword [esp + 8]
mov ebx, eax
lea eax, [edi + edi*2]
inc edi
mov dword [esp + eax*8 + 0x70], edx
mov edx, dword [esp + 0xc]
mov dword [esp + 0x3c], edi
mov dword [esp + eax*8 + 0x74], edx
mov edx, dword [esp + 0x1c]
mov dword [esp + eax*8 + 0x78], edx
mov dword [esp + eax*8 + 0x7c], ebx
mov ebx, dword [esp + 0x34]
mov dword [esp + eax*8 + 0x80], ebx
inc ebx
mov dword [esp + eax*8 + 0x84], 0xffffffff
mov dword [esp + 0x34], ebx
jmp 0x4069d2
inc dword [esp + 0x34]
test ecx, 0xff00
je 0x4069e9
movzx eax, ch
mov edx, dword [eax*4 + 0x49e59c]
add edx, 8
jmp 0x4069f3
movzx eax, cl
mov edx, dword [eax*4 + 0x49e59c]
mov eax, dword [esp + 8]
mov dword [esp + 8], esi
mov esi, dword [esp]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0xc]
mov dword [esp + 0xc], esi
jmp 0x4051d3
mov ebx, dword [esp + 0x30]
jmp 0x406c12
movzx eax, cl
mov eax, dword [eax*4 + 0x49e59c]
mov dword [esp + edx*8 + 0x84], eax
inc dword [esp + 0x3c]
mov eax, dword [esp + 0x2c]
xor edx, edx
dec edx
jmp 0x4051d3
mov ecx, dword [esp + 0x24]
mov esi, dword [esp + 0x20]
mov dword [esp + 4], edi
lea ecx, [esi + ecx*4]
mov dword [esp + 0x24], ecx
mov ecx, dword [esp + 0x28]
add ecx, 2
mov dword [esp], ecx
cmp bl, al
jne 0x406a98
mov ecx, dword [esp + 0x28]
mov esi, dword [esp + 0x24]
mov edi, dword [esp + 8]
mov eax, ecx
lea ebx, [ecx*4]
shr eax, 0x12
and ebx, 0xffffc
mov edx, dword [edx + eax*4]
mov edx, dword [edx + ebx]
mov dword [esi], edx
mov edx, dword [edi]
mov eax, dword [edx + eax*4]
mov edx, dword [esp + 4]
mov dword [eax + ebx], edx
mov edx, ecx
mov ecx, dword [ebp + 8]
mov eax, dword [esp + 0x2c]
inc edx
jmp 0x406aa7
mov ecx, dword [ebp + 8]
mov eax, dword [esp + 0x2c]
mov edi, dword [esp + 8]
mov edx, dword [esp + 0x28]
mov esi, dword [esp]
mov dword [esp + 0x28], edx
cmp eax, esi
je 0x406bf3
mov edx, dword [edi]
mov eax, esi
mov ebx, esi
mov edi, 0x3ffff
inc esi
shr eax, 0x12
and ebx, edi
mov dword [esp], esi
mov eax, dword [edx + eax*4]
lea eax, [eax + ebx*4]
mov dword [esp + 0x24], eax
mov eax, dword [eax]
mov dword [esp + 4], eax
add eax, ecx
mov ecx, dword [esp + 0x30]
mov ebx, eax
shr ebx, 0x12
mov edi, dword [ecx]
mov ecx, 0x3ffff
and eax, ecx
mov ecx, dword [esp + 0x14]
mov edi, dword [edi + ebx*4]
mov eax, dword [edi + eax*4]
mov edi, dword [esp + 0x1c]
mov bl, byte [ecx + eax]
mov al, byte [esp + 0x10]
cmp bl, al
jbe 0x406a56
mov edx, dword [esp]
mov ebx, dword [esp + 0x30]
dec edx
jmp 0x406774
mov ecx, dword [esp + 0x50]
mov edx, dword [esp + 0x48]
mov dword [esp + 4], esi
mov esi, dword [esp + 0x18]
lea edi, [edx + ecx*4]
cmp bl, al
jne 0x406b74
mov ecx, dword [esp + 0x20]
mov edx, dword [esp + 0x24]
mov dword [esp + 0x18], edi
mov eax, ecx
lea ebx, [ecx*4]
shr eax, 0x12
and ebx, 0xffffc
mov edi, dword [edx + eax*4]
mov edx, dword [esp + 0x18]
mov edi, dword [edi + ebx]
mov dword [edx], edi
mov edi, dword [esp + 0x1c]
mov edx, dword [edi]
mov eax, dword [edx + eax*4]
mov edx, dword [esp + 4]
mov dword [eax + ebx], edx
mov eax, ecx
mov ecx, dword [ebp + 8]
mov edx, dword [esp]
dec eax
jmp 0x406b82
mov ecx, dword [ebp + 8]
mov edi, dword [esp + 0x1c]
mov edx, dword [esp]
mov eax, dword [esp + 0x20]
cmp edx, esi
mov dword [esp + 0x20], eax
jae 0x4067f8
mov ebx, esi
mov esi, dword [edi]
mov edi, 0x3ffff
mov eax, ebx
mov edx, ebx
shr eax, 0x12
and edx, edi
mov eax, dword [esi + eax*4]
mov dword [esp + 0x24], esi
mov esi, ebx
dec esi
lea edi, [eax + edx*4]
mov eax, dword [edi]
mov dword [esp + 4], eax
add eax, ecx
mov ecx, dword [esp + 0x30]
mov ebx, eax
shr ebx, 0x12
mov edx, dword [ecx]
mov ecx, 0x3ffff
and eax, ecx
mov ecx, dword [esp + 0x14]
mov edx, dword [edx + ebx*4]
mov eax, dword [edx + eax*4]
mov bl, byte [ecx + eax]
mov al, byte [esp + 0x10]
cmp bl, al
jae 0x406b2b
mov ebx, dword [esp + 0x30]
mov ecx, dword [ebp + 8]
mov edi, dword [esp + 0xc]
inc esi
mov eax, esi
jmp 0x406881
mov ebx, dword [esp + 0x30]
mov edi, dword [esp + 0x1c]
mov edx, eax
jmp 0x406786
mov ebx, dword [esp + 0x30]
jmp 0x406ddd
mov edx, dword [esp]
mov eax, dword [esp + 4]
cmp edx, eax
jae 0x406df6
mov esi, edx
mov dword [esp + 4], eax
mov eax, edx
mov dword [esp], edx
mov edx, dword [esp + 8]
shr eax, 0x12
and esi, 0x3ffff
mov edi, dword [edx]
mov edx, dword [esp + 0x1c]
mov ecx, dword [edi + eax*4]
mov edi, dword [esp + 4]
mov ebx, dword [edx]
mov eax, dword [esp + 4]
shr edi, 0x12
lea eax, [eax*4]
mov ebx, dword [ebx + edi*4]
and eax, 0xffffc
mov ebx, dword [ebx + eax]
mov dword [esp + 0x24], ebx
mov ebx, dword [ecx + esi*4]
mov dword [esp + 0x18], ebx
mov ebx, dword [esp + 0x24]
mov dword [ecx + esi*4], ebx
mov ecx, dword [esp + 0x18]
mov esi, dword [edx]
mov edx, dword [esp]
mov esi, dword [esi + edi*4]
inc edx
mov dword [esi + eax], ecx
mov eax, dword [esp + 4]
mov ecx, dword [ebp + 8]
cmp edx, eax
jae 0x406d2d
mov eax, dword [esp + 8]
mov edi, edx
mov dword [esp], edx
mov esi, edx
mov ebx, 0x3ffff
shr edi, 0x12
and esi, ebx
mov eax, dword [eax]
mov edx, dword [eax + edi*4]
mov edi, dword [esp + 0x30]
mov dword [esp + 0x24], edx
mov edx, dword [edx + esi*4]
mov edi, dword [edi]
add ecx, edx
mov dword [esp + 0x18], edx
mov edx, ecx
and ecx, ebx
mov bl, byte [esp + 0x10]
shr edx, 0x12
mov edx, dword [edi + edx*4]
mov edi, dword [esp + 0x14]
mov ecx, dword [edx + ecx*4]
cmp byte [edi + ecx], bl
ja 0x406d23
jne 0x406d0c
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x24]
mov ecx, edi
lea edx, [edi*4]
inc edi
shr ecx, 0x12
and edx, 0xffffc
mov dword [esp + 0x28], edi
mov eax, dword [eax + ecx*4]
mov eax, dword [eax + edx]
mov dword [ebx + esi*4], eax
mov eax, dword [esp + 8]
mov esi, dword [esp + 0x18]
mov eax, dword [eax]
mov eax, dword [eax + ecx*4]
mov dword [eax + edx], esi
mov edx, dword [esp]
mov eax, dword [esp + 4]
mov ecx, dword [ebp + 8]
inc edx
cmp eax, edx
jne 0x406c8b
mov edx, eax
jmp 0x406d2d
mov ecx, dword [ebp + 8]
mov edx, dword [esp]
mov eax, dword [esp + 4]
dec eax
cmp edx, eax
jae 0x406c02
mov edi, dword [esp + 0x1c]
mov dword [esp], edx
mov ecx, eax
mov dword [esp + 4], eax
mov esi, eax
mov eax, dword [edi]
mov ebx, 0x3ffff
mov edi, dword [esp + 0x30]
shr ecx, 0x12
and esi, ebx
mov ecx, dword [eax + ecx*4]
mov edi, dword [edi]
mov edx, dword [ecx + esi*4]
mov dword [esp + 0x24], ecx
mov ecx, dword [ebp + 8]
add ecx, edx
mov dword [esp + 0x18], edx
mov edx, ecx
and ecx, ebx
mov bl, byte [esp + 0x10]
shr edx, 0x12
mov edx, dword [edi + edx*4]
mov edi, dword [esp + 0x14]
mov ecx, dword [edx + ecx*4]
cmp byte [edi + ecx], bl
jb 0x406de6
jne 0x406dc0
mov ebx, dword [esp + 0x20]
mov edi, dword [esp + 0x24]
mov ecx, ebx
lea edx, [ebx*4]
dec ebx
shr ecx, 0x12
and edx, 0xffffc
mov dword [esp + 0x20], ebx
mov eax, dword [eax + ecx*4]
mov eax, dword [eax + edx]
mov dword [edi + esi*4], eax
mov edi, dword [esp + 0x1c]
mov esi, dword [esp + 0x18]
mov eax, dword [edi]
mov eax, dword [eax + ecx*4]
mov dword [eax + edx], esi
jmp 0x406dc4
mov edi, dword [esp + 0x1c]
mov eax, dword [esp + 4]
mov edx, dword [esp]
dec eax
cmp edx, eax
jb 0x406d3d
mov ebx, dword [esp + 0x30]
mov ecx, dword [ebp + 8]
mov eax, edx
mov edi, dword [esp + 0xc]
jmp 0x406c12
mov ebx, dword [esp + 0x30]
mov ecx, dword [ebp + 8]
mov edi, dword [esp + 0xc]
jmp 0x406c0b
mov eax, dword [esp + 0x28]
cmp eax, dword [esp + 0x20]
jbe 0x406e92
mov esi, dword [esp + 8]
mov edx, dword [esp + 0x54]
mov eax, dword [esi]
mov eax, dword [eax + edx*4]
mov edx, dword [esp + 0x44]
mov eax, dword [eax + edx*4]
mov edx, dword [ebx]
add eax, ecx
mov ecx, eax
and eax, 0x3ffff
shr ecx, 0x12
mov ecx, dword [edx + ecx*4]
mov dl, byte [esp + 0x10]
mov eax, dword [ecx + eax*4]
mov ecx, dword [esp + 0x14]
cmp byte [eax + ecx - 1], dl
mov eax, dword [esp + 0x1c]
jae 0x40704d
lea ecx, [esp + 0x68]
mov edx, ebx
push dword [esp + 0x34]
mov ebx, edi
mov edi, dword [esp + 0x30]
push edi
push eax
push ebx
push esi
push dword [ebp + 8]
call fcn.00409b1e
add esp, 0x18
mov eax, dword [esp + 0x68]
mov ecx, dword [esp + 0x6c]
mov dword [esp + 8], eax
mov eax, edi
mov dword [esp + 0xc], ecx
sub eax, ecx
test eax, 0xff00
je 0x407285
movzx eax, ah
mov edx, dword [eax*4 + 0x49e59c]
add edx, 8
jmp 0x40728f
mov ebx, dword [esp + 8]
mov dword [esp], edx
sub edx, eax
sub eax, edi
cmp eax, edx
mov dword [esp + 0x44], edx
cmovg eax, edx
test eax, eax
mov dword [esp + 8], ebx
jle 0x406f33
mov edx, dword [esp]
mov edi, eax
inc edi
sub edx, eax
mov eax, dword [esp + 0xc]
mov dword [esp + 0x28], edi
mov edi, dword [ebx]
mov ecx, eax
mov dword [esp + 0x38], eax
shr eax, 0x12
mov ebx, edx
mov esi, edx
shr ebx, 0x12
and ecx, 0x3ffff
inc esi
mov eax, dword [edi + eax*4]
mov edi, dword [edi + ebx*4]
mov dword [esp + 4], eax
lea eax, [edx*4]
and eax, 0xffffc
mov edx, dword [edi + eax]
mov edi, dword [esp + 4]
mov edi, dword [edi + ecx*4]
mov dword [esp + 0x24], edx
mov edx, dword [esp + 0x24]
mov dword [esp + 0x18], edi
mov edi, dword [esp + 4]
mov dword [edi + ecx*4], edx
mov ecx, dword [esp + 8]
mov edi, dword [esp + 0x28]
mov edx, esi
mov ecx, dword [ecx]
dec edi
mov ecx, dword [ecx + ebx*4]
mov ebx, dword [esp + 0x18]
mov dword [ecx + eax], ebx
mov eax, dword [esp + 0x38]
mov ebx, dword [esp + 8]
inc eax
cmp edi, 1
jg 0x406ebe
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x20]
mov edi, dword [esp]
mov esi, ebx
sub eax, ecx
sub ecx, edi
inc ecx
lea edx, [eax - 1]
cmp ecx, eax
mov dword [esp + 0x20], ecx
cmovl edx, ecx
test edx, edx
jle 0x406fd1
mov eax, edx
mov edx, dword [esp + 0x2c]
sub edx, eax
inc eax
mov dword [esp + 4], eax
mov eax, dword [esp + 8]
mov ecx, edi
mov esi, edi
mov dword [esp], edi
shr ecx, 0x12
and esi, 0x3ffff
mov edi, dword [eax]
mov eax, dword [esp + 0x1c]
mov ebx, dword [eax]
mov ecx, dword [edi + ecx*4]
mov edi, edx
lea eax, [edx*4]
inc edx
shr edi, 0x12
and eax, 0xffffc
mov ebx, dword [ebx + edi*4]
mov ebx, dword [ebx + eax]
mov dword [esp + 0x24], ebx
mov ebx, dword [ecx + esi*4]
mov dword [esp + 0x18], ebx
mov ebx, dword [esp + 0x24]
mov dword [ecx + esi*4], ebx
mov ecx, dword [esp + 0x1c]
mov esi, dword [esp + 0x18]
mov ecx, dword [ecx]
mov ecx, dword [ecx + edi*4]
mov edi, dword [esp]
mov dword [ecx + eax], esi
mov ecx, dword [esp + 4]
mov esi, dword [esp + 8]
inc edi
dec ecx
cmp ecx, 1
mov dword [esp + 4], ecx
jg 0x406f62
mov eax, dword [esp + 0xc]
mov ecx, dword [esp + 0x44]
mov edi, 0x3ffff
lea ebx, [ecx + eax]
mov ecx, dword [esi]
mov esi, dword [ebp + 8]
mov eax, ebx
mov dword [esp + 4], ebx
shr eax, 0x12
mov eax, dword [ecx + eax*4]
mov ecx, ebx
and ecx, edi
mov eax, dword [eax + ecx*4]
add eax, esi
mov esi, dword [esp + 0x30]
mov ecx, eax
and eax, edi
mov edi, dword [esp + 0x2c]
shr ecx, 0x12
mov edx, dword [esi]
sub edi, dword [esp + 0x20]
mov ecx, dword [edx + ecx*4]
mov dl, byte [esp + 0x10]
mov eax, dword [ecx + eax*4]
mov ecx, dword [esp + 0x14]
cmp dl, byte [eax + ecx - 1]
jbe 0x40705a
lea ecx, [esp + 0x68]
mov edx, esi
push dword [esp + 0x34]
push edi
push dword [esp + 0x24]
push ebx
push dword [esp + 0x18]
push dword [ebp + 8]
call fcn.00409b1e
add esp, 0x18
mov ebx, dword [esp + 0x68]
mov ecx, dword [esp + 0x6c]
jmp 0x40706a
mov edx, dword [esp + 0x5c]
mov dword [esp + 8], esi
jmp 0x40728f
mov eax, dword [esp + 8]
mov ecx, ebx
mov dword [esp + 0x68], eax
mov dword [esp + 0x6c], ebx
mov ebx, eax
mov edx, dword [esp + 0x20]
mov esi, dword [esp + 0x44]
mov eax, edi
mov dword [esp], edi
sub eax, ecx
cmp esi, edx
jle 0x407131
cmp esi, eax
jle 0x4071f3
mov edi, dword [esp + 0x3c]
mov dword [esp + 0x14], ebx
mov ebx, dword [esp + 8]
mov edx, dword [esp + 0xc]
cmp dword [esp + 0x20], eax
lea esi, [edi + edi*2]
lea esi, [esp + esi*8 + 0x88]
mov dword [esi - 0x18], ebx
mov dword [esi - 0x14], edx
mov edx, dword [esp + 4]
mov dword [esi - 0x10], ebx
mov ebx, dword [esp + 0x4c]
mov dword [esi - 0xc], edx
lea edx, [edi + 1]
mov dword [esp + 8], edx
mov edx, dword [esp + 0x34]
mov dword [esi - 8], edx
mov dword [esi - 4], ebx
jle 0x40729c
mov ebx, dword [esp + 0x1c]
add edi, 2
mov dword [esp + 0x3c], edi
mov dword [esi], ebx
mov esi, dword [esp + 8]
mov ebx, dword [esp]
lea esi, [esi + esi*2]
mov dword [esp + esi*8 + 0x74], ebx
mov ebx, dword [esp + 0x1c]
mov dword [esp + esi*8 + 0x78], ebx
mov ebx, dword [esp + 0x2c]
mov dword [esp + esi*8 + 0x7c], ebx
mov ebx, dword [esp + 0x4c]
mov dword [esp + esi*8 + 0x80], edx
inc edx
test eax, 0xff00
mov dword [esp + 0x34], edx
mov dword [esp + esi*8 + 0x84], ebx
je 0x4071d5
movzx eax, ah
mov edx, dword [eax*4 + 0x49e59c]
add edx, 8
jmp 0x4071df
cmp edx, eax
jle 0x40723c
mov edi, dword [esp + 0x3c]
mov dword [esp + 0x10], ecx
mov dword [esp + 0x14], ebx
mov ebx, dword [esp + 0x1c]
mov ecx, dword [esp]
mov edx, dword [esp + 0x2c]
cmp esi, eax
lea esi, [edi + edi*2]
lea esi, [esp + esi*8 + 0x88]
mov dword [esi - 0x18], ebx
mov dword [esi - 0x14], ecx
lea ecx, [edi + 1]
mov dword [esi - 0x10], ebx
mov dword [esi - 0xc], edx
mov edx, dword [esp + 0x34]
mov dword [esp + 0x2c], ecx
mov ecx, dword [esp + 0x4c]
mov dword [esi - 8], edx
mov dword [esi - 4], ecx
jle 0x4072e1
mov ecx, dword [esp + 8]
mov ebx, dword [esp + 0xc]
add edi, 2
mov dword [esp + 0x3c], edi
mov dword [esi], ecx
mov ecx, dword [esp + 0x2c]
lea esi, [ecx + ecx*2]
mov ecx, dword [esp + 8]
mov dword [esp + esi*8 + 0x74], ebx
mov ebx, dword [esp + 4]
mov dword [esp + esi*8 + 0x78], ecx
mov ecx, dword [esp + 0x4c]
mov dword [esp + esi*8 + 0x7c], ebx
mov dword [esp + esi*8 + 0x80], edx
inc edx
test eax, 0xff00
mov dword [esp + 0x34], edx
mov dword [esp + esi*8 + 0x84], ecx
mov ecx, dword [esp + 0x10]
jne 0x40711f
movzx eax, al
mov edx, dword [eax*4 + 0x49e59c]
mov esi, dword [esp + 0x14]
mov eax, dword [esp]
mov dword [esp + 0xc], ecx
mov dword [esp + 8], esi
jmp 0x4051d3
mov edx, dword [esp + 0x3c]
mov edi, dword [esp + 0x1c]
test eax, 0xff00
lea esi, [edx + edx*2]
mov dword [esp + esi*8 + 0x70], ebx
mov dword [esp + esi*8 + 0x74], ecx
mov ecx, dword [esp]
mov dword [esp + esi*8 + 0x78], edi
mov dword [esp + esi*8 + 0x7c], ecx
mov ecx, dword [esp + 0x34]
lea ecx, [ecx + 1]
mov dword [esp + esi*8 + 0x80], ecx
je 0x407326
movzx eax, ah
mov eax, dword [eax*4 + 0x49e59c]
add eax, 8
jmp 0x407330
mov edx, dword [esp + 0x3c]
mov edi, dword [esp + 0x1c]
test eax, 0xff00
lea esi, [edx + edx*2]
mov dword [esp + esi*8 + 0x70], ebx
mov dword [esp + esi*8 + 0x74], ecx
mov ecx, dword [esp]
mov dword [esp + esi*8 + 0x78], edi
mov dword [esp + esi*8 + 0x7c], ecx
mov ecx, dword [esp + 0x34]
lea ecx, [ecx + 1]
mov dword [esp + esi*8 + 0x80], ecx
je 0x40737f
movzx eax, ah
mov eax, dword [eax*4 + 0x49e59c]
add eax, 8
jmp 0x407389
movzx eax, al
mov edx, dword [eax*4 + 0x49e59c]
inc dword [esp + 0x34]
mov eax, dword [esp + 0x2c]
jmp 0x4051d3
mov edi, dword [esp + 0x14]
mov ebx, dword [esp]
inc edx
test eax, 0xff00
mov dword [esi], edi
mov esi, dword [esp + 8]
mov edi, dword [esp + 0x1c]
lea esi, [esi + esi*2]
mov dword [esp + esi*8 + 0x74], ecx
mov dword [esp + esi*8 + 0x78], edi
mov dword [esp + esi*8 + 0x7c], ebx
mov dword [esp + esi*8 + 0x80], edx
je 0x4073e1
movzx eax, ah
mov eax, dword [eax*4 + 0x49e59c]
add eax, 8
jmp 0x4073eb
mov edi, dword [esp + 0x14]
mov ecx, dword [esp + 0x2c]
inc edx
test eax, 0xff00
mov dword [esi], edi
lea esi, [ecx + ecx*2]
mov ecx, dword [esp + 0x10]
mov edi, dword [esp]
mov dword [esp + esi*8 + 0x74], ecx
mov dword [esp + esi*8 + 0x78], ebx
mov dword [esp + esi*8 + 0x7c], edi
mov dword [esp + esi*8 + 0x80], edx
je 0x407415
movzx eax, ah
mov eax, dword [eax*4 + 0x49e59c]
add eax, 8
jmp 0x40741f
movzx eax, al
mov eax, dword [eax*4 + 0x49e59c]
mov dword [esp + esi*8 + 0x84], eax
mov ecx, dword [esp + 8]
mov eax, dword [esp + 0xc]
mov edx, dword [esp + 0x4c]
mov ebx, dword [esp + 4]
add dword [esp + 0x3c], 2
mov dword [esp + esi*8 + 0x88], ecx
mov dword [esp + esi*8 + 0x8c], eax
mov dword [esp + esi*8 + 0x90], ecx
mov ecx, dword [esp + 0x34]
mov dword [esp + esi*8 + 0x94], ebx
mov dword [esp + esi*8 + 0x98], ecx
mov dword [esp + esi*8 + 0x9c], edx
jmp 0x407401
movzx eax, al
mov eax, dword [eax*4 + 0x49e59c]
mov dword [esp + esi*8 + 0x84], eax
mov eax, dword [esp]
mov dword [esp + esi*8 + 0x88], edi
mov edx, dword [esp + 0x4c]
mov ecx, dword [esp + 4]
add dword [esp + 0x3c], 2
mov dword [esp + esi*8 + 0x8c], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + esi*8 + 0x90], edi
mov dword [esp + esi*8 + 0x94], eax
mov eax, dword [esp + 0x34]
mov dword [esp + esi*8 + 0x98], eax
mov eax, dword [esp + 8]
mov dword [esp + esi*8 + 0x9c], edx
mov dword [esp + 0x1c], eax
mov eax, ecx
jmp 0x4051d3
movzx eax, al
mov eax, dword [eax*4 + 0x49e59c]
mov ecx, dword [esp + 0x3c]
mov edx, dword [esp + 0x4c]
mov dword [esp + esi*8 + 0x84], eax
add ecx, 2
mov dword [esp + 0x3c], ecx
mov eax, dword [esp]
mov dword [esp + 8], edi
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x2c]
jmp 0x4051d3
movzx eax, al
mov eax, dword [eax*4 + 0x49e59c]
mov dword [esp + esi*8 + 0x84], eax
mov eax, dword [esp + 8]
mov ecx, dword [esp + 0x3c]
mov edx, dword [esp + 0x4c]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 4]
add ecx, 2
mov dword [esp + 0x3c], ecx
jmp 0x4051d3
mov ecx, dword [esp + 0x1f0]
xor ecx, ebp
call fcn.004771d1
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret