Function at 0x4515e0
Capabilities:
Compute adler32 checksum

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x38
mov eax, ecx
mov r11, rdx
mov qword [rsp + 0x90], r8
movzx r15d, cx
shr eax, 0x10
cmp r8, 1
mov dword [rsp + 0x14], eax
je 0x4512ea
test rdx, rdx
mov eax, 1
je 0x4512d9
cmp qword [rsp + 0x90], 0xf
jbe 0x451105
cmp qword [rsp + 0x90], 0x15af
jbe 0x4515bb
mov rax, qword [rsp + 0x90]
mov rbx, r11
sub rax, 0x15b0
mov qword [rsp + 0x20], rax
lea rax, [r11 + 0x15b0]
mov qword [rsp + 0x18], rax
movzx eax, byte [rbx]
add rbx, 0x10
movzx r14d, byte [rbx - 0xf]
movzx r13d, byte [rbx - 0xe]
movzx r12d, byte [rbx - 0xd]
add eax, r15d
movzx ebp, byte [rbx - 0xc]
add r14d, eax
movzx edi, byte [rbx - 0xb]
add r13d, r14d
movzx esi, byte [rbx - 0xa]
add eax, r14d
movzx r11d, byte [rbx - 9]
add r12d, r13d
add eax, r13d
add ebp, r12d
add eax, r12d
movzx r10d, byte [rbx - 6]
add edi, ebp
add eax, ebp
movzx r9d, byte [rbx - 5]
add esi, edi
add edi, eax
movzx r8d, byte [rbx - 4]
lea edx, [r11 + rsi]
movzx r11d, byte [rbx - 8]
add esi, edi
mov dword [rsp + 0xc], edx
add esi, dword [rsp + 0xc]
movzx r15d, byte [rbx - 1]
add r11d, edx
movzx edx, byte [rbx - 2]
mov ecx, r11d
movzx r11d, byte [rbx - 7]
mov dword [rsp + 0x10], ecx
add esi, dword [rsp + 0x10]
add r11d, ecx
movzx ecx, byte [rbx - 3]
add r10d, r11d
add r11d, esi
add r9d, r10d
add r10d, r11d
add r8d, r9d
add r9d, r10d
add ecx, r8d
add r8d, r9d
add edx, ecx
add ecx, r8d
add r15d, edx
add edx, ecx
add edx, r15d
add dword [rsp + 0x14], edx
cmp rbx, qword [rsp + 0x18]
jne 0x450ff3
mov eax, 0x80078071
mov edi, dword [rsp + 0x14]
mov r11, rbx
mul r15d
shr edx, 0xf
imul eax, edx, 0xfff1
sub r15d, eax
mov eax, 0x80078071
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub edi, eax
mov rax, qword [rsp + 0x20]
cmp qword [rsp + 0x20], 0x15af
mov dword [rsp + 0x14], edi
jbe 0x45131f
mov qword [rsp + 0x90], rax
jmp 0x450fd1
cmp qword [rsp + 0x90], 0
je 0x4512a5
movzx eax, byte [rdx]
add r15d, eax
add dword [rsp + 0x14], r15d
cmp qword [rsp + 0x90], 1
mov edi, dword [rsp + 0x14]
je 0x4512a5
movzx eax, byte [rdx + 1]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 2
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 2]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 3
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 3]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 4
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 4]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 5
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 5]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 6
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 6]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 7
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 7]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 8
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 8]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 9
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 9]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 0xa
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 0xa]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 0xb
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 0xb]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 0xc
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 0xc]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 0xd
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 0xd]
add r15d, eax
add edi, r15d
cmp qword [rsp + 0x90], 0xe
mov dword [rsp + 0x14], edi
je 0x4512a5
movzx eax, byte [rdx + 0xe]
add r15d, eax
add edi, r15d
mov dword [rsp + 0x14], edi
cmp r15d, 0xfff0
mov edx, 0x80078071
mov edi, dword [rsp + 0x14]
lea eax, [r15 - 0xfff1]
cmova r15d, eax
mov eax, dword [rsp + 0x14]
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub edi, eax
mov eax, edi
shl eax, 0x10
or eax, r15d
add rsp, 0x38
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
movzx eax, byte [rdx]
add r15d, eax
lea eax, [r15 - 0xfff1]
cmp r15d, 0xfff0
cmova r15d, eax
mov eax, dword [rsp + 0x14]
add eax, r15d
lea edx, [rax - 0xfff1]
cmp eax, 0xfff0
cmova eax, edx
shl eax, 0x10
or eax, r15d
jmp 0x4512d9
test rax, rax
je 0x4515ac
cmp rax, 0xf
jbe 0x4515c8
sub rax, 0x10
shr rax, 4
mov qword [rsp + 0x28], rax
add rax, 1
shl rax, 4
add rax, r11
mov qword [rsp + 0x18], rax
movzx eax, byte [r11]
add r11, 0x10
movzx r14d, byte [r11 - 0xf]
movzx r13d, byte [r11 - 0xe]
movzx r12d, byte [r11 - 0xd]
add eax, r15d
movzx ebp, byte [r11 - 0xc]
add r14d, eax
movzx edi, byte [r11 - 0xb]
add r13d, r14d
movzx esi, byte [r11 - 0xa]
add eax, r14d
add r12d, r13d
movzx ebx, byte [r11 - 9]
add eax, r13d
add ebp, r12d
movzx r10d, byte [r11 - 8]
add eax, r12d
add edi, ebp
movzx r9d, byte [r11 - 7]
add eax, ebp
add esi, edi
movzx r8d, byte [r11 - 6]
add eax, edi
movzx edx, byte [r11 - 5]
add ebx, esi
add eax, esi
add r10d, ebx
add eax, ebx
movzx r15d, byte [r11 - 1]
add r9d, r10d
add eax, r10d
add r8d, r9d
add eax, r9d
lea ecx, [rdx + r8]
movzx edx, byte [r11 - 4]
add eax, r8d
mov dword [rsp + 0xc], ecx
add eax, dword [rsp + 0xc]
add edx, ecx
movzx ecx, byte [r11 - 3]
mov dword [rsp + 0x10], edx
add eax, dword [rsp + 0x10]
add ecx, edx
movzx edx, byte [r11 - 2]
add eax, ecx
add edx, ecx
add r15d, edx
add eax, edx
add eax, r15d
add dword [rsp + 0x14], eax
cmp r11, qword [rsp + 0x18]
jne 0x45134f
mov rax, qword [rsp + 0x28]
mov rdi, qword [rsp + 0x20]
neg rax
shl rax, 4
lea rax, [rdi + rax - 0x11]
and edi, 0xf
je 0x451581
movzx edx, byte [r11]
add r15d, edx
add dword [rsp + 0x14], r15d
test rax, rax
mov edi, dword [rsp + 0x14]
je 0x451581
movzx edx, byte [r11 + 1]
add r15d, edx
add edi, r15d
cmp rax, 1
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 2]
add r15d, edx
add edi, r15d
cmp rax, 2
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 3]
add r15d, edx
add edi, r15d
cmp rax, 3
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 4]
add r15d, edx
add edi, r15d
cmp rax, 4
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 5]
add r15d, edx
add edi, r15d
cmp rax, 5
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 6]
add r15d, edx
add edi, r15d
cmp rax, 6
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 7]
add r15d, edx
add edi, r15d
cmp rax, 7
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 8]
add r15d, edx
add edi, r15d
cmp rax, 8
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 9]
add r15d, edx
add edi, r15d
cmp rax, 9
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 0xa]
add r15d, edx
add edi, r15d
cmp rax, 0xa
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 0xb]
add r15d, edx
add edi, r15d
cmp rax, 0xb
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 0xc]
add r15d, edx
add edi, r15d
cmp rax, 0xc
mov dword [rsp + 0x14], edi
je 0x451581
movzx edx, byte [r11 + 0xd]
add r15d, edx
add edi, r15d
cmp rax, 0xd
mov dword [rsp + 0x14], edi
je 0x451581
movzx eax, byte [r11 + 0xe]
add r15d, eax
add edi, r15d
mov dword [rsp + 0x14], edi
mov eax, r15d
mov ecx, 0x80078071
mul ecx
mov eax, edx
shr eax, 0xf
imul eax, eax, 0xfff1
sub r15d, eax
mov eax, dword [rsp + 0x14]
mul ecx
shr edx, 0xf
imul eax, edx, 0xfff1
sub dword [rsp + 0x14], eax
mov eax, dword [rsp + 0x14]
shl eax, 0x10
or eax, r15d
jmp 0x4512d9
mov rax, r8
mov qword [rsp + 0x20], r8
jmp 0x451332
mov rax, qword [rsp + 0x90]
sub rax, 0x15b1
jmp 0x45142c
mov r8d, r8d
jmp 0x450f70