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

; File Name   :	u:\work\61a9127875ea1ba4b98baccfb33cefc7_orig.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00004B44 (  19268.)
; Section size in file		: 00004C00 (  19456.)
; Offset to raw	data for section: 00000400
; Flags	60000020: Text Executable Readable
; Alignment	: default

		.686p
		.mmx
		.model flat

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

; Segment type:	Pure code
; Segment permissions: Read/Execute
CODE		segment	para public 'CODE' use32
		assume cs:CODE
		;org 401000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
off_401000	dd offset dword_401004	; DATA XREF: CODE:00403E80o
dword_401004	dd 79420401h, 16574h, 0FF000000h, 90000000h; [00000006 BYTES: COLLAPSED FUNCTION GetStdHandle. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION RaiseException. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION RtlUnwind. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION UnhandledExceptionFilter.	PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION WriteFile. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION CharNextA. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION ExitProcess. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION MessageBoxA. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION FreeLibrary. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetCommandLineA. PRESS KEYPAD "+"	TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetLocaleInfoA. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetModuleFileNameA. PRESS	KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetStartupInfoA. PRESS KEYPAD "+"	TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetThreadLocale. PRESS KEYPAD "+"	TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION RegCloseKey. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION RegOpenKeyExA. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION RegQueryValueExA.	PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION SysReAllocStringLen. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION SysFreeString. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetCurrentThreadId. PRESS	KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetVersion. PRESS	KEYPAD "+" TO EXPAND]
		align 4

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



sub_4010BC	proc near		; CODE XREF: sub_403B88+71p

var_1C		= byte ptr -1Ch
var_18		= word ptr -18h

		push	ebx
		add	esp, 0FFFFFFBCh
		mov	ebx, 0Ah
		push	esp		; lpStartupInfo
		call	GetStartupInfoA	; GetStartupInfoA
		test	[esp+48h+var_1C], 1
		jz	short loc_4010D7
		movzx	ebx, [esp+48h+var_18]


loc_4010D7:				; CODE XREF: sub_4010BC+14j
		mov	eax, ebx
		add	esp, 44h
		pop	ebx
		retn
sub_4010BC	endp

; ---------------------------------------------------------------------------
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION LocalAlloc. PRESS	KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION LocalFree. PRESS KEYPAD "+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION VirtualAlloc. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION VirtualFree. PRESS KEYPAD	"+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION InitializeCriticalSection. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION EnterCriticalSection. PRESS KEYPAD "+" TO	EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION LeaveCriticalSection. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION DeleteCriticalSection. PRESS KEYPAD "+" TO EXPAND]
		align 10h

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



sub_401120	proc near		; CODE XREF: sub_401178+6p
		push	ebx
		push	esi
		mov	esi, offset dword_4075D0
		cmp	dword ptr [esi], 0
		jnz	short loc_401166
		push	644h		; uBytes
		push	0		; uFlags
		call	LocalAlloc	; LocalAlloc
		mov	ecx, eax
		test	ecx, ecx
		jnz	short loc_401143
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401143:				; CODE XREF: sub_401120+1Cj
		mov	eax, ds:dword_4075CC
		mov	[ecx], eax
		mov	ds:dword_4075CC, ecx
		xor	edx, edx


loc_401152:				; CODE XREF: sub_401120+44j
		mov	eax, edx
		add	eax, eax
		lea	eax, [ecx+eax*8+4]
		mov	ebx, [esi]
		mov	[eax], ebx
		mov	[esi], eax
		inc	edx
		cmp	edx, 64h
		jnz	short loc_401152


loc_401166:				; CODE XREF: sub_401120+Aj
		mov	eax, [esi]
		mov	edx, [eax]
		mov	[esi], edx
		pop	esi
		pop	ebx
		retn
sub_401120	endp

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

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



sub_401170	proc near		; CODE XREF: sub_4017AC+33p
					; sub_4017AC+3Dp ...
		mov	[eax], eax
		mov	[eax+4], eax
		retn
sub_401170	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401178	proc near		; CODE XREF: sub_4011C0+5Dp
					; sub_401230+73p ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		call	sub_401120
		test	eax, eax
		jnz	short loc_40118C
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40118C:				; CODE XREF: sub_401178+Dj
		mov	edx, [esi]
		mov	[eax+8], edx
		mov	edx, [esi+4]
		mov	[eax+0Ch], edx
		mov	edx, [ebx]
		mov	[eax], edx
		mov	[eax+4], ebx
		mov	[edx+4], eax
		mov	[ebx], eax
		mov	al, 1
		pop	esi
		pop	ebx
		retn
sub_401178	endp


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



sub_4011A8	proc near		; CODE XREF: sub_4011C0+2Cp
					; sub_4011C0+48p ...
		mov	edx, [eax+4]
		mov	ecx, [eax]
		mov	[edx], ecx
		mov	[ecx+4], edx
		mov	edx, ds:dword_4075D0
		mov	[eax], edx
		mov	ds:dword_4075D0, eax
		retn
sub_4011A8	endp


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



sub_4011C0	proc near		; CODE XREF: sub_40156C+6Cp
					; sub_4015FC+62p ...

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	esi, ecx
		mov	[esp+14h+var_14], edx
		mov	ebp, eax
		mov	ebx, [ebp+0]
		mov	eax, [esp+14h+var_14]
		mov	edx, [eax]
		mov	[esi], edx
		mov	edx, [eax+4]
		mov	[esi+4], edx


loc_4011DC:				; CODE XREF: sub_4011C0+57j
		mov	edi, [ebx]
		mov	eax, [esi]
		mov	edx, [ebx+8]
		add	edx, [ebx+0Ch]
		cmp	eax, edx
		jnz	short loc_4011FE
		mov	eax, ebx
		call	sub_4011A8
		mov	eax, [ebx+8]
		mov	[esi], eax
		mov	eax, [ebx+0Ch]
		add	[esi+4], eax
		jmp	short loc_401213
; ---------------------------------------------------------------------------


loc_4011FE:				; CODE XREF: sub_4011C0+28j
		add	eax, [esi+4]
		cmp	eax, [ebx+8]
		jnz	short loc_401213
		mov	eax, ebx
		call	sub_4011A8
		mov	eax, [ebx+0Ch]
		add	[esi+4], eax


loc_401213:				; CODE XREF: sub_4011C0+3Cj
					; sub_4011C0+44j
		mov	ebx, edi
		cmp	ebp, ebx
		jnz	short loc_4011DC
		mov	edx, esi
		mov	eax, ebp
		call	sub_401178
		test	al, al
		jnz	short loc_40122A
		xor	eax, eax
		mov	[esi], eax


loc_40122A:				; CODE XREF: sub_4011C0+64j
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4011C0	endp


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



sub_401230	proc near		; CODE XREF: sub_401720+7Ap
					; sub_401B08+99p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	ebx, eax
		mov	edi, ebx


loc_40123B:				; CODE XREF: sub_401230+88j
		mov	esi, [edx]
		mov	eax, [ebx+8]
		cmp	esi, eax
		jb	short loc_4012B4
		mov	ecx, esi
		add	ecx, [edx+4]
		mov	ebp, eax
		add	ebp, [ebx+0Ch]
		cmp	ecx, ebp
		ja	short loc_4012B4
		cmp	esi, eax
		jnz	short loc_401271
		mov	eax, [edx+4]
		add	[ebx+8], eax
		mov	eax, [edx+4]
		sub	[ebx+0Ch], eax
		cmp	dword ptr [ebx+0Ch], 0
		jnz	short loc_4012B0
		mov	eax, ebx
		call	sub_4011A8
		jmp	short loc_4012B0
; ---------------------------------------------------------------------------


loc_401271:				; CODE XREF: sub_401230+24j
		mov	ecx, esi
		mov	edi, [edx+4]
		add	ecx, edi
		mov	ebp, eax
		add	ebp, [ebx+0Ch]
		cmp	ecx, ebp
		jnz	short loc_401286
		sub	[ebx+0Ch], edi
		jmp	short loc_4012B0
; ---------------------------------------------------------------------------


loc_401286:				; CODE XREF: sub_401230+4Fj
		mov	ecx, [edx]
		add	ecx, [edx+4]
		mov	[esp+18h+var_18], ecx
		mov	edi, [ebx+8]
		add	edi, [ebx+0Ch]
		sub	edi, ecx
		mov	[esp+18h+var_14], edi
		sub	esi, eax
		mov	[ebx+0Ch], esi
		mov	edx, esp
		mov	eax, ebx
		call	sub_401178
		test	al, al
		jnz	short loc_4012B0
		xor	eax, eax
		jmp	short loc_4012BC
; ---------------------------------------------------------------------------


loc_4012B0:				; CODE XREF: sub_401230+36j
					; sub_401230+3Fj ...
		mov	al, 1
		jmp	short loc_4012BC
; ---------------------------------------------------------------------------


loc_4012B4:				; CODE XREF: sub_401230+12j
					; sub_401230+20j
		mov	ebx, [ebx]
		cmp	edi, ebx
		jnz	short loc_40123B
		xor	eax, eax


loc_4012BC:				; CODE XREF: sub_401230+7Ej
					; sub_401230+82j
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401230	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4012C4	proc near		; CODE XREF: sub_40156C+5Cp
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, eax
		cmp	esi, 100000h
		jge	short loc_4012DA
		mov	esi, 100000h
		jmp	short loc_4012E6
; ---------------------------------------------------------------------------


loc_4012DA:				; CODE XREF: sub_4012C4+Dj
		add	esi, 0FFFFh
		and	esi, 0FFFF0000h


loc_4012E6:				; CODE XREF: sub_4012C4+14j
		mov	[ebx+4], esi
		push	1		; flProtect
		push	2000h		; flAllocationType
		push	esi		; dwSize
		push	0		; lpAddress
		call	VirtualAlloc	; VirtualAlloc
		mov	edi, eax
		mov	[ebx], edi
		test	edi, edi
		jz	short loc_401323
		mov	edx, ebx
		mov	eax, offset dword_4075D4
		call	sub_401178
		test	al, al
		jnz	short loc_401323
		push	8000h		; dwFreeType
		push	0		; dwSize
		mov	eax, [ebx]
		push	eax		; lpAddress
		call	VirtualFree	; VirtualFree
		xor	eax, eax
		mov	[ebx], eax


loc_401323:				; CODE XREF: sub_4012C4+3Aj
					; sub_4012C4+4Aj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4012C4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401328	proc near		; CODE XREF: sub_4015FC+4Cp
					; sub_4015FC+93p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, ecx
		mov	esi, edx
		mov	ebp, eax
		mov	dword ptr [ebx+4], 100000h
		push	4		; flProtect
		push	2000h		; flAllocationType
		push	100000h		; dwSize
		push	ebp		; lpAddress
		call	VirtualAlloc	; VirtualAlloc
		mov	edi, eax
		mov	[ebx], edi
		test	edi, edi
		jnz	short loc_401372
		add	esi, 0FFFFh
		and	esi, 0FFFF0000h
		mov	[ebx+4], esi
		push	4		; flProtect
		push	2000h		; flAllocationType
		push	esi		; dwSize
		push	ebp		; lpAddress
		call	VirtualAlloc	; VirtualAlloc
		mov	[ebx], eax


loc_401372:				; CODE XREF: sub_401328+29j
		cmp	dword ptr [ebx], 0
		jz	short loc_40139A
		mov	edx, ebx
		mov	eax, offset dword_4075D4
		call	sub_401178
		test	al, al
		jnz	short loc_40139A
		push	8000h		; dwFreeType
		push	0		; dwSize
		mov	eax, [ebx]
		push	eax		; lpAddress
		call	VirtualFree	; VirtualFree
		xor	eax, eax
		mov	[ebx], eax


loc_40139A:				; CODE XREF: sub_401328+4Dj
					; sub_401328+5Dj
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401328	endp

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

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



sub_4013A0	proc near		; CODE XREF: sub_40156C+7Ep
					; sub_4015FC+7Ap ...

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

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFECh
		mov	[esp+24h+var_20], ecx
		mov	[esp+24h+var_24], edx
		mov	[esp+24h+var_1C], 0FFFFFFFFh
		xor	edx, edx
		mov	[esp+24h+var_18], edx
		mov	ebp, eax
		mov	eax, [esp+24h+var_24]
		add	eax, ebp
		mov	[esp+24h+var_14], eax
		mov	ebx, ds:dword_4075D4
		jmp	short loc_401420
; ---------------------------------------------------------------------------


loc_4013CF:				; CODE XREF: sub_4013A0+86j
		mov	edi, [ebx]
		mov	esi, [ebx+8]
		cmp	ebp, esi
		ja	short loc_40141E
		mov	eax, esi
		add	eax, [ebx+0Ch]
		cmp	eax, [esp+24h+var_14]
		ja	short loc_40141E
		cmp	esi, [esp+24h+var_1C]
		jnb	short loc_4013ED
		mov	[esp+24h+var_1C], esi


loc_4013ED:				; CODE XREF: sub_4013A0+47j
		mov	eax, esi
		add	eax, [ebx+0Ch]
		cmp	eax, [esp+24h+var_18]
		jbe	short loc_4013FC
		mov	[esp+24h+var_18], eax


loc_4013FC:				; CODE XREF: sub_4013A0+56j
		push	8000h		; dwFreeType
		push	0		; dwSize
		push	esi		; lpAddress
		call	VirtualFree	; VirtualFree
		test	eax, eax
		jnz	short loc_401417
		mov	ds:dword_4075B0, 1


loc_401417:				; CODE XREF: sub_4013A0+6Bj
		mov	eax, ebx
		call	sub_4011A8


loc_40141E:				; CODE XREF: sub_4013A0+36j
					; sub_4013A0+41j
		mov	ebx, edi


loc_401420:				; CODE XREF: sub_4013A0+2Dj
		cmp	ebx, offset dword_4075D4
		jnz	short loc_4013CF
		mov	eax, [esp+24h+var_20]
		xor	edx, edx
		mov	[eax], edx
		cmp	[esp+24h+var_18], 0
		jz	short loc_401450
		mov	eax, [esp+24h+var_20]
		mov	edx, [esp+24h+var_1C]
		mov	[eax], edx
		mov	eax, [esp+24h+var_18]
		sub	eax, [esp+24h+var_1C]
		mov	edx, [esp+24h+var_20]
		mov	[edx+4], eax


loc_401450:				; CODE XREF: sub_4013A0+95j
		add	esp, 14h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4013A0	endp


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



sub_401458	proc near		; CODE XREF: sub_40156C+2Dp
					; sub_4015FC+E6p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	[esp+1Ch+var_18], ecx
		mov	[esp+1Ch+var_1C], edx
		mov	edx, eax
		mov	ebp, edx
		and	ebp, 0FFFFF000h
		add	edx, [esp+1Ch+var_1C]
		add	edx, 0FFFh
		and	edx, 0FFFFF000h
		mov	[esp+1Ch+var_14], edx
		mov	eax, [esp+1Ch+var_18]
		mov	[eax], ebp
		mov	eax, [esp+1Ch+var_14]
		sub	eax, ebp
		mov	edx, [esp+1Ch+var_18]
		mov	[edx+4], eax
		mov	esi, ds:dword_4075D4
		jmp	short loc_4014DA
; ---------------------------------------------------------------------------


loc_40149E:				; CODE XREF: sub_401458+88j
		mov	ebx, [esi+8]
		mov	edi, [esi+0Ch]
		add	edi, ebx
		cmp	ebp, ebx
		jbe	short loc_4014AC
		mov	ebx, ebp


loc_4014AC:				; CODE XREF: sub_401458+50j
		cmp	edi, [esp+1Ch+var_14]
		jbe	short loc_4014B6
		mov	edi, [esp+1Ch+var_14]


loc_4014B6:				; CODE XREF: sub_401458+58j
		cmp	edi, ebx
		jbe	short loc_4014D8
		push	4		; flProtect
		push	1000h		; flAllocationType
		sub	edi, ebx
		push	edi		; dwSize
		push	ebx		; lpAddress
		call	VirtualAlloc	; VirtualAlloc
		test	eax, eax
		jnz	short loc_4014D8
		mov	eax, [esp+1Ch+var_18]
		xor	edx, edx
		mov	[eax], edx
		jmp	short loc_4014E2
; ---------------------------------------------------------------------------


loc_4014D8:				; CODE XREF: sub_401458+60j
					; sub_401458+74j
		mov	esi, [esi]


loc_4014DA:				; CODE XREF: sub_401458+44j
		cmp	esi, offset dword_4075D4
		jnz	short loc_40149E


loc_4014E2:				; CODE XREF: sub_401458+7Ej
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401458	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4014EC	proc near		; CODE XREF: sub_401720+2Ep

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	ebx, eax
		mov	esi, ebx
		add	esi, 0FFFh
		and	esi, 0FFFFF000h
		mov	[esp+14h+var_14], esi
		mov	ebp, ebx
		add	ebp, edx
		and	ebp, 0FFFFF000h
		mov	eax, [esp+14h+var_14]
		mov	[ecx], eax
		mov	eax, ebp
		sub	eax, [esp+14h+var_14]
		mov	[ecx+4], eax
		mov	esi, ds:dword_4075D4
		jmp	short loc_40155B
; ---------------------------------------------------------------------------


loc_401523:				; CODE XREF: sub_4014EC+75j
		mov	ebx, [esi+8]
		mov	edi, [esi+0Ch]
		add	edi, ebx
		cmp	ebx, [esp+14h+var_14]
		jnb	short loc_401533
		mov	ebx, [esp+14h+var_14]


loc_401533:				; CODE XREF: sub_4014EC+42j
		cmp	ebp, edi
		jnb	short loc_401539
		mov	edi, ebp


loc_401539:				; CODE XREF: sub_4014EC+49j
		cmp	edi, ebx
		jbe	short loc_401559
		push	4000h		; dwFreeType
		sub	edi, ebx
		push	edi		; dwSize
		push	ebx		; lpAddress
		call	VirtualFree	; VirtualFree
		test	eax, eax
		jnz	short loc_401559
		mov	ds:dword_4075B0, 2


loc_401559:				; CODE XREF: sub_4014EC+4Fj
					; sub_4014EC+61j
		mov	esi, [esi]


loc_40155B:				; CODE XREF: sub_4014EC+35j
		cmp	esi, offset dword_4075D4
		jnz	short loc_401523
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4014EC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40156C	proc near		; CODE XREF: sub_401D18+Bp

var_18		= dword	ptr -18h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	edi, eax
		mov	ebp, offset dword_4075E4
		add	edi, 3FFFh
		and	edi, 0FFFFC000h


loc_401588:				; CODE XREF: sub_40156C+75j
		mov	ebx, [ebp+0]
		jmp	short loc_4015C0
; ---------------------------------------------------------------------------


loc_40158D:				; CODE XREF: sub_40156C+56j
		cmp	edi, [ebx+0Ch]
		jg	short loc_4015BE
		mov	ecx, esi
		mov	edx, edi
		mov	eax, [ebx+8]
		call	sub_401458
		cmp	dword ptr [esi], 0
		jz	short loc_4015F3
		mov	eax, [esi+4]
		add	[ebx+8], eax
		mov	eax, [esi+4]
		sub	[ebx+0Ch], eax
		cmp	dword ptr [ebx+0Ch], 0
		jnz	short loc_4015F3
		mov	eax, ebx
		call	sub_4011A8
		jmp	short loc_4015F3
; ---------------------------------------------------------------------------


loc_4015BE:				; CODE XREF: sub_40156C+24j
		mov	ebx, [ebx]


loc_4015C0:				; CODE XREF: sub_40156C+1Fj
		cmp	ebx, ebp
		jnz	short loc_40158D
		mov	edx, esi
		mov	eax, edi
		call	sub_4012C4
		cmp	dword ptr [esi], 0
		jz	short loc_4015F3
		mov	ecx, esp
		mov	edx, esi
		mov	eax, ebp
		call	sub_4011C0
		cmp	[esp+18h+var_18], 0
		jnz	short loc_401588
		mov	ecx, esp
		mov	edx, [esi+4]
		mov	eax, [esi]
		call	sub_4013A0
		xor	eax, eax
		mov	[esi], eax


loc_4015F3:				; CODE XREF: sub_40156C+35j
					; sub_40156C+47j ...
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40156C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4015FC	proc near		; CODE XREF: sub_401D44+10p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFECh
		mov	[esp+24h+var_24], ecx
		mov	edi, edx
		mov	esi, eax
		mov	ebp, offset dword_4075E4
		add	edi, 3FFFh
		and	edi, 0FFFFC000h


loc_40161B:				; CODE XREF: sub_4015FC+6Cj
					; sub_4015FC+B3j
		mov	ebx, [ebp+0]
		jmp	short loc_401622
; ---------------------------------------------------------------------------


loc_401620:				; CODE XREF: sub_4015FC+2Dj
		mov	ebx, [ebx]


loc_401622:				; CODE XREF: sub_4015FC+22j
		cmp	ebx, ebp
		jz	short loc_40162B
		cmp	esi, [ebx+8]
		jnz	short loc_401620


loc_40162B:				; CODE XREF: sub_4015FC+28j
		cmp	esi, [ebx+8]
		jnz	short loc_401687
		cmp	edi, [ebx+0Ch]
		jle	loc_4016CF
		lea	ecx, [esp+24h+var_20]
		mov	edx, edi
		sub	edx, [ebx+0Ch]
		mov	eax, [ebx+8]
		add	eax, [ebx+0Ch]
		call	sub_401328
		cmp	[esp+24h+var_20], 0
		jz	short loc_401687
		lea	ecx, [esp+24h+var_18]
		lea	edx, [esp+24h+var_20]
		mov	eax, ebp
		call	sub_4011C0
		cmp	[esp+24h+var_18], 0
		jnz	short loc_40161B
		lea	ecx, [esp+24h+var_18]
		mov	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		call	sub_4013A0
		mov	eax, [esp+24h+var_24]
		xor	edx, edx
		mov	[eax], edx
		jmp	loc_401717
; ---------------------------------------------------------------------------


loc_401687:				; CODE XREF: sub_4015FC+32j
					; sub_4015FC+56j
		lea	ecx, [esp+24h+var_20]
		mov	edx, edi
		mov	eax, esi
		call	sub_401328
		cmp	[esp+24h+var_20], 0
		jz	short loc_4016CF
		lea	ecx, [esp+24h+var_18]
		lea	edx, [esp+24h+var_20]
		mov	eax, ebp
		call	sub_4011C0
		cmp	[esp+24h+var_18], 0
		jnz	loc_40161B
		lea	ecx, [esp+24h+var_18]
		mov	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		call	sub_4013A0
		mov	eax, [esp+24h+var_24]
		xor	edx, edx
		mov	[eax], edx
		jmp	short loc_401717
; ---------------------------------------------------------------------------


loc_4016CF:				; CODE XREF: sub_4015FC+37j
					; sub_4015FC+9Dj
		mov	ebp, [ebx+8]
		cmp	esi, ebp
		jnz	short loc_401710
		cmp	edi, [ebx+0Ch]
		jg	short loc_401710
		mov	ecx, [esp+24h+var_24]
		mov	edx, edi
		mov	eax, ebp
		call	sub_401458
		mov	eax, [esp+24h+var_24]
		cmp	dword ptr [eax], 0
		jz	short loc_401717
		mov	eax, [esp+24h+var_24]
		mov	eax, [eax+4]
		add	[ebx+8], eax
		mov	eax, [esp+24h+var_24]
		mov	eax, [eax+4]
		sub	[ebx+0Ch], eax
		cmp	dword ptr [ebx+0Ch], 0
		jnz	short loc_401717
		mov	eax, ebx
		call	sub_4011A8
		jmp	short loc_401717
; ---------------------------------------------------------------------------


loc_401710:				; CODE XREF: sub_4015FC+D8j
					; sub_4015FC+DDj
		mov	eax, [esp+24h+var_24]
		xor	edx, edx
		mov	[eax], edx


loc_401717:				; CODE XREF: sub_4015FC+86j
					; sub_4015FC+D1j ...
		add	esp, 14h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4015FC	endp

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

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



sub_401720	proc near		; CODE XREF: sub_401B08+4Ep
					; sub_401B08+61p

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

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, ecx
		mov	[esp+20h+var_20], edx
		lea	ebx, [eax+3FFFh]
		and	ebx, 0FFFFC000h
		mov	esi, [esp+20h+var_20]
		add	esi, eax
		and	esi, 0FFFFC000h
		cmp	ebx, esi
		jnb	short loc_4017A1
		mov	ecx, edi
		mov	edx, esi
		sub	edx, ebx
		mov	eax, ebx
		call	sub_4014EC
		lea	ecx, [esp+20h+var_1C]
		mov	edx, edi
		mov	eax, offset dword_4075E4
		call	sub_4011C0
		mov	ebx, [esp+20h+var_1C]
		test	ebx, ebx
		jz	short loc_40178A
		lea	ecx, [esp+20h+var_14]
		mov	edx, [esp+20h+var_18]
		mov	eax, ebx
		call	sub_4013A0
		mov	eax, [esp+20h+var_14]
		mov	[esp+20h+var_1C], eax
		mov	eax, [esp+20h+var_10]
		mov	[esp+20h+var_18], eax


loc_40178A:				; CODE XREF: sub_401720+49j
		cmp	[esp+20h+var_1C], 0
		jz	short loc_4017A5
		lea	edx, [esp+20h+var_1C]
		mov	eax, offset dword_4075E4
		call	sub_401230
		jmp	short loc_4017A5
; ---------------------------------------------------------------------------


loc_4017A1:				; CODE XREF: sub_401720+24j
		xor	eax, eax
		mov	[edi], eax


loc_4017A5:				; CODE XREF: sub_401720+6Fj
					; sub_401720+7Fj
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401720	endp


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

; Attributes: bp-based frame


sub_4017AC	proc near		; CODE XREF: sub_401E98+14p
					; sub_402028+19p ...

arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 00402BB4 SIZE 00000036 BYTES

		push	ebp
		mov	ebp, esp
		xor	edx, edx
		push	ebp
		push	offset loc_401862
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		push	offset CriticalSection ; lpCriticalSection
		call	InitializeCriticalSection	; InitializeCriticalSection
		cmp	ds:byte_407035,	0
		jz	short loc_4017DA
		push	offset CriticalSection ; lpCriticalSection
		call	EnterCriticalSection


loc_4017DA:				; CODE XREF: sub_4017AC+22j
		mov	eax, offset dword_4075D4
		call	sub_401170
		mov	eax, offset dword_4075E4
		call	sub_401170
		mov	eax, offset dword_407610
		call	sub_401170
		push	0FF8h		; uBytes
		push	0		; uFlags
		call	LocalAlloc	; LocalAlloc
		mov	ds:hMem, eax
		cmp	ds:hMem, 0
		jz	short loc_401841
		mov	eax, 3


loc_401817:				; CODE XREF: sub_4017AC+7Dj
		mov	edx, ds:hMem
		xor	ecx, ecx
		mov	[edx+eax*4-0Ch], ecx
		inc	eax
		cmp	eax, 401h
		jnz	short loc_401817
		mov	eax, offset dword_4075F4
		mov	[eax+4], eax
		mov	[eax], eax
		mov	ds:dword_407600, eax
		mov	ds:byte_4075AC,	1


loc_401841:				; CODE XREF: sub_4017AC+64j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401869


loc_40184E:				; CODE XREF: sub_4017AC+BBj
		cmp	ds:byte_407035,	0
		jz	short loc_401861
		push	offset CriticalSection ; lpCriticalSection
		call	LeaveCriticalSection


loc_401861:				; CODE XREF: sub_4017AC+A9j
		retn
; ---------------------------------------------------------------------------


loc_401862:				; DATA XREF: sub_4017AC+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_40184E
; ---------------------------------------------------------------------------


loc_401869:				; CODE XREF: sub_4017AC:loc_401861j
					; DATA XREF: sub_4017AC+9Do
		mov	al, ds:byte_4075AC
		pop	ebp
		retn
sub_4017AC	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_401870	proc near		; CODE XREF: sub_403B34+37p
		push	ebp
		mov	ebp, esp
		push	ebx
		cmp	ds:byte_4075AC,	0
		jz	loc_40194D
		xor	edx, edx
		push	ebp
		push	offset loc_401946
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	ds:byte_407035,	0
		jz	short loc_4018A2
		push	offset CriticalSection ; lpCriticalSection
		call	EnterCriticalSection


loc_4018A2:				; CODE XREF: sub_401870+26j
		mov	ds:byte_4075AC,	0
		mov	eax, ds:hMem
		push	eax		; hMem
		call	LocalFree	; LocalFree
		xor	eax, eax
		mov	ds:hMem, eax
		mov	ebx, ds:dword_4075D4
		jmp	short loc_4018D5
; ---------------------------------------------------------------------------


loc_4018C3:				; CODE XREF: sub_401870+6Bj
		push	8000h		; dwFreeType
		push	0		; dwSize
		mov	eax, [ebx+8]
		push	eax		; lpAddress
		call	VirtualFree	; VirtualFree
		mov	ebx, [ebx]


loc_4018D5:				; CODE XREF: sub_401870+51j
		cmp	ebx, offset dword_4075D4
		jnz	short loc_4018C3
		mov	eax, offset dword_4075D4
		call	sub_401170
		mov	eax, offset dword_4075E4
		call	sub_401170
		mov	eax, offset dword_407610
		call	sub_401170
		mov	eax, ds:dword_4075CC
		test	eax, eax
		jz	short loc_40191B


loc_401904:				; CODE XREF: sub_401870+A9j
		mov	edx, [eax]
		mov	ds:dword_4075CC, edx
		push	eax		; hMem
		call	LocalFree	; LocalFree
		mov	eax, ds:dword_4075CC
		test	eax, eax
		jnz	short loc_401904


loc_40191B:				; CODE XREF: sub_401870+92j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40194D


loc_401928:				; CODE XREF: sub_401870+DBj
		cmp	ds:byte_407035,	0
		jz	short loc_40193B
		push	offset CriticalSection ; lpCriticalSection
		call	LeaveCriticalSection


loc_40193B:				; CODE XREF: sub_401870+BFj
		push	offset CriticalSection ; lpCriticalSection
		call	DeleteCriticalSection
		retn
; ---------------------------------------------------------------------------


loc_401946:				; DATA XREF: sub_401870+14o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_401928
; ---------------------------------------------------------------------------


loc_40194D:				; CODE XREF: sub_401870+Bj
					; sub_401870+D5j
					; DATA XREF: ...
		pop	ebx
		pop	ebp
		retn
sub_401870	endp


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



sub_401950	proc near		; CODE XREF: sub_401A60:loc_401AC1p
					; sub_401AD0+23p ...
		push	ebx
		cmp	eax, ds:dword_407600
		jnz	short loc_401962
		mov	edx, [eax+4]
		mov	ds:dword_407600, edx


loc_401962:				; CODE XREF: sub_401950+7j
		mov	edx, [eax+4]
		mov	ecx, [eax+8]
		cmp	ecx, 1000h
		jg	short loc_4019A8
		cmp	eax, edx
		jnz	short loc_40198B
		test	ecx, ecx
		jns	short loc_40197B
		add	ecx, 3


loc_40197B:				; CODE XREF: sub_401950+26j
		sar	ecx, 2
		mov	eax, ds:hMem
		xor	edx, edx
		mov	[eax+ecx*4-0Ch], edx
		jmp	short loc_4019AF
; ---------------------------------------------------------------------------


loc_40198B:				; CODE XREF: sub_401950+22j
		test	ecx, ecx
		jns	short loc_401992
		add	ecx, 3


loc_401992:				; CODE XREF: sub_401950+3Dj
		sar	ecx, 2
		mov	ebx, ds:hMem
		mov	[ebx+ecx*4-0Ch], edx
		mov	eax, [eax]
		mov	[edx], eax
		mov	[eax+4], edx
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4019A8:				; CODE XREF: sub_401950+1Ej
		mov	eax, [eax]
		mov	[edx], eax
		mov	[eax+4], edx


loc_4019AF:				; CODE XREF: sub_401950+39j
		pop	ebx
		retn
sub_401950	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4019B4	proc near		; CODE XREF: sub_401B08+11p
		mov	edx, ds:dword_407610
		jmp	short loc_4019CC
; ---------------------------------------------------------------------------


loc_4019BC:				; CODE XREF: sub_4019B4+1Ej
		mov	ecx, [edx+8]
		cmp	eax, ecx
		jb	short loc_4019CA
		add	ecx, [edx+0Ch]
		cmp	eax, ecx
		jb	short loc_4019E0


loc_4019CA:				; CODE XREF: sub_4019B4+Dj
		mov	edx, [edx]


loc_4019CC:				; CODE XREF: sub_4019B4+6j
		cmp	edx, offset dword_407610
		jnz	short loc_4019BC
		mov	ds:dword_4075B0, 3
		xor	edx, edx


loc_4019E0:				; CODE XREF: sub_4019B4+14j
		mov	eax, edx
		retn
sub_4019B4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4019E4	proc near		; CODE XREF: sub_401B08+74p
					; sub_401C8C+68p
		push	ebx
		mov	ecx, edx
		sub	ecx, 4
		lea	ebx, [ecx+eax]
		cmp	edx, 10h
		jl	short loc_401A01
		mov	dword ptr [ebx], 80000007h
		mov	edx, ecx
		call	sub_401BB8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401A01:				; CODE XREF: sub_4019E4+Cj
		cmp	edx, 4
		jl	short loc_401A12
		mov	ecx, edx
		or	ecx, 80000002h
		mov	[eax], ecx
		mov	[ebx], ecx


loc_401A12:				; CODE XREF: sub_4019E4+20j
		pop	ebx
		retn
sub_4019E4	endp


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



sub_401A14	proc near		; CODE XREF: sub_401A38+Dp
					; sub_401C40+36p ...
		inc	ds:dword_40759C
		mov	edx, eax
		sub	edx, 4
		mov	edx, [edx]
		and	edx, 7FFFFFFCh
		sub	edx, 4
		add	ds:dword_4075A0, edx
		call	sub_402028
		retn
sub_401A14	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401A38	proc near		; CODE XREF: sub_401B08+8Ep
		cmp	edx, 0Ch
		jl	short loc_401A4B
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		call	sub_401A14
		retn
; ---------------------------------------------------------------------------


loc_401A4B:				; CODE XREF: sub_401A38+3j
		cmp	edx, 4
		jl	short loc_401A5A
		mov	ecx, edx
		or	ecx, 80000002h
		mov	[eax], ecx


loc_401A5A:				; CODE XREF: sub_401A38+16j
		add	eax, edx
		and	dword ptr [eax], 0FFFFFFFEh
		retn
sub_401A38	endp


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



sub_401A60	proc near		; CODE XREF: sub_401C8C+36p
		push	ebx
		push	esi
		mov	edx, eax
		sub	edx, 4
		mov	edx, [edx]
		mov	ecx, edx
		and	ecx, 80000002h
		cmp	ecx, 80000002h
		jz	short loc_401A83
		mov	ds:dword_4075B0, 4


loc_401A83:				; CODE XREF: sub_401A60+17j
		mov	ebx, edx
		and	ebx, 7FFFFFFCh
		sub	eax, ebx
		mov	ecx, eax
		xor	edx, [ecx]
		test	edx, 0FFFFFFFEh
		jz	short loc_401AA3
		mov	ds:dword_4075B0, 5


loc_401AA3:				; CODE XREF: sub_401A60+37j
		test	byte ptr [ecx],	1
		jz	short loc_401AC8
		mov	edx, eax
		sub	edx, 0Ch
		mov	esi, [edx+8]
		sub	eax, esi
		cmp	esi, [eax+8]
		jz	short loc_401AC1
		mov	ds:dword_4075B0, 6


loc_401AC1:				; CODE XREF: sub_401A60+55j
		call	sub_401950
		add	ebx, esi


loc_401AC8:				; CODE XREF: sub_401A60+46j
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_401A60	endp

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

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



sub_401AD0	proc near		; CODE XREF: sub_401C8C+4Fp
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		xor	edi, edi
		mov	eax, [ebx]
		test	eax, 80000000h
		jz	short loc_401AEB
		and	eax, 7FFFFFFCh
		add	edi, eax
		add	ebx, eax
		mov	eax, [ebx]


loc_401AEB:				; CODE XREF: sub_401AD0+Ej
		test	al, 2
		jnz	short loc_401B02
		mov	esi, ebx
		mov	eax, esi
		call	sub_401950
		mov	eax, [esi+8]
		add	edi, eax
		add	ebx, eax
		and	dword ptr [ebx], 0FFFFFFFEh


loc_401B02:				; CODE XREF: sub_401AD0+1Dj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401AD0	endp


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



sub_401B08	proc near		; CODE XREF: sub_401BB8+61p

var_1C		= byte ptr -1Ch
var_1B		= dword	ptr -1Bh
var_17		= dword	ptr -17h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	edi, edx
		mov	esi, eax
		mov	[esp+1Ch+var_1C], 0
		mov	eax, esi
		call	sub_4019B4
		mov	ebx, eax
		test	ebx, ebx
		jz	loc_401BAA
		mov	ebp, [ebx+8]
		mov	eax, ebp
		add	eax, [ebx+0Ch]
		mov	edx, eax
		lea	ecx, [edi+esi]
		sub	edx, ecx
		cmp	edx, 0Ch
		jg	short loc_401B40
		mov	edi, eax
		sub	edi, esi


loc_401B40:				; CODE XREF: sub_401B08+32j
		mov	eax, esi
		sub	eax, ebp
		cmp	eax, 0Ch
		jge	short loc_401B5D
		lea	ecx, [esp+1Ch+var_1B]
		mov	edx, esi
		sub	edx, [ebx+8]
		add	edx, edi
		mov	eax, ebp
		call	sub_401720
		jmp	short loc_401B6E
; ---------------------------------------------------------------------------


loc_401B5D:				; CODE XREF: sub_401B08+3Fj
		lea	ecx, [esp+1Ch+var_1B]
		mov	edx, edi
		sub	edx, 4
		lea	eax, [esi+4]
		call	sub_401720


loc_401B6E:				; CODE XREF: sub_401B08+53j
		mov	ebp, [esp+1Ch+var_1B]
		test	ebp, ebp
		jz	short loc_401BAA
		mov	edx, ebp
		sub	edx, esi
		mov	eax, esi
		call	sub_4019E4
		mov	eax, ebp
		add	eax, [esp+1Ch+var_17]
		mov	edx, [ebx+8]
		add	edx, [ebx+0Ch]
		cmp	eax, edx
		jnb	short loc_401B9B
		lea	edx, [edi+esi]
		sub	edx, eax
		call	sub_401A38


loc_401B9B:				; CODE XREF: sub_401B08+87j
		lea	edx, [esp+1Ch+var_1B]
		mov	eax, ebx
		call	sub_401230
		mov	[esp+1Ch+var_1C], 1


loc_401BAA:				; CODE XREF: sub_401B08+1Aj
					; sub_401B08+6Cj
		mov	al, [esp+1Ch+var_1C]
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401B08	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401BB8	proc near		; CODE XREF: sub_4019E4+16p
					; sub_401DA4+BBp ...
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, eax
		mov	ebx, edi
		mov	[ebx+8], esi
		mov	eax, ebx
		add	eax, esi
		sub	eax, 0Ch
		mov	[eax+8], esi
		cmp	esi, 1000h
		jg	short loc_401C0D
		mov	edx, esi
		test	edx, edx
		jns	short loc_401BDF
		add	edx, 3


loc_401BDF:				; CODE XREF: sub_401BB8+22j
		sar	edx, 2
		mov	eax, ds:hMem
		mov	eax, [eax+edx*4-0Ch]
		test	eax, eax
		jnz	short loc_401BFF
		mov	eax, ds:hMem
		mov	[eax+edx*4-0Ch], ebx
		mov	[ebx+4], ebx
		mov	[ebx], ebx
		jmp	short loc_401C39
; ---------------------------------------------------------------------------


loc_401BFF:				; CODE XREF: sub_401BB8+35j
		mov	edx, [eax]
		mov	[ebx+4], eax
		mov	[ebx], edx
		mov	[eax], ebx
		mov	[edx+4], ebx
		jmp	short loc_401C39
; ---------------------------------------------------------------------------


loc_401C0D:				; CODE XREF: sub_401BB8+1Cj
		cmp	esi, 3C00h
		jl	short loc_401C22
		mov	edx, esi
		mov	eax, edi
		call	sub_401B08
		test	al, al
		jnz	short loc_401C39


loc_401C22:				; CODE XREF: sub_401BB8+5Bj
		mov	eax, ds:dword_407600
		mov	ds:dword_407600, ebx
		mov	edx, [eax]
		mov	[ebx+4], eax
		mov	[ebx], edx
		mov	[eax], ebx
		mov	[edx+4], ebx


loc_401C39:				; CODE XREF: sub_401BB8+45j
					; sub_401BB8+53j ...
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401BB8	endp

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

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



sub_401C40	proc near		; CODE XREF: sub_401C8C+Fp
					; sub_402028+100p ...
		cmp	ds:dword_407604, 0
		jle	short locret_401C89
		cmp	ds:dword_407604, 0Ch
		jge	short loc_401C5E
		mov	ds:dword_4075B0, 7
		jmp	short locret_401C89
; ---------------------------------------------------------------------------


loc_401C5E:				; CODE XREF: sub_401C40+10j
		mov	eax, ds:dword_407604
		or	eax, 2
		mov	edx, ds:dword_407608
		mov	[edx], eax
		mov	eax, ds:dword_407608
		add	eax, 4
		call	sub_401A14
		xor	eax, eax
		mov	ds:dword_407608, eax
		xor	eax, eax
		mov	ds:dword_407604, eax

locret_401C89:				; CODE XREF: sub_401C40+7j
					; sub_401C40+1Cj
		retn
sub_401C40	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401C8C	proc near		; CODE XREF: sub_401D18+18p
					; sub_401D44+1Dp

var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFF0h
		mov	esi, eax
		lea	edi, [esp+1Ch+var_1C]
		movsd
		movsd
		mov	edi, esp
		call	sub_401C40
		lea	ecx, [esp+1Ch+var_14]
		mov	edx, edi
		mov	eax, offset dword_407610
		call	sub_4011C0
		mov	ebx, [esp+1Ch+var_14]
		test	ebx, ebx
		jnz	short loc_401CBC
		xor	eax, eax
		jmp	short loc_401D0E
; ---------------------------------------------------------------------------


loc_401CBC:				; CODE XREF: sub_401C8C+2Aj
		mov	eax, [edi]
		cmp	ebx, eax
		jnb	short loc_401CCC
		call	sub_401A60
		sub	[edi], eax
		add	[edi+4], eax


loc_401CCC:				; CODE XREF: sub_401C8C+34j
		mov	eax, [edi]
		add	eax, [edi+4]
		mov	esi, ebx
		add	esi, [esp+1Ch+var_10]
		cmp	eax, esi
		jnb	short loc_401CE3
		call	sub_401AD0
		add	[edi+4], eax


loc_401CE3:				; CODE XREF: sub_401C8C+4Dj
		mov	eax, [edi]
		add	eax, [edi+4]
		cmp	esi, eax
		jnz	short loc_401CFD
		sub	eax, 4
		mov	edx, 4
		call	sub_4019E4
		sub	dword ptr [edi+4], 4


loc_401CFD:				; CODE XREF: sub_401C8C+5Ej
		mov	eax, [edi]
		mov	ds:dword_407608, eax
		mov	eax, [edi+4]
		mov	ds:dword_407604, eax
		mov	al, 1


loc_401D0E:				; CODE XREF: sub_401C8C+2Ej
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401C8C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401D18	proc near		; CODE XREF: sub_401DA4+57p

var_C		= dword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFF8h
		mov	ebx, eax
		mov	edx, esp
		lea	eax, [ebx+4]
		call	sub_40156C
		cmp	[esp+0Ch+var_C], 0
		jz	short loc_401D39
		mov	eax, esp
		call	sub_401C8C
		test	al, al
		jnz	short loc_401D3D


loc_401D39:				; CODE XREF: sub_401D18+14j
		xor	eax, eax
		jmp	short loc_401D3F
; ---------------------------------------------------------------------------


loc_401D3D:				; CODE XREF: sub_401D18+1Fj
		mov	al, 1


loc_401D3F:				; CODE XREF: sub_401D18+23j
		pop	ecx
		pop	edx
		pop	ebx
		retn
sub_401D18	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401D44	proc near		; CODE XREF: sub_4021CC+1A4p

var_10		= dword	ptr -10h

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	ebx, eax
		mov	ecx, esp
		lea	edx, [esi+4]
		mov	eax, ebx
		call	sub_4015FC
		cmp	[esp+10h+var_10], 0
		jz	short loc_401D6A
		mov	eax, esp
		call	sub_401C8C
		test	al, al
		jnz	short loc_401D6E


loc_401D6A:				; CODE XREF: sub_401D44+19j
		xor	eax, eax
		jmp	short loc_401D70
; ---------------------------------------------------------------------------


loc_401D6E:				; CODE XREF: sub_401D44+24j
		mov	al, 1


loc_401D70:				; CODE XREF: sub_401D44+28j
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_401D44	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401D78	proc near		; CODE XREF: sub_401DA4+4Ap
		xor	edx, edx
		test	eax, eax
		jns	short loc_401D81
		add	eax, 3


loc_401D81:				; CODE XREF: sub_401D78+4j
		sar	eax, 2
		cmp	eax, 400h
		jg	short loc_401DA1


loc_401D8B:				; CODE XREF: sub_401D78+27j
		mov	edx, ds:hMem
		mov	edx, [edx+eax*4-0Ch]
		test	edx, edx
		jnz	short loc_401DA1
		inc	eax
		cmp	eax, 401h
		jnz	short loc_401D8B


loc_401DA1:				; CODE XREF: sub_401D78+11j
					; sub_401D78+1Fj
		mov	eax, edx
		retn
sub_401D78	endp


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



sub_401DA4	proc near		; CODE XREF: sub_401E98+153p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, eax
		mov	edi, offset dword_407600
		mov	ebp, offset dword_407604


loc_401DB4:				; CODE XREF: sub_401DA4+6Aj
		mov	ebx, ds:dword_4075F8
		cmp	esi, [ebx+8]
		jle	loc_401E47
		mov	ebx, [edi]
		mov	eax, [ebx+8]
		cmp	esi, eax
		jle	short loc_401E47
		mov	[ebx+8], esi


loc_401DCF:				; CODE XREF: sub_401DA4+31j
		mov	ebx, [ebx+4]
		cmp	esi, [ebx+8]
		jg	short loc_401DCF
		mov	edx, [edi]
		mov	[edx+8], eax
		cmp	ebx, [edi]
		jz	short loc_401DE4
		mov	[edi], ebx
		jmp	short loc_401E47
; ---------------------------------------------------------------------------


loc_401DE4:				; CODE XREF: sub_401DA4+3Aj
		cmp	esi, 1000h
		jg	short loc_401DF9
		mov	eax, esi
		call	sub_401D78
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_401E47


loc_401DF9:				; CODE XREF: sub_401DA4+46j
		mov	eax, esi
		call	sub_401D18
		test	al, al
		jnz	short loc_401E0B
		xor	eax, eax
		jmp	loc_401E93
; ---------------------------------------------------------------------------


loc_401E0B:				; CODE XREF: sub_401DA4+5Ej
		cmp	esi, [ebp+0]
		jg	short loc_401DB4
		sub	[ebp+0], esi
		cmp	dword ptr [ebp+0], 0Ch
		jge	short loc_401E21
		add	esi, [ebp+0]
		xor	eax, eax
		mov	[ebp+0], eax


loc_401E21:				; CODE XREF: sub_401DA4+73j
		mov	eax, ds:dword_407608
		add	ds:dword_407608, esi
		mov	edx, esi
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		inc	ds:dword_40759C
		sub	esi, 4
		add	ds:dword_4075A0, esi
		jmp	short loc_401E93
; ---------------------------------------------------------------------------


loc_401E47:				; CODE XREF: sub_401DA4+19j
					; sub_401DA4+26j ...
		mov	eax, ebx
		call	sub_401950
		mov	edx, [ebx+8]
		mov	eax, edx
		sub	eax, esi
		cmp	eax, 0Ch
		jl	short loc_401E66
		mov	edx, ebx
		add	edx, esi
		xchg	eax, edx
		call	sub_401BB8
		jmp	short loc_401E78
; ---------------------------------------------------------------------------


loc_401E66:				; CODE XREF: sub_401DA4+B4j
		mov	esi, edx
		cmp	ebx, [edi]
		jnz	short loc_401E71
		mov	eax, [ebx+4]
		mov	[edi], eax


loc_401E71:				; CODE XREF: sub_401DA4+C6j
		mov	eax, ebx
		add	eax, esi
		and	dword ptr [eax], 0FFFFFFFEh


loc_401E78:				; CODE XREF: sub_401DA4+C0j
		mov	eax, ebx
		mov	edx, esi
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		inc	ds:dword_40759C
		sub	esi, 4
		add	ds:dword_4075A0, esi


loc_401E93:				; CODE XREF: sub_401DA4+62j
					; sub_401DA4+A1j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401DA4	endp


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

; Attributes: bp-based frame


sub_401E98	proc near		; CODE XREF: sub_4023A8+5Cp
					; sub_40246C+5p ...

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		cmp	ds:byte_4075AC,	0
		jnz	short loc_401EB5
		call	sub_4017AC
		test	al, al
		jz	short loc_401EBD


loc_401EB5:				; CODE XREF: sub_401E98+12j
		cmp	ebx, 7FFFFFF8h
		jle	short loc_401EC7


loc_401EBD:				; CODE XREF: sub_401E98+1Bj
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	loc_40201B
; ---------------------------------------------------------------------------


loc_401EC7:				; CODE XREF: sub_401E98+23j
		xor	ecx, ecx
		push	ebp
		push	offset loc_402014
		push	dword ptr fs:[ecx]
		mov	fs:[ecx], esp
		cmp	ds:byte_407035,	0
		jz	short loc_401EE8
		push	offset CriticalSection ; lpCriticalSection
		call	EnterCriticalSection


loc_401EE8:				; CODE XREF: sub_401E98+44j
		add	ebx, 7
		and	ebx, 0FFFFFFFCh
		cmp	ebx, 0Ch
		jge	short loc_401EF8
		mov	ebx, 0Ch


loc_401EF8:				; CODE XREF: sub_401E98+59j
		cmp	ebx, 1000h
		jg	loc_401F97
		mov	eax, ebx
		test	eax, eax
		jns	short loc_401F0D
		add	eax, 3


loc_401F0D:				; CODE XREF: sub_401E98+70j
		sar	eax, 2
		mov	edx, ds:hMem
		mov	edx, [edx+eax*4-0Ch]
		test	edx, edx
		jz	short loc_401F97
		mov	esi, edx
		mov	eax, esi
		add	eax, ebx
		and	dword ptr [eax], 0FFFFFFFEh
		mov	eax, [edx+4]
		cmp	edx, eax
		jnz	short loc_401F48
		mov	eax, ebx
		test	eax, eax
		jns	short loc_401F37
		add	eax, 3


loc_401F37:				; CODE XREF: sub_401E98+9Aj
		sar	eax, 2
		mov	ecx, ds:hMem
		xor	edi, edi
		mov	[ecx+eax*4-0Ch], edi
		jmp	short loc_401F6E
; ---------------------------------------------------------------------------


loc_401F48:				; CODE XREF: sub_401E98+94j
		mov	ecx, ebx
		test	ecx, ecx
		jns	short loc_401F51
		add	ecx, 3


loc_401F51:				; CODE XREF: sub_401E98+B4j
		sar	ecx, 2
		mov	edi, ds:hMem
		mov	[edi+ecx*4-0Ch], eax
		mov	ecx, [edx]
		mov	[ebp+var_8], ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx+4], eax
		mov	ecx, [ebp+var_8]
		mov	[eax], ecx


loc_401F6E:				; CODE XREF: sub_401E98+AEj
		mov	eax, esi
		mov	edx, [edx+8]
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		mov	[ebp+var_4], eax
		inc	ds:dword_40759C
		sub	ebx, 4
		add	ds:dword_4075A0, ebx
		call	sub_402C70
		jmp	loc_40201B
; ---------------------------------------------------------------------------


loc_401F97:				; CODE XREF: sub_401E98+66j
					; sub_401E98+84j
		cmp	ebx, ds:dword_407604
		jg	short loc_401FE9
		sub	ds:dword_407604, ebx
		cmp	ds:dword_407604, 0Ch
		jge	short loc_401FBB
		add	ebx, ds:dword_407604
		xor	eax, eax
		mov	ds:dword_407604, eax


loc_401FBB:				; CODE XREF: sub_401E98+114j
		mov	eax, ds:dword_407608
		add	ds:dword_407608, ebx
		mov	edx, ebx
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		mov	[ebp+var_4], eax
		inc	ds:dword_40759C
		sub	ebx, 4
		add	ds:dword_4075A0, ebx
		call	sub_402C70
		jmp	short loc_40201B
; ---------------------------------------------------------------------------


loc_401FE9:				; CODE XREF: sub_401E98+105j
		mov	eax, ebx
		call	sub_401DA4
		mov	[ebp+var_4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40201B


loc_402000:				; CODE XREF: sub_401E98+181j
		cmp	ds:byte_407035,	0
		jz	short loc_402013
		push	offset CriticalSection ; lpCriticalSection
		call	LeaveCriticalSection


loc_402013:				; CODE XREF: sub_401E98+16Fj
		retn
; ---------------------------------------------------------------------------


loc_402014:				; DATA XREF: sub_401E98+32o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_402000
; ---------------------------------------------------------------------------


loc_40201B:				; CODE XREF: sub_401E98+2Aj
					; sub_401E98+FAj ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_401E98	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_402028	proc near		; CODE XREF: sub_401A14+1Cp
					; sub_4023A8+88p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		xor	eax, eax
		mov	ds:dword_4075B0, eax
		cmp	ds:byte_4075AC,	0
		jnz	short loc_402060
		call	sub_4017AC
		test	al, al
		jnz	short loc_402060
		mov	ds:dword_4075B0, 8
		mov	[ebp+var_4], 8
		jmp	loc_4021C1
; ---------------------------------------------------------------------------


loc_402060:				; CODE XREF: sub_402028+17j
					; sub_402028+20j
		xor	ecx, ecx
		push	ebp
		push	offset loc_4021BA
		push	dword ptr fs:[ecx]
		mov	fs:[ecx], esp
		cmp	ds:byte_407035,	0
		jz	short loc_402081
		push	offset CriticalSection ; lpCriticalSection
		call	EnterCriticalSection


loc_402081:				; CODE XREF: sub_402028+4Dj
		mov	esi, ebx
		sub	esi, 4
		mov	ebx, [esi]
		test	bl, 2
		jnz	short loc_40209C
		mov	ds:dword_4075B0, 9
		jmp	loc_402191
; ---------------------------------------------------------------------------


loc_40209C:				; CODE XREF: sub_402028+63j
		dec	ds:dword_40759C
		mov	eax, ebx
		and	eax, 7FFFFFFCh
		sub	eax, 4
		sub	ds:dword_4075A0, eax
		test	bl, 1
		jz	short loc_4020FC
		mov	eax, esi
		sub	eax, 0Ch
		mov	edx, [eax+8]
		cmp	edx, 0Ch
		jl	short loc_4020CC
		test	edx, 80000003h
		jz	short loc_4020DB


loc_4020CC:				; CODE XREF: sub_402028+9Aj
		mov	ds:dword_4075B0, 0Ah
		jmp	loc_402191
; ---------------------------------------------------------------------------


loc_4020DB:				; CODE XREF: sub_402028+A2j
		mov	eax, esi
		sub	eax, edx
		cmp	edx, [eax+8]
		jz	short loc_4020F3
		mov	ds:dword_4075B0, 0Ah
		jmp	loc_402191
; ---------------------------------------------------------------------------


loc_4020F3:				; CODE XREF: sub_402028+BAj
		add	ebx, edx
		mov	esi, eax
		call	sub_401950


loc_4020FC:				; CODE XREF: sub_402028+8Dj
		and	ebx, 7FFFFFFCh
		mov	eax, esi
		add	eax, ebx
		mov	edi, eax
		cmp	edi, ds:dword_407608
		jnz	short loc_40213C
		sub	ds:dword_407608, ebx
		add	ds:dword_407604, ebx
		cmp	ds:dword_407604, 3C00h
		jle	short loc_40212D
		call	sub_401C40


loc_40212D:				; CODE XREF: sub_402028+FEj
		xor	eax, eax
		mov	[ebp+var_4], eax
		call	sub_402C70
		jmp	loc_4021C1
; ---------------------------------------------------------------------------


loc_40213C:				; CODE XREF: sub_402028+E6j
		mov	edx, [eax]
		test	dl, 2
		jz	short loc_40215F
		and	edx, 7FFFFFFCh
		cmp	edx, 4
		jge	short loc_40215A
		mov	ds:dword_4075B0, 0Bh
		jmp	short loc_402191
; ---------------------------------------------------------------------------


loc_40215A:				; CODE XREF: sub_402028+124j
		or	dword ptr [eax], 1
		jmp	short loc_402188
; ---------------------------------------------------------------------------


loc_40215F:				; CODE XREF: sub_402028+119j
		mov	eax, edi
		cmp	dword ptr [eax+4], 0
		jz	short loc_402172
		cmp	dword ptr [eax], 0
		jz	short loc_402172
		cmp	dword ptr [eax+8], 0Ch
		jge	short loc_40217E


loc_402172:				; CODE XREF: sub_402028+13Dj
					; sub_402028+142j
		mov	ds:dword_4075B0, 0Bh
		jmp	short loc_402191
; ---------------------------------------------------------------------------


loc_40217E:				; CODE XREF: sub_402028+148j
		mov	edx, [eax+8]
		add	ebx, edx
		call	sub_401950


loc_402188:				; CODE XREF: sub_402028+135j
		mov	edx, ebx
		mov	eax, esi
		call	sub_401BB8


loc_402191:				; CODE XREF: sub_402028+6Fj
					; sub_402028+AEj ...
		mov	eax, ds:dword_4075B0
		mov	[ebp+var_4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4021C1


loc_4021A6:				; CODE XREF: sub_402028+197j
		cmp	ds:byte_407035,	0
		jz	short loc_4021B9
		push	offset CriticalSection ; lpCriticalSection
		call	LeaveCriticalSection


loc_4021B9:				; CODE XREF: sub_402028+185j
		retn
; ---------------------------------------------------------------------------


loc_4021BA:				; DATA XREF: sub_402028+3Bo
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_4021A6
; ---------------------------------------------------------------------------


loc_4021C1:				; CODE XREF: sub_402028+33j
					; sub_402028+10Fj ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_402028	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4021CC	proc near		; CODE XREF: sub_4023A8+4Cp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		add	esi, 7
		and	esi, 0FFFFFFFCh
		cmp	esi, 0Ch
		jge	short loc_4021E5
		mov	esi, 0Ch


loc_4021E5:				; CODE XREF: sub_4021CC+12j
		mov	ebp, eax
		sub	ebp, 4
		mov	edi, [ebp+0]
		and	edi, 7FFFFFFCh
		mov	eax, ebp
		add	eax, edi
		mov	ebx, eax
		cmp	edi, esi
		jnz	short loc_402204
		mov	al, 1
		jmp	loc_40239F
; ---------------------------------------------------------------------------


loc_402204:				; CODE XREF: sub_4021CC+2Fj
		cmp	edi, esi
		jle	loc_40228F
		mov	edx, edi
		sub	edx, esi
		mov	[esp+18h+var_18], edx
		cmp	ebx, ds:dword_407608
		jnz	short loc_402253
		mov	eax, [esp+18h+var_18]
		sub	ds:dword_407608, eax
		mov	eax, [esp+18h+var_18]
		add	ds:dword_407604, eax
		cmp	ds:dword_407604, 0Ch
		jge	loc_402386
		mov	eax, [esp+18h+var_18]
		add	ds:dword_407608, eax
		mov	eax, [esp+18h+var_18]
		sub	ds:dword_407604, eax
		mov	esi, edi
		jmp	loc_402386
; ---------------------------------------------------------------------------


loc_402253:				; CODE XREF: sub_4021CC+4Dj
		mov	ebx, eax
		test	byte ptr [ebx],	2
		jnz	short loc_402267
		mov	eax, ebx
		mov	edx, [eax+8]
		add	[esp+18h+var_18], edx
		call	sub_401950


loc_402267:				; CODE XREF: sub_4021CC+8Cj
		cmp	[esp+18h+var_18], 0Ch
		jl	short loc_402288
		mov	ebx, ebp
		add	ebx, esi
		mov	eax, [esp+18h+var_18]
		or	eax, 2
		mov	[ebx], eax
		mov	eax, ebx
		add	eax, 4
		call	sub_401A14
		jmp	loc_402386
; ---------------------------------------------------------------------------


loc_402288:				; CODE XREF: sub_4021CC+9Fj
		mov	esi, edi
		jmp	loc_402386
; ---------------------------------------------------------------------------


loc_40228F:				; CODE XREF: sub_4021CC+3Aj
					; sub_4021CC+1B1j
		mov	eax, esi
		sub	eax, edi
		mov	[esp+18h+var_14], eax
		cmp	ebx, ds:dword_407608
		jnz	short loc_402306
		mov	eax, ds:dword_407604
		cmp	eax, [esp+18h+var_14]
		jl	short loc_4022FD
		mov	eax, [esp+18h+var_14]
		sub	ds:dword_407604, eax
		mov	eax, [esp+18h+var_14]
		add	ds:dword_407608, eax
		cmp	ds:dword_407604, 0Ch
		jge	short loc_4022DF
		mov	eax, ds:dword_407604
		add	ds:dword_407608, eax
		add	esi, ds:dword_407604
		xor	eax, eax
		mov	ds:dword_407604, eax


loc_4022DF:				; CODE XREF: sub_4021CC+F9j
		mov	eax, esi
		sub	eax, edi
		add	ds:dword_4075A0, eax
		mov	eax, [ebp+0]
		and	eax, 80000003h
		or	esi, eax
		mov	[ebp+0], esi
		mov	al, 1
		jmp	loc_40239F
; ---------------------------------------------------------------------------


loc_4022FD:				; CODE XREF: sub_4021CC+DCj
		call	sub_401C40
		mov	ebx, ebp
		add	ebx, edi


loc_402306:				; CODE XREF: sub_4021CC+D1j
		test	byte ptr [ebx],	2
		jnz	short loc_402358
		mov	edx, ebx
		mov	eax, edx
		mov	ecx, [eax+8]
		mov	[esp+18h+var_18], ecx
		mov	ecx, [esp+18h+var_18]
		cmp	ecx, [esp+18h+var_14]
		jge	short loc_40232C
		add	edx, [esp+18h+var_18]
		mov	ebx, edx
		mov	eax, [esp+18h+var_18]
		sub	[esp+18h+var_14], eax
		jmp	short loc_402358
; ---------------------------------------------------------------------------


loc_40232C:				; CODE XREF: sub_4021CC+150j
		call	sub_401950
		mov	eax, [esp+18h+var_14]
		sub	[esp+18h+var_18], eax
		cmp	[esp+18h+var_18], 0Ch
		jl	short loc_40234C
		mov	eax, ebp
		add	eax, esi
		mov	edx, [esp+18h+var_18]
		call	sub_401BB8
		jmp	short loc_402386
; ---------------------------------------------------------------------------


loc_40234C:				; CODE XREF: sub_4021CC+170j
		add	esi, [esp+18h+var_18]
		mov	ebx, ebp
		add	ebx, esi
		and	dword ptr [ebx], 0FFFFFFFEh
		jmp	short loc_402386
; ---------------------------------------------------------------------------


loc_402358:				; CODE XREF: sub_4021CC+13Dj
					; sub_4021CC+15Ej
		mov	eax, [ebx]
		test	eax, 80000000h
		jz	short loc_402382
		and	eax, 7FFFFFFCh
		add	eax, ebx
		mov	ebx, eax
		mov	edx, [esp+18h+var_14]
		mov	eax, ebx
		call	sub_401D44
		test	al, al
		jz	short loc_402382
		mov	ebx, ebp
		add	ebx, edi
		jmp	loc_40228F
; ---------------------------------------------------------------------------


loc_402382:				; CODE XREF: sub_4021CC+193j
					; sub_4021CC+1ABj
		xor	eax, eax
		jmp	short loc_40239F
; ---------------------------------------------------------------------------


loc_402386:				; CODE XREF: sub_4021CC+68j
					; sub_4021CC+82j ...
		mov	eax, esi
		sub	eax, edi
		add	ds:dword_4075A0, eax
		mov	eax, [ebp+0]
		and	eax, 80000003h
		or	esi, eax
		mov	[ebp+0], esi
		mov	al, 1


loc_40239F:				; CODE XREF: sub_4021CC+33j
					; sub_4021CC+12Cj ...
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4021CC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4023A8	proc near		; CODE XREF: sub_4024AC+Dp
					; DATA XREF: DATA:off_406034o

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	ebx, eax
		cmp	ds:byte_4075AC,	0
		jnz	short loc_4023CF
		call	sub_4017AC
		test	al, al
		jnz	short loc_4023CF
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	loc_402460
; ---------------------------------------------------------------------------


loc_4023CF:				; CODE XREF: sub_4023A8+12j
					; sub_4023A8+1Bj
		xor	edx, edx
		push	ebp
		push	offset loc_402459
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	ds:byte_407035,	0
		jz	short loc_4023F0
		push	offset CriticalSection ; lpCriticalSection
		call	EnterCriticalSection


loc_4023F0:				; CODE XREF: sub_4023A8+3Cj
		mov	edx, esi
		mov	eax, ebx
		call	sub_4021CC
		test	al, al
		jz	short loc_402402
		mov	[ebp+var_4], ebx
		jmp	short loc_402438
; ---------------------------------------------------------------------------


loc_402402:				; CODE XREF: sub_4023A8+53j
		mov	eax, esi
		call	sub_401E98
		mov	edi, eax
		mov	eax, ebx
		sub	eax, 4
		mov	eax, [eax]
		and	eax, 7FFFFFFCh
		sub	eax, 4
		cmp	esi, eax
		jge	short loc_402420
		mov	eax, esi


loc_402420:				; CODE XREF: sub_4023A8+74j
		test	edi, edi
		jz	short loc_402435
		mov	edx, edi
		mov	ecx, ebx
		xchg	eax, ecx
		call	sub_402570
		mov	eax, ebx
		call	sub_402028


loc_402435:				; CODE XREF: sub_4023A8+7Aj
		mov	[ebp+var_4], edi


loc_402438:				; CODE XREF: sub_4023A8+58j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402460


loc_402445:				; CODE XREF: sub_4023A8+B6j
		cmp	ds:byte_407035,	0
		jz	short loc_402458
		push	offset CriticalSection ; lpCriticalSection
		call	LeaveCriticalSection


loc_402458:				; CODE XREF: sub_4023A8+A4j
		retn
; ---------------------------------------------------------------------------


loc_402459:				; DATA XREF: sub_4023A8+2Ao
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_402445
; ---------------------------------------------------------------------------


loc_402460:				; CODE XREF: sub_4023A8+22j
					; sub_4023A8:loc_402458j
					; DATA XREF: ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4023A8	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40246C	proc near		; CODE XREF: sub_4031DC+Cp
					; sub_4037A4+CAp ...
		push	ebx
		test	eax, eax
		jle	short loc_402486
		call	ds:off_40602C
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_402488
		mov	al, 1
		call	sub_402554
; ---------------------------------------------------------------------------
		jmp	short loc_402488
; ---------------------------------------------------------------------------


loc_402486:				; CODE XREF: sub_40246C+3j
		xor	ebx, ebx


loc_402488:				; CODE XREF: sub_40246C+Fj
					; sub_40246C+18j
		mov	eax, ebx
		pop	ebx
		retn
sub_40246C	endp


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



sub_40248C	proc near		; CODE XREF: sub_403118+1Cp
					; sub_40313C+21p ...
		push	ebx
		test	eax, eax
		jz	short loc_4024A6
		call	ds:off_406030
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4024A8
		mov	al, 2
		call	sub_402554
; ---------------------------------------------------------------------------
		jmp	short loc_4024A8
; ---------------------------------------------------------------------------


loc_4024A6:				; CODE XREF: sub_40248C+3j
		xor	ebx, ebx


loc_4024A8:				; CODE XREF: sub_40248C+Fj
					; sub_40248C+18j
		mov	eax, ebx
		pop	ebx
		retn
sub_40248C	endp


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



sub_4024AC	proc near		; CODE XREF: sub_403350+22p
					; sub_4037A4+BBp
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short loc_4024E4
		test	edx, edx
		jz	short loc_4024CE
		push	eax
		mov	eax, ecx
		call	ds:off_406034
		pop	ecx
		or	eax, eax
		jz	short loc_4024DD
		mov	[ecx], eax
		retn
; ---------------------------------------------------------------------------


loc_4024C7:				; CODE XREF: sub_4024AC+2Ej
		mov	al, 2
		jmp	sub_402554
; ---------------------------------------------------------------------------


loc_4024CE:				; CODE XREF: sub_4024AC+8j
		mov	[eax], edx
		mov	eax, ecx
		call	ds:off_406030
		or	eax, eax
		jnz	short loc_4024C7
		retn
; ---------------------------------------------------------------------------


loc_4024DD:				; CODE XREF: sub_4024AC+16j
					; sub_4024AC+48j
		mov	al, 1
		jmp	sub_402554
; ---------------------------------------------------------------------------


loc_4024E4:				; CODE XREF: sub_4024AC+4j
		test	edx, edx
		jz	short locret_4024F8
		push	eax
		mov	eax, edx
		call	ds:off_40602C
		pop	ecx
		or	eax, eax
		jz	short loc_4024DD
		mov	[ecx], eax

locret_4024F8:				; CODE XREF: sub_4024AC+3Aj
		retn
sub_4024AC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: noreturn


sub_4024FC	proc near		; CODE XREF: sub_402508+42p
					; CODE:00402D1Fp
		mov	ds:dword_406004, edx
		call	sub_403100
sub_4024FC	endp

; ---------------------------------------------------------------------------
		retn

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

; Attributes: noreturn


sub_402508	proc near		; CODE XREF: sub_402554+6j
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		and	bl, 7Fh
		cmp	ds:dword_407008, 0
		jz	short loc_402524
		mov	edx, esi
		mov	eax, ebx
		call	ds:dword_407008


loc_402524:				; CODE XREF: sub_402508+10j
		test	bl, bl
		jnz	short loc_402535
		call	sub_403CD4
		mov	ebx, [eax+4]
		jmp	short loc_402544
; ---------------------------------------------------------------------------


loc_402535:				; CODE XREF: sub_402508+1Ej
		cmp	bl, 18h
		ja	short loc_402544
		xor	eax, eax
		mov	al, bl
		mov	bl, ds:byte_406038[eax]


loc_402544:				; CODE XREF: sub_402508+2Bj
					; sub_402508+30j
		xor	eax, eax
		mov	al, bl
		mov	edx, esi
		call	sub_4024FC
sub_402508	endp

; ---------------------------------------------------------------------------
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: noreturn


sub_402554	proc near		; CODE XREF: sub_40246C+13p
					; sub_40248C+13p ...
		and	eax, 7Fh
		mov	edx, [esp+0]
		jmp	sub_402508
sub_402554	endp

; ---------------------------------------------------------------------------
		retn

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



sub_402560	proc near		; CODE XREF: sub_4026FC+38p
					; sub_4026FC+4Cp
		push	ebx
		mov	ebx, eax
		call	sub_403CD4
		mov	[eax+4], ebx
		pop	ebx
		retn
sub_402560	endp


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



sub_402570	proc near		; CODE XREF: sub_4023A8+81p
					; sub_402784+6p ...
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		mov	eax, ecx
		cmp	edi, esi
		ja	short loc_40258F
		jz	short loc_4025AD
		sar	ecx, 2
		js	short loc_4025AD
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40258F:				; CODE XREF: sub_402570+Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		sar	ecx, 2
		js	short loc_4025AD
		std
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		add	esi, 3
		add	edi, 3
		rep movsb
		cld


loc_4025AD:				; CODE XREF: sub_402570+Cj
					; sub_402570+11j ...
		pop	edi
		pop	esi
		retn
sub_402570	endp


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



sub_4025B0	proc near		; CODE XREF: sub_40269C+41p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		jmp	short loc_4025C2
; ---------------------------------------------------------------------------


loc_4025BA:				; CODE XREF: sub_4025B0+1Aj
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		mov	ebx, eax


loc_4025C2:				; CODE XREF: sub_4025B0+8j
					; sub_4025B0+2Aj
		mov	al, [ebx]
		test	al, al
		jz	short loc_4025CC
		cmp	al, 20h
		jbe	short loc_4025BA


loc_4025CC:				; CODE XREF: sub_4025B0+16j
		cmp	byte ptr [ebx],	22h
		jnz	short loc_4025DC
		cmp	byte ptr [ebx+1], 22h
		jnz	short loc_4025DC
		add	ebx, 2
		jmp	short loc_4025C2
; ---------------------------------------------------------------------------


loc_4025DC:				; CODE XREF: sub_4025B0+1Fj
					; sub_4025B0+25j
		xor	ebp, ebp
		mov	edi, ebx
		jmp	short loc_402625
; ---------------------------------------------------------------------------


loc_4025E2:				; CODE XREF: sub_4025B0+79j
		cmp	al, 22h
		jnz	short loc_402617
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		mov	ebx, eax
		jmp	short loc_4025FE
; ---------------------------------------------------------------------------


loc_4025F0:				; CODE XREF: sub_4025B0+56j
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_4025FE:				; CODE XREF: sub_4025B0+3Ej
		mov	al, [ebx]
		test	al, al
		jz	short loc_402608
		cmp	al, 22h
		jnz	short loc_4025F0


loc_402608:				; CODE XREF: sub_4025B0+52j
		cmp	byte ptr [ebx],	0
		jz	short loc_402625
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		mov	ebx, eax
		jmp	short loc_402625
; ---------------------------------------------------------------------------


loc_402617:				; CODE XREF: sub_4025B0+34j
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_402625:				; CODE XREF: sub_4025B0+30j
					; sub_4025B0+5Bj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_4025E2
		mov	eax, esi
		mov	edx, ebp
		call	sub_403350
		mov	ebx, edi
		mov	edi, [esi]
		xor	esi, esi
		jmp	short loc_40268D
; ---------------------------------------------------------------------------


loc_40263C:				; CODE XREF: sub_4025B0+E1j
		cmp	al, 22h
		jnz	short loc_402678
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		mov	ebx, eax
		jmp	short loc_40265F
; ---------------------------------------------------------------------------


loc_40264A:				; CODE XREF: sub_4025B0+B7j
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		cmp	eax, ebx
		jbe	short loc_40265F


loc_402654:				; CODE XREF: sub_4025B0+ADj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_402654


loc_40265F:				; CODE XREF: sub_4025B0+98j
					; sub_4025B0+A2j
		mov	al, [ebx]
		test	al, al
		jz	short loc_402669
		cmp	al, 22h
		jnz	short loc_40264A


loc_402669:				; CODE XREF: sub_4025B0+B3j
		cmp	byte ptr [ebx],	0
		jz	short loc_40268D
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		mov	ebx, eax
		jmp	short loc_40268D
; ---------------------------------------------------------------------------


loc_402678:				; CODE XREF: sub_4025B0+8Ej
		push	ebx		; lpsz
		call	CharNextA	; CharNextA
		cmp	eax, ebx
		jbe	short loc_40268D


loc_402682:				; CODE XREF: sub_4025B0+DBj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_402682


loc_40268D:				; CODE XREF: sub_4025B0+8Aj
					; sub_4025B0+BCj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_40263C
		mov	eax, ebx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4025B0	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40269C	proc near		; CODE XREF: CODE:00405AF8p

Filename	= byte ptr -114h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFEF8h
		mov	ebx, edx
		mov	esi, eax
		mov	eax, ebx
		call	sub_403118
		test	esi, esi
		jnz	short loc_4026D2
		push	105h		; nSize
		lea	eax, [esp+118h+Filename]
		push	eax		; lpFilename
		push	0		; hModule
		call	GetModuleFileNameA	; GetModuleFileNameA
		mov	ecx, eax
		mov	edx, esp
		mov	eax, ebx
		call	sub_403208
		jmp	short loc_4026F0
; ---------------------------------------------------------------------------


loc_4026D2:				; CODE XREF: sub_40269C+16j
		call	GetCommandLineA	; GetCommandLineA
		mov	edi, eax


loc_4026D9:				; CODE XREF: sub_40269C+52j
		mov	edx, ebx
		mov	eax, edi
		call	sub_4025B0
		mov	edi, eax
		test	esi, esi
		jz	short loc_4026F0
		cmp	dword ptr [ebx], 0
		jz	short loc_4026F0
		dec	esi
		jmp	short loc_4026D9
; ---------------------------------------------------------------------------


loc_4026F0:				; CODE XREF: sub_40269C+34j
					; sub_40269C+4Aj ...
		add	esp, 108h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40269C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4026FC	proc near		; CODE XREF: sub_403B34+1Ep
					; sub_403B34+28p ...
		push	ebx
		push	esi
		mov	ebx, eax
		xor	esi, esi
		mov	ax, [ebx+4]
		cmp	ax, 0D7B1h
		jb	short loc_40273B
		cmp	ax, 0D7B3h
		ja	short loc_40273B
		and	ax, 0D7B2h
		cmp	ax, 0D7B2h
		jnz	short loc_402723
		mov	eax, ebx
		call	dword ptr [ebx+1Ch]
		mov	esi, eax


loc_402723:				; CODE XREF: sub_4026FC+1Ej
		test	esi, esi
		jnz	short loc_40272E
		mov	eax, ebx
		call	dword ptr [ebx+24h]
		mov	esi, eax


loc_40272E:				; CODE XREF: sub_4026FC+29j
		test	esi, esi
		jz	short loc_40274D
		mov	eax, esi
		call	sub_402560
		jmp	short loc_40274D
; ---------------------------------------------------------------------------


loc_40273B:				; CODE XREF: sub_4026FC+Ej
					; sub_4026FC+14j
		cmp	ebx, offset dword_407038
		jz	short loc_40274D
		mov	eax, 67h
		call	sub_402560


loc_40274D:				; CODE XREF: sub_4026FC+34j
					; sub_4026FC+3Dj ...
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_4026FC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402754	proc near		; CODE XREF: sub_404254+41p
					; sub_404254+71p ...
		push	esi
		push	edi
		mov	edi, eax
		xor	eax, eax
		mov	al, [edi]
		mov	esi, edx
		xor	edx, edx
		mov	dl, [esi]
		inc	esi
		add	al, dl
		jb	short loc_402779
		cmp	al, cl
		ja	short loc_402779


loc_40276B:				; CODE XREF: sub_402754+2Dj
		mov	ecx, edx
		mov	dl, [edi]
		mov	[edi], al
		inc	edi
		add	edi, edx
		rep movsb


loc_402776:				; CODE XREF: sub_402754+29j
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_402779:				; CODE XREF: sub_402754+11j
					; sub_402754+15j
		mov	al, cl
		sub	cl, [edi]
		jbe	short loc_402776
		mov	dl, cl
		jmp	short loc_40276B
sub_402754	endp

; ---------------------------------------------------------------------------
		retn

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



sub_402784	proc near		; CODE XREF: sub_404254+1Ep
					; sub_404254+4Ep ...
		xor	ecx, ecx
		mov	cl, [edx]
		inc	ecx
		xchg	eax, edx
		call	sub_402570
		retn
sub_402784	endp


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



sub_402790	proc near		; CODE XREF: sub_4037A4+F1p
					; sub_4037A4+145p ...
		push	edi
		mov	edi, eax
		mov	ch, cl
		mov	eax, ecx
		shl	eax, 10h
		mov	ax, cx
		mov	ecx, edx
		sar	ecx, 2
		js	short loc_4027AD
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb


loc_4027AD:				; CODE XREF: sub_402790+12j
		pop	edi
		retn
sub_402790	endp

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

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



sub_4027B0	proc near		; CODE XREF: sub_403AC0+41p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		push	eax
		test	eax, eax
		jz	short loc_402826
		xor	eax, eax
		xor	ebx, ebx
		mov	edi, 0CCCCCCCh


loc_4027C3:				; CODE XREF: sub_4027B0+19j
		mov	bl, [esi]
		inc	esi
		cmp	bl, 20h
		jz	short loc_4027C3
		mov	ch, 0
		cmp	bl, 2Dh
		jz	short loc_402834
		cmp	bl, 2Bh
		jz	short loc_402836


loc_4027D7:				; CODE XREF: sub_4027B0+89j
		cmp	bl, 24h
		jz	short loc_40283B
		cmp	bl, 78h
		jz	short loc_40283B
		cmp	bl, 58h
		jz	short loc_40283B
		cmp	bl, 30h
		jnz	short loc_4027FE
		mov	bl, [esi]
		inc	esi
		cmp	bl, 78h
		jz	short loc_40283B
		cmp	bl, 58h
		jz	short loc_40283B
		test	bl, bl
		jz	short loc_40281C
		jmp	short loc_402802
; ---------------------------------------------------------------------------


loc_4027FE:				; CODE XREF: sub_4027B0+39j
		test	bl, bl
		jz	short loc_40282F


loc_402802:				; CODE XREF: sub_4027B0+4Cj
					; sub_4027B0+6Aj
		sub	bl, 30h
		cmp	bl, 9
		ja	short loc_40282F
		cmp	eax, edi
		ja	short loc_40282F
		lea	eax, [eax+eax*4]
		add	eax, eax
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_402802


loc_40281C:				; CODE XREF: sub_4027B0+4Aj
		dec	ch
		jz	short loc_402829
		test	eax, eax
		jge	short loc_402878
		jmp	short loc_40282F
; ---------------------------------------------------------------------------


loc_402826:				; CODE XREF: sub_4027B0+8j
					; sub_4027B0+95j
		inc	esi
		jmp	short loc_40282F
; ---------------------------------------------------------------------------


loc_402829:				; CODE XREF: sub_4027B0+6Ej
		neg	eax
		jle	short loc_402878
		js	short loc_402878


loc_40282F:				; CODE XREF: sub_4027B0+50j
					; sub_4027B0+58j ...
		pop	ebx
		sub	esi, ebx
		jmp	short loc_40287B
; ---------------------------------------------------------------------------


loc_402834:				; CODE XREF: sub_4027B0+20j
		inc	ch


loc_402836:				; CODE XREF: sub_4027B0+25j
		mov	bl, [esi]
		inc	esi
		jmp	short loc_4027D7
; ---------------------------------------------------------------------------


loc_40283B:				; CODE XREF: sub_4027B0+2Aj
					; sub_4027B0+2Fj ...
		mov	edi, 0FFFFFFFh
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jz	short loc_402826


loc_402847:				; CODE XREF: sub_4027B0+C0j
		cmp	bl, 61h
		jb	short loc_40284F
		sub	bl, 20h


loc_40284F:				; CODE XREF: sub_4027B0+9Aj
		sub	bl, 30h
		cmp	bl, 9
		jbe	short loc_402862
		sub	bl, 11h
		cmp	bl, 5
		ja	short loc_40282F
		add	bl, 0Ah


loc_402862:				; CODE XREF: sub_4027B0+A5j
		cmp	eax, edi
		ja	short loc_40282F
		shl	eax, 4
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_402847
		dec	ch
		jnz	short loc_402878
		neg	eax


loc_402878:				; CODE XREF: sub_4027B0+72j
					; sub_4027B0+7Bj ...
		pop	ecx
		xor	esi, esi


loc_40287B:				; CODE XREF: sub_4027B0+82j
		mov	[edx], esi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4027B0	endp

; ---------------------------------------------------------------------------
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetKeyboardType. PRESS KEYPAD "+"	TO EXPAND]
		align 4

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



sub_40288C	proc near		; CODE XREF: sub_403B88+39p
		push	ebx
		xor	ebx, ebx
		push	0		; nTypeFlag
		call	GetKeyboardType	; GetKeyboardType
		cmp	eax, 7
		jnz	short loc_4028B7
		push	1		; nTypeFlag
		call	GetKeyboardType	; GetKeyboardType
		and	eax, 0FF00h
		cmp	eax, 0D00h
		jz	short loc_4028B5
		cmp	eax, 400h
		jnz	short loc_4028B7


loc_4028B5:				; CODE XREF: sub_40288C+20j
		mov	bl, 1


loc_4028B7:				; CODE XREF: sub_40288C+Dj
					; sub_40288C+27j
		mov	eax, ebx
		pop	ebx
		retn
sub_40288C	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4028BC	proc near		; CODE XREF: sub_403B88+42p

cbData		= dword	ptr -0Ch
Data		= byte ptr -8
hKey		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		movzx	eax, ds:word_406014
		mov	dword ptr [ebp+Data], eax
		lea	eax, [ebp+hKey]
		push	eax		; phkResult
		push	1		; samDesired
		push	0		; ulOptions
		push	offset SubKey	; "SOFTWARE\\Borland\\Delphi\\RTL"
		push	80000002h	; hKey
		call	RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_402934
		xor	eax, eax
		push	ebp
		push	offset loc_40292D
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+cbData], 4
		lea	eax, [ebp+cbData]
		push	eax		; lpcbData
		lea	eax, [ebp+Data]
		push	eax		; lpData
		push	0		; lpType
		push	0		; lpReserved
		push	offset ValueName ; "FPUMaskValue"
		mov	eax, [ebp+hKey]
		push	eax		; hKey
		call	RegQueryValueExA	; RegQueryValueExA
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402934


loc_402923:				; CODE XREF: sub_4028BC+76j
		mov	eax, [ebp+hKey]
		push	eax		; hKey
		call	RegCloseKey	; RegCloseKey
		retn
; ---------------------------------------------------------------------------


loc_40292D:				; DATA XREF: sub_4028BC+2Eo
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_402923
; ---------------------------------------------------------------------------


loc_402934:				; CODE XREF: sub_4028BC+29j
					; sub_4028BC+70j
					; DATA XREF: ...
		mov	ax, ds:word_406014
		and	ax, 0FFC0h
		mov	dx, word ptr [ebp+Data]
		and	dx, 3Fh
		or	ax, dx
		mov	ds:word_406014,	ax
		mov	esp, ebp
		pop	ebp
		retn
sub_4028BC	endp

; ---------------------------------------------------------------------------
		align 4
; char SubKey[]
SubKey		db 'SOFTWARE\Borland\Delphi\RTL',0 ; DATA XREF: sub_4028BC+18o
; char ValueName[]
ValueName	db 'FPUMaskValue',0     ; DATA XREF: sub_4028BC+4Co
		align 10h

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



sub_402980	proc near		; CODE XREF: sub_402E10-368p
					; CODE:00402D56p ...
		fninit
		wait
		fldcw	ds:word_406014
		retn
sub_402980	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40298C	proc near		; CODE XREF: CODE:00402BA7j
					; sub_402BEC+30p ...
		test	eax, eax
		jz	short locret_402997
		mov	dl, 1
		mov	ecx, [eax]
		call	dword ptr [ecx-4]

locret_402997:				; CODE XREF: sub_40298C+2j
		retn
sub_40298C	endp


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



sub_402998	proc near		; CODE XREF: sub_402BEC+35p
		cmp	ds:byte_406018,	1
		jbe	short locret_4029B2
		push	0
		push	0
		push	0
		push	0EEDFADFh
		call	ds:dword_407010

locret_4029B2:				; CODE XREF: sub_402998+7j
		retn
sub_402998	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4029B4	proc near		; CODE XREF: sub_402E10-33Bp
		cmp	ds:byte_406018,	0
		jz	short locret_4029D4
		push	eax
		push	eax
		push	edx
		push	esp
		push	2
		push	0
		push	0EEDFAE4h
		call	ds:dword_407010
		add	esp, 8
		pop	eax

locret_4029D4:				; CODE XREF: sub_4029B4+7j
		retn
sub_4029B4	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_4029F0


loc_4029D8:				; CODE XREF: sub_4029F0+Bj
		push	esp
		push	1
		push	0
		push	0EEDFAE0h
		call	ds:dword_407010
		add	esp, 4
		pop	eax
		retn
; END OF FUNCTION CHUNK	FOR sub_4029F0
; ---------------------------------------------------------------------------
		align 10h

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



sub_4029F0	proc near		; CODE XREF: sub_402E10-28Bp

; FUNCTION CHUNK AT 004029D8 SIZE 00000015 BYTES

		cmp	ds:byte_406018,	1
		jbe	short locret_402A00
		push	eax
		push	ebx
		jmp	loc_4029D8
; ---------------------------------------------------------------------------

locret_402A00:				; CODE XREF: sub_4029F0+7j
		retn
sub_4029F0	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402A04	proc near		; CODE XREF: sub_402A24+Cp
		test	ecx, ecx
		jz	short locret_402A21
		mov	eax, [ecx+1]
		cmp	byte ptr [ecx],	0E9h
		jz	short loc_402A1C
		cmp	byte ptr [ecx],	0EBh
		jnz	short locret_402A21
		movsx	eax, al
		inc	ecx
		inc	ecx
		jmp	short loc_402A1F
; ---------------------------------------------------------------------------


loc_402A1C:				; CODE XREF: sub_402A04+Aj
		add	ecx, 5


loc_402A1F:				; CODE XREF: sub_402A04+16j
		add	ecx, eax

locret_402A21:				; CODE XREF: sub_402A04+2j
					; sub_402A04+Fj
		retn
sub_402A04	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402A24	proc near		; CODE XREF: sub_4017AC+142Dp
		cmp	ds:byte_406018,	1
		jbe	short locret_402A4A
		push	eax
		push	edx
		push	ecx
		call	sub_402A04
		push	ecx
		push	esp
		push	1
		push	0
		push	0EEDFAE1h
		call	ds:dword_407010
		pop	ecx
		pop	ecx
		pop	edx
		pop	eax

locret_402A4A:				; CODE XREF: sub_402A24+7j
		retn
sub_402A24	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402A4C	proc near		; CODE XREF: sub_402C40+28p
		cmp	ds:byte_406018,	1
		jbe	short locret_402A67
		push	edx
		push	esp
		push	1
		push	0
		push	0EEDFAE2h
		call	ds:dword_407010
		pop	edx

locret_402A67:				; CODE XREF: sub_402A4C+7j
		retn
sub_402A4C	endp


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



sub_402A68	proc near		; CODE XREF: CODE:loc_402D9Dp
		push	eax
		push	edx
		cmp	ds:byte_406018,	1
		jbe	short loc_402A83
		push	esp
		push	2
		push	0
		push	0EEDFAE3h
		call	ds:dword_407010


loc_402A83:				; CODE XREF: sub_402A68+9j
		pop	edx
		pop	eax
		retn
sub_402A68	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_402E10


loc_402A88:				; CODE XREF: sub_402E10:loc_402E56j
					; sub_402E70:loc_402EB6j ...
		mov	eax, [esp-4+ExceptionInfo.ExceptionRecord]
		test	dword ptr [eax+4], 6
		jnz	loc_402BAC
		cmp	dword ptr [eax], 0EEDFADEh
		mov	edx, [eax+18h]
		mov	ecx, [eax+14h]
		jz	short loc_402B15
		cld
		call	sub_402980
		mov	edx, ds:dword_40700C
		test	edx, edx
		jz	loc_402BAC
		call	edx ; dword_40700C
		test	eax, eax
		jz	loc_402BAC
		mov	edx, [esp-4+arg_8]
		mov	ecx, [esp-4+ExceptionInfo.ExceptionRecord]
		cmp	dword ptr [ecx], 0EEFFACEh
		jz	short loc_402B0C
		call	sub_4029B4
		cmp	ds:byte_40601C,	0
		jbe	short loc_402B0C
		cmp	ds:byte_406018,	0
		ja	short loc_402B0C
		lea	ecx, [esp-4+ExceptionInfo]
		push	eax
		push	ecx		; ExceptionInfo
		call	UnhandledExceptionFilter	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	eax
		jz	loc_402BAC
		mov	edx, eax
		mov	eax, [esp-4+ExceptionInfo.ExceptionRecord]
		mov	ecx, [eax+0Ch]
		jmp	short loc_402B3C
; ---------------------------------------------------------------------------


loc_402B0C:				; CODE XREF: sub_402E10-33Dj
					; sub_402E10-32Fj ...
		mov	edx, eax
		mov	eax, [esp-4+ExceptionInfo.ExceptionRecord]
		mov	ecx, [eax+0Ch]


loc_402B15:				; CODE XREF: sub_402E10-36Bj
		cmp	ds:byte_40601C,	1
		jbe	short loc_402B3C
		cmp	ds:byte_406018,	0
		ja	short loc_402B3C
		push	eax
		lea	eax, [esp+ExceptionInfo]
		push	edx
		push	ecx
		push	eax		; ExceptionInfo
		call	UnhandledExceptionFilter	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	ecx
		pop	edx
		pop	eax
		jz	short loc_402BAC


loc_402B3C:				; CODE XREF: sub_402E10-306j
					; sub_402E10-2F4j ...
		or	dword ptr [eax+4], 2
		push	ebx
		xor	ebx, ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, fs:[ebx]
		push	ebx
		push	eax
		push	edx
		push	ecx
		mov	edx, [esp+1Ch+ExceptionInfo.ContextRecord]
		push	0
		push	eax
		push	offset loc_402B60
		push	edx
		call	ds:dword_407014


loc_402B60:				; DATA XREF: sub_402E10-2BCo
		mov	edi, [esp+2Ch+var_4]
		call	sub_403CD4
		push	dword ptr [eax+0]
		mov	[eax+0], esp
		mov	ebp, [edi+8]
		mov	ebx, [edi+4]
		mov	dword ptr [edi+4], offset sub_402B8C
		add	ebx, 5
		call	sub_4029F0
		jmp	ebx
; END OF FUNCTION CHUNK	FOR sub_402E10

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

; Attributes: thunk


sub_402B8C	proc near		; DATA XREF: sub_402E10-295o
		jmp	loc_402BB4
sub_402B8C	endp

; ---------------------------------------------------------------------------
		call	sub_403CD4
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		mov	eax, [ecx+8]
		jmp	sub_40298C
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_402E10


loc_402BAC:				; CODE XREF: sub_402E10-37Dj
					; sub_402E10-35Bj ...
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_402E10
; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_4017AC


loc_402BB4:				; CODE XREF: sub_4017AC:loc_401862j
					; sub_401870:loc_401946j ...
		mov	eax, [esp+4]
		mov	edx, [esp+arg_0]
		test	dword ptr [eax+4], 6
		jz	short loc_402BE4
		mov	ecx, [edx+4]
		mov	dword ptr [edx+4], offset loc_402BE4
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, [edx+8]
		add	ecx, 5
		call	sub_402A24
		call	ecx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_402BE4:				; CODE XREF: sub_4017AC+1417j
					; DATA XREF: sub_4017AC+141Co
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_4017AC
; ---------------------------------------------------------------------------
		align 4

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



sub_402BEC	proc near		; CODE XREF: sub_402E10+50p
					; sub_402E70+50p

arg_2C		= dword	ptr  30h

		mov	eax, [esp+arg_2C]
		mov	dword ptr [eax+4], offset loc_402C37
		call	sub_403CD4
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+0Ch]
		and	dword ptr [eax+4], 0FFFFFFFDh
		cmp	dword ptr [eax], 0EEDFADEh
		jz	short loc_402C26
		mov	eax, [edx+8]
		call	sub_40298C
		call	sub_402998


loc_402C26:				; CODE XREF: sub_402BEC+2Bj
		xor	eax, eax
		add	esp, 14h
		mov	edx, fs:[eax]
		pop	ecx
		mov	edx, [edx]
		mov	[ecx], edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_402C37:				; DATA XREF: sub_402BEC+4o
		mov	eax, 1
		retn
sub_402BEC	endp ; sp-analysis failed

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

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



sub_402C40	proc near		; CODE XREF: sub_402E10+55p
					; sub_402E70+55p ...

arg_2C		= dword	ptr  30h

		call	sub_403CD4
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+8]
		call	sub_40298C
		pop	edx
		mov	esp, [esp-4+arg_2C]
		xor	eax, eax
		pop	ecx
		mov	fs:[eax], ecx
		pop	eax
		pop	ebp
		call	sub_402A4C
		jmp	edx
sub_402C40	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

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



sub_402C70	proc near		; CODE XREF: sub_401E98+F5p
					; sub_401E98+14Ap ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		xor	edx, edx
		mov	ecx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		add	ecx, 5
		mov	fs:[edx], eax
		call	ecx
		retn	0Ch
sub_402C70	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4


loc_402C88:				; CODE XREF: CODE:00402D88j
					; CODE:00402D94j
		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+8]
		mov	eax, [edx]
		cmp	eax, 0C0000092h
		jg	short loc_402CC3
		jz	short loc_402CF5
		cmp	eax, 0C000008Eh
		jg	short loc_402CB5
		jz	short loc_402CF9
		sub	eax, 0C0000005h
		jz	short loc_402D05
		sub	eax, 87h
		jz	short loc_402CED
		dec	eax
		jz	short loc_402D01
		jmp	short loc_402D15
; ---------------------------------------------------------------------------


loc_402CB5:				; CODE XREF: CODE:00402C9Ej
		add	eax, 3FFFFF71h
		sub	eax, 2
		jb	short loc_402CF5
		jz	short loc_402CF1
		jmp	short loc_402D15
; ---------------------------------------------------------------------------


loc_402CC3:				; CODE XREF: CODE:00402C95j
		cmp	eax, 0C0000096h
		jg	short loc_402CDB
		jz	short loc_402D09
		sub	eax, 0C0000093h
		jz	short loc_402D01
		dec	eax
		jz	short loc_402CE9
		dec	eax
		jz	short loc_402CFD
		jmp	short loc_402D15
; ---------------------------------------------------------------------------


loc_402CDB:				; CODE XREF: CODE:00402CC8j
		sub	eax, 0C00000FDh
		jz	short loc_402D11
		sub	eax, 3Dh
		jz	short loc_402D0D
		jmp	short loc_402D15
; ---------------------------------------------------------------------------


loc_402CE9:				; CODE XREF: CODE:00402CD4j
		mov	al, 0C8h
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402CED:				; CODE XREF: CODE:00402CAEj
		mov	al, 0C9h
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402CF1:				; CODE XREF: CODE:00402CBFj
		mov	al, 0CDh
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402CF5:				; CODE XREF: CODE:00402C97j
					; CODE:00402CBDj
		mov	al, 0CFh
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402CF9:				; CODE XREF: CODE:00402CA0j
		mov	al, 0C8h
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402CFD:				; CODE XREF: CODE:00402CD7j
		mov	al, 0D7h
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402D01:				; CODE XREF: CODE:00402CB1j
					; CODE:00402CD1j
		mov	al, 0CEh
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402D05:				; CODE XREF: CODE:00402CA7j
		mov	al, 0D8h
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402D09:				; CODE XREF: CODE:00402CCAj
		mov	al, 0DAh
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402D0D:				; CODE XREF: CODE:00402CE5j
		mov	al, 0D9h
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402D11:				; CODE XREF: CODE:00402CE0j
		mov	al, 0CAh
		jmp	short loc_402D17
; ---------------------------------------------------------------------------


loc_402D15:				; CODE XREF: CODE:00402CB3j
					; CODE:00402CC1j ...
		mov	al, 0FFh


loc_402D17:				; CODE XREF: CODE:00402CEBj
					; CODE:00402CEFj ...
		and	eax, 0FFh
		mov	edx, [edx+0Ch]
		call	sub_4024FC
; ---------------------------------------------------------------------------
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_402D28:				; DATA XREF: sub_402DC8+Do
		mov	eax, [esp+4]
		test	dword ptr [eax+4], 6
		jnz	loc_402DC2
		cmp	ds:byte_406018,	0
		ja	short loc_402D51
		lea	eax, [esp+4]
		push	eax
		call	UnhandledExceptionFilter	; UnhandledExceptionFilter
		cmp	eax, 0
		jz	short loc_402DC2


loc_402D51:				; CODE XREF: CODE:00402D40j
		mov	eax, [esp+4]
		cld
		call	sub_402980
		mov	edx, [esp+8]
		push	0
		push	eax
		push	offset loc_402D6E
		push	edx
		call	ds:dword_407014


loc_402D6E:				; DATA XREF: CODE:00402D62o
		mov	ebx, [esp+4]
		cmp	dword ptr [ebx], 0EEDFADEh
		mov	edx, [ebx+14h]
		mov	eax, [ebx+18h]
		jz	short loc_402D9D
		mov	edx, ds:dword_40700C
		test	edx, edx
		jz	loc_402C88
		mov	eax, ebx
		call	edx ; dword_40700C
		test	eax, eax
		jz	loc_402C88
		mov	edx, [ebx+0Ch]


loc_402D9D:				; CODE XREF: CODE:00402D7Ej
		call	sub_402A68
		mov	ecx, ds:dword_407004
		test	ecx, ecx
		jz	short loc_402DAE
		call	ecx ; dword_407004


loc_402DAE:				; CODE XREF: CODE:00402DAAj
		mov	ecx, [esp+4]
		mov	eax, 0D9h
		mov	edx, [ecx+14h]
		mov	[esp], edx
		jmp	sub_40310C
; ---------------------------------------------------------------------------


loc_402DC2:				; CODE XREF: CODE:00402D33j
					; CODE:00402D4Fj
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_402DC8	proc near		; CODE XREF: sub_402ED0+2Ep
		xor	edx, edx
		lea	eax, [ebp-0Ch]
		mov	ecx, fs:[edx]
		mov	fs:[edx], eax
		mov	[eax], ecx
		mov	dword ptr [eax+4], offset loc_402D28
		mov	[eax+8], ebp
		mov	ds:dword_407624, eax
		retn
sub_402DC8	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402DE8	proc near		; CODE XREF: sub_403028:loc_4030B2p
		xor	edx, edx
		mov	eax, ds:dword_407624
		test	eax, eax
		jz	short locret_402E0F
		mov	ecx, fs:[edx]
		cmp	eax, ecx
		jnz	short loc_402E02
		mov	eax, [eax]
		mov	fs:[edx], eax
		retn
; ---------------------------------------------------------------------------


loc_402E00:				; CODE XREF: sub_402DE8+21j
		mov	ecx, [ecx]


loc_402E02:				; CODE XREF: sub_402DE8+10j
		cmp	ecx, 0FFFFFFFFh
		jz	short locret_402E0F
		cmp	[ecx], eax
		jnz	short loc_402E00
		mov	eax, [eax]
		mov	[ecx], eax

locret_402E0F:				; CODE XREF: sub_402DE8+9j
					; sub_402DE8+1Dj
		retn
sub_402DE8	endp


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

; Attributes: bp-based frame

; int __cdecl sub_402E10(struct	_EXCEPTION_POINTERS ExceptionInfo, int)

sub_402E10	proc near		; CODE XREF: sub_402E10+4Bp
					; sub_402E70+4Bp ...

var_4		= dword	ptr -4
ExceptionInfo	= _EXCEPTION_POINTERS ptr  8
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 00402A88 SIZE 00000104 BYTES
; FUNCTION CHUNK AT 00402BAC SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	edi, offset dword_407620
		mov	eax, [edi+8]
		test	eax, eax
		jz	short loc_402E6A
		mov	ebx, [edi+0Ch]
		mov	esi, [eax+4]
		xor	edx, edx
		push	ebp
		push	offset loc_402E56
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		test	ebx, ebx
		jle	short loc_402E4C


loc_402E3A:				; CODE XREF: sub_402E10+3Aj
		dec	ebx
		mov	[edi+0Ch], ebx
		mov	eax, [esi+ebx*8+4]
		test	eax, eax
		jz	short loc_402E48
		call	eax


loc_402E48:				; CODE XREF: sub_402E10+34j
		test	ebx, ebx
		jg	short loc_402E3A


loc_402E4C:				; CODE XREF: sub_402E10+28j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_402E6A
; ---------------------------------------------------------------------------


loc_402E56:				; DATA XREF: sub_402E10+1Bo
		jmp	loc_402A88
; ---------------------------------------------------------------------------
		call	sub_402E10
		call	sub_402BEC
		call	sub_402C40


loc_402E6A:				; CODE XREF: sub_402E10+10j
					; sub_402E10+44j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_402E10	endp ; sp-analysis failed

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

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

; Attributes: bp-based frame


sub_402E70	proc near		; CODE XREF: sub_402ED0+3Ap
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_407628
		test	eax, eax
		jz	short loc_402ECA
		mov	esi, [eax]
		xor	ebx, ebx
		mov	edi, [eax+4]
		xor	edx, edx
		push	ebp
		push	offset loc_402EB6
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	esi, ebx
		jle	short loc_402EAC


loc_402E98:				; CODE XREF: sub_402E70+3Aj
		mov	eax, [edi+ebx*8]
		inc	ebx
		mov	ds:dword_40762C, ebx
		test	eax, eax
		jz	short loc_402EA8
		call	eax


loc_402EA8:				; CODE XREF: sub_402E70+34j
		cmp	esi, ebx
		jg	short loc_402E98


loc_402EAC:				; CODE XREF: sub_402E70+26j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_402ECA
; ---------------------------------------------------------------------------


loc_402EB6:				; DATA XREF: sub_402E70+19o
		jmp	loc_402A88
; ---------------------------------------------------------------------------
		call	sub_402E10
		call	sub_402BEC
		call	sub_402C40


loc_402ECA:				; CODE XREF: sub_402E70+Dj
					; sub_402E70+44j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_402E70	endp

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

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



sub_402ED0	proc near		; CODE XREF: sub_403D20+3Ap
		mov	ds:dword_407010, offset	RaiseException
		mov	ds:dword_407014, offset	RtlUnwind
		mov	ds:dword_407628, eax
		xor	eax, eax
		mov	ds:dword_40762C, eax
		mov	ds:dword_407630, edx
		mov	eax, [edx+4]
		mov	ds:dword_40701C, eax
		call	sub_402DC8
		mov	ds:byte_407024,	0
		call	sub_402E70
		retn
sub_402ED0	endp


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



sub_402F10	proc near		; CODE XREF: sub_403028+38p
		push	ebx
		push	esi
		push	edi
		mov	esi, offset Text ; "Runtime error     at 00000000"
		mov	cl, 10h
		mov	ebx, ds:dword_406000


loc_402F20:				; CODE XREF: sub_402F10+33j
		mov	eax, ebx
		mov	edi, 0Ah
		cdq
		idiv	edi
		add	dl, 30h
		xor	eax, eax
		mov	al, cl
		mov	[esi+eax], dl
		mov	eax, ebx
		mov	ebx, 0Ah
		cdq
		idiv	ebx
		mov	ebx, eax
		dec	ecx
		test	ebx, ebx
		jnz	short loc_402F20
		mov	cl, 1Ch
		mov	eax, ds:dword_406004


loc_402F4C:				; CODE XREF: sub_402F10+54j
		mov	edx, eax
		and	edx, 0Fh
		mov	dl, ds:byte_40607C[edx]
		xor	ebx, ebx
		mov	bl, cl
		mov	[esi+ebx], dl
		shr	eax, 4
		dec	ecx
		test	eax, eax
		jnz	short loc_402F4C
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402F10	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402F6C	proc near		; CODE XREF: sub_403028+9Ep
		xor	eax, eax
		xchg	eax, ds:dword_406000
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	edi, offset dword_407620
		mov	ebx, [edi+18h]
		mov	ebp, [edi+14h]
		push	dword ptr [edi+1Ch]
		push	dword ptr [edi+20h]
		mov	esi, [edi]
		mov	ecx, 0Bh
		rep movsd
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_402F6C	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_402F9C	proc near		; CODE XREF: sub_403028+3Dp

NumberOfBytesWritten= dword ptr	-4

		push	ecx
		cmp	ds:byte_407034,	0
		jz	short loc_402FFD
		cmp	ds:word_407208,	0D7B2h
		jnz	short loc_402FC5
		cmp	ds:dword_407210, 0
		jbe	short loc_402FC5
		mov	eax, offset dword_407204
		call	ds:dword_407220


loc_402FC5:				; CODE XREF: sub_402F9C+13j
					; sub_402F9C+1Cj
		push	0		; lpOverlapped
		lea	eax, [esp+8+NumberOfBytesWritten]
		push	eax		; lpNumberOfBytesWritten
		push	1Eh		; nNumberOfBytesToWrite
		push	offset Text	; "Runtime error     at	00000000"
		push	0FFFFFFF5h	; nStdHandle
		call	GetStdHandle	; GetStdHandle
		push	eax		; hFile
		call	WriteFile	; WriteFile
		push	0		; lpOverlapped
		lea	eax, [esp+8+NumberOfBytesWritten]
		push	eax		; lpNumberOfBytesWritten
		push	2		; nNumberOfBytesToWrite
		push	offset dword_403024 ; lpBuffer
		push	0FFFFFFF5h	; nStdHandle
		call	GetStdHandle	; GetStdHandle
		push	eax		; hFile
		call	WriteFile	; WriteFile
		pop	edx
		retn
; ---------------------------------------------------------------------------


loc_402FFD:				; CODE XREF: sub_402F9C+8j
		cmp	ds:byte_406020,	0
		jnz	short loc_403019
		push	0		; uType
		push	offset Caption	; "Error"
		push	offset Text	; "Runtime error     at	00000000"
		push	0		; hWnd
		call	MessageBoxA	; MessageBoxA


loc_403019:				; CODE XREF: sub_402F9C+68j
		pop	edx
		retn
sub_402F9C	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_403024	dd 0A0Dh	
; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_403028	proc near		; CODE XREF: sub_403100+5p
					; CODE:00405B37p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, offset dword_407620
		mov	esi, offset dword_406000
		mov	edi, offset dword_407030
		cmp	byte ptr [ebx+28h], 0
		jnz	short loc_403057
		cmp	dword ptr [edi], 0
		jz	short loc_403057


loc_403046:				; CODE XREF: sub_403028+2Dj
		mov	edx, [edi]
		mov	eax, edx
		xor	edx, edx
		mov	[edi], edx
		mov	ebp, eax
		call	ebp
		cmp	dword ptr [edi], 0
		jnz	short loc_403046


loc_403057:				; CODE XREF: sub_403028+17j
					; sub_403028+1Cj
		cmp	ds:dword_406004, 0
		jz	short loc_403071
		call	sub_402F10
		call	sub_402F9C
		xor	eax, eax
		mov	ds:dword_406004, eax


loc_403071:				; CODE XREF: sub_403028+36j
					; sub_403028+CEj
		cmp	byte ptr [ebx+28h], 2
		jnz	short loc_403081
		cmp	dword ptr [esi], 0
		jnz	short loc_403081
		xor	eax, eax
		mov	[ebx+0Ch], eax


loc_403081:				; CODE XREF: sub_403028+4Dj
					; sub_403028+52j
		call	sub_402E10
		cmp	byte ptr [ebx+28h], 1
		jbe	short loc_403091
		cmp	dword ptr [esi], 0
		jz	short loc_4030B2


loc_403091:				; CODE XREF: sub_403028+62j
		mov	eax, [ebx+10h]
		test	eax, eax
		jz	short loc_4030B2
		call	sub_403A0C
		mov	edx, [ebx+10h]
		mov	eax, [edx+10h]
		cmp	eax, [edx+4]
		jz	short loc_4030B2
		test	eax, eax
		jz	short loc_4030B2
		push	eax		; hLibModule
		call	FreeLibrary	; FreeLibrary


loc_4030B2:				; CODE XREF: sub_403028+67j
					; sub_403028+6Ej ...
		call	sub_402DE8
		cmp	byte ptr [ebx+28h], 1
		jnz	short loc_4030C0
		call	dword ptr [ebx+24h]


loc_4030C0:				; CODE XREF: sub_403028+93j
		cmp	byte ptr [ebx+28h], 0
		jz	short loc_4030CB
		call	sub_402F6C


loc_4030CB:				; CODE XREF: sub_403028+9Cj
		cmp	dword ptr [ebx], 0
		jnz	short loc_4030E7
		cmp	ds:dword_407018, 0
		jz	short loc_4030DF
		call	ds:dword_407018


loc_4030DF:				; CODE XREF: sub_403028+AFj
		mov	eax, [esi]
		push	eax		; uExitCode
		call	ExitProcess	; ExitProcess
; ---------------------------------------------------------------------------


loc_4030E7:				; CODE XREF: sub_403028+A6j
		mov	eax, [ebx]
		push	esi
		mov	esi, eax
		mov	edi, ebx
		mov	ecx, 0Bh
		rep movsd
		pop	esi
		jmp	loc_403071
sub_403028	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn

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

; Attributes: noreturn


sub_403100	proc near		; CODE XREF: sub_4024FC+6p
					; sub_40310C+6j
		mov	ds:dword_406000, eax
		call	sub_403028
sub_403100	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: noreturn


sub_40310C	proc near		; CODE XREF: CODE:00402DBDj
					; sub_403C90+1Ap ...
		pop	ds:dword_406004
		jmp	sub_403100
sub_40310C	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

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



sub_403118	proc near		; CODE XREF: sub_40269C+Fp
					; sub_403208+23p ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_40313A
		mov	dword ptr [eax], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_40313A
		lock dec dword ptr [edx-8]
		jnz	short locret_40313A
		push	eax
		lea	eax, [edx-8]
		call	sub_40248C
		pop	eax

locret_40313A:				; CODE XREF: sub_403118+4j
					; sub_403118+10j ...
		retn
sub_403118	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40313C	proc near		; CODE XREF: sub_403468+56p
					; sub_403F04+266p ...
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_403142:				; CODE XREF: sub_40313C+2Aj
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_403162
		mov	dword ptr [ebx], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short loc_403162
		lock dec dword ptr [edx-8]
		jnz	short loc_403162
		lea	eax, [edx-8]
		call	sub_40248C


loc_403162:				; CODE XREF: sub_40313C+Aj
					; sub_40313C+16j ...
		add	ebx, 4
		dec	esi
		jnz	short loc_403142
		pop	esi
		pop	ebx
		retn
sub_40313C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40316C	proc near		; CODE XREF: sub_4032A4+8j
					; sub_40356C+70p ...
		test	edx, edx
		jz	short loc_403194
		mov	ecx, [edx-8]
		inc	ecx
		jg	short loc_403190
		push	eax
		push	edx
		mov	eax, [edx-4]
		call	sub_4031DC
		mov	edx, eax
		pop	eax
		push	edx
		mov	ecx, [eax-4]
		call	sub_402570
		pop	edx
		pop	eax
		jmp	short loc_403194
; ---------------------------------------------------------------------------


loc_403190:				; CODE XREF: sub_40316C+8j
		lock inc dword ptr [edx-8]


loc_403194:				; CODE XREF: sub_40316C+2j
					; sub_40316C+22j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_4031AE
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_4031AE
		lock dec dword ptr [edx-8]
		jnz	short locret_4031AE
		lea	eax, [edx-8]
		call	sub_40248C

locret_4031AE:				; CODE XREF: sub_40316C+2Cj
					; sub_40316C+32j ...
		retn
sub_40316C	endp

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

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



sub_4031B0	proc near		; CODE XREF: sub_405018+38p
		test	edx, edx
		jz	short loc_4031BE
		mov	ecx, [edx-8]
		inc	ecx
		jle	short loc_4031BE
		lock inc dword ptr [edx-8]


loc_4031BE:				; CODE XREF: sub_4031B0+2j
					; sub_4031B0+8j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_4031D8
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_4031D8
		lock dec dword ptr [edx-8]
		jnz	short locret_4031D8
		lea	eax, [edx-8]
		call	sub_40248C

locret_4031D8:				; CODE XREF: sub_4031B0+12j
					; sub_4031B0+18j ...
		retn
sub_4031B0	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4031DC	proc near		; CODE XREF: sub_40316C+Fp
					; sub_403208+Bp ...
		test	eax, eax
		jle	short loc_403204
		push	eax
		add	eax, 0Ah
		and	eax, 0FFFFFFFEh
		push	eax
		call	sub_40246C
		pop	edx
		mov	word ptr [edx+eax-2], 0
		add	eax, 8
		pop	edx
		mov	[eax-4], edx
		mov	dword ptr [eax-8], 1
		retn
; ---------------------------------------------------------------------------


loc_403204:				; CODE XREF: sub_4031DC+2j
		xor	eax, eax
		retn
sub_4031DC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403208	proc near		; CODE XREF: sub_40269C+2Fp
					; sub_403238+8p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	eax, edi
		call	sub_4031DC
		mov	ecx, edi
		mov	edi, eax
		test	esi, esi
		jz	short loc_403229
		mov	edx, eax
		mov	eax, esi
		call	sub_402570


loc_403229:				; CODE XREF: sub_403208+16j
		mov	eax, ebx
		call	sub_403118
		mov	[ebx], edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403208	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403238	proc near		; CODE XREF: sub_404180+42p
					; sub_404F94+45p
		push	edx
		mov	edx, esp
		mov	ecx, 1
		call	sub_403208
		pop	edx
		retn
sub_403238	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403248	proc near		; CODE XREF: sub_405018+49p
					; CODE:00405AA1p
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_40326F
		push	edx


loc_40324F:				; CODE XREF: sub_403248+1Dj
		cmp	cl, [edx]
		jz	short loc_40326A
		cmp	cl, [edx+1]
		jz	short loc_403269
		cmp	cl, [edx+2]
		jz	short loc_403268
		cmp	cl, [edx+3]
		jz	short loc_403267
		add	edx, 4
		jmp	short loc_40324F
; ---------------------------------------------------------------------------


loc_403267:				; CODE XREF: sub_403248+18j
		inc	edx


loc_403268:				; CODE XREF: sub_403248+13j
		inc	edx


loc_403269:				; CODE XREF: sub_403248+Ej
		inc	edx


loc_40326A:				; CODE XREF: sub_403248+9j
		mov	ecx, edx
		pop	edx
		sub	ecx, edx


loc_40326F:				; CODE XREF: sub_403248+4j
		jmp	sub_403208
sub_403248	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_403278	proc near		; CODE XREF: sub_404254+22Cp
					; sub_40448C+19Cp ...
		xor	ecx, ecx
		mov	cl, [edx]
		inc	edx
		jmp	sub_403208
sub_403278	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_403284	proc near		; CODE XREF: sub_403AC0+36p
		push	edi
		push	eax
		push	ecx
		mov	edi, edx
		xor	eax, eax
		repne scasb
		jnz	short loc_403291
		not	ecx


loc_403291:				; CODE XREF: sub_403284+9j
		pop	eax
		add	ecx, eax
		pop	eax
		pop	edi
		jmp	sub_403208
sub_403284	endp

; ---------------------------------------------------------------------------
		retn

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



sub_40329C	proc near		; CODE XREF: sub_403F04+3Ep
					; sub_403F04+4Ep ...
		test	eax, eax
		jz	short locret_4032A3
		mov	eax, [eax-4]

locret_4032A3:				; CODE XREF: sub_40329C+2j
		retn
sub_40329C	endp


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



sub_4032A4	proc near		; CODE XREF: sub_404180+50p
					; sub_404F94+4Fp
		test	edx, edx
		jz	short locret_4032E7
		mov	ecx, [eax]
		test	ecx, ecx
		jz	sub_40316C
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, [ecx-4]
		mov	edx, [esi-4]
		add	edx, edi
		cmp	esi, ecx
		jz	short loc_4032DC
		call	sub_403350
		mov	eax, esi
		mov	ecx, [esi-4]


loc_4032CF:				; CODE XREF: sub_4032A4+41j
		mov	edx, [ebx]
		add	edx, edi
		call	sub_402570
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4032DC:				; CODE XREF: sub_4032A4+1Fj
		call	sub_403350
		mov	eax, [ebx]
		mov	ecx, edi
		jmp	short loc_4032CF
; ---------------------------------------------------------------------------

locret_4032E7:				; CODE XREF: sub_4032A4+2j
		retn
sub_4032A4	endp


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



sub_4032E8	proc near		; CODE XREF: sub_403F04+20p
					; sub_403F04+28p ...
		test	eax, eax
		jz	short locret_4032F6
		mov	edx, [eax-8]
		inc	edx
		jle	short locret_4032F6
		lock inc dword ptr [eax-8]

locret_4032F6:				; CODE XREF: sub_4032E8+2j
					; sub_4032E8+8j
		retn
sub_4032E8	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4032F8	proc near		; CODE XREF: sub_4046BC+2Ap
					; sub_4046BC+42p ...
		test	eax, eax
		jz	short loc_4032FE
		retn
; ---------------------------------------------------------------------------
byte_4032FD	db 0			; DATA XREF: sub_4032F8:loc_4032FEo
; ---------------------------------------------------------------------------


loc_4032FE:				; CODE XREF: sub_4032F8+2j
		mov	eax, offset byte_4032FD
		retn
sub_4032F8	endp


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



sub_403304	proc near		; CODE XREF: sub_403348j
		mov	edx, [eax]
		test	edx, edx
		jz	short loc_403342
		mov	ecx, [edx-8]
		dec	ecx
		jz	short loc_403342
		push	ebx
		mov	ebx, eax
		mov	eax, [edx-4]
		call	sub_4031DC
		mov	edx, eax
		mov	eax, [ebx]
		mov	[ebx], edx
		push	eax
		mov	ecx, [eax-4]
		call	sub_402570
		pop	eax
		mov	ecx, [eax-8]
		dec	ecx
		jl	short loc_40333F
		lock dec dword ptr [eax-8]
		jnz	short loc_40333F
		lea	eax, [eax-8]
		call	sub_40248C


loc_40333F:				; CODE XREF: sub_403304+2Bj
					; sub_403304+31j
		mov	edx, [ebx]
		pop	ebx


loc_403342:				; CODE XREF: sub_403304+4j
					; sub_403304+Aj
		mov	eax, edx
		retn
sub_403304	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_403348	proc near		; CODE XREF: sub_403F04+88p
					; sub_403F04+C9p ...
		jmp	sub_403304
sub_403348	endp

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

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



sub_403350	proc near		; CODE XREF: sub_4025B0+7Fp
					; sub_4032A4+21p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		xor	edi, edi
		test	edx, edx
		jle	short loc_4033A5
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_403386
		cmp	dword ptr [eax-8], 1
		jnz	short loc_403386
		sub	eax, 8
		add	edx, 9
		push	eax
		mov	eax, esp
		call	sub_4024AC
		pop	eax
		add	eax, 8
		mov	[ebx], eax
		mov	[eax-4], esi
		mov	byte ptr [esi+eax], 0
		jmp	short loc_4033AE
; ---------------------------------------------------------------------------


loc_403386:				; CODE XREF: sub_403350+11j
					; sub_403350+17j
		mov	eax, edx
		call	sub_4031DC
		mov	edi, eax
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_4033A5
		mov	edx, edi
		mov	ecx, [eax-4]
		cmp	ecx, esi
		jl	short loc_4033A0
		mov	ecx, esi


loc_4033A0:				; CODE XREF: sub_403350+4Cj
		call	sub_402570


loc_4033A5:				; CODE XREF: sub_403350+Bj
					; sub_403350+43j
		mov	eax, ebx
		call	sub_403118
		mov	[ebx], edi


loc_4033AE:				; CODE XREF: sub_403350+34j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403350	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_4033F8


loc_4033B4:				; CODE XREF: sub_4033F8+1Dj
		mov	al, 1
		jmp	sub_402554
; END OF FUNCTION CHUNK	FOR sub_4033F8
; ---------------------------------------------------------------------------
		retn

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



sub_4033BC	proc near		; CODE XREF: sub_4033F8+2j
					; sub_4033F8+Dj ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_4033D0
		mov	dword ptr [eax], 0
		push	eax
		push	edx		; bstrString
		call	SysFreeString
		pop	eax

locret_4033D0:				; CODE XREF: sub_4033BC+4j
		retn
sub_4033BC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4033D4	proc near		; CODE XREF: sub_403468+70p
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_4033DA:				; CODE XREF: sub_4033D4+1Cj
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_4033EC
		mov	dword ptr [ebx], 0
		push	eax		; bstrString
		call	SysFreeString


loc_4033EC:				; CODE XREF: sub_4033D4+Aj
		add	ebx, 4
		dec	esi
		jnz	short loc_4033DA
		pop	esi
		pop	ebx
		retn
sub_4033D4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4033F8	proc near		; CODE XREF: sub_40356C+81p
					; sub_403688+61p

; FUNCTION CHUNK AT 004033B4 SIZE 00000007 BYTES

		test	edx, edx
		jz	sub_4033BC
		mov	ecx, [edx-4]
		shr	ecx, 1
		jz	sub_4033BC
		push	ecx		; len
		push	edx		; psz
		push	eax		; pbstr
		call	SysReAllocStringLen
		test	eax, eax
		jz	loc_4033B4
		retn
sub_4033F8	endp


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



sub_40341C	proc near		; CODE XREF: sub_403468+AFp
		xor	ecx, ecx
		push	ebx
		mov	cl, [edx+1]
		push	esi
		push	edi
		mov	ebx, eax
		lea	esi, [ecx+edx+0Ah]
		mov	edi, [ecx+edx+6]


loc_40342E:				; CODE XREF: sub_40341C+29j
		mov	edx, [esi]
		mov	eax, [esi+4]
		add	eax, ebx
		mov	edx, [edx]
		mov	ecx, 1
		call	sub_403468
		add	esi, 8
		dec	edi
		jg	short loc_40342E
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40341C	endp

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

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



sub_403450	proc near		; CODE XREF: sub_403468+7Cp
		cmp	ds:dword_40600C, 0
		jz	short loc_403460
		call	ds:dword_40600C
		retn
; ---------------------------------------------------------------------------


loc_403460:				; CODE XREF: sub_403450+7j
		mov	al, 10h
		call	sub_402554
sub_403450	endp

; ---------------------------------------------------------------------------
		retn

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



sub_403468	proc near		; CODE XREF: sub_40341C+20p
					; sub_403468+99p ...
		cmp	ecx, 0
		jz	locret_403551
		push	eax
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		xor	edx, edx
		mov	al, [esi]
		mov	dl, [esi+1]
		cmp	al, 0Ah
		jz	short loc_4034AB
		cmp	al, 0Bh
		jz	short loc_4034C8
		cmp	al, 0Ch
		jz	short loc_4034DF
		cmp	al, 0Dh
		jz	short loc_4034EE
		cmp	al, 0Eh
		jz	short loc_40350C
		cmp	al, 0Fh
		jz	loc_403522
		cmp	al, 11h
		jz	loc_403531
		jmp	loc_403542
; ---------------------------------------------------------------------------


loc_4034AB:				; CODE XREF: sub_403468+1Cj
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_4034BC
		call	sub_403118
		jmp	loc_40354D
; ---------------------------------------------------------------------------


loc_4034BC:				; CODE XREF: sub_403468+48j
		mov	edx, ecx
		call	sub_40313C
		jmp	loc_40354D
; ---------------------------------------------------------------------------


loc_4034C8:				; CODE XREF: sub_403468+20j
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_4034D6
		call	sub_4033BC
		jmp	short loc_40354D
; ---------------------------------------------------------------------------


loc_4034D6:				; CODE XREF: sub_403468+65j
		mov	edx, ecx
		call	sub_4033D4
		jmp	short loc_40354D
; ---------------------------------------------------------------------------


loc_4034DF:				; CODE XREF: sub_403468+24j
					; sub_403468+82j
		mov	eax, ebx
		add	ebx, 10h
		call	sub_403450
		dec	edi
		jg	short loc_4034DF
		jmp	short loc_40354D
; ---------------------------------------------------------------------------


loc_4034EE:				; CODE XREF: sub_403468+28j
		push	ebp
		mov	ebp, edx


loc_4034F1:				; CODE XREF: sub_403468+9Fj
		mov	edx, [esi+ebp+0Ah]
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	ecx, [esi+ebp+6]
		mov	edx, [edx]
		call	sub_403468
		dec	edi
		jg	short loc_4034F1
		pop	ebp
		jmp	short loc_40354D
; ---------------------------------------------------------------------------


loc_40350C:				; CODE XREF: sub_403468+2Cj
		push	ebp
		mov	ebp, edx


loc_40350F:				; CODE XREF: sub_403468+B5j
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	edx, esi
		call	sub_40341C
		dec	edi
		jg	short loc_40350F
		pop	ebp
		jmp	short loc_40354D
; ---------------------------------------------------------------------------


loc_403522:				; CODE XREF: sub_403468+30j
					; sub_403468+C5j
		mov	eax, ebx
		add	ebx, 4
		call	sub_403A7C
		dec	edi
		jg	short loc_403522
		jmp	short loc_40354D
; ---------------------------------------------------------------------------


loc_403531:				; CODE XREF: sub_403468+38j
					; sub_403468+D6j
		mov	eax, ebx
		mov	edx, esi
		add	ebx, 4
		call	sub_40393C
		dec	edi
		jg	short loc_403531
		jmp	short loc_40354D
; ---------------------------------------------------------------------------


loc_403542:				; CODE XREF: sub_403468+3Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		mov	al, 2
		jmp	sub_402554
; ---------------------------------------------------------------------------


loc_40354D:				; CODE XREF: sub_403468+4Fj
					; sub_403468+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		pop	eax

locret_403551:				; CODE XREF: sub_403468+3j
		retn
sub_403468	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403554	proc near		; CODE XREF: sub_40356C+92p
					; sub_403688+75p
		cmp	ds:dword_406010, 0
		jz	short loc_403564
		call	ds:dword_406010
		retn
; ---------------------------------------------------------------------------


loc_403564:				; CODE XREF: sub_403554+7j
		mov	al, 10h
		call	sub_402554
sub_403554	endp

; ---------------------------------------------------------------------------
		retn

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



sub_40356C	proc near		; CODE XREF: sub_40356C+CFp
					; sub_403688+ACp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, eax
		mov	esi, edx
		xor	eax, eax
		mov	al, [ecx+1]
		lea	edi, [eax+ecx+0Ah]
		mov	ebp, [edi-4]
		xor	eax, eax
		mov	ecx, [edi-8]
		push	ecx


loc_403586:				; CODE XREF: sub_40356C+100j
		mov	ecx, [edi+4]
		sub	ecx, eax
		jle	short loc_403598
		mov	edx, eax
		add	eax, esi
		add	edx, ebx
		call	sub_402570


loc_403598:				; CODE XREF: sub_40356C+1Fj
		mov	eax, [edi+4]
		mov	edx, [edi]
		mov	edx, [edx]
		mov	cl, [edx]
		cmp	cl, 0Ah
		jz	short loc_4035D7
		cmp	cl, 0Bh
		jz	short loc_4035E8
		cmp	cl, 0Ch
		jz	short loc_4035F9
		cmp	cl, 0Dh
		jz	short loc_40360A
		cmp	cl, 0Eh
		jz	short loc_40362A
		cmp	cl, 0Fh
		jz	loc_403643
		cmp	cl, 11h
		jz	loc_403654
		mov	al, 2
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_402554
; ---------------------------------------------------------------------------


loc_4035D7:				; CODE XREF: sub_40356C+38j
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_40316C
		mov	eax, 4
		jmp	short loc_403665
; ---------------------------------------------------------------------------


loc_4035E8:				; CODE XREF: sub_40356C+3Dj
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_4033F8
		mov	eax, 4
		jmp	short loc_403665
; ---------------------------------------------------------------------------


loc_4035F9:				; CODE XREF: sub_40356C+42j
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_403554
		mov	eax, 10h
		jmp	short loc_403665
; ---------------------------------------------------------------------------


loc_40360A:				; CODE XREF: sub_40356C+47j
		xor	ecx, ecx
		mov	cl, [edx+1]
		push	dword ptr [ecx+edx+2]
		push	dword ptr [ecx+edx+6]
		mov	ecx, [ecx+edx+0Ah]
		mov	ecx, [ecx]
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_403688
		pop	eax
		jmp	short loc_403665
; ---------------------------------------------------------------------------


loc_40362A:				; CODE XREF: sub_40356C+4Cj
		xor	ecx, ecx
		mov	cl, [edx+1]
		mov	ecx, [ecx+edx+2]
		push	ecx
		mov	ecx, edx
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_40356C
		pop	eax
		jmp	short loc_403665
; ---------------------------------------------------------------------------


loc_403643:				; CODE XREF: sub_40356C+51j
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_403A94
		mov	eax, 4
		jmp	short loc_403665
; ---------------------------------------------------------------------------


loc_403654:				; CODE XREF: sub_40356C+5Aj
		mov	ecx, edx
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_403978
		mov	eax, 4


loc_403665:				; CODE XREF: sub_40356C+7Aj
					; sub_40356C+8Bj ...
		add	eax, [edi+4]
		add	edi, 8
		dec	ebp
		jnz	loc_403586
		pop	ecx
		sub	ecx, eax
		jle	short loc_403681
		lea	edx, [eax+ebx]
		add	eax, esi
		call	sub_402570


loc_403681:				; CODE XREF: sub_40356C+109j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40356C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403688	proc near		; CODE XREF: sub_40356C+B6p
					; sub_403688+98p ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	ebp, [esp+10h+arg_0]
		mov	cl, [edi]
		cmp	cl, 0Ah
		jz	short loc_4036CE
		cmp	cl, 0Bh
		jz	short loc_4036E5
		cmp	cl, 0Ch
		jz	short loc_4036F9
		cmp	cl, 0Dh
		jz	short loc_40370D
		cmp	cl, 0Eh
		jz	short loc_40372E
		cmp	cl, 0Fh
		jz	loc_40374B
		cmp	cl, 11h
		jz	loc_40375F
		mov	al, 2
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_402554
; ---------------------------------------------------------------------------


loc_4036CE:				; CODE XREF: sub_403688+13j
					; sub_403688+56j
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_40316C
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_4036CE
		jmp	loc_403773
; ---------------------------------------------------------------------------


loc_4036E5:				; CODE XREF: sub_403688+18j
					; sub_403688+6Dj
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_4033F8
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_4036E5
		jmp	short loc_403773
; ---------------------------------------------------------------------------


loc_4036F9:				; CODE XREF: sub_403688+1Dj
					; sub_403688+81j
		mov	eax, ebx
		mov	edx, esi
		call	sub_403554
		add	ebx, 10h
		add	esi, 10h
		dec	ebp
		jnz	short loc_4036F9
		jmp	short loc_403773
; ---------------------------------------------------------------------------


loc_40370D:				; CODE XREF: sub_403688+22j
		xor	ecx, ecx
		mov	cl, [edi+1]
		lea	edi, [ecx+edi+2]


loc_403716:				; CODE XREF: sub_403688+A2j
		mov	eax, ebx
		mov	edx, esi
		mov	ecx, [edi+8]
		push	dword ptr [edi+4]
		call	sub_403688
		add	ebx, [edi]
		add	esi, [edi]
		dec	ebp
		jnz	short loc_403716
		jmp	short loc_403773
; ---------------------------------------------------------------------------


loc_40372E:				; CODE XREF: sub_403688+27j
					; sub_403688+BFj
		mov	eax, ebx
		mov	edx, esi
		mov	ecx, edi
		call	sub_40356C
		xor	eax, eax
		mov	al, [edi+1]
		add	ebx, [eax+edi+2]
		add	esi, [eax+edi+2]
		dec	ebp
		jnz	short loc_40372E
		jmp	short loc_403773
; ---------------------------------------------------------------------------


loc_40374B:				; CODE XREF: sub_403688+2Cj
					; sub_403688+D3j
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_403A94
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_40374B
		jmp	short loc_403773
; ---------------------------------------------------------------------------


loc_40375F:				; CODE XREF: sub_403688+35j
					; sub_403688+E9j
		mov	eax, ebx
		mov	edx, [esi]
		mov	ecx, edi
		call	sub_403978
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_40375F


loc_403773:				; CODE XREF: sub_403688+58j
					; sub_403688+6Fj ...
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_403688	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40377C:				; DATA XREF: sub_403B88+2Fo
		mov	al, 11h
		jmp	sub_402554
; ---------------------------------------------------------------------------
		retn

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

; Attributes: bp-based frame


sub_403784	proc near		; CODE XREF: sub_4037A4+106p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_0]
		call	sub_403688
		pop	ebp
		retn	4
sub_403784	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_403794	proc near		; CODE XREF: sub_4037A4+B0p
		jmp	sub_403468
sub_403794	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_40379C	proc near		; CODE XREF: sub_4037A4+2Fp
		call	sub_40393C
		retn
sub_40379C	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4037A4	proc near		; CODE XREF: sub_4037A4+173p
					; sub_403930+5p

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
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], ecx
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	ebx, [ebp+var_4]
		mov	ebx, [ebx]
		mov	eax, [ebp+arg_0]
		mov	edi, [eax]
		test	edi, edi
		jg	short loc_4037DD
		test	edi, edi
		jge	short loc_4037CE
		mov	al, 4
		call	sub_402554
; ---------------------------------------------------------------------------


loc_4037CE:				; CODE XREF: sub_4037A4+21j
		mov	eax, [ebp+var_4]
		mov	edx, esi
		call	sub_40379C
		jmp	loc_403927
; ---------------------------------------------------------------------------


loc_4037DD:				; CODE XREF: sub_4037A4+1Dj
		xor	eax, eax
		mov	[ebp+var_10], eax
		test	ebx, ebx
		jz	short loc_4037F1
		sub	ebx, 4
		mov	eax, [ebx]
		mov	[ebp+var_10], eax
		sub	ebx, 4


loc_4037F1:				; CODE XREF: sub_4037A4+40j
		xor	eax, eax
		mov	al, [esi+1]
		add	esi, eax
		mov	eax, esi
		mov	edx, [eax+2]
		mov	[ebp+var_18], edx
		mov	edx, [eax+6]
		test	edx, edx
		jz	short loc_40380B
		mov	esi, [edx]
		jmp	short loc_40380D
; ---------------------------------------------------------------------------


loc_40380B:				; CODE XREF: sub_4037A4+61j
		xor	esi, esi


loc_40380D:				; CODE XREF: sub_4037A4+65j
		mov	eax, edi
		imul	[ebp+var_18]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_1C]
		cdq
		idiv	edi
		cmp	eax, [ebp+var_18]
		jz	short loc_403827
		mov	al, 4
		call	sub_402554
; ---------------------------------------------------------------------------


loc_403827:				; CODE XREF: sub_4037A4+7Aj
		add	[ebp+var_1C], 8
		test	ebx, ebx
		jz	short loc_403834
		cmp	dword ptr [ebx], 1
		jnz	short loc_403869


loc_403834:				; CODE XREF: sub_4037A4+89j
		mov	[ebp+var_20], ebx
		cmp	edi, [ebp+var_10]
		jge	short loc_403859
		test	esi, esi
		jz	short loc_403859
		mov	eax, ebx
		add	eax, 8
		mov	edx, edi
		imul	edx, [ebp+var_18]
		add	eax, edx
		mov	ecx, [ebp+var_10]
		sub	ecx, edi
		mov	edx, esi
		call	sub_403794


loc_403859:				; CODE XREF: sub_4037A4+96j
					; sub_4037A4+9Aj
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_1C]
		call	sub_4024AC
		mov	ebx, [ebp+var_20]
		jmp	short loc_4038C7
; ---------------------------------------------------------------------------


loc_403869:				; CODE XREF: sub_4037A4+8Ej
		dec	dword ptr [ebx]
		mov	eax, [ebp+var_1C]
		call	sub_40246C
		mov	ebx, eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_14], eax
		cmp	edi, [ebp+var_14]
		jge	short loc_403883
		mov	[ebp+var_14], edi


loc_403883:				; CODE XREF: sub_4037A4+DAj
		test	esi, esi
		jz	short loc_4038B1
		mov	edx, [ebp+var_14]
		imul	edx, [ebp+var_18]
		mov	eax, ebx
		add	eax, 8
		xor	ecx, ecx
		call	sub_402790
		mov	eax, [ebp+var_14]
		push	eax
		mov	edx, [ebp+var_4]
		mov	edx, [edx]
		mov	eax, ebx
		add	eax, 8
		mov	ecx, esi
		call	sub_403784
		jmp	short loc_4038C7
; ---------------------------------------------------------------------------


loc_4038B1:				; CODE XREF: sub_4037A4+E1j
		mov	ecx, [ebp+var_14]
		imul	ecx, [ebp+var_18]
		mov	edx, ebx
		add	edx, 8
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		call	sub_402570


loc_4038C7:				; CODE XREF: sub_4037A4+C3j
					; sub_4037A4+10Bj
		mov	dword ptr [ebx], 1
		add	ebx, 4
		mov	[ebx], edi
		add	ebx, 4
		mov	edx, edi
		sub	edx, [ebp+var_10]
		imul	edx, [ebp+var_18]
		mov	eax, [ebp+var_18]
		imul	eax, [ebp+var_10]
		add	eax, ebx
		xor	ecx, ecx
		call	sub_402790
		cmp	[ebp+var_8], 1
		jle	short loc_403922
		add	[ebp+arg_0], 4
		dec	[ebp+var_8]
		dec	edi
		test	edi, edi
		jl	short loc_403922
		inc	edi
		mov	[ebp+var_C], 0


loc_403908:				; CODE XREF: sub_4037A4+17Cj
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [ebp+var_C]
		lea	eax, [ebx+eax*4]
		mov	ecx, [ebp+var_8]
		mov	edx, esi
		call	sub_4037A4
		inc	[ebp+var_C]
		dec	edi
		jnz	short loc_403908


loc_403922:				; CODE XREF: sub_4037A4+14Ej
					; sub_4037A4+15Aj
		mov	eax, [ebp+var_4]
		mov	[eax], ebx


loc_403927:				; CODE XREF: sub_4037A4+34j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_4037A4	endp


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



sub_403930	proc near		; CODE XREF: sub_403F04+7Dp
					; sub_403F04+B5p ...

var_4		= dword	ptr -4

		push	esp
		add	[esp+4+var_4], 4
		call	sub_4037A4
		retn
sub_403930	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40393C	proc near		; CODE XREF: sub_403468+D0p
					; sub_40379Cp ...
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short locret_403975
		mov	dword ptr [eax], 0
		lock dec dword ptr [ecx-8]
		jnz	short locret_403975
		push	eax
		mov	eax, ecx
		xor	ecx, ecx
		mov	cl, [edx+1]
		mov	edx, [ecx+edx+6]
		test	edx, edx
		jz	short loc_40396C
		mov	ecx, [eax-4]
		test	ecx, ecx
		jz	short loc_40396C
		mov	edx, [edx]
		call	sub_403468


loc_40396C:				; CODE XREF: sub_40393C+20j
					; sub_40393C+27j
		sub	eax, 8
		call	sub_40248C
		pop	eax

locret_403975:				; CODE XREF: sub_40393C+4j
					; sub_40393C+10j
		retn
sub_40393C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403978	proc near		; CODE XREF: sub_40356C+EFp
					; sub_403688+DDp
		push	ebx
		mov	ebx, [eax]
		test	edx, edx
		jz	short loc_403983
		lock inc dword ptr [edx-8]


loc_403983:				; CODE XREF: sub_403978+5j
		test	ebx, ebx
		jz	short loc_40399B
		lock dec dword ptr [ebx-8]
		jnz	short loc_40399B
		push	eax
		push	edx
		mov	edx, ecx
		inc	dword ptr [ebx-8]
		call	sub_40393C
		pop	edx
		pop	eax


loc_40399B:				; CODE XREF: sub_403978+Dj
					; sub_403978+13j
		mov	[eax], edx
		pop	ebx
		retn
sub_403978	endp

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

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

; Attributes: bp-based frame


sub_4039A0	proc near		; CODE XREF: sub_403A0C+1Bp

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, ds:dword_406028
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4039F3


loc_4039BA:				; CODE XREF: sub_4039A0+51j
		xor	eax, eax
		push	ebp
		push	offset loc_4039DB
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, [ebp+var_8]
		mov	eax, [ebp+var_4]
		call	dword ptr [ebx+4]
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4039E5
; ---------------------------------------------------------------------------


loc_4039DB:				; DATA XREF: sub_4039A0+1Do
		jmp	loc_402A88
; ---------------------------------------------------------------------------
		call	sub_402C40


loc_4039E5:				; CODE XREF: sub_4039A0+39j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_4039BA


loc_4039F3:				; CODE XREF: sub_4039A0+18j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_4039A0	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4039FC	proc near		; CODE XREF: sub_403D14+5p
		mov	edx, ds:dword_406024
		mov	[eax], edx
		mov	ds:dword_406024, eax
		retn
sub_4039FC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_403A0C	proc near		; CODE XREF: sub_403028+70p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], eax
		xor	edx, edx
		push	ebp
		push	offset loc_403A70
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		call	sub_4039A0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403A77


loc_403A39:				; CODE XREF: sub_403A0C+69j
		mov	eax, [ebp+var_4]
		cmp	eax, ds:dword_406024
		jnz	short loc_403A50
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	ds:dword_406024, eax
		jmp	short loc_403A6F
; ---------------------------------------------------------------------------


loc_403A50:				; CODE XREF: sub_403A0C+36j
		mov	eax, ds:dword_406024
		test	eax, eax
		jz	short loc_403A6F


loc_403A59:				; CODE XREF: sub_403A0C+61j
		mov	edx, [eax]
		cmp	edx, [ebp+var_4]
		jnz	short loc_403A69
		mov	edx, [ebp+var_4]
		mov	edx, [edx]
		mov	[eax], edx
		jmp	short loc_403A6F
; ---------------------------------------------------------------------------


loc_403A69:				; CODE XREF: sub_403A0C+52j
		mov	eax, [eax]
		test	eax, eax
		jnz	short loc_403A59


loc_403A6F:				; CODE XREF: sub_403A0C+42j
					; sub_403A0C+4Bj ...
		retn
; ---------------------------------------------------------------------------


loc_403A70:				; DATA XREF: sub_403A0C+Ao
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_403A39
; ---------------------------------------------------------------------------


loc_403A77:				; CODE XREF: sub_403A0C:loc_403A6Fj
					; DATA XREF: sub_403A0C+28o
		pop	ecx
		pop	ebp
		retn
sub_403A0C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403A7C	proc near		; CODE XREF: sub_403468+BFp
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_403A90
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		mov	eax, [edx]
		call	dword ptr [eax+8]
		pop	eax

locret_403A90:				; CODE XREF: sub_403A7C+4j
		retn
sub_403A7C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403A94	proc near		; CODE XREF: sub_40356C+DCp
					; sub_403688+C7p
		test	edx, edx
		jz	short loc_403AB1
		push	edx
		push	eax
		mov	eax, [edx]
		push	edx
		call	dword ptr [eax+4]
		pop	eax
		mov	ecx, [eax]
		pop	dword ptr [eax]
		test	ecx, ecx
		jnz	short loc_403AAA
		retn
; ---------------------------------------------------------------------------


loc_403AAA:				; CODE XREF: sub_403A94+13j
		mov	eax, [ecx]
		push	ecx
		call	dword ptr [eax+8]
		retn
; ---------------------------------------------------------------------------


loc_403AB1:				; CODE XREF: sub_403A94+2j
		mov	ecx, [eax]
		test	ecx, ecx
		mov	[eax], edx
		jz	short locret_403ABF
		mov	eax, [ecx]
		push	ecx
		call	dword ptr [eax+8]

locret_403ABF:				; CODE XREF: sub_403A94+23j
		retn
sub_403A94	endp


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

; Attributes: bp-based frame


sub_403AC0	proc near		; CODE XREF: sub_403B88+ADp
					; sub_403B88+BEp

var_10		= dword	ptr -10h
LCData		= byte ptr -0Bh
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		xor	edx, edx
		mov	[ebp+var_10], edx
		xor	edx, edx
		push	ebp
		push	offset loc_403B26
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		push	7		; cchData
		lea	edx, [ebp+LCData]
		push	edx		; lpLCData
		push	1004h		; LCType
		push	eax		; Locale
		call	GetLocaleInfoA	; GetLocaleInfoA
		lea	eax, [ebp+var_10]
		lea	edx, [ebp+LCData]
		mov	ecx, 7
		call	sub_403284
		mov	eax, [ebp+var_10]
		lea	edx, [ebp+var_4]
		call	sub_4027B0
		mov	ebx, eax
		cmp	[ebp+var_4], 0
		jz	short loc_403B10
		xor	ebx, ebx


loc_403B10:				; CODE XREF: sub_403AC0+4Cj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403B2D


loc_403B1D:				; CODE XREF: sub_403AC0+6Bj
		lea	eax, [ebp+var_10]
		call	sub_403118
		retn
; ---------------------------------------------------------------------------


loc_403B26:				; DATA XREF: sub_403AC0+Fo
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_403B1D
; ---------------------------------------------------------------------------


loc_403B2D:				; CODE XREF: sub_403AC0+65j
					; DATA XREF: sub_403AC0+58o
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403AC0	endp


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

; Attributes: bp-based frame


sub_403B34	proc near		; DATA XREF: CODE:00405968o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403B7E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4075A4
		jnz	short loc_403B70
		mov	eax, offset dword_407038
		call	sub_4026FC
		mov	eax, offset dword_407204
		call	sub_4026FC
		mov	eax, offset dword_4073D0
		call	sub_4026FC
		call	sub_401870


loc_403B70:				; CODE XREF: sub_403B34+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403B85


loc_403B7D:				; CODE XREF: sub_403B34+4Fj
		retn
; ---------------------------------------------------------------------------


loc_403B7E:				; DATA XREF: sub_403B34+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_403B7D
; ---------------------------------------------------------------------------


loc_403B85:				; CODE XREF: sub_403B34:loc_403B7Dj
					; DATA XREF: sub_403B34+44o
		pop	ebp
		retn
sub_403B34	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403B88	proc near		; DATA XREF: CODE:00405964o
		sub	ds:dword_4075A4, 1
		jnb	locret_403C5A
		mov	ds:byte_406008,	2
		mov	ds:dword_407010, offset	RaiseException
		mov	ds:dword_407014, offset	RtlUnwind
		mov	ds:byte_407036,	2
		mov	ds:dword_407000, offset	loc_40377C
		call	sub_40288C
		test	al, al
		jz	short loc_403BCF
		call	sub_4028BC


loc_403BCF:				; CODE XREF: sub_403B88+40j
		call	sub_402980
		mov	ds:word_40703C,	0D7B0h
		mov	ds:word_407208,	0D7B0h
		mov	ds:word_4073D4,	0D7B0h
		call	GetCommandLineA	; GetCommandLineA
		mov	ds:dword_40702C, eax
		call	sub_4010BC
		mov	ds:dword_407028, eax
		call	GetVersion	; GetVersion
		and	eax, 80000000h
		cmp	eax, 80000000h
		jz	short loc_403C41
		call	GetVersion	; GetVersion
		and	eax, 0FFh
		cmp	ax, 4
		jbe	short loc_403C30
		mov	ds:dword_4075A8, 3
		jmp	short loc_403C50
; ---------------------------------------------------------------------------


loc_403C30:				; CODE XREF: sub_403B88+9Aj
		call	GetThreadLocale	; GetThreadLocale
		call	sub_403AC0
		mov	ds:dword_4075A8, eax
		jmp	short loc_403C50
; ---------------------------------------------------------------------------


loc_403C41:				; CODE XREF: sub_403B88+8Aj
		call	GetThreadLocale	; GetThreadLocale
		call	sub_403AC0
		mov	ds:dword_4075A8, eax


loc_403C50:				; CODE XREF: sub_403B88+A6j
					; sub_403B88+B7j
		call	GetCurrentThreadId	; GetCurrentThreadId
		mov	ds:dword_407020, eax

locret_403C5A:				; CODE XREF: sub_403B88+7j
		retn
sub_403B88	endp

; ---------------------------------------------------------------------------
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetModuleHandleA.	PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION LocalAlloc_0. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION TlsGetValue. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION TlsSetValue. PRESS KEYPAD	"+" TO EXPAND]
		align 4

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



sub_403C7C	proc near		; CODE XREF: sub_403C90+21p
		push	eax		; uBytes
		push	40h		; uFlags
		call	LocalAlloc_0
		retn
sub_403C7C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403C88	proc near		; CODE XREF: sub_403C90+1p
		mov	eax, 8
		retn
sub_403C88	endp

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

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



sub_403C90	proc near		; CODE XREF: sub_403CD4:loc_403CEEp
		push	ebx
		call	sub_403C88
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_403CD2
		cmp	ds:TlsIndex, 0FFFFFFFFh
		jnz	short loc_403CAF
		mov	eax, 0E2h
		call	sub_40310C
; ---------------------------------------------------------------------------


loc_403CAF:				; CODE XREF: sub_403C90+13j
		mov	eax, ebx
		call	sub_403C7C
		test	eax, eax
		jnz	short loc_403CC6
		mov	eax, 0E2h
		call	sub_40310C
; ---------------------------------------------------------------------------
		jmp	short loc_403CD2
; ---------------------------------------------------------------------------


loc_403CC6:				; CODE XREF: sub_403C90+28j
		push	eax		; lpTlsValue
		mov	eax, ds:TlsIndex
		push	eax		; dwTlsIndex
		call	TlsSetValue	; TlsSetValue


loc_403CD2:				; CODE XREF: sub_403C90+Aj
					; sub_403C90+34j
		pop	ebx
		retn
sub_403C90	endp


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



sub_403CD4	proc near		; CODE XREF: sub_402508+20p
					; sub_402560+3p ...
		mov	cl, ds:byte_40764C
		mov	eax, ds:TlsIndex
		test	cl, cl
		jnz	short loc_403D09
		mov	edx, large fs:2Ch
		mov	eax, [edx+eax*4]
		retn
; ---------------------------------------------------------------------------


loc_403CEE:				; CODE XREF: sub_403CD4+3Dj
		call	sub_403C90
		mov	eax, ds:TlsIndex
		push	eax		; dwTlsIndex
		call	TlsGetValue	; TlsGetValue
		test	eax, eax
		jz	short loc_403D03
		retn
; ---------------------------------------------------------------------------


loc_403D03:				; CODE XREF: sub_403CD4+2Cj
		mov	eax, ds:dword_407658
		retn
; ---------------------------------------------------------------------------


loc_403D09:				; CODE XREF: sub_403CD4+Dj
		push	eax		; dwTlsIndex
		call	TlsGetValue	; TlsGetValue
		test	eax, eax
		jz	short loc_403CEE
		retn
sub_403CD4	endp


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



sub_403D14	proc near		; CODE XREF: sub_403D20+2Ep
		mov	eax, offset dword_406090
		call	sub_4039FC
		retn
sub_403D14	endp

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

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



sub_403D20	proc near		; CODE XREF: CODE:004059DEp
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	ds:TlsIndex, eax
		push	0		; lpModuleName
		call	GetModuleHandleA	; GetModuleHandleA
		mov	ds:dword_407650, eax
		mov	eax, ds:dword_407650
		mov	ds:dword_406094, eax
		xor	eax, eax
		mov	ds:dword_406098, eax
		xor	eax, eax
		mov	ds:dword_40609C, eax
		call	sub_403D14
		mov	edx, offset dword_406090
		mov	eax, ebx
		call	sub_402ED0
		pop	ebx
		retn
sub_403D20	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_403D64	proc near		; DATA XREF: CODE:00405960o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403D89
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_407654
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403D90


loc_403D88:				; CODE XREF: sub_403D64+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403D89:				; DATA XREF: sub_403D64+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_403D88
; ---------------------------------------------------------------------------


loc_403D90:				; CODE XREF: sub_403D64:loc_403D88j
					; DATA XREF: sub_403D64+1Fo
		pop	ebp
		retn
sub_403D64	endp

; ---------------------------------------------------------------------------
		align 4


loc_403D94:				; DATA XREF: CODE:off_40595Co
		sub	ds:dword_407654, 1
		retn

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

; Attributes: bp-based frame


sub_403D9C	proc near		; DATA XREF: CODE:00405970o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403DC1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40765C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403DC8


loc_403DC0:				; CODE XREF: sub_403D9C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403DC1:				; DATA XREF: sub_403D9C+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_403DC0
; ---------------------------------------------------------------------------


loc_403DC8:				; CODE XREF: sub_403D9C:loc_403DC0j
					; DATA XREF: sub_403D9C+1Fo
		pop	ebp
		retn
sub_403D9C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403DCC	proc near		; DATA XREF: CODE:0040596Co
		sub	ds:dword_40765C, 1
		retn
sub_403DCC	endp

; [00000006 BYTES: COLLAPSED FUNCTION ExitProcess_0. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetLastError. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetProcAddress. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetTickCount. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION LoadLibraryA. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION Sleep. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION DispatchMessageA.	PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION PeekMessageA. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION PostQuitMessage. PRESS KEYPAD "+"	TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION TranslateMessage.	PRESS KEYPAD "+" TO EXPAND]
		align 4

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



sub_403E24	proc near		; CODE XREF: sub_403EFCp
		xchg	eax, edx
		call	sub_402570
		retn
sub_403E24	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_403E2C	proc near		; DATA XREF: CODE:00405978o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403E51
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_407660
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403E58


loc_403E50:				; CODE XREF: sub_403E2C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403E51:				; DATA XREF: sub_403E2C+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_403E50
; ---------------------------------------------------------------------------


loc_403E58:				; CODE XREF: sub_403E2C:loc_403E50j
					; DATA XREF: sub_403E2C+1Fo
		pop	ebp
		retn
sub_403E2C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403E5C	proc near		; DATA XREF: CODE:00405974o
		sub	ds:dword_407660, 1
		retn
sub_403E5C	endp

; ---------------------------------------------------------------------------
off_403E64	dd offset dword_403E68	; DATA XREF: sub_403F04+77r
					; sub_403F04+AFr ...
dword_403E68	dd 42540A11h, 41657479h, 79617272h, 1, 0		dd 11h
		dd offset off_401000
		dd 69745504h, 408D6Ch
; [00000006 BYTES: COLLAPSED FUNCTION LoadLibraryA_0. PRESS KEYPAD "+" TO EXPAND]
		align 4

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



sub_403E94	proc near		; CODE XREF: sub_403EA4+6p
					; sub_404254+6p ...
		push	0		; lpProcName
		push	0		; hModule
		call	GetProcAddress	; GetProcAddress
		call	GetLastError
		retn
sub_403E94	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403EA4	proc near		; CODE XREF: CODE:00405A11p
					; CODE:00405A3Dp
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		call	sub_403E94
		sub	eax, 4Dh
		push	eax
		push	ebx
		mov	eax, ds:dword_407650
		push	eax
		call	ds:dword_407664
		mov	ebx, eax
		push	ebx
		mov	eax, ds:dword_407650
		push	eax
		call	ds:dword_407668
		mov	[esi], eax
		push	ebx
		mov	eax, ds:dword_407650
		push	eax
		call	ds:dword_40766C
		mov	ebx, eax
		push	ebx
		call	ds:dword_407670
		mov	esi, eax
		test	esi, esi
		jz	short loc_403EF4
		push	ebx
		call	ds:dword_407674


loc_403EF4:				; CODE XREF: sub_403EA4+47j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_403EA4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403EFC	proc near		; CODE XREF: sub_403F04+97p
					; sub_403F04+D4p ...
		call	sub_403E24
		retn
sub_403EFC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_403F04	proc near		; CODE XREF: sub_4046BC+62p
					; sub_4046BC+91p ...

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_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFBE8h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_14], ebx
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4032E8
		mov	eax, [ebp+var_8]
		call	sub_4032E8
		xor	eax, eax
		push	ebp
		push	offset loc_404170
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_8]
		call	sub_40329C
		test	eax, eax
		jz	loc_404142
		mov	eax, [ebp+var_4]
		call	sub_40329C
		test	eax, eax
		jz	loc_404142
		mov	eax, [ebp+var_8]
		call	sub_40329C
		cmp	eax, 100h
		jle	short loc_403FA2
		push	100h
		lea	eax, [ebp+var_10]
		mov	ecx, 1
		mov	edx, off_403E64
		call	sub_403930
		add	esp, 4
		lea	eax, [ebp+var_8]
		call	sub_403348
		mov	edx, eax
		mov	eax, [ebp+var_10]
		mov	ecx, 100h
		call	sub_403EFC
		jmp	short loc_403FDD
; ---------------------------------------------------------------------------


loc_403FA2:				; CODE XREF: sub_403F04+68j
		mov	eax, [ebp+var_8]
		call	sub_40329C
		push	eax
		lea	eax, [ebp+var_10]
		mov	ecx, 1
		mov	edx, off_403E64
		call	sub_403930
		add	esp, 4
		mov	eax, [ebp+var_8]
		call	sub_40329C
		push	eax
		lea	eax, [ebp+var_8]
		call	sub_403348
		mov	edx, eax
		mov	eax, [ebp+var_10]
		pop	ecx
		call	sub_403EFC


loc_403FDD:				; CODE XREF: sub_403F04+9Cj
		xor	edi, edi
		lea	eax, [ebp+var_418]


loc_403FE5:				; CODE XREF: sub_403F04+EDj
		mov	[eax], edi
		inc	edi
		add	eax, 4
		cmp	edi, 100h
		jnz	short loc_403FE5
		xor	esi, esi
		xor	edi, edi
		lea	ebx, [ebp+var_418]


loc_403FFD:				; CODE XREF: sub_403F04+146j
		mov	eax, [ebp+var_8]
		call	sub_40329C
		push	eax
		mov	eax, edi
		pop	edx
		mov	ecx, edx
		cdq
		idiv	ecx
		mov	eax, [ebp+var_10]
		movzx	eax, byte ptr [eax+edx]
		add	esi, [ebx]
		add	eax, esi
		and	eax, 800000FFh
		jns	short loc_404027
		dec	eax
		or	eax, 0FFFFFF00h
		inc	eax


loc_404027:				; CODE XREF: sub_403F04+11Aj
		mov	esi, eax
		mov	al, [ebx]
		mov	edx, [ebp+esi*4+var_418]
		mov	[ebx], edx
		and	eax, 0FFh
		mov	[ebp+esi*4+var_418], eax
		inc	edi
		add	ebx, 4
		cmp	edi, 100h
		jnz	short loc_403FFD
		xor	esi, esi
		xor	ebx, ebx
		mov	eax, [ebp+var_4]
		call	sub_40329C
		push	eax
		lea	eax, [ebp+var_14]
		mov	ecx, 1
		mov	edx, off_403E64
		call	sub_403930
		add	esp, 4
		mov	eax, [ebp+var_4]
		call	sub_40329C
		push	eax
		lea	eax, [ebp+var_4]
		call	sub_403348
		mov	edx, eax
		mov	eax, [ebp+var_14]
		pop	ecx
		call	sub_403EFC
		mov	eax, [ebp+var_4]
		call	sub_40329C
		dec	eax
		test	eax, eax
		jl	short loc_404116
		inc	eax
		mov	[ebp+var_18], eax
		xor	edi, edi


loc_40409E:				; CODE XREF: sub_403F04+210j
		inc	esi
		and	esi, 800000FFh
		jns	short loc_4040AF
		dec	esi
		or	esi, 0FFFFFF00h
		inc	esi


loc_4040AF:				; CODE XREF: sub_403F04+1A1j
		add	ebx, [ebp+esi*4+var_418]
		and	ebx, 800000FFh
		jns	short loc_4040C6
		dec	ebx
		or	ebx, 0FFFFFF00h
		inc	ebx


loc_4040C6:				; CODE XREF: sub_403F04+1B8j
		mov	al, byte ptr [ebp+esi*4+var_418]
		mov	edx, [ebp+ebx*4+var_418]
		mov	[ebp+esi*4+var_418], edx
		and	eax, 0FFh
		mov	[ebp+ebx*4+var_418], eax
		mov	eax, [ebp+esi*4+var_418]
		add	eax, [ebp+ebx*4+var_418]
		and	eax, 800000FFh
		jns	short loc_404103
		dec	eax
		or	eax, 0FFFFFF00h
		inc	eax


loc_404103:				; CODE XREF: sub_403F04+1F6j
		mov	al, byte ptr [ebp+eax*4+var_418]
		mov	edx, [ebp+var_14]
		xor	[edx+edi], al
		inc	edi
		dec	[ebp+var_18]
		jnz	short loc_40409E


loc_404116:				; CODE XREF: sub_403F04+192j
		mov	eax, [ebp+var_4]
		call	sub_40329C
		mov	edx, eax
		mov	eax, [ebp+var_C]
		call	sub_403350
		mov	eax, [ebp+var_4]
		call	sub_40329C
		push	eax
		mov	eax, [ebp+var_C]
		call	sub_403348
		mov	edx, [ebp+var_14]
		pop	ecx
		call	sub_403EFC


loc_404142:				; CODE XREF: sub_403F04+45j
					; sub_403F04+55j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404177


loc_40414F:				; CODE XREF: sub_403F04+271j
		lea	eax, [ebp+var_14]
		mov	edx, off_403E64
		mov	ecx, 2
		call	sub_403468
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_40313C
		retn
; ---------------------------------------------------------------------------


loc_404170:				; DATA XREF: sub_403F04+30o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_40414F
; ---------------------------------------------------------------------------


loc_404177:				; CODE XREF: sub_403F04+26Bj
					; DATA XREF: sub_403F04+246o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403F04	endp

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

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

; Attributes: bp-based frame


sub_404180	proc near		; CODE XREF: CODE:00405A8Fp

var_108		= dword	ptr -108h
var_104		= byte ptr -104h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEF8h
		push	ebx
		push	esi
		push	edi
		xor	ecx, ecx
		mov	[ebp+var_108], ecx
		mov	[ebp+var_4], ecx
		mov	esi, eax
		lea	edi, [ebp+var_104]
		mov	ecx, 40h
		rep movsd
		mov	edi, edx
		xor	eax, eax
		push	ebp
		push	offset loc_40420C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	esi, esi
		jmp	short loc_4041D6
; ---------------------------------------------------------------------------


loc_4041BA:				; CODE XREF: sub_404180+5Fj
		lea	eax, [ebp+var_108]
		mov	edx, ebx
		call	sub_403238
		mov	edx, [ebp+var_108]
		lea	eax, [ebp+var_4]
		call	sub_4032A4
		inc	esi


loc_4041D6:				; CODE XREF: sub_404180+38j
		mov	bl, [ebp+esi+var_104]
		test	bl, bl
		jnz	short loc_4041BA
		mov	eax, edi
		mov	edx, [ebp+var_4]
		call	sub_40316C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404213


loc_4041F8:				; CODE XREF: sub_404180+91j
		lea	eax, [ebp+var_108]
		call	sub_403118
		lea	eax, [ebp+var_4]
		call	sub_403118
		retn
; ---------------------------------------------------------------------------


loc_40420C:				; DATA XREF: sub_404180+2Bo
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_4041F8
; ---------------------------------------------------------------------------


loc_404213:				; CODE XREF: sub_404180+8Bj
					; DATA XREF: sub_404180+73o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_404180	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_40421C	proc near		; DATA XREF: CODE:00405980o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404241
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076A4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404248


loc_404240:				; CODE XREF: sub_40421C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404241:				; DATA XREF: sub_40421C+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404240
; ---------------------------------------------------------------------------


loc_404248:				; CODE XREF: sub_40421C:loc_404240j
					; DATA XREF: sub_40421C+1Fo
		pop	ebp
		retn
sub_40421C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40424C	proc near		; DATA XREF: CODE:0040597Co
		sub	ds:dword_4076A4, 1
		retn
sub_40424C	endp


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



sub_404254	proc near		; CODE XREF: sub_4046BC+22p

var_70		= byte ptr -70h
var_6C		= byte ptr -6Ch
var_68		= byte ptr -68h
var_64		= byte ptr -64h
var_5C		= byte ptr -5Ch
var_54		= byte ptr -54h
var_4C		= byte ptr -4Ch
var_44		= byte ptr -44h
var_38		= byte ptr -38h
var_2C		= byte ptr -2Ch
var_20		= byte ptr -20h
var_14		= byte ptr -14h

		push	ebx
		add	esp, 0FFFFFF90h
		mov	ebx, eax
		call	sub_403E94
		mov	edx, eax
		add	edx, 14h
		mov	eax, esp
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		mov	edx, esp
		lea	eax, [esp+74h+var_70]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0Eh
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_70]
		mov	cl, 2
		call	sub_402754
		lea	edx, [esp+74h+var_70]
		lea	eax, [esp+74h+var_68]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 1Bh
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_68]
		mov	cl, 3
		call	sub_402754
		lea	edx, [esp+74h+var_68]
		lea	eax, [esp+74h+var_64]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 17h
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_64]
		mov	cl, 4
		call	sub_402754
		lea	edx, [esp+74h+var_64]
		lea	eax, [esp+74h+var_5C]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0Eh
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_5C]
		mov	cl, 5
		call	sub_402754
		lea	edx, [esp+74h+var_5C]
		lea	eax, [esp+74h+var_54]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 15h
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_54]
		mov	cl, 6
		call	sub_402754
		lea	edx, [esp+74h+var_54]
		lea	eax, [esp+74h+var_4C]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0FFFFFFDCh
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_4C]
		mov	cl, 7
		call	sub_402754
		lea	edx, [esp+74h+var_4C]
		lea	eax, [esp+74h+var_44]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0FFFFFFDBh
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_44]
		mov	cl, 8
		call	sub_402754
		lea	edx, [esp+74h+var_44]
		lea	eax, [esp+74h+var_38]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0FFFFFFD7h
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_38]
		mov	cl, 9
		call	sub_402754
		lea	edx, [esp+74h+var_38]
		lea	eax, [esp+74h+var_2C]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0Dh
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_2C]
		mov	cl, 0Ah
		call	sub_402754
		lea	edx, [esp+74h+var_2C]
		lea	eax, [esp+74h+var_20]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 15h
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_20]
		mov	cl, 0Bh
		call	sub_402754
		lea	edx, [esp+74h+var_20]
		lea	eax, [esp+74h+var_14]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 15h
		lea	eax, [esp+74h+var_6C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+74h+var_6C]
		lea	eax, [esp+74h+var_14]
		mov	cl, 0Ch
		call	sub_402754
		lea	edx, [esp+74h+var_14]
		mov	eax, ebx
		call	sub_403278
		add	esp, 70h
		pop	ebx
		retn
sub_404254	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40448C	proc near		; CODE XREF: sub_4046BC+3Ap

var_48		= byte ptr -48h
var_44		= byte ptr -44h
var_40		= byte ptr -40h
var_3C		= byte ptr -3Ch
var_34		= byte ptr -34h
var_2C		= byte ptr -2Ch
var_24		= byte ptr -24h
var_1C		= byte ptr -1Ch
var_10		= byte ptr -10h

		push	ebx
		add	esp, 0FFFFFFB8h
		mov	ebx, eax
		call	sub_403E94
		mov	edx, eax
		add	edx, 17h
		mov	eax, esp
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		mov	edx, esp
		lea	eax, [esp+4Ch+var_48]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 1Dh
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_48]
		mov	cl, 2
		call	sub_402754
		lea	edx, [esp+4Ch+var_48]
		lea	eax, [esp+4Ch+var_40]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0Dh
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_40]
		mov	cl, 3
		call	sub_402754
		lea	edx, [esp+4Ch+var_40]
		lea	eax, [esp+4Ch+var_3C]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 15h
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_3C]
		mov	cl, 4
		call	sub_402754
		lea	edx, [esp+4Ch+var_3C]
		lea	eax, [esp+4Ch+var_34]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 15h
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_34]
		mov	cl, 5
		call	sub_402754
		lea	edx, [esp+4Ch+var_34]
		lea	eax, [esp+4Ch+var_2C]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0FFFFFFD7h
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_2C]
		mov	cl, 6
		call	sub_402754
		lea	edx, [esp+4Ch+var_2C]
		lea	eax, [esp+4Ch+var_24]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0Dh
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_24]
		mov	cl, 7
		call	sub_402754
		lea	edx, [esp+4Ch+var_24]
		lea	eax, [esp+4Ch+var_1C]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 15h
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_1C]
		mov	cl, 8
		call	sub_402754
		lea	edx, [esp+4Ch+var_1C]
		lea	eax, [esp+4Ch+var_10]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 15h
		lea	eax, [esp+4Ch+var_44]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+4Ch+var_44]
		lea	eax, [esp+4Ch+var_10]
		mov	cl, 9
		call	sub_402754
		lea	edx, [esp+4Ch+var_10]
		mov	eax, ebx
		call	sub_403278
		add	esp, 48h
		pop	ebx
		retn
sub_40448C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404634	proc near		; CODE XREF: sub_4046BC+52p
					; sub_4046BC+81p ...

var_10		= byte ptr -10h
var_C		= byte ptr -0Ch
var_8		= byte ptr -8

		push	ebx
		add	esp, 0FFFFFFF0h
		mov	ebx, eax
		call	sub_403E94
		mov	edx, eax
		add	edx, 0Eh
		mov	eax, esp
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		mov	edx, esp
		lea	eax, [esp+14h+var_10]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 21h
		lea	eax, [esp+14h+var_C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+14h+var_C]
		lea	eax, [esp+14h+var_10]
		mov	cl, 2
		call	sub_402754
		lea	edx, [esp+14h+var_10]
		lea	eax, [esp+14h+var_8]
		call	sub_402784
		call	sub_403E94
		mov	edx, eax
		add	edx, 0FFFFFFECh
		lea	eax, [esp+14h+var_C]
		mov	[eax+1], dl
		mov	byte ptr [eax],	1
		lea	edx, [esp+14h+var_C]
		lea	eax, [esp+14h+var_8]
		mov	cl, 3
		call	sub_402754
		lea	edx, [esp+14h+var_8]
		mov	eax, ebx
		call	sub_403278
		add	esp, 10h
		pop	ebx
		retn
sub_404634	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4046BC	proc near		; CODE XREF: CODE:004059FBp

var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
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
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 10h


loc_4046C4:				; CODE XREF: sub_4046BC+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_4046C4
		push	ebx
		push	esi
		xor	eax, eax
		push	ebp
		push	offset loc_404A0E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		call	sub_404254
		mov	eax, [ebp+var_4]
		call	sub_4032F8
		push	eax		; lpLibFileName
		call	LoadLibraryA_0
		mov	ebx, eax
		lea	eax, [ebp+var_8]
		call	sub_40448C
		mov	eax, [ebp+var_8]
		call	sub_4032F8
		push	eax		; lpLibFileName
		call	LoadLibraryA_0
		mov	esi, eax
		lea	eax, [ebp+var_10]
		call	sub_404634
		mov	edx, [ebp+var_10]
		lea	ecx, [ebp+var_C]
		mov	eax, offset dword_404A24
		call	sub_403F04
		mov	eax, [ebp+var_C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	esi		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060D4
		mov	[edx], eax
		lea	eax, [ebp+var_18]
		call	sub_404634
		mov	edx, [ebp+var_18]
		lea	ecx, [ebp+var_14]
		mov	eax, offset dword_404A44
		call	sub_403F04
		mov	eax, [ebp+var_14]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_406104
		mov	[edx], eax
		lea	eax, [ebp+var_20]
		call	sub_404634
		mov	edx, [ebp+var_20]
		lea	ecx, [ebp+var_1C]
		mov	eax, offset dword_404A5C
		call	sub_403F04
		mov	eax, [ebp+var_1C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060EC
		mov	[edx], eax
		lea	eax, [ebp+var_28]
		call	sub_404634
		mov	edx, [ebp+var_28]
		lea	ecx, [ebp+var_24]
		mov	eax, offset dword_404A74
		call	sub_403F04
		mov	eax, [ebp+var_24]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060E4
		mov	[edx], eax
		lea	eax, [ebp+var_30]
		call	sub_404634
		mov	edx, [ebp+var_30]
		lea	ecx, [ebp+var_2C]
		mov	eax, offset dword_404A8C
		call	sub_403F04
		mov	eax, [ebp+var_2C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060E8
		mov	[edx], eax
		lea	eax, [ebp+var_38]
		call	sub_404634
		mov	edx, [ebp+var_38]
		lea	ecx, [ebp+var_34]
		mov	eax, offset dword_404AA4
		call	sub_403F04
		mov	eax, [ebp+var_34]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060F8
		mov	[edx], eax
		lea	eax, [ebp+var_40]
		call	sub_404634
		mov	edx, [ebp+var_40]
		lea	ecx, [ebp+var_3C]
		mov	eax, offset dword_404ABC
		call	sub_403F04
		mov	eax, [ebp+var_3C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060C8
		mov	[edx], eax
		lea	eax, [ebp+var_48]
		call	sub_404634
		mov	edx, [ebp+var_48]
		lea	ecx, [ebp+var_44]
		mov	eax, offset dword_404AD0
		call	sub_403F04
		mov	eax, [ebp+var_44]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060E0
		mov	[edx], eax
		lea	eax, [ebp+var_50]
		call	sub_404634
		mov	edx, [ebp+var_50]
		lea	ecx, [ebp+var_4C]
		mov	eax, offset dword_404AE8
		call	sub_403F04
		mov	eax, [ebp+var_4C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060F0
		mov	[edx], eax
		lea	eax, [ebp+var_58]
		call	sub_404634
		mov	edx, [ebp+var_58]
		lea	ecx, [ebp+var_54]
		mov	eax, offset dword_404B04
		call	sub_403F04
		mov	eax, [ebp+var_54]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060D0
		mov	[edx], eax
		lea	eax, [ebp+var_60]
		call	sub_404634
		mov	edx, [ebp+var_60]
		lea	ecx, [ebp+var_5C]
		mov	eax, offset dword_404B20
		call	sub_403F04
		mov	eax, [ebp+var_5C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060F4
		mov	[edx], eax
		lea	eax, [ebp+var_68]
		call	sub_404634
		mov	edx, [ebp+var_68]
		lea	ecx, [ebp+var_64]
		mov	eax, offset dword_404B3C
		call	sub_403F04
		mov	eax, [ebp+var_64]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060DC
		mov	[edx], eax
		lea	eax, [ebp+var_70]
		call	sub_404634
		mov	edx, [ebp+var_70]
		lea	ecx, [ebp+var_6C]
		mov	eax, offset dword_404B58
		call	sub_403F04
		mov	eax, [ebp+var_6C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_406100
		mov	[edx], eax
		lea	eax, [ebp+var_78]
		call	sub_404634
		mov	edx, [ebp+var_78]
		lea	ecx, [ebp+var_74]
		mov	eax, offset dword_404B74
		call	sub_403F04
		mov	eax, [ebp+var_74]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060D8
		mov	[edx], eax
		lea	eax, [ebp+var_80]
		call	sub_404634
		mov	edx, [ebp+var_80]
		lea	ecx, [ebp+var_7C]
		mov	eax, offset dword_404B8C
		call	sub_403F04
		mov	eax, [ebp+var_7C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060CC
		mov	[edx], eax
		push	offset ProcName	; "TerminateProcess"
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	edx, ds:off_4060FC
		mov	[edx], eax
		push	esi
		mov	eax, ds:off_4060C8
		mov	eax, [eax]
		call	eax
		push	ebx
		mov	eax, ds:off_4060C8
		mov	eax, [eax]
		call	eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404A15


loc_404A00:				; CODE XREF: sub_4046BC+357j
		lea	eax, [ebp+var_80]
		mov	edx, 20h
		call	sub_40313C
		retn
; ---------------------------------------------------------------------------


loc_404A0E:				; DATA XREF: sub_4046BC+14o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404A00
; ---------------------------------------------------------------------------


loc_404A15:				; CODE XREF: sub_4046BC+351j
					; DATA XREF: sub_4046BC+33Fo
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4046BC	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 14h
dword_404A24	dd 0E5190BA2h, 0CE920FE5h, 7ABF9BF8h, 0DB49B168h, 956EA088h
					; DATA XREF: sub_4046BC+5Do
		dd 0
		dd 0FFFFFFFFh, 0Dh
dword_404A44	dd 0EF2215BEh, 0F7910BDAh, 50AB8CE4h, 4Fh, 0FFFFFFFFh
					; DATA XREF: sub_4046BC+8Co
		dd 0Eh
dword_404A5C	dd 0EE3615ABh, 0FDB008E7h, 47BD91E2h, 876Dh, 0FFFFFFFFh
					; DATA XREF: sub_4046BC+BBo
		dd 0Ch
dword_404A74	dd 0EF2D13B4h, 0F7910BDAh, 50AB8CE4h, 0		dd 0FFFFFFFFh, 0Ch
dword_404A8C	dd 0E02F13B4h, 0F7910BDAh, 50AB8CE4h, 0		dd 0FFFFFFFFh, 0Ch
dword_404AA4	dd 0EE290EBEh, 0F7910BDAh, 50AB8CE4h, 0		dd 0FFFFFFFFh, 0Bh
dword_404ABC	dd 0EE290EBEh, 0EA8007C4h, 0B18CF0h, 0FFFFFFFFh, 0Eh
					; DATA XREF: sub_4046BC+177o
dword_404AD0	dd 0FF3E15AEh, 0D98E0FFDh, 56A792FDh, 9A4Bh, 0FFFFFFFFh
					; DATA XREF: sub_4046BC+1A6o
		dd 10h
dword_404AE8	dd 0FF3E15AEh, 0C88E0FFDh, 50BC91E3h, 0C069966Dh, 0
					; DATA XREF: sub_4046BC+1D5o
		dd 0FFFFFFFFh, 12h
dword_404B04	dd 0FF250EAFh, 0F7903EEDh, 46BB9BF2h, 0D7418743h, 0B08Eh
					; DATA XREF: sub_4046BC+204o
		dd 0FFFFFFFFh, 11h
dword_404B20	dd 0EF2D19AAh, 0FB8D1CD8h, 78BB8DF4h, 0CA438F6Bh, 85h
					; DATA XREF: sub_4046BC+233o
		dd 0FFFFFFFFh, 10h
dword_404B3C	dd 0DF3819BFh, 0F9871CE0h, 5BA7BDF5h, 0CC54877Ah, 0
					; DATA XREF: sub_4046BC+262o
		dd 0FFFFFFFFh, 10h
dword_404B58	dd 0DF3819ABh, 0F9871CE0h, 5BA7BDF5h, 0CC54877Ah, 0
					; DATA XREF: sub_4046BC+291o
		dd 0FFFFFFFFh, 0Eh
dword_404B74	dd 0EA290EBBh, 0EAB20BFCh, 46AD9DFEh, 0A37Dh, 0FFFFFFFFh
					; DATA XREF: sub_4046BC+2C0o
		dd 0Ch
dword_404B8C	dd 0FE3F19AAh, 0F0B60BE5h, 51A99BE3h, 0; char ProcName[]
ProcName	db 'TerminateProcess',0 ; DATA XREF: sub_4046BC+310o
		align 10h

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

; Attributes: bp-based frame


sub_404BB0	proc near		; DATA XREF: CODE:00405988o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404BD5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076A8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404BDC


loc_404BD4:				; CODE XREF: sub_404BB0+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404BD5:				; DATA XREF: sub_404BB0+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404BD4
; ---------------------------------------------------------------------------


loc_404BDC:				; CODE XREF: sub_404BB0:loc_404BD4j
					; DATA XREF: sub_404BB0+1Fo
		pop	ebp
		retn
sub_404BB0	endp

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

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



sub_404BE0	proc near		; DATA XREF: CODE:00405984o
		sub	ds:dword_4076A8, 1
		retn
sub_404BE0	endp


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



sub_404BE8	proc near		; CODE XREF: sub_404C00+184p
		lea	edx, [eax+18h]
		movzx	eax, word ptr [eax+14h]
		add	edx, eax
		mov	eax, edx
		retn
sub_404BE8	endp


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



sub_404BF4	proc near		; CODE XREF: sub_404C00+1D2p
		shr	eax, 1Dh
		mov	eax, ds:dword_4060A8[eax*4]
		retn
sub_404BF4	endp

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

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

; Attributes: bp-based frame


sub_404C00	proc near		; CODE XREF: CODE:00405B04p

var_148		= dword	ptr -148h
var_A4		= dword	ptr -0A4h
var_98		= dword	ptr -98h
var_7C		= dword	ptr -7Ch
var_4C		= word ptr -4Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_28		= dword	ptr -28h
var_21		= byte ptr -21h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= byte ptr -18h
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEB8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_8]
		call	sub_4032E8
		mov	eax, [ebp+var_C]
		call	sub_4032E8
		xor	eax, eax
		push	ebp
		push	offset loc_404EA0
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	ebx, ebx
		lea	eax, [ebp+var_38]
		xor	ecx, ecx
		mov	edx, 10h
		call	sub_402790
		lea	eax, [ebp+var_7C]
		xor	ecx, ecx
		mov	edx, 44h
		call	sub_402790
		mov	[ebp+var_7C], 44h
		xor	eax, eax
		mov	al, [ebp+arg_0]
		mov	[ebp+var_4C], ax
		lea	eax, [ebp+var_38]
		push	eax
		lea	eax, [ebp+var_7C]
		push	eax
		push	0
		push	0
		push	4
		push	0
		push	0
		push	0
		mov	eax, [ebp+var_C]
		call	sub_4032F8
		push	eax
		mov	eax, [ebp+var_8]
		call	sub_4032F8
		push	eax
		mov	eax, ds:off_4060D8
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_404E85
		mov	[ebp+var_21], 1
		xor	eax, eax
		push	ebp
		push	offset loc_404E7E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_148], 10002h
		lea	eax, [ebp+var_148]
		push	eax
		mov	eax, [ebp+var_34]
		push	eax
		mov	eax, ds:off_4060DC
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_404E49
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		lea	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_A4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060F4
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_404E49
		mov	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060D4
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jl	loc_404E49
		cmp	[ebp+var_4], 0
		jz	loc_404E49
		mov	eax, [ebp+var_4]
		mov	eax, [eax+3Ch]
		add	eax, [ebp+var_4]
		mov	[ebp+var_20], eax
		push	4
		push	3000h
		mov	eax, [ebp+var_20]
		mov	eax, [eax+50h]
		push	eax
		mov	eax, [ebp+var_20]
		mov	eax, [eax+34h]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060E0
		mov	eax, [eax]
		call	eax
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0
		jz	loc_404E49
		lea	eax, [ebp+var_18]
		push	eax
		mov	eax, [ebp+var_20]
		mov	eax, [eax+54h]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060D0
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_404E49
		mov	eax, [ebp+var_20]
		call	sub_404BE8
		mov	esi, eax
		mov	eax, [ebp+var_20]
		movzx	eax, word ptr [eax+6]
		dec	eax
		test	eax, eax
		jb	short loc_404DF8
		inc	eax
		mov	[ebp+var_28], eax
		xor	ebx, ebx


loc_404D9D:				; CODE XREF: sub_404C00+1F6j
		lea	eax, [ebp+var_18]
		push	eax
		lea	edi, [ebx+ebx*4]
		mov	eax, [esi+edi*8+10h]
		push	eax
		mov	eax, [esi+edi*8+14h]
		add	eax, [ebp+var_4]
		push	eax
		mov	eax, [esi+edi*8+0Ch]
		add	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060D0
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	short loc_404DF2
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, [esi+edi*8+24h]
		call	sub_404BF4
		push	eax
		mov	eax, [esi+edi*8+8]
		push	eax
		mov	eax, [esi+edi*8+0Ch]
		add	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060F0
		mov	eax, [eax]
		call	eax


loc_404DF2:				; CODE XREF: sub_404C00+1C8j
		inc	ebx
		dec	[ebp+var_28]
		jnz	short loc_404D9D


loc_404DF8:				; CODE XREF: sub_404C00+195j
		lea	eax, [ebp+var_18]
		push	eax
		push	4
		lea	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_A4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060D0
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	short loc_404E49
		mov	eax, [ebp+var_20]
		mov	eax, [eax+28h]
		add	eax, [ebp+var_10]
		mov	[ebp+var_98], eax
		lea	eax, [ebp+var_148]
		push	eax
		mov	eax, [ebp+var_34]
		push	eax
		mov	eax, ds:off_406100
		mov	eax, [eax]
		call	eax
		cmp	eax, 1
		sbb	eax, eax
		inc	eax
		mov	[ebp+var_21], al


loc_404E49:				; CODE XREF: sub_404C00+CCj
					; sub_404C00+F5j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404E85


loc_404E56:				; CODE XREF: sub_404C00+283j
		cmp	[ebp+var_21], 0
		jnz	short loc_404E6D
		push	0
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060FC
		mov	eax, [eax]
		call	eax
		jmp	short loc_404E7A
; ---------------------------------------------------------------------------


loc_404E6D:				; CODE XREF: sub_404C00+25Aj
		mov	eax, [ebp+var_34]
		push	eax
		mov	eax, ds:off_4060CC
		mov	eax, [eax]
		call	eax


loc_404E7A:				; CODE XREF: sub_404C00+26Bj
		mov	bl, [ebp+var_21]
		retn
; ---------------------------------------------------------------------------


loc_404E7E:				; DATA XREF: sub_404C00+A1o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404E56
; ---------------------------------------------------------------------------


loc_404E85:				; CODE XREF: sub_404C00+94j
					; DATA XREF: sub_404C00+251o
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404EA7


loc_404E92:				; CODE XREF: sub_404C00+2A5j
		lea	eax, [ebp+var_C]
		mov	edx, 2
		call	sub_40313C
		retn
; ---------------------------------------------------------------------------


loc_404EA0:				; DATA XREF: sub_404C00+28o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404E92
; ---------------------------------------------------------------------------


loc_404EA7:				; CODE XREF: sub_404C00+29Fj
					; DATA XREF: sub_404C00+28Do
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_404C00	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_404EB4	proc near		; DATA XREF: CODE:00405990o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404ED9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076AC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404EE0


loc_404ED8:				; CODE XREF: sub_404EB4+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404ED9:				; DATA XREF: sub_404EB4+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404ED8
; ---------------------------------------------------------------------------


loc_404EE0:				; CODE XREF: sub_404EB4:loc_404ED8j
					; DATA XREF: sub_404EB4+1Fo
		pop	ebp
		retn
sub_404EB4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404EE4	proc near		; DATA XREF: CODE:0040598Co
		sub	ds:dword_4076AC, 1
		retn
sub_404EE4	endp


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

; Attributes: bp-based frame


sub_404EEC	proc near		; DATA XREF: CODE:00405998o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404F11
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076B0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404F18


loc_404F10:				; CODE XREF: sub_404EEC+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404F11:				; DATA XREF: sub_404EEC+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404F10
; ---------------------------------------------------------------------------


loc_404F18:				; CODE XREF: sub_404EEC:loc_404F10j
					; DATA XREF: sub_404EEC+1Fo
		pop	ebp
		retn
sub_404EEC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404F1C	proc near		; DATA XREF: CODE:00405994o
		sub	ds:dword_4076B0, 1
		retn
sub_404F1C	endp


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

; Attributes: bp-based frame


sub_404F24	proc near		; DATA XREF: CODE:004059A0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404F49
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076B4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404F50


loc_404F48:				; CODE XREF: sub_404F24+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404F49:				; DATA XREF: sub_404F24+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404F48
; ---------------------------------------------------------------------------


loc_404F50:				; CODE XREF: sub_404F24:loc_404F48j
					; DATA XREF: sub_404F24+1Fo
		pop	ebp
		retn
sub_404F24	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404F54	proc near		; DATA XREF: CODE:0040599Co
		sub	ds:dword_4076B4, 1
		retn
sub_404F54	endp


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

; Attributes: bp-based frame


sub_404F5C	proc near		; DATA XREF: CODE:004059A8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404F81
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076B8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404F88


loc_404F80:				; CODE XREF: sub_404F5C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404F81:				; DATA XREF: sub_404F5C+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404F80
; ---------------------------------------------------------------------------


loc_404F88:				; CODE XREF: sub_404F5C:loc_404F80j
					; DATA XREF: sub_404F5C+1Fo
		pop	ebp
		retn
sub_404F5C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404F8C	proc near		; DATA XREF: CODE:004059A4o
		sub	ds:dword_4076B8, 1
		retn
sub_404F8C	endp


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

; Attributes: bp-based frame


sub_404F94	proc near		; CODE XREF: sub_405018+2Dp

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		xor	ecx, ecx
		mov	[ebp+var_8], ecx
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4032E8
		xor	eax, eax
		push	ebp
		push	offset loc_405008
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_40329C
		mov	edi, eax
		cmp	edi, 1
		jl	short loc_404FED


loc_404FCC:				; CODE XREF: sub_404F94+57j
		mov	eax, [ebp+var_4]
		mov	bl, [eax+edi-1]
		lea	eax, [ebp+var_8]
		mov	edx, ebx
		inc	edx
		call	sub_403238
		mov	edx, [ebp+var_8]
		mov	eax, esi
		call	sub_4032A4
		dec	edi
		test	edi, edi
		jnz	short loc_404FCC


loc_404FED:				; CODE XREF: sub_404F94+36j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40500F


loc_404FFA:				; CODE XREF: sub_404F94+79j
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_40313C
		retn
; ---------------------------------------------------------------------------


loc_405008:				; DATA XREF: sub_404F94+1Eo
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_404FFA
; ---------------------------------------------------------------------------


loc_40500F:				; CODE XREF: sub_404F94+73j
					; DATA XREF: sub_404F94+61o
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_404F94	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_405018	proc near		; CODE XREF: sub_4050C0+34p
					; sub_4050C0+51p ...

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		xor	ecx, ecx
		mov	[ebp+var_8], ecx
		mov	ebx, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4032E8
		xor	eax, eax
		push	ebp
		push	offset loc_405081
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_8]
		mov	eax, [ebp+var_4]
		call	sub_404F94
		mov	edx, [ebp+var_8]
		lea	eax, [ebp+var_4]
		call	sub_4031B0
		mov	eax, [ebp+var_4]
		call	sub_4032F8
		mov	edx, eax
		mov	eax, ebx
		call	sub_403248
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405088


loc_405073:				; CODE XREF: sub_405018+6Ej
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_40313C
		retn
; ---------------------------------------------------------------------------


loc_405081:				; DATA XREF: sub_405018+1Co
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_405073
; ---------------------------------------------------------------------------


loc_405088:				; CODE XREF: sub_405018+68j
					; DATA XREF: sub_405018+56o
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_405018	endp

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

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

; Attributes: bp-based frame


sub_405090	proc near		; DATA XREF: CODE:004059B0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4050B5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_407730
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4050BC


loc_4050B4:				; CODE XREF: sub_405090+2Aj
		retn
; ---------------------------------------------------------------------------


loc_4050B5:				; DATA XREF: sub_405090+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_4050B4
; ---------------------------------------------------------------------------


loc_4050BC:				; CODE XREF: sub_405090:loc_4050B4j
					; DATA XREF: sub_405090+1Fo
		pop	ebp
		retn
sub_405090	endp

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

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

; Attributes: bp-based frame


sub_4050C0	proc near		; DATA XREF: CODE:004059ACo

var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
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
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 10h


loc_4050C8:				; CODE XREF: sub_4050C0+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_4050C8
		push	ecx
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_405541
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		sub	ds:dword_407730, 1
		jnb	loc_405523
		lea	edx, [ebp+var_4]
		mov	eax, offset dword_405558
		call	sub_405018
		mov	eax, [ebp+var_4]
		call	sub_4032F8
		push	eax		; lpLibFileName
		call	LoadLibraryA	; LoadLibraryA
		mov	ebx, eax
		lea	edx, [ebp+var_8]
		mov	eax, offset dword_405570
		call	sub_405018
		mov	eax, [ebp+var_8]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076D8, eax
		lea	edx, [ebp+var_C]
		mov	eax, offset aXqnldlrrdbnqoc ; "xqnldLrrdbnqOc`dQ"
		call	sub_405018
		mov	eax, [ebp+var_C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076DC, eax
		lea	edx, [ebp+var_10]
		mov	eax, offset aXqnldlrrdbnqod ; "xqnldLrrdbnqOdshqV"
		call	sub_405018
		mov	eax, [ebp+var_10]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076BC, eax
		lea	edx, [ebp+var_14]
		mov	eax, offset aSwdsmnbcDqgssd ; "swdsmnBc`dqgSsdF"
		call	sub_405018
		mov	eax, [ebp+var_14]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076E0, eax
		lea	edx, [ebp+var_18]
		mov	eax, offset aSwdsmnbcDqgs_0 ; "swdsmnBc`dqgSsdR"
		call	sub_405018
		mov	eax, [ebp+var_18]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076D4, eax
		lea	edx, [ebp+var_1C]
		mov	eax, offset dword_4055F8
		call	sub_405018
		mov	eax, [ebp+var_1C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076E4, eax
		lea	edx, [ebp+var_20]
		mov	eax, offset dword_405610
		call	sub_405018
		mov	eax, [ebp+var_20]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076E8, eax
		lea	edx, [ebp+var_24]
		mov	eax, offset dword_405628
		call	sub_405018
		mov	eax, [ebp+var_24]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076C0, eax
		lea	edx, [ebp+var_28]
		mov	eax, offset aDbqtnrdqendyhr ; "dbqtnrdQendyhR"
		call	sub_405018
		mov	eax, [ebp+var_28]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076C4, eax
		lea	edx, [ebp+var_2C]
		mov	eax, offset dword_405658
		call	sub_405018
		mov	eax, [ebp+var_2C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076C8, eax
		lea	edx, [ebp+var_30]
		mov	eax, offset aDbqtnrdqjbnk ; "dbqtnrdQjbnK"
		call	sub_405018
		mov	eax, [ebp+var_30]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076CC, eax
		lea	edx, [ebp+var_34]
		mov	eax, offset aDbqtnrdqddqe ; "dbqtnrdQddqE"
		call	sub_405018
		mov	eax, [ebp+var_34]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076D0, eax
		lea	edx, [ebp+var_38]
		mov	eax, offset a@rdlMdbqtnrdql ; "@rdl`MdbqtnrdQltmD"
		call	sub_405018
		mov	eax, [ebp+var_38]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076EC, eax
		lea	edx, [ebp+var_3C]
		mov	eax, offset a@xqnsbdqhcldsr ; "@xqnsbdqhCldsrxRsdF"
		call	sub_405018
		mov	eax, [ebp+var_3C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076F0, eax
		lea	edx, [ebp+var_40]
		mov	eax, offset dword_4056D8
		call	sub_405018
		mov	eax, [ebp+var_40]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076F4, eax
		lea	edx, [ebp+var_44]
		mov	eax, offset a@xqnsbdqhcrvnc ; "@xqnsbdqhCrvncmhVsdF"
		call	sub_405018
		mov	eax, [ebp+var_44]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076F8, eax
		lea	edx, [ebp+var_48]
		mov	eax, offset aDcnlqnqqdsdr ; "dcnLqnqqDsdR"
		call	sub_405018
		mov	eax, [ebp+var_48]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_4076FC, eax
		lea	edx, [ebp+var_4C]
		mov	eax, offset a@dmhkcmLlnbsdf ; "@dmhKcm`llnBsdF"
		call	sub_405018
		mov	eax, [ebp+var_4C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407700, eax
		lea	edx, [ebp+var_50]
		mov	eax, offset dword_405740
		call	sub_405018
		mov	eax, [ebp+var_50]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407704, eax
		lea	edx, [ebp+var_54]
		mov	eax, offset dword_405754
		call	sub_405018
		mov	eax, [ebp+var_54]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407708, eax
		lea	edx, [ebp+var_58]
		mov	eax, offset dword_405768
		call	sub_405018
		mov	eax, [ebp+var_58]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_40770C, eax
		lea	edx, [ebp+var_5C]
		mov	eax, offset aDkhedshqv ; "dkhEdshqV"
		call	sub_405018
		mov	eax, [ebp+var_5C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407710, eax
		lea	edx, [ebp+var_60]
		mov	eax, offset dword_405790
		call	sub_405018
		mov	eax, [ebp+var_60]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407714, eax
		lea	edx, [ebp+var_64]
		mov	eax, offset aQdsmhnodkhesdr ; "qdsmhnOdkhEsdR"
		call	sub_405018
		mov	eax, [ebp+var_64]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407718, eax
		lea	edx, [ebp+var_68]
		mov	eax, offset dword_4057BC
		call	sub_405018
		mov	eax, [ebp+var_68]
		call	sub_4032F8
		push	eax		; lpLibFileName
		call	LoadLibraryA	; LoadLibraryA
		mov	ebx, eax
		lea	edx, [ebp+var_6C]
		mov	eax, offset aRsrhwdgsOxqnsb ; "rsrhwDgs`OxqnsbdqhCdqtRdj`L"
		call	sub_405018
		mov	eax, [ebp+var_6C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_40771C, eax
		lea	edx, [ebp+var_70]
		mov	eax, offset dword_4057F8
		call	sub_405018
		mov	eax, [ebp+var_70]
		call	sub_4032F8
		push	eax		; lpLibFileName
		call	LoadLibraryA	; LoadLibraryA
		mov	ebx, eax
		lea	edx, [ebp+var_74]
		mov	eax, offset dword_40580C
		call	sub_405018
		mov	eax, [ebp+var_74]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407720, eax
		lea	edx, [ebp+var_78]
		mov	eax, offset a@dkaStbdwdcmhe ; "@dka`stbdwDcmhE"
		call	sub_405018
		mov	eax, [ebp+var_78]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407724, eax
		lea	edx, [ebp+var_7C]
		mov	eax, offset a@gsOqdcknekHbd ; "@gs`OqdcknEk`hbdoRsdFGR"
		call	sub_405018
		mov	eax, [ebp+var_7C]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_407728, eax
		lea	edx, [ebp+var_80]
		mov	eax, offset dword_40585C
		call	sub_405018
		mov	eax, [ebp+var_80]
		call	sub_4032F8
		push	eax		; lpLibFileName
		call	LoadLibraryA	; LoadLibraryA
		mov	ebx, eax
		lea	edx, [ebp+var_84]
		mov	eax, offset a@dkhenscNkmvnc ; "@dkhEnSc`nkmvnCKQT"
		call	sub_405018
		mov	eax, [ebp+var_84]
		call	sub_4032F8
		push	eax		; lpProcName
		push	ebx		; hModule
		call	GetProcAddress	; GetProcAddress
		mov	ds:dword_40772C, eax


loc_405523:				; CODE XREF: sub_4050C0+26j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405548


loc_405530:				; CODE XREF: sub_4050C0+486j
		lea	eax, [ebp+var_84]
		mov	edx, 21h
		call	sub_40313C
		retn
; ---------------------------------------------------------------------------


loc_405541:				; DATA XREF: sub_4050C0+14o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_405530
; ---------------------------------------------------------------------------


loc_405548:				; CODE XREF: sub_4050C0+480j
					; DATA XREF: sub_4050C0+46Bo
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4050C0	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 0Ch
dword_405558	dd 2D636B6Bh, 646B3231h, 6A64716Dh, 0		dd 0FFFFFFFFh, 0Ch
dword_405570	dd 71646063h, 6C645367h, 51647274h, 0		dd 0FFFFFFFFh, 11h
aXqnldlrrdbnqoc	db 'xqnldLrrdbnqOc`dQ',0 ; DATA XREF: sub_4050C0+6Do
		align 4
		dd 0FFFFFFFFh, 12h
aXqnldlrrdbnqod	db 'xqnldLrrdbnqOdshqV',0 ; DATA XREF: sub_4050C0+8Eo
		align 4
		dd 0FFFFFFFFh, 10h
aSwdsmnbcDqgssd	db 'swdsmnBc`dqgSsdF',0 ; DATA XREF: sub_4050C0+AFo
		align 4
		dd 0FFFFFFFFh, 10h
aSwdsmnbcDqgs_0	db 'swdsmnBc`dqgSsdR',0 ; DATA XREF: sub_4050C0+D0o
		align 10h
		dd 0FFFFFFFFh, 0Eh
dword_4055F8	dd 64727240h, 4F716E62h, 64607364h, 4271h, 0FFFFFFFFh
					; DATA XREF: sub_4050C0+F1o
		dd 0Eh
dword_405610	dd 6E624477h, 6B406B6Bh, 71737460h, 5568h, 0FFFFFFFFh
					; DATA XREF: sub_4050C0+112o
		dd 0Dh
dword_405628	dd 71626440h, 64726E74h, 686D6351h, 45h, 0FFFFFFFFh, 0Eh
					; DATA XREF: sub_4050C0+133o
aDbqtnrdqendyhr	db 'dbqtnrdQendyhR',0   ; DATA XREF: sub_4050C0+154o
		align 10h
		dd 0FFFFFFFFh, 0Ch
dword_405658	dd 74716264h, 5164726Eh, 4B6E6063h, 0		dd 0FFFFFFFFh, 0Ch
aDbqtnrdqjbnk	db 'dbqtnrdQjbnK',0     ; DATA XREF: sub_4050C0+196o
		align 10h
		dd 0FFFFFFFFh, 0Ch
aDbqtnrdqddqe	db 'dbqtnrdQddqE',0     ; DATA XREF: sub_4050C0+1B7o
		align 4
		dd 0FFFFFFFFh, 12h
a@rdlMdbqtnrdql	db '@rdl`MdbqtnrdQltmD',0 ; DATA XREF: sub_4050C0+1D8o
		align 4
		dd 0FFFFFFFFh, 13h
a@xqnsbdqhcldsr	db '@xqnsbdqhCldsrxRsdF',0 ; DATA XREF: sub_4050C0+1F9o
		dd 0FFFFFFFFh, 0Ch
dword_4056D8	dd 60736740h, 646C6F4Fh, 46647353h, 0		dd 0FFFFFFFFh, 14h
a@xqnsbdqhcrvnc	db '@xqnsbdqhCrvncmhVsdF',0 ; DATA XREF: sub_4050C0+23Bo
		align 4
		dd 0FFFFFFFFh, 0Ch
aDcnlqnqqdsdr	db 'dcnLqnqqDsdR',0     ; DATA XREF: sub_4050C0+25Co
		align 10h
		dd 0FFFFFFFFh, 0Fh
a@dmhkcmLlnbsdf	db '@dmhKcm`llnBsdF',0  ; DATA XREF: sub_4050C0+27Do
		dd 0FFFFFFFFh, 0Bh
dword_405740	dd 686B6440h, 64736445h, 43646Bh, 0FFFFFFFFh, 0Bh
					; DATA XREF: sub_4050C0+29Eo
dword_405754	dd 686B6440h, 60736445h, 427164h, 0FFFFFFFFh, 8dword_405768	dd 45686B64h, 51646063h, 0		dd 0FFFFFFFFh, 9
aDkhedshqv	db 'dkhEdshqV',0        ; DATA XREF: sub_4050C0+301o
		align 4
		dd 0FFFFFFFFh, 0Bh
dword_405790	dd 6D636B64h, 72644760h, 426B6Eh, 0FFFFFFFFh, 0Eh
					; DATA XREF: sub_4050C0+322o
aQdsmhnodkhesdr	db 'qdsmhnOdkhEsdR',0   ; DATA XREF: sub_4050C0+343o
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_4057BC	dd 2D636B6Bh, 64676B6Fh, 686C6066h, 0		dd 0FFFFFFFFh, 1Bh
aRsrhwdgsOxqnsb	db 'rsrhwDgs`OxqnsbdqhCdqtRdj`L',0 ; DATA XREF: sub_4050C0+381o
		dd 0FFFFFFFFh, 0Bh
dword_4057F8	dd 2D636B6Bh, 6B6B3231h, 726764h, 0FFFFFFFFh, 0Dh
					; DATA XREF: sub_4050C0+3A2o
dword_40580C	dd 74736440h, 44776462h, 67646B6Bh, 52h, 0FFFFFFFFh, 0Fh
					; DATA XREF: sub_4050C0+3BFo
a@dkaStbdwdcmhe	db '@dka`stbdwDcmhE',0  ; DATA XREF: sub_4050C0+3E0o
		dd 0FFFFFFFFh, 17h
a@gsOqdcknekHbd	db '@gs`OqdcknEk`hbdoRsdFGR',0 ; DATA XREF: sub_4050C0+401o
		dd 0FFFFFFFFh, 0Ah
dword_40585C	dd 2D636B6Bh, 6B6C6E6Dh, 7471h,	0FFFFFFFFh, 12ha@dkhenscNkmvnc	db '@dkhEnSc`nkmvnCKQT',0 ; DATA XREF: sub_4050C0+442o
		align 4

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

; Attributes: bp-based frame


sub_405884	proc near		; DATA XREF: CODE:004059B8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4058A9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_407734
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4058B0


loc_4058A8:				; CODE XREF: sub_405884+2Aj
		retn
; ---------------------------------------------------------------------------


loc_4058A9:				; DATA XREF: sub_405884+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_4058A8
; ---------------------------------------------------------------------------


loc_4058B0:				; CODE XREF: sub_405884:loc_4058A8j
					; DATA XREF: sub_405884+1Fo
		pop	ebp
		retn
sub_405884	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4058B4	proc near		; DATA XREF: CODE:004059B4o
		sub	ds:dword_407734, 1
		retn
sub_4058B4	endp


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



sub_4058BC	proc near		; CODE XREF: CODE:004059F6p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
Msg		= tagMSG ptr -20h

		push	ebx
		add	esp, 0FFFFFFE4h
		mov	ebx, eax
		call	GetTickCount	; GetTickCount
		add	ebx, eax
		jmp	short loc_405907
; ---------------------------------------------------------------------------


loc_4058CB:				; CODE XREF: sub_4058BC+62j
					; sub_4058BC+68j
		push	1		; wRemoveMsg
		push	0		; wMsgFilterMax
		push	0		; wMsgFilterMin
		push	0		; hWnd
		lea	eax, [esp+30h+Msg]
		push	eax		; lpMsg
		call	PeekMessageA	; PeekMessageA
		test	eax, eax
		jz	short loc_405907
		cmp	[esp+20h+Msg.message], 12h
		jnz	short loc_4058F4
		mov	eax, [esp+20h+Msg.wParam]
		push	eax		; nExitCode
		call	PostQuitMessage	; PostQuitMessage
		jmp	short loc_405926
; ---------------------------------------------------------------------------


loc_4058F4:				; CODE XREF: sub_4058BC+2Aj
		push	esp		; lpMsg
		call	TranslateMessage	; TranslateMessage
		push	esp		; lpMsg
		call	DispatchMessageA	; DispatchMessageA
		push	64h		; dwMilliseconds
		call	Sleep	; Sleep


loc_405907:				; CODE XREF: sub_4058BC+Dj
					; sub_4058BC+23j
		call	GetTickCount	; GetTickCount
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, ebx
		cdq
		cmp	edx, [esp+28h+var_24]
		jnz	short loc_405922
		cmp	eax, [esp+28h+var_28]
		pop	edx
		pop	eax
		ja	short loc_4058CB
		jmp	short loc_405926
; ---------------------------------------------------------------------------


loc_405922:				; CODE XREF: sub_4058BC+5Bj
		pop	edx
		pop	eax
		jg	short loc_4058CB


loc_405926:				; CODE XREF: sub_4058BC+36j
					; sub_4058BC+64j
		add	esp, 1Ch
		pop	ebx
		retn
sub_4058BC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_40592C	proc near		; DATA XREF: CODE:004059C0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40594B
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405952


loc_40594A:				; CODE XREF: sub_40592C+24j
		retn
; ---------------------------------------------------------------------------


loc_40594B:				; DATA XREF: sub_40592C+6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_40594A
; ---------------------------------------------------------------------------


loc_405952:				; CODE XREF: sub_40592C:loc_40594Aj
					; DATA XREF: sub_40592C+19o
		pop	ebp
		retn
sub_40592C	endp

; ---------------------------------------------------------------------------
dword_405954	dd 0Dh				dd offset off_40595C
off_40595C	dd offset loc_403D94	; DATA XREF: CODE:00405958o
		dd offset sub_403D64
		dd offset sub_403B88
		dd offset sub_403B34
		dd offset sub_403DCC
		dd offset sub_403D9C
		dd offset sub_403E5C
		dd offset sub_403E2C
		dd offset sub_40424C
		dd offset sub_40421C
		dd offset sub_404BE0
		dd offset sub_404BB0
		dd offset sub_404EE4
		dd offset sub_404EB4
		dd offset sub_404F1C
		dd offset sub_404EEC
		dd offset sub_404F54
		dd offset sub_404F24
		dd offset sub_404F8C
		dd offset sub_404F5C
		dd offset sub_4050C0
		dd offset sub_405090
		dd offset sub_4058B4
		dd offset sub_405884
		align 10h
		dd offset sub_40592C
; ---------------------------------------------------------------------------

		public start
start:
		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		xor	eax, eax
		mov	[ebp-20h], eax
		mov	[ebp-14h], eax
		mov	[ebp-18h], eax
		mov	[ebp-1Ch], eax
		mov	eax, offset dword_405954
		call	sub_403D20
		xor	eax, eax
		push	ebp
		push	offset loc_405B2F
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, 1F4h
		call	sub_4058BC
		call	sub_4046BC
		xor	eax, eax
		mov	ds:dword_407844, eax
		mov	edx, offset dword_405B3C
		mov	eax, offset dword_40773C
		call	sub_403EA4
		mov	edx, offset byte_407740
		mov	ecx, ds:dword_40773C
		call	sub_402570
		cmp	ds:byte_407742,	0
		jnz	loc_405B14
		mov	edx, offset dword_405B40
		mov	eax, offset dword_407844
		call	sub_403EA4
		mov	ebx, eax
		mov	eax, offset dword_407738
		mov	edx, ds:dword_407844
		call	sub_403350
		test	ebx, ebx
		jnz	short loc_405A5F
		push	0
		call	ExitProcess_0


loc_405A5F:				; CODE XREF: CODE:00405A56j
		mov	eax, ds:dword_407738
		call	sub_40329C
		push	eax
		mov	eax, offset dword_407738
		call	sub_403348
		mov	edx, eax
		mov	eax, ebx
		pop	ecx
		call	sub_402570
		cmp	ds:byte_407740,	0
		jz	short loc_405AC3
		lea	edx, [ebp-1Ch]
		mov	eax, offset dword_407744
		call	sub_404180
		mov	eax, [ebp-1Ch]
		call	sub_4032F8
		mov	edx, eax
		lea	eax, [ebp-18h]
		call	sub_403248
		mov	edx, [ebp-18h]
		lea	ecx, [ebp-14h]
		mov	eax, ds:dword_407738
		call	sub_403F04
		mov	edx, [ebp-14h]
		mov	eax, offset dword_407738
		call	sub_40316C


loc_405AC3:				; CODE XREF: CODE:00405A85j
		mov	eax, ds:dword_407738
		call	sub_40329C
		call	sub_40246C
		mov	ebx, eax
		mov	eax, ds:dword_407738
		call	sub_40329C
		push	eax
		mov	eax, offset dword_407738
		call	sub_403348
		mov	edx, ebx
		pop	ecx
		call	sub_402570
		push	1
		lea	edx, [ebp-20h]
		xor	eax, eax
		call	sub_40269C
		mov	edx, [ebp-20h]
		xor	ecx, ecx
		mov	eax, ebx
		call	sub_404C00
		test	al, al
		jz	short loc_405B14
		mov	eax, ebx
		call	sub_40248C


loc_405B14:				; CODE XREF: CODE:00405A2Dj
					; CODE:00405B0Bj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405B36


loc_405B21:				; CODE XREF: CODE:00405B34j
		lea	eax, [ebp-20h]
		mov	edx, 4
		call	sub_40313C
		retn
; ---------------------------------------------------------------------------


loc_405B2F:				; DATA XREF: CODE:004059E6o
		jmp	loc_402BB4
; ---------------------------------------------------------------------------
		jmp	short loc_405B21
; ---------------------------------------------------------------------------


loc_405B36:				; CODE XREF: CODE:00405B2Ej
					; DATA XREF: CODE:00405B1Co
		pop	ebx
		call	sub_403028
; ---------------------------------------------------------------------------
dword_405B3C	dd 53h		dword_405B40	dd 46h,	2Fh dup(0)CODE		ends

; Section 2. (virtual address 00006000)
; Virtual size			: 00000108 (	264.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00005000
; 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 406000h
dword_406000	dd 0							; sub_402F6C+2w ...
dword_406004	dd 0							; sub_402F10+37r ...
byte_406008	db 2			; DATA XREF: sub_403B88+Dw
		db 8Dh,	40h, 0
dword_40600C	dd 0		dword_406010	dd 0		word_406014	dw 1332h		; DATA XREF: sub_4028BC+6r
					; sub_4028BC:loc_402934r ...
		dw 0C08Bh
byte_406018	db 0			; DATA XREF: sub_402998r sub_4029B4r ...
		db 8Dh,	40h, 0
byte_40601C	db 0			; DATA XREF: sub_402E10-336r
					; sub_402E10:loc_402B15r
		db 8Dh,	40h, 0
byte_406020	db 0			; DATA XREF: sub_402F9C:loc_402FFDr
		db 8Dh,	40h, 0
dword_406024	dd 0		dword_406028	dd 0		off_40602C	dd offset sub_401E98	; DATA XREF: sub_40246C+5r
					; sub_4024AC+3Fr
off_406030	dd offset sub_402028	; DATA XREF: sub_40248C+5r
					; sub_4024AC+26r
off_406034	dd offset sub_4023A8	; DATA XREF: sub_4024AC+Dr
byte_406038	db 0			; DATA XREF: sub_402508+36r
aRsu		db 'клхивохмншьзыйэщчъЮАЦ',0
aFxn@		db 'ДЕ█@',0
; char Caption[]
Caption		db 'Error',0            ; DATA XREF: sub_402F9C+6Co
		dw 0C08Bh
; char Text[]
Text		db 'Runtime error     at 00000000',0 ; DATA XREF: sub_402F10+3o
					; sub_402F9C+32o ...
		dw 0C08Bh
byte_40607C	db 30h			; DATA XREF: sub_402F10+41r
		db 31h,	32h, 33h
		dd 37363534h, 42413938h, 46454443h
; DWORD	TlsIndex
TlsIndex	dd 0FFFFFFFFh		; DATA XREF: sub_403C90+Cr
					; sub_403C90+37r ...
dword_406090	dd 0							; sub_403D20+33o
dword_406094	dd 0		dword_406098	dd 0		dword_40609C	dd 0				dd 2 dup(0)
dword_4060A8	dd 1				dd 10h,	2, 20h,	4, 40h,	4, 40h
off_4060C8	dd offset dword_40767C	; DATA XREF: sub_4046BC+190r
					; sub_4046BC+324r ...
off_4060CC	dd offset dword_40769C	; DATA XREF: sub_4046BC+308r
					; sub_404C00+271r
off_4060D0	dd offset dword_407678	; DATA XREF: sub_4046BC+21Dr
					; sub_404C00+170r ...
off_4060D4	dd offset dword_407688	; DATA XREF: sub_4046BC+76r
					; sub_404C00+103r
off_4060D8	dd offset dword_407698	; DATA XREF: sub_4046BC+2D9r
					; sub_404C00+89r
off_4060DC	dd offset dword_407690	; DATA XREF: sub_4046BC+27Br
					; sub_404C00+C1r
off_4060E0	dd offset dword_407680	; DATA XREF: sub_4046BC+1BFr
					; sub_404C00+143r
off_4060E4	dd offset dword_40766C	; DATA XREF: sub_4046BC+103r
off_4060E8	dd offset dword_407670	; DATA XREF: sub_4046BC+132r
off_4060EC	dd offset dword_407668	; DATA XREF: sub_4046BC+D4r
off_4060F0	dd offset dword_407684	; DATA XREF: sub_4046BC+1EEr
					; sub_404C00+1E9r
off_4060F4	dd offset dword_40768C	; DATA XREF: sub_4046BC+24Cr
					; sub_404C00+EAr
off_4060F8	dd offset dword_407674	; DATA XREF: sub_4046BC+161r
off_4060FC	dd offset dword_4076A0	; DATA XREF: sub_4046BC+31Br
					; sub_404C00+262r
off_406100	dd offset dword_407694	; DATA XREF: sub_4046BC+2AAr
					; sub_404C00+237r
off_406104	dd offset dword_407664	; DATA XREF: sub_4046BC+A5r
		align 100h
DATA		ends

; Section 3. (virtual address 00007000)
; Virtual size			: 00000849 (   2121.)
; Section size in file		: 00000000 (	  0.)
; Offset to raw	data for section: 00005200
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
BSS		segment	para public '' use32
		assume cs:BSS
		;org 407000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
dword_407000	dd ?		dword_407004	dd ?		dword_407008	dd ?							; sub_402508+16r
dword_40700C	dd ?							; CODE:00402D80r
dword_407010	dd ?							; sub_4029B4+16r ...
dword_407014	dd ?							; CODE:00402D68r ...
dword_407018	dd ?							; sub_403028+B1r
dword_40701C	dd ?		dword_407020	dd ?		byte_407024	db ?			; DATA XREF: sub_402ED0+33w
		align 4
dword_407028	dd ?		dword_40702C	dd ?		dword_407030	dd ?		byte_407034	db ?			; DATA XREF: sub_402F9C+1r
byte_407035	db ?			; DATA XREF: sub_4017AC+1Br
					; sub_4017AC:loc_40184Er ...
byte_407036	db ?			; DATA XREF: sub_403B88+28w
		align 4
dword_407038	dd ?							; sub_403B34+19o
word_40703C	dw ?			; DATA XREF: sub_403B88+4Cw
		align 10h
		dd 71h dup(?)
dword_407204	dd ?							; sub_403B34+23o
word_407208	dw ?			; DATA XREF: sub_402F9C+Ar
					; sub_403B88+55w
		align 10h
dword_407210	dd ?				align 10h
dword_407220	dd ?				dd 6Bh dup(?)
dword_4073D0	dd ?		word_4073D4	dw ?			; DATA XREF: sub_403B88+5Ew
		align 4
		dd 71h dup(?)
dword_40759C	dd ?							; sub_401DA4+92w ...
dword_4075A0	dd ?							; sub_401DA4+9Bw ...
dword_4075A4	dd ?							; sub_403B88w
dword_4075A8	dd ?							; sub_403B88+B2w ...
byte_4075AC	db ?			; DATA XREF: sub_4017AC+8Ew
					; sub_4017AC:loc_401869r ...
		align 10h
dword_4075B0	dd ?							; sub_4014EC+63w ...
; struct _RTL_CRITICAL_SECTION CriticalSection
CriticalSection	_RTL_CRITICAL_SECTION <?> ; DATA XREF: sub_4017AC+11o
					; sub_4017AC+24o ...
; HLOCAL dword_4075CC
dword_4075CC	dd ?							; sub_401120+2Aw ...
dword_4075D0	dd ?							; sub_4011A8+Ar ...
dword_4075D4	dd ?							; sub_401328+51o ...
		dd 3 dup(?)
dword_4075E4	dd 4 dup(?)						; sub_4015FC+Eo ...
dword_4075F4	dd ?		dword_4075F8	dd ?				align 10h
dword_407600	dd ?							; sub_401950+1r ...
dword_407604	dd ?		dword_407608	dd ?							; sub_401C40+2Er ...
; HLOCAL hMem
hMem		dd ?			; DATA XREF: sub_4017AC+58w
					; sub_4017AC+5Dr ...
dword_407610	dd ?							; sub_401870+81o ...
		align 10h
dword_407620	dd ?							; sub_402F6C+Do ...
dword_407624	dd ?							; sub_402DE8+2r
dword_407628	dd ?							; sub_402ED0+14w
dword_40762C	dd ?							; sub_402ED0+1Bw
dword_407630	dd ?				dd 6 dup(?)
byte_40764C	db ?			; DATA XREF: sub_403CD4r
		align 10h
dword_407650	dd ?							; sub_403D20+16r ...
dword_407654	dd ?							; CODE:loc_403D94w
dword_407658	dd ?		dword_40765C	dd ?							; sub_403DCCw
dword_407660	dd ?							; sub_403E5Cw
dword_407664	dd ?							; DATA:off_406104o
dword_407668	dd ?							; DATA:off_4060ECo
dword_40766C	dd ?							; DATA:off_4060E4o
dword_407670	dd ?							; DATA:off_4060E8o
dword_407674	dd ?							; DATA:off_4060F8o
dword_407678	dd ?		dword_40767C	dd ?		dword_407680	dd ?		dword_407684	dd ?		dword_407688	dd ?		dword_40768C	dd ?		dword_407690	dd ?		dword_407694	dd ?		dword_407698	dd ?		dword_40769C	dd ?		dword_4076A0	dd ?		dword_4076A4	dd ?							; sub_40424Cw
dword_4076A8	dd ?							; sub_404BE0w
dword_4076AC	dd ?							; sub_404EE4w
dword_4076B0	dd ?							; sub_404F1Cw
dword_4076B4	dd ?							; sub_404F54w
dword_4076B8	dd ?							; sub_404F8Cw
dword_4076BC	dd ?		dword_4076C0	dd ?		dword_4076C4	dd ?		dword_4076C8	dd ?		dword_4076CC	dd ?		dword_4076D0	dd ?		dword_4076D4	dd ?		dword_4076D8	dd ?		dword_4076DC	dd ?		dword_4076E0	dd ?		dword_4076E4	dd ?		dword_4076E8	dd ?		dword_4076EC	dd ?		dword_4076F0	dd ?		dword_4076F4	dd ?		dword_4076F8	dd ?		dword_4076FC	dd ?		dword_407700	dd ?		dword_407704	dd ?		dword_407708	dd ?		dword_40770C	dd ?		dword_407710	dd ?		dword_407714	dd ?		dword_407718	dd ?		dword_40771C	dd ?		dword_407720	dd ?		dword_407724	dd ?		dword_407728	dd ?		dword_40772C	dd ?		dword_407730	dd ?							; sub_4050C0+1Fw
dword_407734	dd ?							; sub_4058B4w
dword_407738	dd ?							; CODE:loc_405A5Fr ...
dword_40773C	dd ?							; CODE:00405A1Br
byte_407740	db ?			; DATA XREF: CODE:00405A16o
					; CODE:00405A7Er
		align 2
byte_407742	db ?			; DATA XREF: CODE:00405A26r
		align 4
dword_407744	dd 40h dup(?)	dword_407844	dd ?							; CODE:00405A38o ...
		align 200h
BSS		ends

;
; Imports from kernel32.dll
;
; Section 4. (virtual address 00008000)
; Virtual size			: 000004F8 (   1272.)
; Section size in file		: 00000600 (   1536.)
; Offset to raw	data for section: 00005200
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Externs
; _idata
; void __stdcall DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn __imp_DeleteCriticalSection:dword	; DATA XREF: DeleteCriticalSectionr
; void __stdcall LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn __imp_LeaveCriticalSection:dword ; DATA XREF: LeaveCriticalSectionr
; void __stdcall EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn __imp_EnterCriticalSection:dword ; DATA XREF: EnterCriticalSectionr
; void __stdcall InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn __imp_InitializeCriticalSection:dword
					; DATA XREF: InitializeCriticalSectionr
; BOOL __stdcall VirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType)
		extrn __imp_VirtualFree:dword ;	DATA XREF: VirtualFreer
; LPVOID __stdcall VirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect)
		extrn __imp_VirtualAlloc:dword ; DATA XREF: VirtualAllocr
; HLOCAL __stdcall LocalFree(HLOCAL hMem)
		extrn __imp_LocalFree:dword ; DATA XREF: LocalFreer
; HLOCAL __stdcall LocalAlloc(UINT uFlags, SIZE_T uBytes)
		extrn __imp_LocalAlloc:dword ; DATA XREF: LocalAllocr
; DWORD	__stdcall GetVersion()
		extrn __imp_GetVersion:dword ; DATA XREF: GetVersionr
; DWORD	__stdcall GetCurrentThreadId()
		extrn __imp_GetCurrentThreadId:dword ; DATA XREF: GetCurrentThreadIdr
; LCID __stdcall GetThreadLocale()
		extrn __imp_GetThreadLocale:dword ; DATA XREF: GetThreadLocaler
; void __stdcall GetStartupInfoA(LPSTARTUPINFOA	lpStartupInfo)
		extrn __imp_GetStartupInfoA:dword ; DATA XREF: GetStartupInfoAr
; DWORD	__stdcall GetModuleFileNameA(HMODULE hModule, LPCH lpFilename, DWORD nSize)
		extrn __imp_GetModuleFileNameA:dword ; DATA XREF: GetModuleFileNameAr
; int __stdcall	GetLocaleInfoA(LCID Locale, LCTYPE LCType, LPSTR lpLCData, int cchData)
		extrn __imp_GetLocaleInfoA:dword ; DATA	XREF: GetLocaleInfoAr
; LPSTR	__stdcall GetCommandLineA()
		extrn __imp_GetCommandLineA:dword ; DATA XREF: GetCommandLineAr
; BOOL __stdcall FreeLibrary(HMODULE hLibModule)
		extrn __imp_FreeLibrary:dword ;	DATA XREF: FreeLibraryr
; void __stdcall ExitProcess(UINT uExitCode)
		extrn __imp_ExitProcess:dword ;	DATA XREF: ExitProcessr
; BOOL __stdcall WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,	LPDWORD	lpNumberOfBytesWritten,	LPOVERLAPPED lpOverlapped)
		extrn __imp_WriteFile:dword ; DATA XREF: WriteFiler
; LONG __stdcall UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
		extrn __imp_UnhandledExceptionFilter:dword
					; DATA XREF: UnhandledExceptionFilterr
		extrn __imp_RtlUnwind:dword ; DATA XREF: RtlUnwindr
; void __stdcall RaiseException(DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, const ULONG_PTR *lpArguments)
		extrn __imp_RaiseException:dword ; DATA	XREF: RaiseExceptionr
; HANDLE __stdcall GetStdHandle(DWORD nStdHandle)
		extrn __imp_GetStdHandle:dword ; DATA XREF: GetStdHandler

;
; Imports from user32.dll
;
; int __stdcall	GetKeyboardType(int nTypeFlag)
		extrn __imp_GetKeyboardType:dword ; DATA XREF: GetKeyboardTyper
; int __stdcall	MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption,	UINT uType)
		extrn __imp_MessageBoxA:dword ;	DATA XREF: MessageBoxAr
; LPSTR	__stdcall CharNextA(LPCSTR lpsz)
		extrn __imp_CharNextA:dword ; DATA XREF: CharNextAr

;
; Imports from advapi32.dll
;
; LSTATUS __stdcall RegQueryValueExA(HKEY hKey,	LPCSTR lpValueName, LPDWORD lpReserved,	LPDWORD	lpType,	LPBYTE lpData, LPDWORD lpcbData)
		extrn __imp_RegQueryValueExA:dword ; DATA XREF:	RegQueryValueExAr
; LSTATUS __stdcall RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY	phkResult)
		extrn __imp_RegOpenKeyExA:dword	; DATA XREF: RegOpenKeyExAr
; LSTATUS __stdcall RegCloseKey(HKEY hKey)
		extrn __imp_RegCloseKey:dword ;	DATA XREF: RegCloseKeyr

;
; Imports from oleaut32.dll
;
; void __stdcall SysFreeString(BSTR bstrString)
		extrn __imp_SysFreeString:dword	; DATA XREF: SysFreeStringr
; INT __stdcall	SysReAllocStringLen(BSTR *pbstr, const OLECHAR *psz, unsigned int len)
		extrn __imp_SysReAllocStringLen:dword ;	DATA XREF: SysReAllocStringLenr

;
; Imports from kernel32.dll
;
; BOOL __stdcall TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue)
		extrn __imp_TlsSetValue:dword ;	DATA XREF: TlsSetValuer
; LPVOID __stdcall TlsGetValue(DWORD dwTlsIndex)
		extrn __imp_TlsGetValue:dword ;	DATA XREF: TlsGetValuer
; HLOCAL __stdcall LocalAlloc_0(UINT uFlags, SIZE_T uBytes)
		extrn __imp_LocalAlloc_0:dword ; DATA XREF: LocalAlloc_0r
; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName)
		extrn __imp_GetModuleHandleA:dword ; DATA XREF:	GetModuleHandleAr

;
; Imports from kernel32.dll
;
; void __stdcall Sleep(DWORD dwMilliseconds)
		extrn __imp_Sleep:dword	; DATA XREF: Sleepr
; HMODULE __stdcall LoadLibraryA(LPCSTR	lpLibFileName)
		extrn __imp_LoadLibraryA:dword ; DATA XREF: LoadLibraryAr
; DWORD	__stdcall GetTickCount()
		extrn __imp_GetTickCount:dword ; DATA XREF: GetTickCountr
; FARPROC __stdcall GetProcAddress(HMODULE hModule, LPCSTR lpProcName)
		extrn __imp_GetProcAddress:dword ; DATA	XREF: GetProcAddressr
; DWORD	__stdcall GetLastError()
		extrn __imp_GetLastError:dword ; DATA XREF: GetLastErrorr
; void __stdcall ExitProcess_0(UINT uExitCode)
		extrn __imp_ExitProcess_0:dword	; DATA XREF: ExitProcess_0r

;
; Imports from user32.dll
;
; BOOL __stdcall TranslateMessage(const	MSG *lpMsg)
		extrn __imp_TranslateMessage:dword ; DATA XREF:	TranslateMessager
; void __stdcall PostQuitMessage(int nExitCode)
		extrn __imp_PostQuitMessage:dword ; DATA XREF: PostQuitMessager
; BOOL __stdcall PeekMessageA(LPMSG lpMsg, HWND	hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg)
		extrn __imp_PeekMessageA:dword ; DATA XREF: PeekMessageAr
; LRESULT __stdcall DispatchMessageA(const MSG *lpMsg)
		extrn __imp_DispatchMessageA:dword ; DATA XREF:	DispatchMessageAr

;
; Imports from kernel32.dll
;
; HMODULE __stdcall LoadLibraryA_0(LPCSTR lpLibFileName)
		extrn __imp_LoadLibraryA_0:dword ; DATA	XREF: LoadLibraryA_0r

; Section 5. (virtual address 00009000)
; Virtual size			: 00000008 (	  8.)
; Section size in file		: 00000000 (	  0.)
; Offset to raw	data for section: 00005800
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
_tls		segment	para public '' use32
		assume cs:_tls
		;org 409000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
TlsStart	dd 2 dup(?)		; DATA XREF: .rdata:TlsDirectoryo
TlsEnd		dd 7Eh dup(?)		; DATA XREF: .rdata:TlsEnd_ptro
_tls		ends

; Section 6. (virtual address 0000A000)
; Virtual size			: 00000018 (	 24.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00005800
; Flags	50000040: Data Shareable Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 40A000h
TlsDirectory	dd offset TlsStart
TlsEnd_ptr	dd offset TlsEnd
TlsIndex_ptr	dd offset TlsIndex
TlsCallbacks_ptr dd offset TlsSizeOfZeroFill
TlsSizeOfZeroFill dd 0			; DATA XREF: .rdata:TlsCallbacks_ptro
TlsCharacteristics dd 0
		align 200h
_rdata		ends


		end start