Function at 0x405dc0
Capabilities:
Encrypt data using rc4 ksa

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x5c
push esi
push edi
cmp dword [ebp + 8], 0
je 0x405df1
mov eax, dword [ebp + 8]
cmp dword [eax + 0x1c], 0
je 0x405df1
mov ecx, dword [ebp + 8]
cmp dword [ecx + 0xc], 0
je 0x405df1
mov edx, dword [ebp + 8]
cmp dword [edx], 0
jne 0x405dfb
mov eax, dword [ebp + 8]
cmp dword [eax + 4], 0
je 0x405dfb
mov eax, 0xfffffffe
jmp 0x40801d
mov ecx, dword [ebp + 8]
mov edx, dword [ecx + 0x1c]
mov dword [ebp - 0x1c], edx
mov eax, dword [ebp - 0x1c]
cmp dword [eax], 0xb
jne 0x405e15
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0xc
mov edx, dword [ebp + 8]
mov eax, dword [edx + 0xc]
mov dword [ebp - 0x24], eax
mov ecx, dword [ebp + 8]
mov edx, dword [ecx + 0x10]
mov dword [ebp - 0x40], edx
mov eax, dword [ebp + 8]
mov ecx, dword [eax]
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp + 8]
mov eax, dword [edx + 4]
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x38]
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x3c]
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x405e15
mov eax, dword [ebp - 0x30]
mov dword [ebp - 0x2c], eax
mov ecx, dword [ebp - 0x40]
mov dword [ebp - 0xc], ecx
mov dword [ebp - 0x20], 0
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx]
mov dword [ebp - 0x44], eax
cmp dword [ebp - 0x44], 0x1e
ja case.default.0x405e78
mov ecx, dword [ebp - 0x44]
jmp dword [ecx*4 + 0x408023]
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 8], 0
jne 0x405e96
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0xc
jmp 0x407e73
cmp dword [ebp - 0x14], 0x10
jae 0x405ede
cmp dword [ebp - 0x30], 0
jne 0x405ea7
jmp 0x407e78
mov ecx, dword [ebp - 0x30]
sub ecx, 1
mov dword [ebp - 0x30], ecx
mov edx, dword [ebp - 0x3c]
xor eax, eax
mov al, byte [edx]
mov ecx, dword [ebp - 0x14]
shl eax, cl
mov ecx, dword [ebp - 0x18]
add ecx, eax
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x3c]
add edx, 1
mov dword [ebp - 0x3c], edx
mov eax, dword [ebp - 0x14]
add eax, 8
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x405e9c
jmp 0x405e96
xor edx, edx
test edx, edx
jne 0x405e96
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 8]
and ecx, 2
test ecx, ecx
je 0x405f60
cmp dword [ebp - 0x18], 0x8b1f
jne 0x405f60
push 0
push 0
push 0
call fcn.0040bcb0
add esp, 0xc
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x18], eax
mov al, byte [ebp - 0x18]
mov byte [ebp - 0x10], al
mov ecx, dword [ebp - 0x18]
shr ecx, 8
mov byte [ebp - 0xf], cl
push 2
lea edx, [ebp - 0x10]
push edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x18]
push ecx
call fcn.0040bcb0
add esp, 0xc
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x18], eax
xor eax, eax
test eax, eax
jne 0x405f0e
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor ecx, ecx
test ecx, ecx
jne 0x405f3e
mov edx, dword [ebp - 0x1c]
mov dword [edx], 1
jmp 0x407e73
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x10], 0
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx + 0x20], 0
je 0x405f80
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x20]
mov dword [eax + 0x30], 0xffffffff
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 8]
and edx, 1
test edx, edx
je 0x405fad
mov eax, dword [ebp - 0x18]
and eax, 0xff
shl eax, 8
mov ecx, dword [ebp - 0x18]
shr ecx, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
je 0x405fc5
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.incorrect_header_check
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov ecx, dword [ebp - 0x18]
and ecx, 0xf
cmp ecx, 8
je 0x405fe8
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.unknown_compression_method
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov ecx, dword [ebp - 0x18]
shr ecx, 4
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x14]
sub edx, 4
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x405fe8
mov ecx, dword [ebp - 0x18]
and ecx, 0xf
add ecx, 8
mov dword [ebp - 0x38], ecx
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x24], 0
jne 0x406020
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x38]
mov dword [eax + 0x24], ecx
jmp 0x406043
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x38]
cmp eax, dword [edx + 0x24]
jbe 0x406043
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_window_size
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x407e73
mov eax, 1
mov ecx, dword [ebp - 0x38]
shl eax, cl
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x14], eax
push 0
push 0
push 0
call fcn.00408360
add esp, 0xc
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x18], eax
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
mov dword [eax + 0x30], edx
mov eax, dword [ebp - 0x18]
and eax, 0x200
neg eax
sbb eax, eax
and al, 0xfe
add eax, 0xb
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], eax
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor edx, edx
test edx, edx
jne 0x406089
jmp 0x407e73
cmp dword [ebp - 0x14], 0x10
jae 0x4060ea
cmp dword [ebp - 0x30], 0
jne 0x4060b3
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x4060a8
jmp case.0x405e78.1
xor ecx, ecx
test ecx, ecx
jne case.0x405e78.1
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
mov dword [edx + 0x10], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x10]
and edx, 0xff
cmp edx, 8
je 0x406122
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.unknown_compression_method
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x1d
jmp 0x407e73
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x10]
and eax, 0xe000
test eax, eax
je 0x406149
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.unknown_header_flags_set
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x407e73
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x20], 0
je 0x406163
mov ecx, dword [ebp - 0x18]
shr ecx, 8
and ecx, 1
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x20]
mov dword [eax], ecx
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x10]
and edx, 0x200
test edx, edx
je 0x4061a3
mov al, byte [ebp - 0x18]
mov byte [ebp - 0x10], al
mov ecx, dword [ebp - 0x18]
shr ecx, 8
mov byte [ebp - 0xf], cl
push 2
lea edx, [ebp - 0x10]
push edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x18]
push ecx
call fcn.0040bcb0
add esp, 0xc
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x18], eax
xor eax, eax
test eax, eax
jne 0x406173
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor ecx, ecx
test ecx, ecx
jne 0x4061a3
mov edx, dword [ebp - 0x1c]
mov dword [edx], 2
cmp dword [ebp - 0x14], 0x20
jae 0x406208
cmp dword [ebp - 0x30], 0
jne 0x4061d1
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x4061c6
jmp case.0x405e78.2
xor ecx, ecx
test ecx, ecx
jne case.0x405e78.2
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x20], 0
je 0x406223
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
mov edx, dword [ebp - 0x18]
mov dword [ecx + 4], edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x10]
and ecx, 0x200
test ecx, ecx
je 0x406275
mov dl, byte [ebp - 0x18]
mov byte [ebp - 0x10], dl
mov eax, dword [ebp - 0x18]
shr eax, 8
mov byte [ebp - 0xf], al
mov ecx, dword [ebp - 0x18]
shr ecx, 0x10
mov byte [ebp - 0xe], cl
mov edx, dword [ebp - 0x18]
shr edx, 0x18
mov byte [ebp - 0xd], dl
push 4
lea eax, [ebp - 0x10]
push eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
push edx
call fcn.0040bcb0
add esp, 0xc
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x18], eax
xor edx, edx
test edx, edx
jne 0x406233
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor eax, eax
test eax, eax
jne 0x406275
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 3
cmp dword [ebp - 0x14], 0x10
jae 0x4062dc
cmp dword [ebp - 0x30], 0
jne 0x4062a3
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406298
jmp case.0x405e78.3
xor ecx, ecx
test ecx, ecx
jne case.0x405e78.3
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x20], 0
je 0x40630b
mov eax, dword [ebp - 0x18]
and eax, 0xff
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x20]
mov dword [edx + 8], eax
mov eax, dword [ebp - 0x18]
shr eax, 8
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x20]
mov dword [edx + 0xc], eax
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x10]
and ecx, 0x200
test ecx, ecx
je 0x40634b
mov dl, byte [ebp - 0x18]
mov byte [ebp - 0x10], dl
mov eax, dword [ebp - 0x18]
shr eax, 8
mov byte [ebp - 0xf], al
push 2
lea ecx, [ebp - 0x10]
push ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x18]
push eax
call fcn.0040bcb0
add esp, 0xc
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x18], eax
xor edx, edx
test edx, edx
jne 0x40631b
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor eax, eax
test eax, eax
jne 0x40634b
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 4
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x10]
and eax, 0x400
test eax, eax
je 0x40643d
cmp dword [ebp - 0x14], 0x10
jae 0x4063c3
cmp dword [ebp - 0x30], 0
jne 0x40638c
jmp 0x407e78
mov ecx, dword [ebp - 0x30]
sub ecx, 1
mov dword [ebp - 0x30], ecx
mov edx, dword [ebp - 0x3c]
xor eax, eax
mov al, byte [edx]
mov ecx, dword [ebp - 0x14]
shl eax, cl
mov ecx, dword [ebp - 0x18]
add ecx, eax
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x3c]
add edx, 1
mov dword [ebp - 0x3c], edx
mov eax, dword [ebp - 0x14]
add eax, 8
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x406381
jmp 0x40637b
xor edx, edx
test edx, edx
jne 0x40637b
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x18]
mov dword [eax + 0x40], ecx
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x20], 0
je 0x4063e7
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
mov edx, dword [ebp - 0x18]
mov dword [ecx + 0x14], edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x10]
and ecx, 0x200
test ecx, ecx
je 0x406427
mov dl, byte [ebp - 0x18]
mov byte [ebp - 0x10], dl
mov eax, dword [ebp - 0x18]
shr eax, 8
mov byte [ebp - 0xf], al
push 2
lea ecx, [ebp - 0x10]
push ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x18]
push eax
call fcn.0040bcb0
add esp, 0xc
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x18], eax
xor edx, edx
test edx, edx
jne 0x4063f7
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor eax, eax
test eax, eax
jne 0x406427
jmp 0x406453
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx + 0x20], 0
je 0x406453
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x20]
mov dword [eax + 0x10], 0
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 5
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x10]
and eax, 0x400
test eax, eax
je 0x40655b
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x40]
mov dword [ebp - 4], edx
mov eax, dword [ebp - 4]
cmp eax, dword [ebp - 0x30]
jbe 0x406486
mov ecx, dword [ebp - 0x30]
mov dword [ebp - 4], ecx
cmp dword [ebp - 4], 0
je 0x40654d
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x20], 0
je 0x4064ff
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
cmp dword [ecx + 0x10], 0
je 0x4064ff
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x20]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [eax + 0x14]
sub edx, dword [ecx + 0x40]
mov dword [ebp - 0x38], edx
mov eax, dword [ebp - 0x38]
add eax, dword [ebp - 4]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x20]
cmp eax, dword [edx + 0x18]
jbe 0x4064d9
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
mov edx, dword [ecx + 0x18]
sub edx, dword [ebp - 0x38]
mov dword [ebp - 0x48], edx
jmp 0x4064df
mov eax, dword [ebp - 4]
mov dword [ebp - 0x48], eax
mov ecx, dword [ebp - 0x48]
mov esi, dword [ebp - 0x3c]
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x20]
mov edi, dword [eax + 0x10]
add edi, dword [ebp - 0x38]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x10]
and ecx, 0x200
test ecx, ecx
je 0x40652c
mov edx, dword [ebp - 4]
push edx
mov eax, dword [ebp - 0x3c]
push eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
push edx
call fcn.0040bcb0
add esp, 0xc
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x18], eax
mov edx, dword [ebp - 0x30]
sub edx, dword [ebp - 4]
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
add eax, dword [ebp - 4]
mov dword [ebp - 0x3c], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x40]
sub edx, dword [ebp - 4]
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x40], edx
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx + 0x40], 0
je 0x40655b
jmp 0x407e78
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x40], 0
mov eax, dword [ebp - 0x1c]
mov dword [eax], 6
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x10]
and edx, 0x800
test edx, edx
je 0x40664e
cmp dword [ebp - 0x30], 0
jne 0x40658d
jmp 0x407e78
mov dword [ebp - 4], 0
mov eax, dword [ebp - 0x3c]
add eax, dword [ebp - 4]
xor ecx, ecx
mov cl, byte [eax]
mov dword [ebp - 0x38], ecx
mov edx, dword [ebp - 4]
add edx, 1
mov dword [ebp - 4], edx
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x20], 0
je 0x4065f4
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x20]
cmp dword [edx + 0x1c], 0
je 0x4065f4
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x40]
cmp eax, dword [ecx + 0x20]
jae 0x4065f4
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x20]
mov eax, dword [edx + 0x1c]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x40]
mov cl, byte [ebp - 0x38]
mov byte [eax + edx], cl
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x40]
add eax, 1
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x40], eax
cmp dword [ebp - 0x38], 0
je 0x406602
mov edx, dword [ebp - 4]
cmp edx, dword [ebp - 0x30]
jb 0x406594
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x10]
and ecx, 0x200
test ecx, ecx
je 0x40662f
mov edx, dword [ebp - 4]
push edx
mov eax, dword [ebp - 0x3c]
push eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
push edx
call fcn.0040bcb0
add esp, 0xc
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x18], eax
mov edx, dword [ebp - 0x30]
sub edx, dword [ebp - 4]
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
add eax, dword [ebp - 4]
mov dword [ebp - 0x3c], eax
cmp dword [ebp - 0x38], 0
je 0x40664c
jmp 0x407e78
jmp 0x406664
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx + 0x20], 0
je 0x406664
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x20]
mov dword [eax + 0x1c], 0
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x40], 0
mov edx, dword [ebp - 0x1c]
mov dword [edx], 7
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x10]
and ecx, 0x1000
test ecx, ecx
je 0x406756
cmp dword [ebp - 0x30], 0
jne 0x406696
jmp 0x407e78
mov dword [ebp - 4], 0
mov edx, dword [ebp - 0x3c]
add edx, dword [ebp - 4]
xor eax, eax
mov al, byte [edx]
mov dword [ebp - 0x38], eax
mov ecx, dword [ebp - 4]
add ecx, 1
mov dword [ebp - 4], ecx
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x20], 0
je 0x4066fd
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
cmp dword [ecx + 0x24], 0
je 0x4066fd
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x20]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x40]
cmp edx, dword [eax + 0x28]
jae 0x4066fd
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
mov edx, dword [ecx + 0x24]
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x40]
mov al, byte [ebp - 0x38]
mov byte [edx + ecx], al
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x40]
add edx, 1
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x40], edx
cmp dword [ebp - 0x38], 0
je 0x40670b
mov ecx, dword [ebp - 4]
cmp ecx, dword [ebp - 0x30]
jb 0x40669d
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x10]
and eax, 0x200
test eax, eax
je 0x406737
mov ecx, dword [ebp - 4]
push ecx
mov edx, dword [ebp - 0x3c]
push edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x18]
push ecx
call fcn.0040bcb0
add esp, 0xc
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x18], eax
mov eax, dword [ebp - 0x30]
sub eax, dword [ebp - 4]
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
add ecx, dword [ebp - 4]
mov dword [ebp - 0x3c], ecx
cmp dword [ebp - 0x38], 0
je 0x406754
jmp 0x407e78
jmp 0x40676c
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x20], 0
je 0x40676c
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
mov dword [ecx + 0x24], 0
mov edx, dword [ebp - 0x1c]
mov dword [edx], 8
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x10]
and ecx, 0x200
test ecx, ecx
je 0x406815
cmp dword [ebp - 0x14], 0x10
jae 0x4067d3
cmp dword [ebp - 0x30], 0
jne 0x40679a
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x40678f
jmp 0x406789
xor ecx, ecx
test ecx, ecx
jne 0x406789
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x18]
and eax, 0xffff
cmp dword [ebp - 0x18], eax
je 0x406801
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.header_crc_mismatch
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x407e73
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor eax, eax
test eax, eax
jne 0x406801
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx + 0x20], 0
je 0x406840
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x10]
sar eax, 9
and eax, 1
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x20]
mov dword [edx + 0x2c], eax
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x20]
mov dword [ecx + 0x30], 1
push 0
push 0
push 0
call fcn.0040bcb0
add esp, 0xc
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x18], eax
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
mov dword [eax + 0x30], edx
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0xb
jmp 0x407e73
cmp dword [ebp - 0x14], 0x20
jae 0x4068b6
cmp dword [ebp - 0x30], 0
jne 0x40687f
jmp 0x407e78
mov ecx, dword [ebp - 0x30]
sub ecx, 1
mov dword [ebp - 0x30], ecx
mov edx, dword [ebp - 0x3c]
xor eax, eax
mov al, byte [edx]
mov ecx, dword [ebp - 0x14]
shl eax, cl
mov ecx, dword [ebp - 0x18]
add ecx, eax
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x3c]
add edx, 1
mov dword [ebp - 0x3c], edx
mov eax, dword [ebp - 0x14]
add eax, 8
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x406874
jmp case.0x405e78.9
xor edx, edx
test edx, edx
jne case.0x405e78.9
mov eax, dword [ebp - 0x18]
shr eax, 0x18
and eax, 0xff
mov ecx, dword [ebp - 0x18]
shr ecx, 8
and ecx, 0xff00
add eax, ecx
mov edx, dword [ebp - 0x18]
and edx, 0xff00
shl edx, 8
add eax, edx
mov ecx, dword [ebp - 0x18]
and ecx, 0xff
shl ecx, 0x18
add eax, ecx
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x18], eax
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
mov dword [eax + 0x30], edx
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor eax, eax
test eax, eax
jne 0x406903
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0xa
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0xc], 0
jne 0x40696e
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x24]
mov dword [eax + 0xc], ecx
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x40]
mov dword [edx + 0x10], eax
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 0x3c]
mov dword [ecx], edx
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x30]
mov dword [eax + 4], ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
mov dword [edx + 0x38], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
mov dword [ecx + 0x3c], edx
xor eax, eax
test eax, eax
jne 0x406929
mov eax, 2
jmp 0x40801d
push 0
push 0
push 0
call fcn.00408360
add esp, 0xc
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x18], eax
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x18]
mov dword [edx + 0x30], ecx
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0xb
cmp dword [ebp + 0xc], 5
je 0x4069a3
cmp dword [ebp + 0xc], 6
jne case.0x405e78.12
jmp 0x407e78
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 4], 0
je 0x4069e1
mov ecx, dword [ebp - 0x14]
and ecx, 7
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x14]
and eax, 7
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x4069b1
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1a
jmp 0x407e73
cmp dword [ebp - 0x14], 3
jae 0x406a29
cmp dword [ebp - 0x30], 0
jne 0x4069f2
jmp 0x407e78
mov ecx, dword [ebp - 0x30]
sub ecx, 1
mov dword [ebp - 0x30], ecx
mov edx, dword [ebp - 0x3c]
xor eax, eax
mov al, byte [edx]
mov ecx, dword [ebp - 0x14]
shl eax, cl
mov ecx, dword [ebp - 0x18]
add ecx, eax
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x3c]
add edx, 1
mov dword [ebp - 0x3c], edx
mov eax, dword [ebp - 0x14]
add eax, 8
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x4069e7
jmp 0x4069e1
xor edx, edx
test edx, edx
jne 0x4069e1
mov eax, dword [ebp - 0x18]
and eax, 1
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 4], eax
mov edx, dword [ebp - 0x18]
shr edx, 1
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x14]
sub eax, 1
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x406a3b
mov edx, dword [ebp - 0x18]
and edx, 3
mov dword [ebp - 0x4c], edx
cmp dword [ebp - 0x4c], 3
ja case.default.0x406a64
mov eax, dword [ebp - 0x4c]
jmp dword [eax*4 + 0x40809f]
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0xd
jmp case.default.0x406a64
mov edx, dword [ebp - 0x1c]
push edx
call fcn.004080b0
add esp, 4
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x13
cmp dword [ebp + 0xc], 6
jne 0x406aae
mov ecx, dword [ebp - 0x18]
shr ecx, 2
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x14]
sub edx, 2
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406a91
jmp 0x407e78
jmp case.default.0x406a64
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], pe_nt_image_headers32
jmp case.default.0x406a64
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_block_type
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
mov ecx, dword [ebp - 0x18]
shr ecx, 2
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x14]
sub edx, 2
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne case.default.0x406a64
jmp 0x407e73
mov ecx, dword [ebp - 0x14]
and ecx, 7
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x14]
and eax, 7
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne case.0x405e78.13
cmp dword [ebp - 0x14], 0x20
jae 0x406b55
cmp dword [ebp - 0x30], 0
jne 0x406b1e
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406b13
jmp 0x406b0d
xor ecx, ecx
test ecx, ecx
jne 0x406b0d
mov edx, dword [ebp - 0x18]
and edx, 0xffff
mov eax, dword [ebp - 0x18]
shr eax, 0x10
xor eax, 0xffff
cmp edx, eax
je 0x406b8b
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_stored_block_lengths
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x407e73
mov eax, dword [ebp - 0x18]
and eax, 0xffff
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x40], eax
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor edx, edx
test edx, edx
jne 0x406b99
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0xe
cmp dword [ebp + 0xc], 6
jne case.0x405e78.14
jmp 0x407e78
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0xf
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x40]
mov dword [ebp - 4], eax
cmp dword [ebp - 4], 0
je 0x406c4f
mov ecx, dword [ebp - 4]
cmp ecx, dword [ebp - 0x30]
jbe 0x406be7
mov edx, dword [ebp - 0x30]
mov dword [ebp - 4], edx
mov eax, dword [ebp - 4]
cmp eax, dword [ebp - 0x40]
jbe 0x406bf5
mov ecx, dword [ebp - 0x40]
mov dword [ebp - 4], ecx
cmp dword [ebp - 4], 0
jne 0x406c00
jmp 0x407e78
mov ecx, dword [ebp - 4]
mov esi, dword [ebp - 0x3c]
mov edi, dword [ebp - 0x24]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x30]
sub eax, dword [ebp - 4]
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
add ecx, dword [ebp - 4]
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x40]
sub edx, dword [ebp - 4]
mov dword [ebp - 0x40], edx
mov eax, dword [ebp - 0x24]
add eax, dword [ebp - 4]
mov dword [ebp - 0x24], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x40]
sub edx, dword [ebp - 4]
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x40], edx
jmp 0x407e73
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0xb
jmp 0x407e73
cmp dword [ebp - 0x14], 0xe
jae 0x406ca7
cmp dword [ebp - 0x30], 0
jne 0x406c6e
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406c63
jmp case.0x405e78.16
xor ecx, ecx
test ecx, ecx
jne case.0x405e78.16
mov edx, dword [ebp - 0x18]
and edx, 0x1f
add edx, 0x101
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x60], edx
mov ecx, dword [ebp - 0x18]
shr ecx, 5
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x14]
sub edx, 5
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406cbf
mov ecx, dword [ebp - 0x18]
and ecx, 0x1f
add ecx, 1
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x64], ecx
mov eax, dword [ebp - 0x18]
shr eax, 5
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x14]
sub ecx, 5
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x406ce6
mov eax, dword [ebp - 0x18]
and eax, 0xf
add eax, 4
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x5c], eax
mov edx, dword [ebp - 0x18]
shr edx, 4
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x14]
sub eax, 4
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x406d0d
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x60], 0x11e
ja 0x406d3a
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x64], 0x1e
jbe 0x406d52
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.too_many_length_or_distance_symbols
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x407e73
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x68], 0
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x11
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x1c]
mov ecx, dword [edx + 0x68]
cmp ecx, dword [eax + 0x5c]
jae 0x406e11
cmp dword [ebp - 0x14], 3
jae 0x406dc1
cmp dword [ebp - 0x30], 0
jne 0x406d88
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406d7d
jmp 0x406d77
xor ecx, ecx
test ecx, ecx
jne 0x406d77
mov edx, dword [ebp - 0x18]
and edx, 7
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x68]
xor eax, eax
mov ax, word [ecx*2 + 0x40ec88]
mov ecx, dword [ebp - 0x1c]
mov word [ecx + eax*2 + 0x70], dx
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x68]
add eax, 1
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x68], eax
mov edx, dword [ebp - 0x18]
shr edx, 3
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x14]
sub eax, 3
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x406df4
jmp case.0x405e78.17
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x68], 0x13
jae 0x406e45
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x68]
xor edx, edx
mov dx, word [ecx*2 + 0x40ec88]
mov eax, dword [ebp - 0x1c]
mov word [eax + edx*2 + 0x70], 0
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x68]
add edx, 1
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x68], edx
jmp 0x406e11
mov ecx, dword [ebp - 0x1c]
add ecx, 0x530
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x6c], ecx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x6c]
mov dword [eax + 0x4c], edx
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x54], 7
mov ecx, dword [ebp - 0x1c]
add ecx, 0x2f0
push ecx
mov edx, dword [ebp - 0x1c]
add edx, 0x54
push edx
mov eax, dword [ebp - 0x1c]
add eax, 0x6c
push eax
push 0x13
mov ecx, dword [ebp - 0x1c]
add ecx, 0x70
push ecx
push 0
call fcn.0040cf60
add esp, 0x18
mov dword [ebp - 0x20], eax
cmp dword [ebp - 0x20], 0
je 0x406eb6
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_code_lengths_set
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x68], 0
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x12
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x60]
mov edx, dword [ebp - 0x1c]
add ecx, dword [edx + 0x64]
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x68], ecx
jae 0x4072cd
mov ecx, dword [ebp - 0x1c]
mov edx, 1
mov ecx, dword [ecx + 0x54]
shl edx, cl
sub edx, 1
mov eax, dword [ebp - 0x18]
and eax, edx
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x4c]
mov eax, dword [edx + eax*4]
mov dword [ebp - 0x28], eax
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
cmp ecx, dword [ebp - 0x14]
ja 0x406f12
jmp 0x406f56
cmp dword [ebp - 0x30], 0
jne 0x406f1d
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406f12
jmp 0x406ee1
mov ecx, dword [ebp - 0x26]
and ecx, 0xffff
cmp ecx, 0x10
jge 0x40700b
mov edx, dword [ebp - 0x27]
and edx, 0xff
cmp dword [ebp - 0x14], edx
jae 0x406fb8
cmp dword [ebp - 0x30], 0
jne 0x406f81
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x406f76
jmp 0x406f68
xor ecx, ecx
test ecx, ecx
jne 0x406f68
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x27]
and eax, 0xff
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x406fbe
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x68]
mov edx, dword [ebp - 0x1c]
mov ax, word [ebp - 0x26]
mov word [edx + ecx*2 + 0x70], ax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x68]
add edx, 1
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x68], edx
jmp 0x4072c8
mov ecx, dword [ebp - 0x26]
and ecx, 0xffff
cmp ecx, 0x10
jne 0x4070fa
mov edx, dword [ebp - 0x27]
and edx, 0xff
add edx, 2
cmp dword [ebp - 0x14], edx
jae 0x407070
cmp dword [ebp - 0x30], 0
jne 0x407039
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x40702e
jmp 0x40701d
xor ecx, ecx
test ecx, ecx
jne 0x40701d
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x27]
and eax, 0xff
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x407076
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x68], 0
jne 0x4070be
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_bit_length_repeat
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x4072cd
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x68]
mov edx, dword [ebp - 0x1c]
xor eax, eax
mov ax, word [edx + ecx*2 + 0x6e]
mov dword [ebp - 0x38], eax
mov ecx, dword [ebp - 0x18]
and ecx, 3
add ecx, 3
mov dword [ebp - 4], ecx
mov edx, dword [ebp - 0x18]
shr edx, 2
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x14]
sub eax, 2
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x4070dd
jmp 0x407267
mov edx, dword [ebp - 0x26]
and edx, 0xffff
cmp edx, 0x11
jne 0x4071bc
mov eax, dword [ebp - 0x27]
and eax, 0xff
add eax, 3
cmp dword [ebp - 0x14], eax
jae 0x40715e
cmp dword [ebp - 0x30], 0
jne 0x407127
jmp 0x407e78
mov ecx, dword [ebp - 0x30]
sub ecx, 1
mov dword [ebp - 0x30], ecx
mov edx, dword [ebp - 0x3c]
xor eax, eax
mov al, byte [edx]
mov ecx, dword [ebp - 0x14]
shl eax, cl
mov ecx, dword [ebp - 0x18]
add ecx, eax
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x3c]
add edx, 1
mov dword [ebp - 0x3c], edx
mov eax, dword [ebp - 0x14]
add eax, 8
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x40711c
jmp 0x40710c
xor edx, edx
test edx, edx
jne 0x40710c
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
mov eax, dword [ebp - 0x18]
shr eax, cl
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
mov edx, dword [ebp - 0x14]
sub edx, ecx
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407164
mov dword [ebp - 0x38], 0
mov ecx, dword [ebp - 0x18]
and ecx, 7
add ecx, 3
mov dword [ebp - 4], ecx
mov edx, dword [ebp - 0x18]
shr edx, 3
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x14]
sub eax, 3
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x40719f
jmp 0x407267
mov edx, dword [ebp - 0x27]
and edx, 0xff
add edx, 7
cmp dword [ebp - 0x14], edx
jae 0x40720f
cmp dword [ebp - 0x30], 0
jne 0x4071d8
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x4071cd
jmp 0x4071bc
xor ecx, ecx
test ecx, ecx
jne 0x4071bc
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x27]
and eax, 0xff
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x407215
mov dword [ebp - 0x38], 0
mov eax, dword [ebp - 0x18]
and eax, 0x7f
add eax, 0xb
mov dword [ebp - 4], eax
mov ecx, dword [ebp - 0x18]
shr ecx, 7
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x14]
sub edx, 7
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x40724f
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x68]
add edx, dword [ebp - 4]
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x60]
mov eax, dword [ebp - 0x1c]
add ecx, dword [eax + 0x64]
cmp edx, ecx
jbe 0x407295
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_bit_length_repeat
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x4072cd
mov eax, dword [ebp - 4]
mov ecx, dword [ebp - 4]
sub ecx, 1
mov dword [ebp - 4], ecx
test eax, eax
je 0x4072c8
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x68]
mov ecx, dword [ebp - 0x1c]
mov dx, word [ebp - 0x38]
mov word [ecx + eax*2 + 0x70], dx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x68]
add ecx, 1
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x68], ecx
jmp 0x407295
jmp case.0x405e78.18
mov eax, dword [ebp - 0x1c]
cmp dword [eax], 0x1d
jne 0x4072da
jmp 0x407e73
mov ecx, dword [ebp - 0x1c]
xor edx, edx
mov dx, word [ecx + 0x270]
test edx, edx
jne 0x407302
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_code____missing_end_of_block
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x1d
jmp 0x407e73
mov edx, dword [ebp - 0x1c]
add edx, 0x530
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x6c], edx
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x6c]
mov dword [ecx + 0x4c], eax
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x54], 9
mov edx, dword [ebp - 0x1c]
add edx, 0x2f0
push edx
mov eax, dword [ebp - 0x1c]
add eax, 0x54
push eax
mov ecx, dword [ebp - 0x1c]
add ecx, 0x6c
push ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x60]
push eax
mov ecx, dword [ebp - 0x1c]
add ecx, 0x70
push ecx
push 1
call fcn.0040cf60
add esp, 0x18
mov dword [ebp - 0x20], eax
cmp dword [ebp - 0x20], 0
je 0x407378
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_literal_lengths_set
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x6c]
mov dword [ecx + 0x50], eax
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x58], 6
mov edx, dword [ebp - 0x1c]
add edx, 0x2f0
push edx
mov eax, dword [ebp - 0x1c]
add eax, 0x58
push eax
mov ecx, dword [ebp - 0x1c]
add ecx, 0x6c
push ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x64]
push eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x60]
mov eax, dword [ebp - 0x1c]
lea ecx, [eax + edx*2 + 0x70]
push ecx
push 2
call fcn.0040cf60
add esp, 0x18
mov dword [ebp - 0x20], eax
cmp dword [ebp - 0x20], 0
je 0x4073e6
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_distances_set
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x13
cmp dword [ebp + 0xc], 6
jne case.0x405e78.19
jmp 0x407e78
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x14
cmp dword [ebp - 0x30], 6
jb 0x4074ba
cmp dword [ebp - 0x40], 0x102
jb 0x4074ba
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x24]
mov dword [eax + 0xc], ecx
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x40]
mov dword [edx + 0x10], eax
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 0x3c]
mov dword [ecx], edx
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x30]
mov dword [eax + 4], ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
mov dword [edx + 0x38], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
mov dword [ecx + 0x3c], edx
xor eax, eax
test eax, eax
jne 0x40741a
mov ecx, dword [ebp - 0xc]
push ecx
mov edx, dword [ebp + 8]
push edx
call fcn.0040c780
add esp, 8
mov eax, dword [ebp + 8]
mov ecx, dword [eax + 0xc]
mov dword [ebp - 0x24], ecx
mov edx, dword [ebp + 8]
mov eax, dword [edx + 0x10]
mov dword [ebp - 0x40], eax
mov ecx, dword [ebp + 8]
mov edx, dword [ecx]
mov dword [ebp - 0x3c], edx
mov eax, dword [ebp + 8]
mov ecx, dword [eax + 4]
mov dword [ebp - 0x30], ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x38]
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x3c]
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407465
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx], 0xb
jne 0x4074b5
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x1bc4], 0xffffffff
jmp 0x407e73
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x1bc4], 0
mov ecx, dword [ebp - 0x1c]
mov edx, 1
mov ecx, dword [ecx + 0x54]
shl edx, cl
sub edx, 1
mov eax, dword [ebp - 0x18]
and eax, edx
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x4c]
mov eax, dword [edx + eax*4]
mov dword [ebp - 0x28], eax
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
cmp ecx, dword [ebp - 0x14]
ja 0x4074f8
jmp 0x40753c
cmp dword [ebp - 0x30], 0
jne 0x407503
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x4074f8
jmp 0x4074c7
mov ecx, dword [ebp - 0x28]
and ecx, 0xff
test ecx, ecx
je 0x407650
mov edx, dword [ebp - 0x28]
and edx, 0xff
and edx, 0xf0
test edx, edx
jne 0x407650
mov eax, dword [ebp - 0x28]
mov dword [ebp - 8], eax
mov edx, dword [ebp - 6]
and edx, 0xffff
mov ecx, dword [ebp - 7]
and ecx, 0xff
mov eax, dword [ebp - 8]
and eax, 0xff
add ecx, eax
mov eax, 1
shl eax, cl
sub eax, 1
mov esi, dword [ebp - 0x18]
and esi, eax
mov ecx, dword [ebp - 7]
and ecx, 0xff
shr esi, cl
add edx, esi
mov ecx, dword [ebp - 0x1c]
mov eax, dword [ecx + 0x4c]
mov ecx, dword [eax + edx*4]
mov dword [ebp - 0x28], ecx
mov edx, dword [ebp - 7]
and edx, 0xff
mov eax, dword [ebp - 0x27]
and eax, 0xff
add edx, eax
cmp edx, dword [ebp - 0x14]
ja 0x4075c8
jmp 0x40760d
cmp dword [ebp - 0x30], 0
jne 0x4075d3
jmp 0x407e78
mov ecx, dword [ebp - 0x30]
sub ecx, 1
mov dword [ebp - 0x30], ecx
mov edx, dword [ebp - 0x3c]
xor eax, eax
mov al, byte [edx]
mov ecx, dword [ebp - 0x14]
shl eax, cl
mov ecx, dword [ebp - 0x18]
add ecx, eax
mov dword [ebp - 0x18], ecx
mov edx, dword [ebp - 0x3c]
add edx, 1
mov dword [ebp - 0x3c], edx
mov eax, dword [ebp - 0x14]
add eax, 8
mov dword [ebp - 0x14], eax
xor ecx, ecx
test ecx, ecx
jne 0x4075c8
jmp 0x40756a
mov ecx, dword [ebp - 7]
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 7]
and eax, 0xff
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x40760d
mov eax, dword [ebp - 7]
and eax, 0xff
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x1bc4]
add edx, eax
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x1bc4], edx
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x27]
and eax, 0xff
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x407650
mov eax, dword [ebp - 0x27]
and eax, 0xff
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x1bc4]
add edx, eax
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x1bc4], edx
mov ecx, dword [ebp - 0x26]
and ecx, 0xffff
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x40], ecx
mov eax, dword [ebp - 0x28]
and eax, 0xff
test eax, eax
jne 0x4076bc
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x19
jmp 0x407e73
mov edx, dword [ebp - 0x28]
and edx, 0xff
and edx, 0x20
test edx, edx
je 0x4076e7
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x1bc4], 0xffffffff
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0xb
jmp 0x407e73
mov edx, dword [ebp - 0x28]
and edx, 0xff
and edx, 0x40
test edx, edx
je 0x40770f
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_literal_length_code
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x1d
jmp 0x407e73
mov edx, dword [ebp - 0x28]
and edx, 0xff
and edx, 0xf
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x48], edx
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x15
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x48], 0
je 0x4077e7
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
cmp ecx, dword [eax + 0x48]
jae 0x407786
cmp dword [ebp - 0x30], 0
jne 0x40774d
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407742
jmp 0x407737
xor ecx, ecx
test ecx, ecx
jne 0x407737
mov edx, dword [ebp - 0x1c]
mov eax, 1
mov ecx, dword [edx + 0x48]
shl eax, cl
sub eax, 1
mov ecx, dword [ebp - 0x18]
and ecx, eax
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x40]
add eax, ecx
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x40], eax
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
mov ecx, dword [edx + 0x48]
shr eax, cl
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
sub edx, dword [ecx + 0x48]
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x4077af
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x1bc4]
mov eax, dword [ebp - 0x1c]
add edx, dword [eax + 0x48]
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x1bc4], edx
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x40]
mov dword [edx + 0x1bc8], ecx
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x16
mov eax, dword [ebp - 0x1c]
mov edx, 1
mov ecx, dword [eax + 0x58]
shl edx, cl
sub edx, 1
mov eax, dword [ebp - 0x18]
and eax, edx
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x50]
mov eax, dword [edx + eax*4]
mov dword [ebp - 0x28], eax
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
cmp ecx, dword [ebp - 0x14]
ja 0x407830
jmp 0x407874
cmp dword [ebp - 0x30], 0
jne 0x40783b
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407830
jmp case.0x405e78.22
mov ecx, dword [ebp - 0x28]
and ecx, 0xff
and ecx, 0xf0
test ecx, ecx
jne 0x407978
mov edx, dword [ebp - 0x28]
mov dword [ebp - 8], edx
mov eax, dword [ebp - 6]
and eax, 0xffff
mov ecx, dword [ebp - 7]
and ecx, 0xff
mov edx, dword [ebp - 8]
and edx, 0xff
add ecx, edx
mov edx, 1
shl edx, cl
sub edx, 1
mov esi, dword [ebp - 0x18]
and esi, edx
mov ecx, dword [ebp - 7]
and ecx, 0xff
shr esi, cl
add eax, esi
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x50]
mov eax, dword [edx + eax*4]
mov dword [ebp - 0x28], eax
mov ecx, dword [ebp - 7]
and ecx, 0xff
mov edx, dword [ebp - 0x27]
and edx, 0xff
add ecx, edx
cmp ecx, dword [ebp - 0x14]
ja 0x4078f0
jmp 0x407935
cmp dword [ebp - 0x30], 0
jne 0x4078fb
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x4078f0
jmp 0x407891
mov ecx, dword [ebp - 7]
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 7]
and eax, 0xff
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x407935
mov eax, dword [ebp - 7]
and eax, 0xff
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x1bc4]
add edx, eax
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x1bc4], edx
mov ecx, dword [ebp - 0x27]
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, cl
mov dword [ebp - 0x18], edx
mov eax, dword [ebp - 0x27]
and eax, 0xff
mov ecx, dword [ebp - 0x14]
sub ecx, eax
mov dword [ebp - 0x14], ecx
xor edx, edx
test edx, edx
jne 0x407978
mov eax, dword [ebp - 0x27]
and eax, 0xff
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x1bc4]
add edx, eax
mov eax, dword [ebp - 0x1c]
mov dword [eax + 0x1bc4], edx
mov ecx, dword [ebp - 0x28]
and ecx, 0xff
and ecx, 0x40
test ecx, ecx
je 0x4079e3
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_distance_code
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov ecx, dword [ebp - 0x26]
and ecx, 0xffff
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x44], ecx
mov eax, dword [ebp - 0x28]
and eax, 0xff
and eax, 0xf
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x48], eax
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x17
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x48], 0
je 0x407ac7
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
cmp edx, dword [ecx + 0x48]
jae 0x407a66
cmp dword [ebp - 0x30], 0
jne 0x407a2f
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407a24
jmp 0x407a19
xor ecx, ecx
test ecx, ecx
jne 0x407a19
mov edx, dword [ebp - 0x1c]
mov eax, 1
mov ecx, dword [edx + 0x48]
shl eax, cl
sub eax, 1
mov ecx, dword [ebp - 0x18]
and ecx, eax
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x44]
add eax, ecx
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x44], eax
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
mov ecx, dword [edx + 0x48]
shr eax, cl
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x14]
sub edx, dword [ecx + 0x48]
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407a8f
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x1bc4]
mov eax, dword [ebp - 0x1c]
add edx, dword [eax + 0x48]
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x1bc4], edx
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x18
cmp dword [ebp - 0x40], 0
jne 0x407adb
jmp 0x407e78
mov eax, dword [ebp - 0xc]
sub eax, dword [ebp - 0x40]
mov dword [ebp - 4], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x44]
cmp edx, dword [ebp - 4]
jbe 0x407b85
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x44]
sub ecx, dword [ebp - 4]
mov dword [ebp - 4], ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 4]
cmp eax, dword [edx + 0x2c]
jbe 0x407b2e
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx + 0x1bc0], 0
je 0x407b2e
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_distance_too_far_back
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 4]
cmp edx, dword [ecx + 0x30]
jbe 0x407b5b
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 4]
sub ecx, dword [eax + 0x30]
mov dword [ebp - 4], ecx
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x28]
sub eax, dword [ebp - 4]
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x34]
add edx, eax
mov dword [ebp - 0x34], edx
jmp 0x407b6f
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x30]
sub ecx, dword [ebp - 4]
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x34]
add eax, ecx
mov dword [ebp - 0x34], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 4]
cmp edx, dword [ecx + 0x40]
jbe 0x407b83
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x40]
mov dword [ebp - 4], ecx
jmp 0x407b9a
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x24]
sub eax, dword [edx + 0x44]
mov dword [ebp - 0x34], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x40]
mov dword [ebp - 4], edx
mov eax, dword [ebp - 4]
cmp eax, dword [ebp - 0x40]
jbe 0x407ba8
mov ecx, dword [ebp - 0x40]
mov dword [ebp - 4], ecx
mov edx, dword [ebp - 0x40]
sub edx, dword [ebp - 4]
mov dword [ebp - 0x40], edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x40]
sub ecx, dword [ebp - 4]
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x40], ecx
mov eax, dword [ebp - 0x24]
mov ecx, dword [ebp - 0x34]
mov dl, byte [ecx]
mov byte [eax], dl
mov eax, dword [ebp - 0x24]
add eax, 1
mov dword [ebp - 0x24], eax
mov ecx, dword [ebp - 0x34]
add ecx, 1
mov dword [ebp - 0x34], ecx
mov edx, dword [ebp - 4]
sub edx, 1
mov dword [ebp - 4], edx
cmp dword [ebp - 4], 0
jne 0x407bc0
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x40], 0
jne 0x407bfd
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x14
jmp 0x407e73
cmp dword [ebp - 0x40], 0
jne 0x407c0d
jmp 0x407e78
mov edx, dword [ebp - 0x24]
mov eax, dword [ebp - 0x1c]
mov cl, byte [eax + 0x40]
mov byte [edx], cl
mov edx, dword [ebp - 0x24]
add edx, 1
mov dword [ebp - 0x24], edx
mov eax, dword [ebp - 0x40]
sub eax, 1
mov dword [ebp - 0x40], eax
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x14
jmp 0x407e73
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 8], 0
je 0x407d9d
cmp dword [ebp - 0x14], 0x20
jae 0x407c8d
cmp dword [ebp - 0x30], 0
jne 0x407c56
jmp 0x407e78
mov eax, dword [ebp - 0x30]
sub eax, 1
mov dword [ebp - 0x30], eax
mov ecx, dword [ebp - 0x3c]
xor edx, edx
mov dl, byte [ecx]
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407c4b
jmp 0x407c45
xor ecx, ecx
test ecx, ecx
jne 0x407c45
mov edx, dword [ebp - 0xc]
sub edx, dword [ebp - 0x40]
mov dword [ebp - 0xc], edx
mov eax, dword [ebp + 8]
mov ecx, dword [eax + 0x14]
add ecx, dword [ebp - 0xc]
mov edx, dword [ebp + 8]
mov dword [edx + 0x14], ecx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x1c]
add ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 0x1c]
mov dword [edx + 0x1c], ecx
cmp dword [ebp - 0xc], 0
je 0x407d17
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x10], 0
je 0x407ce8
mov ecx, dword [ebp - 0xc]
push ecx
mov edx, dword [ebp - 0x24]
sub edx, dword [ebp - 0xc]
push edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x18]
push ecx
call fcn.0040bcb0
add esp, 0xc
mov dword [ebp - 0x50], eax
jmp 0x407d05
mov edx, dword [ebp - 0xc]
push edx
mov eax, dword [ebp - 0x24]
sub eax, dword [ebp - 0xc]
push eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
push edx
call fcn.00408360
add esp, 0xc
mov dword [ebp - 0x50], eax
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x50]
mov dword [eax + 0x18], ecx
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x50]
mov dword [edx + 0x30], eax
mov ecx, dword [ebp - 0x40]
mov dword [ebp - 0xc], ecx
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 0x10], 0
je 0x407d2e
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x54], eax
jmp 0x407d66
mov ecx, dword [ebp - 0x18]
shr ecx, 0x18
and ecx, 0xff
mov edx, dword [ebp - 0x18]
shr edx, 8
and edx, 0xff00
add ecx, edx
mov eax, dword [ebp - 0x18]
and eax, 0xff00
shl eax, 8
add ecx, eax
mov edx, dword [ebp - 0x18]
and edx, 0xff
shl edx, 0x18
add ecx, edx
mov dword [ebp - 0x54], ecx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x54]
cmp ecx, dword [eax + 0x18]
je 0x407d89
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.incorrect_data_check
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1d
jmp 0x407e73
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor ecx, ecx
test ecx, ecx
jne 0x407d89
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1b
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 8], 0
je 0x407e44
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx + 0x10], 0
je 0x407e44
cmp dword [ebp - 0x14], 0x20
jae 0x407e0a
cmp dword [ebp - 0x30], 0
jne 0x407dd1
jmp 0x407e78
mov edx, dword [ebp - 0x30]
sub edx, 1
mov dword [ebp - 0x30], edx
mov eax, dword [ebp - 0x3c]
xor ecx, ecx
mov cl, byte [eax]
mov edx, ecx
mov ecx, dword [ebp - 0x14]
shl edx, cl
mov eax, dword [ebp - 0x18]
add eax, edx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0x3c]
add ecx, 1
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x14]
add edx, 8
mov dword [ebp - 0x14], edx
xor eax, eax
test eax, eax
jne 0x407dc6
jmp 0x407dc0
xor ecx, ecx
test ecx, ecx
jne 0x407dc0
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
cmp eax, dword [edx + 0x1c]
je 0x407e30
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.incorrect_length_check
mov edx, dword [ebp - 0x1c]
mov dword [edx], 0x1d
jmp 0x407e73
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0
xor eax, eax
test eax, eax
jne 0x407e30
mov ecx, dword [ebp - 0x1c]
mov dword [ecx], 0x1c
mov dword [ebp - 0x20], 1
jmp 0x407e78
mov dword [ebp - 0x20], 0xfffffffd
jmp 0x407e78
mov eax, 0xfffffffc
jmp 0x40801d
mov eax, 0xfffffffe
jmp 0x40801d
jmp 0x405e63
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x24]
mov dword [edx + 0xc], eax
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 0x40]
mov dword [ecx + 0x10], edx
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x3c]
mov dword [eax], ecx
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x30]
mov dword [edx + 4], eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x18]
mov dword [ecx + 0x38], edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x14]
mov dword [eax + 0x3c], ecx
xor edx, edx
test edx, edx
jne 0x407e78
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x28], 0
jne 0x407ecf
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx], 0x1a
jge 0x407ef6
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0xc]
cmp eax, dword [edx + 0x10]
je 0x407ef6
mov ecx, dword [ebp - 0xc]
push ecx
mov edx, dword [ebp + 8]
push edx
call fcn.004080e0
add esp, 8
test eax, eax
je 0x407ef6
mov eax, dword [ebp - 0x1c]
mov dword [eax], 0x1e
mov eax, 0xfffffffc
jmp 0x40801d
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 0x2c]
sub edx, dword [ecx + 4]
mov dword [ebp - 0x2c], edx
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0xc]
sub ecx, dword [eax + 0x10]
mov dword [ebp - 0xc], ecx
mov edx, dword [ebp + 8]
mov eax, dword [edx + 8]
add eax, dword [ebp - 0x2c]
mov ecx, dword [ebp + 8]
mov dword [ecx + 8], eax
mov edx, dword [ebp + 8]
mov eax, dword [edx + 0x14]
add eax, dword [ebp - 0xc]
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x14], eax
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 0x1c]
add eax, dword [ebp - 0xc]
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + 0x1c], eax
mov edx, dword [ebp - 0x1c]
cmp dword [edx + 8], 0
je 0x407fa7
cmp dword [ebp - 0xc], 0
je 0x407fa7
mov eax, dword [ebp - 0x1c]
cmp dword [eax + 0x10], 0
je 0x407f75
mov ecx, dword [ebp - 0xc]
push ecx
mov edx, dword [ebp + 8]
mov eax, dword [edx + 0xc]
sub eax, dword [ebp - 0xc]
push eax
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x18]
push edx
call fcn.0040bcb0
add esp, 0xc
mov dword [ebp - 0x58], eax
jmp 0x407f95
mov eax, dword [ebp - 0xc]
push eax
mov ecx, dword [ebp + 8]
mov edx, dword [ecx + 0xc]
sub edx, dword [ebp - 0xc]
push edx
mov eax, dword [ebp - 0x1c]
mov ecx, dword [eax + 0x18]
push ecx
call fcn.00408360
add esp, 0xc
mov dword [ebp - 0x58], eax
mov edx, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x58]
mov dword [edx + 0x18], eax
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 0x58]
mov dword [ecx + 0x30], edx
mov eax, dword [ebp - 0x1c]
cmp dword [eax], 0x13
je 0x407fc0
mov ecx, dword [ebp - 0x1c]
cmp dword [ecx], 0xe
je 0x407fc0
mov dword [ebp - 0x5c], 0
jmp 0x407fc7
mov dword [ebp - 0x5c], 0x100
mov edx, dword [ebp - 0x1c]
mov eax, dword [edx + 4]
neg eax
sbb eax, eax
and eax, 0x40
mov ecx, dword [ebp - 0x1c]
mov edx, dword [ecx + 0x3c]
add edx, eax
mov eax, dword [ebp - 0x1c]
xor ecx, ecx
cmp dword [eax], 0xb
setne cl
dec ecx
and ecx, 0x80
mov eax, dword [ebp - 0x5c]
add eax, edx
add ecx, eax
mov edx, dword [ebp + 8]
mov dword [edx + 0x2c], ecx
cmp dword [ebp - 0x2c], 0
jne 0x408007
cmp dword [ebp - 0xc], 0
je 0x40800d
cmp dword [ebp + 0xc], 4
jne 0x40801a
cmp dword [ebp - 0x20], 0
jne 0x40801a
mov dword [ebp - 0x20], 0xfffffffb
mov eax, dword [ebp - 0x20]
pop edi
pop esi
mov esp, ebp
pop ebp
ret