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

Disassembly:
mov ecx, dword [esp + 4]
sub esp, 0x3c
push ebx
push ebp
push esi
push edi
test ecx, ecx
je case.default.0x438888
mov edi, dword [ecx + 0x1c]
mov dword [esp + 0x2c], edi
test edi, edi
je case.default.0x438888
mov eax, dword [ecx + 0xc]
mov dword [esp + 0x24], eax
test eax, eax
je case.default.0x438888
mov ebx, dword [ecx]
mov dword [esp + 0x18], ebx
test ebx, ebx
jne 0x438834
cmp dword [ecx + 4], ebx
jne case.default.0x438888
mov eax, dword [edi]
cmp eax, 0xb
jne 0x438853
mov dword [edi], 0xc
mov eax, dword [ecx + 0xc]
mov ebx, dword [ecx]
mov dword [esp + 0x24], eax
mov eax, 0xc
mov dword [esp + 0x18], ebx
mov edx, dword [ecx + 0x10]
mov ebp, dword [ecx + 4]
mov esi, dword [edi + 0x3c]
mov dword [esp + 0x1c], edx
mov ecx, dword [esp + 0x1c]
mov edx, dword [edi + 0x38]
mov dword [esp + 0x28], ecx
xor ecx, ecx
mov dword [esp + 0x14], edx
mov dword [esp + 0x3c], ebp
mov dword [esp + 0x30], ecx
cmp eax, 0x1e
ja case.default.0x438888
mov ebx, dword [esp + 0x18]
mov ecx, eax
jmp dword [eax*4 + 0x439dec]
mov ecx, dword [edi + 8]
test ecx, ecx
jne 0x4388a1
mov dword [edi], 0xc
jmp 0x439835
cmp esi, 0x10
jae 0x4388cc
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x10
jb 0x4388a6
mov ecx, dword [edi + 8]
test cl, 2
je 0x438916
cmp edx, 0x8b1f
jne 0x438916
push 0
push 0
push 0
call fcn.0043a3e0
mov dword [edi + 0x18], eax
lea eax, [esp + 0x2c]
push 2
push eax
mov word [esp + 0x34], 0x8b1f
push dword [edi + 0x18]
call fcn.0043a3e0
xor edx, edx
mov dword [edi + 0x18], eax
add esp, 0x18
mov dword [esp + 0x14], edx
xor esi, esi
mov dword [edi], 1
jmp 0x439835
mov eax, dword [edi + 0x20]
mov dword [edi + 0x10], 0
test eax, eax
je 0x43892e
mov dword [eax + 0x30], 0xffffffff
mov ecx, dword [edi + 8]
test cl, 1
je 0x4389ed
movzx ecx, dl
mov eax, edx
shl ecx, 8
xor edx, edx
shr eax, 8
add eax, ecx
mov ecx, 0x1f
div ecx
test edx, edx
mov edx, dword [esp + 0x14]
jne 0x4389ed
mov eax, edx
and al, 0xf
cmp al, 8
je 0x438977
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.unknown_compression_method
mov dword [edi], 0x1d
jmp 0x439835
mov eax, dword [edi + 0x24]
sub esi, 4
shr edx, 4
mov ecx, edx
mov dword [esp + 0x14], edx
and ecx, 0xf
add ecx, 8
test eax, eax
jne 0x4389d3
mov dword [edi + 0x24], ecx
push 0
mov eax, 1
shl eax, cl
push 0
push 0
mov dword [edi + 0x14], eax
call fcn.0043a170
mov edx, dword [esp + 0x20]
add esp, 0xc
mov ecx, dword [esp + 0x50]
shr edx, 8
not edx
mov dword [edi + 0x18], eax
and edx, 2
or edx, 9
mov dword [ecx + 0x30], eax
mov dword [edi], edx
xor edx, edx
mov dword [esp + 0x14], edx
xor esi, esi
jmp 0x439835
cmp ecx, eax
jbe 0x438993
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_window_size
mov dword [edi], 0x1d
jmp 0x439835
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.incorrect_header_check
mov dword [edi], 0x1d
jmp 0x439835
cmp esi, 0x10
jae 0x438a2b
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x10
jb 0x438a08
mov dword [edi + 0x10], edx
cmp dl, 8
jne 0x438961
test edx, 0xe000
je 0x438a55
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.unknown_header_flags_set
mov dword [edi], 0x1d
jmp 0x439835
mov esi, dword [edi + 0x20]
mov ecx, edx
shr ecx, 8
mov eax, edx
test esi, esi
je 0x438a6d
mov eax, ecx
and eax, 1
mov dword [esi], eax
mov eax, dword [edi + 0x10]
test eax, 0x200
je 0x438a91
push 2
lea eax, [esp + 0x24]
mov byte [esp + 0x24], dl
push eax
mov byte [esp + 0x29], cl
push dword [edi + 0x18]
call fcn.0043a3e0
add esp, 0xc
mov dword [edi + 0x18], eax
xor edx, edx
mov dword [edi], 2
mov dword [esp + 0x14], edx
xor esi, esi
jmp 0x438aa6
cmp esi, 0x20
jae 0x438ac9
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x20
jb 0x438aa6
mov eax, dword [edi + 0x20]
test eax, eax
je 0x438ad3
mov dword [eax + 4], edx
test dword [edi + 0x10], 0x200
je 0x438b0e
mov eax, edx
mov byte [esp + 0x20], dl
shr eax, 8
mov byte [esp + 0x21], al
mov eax, edx
shr eax, 0x10
mov byte [esp + 0x22], al
lea eax, [esp + 0x20]
push 4
shr edx, 0x18
push eax
mov byte [esp + 0x2b], dl
push dword [edi + 0x18]
call fcn.0043a3e0
add esp, 0xc
mov dword [edi + 0x18], eax
xor edx, edx
mov dword [edi], 3
mov dword [esp + 0x14], edx
xor esi, esi
jmp 0x438b23
cmp esi, 0x10
jae 0x438b46
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x10
jb 0x438b23
mov esi, dword [edi + 0x20]
mov ecx, edx
shr ecx, 8
test esi, esi
je 0x438b5e
movzx eax, dl
mov dword [esi + 8], eax
mov eax, dword [edi + 0x20]
mov dword [eax + 0xc], ecx
test dword [edi + 0x10], 0x200
je 0x438b84
push 2
lea eax, [esp + 0x24]
mov byte [esp + 0x24], dl
push eax
mov byte [esp + 0x29], cl
push dword [edi + 0x18]
call fcn.0043a3e0
add esp, 0xc
mov dword [edi + 0x18], eax
xor edx, edx
mov dword [edi], 4
mov dword [esp + 0x14], edx
xor esi, esi
test dword [edi + 0x10], 0x400
je 0x438c05
cmp esi, 0x10
jae 0x438bc3
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x10
jb 0x438ba0
mov eax, dword [edi + 0x20]
mov dword [edi + 0x40], edx
test eax, eax
je 0x438bd0
mov dword [eax + 0x14], edx
test dword [edi + 0x10], 0x200
je 0x438bf9
mov byte [esp + 0x20], dl
lea eax, [esp + 0x20]
push 2
shr edx, 8
push eax
mov byte [esp + 0x29], dl
push dword [edi + 0x18]
call fcn.0043a3e0
add esp, 0xc
mov dword [edi + 0x18], eax
mov dword [esp + 0x14], 0
xor esi, esi
jmp 0x438c13
mov eax, dword [edi + 0x20]
test eax, eax
je 0x438c13
mov dword [eax + 0x10], 0
mov dword [edi], 5
mov eax, dword [edi + 0x10]
test eax, 0x400
je 0x438cc2
mov edx, dword [edi + 0x40]
mov ecx, ebp
cmp edx, ebp
cmovbe ecx, edx
mov dword [esp + 0x34], ecx
test ecx, ecx
je 0x438cba
cmp dword [edi + 0x20], 0
mov ebx, dword [esp + 0x18]
je 0x438c91
mov edi, dword [edi + 0x20]
mov edi, dword [edi + 0x10]
test edi, edi
mov dword [esp + 0x40], edi
mov edi, dword [esp + 0x2c]
je 0x438c91
mov eax, dword [edi + 0x20]
mov eax, dword [eax + 0x14]
sub eax, edx
mov edx, dword [edi + 0x20]
mov dword [esp + 0x38], eax
add eax, ecx
mov edx, dword [edx + 0x18]
cmp eax, edx
mov eax, dword [esp + 0x38]
jbe 0x438c79
sub edx, eax
jmp 0x438c7b
mov edx, ecx
add eax, dword [esp + 0x40]
push edx
push ebx
push eax
call fcn.0048f9d0
mov eax, dword [edi + 0x10]
add esp, 0xc
mov ecx, dword [esp + 0x34]
test eax, 0x200
je 0x438ca8
push ecx
push ebx
push dword [edi + 0x18]
call fcn.0043a3e0
add esp, 0xc
mov dword [edi + 0x18], eax
mov eax, dword [esp + 0x34]
add ebx, eax
sub ebp, eax
mov dword [esp + 0x18], ebx
sub dword [edi + 0x40], eax
mov edx, dword [edi + 0x40]
test edx, edx
jne 0x439cdc
mov dword [edi + 0x40], 0
mov dword [edi], 6
test dword [edi + 0x10], 0x800
je 0x438d57
test ebp, ebp
je 0x439cdc
xor ecx, ecx
mov al, byte [ecx + ebx]
inc ecx
mov byte [esp + 0x13], al
mov eax, dword [edi + 0x20]
test eax, eax
je 0x438d14
cmp dword [eax + 0x1c], 0
je 0x438d14
mov edx, dword [edi + 0x40]
cmp edx, dword [eax + 0x20]
jae 0x438d14
mov eax, dword [eax + 0x1c]
mov bl, byte [esp + 0x13]
mov byte [edx + eax], bl
inc dword [edi + 0x40]
mov ebx, dword [esp + 0x18]
mov al, byte [esp + 0x13]
test al, al
je 0x438d20
cmp ecx, ebp
jb 0x438ce6
test dword [edi + 0x10], 0x200
mov dword [esp + 0x40], ecx
je 0x438d45
push ecx
push ebx
push dword [edi + 0x18]
call fcn.0043a3e0
mov ecx, dword [esp + 0x4c]
add esp, 0xc
mov dword [edi + 0x18], eax
mov al, byte [esp + 0x13]
add ebx, ecx
sub ebp, ecx
mov dword [esp + 0x18], ebx
test al, al
jne 0x439cdc
jmp 0x438d65
mov eax, dword [edi + 0x20]
test eax, eax
je 0x438d65
mov dword [eax + 0x1c], 0
mov dword [edi + 0x40], 0
mov dword [edi], 7
test dword [edi + 0x10], 0x1000
je 0x438e01
test ebp, ebp
je 0x439cdc
xor ecx, ecx
nop dword [eax]
mov al, byte [ecx + ebx]
inc ecx
mov byte [esp + 0x13], al
mov eax, dword [edi + 0x20]
test eax, eax
je 0x438dbe
cmp dword [eax + 0x24], 0
je 0x438dbe
mov edx, dword [edi + 0x40]
cmp edx, dword [eax + 0x28]
jae 0x438dbe
mov eax, dword [eax + 0x24]
mov bl, byte [esp + 0x13]
mov byte [edx + eax], bl
inc dword [edi + 0x40]
mov ebx, dword [esp + 0x18]
mov al, byte [esp + 0x13]
test al, al
je 0x438dca
cmp ecx, ebp
jb 0x438d90
test dword [edi + 0x10], 0x200
mov dword [esp + 0x40], ecx
je 0x438def
push ecx
push ebx
push dword [edi + 0x18]
call fcn.0043a3e0
mov ecx, dword [esp + 0x4c]
add esp, 0xc
mov dword [edi + 0x18], eax
mov al, byte [esp + 0x13]
add ebx, ecx
sub ebp, ecx
mov dword [esp + 0x18], ebx
test al, al
jne 0x439cdc
jmp 0x438e0f
mov eax, dword [edi + 0x20]
test eax, eax
je 0x438e0f
mov dword [eax + 0x24], 0
mov edx, dword [esp + 0x14]
mov dword [edi], 8
mov ecx, dword [edi + 0x10]
test ecx, 0x200
je 0x438e7e
cmp esi, 0x10
jae 0x438e56
nop dword [eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x10
jb 0x438e30
mov ecx, dword [edi + 0x10]
movzx eax, word [edi + 0x18]
cmp edx, eax
je 0x438e74
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.header_crc_mismatch
mov dword [edi], 0x1d
jmp 0x439835
mov dword [esp + 0x14], 0
xor esi, esi
mov eax, dword [edi + 0x20]
test eax, eax
je 0x438e98
sar ecx, 9
and ecx, 1
mov dword [eax + 0x2c], ecx
mov eax, dword [edi + 0x20]
mov dword [eax + 0x30], 1
push 0
push 0
push 0
call fcn.0043a3e0
mov ecx, dword [esp + 0x5c]
add esp, 0xc
mov edx, dword [esp + 0x14]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov dword [edi], 0xb
jmp 0x439835
cmp esi, 0x20
jae 0x438ee7
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x20
jb 0x438ec4
mov ecx, edx
mov eax, edx
shl eax, 0x10
and ecx, 0xff00
add ecx, eax
mov eax, edx
shr eax, 8
shl ecx, 8
and eax, 0xff00
add eax, ecx
shr edx, 0x18
mov ecx, dword [esp + 0x50]
add eax, edx
xor edx, edx
mov dword [edi + 0x18], eax
mov dword [esp + 0x14], edx
xor esi, esi
mov dword [ecx + 0x30], eax
mov dword [edi], 0xa
jmp 0x438f28
mov ecx, dword [esp + 0x50]
cmp dword [edi + 0xc], 0
je 0x439c8e
push 0
push 0
push 0
call fcn.0043a170
mov ecx, dword [esp + 0x5c]
add esp, 0xc
mov edx, dword [esp + 0x14]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov dword [edi], 0xb
mov eax, dword [esp + 0x54]
cmp eax, 5
je 0x439cdc
cmp eax, 6
je 0x439cdc
cmp dword [edi + 4], 0
je 0x438f88
mov ecx, esi
mov dword [edi], 0x1a
and ecx, 7
shr edx, cl
sub esi, ecx
mov dword [esp + 0x14], edx
jmp 0x439835
cmp esi, 3
jae 0x438fb3
nop dword [eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 3
jb 0x438f90
mov eax, edx
shr edx, 1
and eax, 1
mov dword [edi + 4], eax
mov eax, edx
and eax, 3
jmp dword [eax*4 + 0x439e68]
shr edx, 2
sub esi, 3
mov dword [edi], 0xd
mov dword [esp + 0x14], edx
jmp 0x439835
cmp dword [esp + 0x54], 6
mov dword [edi + 0x4c], 0x4c1990
mov dword [edi + 0x54], 9
mov dword [edi + 0x50], 0x4c2190
mov dword [edi + 0x58], 5
mov dword [edi], 0x13
jne 0x43903c
shr edx, 2
sub esi, 3
mov dword [esp + 0x14], edx
jmp 0x439cdc
shr edx, 2
sub esi, 3
mov dword [edi], 0x10
mov dword [esp + 0x14], edx
jmp 0x439835
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_block_type
mov dword [edi], 0x1d
shr edx, 2
sub esi, 3
mov dword [esp + 0x14], edx
jmp 0x439835
mov ecx, esi
and ecx, 7
shr edx, cl
sub esi, ecx
mov dword [esp + 0x14], edx
cmp esi, 0x20
jae 0x439083
nop dword [eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x20
jb 0x439060
mov eax, edx
movzx ecx, dx
not eax
shr eax, 0x10
cmp ecx, eax
je 0x4390a7
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_stored_block_lengths
mov dword [edi], 0x1d
jmp 0x439835
xor edx, edx
mov dword [edi + 0x40], ecx
xor esi, esi
mov dword [esp + 0x14], edx
cmp dword [esp + 0x54], 6
mov dword [edi], 0xe
je 0x439cdc
mov dword [edi], 0xf
mov ecx, dword [edi + 0x40]
test ecx, ecx
je 0x43911b
cmp ecx, ebp
mov eax, ebp
cmovbe eax, ecx
mov ecx, dword [esp + 0x1c]
cmp eax, ecx
cmovbe ecx, eax
mov dword [esp + 0x40], ecx
test ecx, ecx
je 0x439cdc
push ecx
mov ecx, dword [esp + 0x28]
push ebx
push ecx
call fcn.0048f9d0
mov eax, dword [esp + 0x4c]
add esp, 0xc
sub dword [esp + 0x1c], eax
add ebx, eax
add dword [esp + 0x24], eax
sub ebp, eax
sub dword [edi + 0x40], eax
mov edx, dword [esp + 0x14]
mov dword [esp + 0x18], ebx
jmp 0x439835
mov dword [edi], 0xb
jmp 0x439835
cmp esi, 0xe
jae 0x439153
nop dword [eax + eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0xe
jb 0x439130
mov ecx, edx
sub esi, 0xe
shr edx, 5
and ecx, 0x1f
mov eax, edx
add ecx, 0x101
and eax, 0x1f
shr edx, 5
inc eax
mov dword [edi + 0x60], ecx
mov dword [esp + 0x40], eax
mov dword [edi + 0x64], eax
mov eax, edx
and eax, 0xf
shr edx, 4
add eax, 4
mov dword [esp + 0x14], edx
mov dword [edi + 0x5c], eax
cmp ecx, 0x11e
ja 0x439282
cmp dword [esp + 0x40], 0x1e
ja 0x439282
mov dword [edi + 0x68], 0
mov dword [edi], 0x11
mov eax, dword [edi + 0x68]
cmp eax, dword [edi + 0x5c]
jae 0x43920d
cmp esi, 3
jae 0x4391e3
nop word [eax + eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 3
jb 0x4391c0
mov eax, dword [edi + 0x68]
mov ecx, edx
and ecx, 7
shr edx, 3
sub esi, 3
mov dword [esp + 0x14], edx
movzx eax, word [eax*2 + 0x4c2210]
mov word [edi + eax*2 + 0x70], cx
inc dword [edi + 0x68]
mov eax, dword [edi + 0x68]
cmp eax, dword [edi + 0x5c]
jb 0x4391b5
cmp eax, 0x13
jae 0x43922d
mov eax, dword [edi + 0x68]
xor ecx, ecx
movzx eax, word [eax*2 + 0x4c2210]
mov word [edi + eax*2 + 0x70], cx
inc dword [edi + 0x68]
cmp dword [edi + 0x68], 0x13
jb 0x439212
lea eax, [edi + 0x530]
mov dword [edi + 0x54], 7
lea edx, [edi + 0x6c]
mov dword [edi + 0x4c], eax
mov dword [edx], eax
lea ecx, [edi + 0x54]
lea eax, [edi + 0x2f0]
push eax
push ecx
push edx
push 0x13
lea eax, [edi + 0x70]
push eax
push 0
call fcn.0043a6d0
mov edx, dword [esp + 0x2c]
mov ecx, eax
add esp, 0x18
mov dword [esp + 0x30], ecx
test ecx, ecx
je 0x439298
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_code_lengths_set
mov dword [edi], 0x1d
jmp 0x439835
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.too_many_length_or_distance_symbols
mov dword [edi], 0x1d
jmp 0x439835
mov dword [edi + 0x68], 0
mov ecx, 0x12
mov dword [edi], 0x12
mov eax, dword [edi + 0x64]
add eax, dword [edi + 0x60]
cmp dword [edi + 0x68], eax
jae 0x43953e
nop dword [eax]
mov ecx, dword [edi + 0x54]
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
dec eax
mov dword [esp + 0x44], eax
and eax, edx
mov dword [esp + 0x48], ecx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
mov ebx, eax
shr ebx, 0x10
mov dword [esp + 0x34], ecx
movzx ecx, cl
mov dword [esp + 0x38], ebx
mov ebx, dword [esp + 0x18]
mov dword [esp + 0x40], eax
cmp ecx, esi
jbe 0x43934c
nop dword [eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
mov ecx, dword [esp + 0x48]
add edx, eax
mov eax, dword [esp + 0x44]
add esi, 8
and eax, edx
mov dword [esp + 0x14], edx
dec ebp
mov dword [esp + 0x18], ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
mov edi, eax
shr edi, 0x10
mov dword [esp + 0x34], ecx
movzx ecx, cl
mov dword [esp + 0x38], edi
mov edi, dword [esp + 0x2c]
mov dword [esp + 0x40], eax
cmp ecx, esi
ja 0x439300
mov edi, dword [esp + 0x38]
mov ecx, dword [esp + 0x34]
movzx edi, di
mov dword [esp + 0x44], edi
movzx edi, di
mov dword [esp + 0x48], edi
cmp edi, 0x10
mov edi, dword [esp + 0x2c]
mov dword [esp + 0x34], ecx
jae 0x4393c9
movzx ecx, cl
mov dword [esp + 0x48], ecx
cmp esi, ecx
jae 0x4393a6
nop word [eax + eax]
test ebp, ebp
je 0x439cdc
movzx edx, byte [ebx]
mov ecx, esi
shl edx, cl
inc ebx
add dword [esp + 0x14], edx
add esi, 8
dec ebp
mov dword [esp + 0x18], ebx
cmp esi, dword [esp + 0x48]
jb 0x439380
mov edx, dword [esp + 0x14]
movzx ecx, ah
mov ax, word [esp + 0x42]
sub esi, ecx
shr edx, cl
mov ecx, dword [edi + 0x68]
mov dword [esp + 0x14], edx
mov word [edi + ecx*2 + 0x70], ax
inc dword [edi + 0x68]
mov ecx, dword [edi + 0x68]
jmp 0x43952e
cmp word [esp + 0x48], 0x10
mov ecx, dword [esp + 0x34]
movzx ecx, cl
mov dword [esp + 0x34], ecx
jne 0x439444
add ecx, 2
cmp esi, ecx
jae 0x43940e
test ebp, ebp
je 0x439cdc
movzx edx, byte [ebx]
mov ecx, esi
shl edx, cl
inc ebx
mov ecx, dword [esp + 0x34]
add esi, 8
add dword [esp + 0x14], edx
add ecx, 2
dec ebp
mov dword [esp + 0x18], ebx
cmp esi, ecx
jb 0x4393e3
mov edx, dword [esp + 0x14]
movzx ecx, ah
mov eax, dword [edi + 0x68]
sub esi, ecx
shr edx, cl
mov dword [esp + 0x14], edx
test eax, eax
je 0x439567
movzx eax, word [edi + eax*2 + 0x6e]
mov ecx, edx
and ecx, 3
shr edx, 2
add ecx, 3
mov dword [esp + 0x38], eax
mov dword [esp + 0x34], ecx
sub esi, 2
jmp 0x4394f0
cmp word [esp + 0x44], 0x11
jne 0x439499
add ecx, 3
cmp esi, ecx
jae 0x43947e
test ebp, ebp
je 0x439cdc
movzx edx, byte [ebx]
mov ecx, esi
shl edx, cl
inc ebx
mov ecx, dword [esp + 0x34]
add esi, 8
add dword [esp + 0x14], edx
add ecx, 3
dec ebp
mov dword [esp + 0x18], ebx
cmp esi, ecx
jb 0x439453
mov edx, dword [esp + 0x14]
movzx ecx, ah
shr edx, cl
mov eax, edx
and eax, 7
add eax, 3
shr edx, 3
mov dword [esp + 0x34], eax
mov eax, 0xfffffffd
jmp 0x4394e4
add ecx, 7
cmp esi, ecx
jae 0x4394cb
test ebp, ebp
je 0x439cdc
movzx edx, byte [ebx]
mov ecx, esi
shl edx, cl
inc ebx
mov ecx, dword [esp + 0x34]
add esi, 8
add dword [esp + 0x14], edx
add ecx, 7
dec ebp
mov dword [esp + 0x18], ebx
cmp esi, ecx
jb 0x4394a0
mov edx, dword [esp + 0x14]
movzx ecx, ah
shr edx, cl
mov eax, edx
and eax, 0x7f
add eax, 0xb
shr edx, 7
mov dword [esp + 0x34], eax
mov eax, 0xfffffff9
sub eax, ecx
mov dword [esp + 0x38], 0
add esi, eax
mov ecx, dword [edi + 0x68]
mov eax, dword [edi + 0x64]
add ecx, dword [esp + 0x34]
add eax, dword [edi + 0x60]
mov dword [esp + 0x14], edx
cmp ecx, eax
ja 0x439567
mov ebx, dword [esp + 0x34]
mov edx, dword [esp + 0x38]
nop dword [eax]
mov eax, dword [edi + 0x68]
mov word [edi + eax*2 + 0x70], dx
mov ecx, dword [edi + 0x68]
lea ecx, [ecx + 1]
mov dword [edi + 0x68], ecx
sub ebx, 1
jne 0x439510
mov ebx, dword [esp + 0x18]
mov edx, dword [esp + 0x14]
mov eax, dword [edi + 0x64]
add eax, dword [edi + 0x60]
cmp ecx, eax
jb 0x4392c0
mov ecx, dword [edi]
cmp ecx, 0x1d
je 0x439835
cmp word [edi + 0x270], 0
jne 0x43957d
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_code____missing_end_of_block
mov dword [edi], 0x1d
jmp 0x439835
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_bit_length_repeat
mov dword [edi], 0x1d
jmp 0x439835
lea eax, [edi + 0x530]
mov dword [edi + 0x54], 9
lea ecx, [edi + 0x6c]
mov dword [edi + 0x4c], eax
mov dword [ecx], eax
lea edx, [edi + 0x2f0]
push edx
lea eax, [edi + 0x54]
push eax
push ecx
push dword [edi + 0x60]
lea eax, [edi + 0x70]
push eax
push 1
call fcn.0043a6d0
mov ecx, eax
add esp, 0x18
mov dword [esp + 0x30], ecx
test ecx, ecx
je 0x4395d3
mov eax, dword [esp + 0x50]
mov edx, dword [esp + 0x14]
mov dword [eax + 0x18], str.invalid_literal_lengths_set
mov dword [edi], 0x1d
jmp 0x439835
mov eax, dword [edi + 0x6c]
lea ecx, [edi + 0x6c]
mov dword [edi + 0x50], eax
lea edx, [edi + 0x2f0]
push edx
lea eax, [edi + 0x58]
mov dword [eax], 6
push eax
mov eax, dword [edi + 0x60]
push ecx
push dword [edi + 0x64]
add eax, 0x38
lea eax, [edi + eax*2]
push eax
push 2
call fcn.0043a6d0
mov ecx, eax
add esp, 0x18
mov dword [esp + 0x30], ecx
test ecx, ecx
je 0x439629
mov eax, dword [esp + 0x50]
mov edx, dword [esp + 0x14]
mov dword [eax + 0x18], str.invalid_distances_set
mov dword [edi], 0x1d
jmp 0x439835
cmp dword [esp + 0x54], 6
mov dword [edi], 0x13
je 0x439cdc
mov edx, dword [esp + 0x14]
mov dword [edi], 0x14
cmp ebp, 6
jb 0x4396ba
cmp dword [esp + 0x1c], 0x102
jb 0x4396ba
mov eax, dword [esp + 0x50]
mov ecx, dword [esp + 0x24]
push dword [esp + 0x28]
mov dword [eax + 0xc], ecx
mov ecx, dword [esp + 0x20]
mov dword [eax + 0x10], ecx
mov dword [eax], ebx
mov dword [eax + 4], ebp
push eax
mov dword [edi + 0x38], edx
mov dword [edi + 0x3c], esi
call fcn.0043abb0
mov eax, dword [esp + 0x58]
add esp, 8
cmp dword [edi], 0xb
mov edx, dword [edi + 0x38]
mov esi, dword [edi + 0x3c]
mov ecx, dword [eax + 0xc]
mov ebx, dword [eax]
mov ebp, dword [eax + 4]
mov dword [esp + 0x24], ecx
mov ecx, dword [eax + 0x10]
mov dword [esp + 0x1c], ecx
mov dword [esp + 0x18], ebx
mov dword [esp + 0x14], edx
jne 0x439835
mov dword [edi + 0x1bc4], 0xffffffff
jmp 0x439835
mov ecx, dword [edi + 0x54]
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
dec eax
mov dword [esp + 0x48], eax
and eax, edx
mov dword [esp + 0x40], ecx
mov dword [edi + 0x1bc4], 0
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
jbe 0x439726
nop dword [eax + eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
mov ecx, dword [edi + 0x4c]
add edx, eax
mov eax, dword [esp + 0x48]
add esi, 8
and eax, edx
mov dword [esp + 0x14], edx
dec ebp
mov dword [esp + 0x18], ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
ja 0x4396f0
test al, al
je 0x4397dc
test al, 0xf0
jne 0x4397dc
mov ecx, eax
mov edi, 1
shr ecx, 8
mov edx, eax
movzx ebx, cl
movzx ecx, al
add ecx, ebx
shr eax, 0x10
shl edi, cl
mov ecx, ebx
dec edi
mov dword [esp + 0x38], edx
and edi, dword [esp + 0x14]
shr edi, cl
mov ecx, dword [esp + 0x40]
add edi, eax
mov eax, dword [ecx + edi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, ebx
cmp ecx, esi
jbe 0x4397c7
test ebp, ebp
je 0x439cd8
mov ebx, dword [esp + 0x18]
mov ecx, esi
mov edi, 1
add esi, 8
dec ebp
movzx eax, byte [ebx]
inc ebx
shl eax, cl
add dword [esp + 0x14], eax
movzx eax, word [esp + 0x3a]
mov dword [esp + 0x18], ebx
movzx ebx, dh
movzx ecx, dl
add ecx, ebx
shl edi, cl
mov ecx, ebx
dec edi
and edi, dword [esp + 0x14]
shr edi, cl
add edi, eax
mov eax, dword [esp + 0x40]
mov eax, dword [eax + edi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, ebx
cmp ecx, esi
ja 0x439773
mov edi, dword [esp + 0x2c]
movzx ecx, dh
mov edx, dword [esp + 0x14]
shr edx, cl
sub esi, ecx
mov dword [edi + 0x1bc4], ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [edi + 0x1bc4], ecx
sub esi, ecx
shr edx, cl
mov ecx, eax
shr ecx, 0x10
mov dword [esp + 0x14], edx
mov dword [edi + 0x40], ecx
test al, al
jne 0x439806
mov dword [edi], 0x19
jmp 0x439831
test al, 0x20
je 0x43981c
mov dword [edi + 0x1bc4], 0xffffffff
mov dword [edi], 0xb
jmp 0x439831
test al, 0x40
je 0x43984f
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_literal_length_code
mov dword [edi], 0x1d
mov ebx, dword [esp + 0x18]
mov ecx, dword [edi]
mov eax, ecx
cmp eax, 0x1e
jbe switch.0x00438888
pop edi
pop esi
pop ebp
mov eax, 0xfffffffe
pop ebx
add esp, 0x3c
ret
movzx eax, al
and eax, 0xf
mov dword [edi], 0x15
mov dword [edi + 0x48], eax
mov ebx, dword [edi + 0x48]
test ebx, ebx
je 0x4398b1
cmp esi, ebx
jae 0x439894
mov edx, dword [esp + 0x18]
nop dword [eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [edx]
mov ecx, esi
shl eax, cl
inc edx
add dword [esp + 0x14], eax
add esi, 8
dec ebp
mov dword [esp + 0x18], edx
cmp esi, ebx
jb 0x439870
mov edx, dword [esp + 0x14]
mov ecx, ebx
mov eax, 1
shl eax, cl
sub esi, ebx
dec eax
and eax, edx
shr edx, cl
add dword [edi + 0x40], eax
add dword [edi + 0x1bc4], ebx
mov dword [esp + 0x14], edx
mov eax, dword [edi + 0x40]
mov dword [edi + 0x1bc8], eax
mov dword [edi], 0x16
mov ecx, dword [edi + 0x58]
mov eax, 1
mov ebx, dword [edi + 0x50]
shl eax, cl
dec eax
mov dword [esp + 0x40], ebx
mov dword [esp + 0x48], eax
and eax, edx
mov eax, dword [ebx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
jbe 0x43992b
mov edx, dword [esp + 0x18]
nop dword [eax + eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [edx]
mov ecx, esi
shl eax, cl
inc edx
mov ecx, dword [esp + 0x14]
add esi, 8
add ecx, eax
mov dword [esp + 0x18], edx
mov eax, dword [esp + 0x48]
dec ebp
and eax, ecx
mov dword [esp + 0x14], ecx
mov eax, dword [ebx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
ja 0x4398f0
mov edx, dword [esp + 0x14]
test al, 0xf0
jne 0x4399d9
mov ecx, eax
mov edi, 1
shr ecx, 8
mov edx, eax
movzx ebx, cl
movzx ecx, al
add ecx, ebx
shr eax, 0x10
shl edi, cl
mov ecx, ebx
dec edi
mov dword [esp + 0x38], edx
and edi, dword [esp + 0x14]
shr edi, cl
mov ecx, dword [esp + 0x40]
add edi, eax
mov eax, dword [ecx + edi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, ebx
cmp ecx, esi
jbe 0x4399c4
test ebp, ebp
je 0x439cd8
mov ebx, dword [esp + 0x18]
mov ecx, esi
mov edi, 1
add esi, 8
dec ebp
movzx eax, byte [ebx]
inc ebx
shl eax, cl
add dword [esp + 0x14], eax
movzx eax, word [esp + 0x3a]
mov dword [esp + 0x18], ebx
movzx ebx, dh
movzx ecx, dl
add ecx, ebx
shl edi, cl
mov ecx, ebx
dec edi
and edi, dword [esp + 0x14]
shr edi, cl
add edi, eax
mov eax, dword [esp + 0x40]
mov eax, dword [eax + edi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, ebx
cmp ecx, esi
ja 0x439970
mov edi, dword [esp + 0x2c]
movzx ecx, dh
mov edx, dword [esp + 0x14]
sub esi, ecx
shr edx, cl
add dword [edi + 0x1bc4], ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [edi + 0x1bc4], ecx
sub esi, ecx
shr edx, cl
mov dword [esp + 0x14], edx
test al, 0x40
je 0x439a03
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_distance_code
jmp 0x43982b
mov ecx, eax
mov dword [edi], 0x17
shr ecx, 0x10
movzx eax, al
and eax, 0xf
mov dword [edi + 0x44], ecx
mov dword [edi + 0x48], eax
mov ebx, dword [edi + 0x48]
test ebx, ebx
je 0x439a71
cmp esi, ebx
jae 0x439a54
mov edx, dword [esp + 0x18]
nop dword [eax]
test ebp, ebp
je 0x439cdc
movzx eax, byte [edx]
mov ecx, esi
shl eax, cl
inc edx
add dword [esp + 0x14], eax
add esi, 8
dec ebp
mov dword [esp + 0x18], edx
cmp esi, ebx
jb 0x439a30
mov edx, dword [esp + 0x14]
mov ecx, ebx
mov eax, 1
shl eax, cl
sub esi, ebx
dec eax
and eax, edx
shr edx, cl
add dword [edi + 0x44], eax
add dword [edi + 0x1bc4], ebx
mov dword [esp + 0x14], edx
mov dword [edi], 0x18
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x439cdc
mov ecx, dword [esp + 0x28]
sub ecx, eax
mov eax, dword [edi + 0x44]
cmp eax, ecx
jbe 0x439ae4
sub eax, ecx
cmp eax, dword [edi + 0x2c]
jbe 0x439ab0
cmp dword [edi + 0x1bc0], 0
je 0x439ab0
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.invalid_distance_too_far_back
jmp 0x43982b
mov ecx, dword [edi + 0x30]
cmp eax, ecx
jbe 0x439ac3
mov ebx, dword [edi + 0x28]
sub eax, ecx
sub ebx, eax
add ebx, dword [edi + 0x34]
jmp 0x439aca
mov ebx, dword [edi + 0x34]
sub ebx, eax
add ebx, ecx
mov ecx, dword [edi + 0x40]
cmp eax, ecx
mov dword [esp + 0x48], ecx
mov dword [esp + 0x34], ecx
cmovbe ecx, eax
mov eax, dword [esp + 0x48]
mov dword [esp + 0x34], ecx
jmp 0x439af1
mov ebx, dword [esp + 0x24]
sub ebx, eax
mov eax, dword [edi + 0x40]
mov dword [esp + 0x34], eax
mov ecx, dword [esp + 0x1c]
mov edi, ecx
cmp dword [esp + 0x34], edi
cmovbe ecx, dword [esp + 0x34]
sub edi, ecx
sub eax, ecx
mov dword [esp + 0x1c], edi
mov edi, dword [esp + 0x2c]
mov dword [edi + 0x40], eax
mov edi, dword [esp + 0x24]
sub ebx, edi
mov al, byte [ebx + edi]
mov byte [edi], al
inc edi
sub ecx, 1
jne 0x439b15
mov dword [esp + 0x24], edi
mov edi, dword [esp + 0x2c]
cmp dword [edi + 0x40], ecx
jne 0x439831
mov dword [edi], 0x14
jmp 0x439831
cmp dword [esp + 0x1c], 0
je 0x439cdc
mov ecx, dword [esp + 0x24]
mov al, byte [edi + 0x40]
mov byte [ecx], al
inc ecx
dec dword [esp + 0x1c]
mov dword [esp + 0x24], ecx
mov dword [edi], 0x14
jmp 0x439835
cmp dword [edi + 8], 0
je 0x439c38
cmp esi, 0x20
jae 0x439b96
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x20
jb 0x439b73
mov ecx, dword [esp + 0x28]
sub ecx, dword [esp + 0x1c]
mov eax, dword [esp + 0x50]
mov dword [esp + 0x28], ecx
add dword [eax + 0x14], ecx
add dword [edi + 0x1c], ecx
test ecx, ecx
je 0x439be2
mov eax, dword [esp + 0x24]
push dword [esp + 0x28]
sub eax, ecx
cmp dword [edi + 0x10], 0
mov ecx, dword [edi + 0x18]
push eax
push ecx
je 0x439bcc
call fcn.0043a3e0
jmp 0x439bd1
call fcn.0043a170
mov ecx, dword [esp + 0x5c]
add esp, 0xc
mov edx, dword [esp + 0x14]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
cmp dword [edi + 0x10], 0
mov ecx, edx
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x28], eax
jne 0x439c15
and ecx, 0xff00
mov eax, edx
shl eax, 0x10
add ecx, eax
mov eax, edx
shr eax, 8
and eax, 0xff00
shl ecx, 8
add ecx, eax
mov eax, edx
shr eax, 0x18
add ecx, eax
cmp ecx, dword [edi + 0x18]
je 0x439c30
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.incorrect_data_check
mov dword [edi], 0x1d
jmp 0x439835
xor edx, edx
xor esi, esi
mov dword [esp + 0x14], edx
mov dword [edi], 0x1b
cmp dword [edi + 8], 0
je 0x439cbe
cmp dword [edi + 0x10], 0
je 0x439cbe
cmp esi, 0x20
jae 0x439c73
nop
test ebp, ebp
je 0x439cdc
movzx eax, byte [ebx]
mov ecx, esi
shl eax, cl
inc ebx
add edx, eax
mov dword [esp + 0x18], ebx
add esi, 8
mov dword [esp + 0x14], edx
dec ebp
cmp esi, 0x20
jb 0x439c50
cmp edx, dword [edi + 0x1c]
je 0x439cb4
mov eax, dword [esp + 0x50]
mov dword [eax + 0x18], str.incorrect_length_check
mov dword [edi], 0x1d
jmp 0x439835
mov eax, dword [esp + 0x24]
mov dword [ecx + 0xc], eax
mov eax, dword [esp + 0x1c]
mov dword [ecx + 0x10], eax
mov eax, 2
mov dword [ecx], ebx
mov dword [ecx + 4], ebp
mov dword [edi + 0x3c], esi
mov dword [edi + 0x38], edx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x3c
ret
mov dword [esp + 0x14], 0
xor esi, esi
mov dword [edi], 0x1c
mov dword [esp + 0x30], 1
jmp 0x439cdc
mov dword [esp + 0x30], 0xfffffffd
jmp 0x439cdc
mov edi, dword [esp + 0x2c]
mov ebx, dword [esp + 0x50]
mov eax, dword [esp + 0x24]
mov dword [ebx + 0xc], eax
mov eax, dword [esp + 0x1c]
mov dword [ebx + 0x10], eax
mov eax, dword [esp + 0x18]
mov dword [ebx], eax
mov eax, dword [esp + 0x14]
mov dword [ebx + 4], ebp
cmp dword [edi + 0x28], 0
mov ebp, dword [esp + 0x28]
mov dword [edi + 0x38], eax
mov dword [edi + 0x3c], esi
jne 0x439d15
cmp dword [edi], 0x1a
jge 0x439d36
cmp ebp, dword [ebx + 0x10]
je 0x439d36
push ebp
push ebx
call fcn.0043a070
add esp, 8
test eax, eax
je 0x439d36
mov dword [edi], 0x1e
pop edi
pop esi
pop ebp
mov eax, 0xfffffffc
pop ebx
add esp, 0x3c
ret
mov eax, dword [esp + 0x3c]
sub eax, dword [ebx + 4]
sub ebp, dword [ebx + 0x10]
add dword [ebx + 8], eax
add dword [ebx + 0x14], ebp
add dword [edi + 0x1c], ebp
cmp dword [edi + 8], 0
mov dword [esp + 0x3c], eax
je 0x439d7d
test ebp, ebp
je 0x439d7d
mov eax, dword [ebx + 0xc]
mov ecx, dword [edi + 0x18]
sub eax, ebp
cmp dword [edi + 0x10], 0
push ebp
push eax
push ecx
je 0x439d6f
call fcn.0043a3e0
jmp 0x439d74
call fcn.0043a170
mov dword [edi + 0x18], eax
add esp, 0xc
mov dword [ebx + 0x30], eax
mov edx, dword [edi]
cmp edx, 0x13
je 0x439d8d
cmp edx, 0xe
je 0x439d8d
xor esi, esi
jmp 0x439d92
mov esi, 0x100
mov ecx, dword [edi + 4]
neg ecx
mov dword [esp + 0x50], 0x80
sbb ecx, ecx
xor eax, eax
and ecx, 0x40
cmp edx, 0xb
cmove eax, dword [esp + 0x50]
add ecx, eax
add ecx, dword [edi + 0x3c]
add ecx, esi
cmp dword [esp + 0x3c], 0
mov dword [ebx + 0x2c], ecx
jne 0x439dc3
test ebp, ebp
je 0x439dca
cmp dword [esp + 0x54], 4
jne 0x439de0
mov eax, dword [esp + 0x30]
mov ecx, 0xfffffffb
pop edi
pop esi
test eax, eax
pop ebp
cmove eax, ecx
pop ebx
add esp, 0x3c
ret
mov eax, dword [esp + 0x30]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x3c
ret