Function at 0x408e40
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x38
mov eax, dword [esp + 0x4c]
mov ecx, dword [esp + 0x50]
mov esi, eax
movzx ebx, ax
shr esi, 0x10
cmp dword [esp + 0x54], 1
mov dword [esp + 0x2c], esi
je 0x4091ad
test ecx, ecx
je 0x4091e0
cmp dword [esp + 0x54], 0xf
ja 0x408ed2
mov edx, dword [esp + 0x54]
test edx, edx
je 0x408e9a
mov edx, dword [esp + 0x54]
mov eax, dword [esp + 0x2c]
add edx, ecx
add ecx, 1
movzx esi, byte [ecx - 1]
add ebx, esi
add eax, ebx
cmp ecx, edx
jne 0x408e87
mov dword [esp + 0x2c], eax
lea eax, [ebx - 0xfff1]
cmp ebx, 0xfff1
mov edx, 0x80078071
mov edi, dword [esp + 0x2c]
cmovae ebx, eax
mov eax, dword [esp + 0x2c]
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub edi, eax
mov eax, edi
shl eax, 0x10
or eax, ebx
add esp, 0x38
pop ebx
pop esi
pop edi
pop ebp
ret
cmp dword [esp + 0x54], 0x15af
mov ebp, ebx
mov eax, ecx
jbe 0x4091ea
sub dword [esp + 0x54], 0x15b0
lea esi, [eax + 0x15b0]
mov dword [esp + 0x30], esi
lea esi, [esi]
lea edi, [edi]
movzx edx, byte [eax]
add eax, 0x10
lea edi, [ebp + edx]
movzx edx, byte [eax - 0xf]
mov dword [esp], edi
add edx, edi
mov edi, edx
movzx edx, byte [eax - 0xe]
mov dword [esp + 4], edi
mov esi, edx
movzx edx, byte [eax - 0xd]
add esi, edi
mov dword [esp + 8], esi
mov ebx, edx
movzx edx, byte [eax - 0xc]
add ebx, esi
mov dword [esp + 0xc], ebx
mov ecx, edx
movzx edx, byte [eax - 0xb]
add ecx, ebx
mov dword [esp + 0x10], ecx
mov ebp, edx
movzx edx, byte [eax - 0xa]
add ebp, ecx
mov dword [esp + 0x14], ebp
add edx, ebp
movzx ebp, byte [eax - 1]
mov edi, edx
movzx edx, byte [eax - 9]
mov dword [esp + 0x18], edi
add edx, edi
movzx edi, byte [eax - 5]
mov esi, edx
movzx edx, byte [eax - 8]
mov dword [esp + 0x1c], esi
add edx, esi
movzx esi, byte [eax - 4]
mov ebx, edx
movzx edx, byte [eax - 7]
mov dword [esp + 0x20], ebx
add edx, ebx
movzx ebx, byte [eax - 3]
mov ecx, edx
movzx edx, byte [eax - 6]
mov dword [esp + 0x24], ecx
add edx, ecx
movzx ecx, byte [eax - 2]
add edi, edx
mov dword [esp + 0x28], edx
mov edx, dword [esp + 4]
add edx, dword [esp]
add esi, edi
add edx, dword [esp + 8]
add ebx, esi
add edx, dword [esp + 0xc]
add ecx, ebx
add edx, dword [esp + 0x10]
add ebp, ecx
add edx, dword [esp + 0x14]
add edx, dword [esp + 0x18]
add edx, dword [esp + 0x1c]
add edx, dword [esp + 0x20]
add edx, dword [esp + 0x24]
add edx, dword [esp + 0x28]
add edx, edi
add edx, esi
add ebx, edx
add ecx, ebx
add ecx, ebp
add dword [esp + 0x2c], ecx
cmp eax, dword [esp + 0x30]
jne 0x408f00
mov eax, 0x80078071
mov edi, dword [esp + 0x2c]
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub ebp, eax
mov eax, 0x80078071
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub edi, eax
cmp dword [esp + 0x54], 0x15af
mov eax, dword [esp + 0x30]
mov dword [esp + 0x2c], edi
ja 0x408ee4
mov eax, dword [esp + 0x54]
mov ebx, ebp
test eax, eax
je 0x40919c
cmp dword [esp + 0x54], 0xf
jbe 0x4091f3
mov eax, dword [esp + 0x54]
mov edx, dword [esp + 0x30]
mov dword [esp + 4], eax
movzx eax, byte [edx]
sub dword [esp + 4], 0x10
add edx, 0x10
lea esi, [ebx + eax]
movzx eax, byte [edx - 0xf]
mov dword [esp + 8], esi
add eax, esi
mov esi, eax
movzx eax, byte [edx - 0xe]
mov dword [esp + 0xc], esi
mov edi, eax
movzx eax, byte [edx - 0xd]
add edi, esi
mov dword [esp + 0x10], edi
mov ecx, eax
movzx eax, byte [edx - 0xc]
add ecx, edi
movzx edi, byte [edx - 7]
mov dword [esp + 0x14], ecx
mov ebx, eax
movzx eax, byte [edx - 0xb]
add ebx, ecx
movzx ecx, byte [edx - 5]
mov dword [esp + 0x18], ebx
mov ebp, eax
movzx eax, byte [edx - 0xa]
add ebp, ebx
mov dword [esp + 0x1c], ebp
mov esi, eax
movzx eax, byte [edx - 9]
add esi, ebp
movzx ebp, byte [edx - 8]
mov dword [esp + 0x20], esi
add eax, esi
movzx esi, byte [edx - 6]
add ebp, eax
mov dword [esp + 0x24], eax
movzx eax, byte [edx - 4]
add edi, ebp
add esi, edi
add ecx, esi
lea ebx, [ecx + eax]
movzx eax, byte [edx - 3]
mov dword [esp], ebx
mov ebx, dword [esp]
add ebx, eax
movzx eax, byte [edx - 2]
mov dword [esp + 0x28], ebx
add eax, ebx
movzx ebx, byte [edx - 1]
mov dword [esp + 0x34], eax
add ebx, eax
mov eax, dword [esp + 0xc]
add eax, dword [esp + 8]
add eax, dword [esp + 0x10]
add eax, dword [esp + 0x14]
add eax, dword [esp + 0x18]
add eax, dword [esp + 0x1c]
add eax, dword [esp + 0x20]
add eax, dword [esp + 0x24]
add eax, ebp
add eax, edi
add eax, esi
add eax, ecx
add eax, dword [esp]
add eax, dword [esp + 0x28]
add eax, dword [esp + 0x34]
add eax, ebx
add dword [esp + 0x2c], eax
cmp dword [esp + 4], 0xf
ja 0x409047
mov eax, dword [esp + 0x54]
mov esi, dword [esp + 0x30]
mov edx, dword [esp + 0x54]
sub eax, 0x10
and eax, 0xfffffff0
and edx, 0xf
lea eax, [esi + eax + 0x10]
test edx, edx
mov dword [esp + 0x30], eax
lea eax, [edx - 1]
je 0x409173
mov edi, dword [esp + 0x30]
mov ecx, dword [esp + 0x2c]
lea edx, [edi + eax + 1]
mov eax, edi
add eax, 1
movzx esi, byte [eax - 1]
add ebx, esi
add ecx, ebx
cmp eax, edx
jne 0x409160
mov dword [esp + 0x2c], ecx
mov eax, ebx
mov ecx, 0x80078071
mul ecx
mov eax, edx
shr eax, 0xf
imul eax, eax, 0xfff1
sub ebx, eax
mov eax, dword [esp + 0x2c]
mul ecx
shr edx, 0xf
imul eax, edx, 0xfff1
sub dword [esp + 0x2c], eax
mov eax, dword [esp + 0x2c]
add esp, 0x38
shl eax, 0x10
or eax, ebx
pop ebx
pop esi
pop edi
pop ebp
ret
movzx eax, byte [ecx]
add eax, ebx
lea edx, [eax - 0xfff1]
cmp eax, 0xfff1
cmovae eax, edx
mov edx, esi
add edx, eax
lea ecx, [edx - 0xfff1]
cmp edx, 0xfff1
cmovae edx, ecx
add esp, 0x38
shl edx, 0x10
pop ebx
or eax, edx
pop esi
pop edi
pop ebp
ret
mov eax, 1
jmp 0x408eca
mov dword [esp + 0x30], ecx
jmp 0x40903b
mov eax, dword [esp + 0x54]
sub eax, 1
jmp 0x409152