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

Disassembly:
push ebp
mov ebp, esp
mov eax, dword [ebp + 8]
sub esp, 0x30
push esi
test eax, eax
je 0x4539d4
mov esi, dword [eax + 0x1c]
test esi, esi
je 0x4539d4
cmp dword [eax + 0xc], 0
je 0x4539d4
cmp dword [eax], 0
jne 0x4525a6
cmp dword [eax + 4], 0
jne 0x4539d4
cmp dword [esi], 0xb
jne 0x4525b1
mov dword [esi], 0xc
mov ecx, dword [eax + 0xc]
mov edx, dword [eax]
mov dword [ebp - 0x18], ecx
mov ecx, dword [eax + 0x10]
mov eax, dword [eax + 4]
push ebx
mov ebx, dword [esi + 0x38]
mov dword [ebp - 4], eax
mov dword [ebp - 0x30], eax
mov eax, dword [esi]
push edi
mov edi, dword [esi + 0x3c]
mov dword [ebp - 0x10], ecx
mov dword [ebp - 8], edx
mov dword [ebp - 0x20], ecx
mov dword [ebp - 0x28], 0
cmp eax, 0x1e
ja case.default.0x4525e8
jmp dword [eax*4 + 0x4539e0]
cmp dword [esi + 8], 0
jne 0x452600
mov dword [esi], 0xc
jmp 0x453867
cmp edi, 0x10
jae 0x452627
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x10
jb 0x452605
test byte [esi + 8], 2
je 0x452669
cmp ebx, 0x8b1f
jne 0x452669
push 0
push 0
xor ecx, ecx
call fcn.00455670
push 2
lea ecx, [ebp - 0x14]
mov dword [esi + 0x18], eax
mov word [ebp - 0x14], bx
call fcn.00455690
mov edx, dword [ebp - 8]
add esp, 0xc
xor ebx, ebx
mov dword [esi + 0x18], eax
xor edi, edi
mov dword [esi], 1
jmp 0x453867
mov eax, dword [esi + 0x20]
mov dword [esi + 0x10], 0
test eax, eax
je 0x45267e
mov dword [eax + 0x30], 0xffffffff
test byte [esi + 8], 1
je 0x45272a
movzx eax, bl
shl eax, 8
mov ecx, ebx
shr ecx, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
jne 0x45272a
mov edx, ebx
and dl, 0xf
cmp dl, 8
je 0x4526c2
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 8]
mov dword [eax + 0x18], str.unknown_compression_method
jmp 0x453861
mov eax, dword [esi + 0x24]
shr ebx, 4
mov ecx, ebx
and ecx, 0xf
sub edi, 4
add ecx, 8
test eax, eax
jne 0x452714
mov dword [esi + 0x24], ecx
mov edx, 1
shl edx, cl
push 0
xor eax, eax
xor ecx, ecx
mov dword [esi + 0x14], edx
call fcn.00455410
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 8]
shr ebx, 8
not ebx
and ebx, 2
or ebx, 9
mov dword [esi + 0x18], eax
mov dword [ecx + 0x30], eax
mov dword [esi], ebx
add esp, 4
xor ebx, ebx
xor edi, edi
jmp 0x453867
cmp ecx, eax
jbe 0x4526da
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 8]
mov dword [ecx + 0x18], str.invalid_window_size
jmp 0x453861
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.incorrect_header_check
mov edx, dword [ebp - 8]
jmp 0x453861
cmp edi, 0x10
jae 0x452763
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x10
jb 0x452741
mov dword [esi + 0x10], ebx
cmp bl, 8
je 0x45277a
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.unknown_compression_method
jmp 0x453861
test ebx, 0xe000
je 0x452791
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.unknown_header_flags_set
jmp 0x453861
mov eax, dword [esi + 0x20]
test eax, eax
je 0x4527a2
mov ecx, ebx
shr ecx, 8
and ecx, 1
mov dword [eax], ecx
test dword [esi + 0x10], 0x200
je 0x4527ca
mov eax, dword [esi + 0x18]
mov byte [ebp - 0x14], bl
shr ebx, 8
push 2
lea ecx, [ebp - 0x14]
mov byte [ebp - 0x13], bl
call fcn.00455690
mov edx, dword [ebp - 8]
add esp, 4
mov dword [esi + 0x18], eax
xor ebx, ebx
xor edi, edi
mov dword [esi], 2
jmp 0x4527e0
cmp edi, 0x20
jae 0x452802
jmp 0x4527e0
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x20
jb 0x4527e0
mov eax, dword [esi + 0x20]
test eax, eax
je 0x45280c
mov dword [eax + 4], ebx
test dword [esi + 0x10], 0x200
je 0x452844
mov eax, dword [esi + 0x18]
mov ecx, ebx
shr ecx, 8
mov edx, ebx
mov byte [ebp - 0x14], bl
mov byte [ebp - 0x13], cl
shr edx, 0x10
shr ebx, 0x18
push 4
lea ecx, [ebp - 0x14]
mov byte [ebp - 0x12], dl
mov byte [ebp - 0x11], bl
call fcn.00455690
mov edx, dword [ebp - 8]
add esp, 4
mov dword [esi + 0x18], eax
xor ebx, ebx
xor edi, edi
mov dword [esi], 3
jmp 0x452855
cmp edi, 0x10
jae 0x452877
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x10
jb 0x452855
mov eax, dword [esi + 0x20]
test eax, eax
je 0x452894
mov ecx, ebx
and ecx, 0xff
mov dword [eax + 8], ecx
mov ecx, dword [esi + 0x20]
mov eax, ebx
shr eax, 8
mov dword [ecx + 0xc], eax
test dword [esi + 0x10], 0x200
je 0x4528bc
mov eax, dword [esi + 0x18]
mov byte [ebp - 0x14], bl
shr ebx, 8
push 2
lea ecx, [ebp - 0x14]
mov byte [ebp - 0x13], bl
call fcn.00455690
mov edx, dword [ebp - 8]
add esp, 4
mov dword [esi + 0x18], eax
xor ebx, ebx
xor edi, edi
mov dword [esi], 4
test dword [esi + 0x10], 0x400
je 0x452931
cmp edi, 0x10
jae 0x4528f6
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x10
jb 0x4528d4
mov eax, dword [esi + 0x20]
mov dword [esi + 0x40], ebx
test eax, eax
je 0x452903
mov dword [eax + 0x14], ebx
test dword [esi + 0x10], 0x200
je 0x45292b
mov eax, dword [esi + 0x18]
mov byte [ebp - 0x14], bl
shr ebx, 8
push 2
lea ecx, [ebp - 0x14]
mov byte [ebp - 0x13], bl
call fcn.00455690
mov edx, dword [ebp - 8]
add esp, 4
mov dword [esi + 0x18], eax
xor ebx, ebx
xor edi, edi
jmp 0x45293f
mov eax, dword [esi + 0x20]
test eax, eax
je 0x45293f
mov dword [eax + 0x10], 0
mov dword [esi], 5
test dword [esi + 0x10], 0x400
je 0x4529e7
mov eax, dword [esi + 0x40]
mov ecx, dword [ebp - 4]
mov dword [ebp - 0xc], eax
cmp eax, ecx
jbe 0x452964
mov eax, ecx
mov dword [ebp - 0xc], ecx
test eax, eax
je 0x4529dd
mov ecx, dword [esi + 0x20]
test ecx, ecx
je 0x4529ad
mov ecx, dword [ecx + 0x10]
mov dword [ebp - 0x2c], ecx
test ecx, ecx
je 0x4529ad
mov edx, dword [esi + 0x20]
mov ecx, dword [edx + 0x14]
sub ecx, dword [esi + 0x40]
mov edx, dword [edx + 0x18]
mov dword [ebp - 0x1c], ecx
add ecx, eax
cmp ecx, edx
jbe 0x452993
sub edx, dword [ebp - 0x1c]
mov eax, edx
mov edx, dword [ebp - 8]
push eax
mov eax, dword [ebp - 0x2c]
add eax, dword [ebp - 0x1c]
push edx
push eax
call fcn.004bd390
mov eax, dword [ebp - 0xc]
mov edx, dword [ebp - 8]
add esp, 0xc
test dword [esi + 0x10], 0x200
je 0x4529d2
mov edx, dword [ebp - 0xc]
mov eax, dword [esi + 0x18]
mov ecx, dword [ebp - 8]
push edx
push eax
call fcn.00455670
mov edx, dword [ebp - 8]
mov dword [esi + 0x18], eax
mov eax, dword [ebp - 0xc]
add esp, 8
sub dword [ebp - 4], eax
add edx, eax
sub dword [esi + 0x40], eax
mov dword [ebp - 8], edx
cmp dword [esi + 0x40], 0
jne 0x4538c1
mov dword [esi + 0x40], 0
mov dword [esi], 6
test dword [esi + 0x10], 0x800
je 0x452a91
cmp dword [ebp - 4], 0
je 0x4538c1
xor eax, eax
lea ecx, [ecx]
movzx ecx, byte [eax + edx]
inc eax
mov dword [ebp - 0xc], eax
mov eax, dword [esi + 0x20]
mov dword [ebp - 0x1c], ecx
test eax, eax
je 0x452a43
mov ecx, dword [eax + 0x1c]
mov dword [ebp - 0x2c], ecx
test ecx, ecx
je 0x452a43
mov ecx, dword [esi + 0x40]
cmp ecx, dword [eax + 0x20]
jae 0x452a43
mov edx, dword [ebp - 0x2c]
mov al, byte [ebp - 0x1c]
mov byte [edx + ecx], al
inc dword [esi + 0x40]
mov edx, dword [ebp - 8]
cmp dword [ebp - 0x1c], 0
mov eax, dword [ebp - 0xc]
je 0x452a51
cmp eax, dword [ebp - 4]
jb 0x452a10
test dword [esi + 0x10], 0x200
je 0x452a7d
mov eax, dword [esi + 0x18]
test edx, edx
jne 0x452a65
xor eax, eax
jmp 0x452a77
mov ecx, dword [ebp - 0xc]
push ecx
mov ecx, dword [ebp - 8]
call fcn.00455690
mov edx, dword [ebp - 8]
add esp, 4
mov dword [esi + 0x18], eax
mov eax, dword [ebp - 0xc]
sub dword [ebp - 4], eax
add edx, eax
cmp dword [ebp - 0x1c], 0
mov dword [ebp - 8], edx
jne 0x4538c1
jmp 0x452a9f
mov eax, dword [esi + 0x20]
test eax, eax
je 0x452a9f
mov dword [eax + 0x1c], 0
mov dword [esi + 0x40], 0
mov dword [esi], 7
test dword [esi + 0x10], 0x1000
je 0x452b46
cmp dword [ebp - 4], 0
je 0x4538c1
xor eax, eax
movzx ecx, byte [eax + edx]
inc eax
mov dword [ebp - 0xc], eax
mov eax, dword [esi + 0x20]
mov dword [ebp - 0x1c], ecx
test eax, eax
je 0x452af8
mov ecx, dword [eax + 0x24]
mov dword [ebp - 0x2c], ecx
test ecx, ecx
je 0x452af8
mov ecx, dword [esi + 0x40]
cmp ecx, dword [eax + 0x28]
jae 0x452af8
mov edx, dword [ebp - 0x2c]
mov al, byte [ebp - 0x1c]
mov byte [edx + ecx], al
inc dword [esi + 0x40]
mov edx, dword [ebp - 8]
cmp dword [ebp - 0x1c], 0
mov eax, dword [ebp - 0xc]
je 0x452b06
cmp eax, dword [ebp - 4]
jb 0x452ac5
test dword [esi + 0x10], 0x200
je 0x452b32
mov eax, dword [esi + 0x18]
test edx, edx
jne 0x452b1a
xor eax, eax
jmp 0x452b2c
mov ecx, dword [ebp - 0xc]
push ecx
mov ecx, dword [ebp - 8]
call fcn.00455690
mov edx, dword [ebp - 8]
add esp, 4
mov dword [esi + 0x18], eax
mov eax, dword [ebp - 0xc]
sub dword [ebp - 4], eax
add edx, eax
cmp dword [ebp - 0x1c], 0
mov dword [ebp - 8], edx
jne 0x4538c1
jmp 0x452b54
mov eax, dword [esi + 0x20]
test eax, eax
je 0x452b54
mov dword [eax + 0x24], 0
mov dword [esi], 8
test dword [esi + 0x10], 0x200
je 0x452bad
cmp edi, 0x10
jae 0x452b92
jmp 0x452b70
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x10
jb 0x452b70
movzx ecx, word [esi + 0x18]
cmp ebx, ecx
je 0x452ba9
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.header_crc_mismatch
jmp 0x453861
xor ebx, ebx
xor edi, edi
mov eax, dword [esi + 0x20]
test eax, eax
je 0x452bca
mov ecx, dword [esi + 0x10]
sar ecx, 9
and ecx, 1
mov dword [eax + 0x2c], ecx
mov edx, dword [esi + 0x20]
mov dword [edx + 0x30], 1
push 0
push 0
xor ecx, ecx
call fcn.00455670
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 8]
mov dword [esi + 0x18], eax
mov dword [ecx + 0x30], eax
add esp, 8
mov dword [esi], 0xb
jmp 0x453867
cmp edi, 0x20
jae 0x452c16
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x20
jb 0x452bf4
mov ecx, ebx
mov eax, ebx
shl eax, 0x10
and ecx, 0xff00
add ecx, eax
mov eax, ebx
shr eax, 8
shl ecx, 8
and eax, 0xff00
add eax, ecx
mov ecx, dword [ebp + 8]
shr ebx, 0x18
add eax, ebx
mov dword [esi + 0x18], eax
mov dword [ecx + 0x30], eax
xor ebx, ebx
xor edi, edi
mov dword [esi], 0xa
cmp dword [esi + 0xc], 0
je 0x45387e
push 0
xor eax, eax
xor ecx, ecx
call fcn.00455410
mov edx, dword [ebp + 8]
mov dword [esi + 0x18], eax
mov dword [edx + 0x30], eax
mov edx, dword [ebp - 8]
add esp, 4
mov dword [esi], 0xb
cmp dword [esi + 4], 0
je 0x452c90
mov ecx, edi
and ecx, 7
shr ebx, cl
sub edi, ecx
mov dword [esi], 0x1a
jmp 0x453867
cmp edi, 3
jae 0x452cb7
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 3
jb 0x452c95
mov ecx, ebx
shr ebx, 1
mov eax, ebx
and ecx, 1
and eax, 3
mov dword [esi + 4], ecx
cmp eax, 3
ja case.default.0x452ccb
jmp dword [eax*4 + 0x453a5c]
shr ebx, 2
mov dword [esi], 0xd
sub edi, 3
jmp 0x453867
shr ebx, 2
mov dword [esi + 0x4c], 0x51d860
mov dword [esi + 0x54], 9
mov dword [esi + 0x50], 0x51e060
mov dword [esi + 0x58], 5
mov dword [esi], 0x13
sub edi, 3
jmp 0x453867
shr ebx, 2
mov dword [esi], 0x10
sub edi, 3
jmp 0x453867
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_block_type
mov dword [esi], 0x1d
shr ebx, 2
sub edi, 3
jmp 0x453867
mov ecx, edi
and ecx, 7
sub edi, ecx
shr ebx, cl
cmp edi, 0x20
jae 0x452d72
lea ebx, [ebx]
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x20
jb 0x452d50
mov ecx, ebx
mov eax, ebx
not ecx
and eax, 0xffff
shr ecx, 0x10
cmp eax, ecx
je 0x452d93
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_stored_block_lengths
jmp 0x453861
xor ebx, ebx
mov dword [esi + 0x40], eax
xor edi, edi
mov dword [esi], 0xe
mov dword [esi], 0xf
mov eax, dword [esi + 0x40]
mov dword [ebp - 0xc], eax
test eax, eax
je 0x453421
mov ecx, dword [ebp - 4]
cmp eax, ecx
jbe 0x452dc0
mov eax, ecx
mov dword [ebp - 0xc], ecx
mov ecx, dword [ebp - 0x10]
cmp eax, ecx
jbe 0x452dcc
mov eax, ecx
mov dword [ebp - 0xc], eax
test eax, eax
je 0x4538c1
mov ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 0x18]
push ecx
push edx
push eax
call fcn.004bd390
mov eax, dword [ebp - 0xc]
add dword [ebp - 8], eax
sub dword [ebp - 4], eax
sub dword [ebp - 0x10], eax
add dword [ebp - 0x18], eax
mov edx, dword [ebp - 8]
add esp, 0xc
sub dword [esi + 0x40], eax
jmp 0x453867
cmp edi, 0xe
jae 0x452e32
jmp 0x452e10
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0xe
jb 0x452e10
mov ecx, ebx
and ecx, 0x1f
shr ebx, 5
add ecx, 0x101
mov eax, ebx
mov dword [esi + 0x60], ecx
shr ebx, 5
mov ecx, ebx
and eax, 0x1f
and ecx, 0xf
inc eax
add ecx, 4
shr ebx, 4
sub edi, 0xe
cmp dword [esi + 0x60], 0x11e
mov dword [esi + 0x64], eax
mov dword [esi + 0x5c], ecx
ja 0x452f51
cmp eax, 0x1e
ja 0x452f51
mov dword [esi + 0x68], 0
mov dword [esi], 0x11
mov ecx, dword [esi + 0x68]
cmp ecx, dword [esi + 0x5c]
jae 0x452edd
jmp 0x452e90
cmp edi, 3
jae 0x452eb7
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 3
jb 0x452e95
mov eax, dword [esi + 0x68]
movzx eax, word [eax*2 + 0x51e0e0]
mov ecx, ebx
and ecx, 7
mov word [esi + eax*2 + 0x70], cx
inc dword [esi + 0x68]
mov ecx, dword [esi + 0x68]
shr ebx, 3
sub edi, 3
cmp ecx, dword [esi + 0x5c]
jb 0x452e90
mov eax, 0x13
cmp dword [esi + 0x68], eax
jae 0x452f0a
jmp 0x452ef0
mov edx, dword [esi + 0x68]
movzx ecx, word [edx*2 + 0x51e0e0]
xor edx, edx
mov word [esi + ecx*2 + 0x70], dx
inc dword [esi + 0x68]
cmp dword [esi + 0x68], eax
jb 0x452ef0
lea eax, [esi + 0x530]
lea ecx, [esi + 0x6c]
lea edx, [esi + 0x2f0]
push edx
mov dword [ecx], eax
mov dword [esi + 0x4c], eax
lea eax, [esi + 0x54]
push eax
push 0x13
lea edx, [esi + 0x70]
push 0
mov dword [eax], 7
call fcn.00455990
mov edx, dword [ebp - 8]
add esp, 0x10
mov dword [ebp - 0x28], eax
test eax, eax
je 0x452f60
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_code_lengths_set
jmp 0x453861
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.too_many_length_or_distance_symbols
jmp 0x453861
mov dword [esi + 0x68], 0
mov dword [esi], 0x12
mov ecx, dword [esi + 0x64]
add ecx, dword [esi + 0x60]
cmp dword [esi + 0x68], ecx
jae 0x453163
lea esp, [esp]
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
mov ecx, dword [esi + 0x4c]
dec eax
and eax, ebx
mov ecx, dword [ecx + eax*4]
mov eax, ecx
shr eax, 8
movzx eax, al
mov dword [ebp - 0xc], ecx
cmp eax, edi
jbe 0x452fe1
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
mov ecx, dword [esi + 0x54]
inc edx
add edi, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [esi + 0x4c]
mov dword [ebp - 8], edx
dec eax
and eax, ebx
mov ecx, dword [ecx + eax*4]
mov eax, ecx
shr eax, 8
movzx eax, al
mov dword [ebp - 0xc], ecx
cmp eax, edi
ja 0x452fa2
mov eax, ecx
shr eax, 0x10
mov dword [ebp - 0x2c], eax
cmp ax, 0x10
jae 0x453009
shr ecx, 8
movzx ecx, cl
shr ebx, cl
sub edi, ecx
mov ecx, dword [esi + 0x68]
mov word [esi + ecx*2 + 0x70], ax
inc dword [esi + 0x68]
jmp 0x453154
jne 0x45307a
mov eax, ecx
shr eax, 8
movzx eax, al
add eax, 2
cmp edi, eax
jae 0x45304a
lea ebx, [ebx]
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
mov ecx, dword [ebp - 0xc]
inc edx
add edi, 8
add ebx, eax
movzx eax, ch
add eax, 2
mov dword [ebp - 8], edx
cmp edi, eax
jb 0x453020
mov eax, dword [esi + 0x68]
movzx ecx, ch
shr ebx, cl
sub edi, ecx
test eax, eax
je 0x453185
movzx ecx, word [esi + eax*2 + 0x6e]
mov eax, ebx
and eax, 3
add eax, 3
shr ebx, 2
mov dword [ebp - 0x1c], ecx
mov dword [ebp - 0xc], eax
sub edi, 2
jmp 0x45311f
cmp word [ebp - 0xa], 0x11
movzx ecx, ch
mov dword [ebp - 0x24], ecx
jne 0x4530ce
lea eax, [ecx + 3]
cmp edi, eax
jae 0x4530b7
mov edi, edi
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
mov ecx, dword [ebp - 0x24]
inc edx
add edi, 8
add ebx, eax
lea eax, [ecx + 3]
mov dword [ebp - 8], edx
cmp edi, eax
jb 0x453090
shr ebx, cl
mov eax, ebx
and eax, 7
add eax, 3
mov dword [ebp - 0xc], eax
shr ebx, 3
mov eax, 0xfffffffd
jmp 0x453111
lea eax, [ecx + 7]
cmp edi, eax
jae 0x4530fc
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
mov ecx, dword [ebp - 0x24]
inc edx
add edi, 8
add ebx, eax
lea eax, [ecx + 7]
mov dword [ebp - 8], edx
cmp edi, eax
jb 0x4530d5
shr ebx, cl
mov eax, ebx
and eax, 0x7f
add eax, 0xb
mov dword [ebp - 0xc], eax
shr ebx, 7
mov eax, 0xfffffff9
sub eax, ecx
add edi, eax
mov eax, dword [ebp - 0xc]
mov dword [ebp - 0x1c], 0
mov ecx, dword [esi + 0x68]
add ecx, eax
mov eax, dword [esi + 0x64]
add eax, dword [esi + 0x60]
cmp ecx, eax
ja 0x453194
cmp dword [ebp - 0xc], 0
je 0x453154
mov eax, dword [ebp - 0x1c]
jmp 0x453140
mov ecx, dword [esi + 0x68]
dec dword [ebp - 0xc]
mov word [esi + ecx*2 + 0x70], ax
inc dword [esi + 0x68]
cmp dword [ebp - 0xc], 0
jne 0x453140
mov eax, dword [esi + 0x64]
add eax, dword [esi + 0x60]
cmp dword [esi + 0x68], eax
jb 0x452f80
cmp dword [esi], 0x1d
je 0x453867
cmp word [esi + 0x270], 0
jne 0x4531a3
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_code____missing_end_of_block
jmp 0x453861
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_bit_length_repeat
jmp 0x453861
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_bit_length_repeat
jmp 0x453861
lea eax, [esi + 0x530]
lea ecx, [esi + 0x6c]
lea edx, [esi + 0x2f0]
push edx
mov edx, dword [esi + 0x60]
mov dword [ecx], eax
mov dword [esi + 0x4c], eax
lea eax, [esi + 0x54]
push eax
push edx
lea edx, [esi + 0x70]
push 1
mov dword [eax], 9
call fcn.00455990
add esp, 0x10
mov dword [ebp - 0x28], eax
test eax, eax
je 0x4531ec
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 8]
mov dword [eax + 0x18], str.invalid_literal_lengths_set
jmp 0x453861
mov edx, dword [esi + 0x6c]
lea ecx, [esi + 0x6c]
mov dword [esi + 0x50], edx
lea edx, [esi + 0x2f0]
push edx
mov edx, dword [esi + 0x60]
lea eax, [esi + 0x58]
push eax
mov dword [eax], 6
mov eax, dword [esi + 0x64]
push eax
lea edx, [esi + edx*2 + 0x70]
push 2
call fcn.00455990
mov edx, dword [ebp - 8]
add esp, 0x10
mov dword [ebp - 0x28], eax
test eax, eax
je 0x453234
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_distances_set
jmp 0x453861
mov dword [esi], 0x13
mov dword [esi], 0x14
cmp dword [ebp - 4], 6
jb 0x4532b4
cmp dword [ebp - 0x10], 0x102
jb 0x4532b4
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x18]
mov edx, dword [ebp - 0x10]
mov dword [eax + 0xc], ecx
mov ecx, dword [ebp - 8]
mov dword [eax], ecx
mov ecx, dword [ebp - 0x20]
mov dword [eax + 0x10], edx
mov edx, dword [ebp - 4]
push ecx
mov dword [eax + 4], edx
push eax
mov dword [esi + 0x38], ebx
mov dword [esi + 0x3c], edi
call fcn.00455ed0
mov eax, dword [ebp + 8]
mov edx, dword [eax + 0xc]
mov ecx, dword [eax + 0x10]
mov ebx, dword [esi + 0x38]
mov edi, dword [esi + 0x3c]
mov dword [ebp - 0x18], edx
mov edx, dword [eax]
mov eax, dword [eax + 4]
add esp, 8
cmp dword [esi], 0xb
mov dword [ebp - 0x10], ecx
mov dword [ebp - 8], edx
mov dword [ebp - 4], eax
jne 0x453867
mov dword [esi + 0x1bc4], 0xffffffff
jmp 0x453867
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
mov dword [esi + 0x1bc4], 0
dec eax
and eax, ebx
mov ecx, eax
mov eax, dword [esi + 0x4c]
mov eax, dword [eax + ecx*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], eax
cmp ecx, edi
jbe 0x453321
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
mov ecx, dword [esi + 0x54]
inc edx
add edi, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [esi + 0x4c]
mov dword [ebp - 8], edx
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], eax
cmp ecx, edi
ja 0x4532e2
test al, al
je 0x4533e7
test al, 0xf0
jne 0x4533e7
mov ecx, eax
shr ecx, 8
mov dword [ebp - 0x2c], ecx
movzx ecx, cl
mov dword [ebp - 0x1c], ecx
movzx ecx, al
add ecx, dword [ebp - 0x1c]
mov dword [ebp - 0x24], eax
mov eax, 1
shl eax, cl
mov ecx, dword [ebp - 0x1c]
dec eax
and eax, ebx
shr eax, cl
mov ecx, dword [ebp - 0xc]
shr ecx, 0x10
add eax, ecx
mov ecx, eax
mov eax, dword [esi + 0x4c]
mov eax, dword [eax + ecx*4]
movzx ecx, byte [ebp - 0x2c]
mov dword [ebp - 0xc], eax
shr eax, 8
movzx eax, al
add eax, ecx
cmp eax, edi
jbe 0x4533d6
lea ebx, [ebx]
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
mov ecx, edi
shl eax, cl
mov ecx, dword [ebp - 0x24]
dec dword [ebp - 4]
inc edx
add ebx, eax
movzx eax, ch
mov dword [ebp - 0x1c], eax
movzx ecx, cl
add ecx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [ebp - 0x1c]
add edi, 8
mov dword [ebp - 8], edx
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [ebp - 0x22]
add eax, ecx
mov ecx, dword [esi + 0x4c]
mov eax, dword [ecx + eax*4]
mov dword [ebp - 0xc], eax
shr eax, 8
movzx eax, al
add eax, dword [ebp - 0x1c]
cmp eax, edi
ja 0x453380
movzx ecx, byte [ebp - 0x23]
mov eax, dword [ebp - 0xc]
shr ebx, cl
sub edi, ecx
mov dword [esi + 0x1bc4], ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [esi + 0x1bc4], ecx
shr ebx, cl
sub edi, ecx
mov dword [ebp - 0x1c], ecx
mov ecx, eax
shr ecx, 0x10
mov dword [esi + 0x40], ecx
test al, al
jne 0x453413
mov dword [esi], 0x19
jmp 0x453867
test al, 0x20
je 0x45342c
mov dword [esi + 0x1bc4], 0xffffffff
mov dword [esi], 0xb
jmp 0x453867
test al, 0x40
je 0x45343f
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_literal_length_code
jmp 0x453861
movzx ecx, al
and ecx, 0xf
mov dword [esi + 0x48], ecx
mov dword [esi], 0x15
mov eax, dword [esi + 0x48]
test eax, eax
je 0x45349c
cmp edi, eax
jae 0x453482
lea esp, [esp]
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, dword [esi + 0x48]
jb 0x453460
mov ecx, dword [esi + 0x48]
mov eax, 1
shl eax, cl
sub edi, ecx
dec eax
and eax, ebx
add dword [esi + 0x40], eax
shr ebx, cl
add dword [esi + 0x1bc4], ecx
mov ecx, dword [esi + 0x40]
mov dword [esi + 0x1bc8], ecx
mov dword [esi], 0x16
mov ecx, dword [esi + 0x58]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
mov ecx, eax
mov eax, dword [esi + 0x50]
mov eax, dword [eax + ecx*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], eax
cmp ecx, edi
jbe 0x45350f
nop
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
mov ecx, dword [esi + 0x58]
inc edx
add edi, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [esi + 0x50]
mov dword [ebp - 8], edx
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], eax
cmp ecx, edi
ja 0x4534d0
test al, 0xf0
jne 0x4535c7
mov ecx, eax
shr ecx, 8
mov dword [ebp - 0x2c], ecx
movzx ecx, cl
mov dword [ebp - 0x1c], ecx
movzx ecx, al
add ecx, dword [ebp - 0x1c]
mov dword [ebp - 0x24], eax
mov eax, 1
shl eax, cl
mov ecx, dword [ebp - 0x1c]
dec eax
and eax, ebx
shr eax, cl
mov ecx, dword [ebp - 0xc]
shr ecx, 0x10
add eax, ecx
mov ecx, eax
mov eax, dword [esi + 0x50]
mov eax, dword [eax + ecx*4]
movzx ecx, byte [ebp - 0x2c]
mov dword [ebp - 0xc], eax
shr eax, 8
movzx eax, al
add eax, ecx
cmp eax, edi
jbe 0x4535b6
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
mov ecx, edi
shl eax, cl
mov ecx, dword [ebp - 0x24]
dec dword [ebp - 4]
inc edx
add ebx, eax
movzx eax, ch
mov dword [ebp - 0x1c], eax
movzx ecx, cl
add ecx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [ebp - 0x1c]
add edi, 8
mov dword [ebp - 8], edx
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [ebp - 0x22]
add eax, ecx
mov ecx, dword [esi + 0x50]
mov eax, dword [ecx + eax*4]
mov dword [ebp - 0xc], eax
shr eax, 8
movzx eax, al
add eax, dword [ebp - 0x1c]
cmp eax, edi
ja 0x453560
movzx ecx, byte [ebp - 0x23]
mov eax, dword [ebp - 0xc]
shr ebx, cl
sub edi, ecx
add dword [esi + 0x1bc4], ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [esi + 0x1bc4], ecx
shr ebx, cl
sub edi, ecx
mov dword [ebp - 0x1c], ecx
test al, 0x40
je 0x4535ef
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_distance_code
jmp 0x453861
mov ecx, eax
movzx eax, al
shr ecx, 0x10
and eax, 0xf
mov dword [esi + 0x44], ecx
mov dword [esi + 0x48], eax
mov dword [esi], 0x17
mov eax, dword [esi + 0x48]
test eax, eax
je 0x45364d
cmp edi, eax
jae 0x453633
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, dword [esi + 0x48]
jb 0x453611
mov ecx, dword [esi + 0x48]
mov eax, 1
shl eax, cl
sub edi, ecx
dec eax
and eax, ebx
add dword [esi + 0x44], eax
shr ebx, cl
add dword [esi + 0x1bc4], ecx
mov dword [esi], 0x18
cmp dword [ebp - 0x10], 0
je 0x4538c1
mov ecx, dword [ebp - 0x20]
sub ecx, dword [ebp - 0x10]
mov eax, dword [esi + 0x44]
cmp eax, ecx
jbe 0x4536be
sub eax, ecx
mov dword [ebp - 0xc], eax
cmp eax, dword [esi + 0x2c]
jbe 0x45368c
cmp dword [esi + 0x1bc0], 0
je 0x45368c
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_distance_too_far_back
jmp 0x453861
mov ecx, dword [esi + 0x30]
cmp eax, ecx
jbe 0x4536a2
sub eax, ecx
mov ecx, dword [esi + 0x34]
add ecx, dword [esi + 0x28]
mov dword [ebp - 0xc], eax
sub ecx, eax
jmp 0x4536ad
mov ecx, dword [esi + 0x34]
sub ecx, eax
add ecx, dword [esi + 0x30]
mov eax, dword [ebp - 0xc]
mov dword [ebp - 0x2c], ecx
mov ecx, dword [esi + 0x40]
mov dword [ebp - 0x24], ecx
cmp eax, ecx
jbe 0x4536cf
mov eax, ecx
jmp 0x4536cc
mov ecx, dword [ebp - 0x18]
sub ecx, eax
mov eax, dword [esi + 0x40]
mov dword [ebp - 0x2c], ecx
mov dword [ebp - 0x24], eax
mov dword [ebp - 0xc], eax
mov ecx, dword [ebp - 0x10]
cmp eax, ecx
jbe 0x4536db
mov eax, ecx
mov dword [ebp - 0xc], eax
sub ecx, eax
mov dword [ebp - 0x10], ecx
mov ecx, dword [ebp - 0x24]
sub ecx, eax
mov eax, dword [ebp - 0x18]
mov dword [esi + 0x40], ecx
mov ecx, dword [ebp - 0x2c]
sub ecx, dword [ebp - 0x18]
mov dword [ebp - 0x2c], ecx
jmp 0x4536f9
mov ecx, dword [ebp - 0x2c]
mov cl, byte [ecx + eax]
mov eax, dword [ebp - 0x18]
mov byte [eax], cl
inc eax
dec dword [ebp - 0xc]
mov dword [ebp - 0x18], eax
jne 0x4536f6
cmp dword [esi + 0x40], 0
jne 0x453867
mov dword [esi], 0x14
jmp 0x453867
cmp dword [ebp - 0x10], 0
je 0x4538c1
mov eax, dword [ebp - 0x18]
mov cl, byte [esi + 0x40]
mov byte [eax], cl
inc eax
dec dword [ebp - 0x10]
mov dword [ebp - 0x18], eax
mov dword [esi], 0x14
jmp 0x453867
cmp dword [esi + 8], 0
je 0x45380a
cmp edi, 0x20
jae 0x453774
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x20
jb 0x453752
mov eax, dword [ebp - 0x20]
sub eax, dword [ebp - 0x10]
mov ecx, dword [ebp + 8]
add dword [ecx + 0x14], eax
add dword [esi + 0x1c], eax
mov dword [ebp - 0x20], eax
test eax, eax
je 0x4537c4
cmp dword [esi + 0x10], 0
je 0x4537a4
mov edx, dword [esi + 0x18]
mov ecx, dword [ebp - 0x18]
push eax
sub ecx, eax
push edx
call fcn.00455670
add esp, 8
jmp 0x4537b8
mov ecx, dword [ebp - 0x20]
mov eax, dword [ebp - 0x18]
push ecx
sub eax, ecx
mov ecx, dword [esi + 0x18]
call fcn.00455410
add esp, 4
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 8]
mov dword [esi + 0x18], eax
mov dword [ecx + 0x30], eax
cmp dword [esi + 0x10], 0
mov eax, dword [ebp - 0x10]
mov dword [ebp - 0x20], eax
mov eax, ebx
jne 0x4537f5
and eax, 0xff00
mov ecx, ebx
shl ecx, 0x10
add eax, ecx
mov ecx, ebx
shr ecx, 8
and ecx, 0xff00
shl eax, 8
add eax, ecx
mov ecx, ebx
shr ecx, 0x18
add eax, ecx
cmp eax, dword [esi + 0x18]
je 0x453806
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.incorrect_data_check
jmp 0x453861
xor ebx, ebx
xor edi, edi
mov dword [esi], 0x1b
cmp dword [esi + 8], 0
je 0x4538ab
cmp dword [esi + 0x10], 0
je 0x4538ab
cmp edi, 0x20
jae 0x453852
lea esp, [esp]
cmp dword [ebp - 4], 0
je 0x4538c1
movzx eax, byte [edx]
dec dword [ebp - 4]
mov ecx, edi
shl eax, cl
inc edx
add edi, 8
mov dword [ebp - 8], edx
add ebx, eax
cmp edi, 0x20
jb 0x453830
cmp ebx, dword [esi + 0x1c]
je 0x4538a7
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.incorrect_length_check
mov dword [esi], 0x1d
mov eax, dword [esi]
cmp eax, 0x1e
jbe switch.0x004525e8
mov eax, 0xfffffffe
pop edi
pop ebx
pop esi
mov esp, ebp
pop ebp
ret
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x18]
mov dword [eax + 0xc], ecx
mov ecx, dword [ebp - 0x10]
mov dword [eax], edx
mov edx, dword [ebp - 4]
mov dword [eax + 0x10], ecx
mov dword [eax + 4], edx
mov dword [esi + 0x3c], edi
pop edi
mov dword [esi + 0x38], ebx
pop ebx
mov eax, 2
pop esi
mov esp, ebp
pop ebp
ret
xor ebx, ebx
xor edi, edi
mov dword [esi], 0x1c
mov dword [ebp - 0x28], 1
jmp 0x4538c1
mov dword [ebp - 0x28], 0xfffffffd
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x18]
mov dword [eax + 0xc], ecx
mov ecx, dword [ebp - 0x10]
mov dword [eax], edx
mov edx, dword [ebp - 4]
mov dword [eax + 0x10], ecx
mov dword [eax + 4], edx
cmp dword [esi + 0x28], 0
mov dword [esi + 0x38], ebx
mov dword [esi + 0x3c], edi
jne 0x4538f1
mov ecx, dword [ebp - 0x20]
cmp ecx, dword [eax + 0x10]
je 0x453915
cmp dword [esi], 0x1d
jge 0x453915
mov edx, eax
mov eax, dword [ebp - 0x20]
push edx
call fcn.00452470
add esp, 4
test eax, eax
je 0x453915
mov dword [esi], 0x1e
pop edi
pop ebx
mov eax, 0xfffffffc
pop esi
mov esp, ebp
pop ebp
ret
mov edi, dword [ebp + 8]
mov eax, dword [ebp - 0x30]
sub eax, dword [edi + 4]
mov ebx, dword [ebp - 0x20]
sub ebx, dword [edi + 0x10]
add dword [edi + 8], eax
add dword [edi + 0x14], ebx
add dword [esi + 0x1c], ebx
cmp dword [esi + 8], 0
mov dword [ebp - 0x30], eax
je 0x45396d
test ebx, ebx
je 0x45396d
cmp dword [esi + 0x10], 0
je 0x453956
mov ecx, dword [edi + 0xc]
sub ecx, ebx
mov eax, dword [esi + 0x18]
jne 0x45394e
xor eax, eax
jmp 0x453967
push ebx
call fcn.00455690
jmp 0x453964
mov eax, dword [edi + 0xc]
mov ecx, dword [esi + 0x18]
push ebx
sub eax, ebx
call fcn.00455410
add esp, 4
mov dword [esi + 0x18], eax
mov dword [edi + 0x30], eax
mov eax, dword [esi]
cmp eax, 0x13
je 0x453980
mov dword [ebp + 8], 0
cmp eax, 0xe
jne 0x453987
mov dword [ebp + 8], 0x100
mov ecx, dword [esi + 4]
neg ecx
sbb ecx, ecx
xor edx, edx
and ecx, 0x40
cmp eax, 0xb
setne dl
add ecx, dword [ebp + 8]
dec edx
and edx, 0x80
add edx, ecx
add edx, dword [esi + 0x3c]
cmp dword [ebp - 0x30], 0
mov dword [edi + 0x2c], edx
jne 0x4539ca
test ebx, ebx
jne 0x4539ca
mov eax, dword [ebp - 0x28]
test eax, eax
jne 0x453877
pop edi
lea eax, [ebx - 5]
pop ebx
pop esi
mov esp, ebp
pop ebp
ret
mov eax, dword [ebp - 0x28]
pop edi
pop ebx
pop esi
mov esp, ebp
pop ebp
ret
mov eax, 0xfffffffe
pop esi
mov esp, ebp
pop ebp
ret