Function at 0x6515d0
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
push ebx
push edi
push esi
push eax
mov ebx, dword [esp + 0x20]
mov edi, dword [esp + 0x1c]
mov ecx, dword [esp + 0x18]
movzx esi, cx
shr ecx, 0x10
cmp ebx, 1
jne 0x65134c
movzx eax, byte [edi]
lea edx, [eax + esi]
cmp edx, 0xfff0
lea esi, [eax + esi - 0xfff1]
cmovbe esi, edx
lea edx, [esi + ecx]
cmp edx, 0xfff0
lea eax, [esi + ecx + 0xf]
cmovbe eax, edx
shl eax, 0x10
or eax, esi
jmp 0x6515c5
mov eax, 1
test edi, edi
je 0x6515c5
cmp ebx, 0x10
jae 0x6513a8
test ebx, ebx
je 0x65137b
nop word cs:[eax + eax]
movzx eax, byte [edi]
inc edi
add esi, eax
add ecx, esi
dec ebx
jne 0x651370
lea edi, [esi - 0xfff1]
cmp esi, 0xfff0
cmovbe edi, esi
mov edx, 0x80078071
mov eax, ecx
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, edi
jmp 0x6515c3
cmp ebx, 0x15af
jbe 0x6514da
mov ebp, 0x80078071
nop dword [eax]
add ebx, 0xffffea50
mov eax, 0xffffea50
nop dword [eax + eax]
movzx edx, byte [edi + eax + 0x15b0]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b1]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b2]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b3]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b4]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b5]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b6]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b7]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b8]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b9]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15ba]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bb]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15bc]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bd]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15be]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bf]
add esi, edx
add ecx, esi
add eax, 0x10
jne 0x6513d0
add edi, 0x15b0
mov eax, esi
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
cmp ebx, 0x15af
ja 0x6513c0
test ebx, ebx
je 0x6515be
cmp ebx, 0x10
jb 0x651590
mov edx, edi
lea ebp, [ebx - 0x10]
mov dword [esp], ebp
and ebp, 0xfffffff0
lea edi, [ebp + edx + 0x10]
nop dword [eax]
add ebx, 0xfffffff0
movzx eax, byte [edx]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 1]
add esi, eax
add ecx, esi
movzx eax, byte [edx + 2]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 3]
add esi, eax
add ecx, esi
movzx eax, byte [edx + 4]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 5]
add esi, eax
add ecx, esi
movzx eax, byte [edx + 6]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 7]
add esi, eax
add ecx, esi
movzx eax, byte [edx + 8]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 9]
add esi, eax
add ecx, esi
movzx eax, byte [edx + 0xa]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 0xb]
add esi, eax
add ecx, esi
movzx eax, byte [edx + 0xc]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 0xd]
add esi, eax
add ecx, esi
movzx eax, byte [edx + 0xe]
add eax, esi
add ecx, eax
movzx esi, byte [edx + 0xf]
add esi, eax
add ecx, esi
add edx, 0x10
cmp ebx, 0xf
ja 0x6514f0
mov eax, dword [esp]
sub eax, ebp
mov ebx, eax
je 0x65159b
nop word [eax + eax]
movzx eax, byte [edi]
inc edi
add esi, eax
add ecx, esi
dec ebx
jne 0x651590
mov edi, 0x80078071
mov eax, esi
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, esi
mov eax, ecx
add esp, 4
pop esi
pop edi
pop ebx
pop ebp
ret
jmp 0x651300