Function at 0x518941
Capabilities:
Compress data via zlib inflate or deflate

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 0x34
cmp dword [ebp + 8], 0
je case.default.0x5189c8
mov eax, dword [ebp + 8]
mov esi, dword [eax + 0x1c]
test esi, esi
je case.default.0x5189c8
mov edx, eax
mov eax, dword [eax + 0xc]
test eax, eax
je case.default.0x5189c8
mov ecx, edx
mov edx, dword [edx]
test edx, edx
jne 0x518981
cmp dword [ecx + 4], 0
jne case.default.0x5189c8
cmp dword [esi], 0xb
jne 0x51898c
mov dword [esi], 0xc
mov dword [ebp - 0x18], eax
mov ebx, dword [ebp + 8]
mov eax, dword [ebp + 8]
mov dword [ebp - 0x14], edx
mov ebx, dword [ebx + 0x10]
mov edx, dword [esi + 0x38]
mov eax, dword [eax + 4]
mov ecx, dword [esi + 0x3c]
mov dword [ebp - 0x20], ebx
mov dword [ebp - 0x1c], eax
mov dword [ebp - 0x24], edx
mov dword [ebp - 0x28], ecx
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x30], ebx
mov dword [ebp - 0x34], 0
mov eax, dword [esi]
cmp eax, 0x1c
ja case.default.0x5189c8
jmp dword [eax*4 + 0x61d6b8]
mov edx, dword [esi + 8]
test edx, edx
jne 0x5189de
mov dword [esi], 0xc
jmp 0x5189bd
cmp dword [ebp - 0x28], 0xf
ja 0x518a09
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ebx, dword [ebp - 0x14]
movzx eax, byte [ebx]
mov cl, byte [ebp - 0x28]
inc ebx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], ebx
add dword [ebp - 0x28], 8
jmp 0x5189de
shr edx, 1
xor eax, eax
cmp dword [ebp - 0x24], 0x8b1f
sete al
test eax, edx
je 0x518a66
push 0
push 0
push 0
call fcn.0051831a
mov bl, byte [ebp - 0x24]
shr dword [ebp - 0x24], 8
mov dword [esi + 0x18], eax
mov al, byte [ebp - 0x24]
mov byte [ebp - 0xf], al
lea eax, [ebp - 0x10]
push 2
mov byte [ebp - 0x10], bl
push eax
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0x18
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [esi + 0x18], eax
mov dword [esi], 1
jmp 0x5189bd
mov eax, dword [esi + 0x20]
mov dword [esi + 0x10], 0
test eax, eax
je 0x518a7b
mov dword [eax + 0x30], 0xffffffff
test byte [esi + 8], 1
je 0x518a9f
movzx eax, byte [ebp - 0x24]
shl eax, 8
mov edx, dword [ebp - 0x24]
shr edx, 8
add eax, edx
mov edx, 0x1f
mov ecx, edx
xor edx, edx
div ecx
test edx, edx
je 0x518aae
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.incorrect_header_check
jmp 0x519a6c
mov eax, dword [ebp - 0x24]
and eax, 0xf
cmp eax, 8
jne 0x518b63
shr dword [ebp - 0x24], 4
mov eax, dword [ebp - 0x24]
and eax, 0xf
sub dword [ebp - 0x28], 4
lea edi, [eax + 8]
cmp edi, dword [esi + 0x24]
jbe 0x518ae2
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_window_size
jmp 0x519a6c
mov ecx, edi
mov eax, 1
shl eax, cl
mov dword [esi + 0x14], eax
push 0
push 0
push 0
call fcn.0051bac0
mov ebx, dword [ebp + 8]
and dword [ebp - 0x24], 0x200
add esp, 0xc
mov dword [esi + 0x18], eax
cmp dword [ebp - 0x24], 1
mov dword [ebx + 0x30], eax
mov dword [ebp - 0x24], 0
sbb eax, eax
mov dword [ebp - 0x28], 0
and eax, 2
add eax, 9
mov dword [esi], eax
jmp 0x5189bd
cmp dword [ebp - 0x28], 0xf
ja 0x518b58
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp case.0x5189c8.1
mov ebx, dword [ebp - 0x24]
mov dword [esi + 0x10], ebx
cmp bl, 8
je 0x518b72
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.unknown_compression_method
jmp 0x519a6c
test word [ebp - 0x24], 0xe000
je 0x518b89
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.unknown_header_flags_set
jmp 0x519a6c
mov edx, dword [esi + 0x20]
test edx, edx
je 0x518b9b
mov eax, dword [ebp - 0x24]
shr eax, 8
and eax, 1
mov dword [edx], eax
test byte [esi + 0x11], 2
je 0x518bc5
mov cl, byte [ebp - 0x24]
lea eax, [ebp - 0x10]
shr dword [ebp - 0x24], 8
mov bl, byte [ebp - 0x24]
push 2
mov byte [ebp - 0x10], cl
push eax
mov byte [ebp - 0xf], bl
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0xc
mov dword [esi + 0x18], eax
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [esi], 2
jmp 0x518be1
cmp dword [ebp - 0x28], 0x1f
ja 0x518c06
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp case.0x5189c8.2
mov eax, dword [esi + 0x20]
test eax, eax
je 0x518c13
mov ebx, dword [ebp - 0x24]
mov dword [eax + 4], ebx
test byte [esi + 0x11], 2
je 0x518c51
mov al, byte [ebp - 0x24]
push 4
shr dword [ebp - 0x24], 8
mov dl, byte [ebp - 0x24]
mov byte [ebp - 0x10], al
shr dword [ebp - 0x24], 8
mov cl, byte [ebp - 0x24]
lea eax, [ebp - 0x10]
shr dword [ebp - 0x24], 8
mov bl, byte [ebp - 0x24]
push eax
mov byte [ebp - 0xf], dl
mov byte [ebp - 0xe], cl
mov byte [ebp - 0xd], bl
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0xc
mov dword [esi + 0x18], eax
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [esi], 3
jmp 0x518c6d
cmp dword [ebp - 0x28], 0xf
ja 0x518c92
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp case.0x5189c8.3
mov edx, dword [esi + 0x20]
test edx, edx
je 0x518ca9
movzx eax, byte [ebp - 0x24]
mov dword [edx + 8], eax
mov eax, dword [ebp - 0x24]
shr eax, 8
mov dword [edx + 0xc], eax
test byte [esi + 0x11], 2
je 0x518cd3
mov bl, byte [ebp - 0x24]
push 2
shr dword [ebp - 0x24], 8
mov al, byte [ebp - 0x24]
mov byte [ebp - 0x10], bl
mov byte [ebp - 0xf], al
lea eax, [ebp - 0x10]
push eax
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0xc
mov dword [esi + 0x18], eax
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [esi], 4
test byte [esi + 0x11], 4
je 0x518d62
cmp dword [ebp - 0x28], 0xf
ja 0x518d18
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x518ced
mov ebx, dword [ebp - 0x24]
mov eax, dword [esi + 0x20]
mov dword [esi + 0x40], ebx
test eax, eax
je 0x518d28
mov dword [eax + 0x14], ebx
test byte [esi + 0x11], 2
je 0x518d52
mov al, byte [ebp - 0x24]
push 2
shr dword [ebp - 0x24], 8
mov byte [ebp - 0x10], al
mov dl, byte [ebp - 0x24]
lea eax, [ebp - 0x10]
mov byte [ebp - 0xf], dl
push eax
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0xc
mov dword [esi + 0x18], eax
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
jmp 0x518d70
mov eax, dword [esi + 0x20]
test eax, eax
je 0x518d70
mov dword [eax + 0x10], 0
mov dword [esi], 5
test byte [esi + 0x11], 4
je 0x518df1
mov ebx, dword [esi + 0x40]
mov eax, ebx
cmp ebx, dword [ebp - 0x1c]
jbe 0x518d89
mov ebx, dword [ebp - 0x1c]
test ebx, ebx
je 0x518de7
mov edx, dword [esi + 0x20]
test edx, edx
je 0x518dc6
mov ecx, dword [edx + 0x10]
mov dword [ebp - 0x38], ecx
test ecx, ecx
je 0x518dc6
mov edi, dword [edx + 0x14]
mov edx, dword [edx + 0x18]
sub edi, eax
mov ecx, ebx
lea eax, [edi + ebx]
cmp eax, edx
jbe 0x518db3
mov ecx, edx
sub ecx, edi
push ecx
mov edx, dword [ebp - 0x38]
push dword [ebp - 0x14]
lea eax, [edi + edx]
push eax
call fcn.0052ef10
add esp, 0xc
test byte [esi + 0x11], 2
je 0x518dde
push ebx
push dword [ebp - 0x14]
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0xc
mov dword [esi + 0x18], eax
sub dword [ebp - 0x1c], ebx
add dword [ebp - 0x14], ebx
sub dword [esi + 0x40], ebx
cmp dword [esi + 0x40], 0
jne 0x519aa7
mov dword [esi + 0x40], 0
mov dword [esi], 6
test byte [esi + 0x11], 8
je 0x518e6e
cmp dword [ebp - 0x1c], 0
je 0x519aa7
xor ebx, ebx
mov ecx, dword [ebp - 0x14]
mov eax, dword [esi + 0x20]
movzx edi, byte [ebx + ecx]
inc ebx
test eax, eax
je 0x518e36
mov ecx, dword [eax + 0x1c]
test ecx, ecx
je 0x518e36
mov edx, dword [esi + 0x40]
cmp edx, dword [eax + 0x20]
jae 0x518e36
mov eax, edi
mov byte [edx + ecx], al
inc dword [esi + 0x40]
test edi, edi
setne dl
xor eax, eax
cmp ebx, dword [ebp - 0x1c]
setb al
test edx, eax
jne 0x518e10
test byte [esi + 0x11], 2
je 0x518e5f
push ebx
push dword [ebp - 0x14]
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0xc
mov dword [esi + 0x18], eax
sub dword [ebp - 0x1c], ebx
add dword [ebp - 0x14], ebx
test edi, edi
je 0x518e7c
jmp 0x519aa7
mov eax, dword [esi + 0x20]
test eax, eax
je 0x518e7c
mov dword [eax + 0x1c], 0
mov dword [esi + 0x40], 0
mov dword [esi], 7
test byte [esi + 0x11], 0x10
je 0x518ef9
cmp dword [ebp - 0x1c], 0
je 0x519aa7
xor ebx, ebx
mov edx, dword [ebp - 0x14]
mov eax, dword [esi + 0x20]
movzx edi, byte [ebx + edx]
inc ebx
test eax, eax
je 0x518ec1
mov ecx, dword [eax + 0x24]
test ecx, ecx
je 0x518ec1
mov edx, dword [esi + 0x40]
cmp edx, dword [eax + 0x28]
jae 0x518ec1
mov eax, edi
mov byte [edx + ecx], al
inc dword [esi + 0x40]
test edi, edi
setne dl
xor eax, eax
cmp ebx, dword [ebp - 0x1c]
setb al
test edx, eax
jne 0x518e9b
test byte [esi + 0x11], 2
je 0x518eea
push ebx
push dword [ebp - 0x14]
push dword [esi + 0x18]
call fcn.0051831a
add esp, 0xc
mov dword [esi + 0x18], eax
sub dword [ebp - 0x1c], ebx
add dword [ebp - 0x14], ebx
test edi, edi
je 0x518f07
jmp 0x519aa7
mov eax, dword [esi + 0x20]
test eax, eax
je 0x518f07
mov dword [eax + 0x24], 0
mov dword [esi], 8
mov edx, dword [esi + 0x10]
test dh, 2
je 0x518f65
cmp dword [ebp - 0x28], 0xf
ja 0x518f3f
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp 0x518f15
movzx eax, word [esi + 0x18]
cmp dword [ebp - 0x24], eax
je 0x518f57
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.header_crc_mismatch
jmp 0x519a6c
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov eax, dword [esi + 0x20]
test eax, eax
je 0x518f7c
sar edx, 9
mov dword [eax + 0x30], 1
and edx, 1
mov dword [eax + 0x2c], edx
push 0
push 0
push 0
call fcn.0051831a
mov edx, dword [ebp + 8]
mov dword [esi], 0xb
mov dword [esi + 0x18], eax
mov dword [edx + 0x30], eax
jmp 0x5191ac
cmp dword [ebp - 0x28], 0x1f
ja 0x518fc5
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp case.0x5189c8.9
mov edx, dword [ebp - 0x24]
mov eax, dword [ebp - 0x24]
shr edx, 8
mov ebx, dword [ebp + 8]
and edx, 0xff00
mov dword [ebp - 0x28], 0
shr eax, 0x18
mov dword [esi], 0xa
add eax, edx
mov edx, dword [ebp - 0x24]
and edx, 0xff00
shl dword [ebp - 0x24], 0x18
shl edx, 8
add eax, edx
add eax, dword [ebp - 0x24]
mov dword [ebp - 0x24], 0
mov dword [esi + 0x18], eax
mov dword [ebx + 0x30], eax
cmp dword [esi + 0xc], 0
je 0x519b4f
push 0
push 0
push 0
call fcn.0051bac0
mov edx, dword [ebp + 8]
mov dword [esi], 0xb
mov dword [esi + 0x18], eax
add esp, 0xc
mov dword [edx + 0x30], eax
cmp dword [ebp + 0xc], 5
je 0x519aa7
cmp dword [esi + 4], 0
je 0x51905a
mov ecx, dword [ebp - 0x28]
mov dword [esi], 0x18
and ecx, 7
shr dword [ebp - 0x24], cl
and dword [ebp - 0x28], 0xfffffff8
jmp 0x5189bd
cmp dword [ebp - 0x28], 2
ja 0x519084
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp 0x51905a
mov eax, dword [ebp - 0x24]
dec dword [ebp - 0x28]
shr dword [ebp - 0x24], 1
and eax, 1
mov dword [esi + 4], eax
mov eax, dword [ebp - 0x24]
and eax, 3
cmp eax, 1
je 0x5190b4
jb 0x5190ac
cmp eax, 2
je 0x5190d8
cmp eax, 3
je 0x5190e0
jmp 0x5190f0
mov dword [esi], 0xd
jmp 0x5190f0
mov dword [esi + 0x4c], 0x61cc90
mov dword [esi + 0x54], 9
mov dword [esi + 0x50], 0x61d490
mov dword [esi + 0x58], 5
mov dword [esi], 0x12
jmp 0x5190f0
mov dword [esi], 0xf
jmp 0x5190f0
mov ebx, dword [ebp + 8]
mov dword [esi], 0x1b
mov dword [ebx + 0x18], str.invalid_block_type
shr dword [ebp - 0x24], 2
sub dword [ebp - 0x28], 2
jmp 0x5189bd
mov ecx, dword [ebp - 0x28]
and ecx, 7
shr dword [ebp - 0x24], cl
and dword [ebp - 0x28], 0xfffffff8
cmp dword [ebp - 0x28], 0x1f
ja 0x519135
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x51910a
mov eax, dword [ebp - 0x24]
shr eax, 0x10
movzx edx, word [ebp - 0x24]
xor eax, 0xffff
cmp edx, eax
je 0x519157
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.invalid_stored_block_lengths
jmp 0x519a6c
mov dword [esi + 0x40], edx
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [esi], 0xe
mov ebx, dword [esi + 0x40]
test ebx, ebx
je 0x5196f9
cmp ebx, dword [ebp - 0x1c]
jbe 0x519181
mov ebx, dword [ebp - 0x1c]
cmp ebx, dword [ebp - 0x20]
jbe 0x519189
mov ebx, dword [ebp - 0x20]
test ebx, ebx
je 0x519aa7
push ebx
push dword [ebp - 0x14]
push dword [ebp - 0x18]
call fcn.0052ef10
sub dword [ebp - 0x1c], ebx
add dword [ebp - 0x14], ebx
sub dword [ebp - 0x20], ebx
add dword [ebp - 0x18], ebx
sub dword [esi + 0x40], ebx
add esp, 0xc
jmp 0x5189bd
cmp dword [ebp - 0x28], 0xd
ja 0x5191df
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp case.0x5189c8.15
mov edx, dword [ebp - 0x24]
shr dword [ebp - 0x24], 5
mov eax, dword [ebp - 0x24]
and edx, 0x1f
shr dword [ebp - 0x24], 5
and eax, 0x1f
add edx, 0x101
sub dword [ebp - 0x28], 0xe
lea ecx, [eax + 1]
mov eax, dword [ebp - 0x24]
and eax, 0xf
mov dword [esi + 0x60], edx
add eax, 4
mov dword [esi + 0x64], ecx
shr dword [ebp - 0x24], 4
mov dword [esi + 0x5c], eax
cmp edx, 0x11e
ja 0x519223
cmp ecx, 0x1e
jbe 0x519232
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.too_many_length_or_distance_symbols
jmp 0x519a6c
mov dword [esi + 0x68], 0
mov dword [esi], 0x10
mov ebx, dword [esi + 0x5c]
cmp dword [esi + 0x68], ebx
jae 0x519298
cmp dword [ebp - 0x28], 2
ja 0x519272
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x519247
mov eax, dword [esi + 0x68]
mov edx, dword [ebp - 0x24]
and edx, 7
movzx ecx, word [eax + eax + 0x61cc50]
inc eax
shr dword [ebp - 0x24], 3
sub dword [ebp - 0x28], 3
cmp eax, ebx
mov word [esi + ecx*2 + 0x70], dx
mov dword [esi + 0x68], eax
jmp 0x519245
mov edx, dword [esi + 0x68]
cmp edx, 0x12
ja 0x5192bc
movzx eax, word [edx + edx + 0x61cc50]
mov word [esi + eax*2 + 0x70], 0
lea eax, [edx + 1]
mov edx, eax
cmp eax, 0x12
jbe 0x5192a0
mov dword [esi + 0x68], eax
lea eax, [esi + 0x530]
mov dword [esi + 0x54], 7
mov dword [esi + 0x6c], eax
mov dword [esi + 0x4c], eax
lea eax, [esi + 0x2f0]
push eax
lea eax, [esi + 0x54]
push eax
lea eax, [esi + 0x6c]
push eax
lea eax, [esi + 0x70]
push 0x13
push eax
push 0
call fcn.0051c1d0
add esp, 0x18
test eax, eax
mov dword [ebp - 0x34], eax
je 0x519325
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.invalid_code_lengths_set
jmp 0x519a6c
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_bit_length_repeat
jmp 0x51931a
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_bit_length_repeat
mov dword [esi], 0x1b
jmp 0x51950c
mov dword [esi + 0x68], 0
mov dword [esi], 0x11
mov eax, dword [esi + 0x64]
add eax, dword [esi + 0x60]
cmp dword [esi + 0x68], eax
jae 0x51950c
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
dec eax
mov edx, dword [esi + 0x4c]
and eax, dword [ebp - 0x24]
mov ebx, dword [edx + eax*4]
movzx eax, bh
cmp eax, dword [ebp - 0x28]
jbe 0x519381
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp 0x519341
mov eax, ebx
shr eax, 0x10
cmp ax, 0xf
ja 0x5193d3
movzx eax, bh
cmp dword [ebp - 0x28], eax
jae 0x5193b9
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x51938c
movzx ecx, bh
mov eax, dword [esi + 0x68]
sub dword [ebp - 0x28], ecx
shr dword [ebp - 0x24], cl
shr ebx, 0x10
mov word [esi + eax*2 + 0x70], bx
inc eax
jmp 0x519504
cmp ax, 0x10
jne 0x519438
movzx eax, bh
add eax, 2
cmp dword [ebp - 0x28], eax
jae 0x519409
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x5193d9
movzx ecx, bh
mov eax, dword [esi + 0x68]
sub dword [ebp - 0x28], ecx
shr dword [ebp - 0x24], cl
test eax, eax
je 0x519304
movzx edi, word [esi + eax*2 + 0x6e]
mov eax, dword [ebp - 0x24]
and eax, 3
shr dword [ebp - 0x24], 2
sub dword [ebp - 0x28], 2
lea ebx, [eax + 3]
jmp 0x5194d8
cmp ax, 0x11
jne 0x51948c
movzx eax, bh
add eax, 3
cmp dword [ebp - 0x28], eax
jae 0x51946e
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x51943e
movzx ecx, bh
shr dword [ebp - 0x24], cl
sub dword [ebp - 0x28], ecx
mov eax, dword [ebp - 0x24]
and eax, 7
xor edi, edi
shr dword [ebp - 0x24], 3
sub dword [ebp - 0x28], 3
lea ebx, [eax + 3]
jmp 0x5194d8
movzx eax, bh
add eax, 7
cmp dword [ebp - 0x28], eax
jae 0x5194bc
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x51948c
movzx ecx, bh
shr dword [ebp - 0x24], cl
sub dword [ebp - 0x28], ecx
mov eax, dword [ebp - 0x24]
and eax, 0x7f
xor edi, edi
shr dword [ebp - 0x24], 7
sub dword [ebp - 0x28], 7
lea ebx, [eax + 0xb]
mov ecx, dword [esi + 0x68]
mov eax, dword [esi + 0x64]
add eax, dword [esi + 0x60]
lea edx, [ecx + ebx]
cmp edx, eax
ja 0x519310
dec ebx
cmp ebx, 0xffffffff
je case.0x5189c8.17
mov eax, ecx
dec ebx
mov word [esi + eax*2 + 0x70], di
inc eax
cmp ebx, 0xffffffff
jne 0x5194f8
mov dword [esi + 0x68], eax
jmp case.0x5189c8.17
cmp dword [esi], 0x1b
je 0x5189bd
lea eax, [esi + 0x530]
lea edi, [esi + 0x2f0]
mov dword [esi + 0x6c], eax
mov dword [esi + 0x4c], eax
lea ebx, [esi + 0x6c]
lea eax, [esi + 0x54]
mov dword [esi + 0x54], 9
push edi
push eax
push ebx
push dword [esi + 0x60]
lea eax, [esi + 0x70]
push eax
push 1
call fcn.0051c1d0
add esp, 0x18
test eax, eax
mov dword [ebp - 0x34], eax
je 0x51955e
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.invalid_literal_lengths_set
jmp 0x519a6c
mov eax, dword [esi + 0x6c]
mov dword [esi + 0x58], 6
mov dword [esi + 0x50], eax
lea eax, [esi + 0x58]
push edi
push eax
push ebx
push dword [esi + 0x64]
mov eax, dword [esi + 0x60]
lea eax, [esi + eax*2 + 0x70]
push eax
push 2
call fcn.0051c1d0
add esp, 0x18
test eax, eax
mov dword [ebp - 0x34], eax
je 0x51959c
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_distances_set
jmp 0x519a6c
mov dword [esi], 0x12
cmp dword [ebp - 0x1c], 5
seta dl
xor eax, eax
cmp dword [ebp - 0x20], 0x101
seta al
test edx, eax
je 0x51961e
mov edx, dword [ebp + 8]
mov ecx, dword [ebp - 0x18]
mov ebx, dword [ebp - 0x20]
mov eax, dword [ebp - 0x14]
mov dword [edx + 0x10], ebx
mov dword [edx + 0xc], ecx
mov dword [edx], eax
mov ecx, dword [ebp - 0x1c]
mov ebx, dword [ebp - 0x24]
mov eax, dword [ebp - 0x28]
mov dword [edx + 4], ecx
mov dword [esi + 0x38], ebx
mov dword [esi + 0x3c], eax
push dword [ebp - 0x30]
push edx
call fcn.0051bdc0
mov edx, dword [ebp + 8]
mov ecx, dword [ebp + 8]
mov ebx, dword [ebp + 8]
mov eax, dword [ebp + 8]
mov edx, dword [edx + 0xc]
mov ecx, dword [ecx + 0x10]
mov ebx, dword [ebx]
mov dword [ebp - 0x18], edx
mov dword [ebp - 0x20], ecx
mov dword [ebp - 0x14], ebx
mov eax, dword [eax + 4]
mov edx, dword [esi + 0x38]
mov ecx, dword [esi + 0x3c]
pop ebx
pop edi
mov dword [ebp - 0x1c], eax
mov dword [ebp - 0x24], edx
mov dword [ebp - 0x28], ecx
jmp 0x5189bd
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
dec eax
mov ebx, dword [esi + 0x4c]
and eax, dword [ebp - 0x24]
mov dword [ebp - 0x3c], ebx
mov ebx, dword [ebx + eax*4]
movzx eax, bh
cmp eax, dword [ebp - 0x28]
jbe 0x519661
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp 0x51961e
test bl, bl
je 0x5196d2
test bl, 0xf0
jne 0x5196d2
mov edi, ebx
mov ebx, edi
mov edx, edi
movzx eax, bl
movzx ecx, bh
shr edx, 0x10
add ecx, eax
mov eax, 1
shl eax, cl
dec eax
and eax, dword [ebp - 0x24]
movzx ecx, bh
shr eax, cl
add eax, edx
mov edx, dword [ebp - 0x3c]
mov ecx, edi
mov ebx, dword [edx + eax*4]
movzx edx, bh
movzx eax, ch
add eax, edx
cmp eax, dword [ebp - 0x28]
jbe 0x5196c7
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ebx, dword [ebp - 0x14]
movzx eax, byte [ebx]
mov cl, byte [ebp - 0x28]
inc ebx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], ebx
add dword [ebp - 0x28], 8
jmp 0x51966c
mov eax, edi
movzx ecx, ah
shr dword [ebp - 0x24], cl
sub dword [ebp - 0x28], ecx
mov eax, ebx
movzx ecx, bh
shr eax, 0x10
sub dword [ebp - 0x28], ecx
shr dword [ebp - 0x24], cl
mov dword [esi + 0x40], eax
test bl, bl
jne 0x5196f2
mov dword [esi], 0x17
jmp 0x5189bd
movzx eax, bl
test al, 0x20
je 0x519704
mov dword [esi], 0xb
jmp 0x5189bd
test al, 0x40
je 0x519717
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], 0x61d63c
jmp 0x519a6c
and eax, 0xf
mov dword [esi], 0x13
mov dword [esi + 0x48], eax
mov ebx, dword [esi + 0x48]
test ebx, ebx
je 0x519769
cmp dword [ebp - 0x28], ebx
jae 0x519753
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp 0x51972a
mov cl, bl
mov eax, 1
shl eax, cl
dec eax
sub dword [ebp - 0x28], ebx
and eax, dword [ebp - 0x24]
shr dword [ebp - 0x24], cl
add dword [esi + 0x40], eax
mov dword [esi], 0x14
mov ecx, dword [esi + 0x58]
mov eax, 1
shl eax, cl
dec eax
mov ebx, dword [esi + 0x50]
and eax, dword [ebp - 0x24]
mov dword [ebp - 0x40], ebx
mov ebx, dword [ebx + eax*4]
movzx eax, bh
cmp eax, dword [ebp - 0x28]
jbe 0x5197b2
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp case.0x5189c8.20
test bl, 0xf0
jne 0x51981f
mov edi, ebx
mov ebx, edi
mov edx, edi
movzx eax, bl
movzx ecx, bh
shr edx, 0x10
add ecx, eax
mov eax, 1
shl eax, cl
dec eax
and eax, dword [ebp - 0x24]
movzx ecx, bh
shr eax, cl
add eax, edx
mov edx, dword [ebp - 0x40]
mov ecx, edi
mov ebx, dword [edx + eax*4]
movzx edx, bh
movzx eax, ch
add eax, edx
cmp eax, dword [ebp - 0x28]
jbe 0x519814
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ebx, dword [ebp - 0x14]
movzx eax, byte [ebx]
mov cl, byte [ebp - 0x28]
inc ebx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], ebx
add dword [ebp - 0x28], 8
jmp 0x5197b9
mov eax, edi
movzx ecx, ah
shr dword [ebp - 0x24], cl
sub dword [ebp - 0x28], ecx
movzx ecx, bh
movzx eax, bl
shr dword [ebp - 0x24], cl
sub dword [ebp - 0x28], ecx
test al, 0x40
je 0x51983e
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], 0x61d658
jmp 0x519a6c
shr ebx, 0x10
and eax, 0xf
mov dword [esi + 0x44], ebx
mov dword [esi + 0x48], eax
mov dword [esi], 0x15
mov ebx, dword [esi + 0x48]
test ebx, ebx
je 0x519896
cmp dword [ebp - 0x28], ebx
jae 0x519880
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x28]
inc dword [ebp - 0x14]
shl eax, cl
add dword [ebp - 0x24], eax
add dword [ebp - 0x28], 8
jmp 0x519857
mov cl, bl
mov eax, 1
shl eax, cl
dec eax
sub dword [ebp - 0x28], ebx
and eax, dword [ebp - 0x24]
shr dword [ebp - 0x24], cl
add dword [esi + 0x44], eax
mov eax, dword [ebp - 0x30]
add eax, dword [esi + 0x2c]
sub eax, dword [ebp - 0x20]
cmp dword [esi + 0x44], eax
jbe 0x5198b3
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], 0x61d66e
jmp 0x519a6c
mov dword [esi], 0x16
cmp dword [ebp - 0x20], 0
je 0x519aa7
mov ebx, dword [ebp - 0x30]
mov eax, dword [esi + 0x44]
sub ebx, dword [ebp - 0x20]
cmp eax, ebx
jbe 0x5198f2
sub eax, ebx
mov edx, dword [esi + 0x34]
mov ebx, eax
mov eax, dword [esi + 0x30]
cmp ebx, eax
jbe 0x5198e3
sub ebx, eax
mov eax, dword [esi + 0x28]
sub eax, ebx
add edx, eax
mov eax, dword [esi + 0x40]
cmp ebx, eax
jbe 0x5198fa
mov ebx, eax
jmp 0x5198fa
mov edx, dword [ebp - 0x18]
mov ebx, dword [esi + 0x40]
sub edx, eax
cmp ebx, dword [ebp - 0x20]
jbe 0x519902
mov ebx, dword [ebp - 0x20]
sub dword [ebp - 0x20], ebx
sub dword [esi + 0x40], ebx
mov ecx, dword [ebp - 0x18]
mov al, byte [edx]
inc edx
mov byte [ecx], al
inc ecx
dec ebx
mov dword [ebp - 0x18], ecx
jne 0x519908
cmp dword [esi + 0x40], 0
jne 0x5189bd
jmp 0x51993c
cmp dword [ebp - 0x20], 0
je 0x519aa7
mov ebx, dword [ebp - 0x18]
mov eax, dword [esi + 0x40]
mov byte [ebx], al
inc ebx
dec dword [ebp - 0x20]
mov dword [ebp - 0x18], ebx
mov dword [esi], 0x12
jmp 0x5189bd
cmp dword [esi + 8], 0
je 0x519a21
cmp dword [ebp - 0x28], 0x1f
ja 0x51997c
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x519951
mov ebx, dword [ebp - 0x20]
mov eax, dword [ebp + 8]
sub dword [ebp - 0x30], ebx
mov edx, dword [ebp - 0x30]
add dword [eax + 0x14], edx
add dword [esi + 0x1c], edx
test edx, edx
je 0x5199c7
cmp dword [esi + 0x10], 0
je 0x5199a9
mov eax, dword [ebp - 0x18]
push edx
sub eax, edx
push eax
push dword [esi + 0x18]
call fcn.0051831a
jmp 0x5199bb
push dword [ebp - 0x30]
mov eax, dword [ebp - 0x18]
sub eax, dword [ebp - 0x30]
push eax
push dword [esi + 0x18]
call fcn.0051bac0
mov ecx, dword [ebp + 8]
mov dword [esi + 0x18], eax
add esp, 0xc
mov dword [ecx + 0x30], eax
mov ebx, dword [ebp - 0x20]
mov ecx, dword [esi + 0x18]
mov dword [ebp - 0x30], ebx
cmp dword [esi + 0x10], 0
je 0x5199db
cmp dword [ebp - 0x24], ecx
jmp 0x519a05
mov eax, dword [ebp - 0x24]
mov edx, dword [ebp - 0x24]
shr eax, 8
shr edx, 0x18
and eax, 0xff00
add edx, eax
mov eax, dword [ebp - 0x24]
and eax, 0xff00
shl eax, 8
add edx, eax
mov eax, dword [ebp - 0x24]
shl eax, 0x18
add edx, eax
cmp edx, ecx
je 0x519a13
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.incorrect_data_check
jmp 0x519a6c
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [esi], 0x19
cmp dword [esi + 8], 0
je 0x519a85
cmp dword [esi + 0x10], 0
je 0x519a85
cmp dword [ebp - 0x28], 0x1f
ja 0x519a5a
cmp dword [ebp - 0x1c], 0
je 0x519aa7
dec dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x28]
inc edx
shl eax, cl
add dword [ebp - 0x24], eax
mov dword [ebp - 0x14], edx
add dword [ebp - 0x28], 8
jmp 0x519a33
mov ebx, dword [ebp - 0x24]
cmp ebx, dword [esi + 0x1c]
je 0x519a77
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.incorrect_length_check
mov dword [esi], 0x1b
jmp 0x5189bd
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [esi], 0x1a
mov dword [ebp - 0x34], 1
jmp 0x519aa7
mov dword [ebp - 0x34], 0xfffffffd
jmp 0x519aa7
mov eax, 0xfffffffe
jmp 0x519bd7
mov edx, dword [ebp + 8]
mov ecx, dword [ebp - 0x18]
mov ebx, dword [ebp - 0x20]
mov eax, dword [ebp - 0x14]
mov dword [edx + 0xc], ecx
mov ecx, dword [ebp - 0x1c]
mov dword [edx + 0x10], ebx
mov dword [edx + 4], ecx
mov dword [edx], eax
mov ebx, dword [ebp - 0x24]
mov eax, dword [ebp - 0x28]
mov dword [esi + 0x38], ebx
mov dword [esi + 0x3c], eax
cmp dword [esi + 0x28], 0
jne 0x519ae0
cmp dword [esi], 0x17
ja 0x519aff
mov ecx, dword [ebp - 0x30]
cmp ecx, dword [edx + 0x10]
je 0x519aff
mov edx, dword [ebp - 0x30]
mov eax, dword [ebp + 8]
call fcn.00518848
test eax, eax
je 0x519aff
mov dword [esi], 0x1c
mov eax, 0xfffffffc
jmp 0x519bd7
mov ebx, dword [ebp + 8]
mov eax, dword [ebp + 8]
mov edx, dword [ebp + 8]
mov ebx, dword [ebx + 4]
mov eax, dword [eax + 0x10]
sub dword [ebp - 0x2c], ebx
sub dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x2c]
mov ebx, dword [ebp - 0x30]
add dword [edx + 8], ecx
add dword [edx + 0x14], ebx
add dword [esi + 0x1c], ebx
cmp dword [esi + 8], 0
setne dl
xor eax, eax
test ebx, ebx
setne al
test edx, eax
je 0x519b97
mov edx, dword [ebp + 8]
cmp dword [esi + 0x10], 0
mov eax, dword [edx + 0xc]
je 0x519b7c
sub eax, ebx
push ebx
push eax
push dword [esi + 0x18]
call fcn.0051831a
jmp 0x519b8b
mov ecx, dword [ebp + 8]
mov eax, dword [ebp - 0x20]
mov ebx, dword [ebp - 0x18]
mov edx, dword [ebp - 0x14]
mov dword [ecx + 0x10], eax
mov eax, dword [ebp - 0x24]
mov dword [ecx + 0xc], ebx
mov dword [ecx], edx
mov ebx, dword [ebp - 0x1c]
mov dword [esi + 0x38], eax
mov edx, dword [ebp - 0x28]
mov eax, 2
mov dword [ecx + 4], ebx
mov dword [esi + 0x3c], edx
jmp 0x519bd7
push dword [ebp - 0x30]
sub eax, dword [ebp - 0x30]
push eax
push dword [esi + 0x18]
call fcn.0051bac0
mov ecx, dword [ebp + 8]
mov dword [esi + 0x18], eax
add esp, 0xc
mov dword [ecx + 0x30], eax
mov eax, dword [esi + 0x3c]
cmp dword [esi + 4], 0
je 0x519ba3
add eax, 0x40
cmp dword [esi], 0xb
jne 0x519bab
sub eax, 0xffffff80
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x2c], eax
mov eax, dword [ebp - 0x2c]
or eax, dword [ebp - 0x30]
sete dl
cmp dword [ebp + 0xc], 4
sete al
or eax, edx
test al, 1
je 0x519bd4
cmp dword [ebp - 0x34], 0
jne 0x519bd4
mov dword [ebp - 0x34], 0xfffffffb
mov eax, dword [ebp - 0x34]
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret