Function at 0x4021b0
Capabilities:
Compute adler32 checksum

Disassembly:
sub esp, 0xbc
mov edx, dword [esp + 0xcc]
push ebx
mov ebx, dword [esp + 0xd8]
push ebp
mov ebp, dword [esp + 0xcc]
push esi
mov esi, dword [esp + 0xdc]
push edi
mov edi, dword [esp + 0xd8]
mov eax, dword [edi]
add eax, ebp
mov dword [esp + 0x1c], eax
mov eax, dword [ebx]
lea ecx, [eax + esi]
mov dword [esp + 0x34], ecx
mov ecx, dword [esp + 0xe8]
and ecx, 4
mov dword [esp + 0x18], 0xffffffff
mov dword [esp + 0x10], ebp
mov dword [esp + 0x20], esi
mov dword [esp + 0x38], ecx
je 0x402213
or eax, 0xffffffff
jmp 0x402219
sub eax, edx
lea eax, [eax + esi - 1]
lea ecx, [eax + 1]
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], ecx
test eax, ecx
jne 0x40395f
cmp esi, edx
jb 0x40395f
mov eax, dword [esp + 0xd0]
mov edx, dword [eax + 0x20]
mov ecx, dword [eax + 0x24]
mov esi, dword [eax + 4]
mov ebx, dword [eax + 0x38]
mov dword [esp + 0x28], edx
mov edx, dword [eax + 0x28]
mov dword [esp + 0x14], ecx
mov ecx, dword [eax + 0x3c]
mov eax, dword [eax]
mov dword [esp + 0x2c], edx
mov dword [esp + 0x44], ecx
cmp eax, 0x35
ja case.0x40226f.4
movzx edx, byte [eax + 0x403a04]
jmp dword [edx*4 + 0x40397c]
mov ecx, dword [esp + 0xd0]
xor edx, edx
mov eax, 1
xor esi, esi
xor ebx, ebx
mov dword [ecx + 0xc], edx
mov dword [ecx + 8], edx
mov dword [esp + 0x2c], edx
mov dword [esp + 0x14], edx
mov dword [esp + 0x28], edx
mov dword [ecx + 0x1c], eax
mov dword [ecx + 0x10], eax
test byte [esp + 0xe8], al
je 0x402b17
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x4022e4
movzx edi, byte [ebp]
inc ebp
mov dword [ecx + 8], edi
mov dword [esp + 0x10], ebp
jmp 0x402316
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x4022e2
movzx edx, byte [ebp]
mov ecx, dword [esp + 0xd0]
inc ebp
mov dword [ecx + 8], edx
mov dword [esp + 0x10], ebp
xor edx, edx
jmp 0x402316
xor edx, edx
test byte [esp + 0xe8], 2
mov ebp, dword [esp + 0x10]
je 0x40230c
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 1
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov dword [ecx + 8], edx
cmp ebp, eax
jae 0x4023b0
movzx edx, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov dword [ecx + 0xc], edx
mov edi, dword [ecx + 8]
mov ecx, dword [ecx + 0xc]
mov eax, edi
shl eax, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
jne 0x402361
mov edx, dword [esp + 0xd0]
test byte [edx + 0xc], 0x20
jne 0x402361
mov eax, edi
and al, 0xf
mov dword [esp + 0x14], 0
cmp al, 8
je 0x402369
mov dword [esp + 0x14], 1
cmp dword [esp + 0x38], 0
jne 0x4023e1
mov ecx, edi
shr ecx, 4
add ecx, 8
mov eax, 1
shl eax, cl
cmp eax, 0x8000
ja 0x4023d8
cmp dword [esp + 0x24], eax
jb 0x4023d8
xor eax, eax
jmp 0x4023dd
cmp ebp, dword [esp + 0x1c]
jae 0x4023ae
movzx eax, byte [ebp]
mov ecx, dword [esp + 0xd0]
inc ebp
mov dword [ecx + 0xc], eax
mov dword [esp + 0x10], ebp
jmp 0x40232a
xor edx, edx
test byte [esp + 0xe8], 2
mov ecx, dword [esp + 0xd0]
je 0x402327
mov dword [esp + 0x18], 1
mov dword [ecx], 2
jmp case.0x40226f.4
mov eax, 1
or dword [esp + 0x14], eax
cmp dword [esp + 0x14], 0
je 0x402b17
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x24
jmp case.0x40226f.4
cmp ebp, dword [esp + 0x1c]
jae 0x402b2a
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 3
jb 0x402b20
mov ecx, dword [esp + 0xd0]
mov eax, ebx
and eax, 7
mov dword [ecx + 0x14], eax
shr ebx, 3
sub esi, 3
shr eax, 1
mov dword [ecx + 0x18], eax
jne 0x402c6a
mov ecx, esi
and ecx, 7
cmp esi, ecx
jae 0x40248d
cmp ebp, dword [esp + 0x1c]
jb 0x402472
test byte [esp + 0xe8], 2
jne 0x403431
xor eax, eax
jmp 0x40247b
cmp ebp, dword [esp + 0x1c]
jae 0x40245a
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
mov edx, esi
and edx, 7
or ebx, eax
cmp esi, edx
jb 0x402454
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x14], 0
cmp dword [esp + 0x14], 4
jae 0x402b96
test esi, esi
je 0x402b3f
cmp esi, 8
jae 0x4024f9
cmp ebp, dword [esp + 0x1c]
jb 0x4024db
test byte [esp + 0xe8], 2
jne 0x40344b
xor eax, eax
jmp 0x4024e4
cmp ebp, dword [esp + 0x1c]
jae 0x4024c3
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x4024bd
mov ecx, dword [esp + 0xd0]
mov eax, dword [esp + 0x14]
mov byte [eax + ecx + 0x2920], bl
shr ebx, 8
sub esi, 8
inc dword [esp + 0x14]
jmp 0x4024a5
cmp ebp, dword [esp + 0x1c]
jae 0x402b45
mov dl, byte [ebp]
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0xd0]
inc ebp
inc dword [esp + 0x14]
mov byte [eax + ecx + 0x2920], dl
mov dword [esp + 0x10], ebp
jmp 0x4024a5
cmp ebp, dword [esp + 0x1c]
jae 0x402bed
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x402be3
movzx edx, bl
shr ebx, 8
mov dword [esp + 0x28], edx
sub esi, 8
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x4034ac
mov cl, byte [esp + 0x28]
mov byte [eax], cl
inc eax
dec dword [esp + 0x14]
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x14]
jmp 0x402bce
cmp ebp, dword [esp + 0x1c]
jae 0x402d38
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x14]
movsx ecx, byte [ecx + 0x42410c]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x402d2e
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0xd0]
mov edi, 1
shl edi, cl
dec edi
and edi, ebx
mov dword [edx + eax*4 + 0x2c], edi
movsx ecx, byte [eax + 0x42410c]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x424100]
add dword [edx + eax*4 + 0x2c], ecx
inc eax
mov dword [esp + 0x14], eax
jmp 0x402d1a
cmp ebp, dword [esp + 0x1c]
jae 0x402d8e
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 3
jb 0x402d84
mov ecx, dword [esp + 0x14]
mov edi, dword [esp + 0xd0]
movzx edx, byte [ecx + 0x4240ec]
mov eax, ebx
and eax, 7
shr ebx, 3
sub esi, 3
inc ecx
mov byte [edx + edi + 0x1b80], al
mov dword [esp + 0x14], ecx
jmp 0x402d76
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x4030a4
jmp 0x4030ba
cmp ebp, dword [esp + 0x1c]
jae 0x403190
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, dword [esp + 0x2c]
jb 0x403186
mov edx, dword [esp + 0x28]
mov ebp, dword [esp + 0xd0]
mov ecx, dword [esp + 0x2c]
movsx eax, byte [edx + 0x4240d8]
mov edi, 1
shl edi, cl
sub esi, ecx
dec edi
and edi, ebx
shr ebx, cl
add edi, eax
cmp edx, 0x10
jne 0x4031a5
mov ecx, dword [esp + 0x14]
movzx eax, byte [ecx + ebp + 0x2923]
jmp 0x4031a7
cmp ebp, dword [esp + 0x1c]
jae 0x402a40
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x4029de
jmp 0x402a74
cmp ebp, dword [esp + 0x1c]
jae 0x40324f
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x403245
mov eax, 1
shl eax, cl
sub esi, ecx
dec eax
and eax, ebx
shr ebx, cl
add dword [esp + 0x14], eax
cmp esi, 0xf
jae 0x4032f4
mov ecx, dword [esp + 0x1c]
sub ecx, ebp
cmp ecx, 2
jge 0x4032d2
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0xf00]
test eax, eax
jl 0x403264
sar eax, 9
test eax, eax
je 0x403296
cmp esi, eax
jae 0x4032f4
jmp 0x403296
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x4032a0
jmp 0x4032b6
cmp ebp, dword [esp + 0x1c]
jae 0x403370
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x403366
mov edx, dword [esp + 0x28]
mov eax, 1
shl eax, cl
sub esi, ecx
dec eax
and eax, ebx
shr ebx, cl
add edx, eax
mov dword [esp + 0x28], edx
mov edi, dword [esp + 0x20]
mov ecx, dword [esp + 0xdc]
mov eax, edi
sub eax, ecx
mov dword [esp + 0x44], eax
cmp edx, eax
jbe 0x4027f0
test byte [esp + 0xe8], 4
jne case.0x40226f.37
sub eax, edx
and eax, dword [esp + 0x3c]
add eax, ecx
mov ecx, edi
cmp edi, eax
ja 0x402800
mov ecx, eax
mov edi, dword [esp + 0x14]
add ecx, edi
cmp ecx, dword [esp + 0x34]
ja 0x4028ae
cmp edi, 9
jb 0x403385
cmp edi, edx
ja 0x403385
mov ecx, edi
mov edi, dword [esp + 0x20]
and ecx, 0xfffffff8
add ecx, eax
lea esp, [esp]
mov edx, dword [eax]
mov dword [edi], edx
mov edx, dword [eax + 4]
mov dword [edi + 4], edx
add eax, 8
add edi, 8
cmp eax, ecx
jb 0x402830
mov ecx, dword [esp + 0x14]
and ecx, 7
mov dword [esp + 0x20], edi
mov dword [esp + 0x14], ecx
cmp ecx, 3
jae 0x403390
test ecx, ecx
je 0x4028bd
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jbe 0x402873
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x4028bd
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x4033e3
mov edi, dword [esp + 0x44]
mov ecx, dword [esp + 0xdc]
mov edx, edi
sub edx, dword [esp + 0x28]
inc eax
and edx, dword [esp + 0x3c]
inc edi
mov dl, byte [edx + ecx]
mov byte [eax - 1], dl
mov dword [esp + 0x20], eax
mov dword [esp + 0x44], edi
mov eax, dword [esp + 0x14]
mov ecx, eax
dec eax
mov dword [esp + 0x14], eax
test ecx, ecx
jne case.0x40226f.53
mov eax, dword [esp + 0x1c]
sub eax, ebp
cmp eax, 4
jl 0x4029d0
mov edx, dword [esp + 0x34]
sub edx, dword [esp + 0x20]
cmp edx, 2
jl 0x4029d0
cmp esi, 0xf
jae 0x4028f6
movzx eax, word [ebp]
mov ecx, esi
shl eax, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov ecx, ebx
and ecx, 0x3ff
movsx eax, word [edx + ecx*2 + 0x160]
test eax, eax
jl 0x402918
mov ecx, eax
sar ecx, 9
jmp 0x402938
mov ecx, 0xa
lea ecx, [ecx]
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x402920
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
test eax, 0x100
jne 0x402aee
cmp esi, 0xf
jae 0x402964
movzx eax, word [ebp]
mov ecx, esi
shl eax, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov ecx, ebx
and ecx, 0x3ff
movsx eax, word [edx + ecx*2 + 0x160]
test eax, eax
jl 0x402986
mov ecx, eax
sar ecx, 9
jmp 0x4029a8
mov ecx, 0xa
jmp 0x402990
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x402990
mov dl, byte [esp + 0x14]
mov edi, dword [esp + 0x20]
shr ebx, cl
sub esi, ecx
mov byte [edi], dl
test eax, 0x100
jne 0x402ae5
mov byte [edi + 1], al
add edi, 2
mov dword [esp + 0x20], edi
jmp 0x4028bd
cmp esi, 0xf
jae 0x402a74
cmp eax, 2
jge 0x402a55
mov ecx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [ecx + eax*2 + 0x160]
test eax, eax
jl 0x402a05
sar eax, 9
test eax, eax
je 0x402a36
cmp esi, eax
jae 0x402a74
jmp 0x402a36
cmp esi, 0xa
jbe 0x402a36
mov ecx, 0xa
nop
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x960]
test eax, eax
jge 0x402a74
lea edx, [ecx + 1]
cmp esi, edx
jae 0x402a10
cmp ebp, dword [esp + 0x1c]
jb 0x4026d1
test byte [esp + 0xe8], 2
jne 0x4033fd
xor eax, eax
jmp 0x4026da
movzx eax, byte [ebp + 1]
movzx edx, byte [ebp]
lea ecx, [esi + 8]
shl eax, cl
mov ecx, esi
shl edx, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or eax, edx
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [edx + eax*2 + 0x160]
test eax, eax
jl 0x402a9a
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x402ab8
mov ecx, 0xa
nop
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x402aa0
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
cmp eax, 0x100
jae 0x402aee
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x40383e
mov cl, byte [esp + 0x14]
mov byte [eax], cl
inc eax
mov dword [esp + 0x20], eax
jmp 0x4028bd
inc edi
mov dword [esp + 0x20], edi
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x14]
and eax, 0x1ff
mov dword [esp + 0x14], eax
cmp eax, 0x100
jne 0x40321f
mov edx, dword [esp + 0xd0]
test byte [edx + 0x14], 1
jne 0x4035f2
cmp esi, 3
jae 0x40242b
cmp ebp, dword [esp + 0x1c]
jb 0x402410
test byte [esp + 0xe8], 2
jne 0x403417
xor eax, eax
jmp 0x402419
cmp ebp, dword [esp + 0x1c]
jb 0x402b71
test byte [esp + 0xe8], 2
mov edx, dword [esp + 0xd0]
jne 0x403465
mov ecx, dword [esp + 0x14]
inc dword [esp + 0x14]
mov byte [ecx + edx + 0x2920], 0
mov ecx, edx
jmp 0x4024a5
mov ecx, dword [esp + 0x14]
mov al, byte [ebp]
mov edx, dword [esp + 0xd0]
inc ebp
inc dword [esp + 0x14]
mov byte [ecx + edx + 0x2920], al
mov dword [esp + 0x10], ebp
mov ecx, edx
jmp 0x4024a5
movzx eax, byte [ecx + 0x2921]
movzx edx, byte [ecx + 0x2920]
shl eax, 8
or eax, edx
movzx edx, byte [ecx + 0x2923]
movzx ecx, byte [ecx + 0x2922]
shl edx, 8
or edx, ecx
xor edx, 0xffff
mov dword [esp + 0x14], eax
cmp eax, edx
jne case.0x40226f.39
test eax, eax
je 0x402b06
test esi, esi
je 0x402c02
cmp esi, 8
jae 0x402562
cmp ebp, dword [esp + 0x1c]
jb 0x402547
test byte [esp + 0xe8], 2
jne 0x403492
xor eax, eax
jmp 0x402550
cmp dword [esp + 0x14], 0
je 0x402b06
mov edx, dword [esp + 0x20]
cmp edx, dword [esp + 0x34]
jae 0x4034c6
cmp ebp, dword [esp + 0x1c]
jae 0x4034e0
mov eax, dword [esp + 0x34]
sub eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x1c]
sub ecx, ebp
mov edx, eax
cmp eax, ecx
jb 0x402c3b
mov edx, ecx
mov edi, dword [esp + 0x14]
cmp edx, edi
jae 0x402c4b
mov edi, eax
cmp eax, ecx
jb 0x402c4b
mov edi, ecx
mov eax, dword [esp + 0x20]
push edi
push ebp
push eax
call sub.msvcrt.dll_memcpy
add dword [esp + 0x2c], edi
add ebp, edi
add esp, 0xc
sub dword [esp + 0x14], edi
mov dword [esp + 0x10], ebp
jmp 0x402c02
cmp eax, 3
je case.0x40226f.10
cmp eax, 1
jne 0x402d14
mov eax, 0x5050505
mov dword [ecx + 0x2c], 0x120
mov dword [ecx + 0x30], 0x20
mov dword [ecx + 0xde0], eax
mov dword [ecx + 0xde4], eax
mov dword [ecx + 0xde8], eax
mov dword [ecx + 0xdec], eax
mov dword [ecx + 0xdf0], eax
push 0x90
lea edi, [ecx + 0x40]
mov dword [ecx + 0xdf4], eax
push 8
mov dword [ecx + 0xdf8], eax
push edi
mov dword [ecx + 0xdfc], eax
call sub.msvcrt.dll_memset
push 0x70
add edi, 0x90
push 9
push edi
call sub.msvcrt.dll_memset
add edi, 0x70
mov eax, 0x7070707
mov dword [edi], eax
mov dword [edi + 4], eax
mov dword [edi + 8], eax
mov dword [edi + 0xc], eax
mov dword [edi + 0x10], eax
mov dword [edi + 0x14], eax
add esp, 0x18
add edi, 0x18
mov eax, 0x8080808
mov dword [edi], eax
mov dword [edi + 4], eax
mov edi, dword [esp + 0xd0]
jmp 0x402daa
xor eax, eax
mov dword [esp + 0x14], eax
cmp eax, 3
jae 0x402d4d
movsx ecx, byte [eax + 0x42410c]
cmp esi, ecx
jae 0x4025c4
cmp ebp, dword [esp + 0x1c]
jb 0x40259f
test byte [esp + 0xe8], 2
jne 0x403538
xor eax, eax
jmp 0x4025a8
mov edi, dword [esp + 0xd0]
push 0x120
lea edx, [edi + 0x1b80]
push 0
push edx
call sub.msvcrt.dll_memset
mov dword [esp + 0x20], 0
mov ecx, dword [esp + 0x20]
add esp, 0xc
cmp ecx, dword [edi + 0x34]
jae 0x402da3
cmp esi, 3
jae 0x40262d
cmp ebp, dword [esp + 0x1c]
jb 0x402607
test byte [esp + 0xe8], 2
jne 0x403552
xor eax, eax
jmp 0x402610
mov dword [edi + 0x34], 0x13
mov eax, dword [edi + 0x18]
test eax, eax
jl 0x4028bd
mov edi, dword [esp + 0xd0]
imul eax, eax, 0xda0
lea ebp, [eax + edi + 0x40]
push 0x40
lea eax, [esp + 0x90]
push 0
push eax
mov dword [esp + 0x44], ebp
call sub.msvcrt.dll_memset
push 0x800
lea ecx, [ebp + 0x120]
push 0
push ecx
call sub.msvcrt.dll_memset
push 0x480
lea edx, [ebp + 0x920]
push 0
push edx
call sub.msvcrt.dll_memset
mov ecx, dword [edi + 0x18]
mov ecx, dword [edi + ecx*4 + 0x2c]
xor edx, edx
add esp, 0x24
xor eax, eax
mov dword [esp + 0x40], ecx
cmp ecx, edx
jbe 0x402e37
mov ecx, dword [edi + 0x18]
mov edi, dword [edi + ecx*4 + 0x2c]
mov edi, edi
movzx ecx, byte [eax + ebp]
inc dword [esp + ecx*4 + 0x8c]
lea ecx, [esp + ecx*4 + 0x8c]
inc eax
cmp eax, edi
jb 0x402e20
mov dword [esp + 0x24], edx
xor ecx, ecx
mov dword [esp + 0x4c], edx
mov dword [esp + 0x48], edx
mov dword [esp + 0x18], edx
mov dword [esp + 0x30], edx
mov eax, 4
mov edx, dword [esp + eax + 0x8c]
add dword [esp + 0x24], edx
add ecx, edx
mov edx, dword [esp + eax + 0x90]
add dword [esp + 0x30], edx
add ecx, ecx
mov dword [esp + eax + 0x4c], ecx
add ecx, edx
mov edx, dword [esp + eax + 0x94]
add dword [esp + 0x18], edx
add ecx, ecx
mov dword [esp + eax + 0x50], ecx
add ecx, edx
add ecx, ecx
mov dword [esp + eax + 0x54], ecx
add eax, 0xc
cmp eax, 0x3c
jbe 0x402e52
mov eax, dword [esp + 0x18]
mov edx, dword [esp + 0x30]
add edx, eax
mov eax, dword [esp + 0x24]
add eax, edx
cmp ecx, 0x10000
je 0x402eb4
cmp eax, 1
ja case.0x40226f.35
cmp dword [esp + 0x40], 0
mov dword [esp + 0x30], 0xffffffff
mov dword [esp + 0x18], 0
jbe 0x402ff7
nop
mov ecx, dword [esp + 0x18]
movzx ecx, byte [ecx + ebp]
xor eax, eax
test ecx, ecx
je 0x402fda
mov edx, dword [esp + ecx*4 + 0x48]
lea edi, [edx + 1]
mov dword [esp + ecx*4 + 0x48], edi
mov edi, ecx
jbe 0x402f05
mov ebp, edx
and ebp, 1
add eax, eax
dec edi
or eax, ebp
shr edx, 1
test edi, edi
ja 0x402ef1
mov ebp, dword [esp + 0x38]
mov edi, dword [esp + 0x30]
cmp ecx, 0xa
ja 0x402f57
mov edx, ecx
shl edx, 9
or edx, dword [esp + 0x18]
movzx edx, dx
mov dword [esp + 0x40], edx
cmp eax, 0x400
jae 0x402fda
mov edx, 1
shl edx, cl
lea ecx, [ebp + eax*2 + 0x120]
mov ebp, dword [esp + 0x40]
lea edi, [edx + edx]
mov edi, edi
mov word [ecx], bp
add eax, edx
add ecx, edi
cmp eax, 0x400
jb 0x402f40
mov ebp, dword [esp + 0x38]
jmp 0x402fda
mov edx, eax
and edx, 0x3ff
lea edx, [ebp + edx*2 + 0x120]
mov dword [esp + 0x40], edx
movsx edx, word [edx]
test edx, edx
jne 0x402f81
mov edx, dword [esp + 0x40]
mov word [edx], di
mov edx, edi
sub edi, 2
mov dword [esp + 0x30], edi
shr eax, 9
cmp ecx, 0xb
jbe 0x402fc6
add ecx, 0xfffffff5
mov dword [esp + 0x24], ecx
shr eax, 1
mov ecx, eax
and ecx, 1
sub edx, ecx
mov ecx, 0x48f
sub ecx, edx
movzx edx, word [ebp + ecx*2]
lea ecx, [ebp + ecx*2]
test dx, dx
jne 0x402fb8
mov word [ecx], di
mov edx, edi
sub edi, 2
jmp 0x402fbb
movsx edx, dx
sub dword [esp + 0x24], 1
jne 0x402f90
mov dword [esp + 0x30], edi
shr eax, 1
and eax, 1
sub eax, edx
mov dx, word [esp + 0x18]
mov word [ebp + eax*2 + 0x91e], dx
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0xd0]
mov edx, dword [ecx + 0x18]
inc eax
mov dword [esp + 0x18], eax
cmp eax, dword [ecx + edx*4 + 0x2c]
jb 0x402ed0
mov edi, dword [esp + 0xd0]
cmp dword [edi + 0x18], 2
jne 0x40320c
mov dword [esp + 0x14], 0
mov eax, dword [edi + 0x30]
add eax, dword [edi + 0x2c]
mov ecx, dword [esp + 0x14]
cmp ecx, eax
jae 0x4031cd
cmp esi, 0xf
jae 0x4030f4
mov ecx, dword [esp + 0x1c]
mov eax, dword [esp + 0x10]
sub ecx, eax
cmp ecx, 2
jge 0x4030d6
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0x1ca0]
test eax, eax
jl 0x40306a
sar eax, 9
test eax, eax
je 0x40309a
cmp esi, eax
jae 0x4030f4
jmp 0x40309a
cmp esi, 0xa
jbe 0x40309a
mov ecx, 0xa
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x24a0]
test eax, eax
jge 0x4030f4
lea edx, [ecx + 1]
cmp esi, edx
jae 0x403074
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x4030b6
test byte [esp + 0xe8], 2
jne 0x40358a
xor eax, eax
jmp 0x4030c2
mov ecx, dword [esp + 0x10]
movzx eax, byte [ecx]
inc ecx
mov dword [esp + 0x10], ecx
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x40303e
jmp 0x4030f4
movzx edx, byte [eax + 1]
movzx edi, byte [eax]
lea ecx, [esi + 8]
shl edx, cl
mov ecx, esi
shl edi, cl
add eax, 2
mov dword [esp + 0x10], eax
or edx, edi
or ebx, edx
add esi, 0x10
mov ebp, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [ebp + eax*2 + 0x1ca0]
test eax, eax
jl 0x40311a
mov edi, eax
sar edi, 9
and eax, 0x1ff
jmp 0x40313a
mov edi, 0xa
nop
mov ecx, edi
mov edx, ebx
shr edx, cl
not eax
inc edi
and edx, 1
add edx, eax
movsx eax, word [ebp + edx*2 + 0x24a0]
test eax, eax
jl 0x403120
mov ecx, edi
mov edx, eax
shr ebx, cl
sub esi, edi
mov dword [esp + 0x28], edx
cmp eax, 0x10
jae 0x403162
mov ecx, dword [esp + 0x14]
mov byte [ecx + ebp + 0x2924], al
inc ecx
mov dword [esp + 0x14], ecx
mov edi, ebp
jmp 0x403010
jne 0x40316f
cmp dword [esp + 0x14], 0
je case.0x40226f.17
movsx ecx, byte [eax + 0x4240d4]
mov dword [esp + 0x2c], ecx
cmp esi, ecx
jae 0x402696
mov ebp, dword [esp + 0x10]
cmp ebp, dword [esp + 0x1c]
jb 0x40266b
test byte [esp + 0xe8], 2
jne 0x4035c0
xor eax, eax
jmp 0x402674
xor eax, eax
mov edx, dword [esp + 0x14]
push edi
push eax
lea eax, [edx + ebp + 0x2924]
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
add dword [esp + 0x14], edi
mov edi, dword [esp + 0xd0]
jmp 0x403010
mov eax, dword [edi + 0x2c]
mov edx, dword [edi + 0x30]
add edx, eax
cmp edx, ecx
jne case.0x40226f.21
push eax
lea eax, [edi + 0x2924]
push eax
lea ecx, [edi + 0x40]
push ecx
call sub.msvcrt.dll_memcpy
mov edx, dword [edi + 0x30]
mov eax, dword [edi + 0x2c]
push edx
lea ecx, [eax + edi + 0x2924]
push ecx
lea edx, [edi + 0xde0]
push edx
call sub.msvcrt.dll_memcpy
add esp, 0x18
dec dword [edi + 0x18]
mov ebp, dword [esp + 0x10]
mov edi, dword [esp + 0xd0]
jmp 0x402daa
mov ecx, dword [eax*4 + 0x423c64]
mov eax, dword [eax*4 + 0x423be4]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x14], eax
test ecx, ecx
je 0x40272b
cmp esi, ecx
jae 0x402719
cmp ebp, dword [esp + 0x1c]
jb 0x4026fb
test byte [esp + 0xe8], 2
jne 0x4037d2
xor eax, eax
jmp 0x402704
cmp esi, 0xa
jbe 0x403296
mov ecx, 0xa
mov edi, edi
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x1700]
test eax, eax
jge 0x4032f4
lea edx, [ecx + 1]
cmp esi, edx
jae 0x403270
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x4032b2
test byte [esp + 0xe8], 2
jne 0x4037ec
xor eax, eax
jmp 0x4032be
mov ecx, dword [esp + 0x10]
movzx eax, byte [ecx]
inc ecx
mov dword [esp + 0x10], ecx
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x402743
jmp 0x4032f4
mov eax, dword [esp + 0x10]
movzx edx, byte [eax + 1]
movzx edi, byte [eax]
lea ecx, [esi + 8]
shl edx, cl
mov ecx, esi
shl edi, cl
add eax, 2
mov dword [esp + 0x10], eax
or edx, edi
or ebx, edx
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [edx + eax*2 + 0xf00]
test eax, eax
jl 0x40331a
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x403338
mov ecx, 0xa
nop
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x1700]
test eax, eax
jl 0x403320
mov edx, dword [eax*4 + 0x423f68]
mov ebp, dword [esp + 0x10]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x423ee8]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x28], edx
test ecx, ecx
je 0x4027cb
cmp esi, ecx
jae 0x4027b7
cmp ebp, dword [esp + 0x1c]
jb 0x402795
test byte [esp + 0xe8], 2
jne 0x40380a
xor eax, eax
jmp 0x40279e
mov edi, dword [esp + 0x20]
mov ecx, dword [esp + 0x14]
lea ecx, [ecx]
movzx edx, byte [eax]
mov byte [edi], dl
movzx edx, byte [eax + 1]
mov byte [edi + 1], dl
movzx edx, byte [eax + 2]
mov byte [edi + 2], dl
sub ecx, 3
add edi, 3
add eax, 3
cmp ecx, 2
jg 0x403390
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], edi
test ecx, ecx
jle 0x4028bd
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jle 0x402873
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x4028bd
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 0x35
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x17
jmp case.0x40226f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 3
jmp case.0x40226f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 5
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 6
jmp case.0x40226f.4
mov dword [esp + 0x18], 1
mov dword [edx], 7
jmp case.0x40226f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x27
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x33
jmp case.0x40226f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [edx], 0x34
jmp case.0x40226f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 9
jmp case.0x40226f.4
test byte [esp + 0xe8], 2
je case.0x40226f.40
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x26
jmp case.0x40226f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x28
jmp case.0x40226f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0xa
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0xb
jmp case.0x40226f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0xe
jmp case.0x40226f.4
mov eax, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x23
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x10
jmp case.0x40226f.4
mov edx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x11
jmp case.0x40226f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x12
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x15
jmp case.0x40226f.4
test byte [esp + 0xe8], 1
jne 0x40386d
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0
mov dword [edx], 0x22
mov eax, dword [esp + 0xd0]
mov ecx, dword [esp + 0x28]
mov edx, dword [esp + 0x14]
sub ebp, dword [esp + 0xd4]
mov dword [eax + 0x20], ecx
mov ecx, dword [esp + 0x2c]
mov dword [eax + 0x24], edx
mov edx, dword [esp + 0x44]
mov dword [eax + 4], esi
mov esi, dword [esp + 0xe0]
mov dword [eax + 0x28], ecx
mov ecx, dword [esp + 0xe4]
mov dword [eax + 0x38], ebx
mov dword [eax + 0x3c], edx
mov eax, dword [esp + 0xd8]
mov dword [eax], ebp
mov eax, dword [esp + 0x20]
sub eax, esi
test byte [esp + 0xe8], 9
mov dword [ecx], eax
je 0x4037c3
cmp dword [esp + 0x18], 0
jl 0x4037c3
mov ebp, eax
mov eax, dword [esp + 0xd0]
movzx ecx, word [eax + 0x1c]
movzx edi, word [eax + 0x1e]
mov eax, 0x5e6ea9af
mul ebp
shr edx, 0xb
imul edx, edx, 0x15b0
mov ebx, ebp
sub ebx, edx
mov dword [esp + 0x38], ebp
test ebp, ebp
je 0x403796
mov edi, edi
xor edx, edx
cmp ebx, 7
jbe 0x40370c
lea eax, [edx + 7]
lea ebx, [ebx]
movzx ebp, byte [esi]
add ecx, ebp
movzx ebp, byte [esi + 1]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 2]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 3]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 4]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 5]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 6]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 7]
add edi, ecx
add ecx, ebp
add eax, 8
add edi, ecx
add edx, 8
add esi, 8
cmp eax, ebx
jb 0x4036c0
xor eax, eax
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], eax
mov eax, ebx
sub eax, edx
cmp eax, 2
jl 0x40374b
mov eax, ebx
sub eax, edx
sub eax, 2
shr eax, 1
inc eax
lea edx, [edx + eax*2]
lea esp, [esp]
movzx ebp, byte [esi]
add ecx, ebp
movzx ebp, byte [esi + 1]
add dword [esp + 0x3c], ecx
add ecx, ebp
add dword [esp + 0x24], ecx
add esi, 2
sub eax, 1
jne 0x403730
cmp edx, ebx
jae 0x403757
movzx edx, byte [esi]
add ecx, edx
add edi, ecx
inc esi
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x3c]
add eax, edx
add edi, eax
mov eax, 0x80078071
mul ecx
shr edx, 0xf
imul edx, edx, 0xffff000f
add ecx, edx
mov eax, 0x80078071
mul edi
shr edx, 0xf
imul edx, edx, 0xffff000f
add edi, edx
sub dword [esp + 0x38], ebx
mov ebx, 0x15b0
jne 0x4036b0
mov eax, dword [esp + 0xd0]
shl edi, 0x10
add ecx, edi
cmp dword [esp + 0x18], 0
mov dword [eax + 0x1c], ecx
jne 0x4037c3
test byte [esp + 0xe8], 1
je 0x4037c3
cmp ecx, dword [eax + 0x10]
je 0x4037c3
mov dword [esp + 0x18], 0xfffffffe
mov eax, dword [esp + 0x18]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0xbc
ret
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x19
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x1a
jmp case.0x40226f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0x1b
jmp case.0x40226f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x25
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [ecx], 0x18
jmp case.0x40226f.4
test byte [esp + 0xe8], 2
jne 0x403883
xor eax, eax
mov ecx, esi
shl eax, cl
or ebx, eax
add esi, 8
mov edx, esi
and edx, 7
cmp esi, edx
jae 0x40389d
cmp ebp, dword [esp + 0x1c]
jae 0x403858
movzx eax, byte [ebp]
inc ebp
jmp 0x403864
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x20
jmp case.0x40226f.4
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], 0
jmp 0x4038f6
cmp ebp, dword [esp + 0x1c]
jae 0x403910
movzx eax, byte [ebp]
inc ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x40390a
movzx eax, bl
shr ebx, 8
sub esi, 8
jmp 0x4038e0
test byte [esp + 0xe8], 2
jne 0x40392b
xor eax, eax
mov ecx, dword [esp + 0xd0]
mov edx, dword [ecx + 0x10]
shl edx, 8
or edx, eax
inc dword [esp + 0x14]
mov dword [ecx + 0x10], edx
cmp dword [esp + 0x14], 4
jae case.0x40226f.34
test esi, esi
je case.0x40226f.42
cmp esi, 8
jae 0x4038c9
cmp ebp, dword [esp + 0x1c]
jb 0x4038b6
test byte [esp + 0xe8], 2
jne 0x403945
xor eax, eax
jmp 0x4038bb
cmp ebp, dword [esp + 0x1c]
jae 0x4038d4
movzx eax, byte [ebp]
inc ebp
jmp 0x4038e0
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x2a
jmp case.0x40226f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x29
jmp case.0x40226f.4
mov dword [ebx], 0
mov dword [edi], 0
pop edi
pop esi
pop ebp
mov eax, 0xfffffffd
pop ebx
add esp, 0xbc
ret